I see the problems below based on: I want (with Gerrit) to be able to code
review (ie get a second pair of eyes) on any code changes that happens to
certain branches.
Affected Version: 2.1.1.1
What steps will reproduce the problem?
2 use cases that should work but don't seem to:
A.
1. Make some Git history known to a Gerrit Git repository without having a
change for it (either pushing it without code review, or setup the repo
with an alternates/info that points to a store with that object, etc)
2. Try to push some commit object part of that Git history to a branch that
doesn't have the history (but has a common ancestor); example try to push
v2.6.33-rc1^{} to a branch that currently is at v2.6.32^{} but have the
repository setup with alternates to the Linus tree that contains all the
objects needed to resolve v2.6.33-rc1 (and thus the Gerrit Git repository
too "knows" about them)
What is the expected output? What do you see instead?
I would expect for Gerrit to be creating changes for each commit object
from the common ancestry to the point that I'm pushing, instead it errors
with "no new changes".
B.
1. same as A.1
2. make a commit on top of a tree state in the history that has no
associated change
3. try to push this new commit to Gerrit to a branch that shares common
ancestry with the history on top of which I built my latest commit
What is the expected output? What do you see instead?
I would expect Gerrit to be creating changes for all commits between the
common ancestry and the one I'm pushing (including one change for this
commit). Instead Gerrit creates a single change for the new commit (that
was built on top of the unreviewed history), it doesn't show anything in
the dependencies and if this change is reviewed Gerrit will submit it (and
thus updates the target branch to include the reviewed commit and all the
history it depends on which was not reviewed anywhere). This is very bad
because (especially with the branch based ACL in the next Gerrit version)
it means that people can change branches that are normally code reviewed
for any change with commits that not reviewed anywhere.
I think the main problem here is that Gerrit creates changes only for the
network transported commit objects with "git push". I think this is wrong
and it should instead create changes for all the commits back to the common
ancestry between the target branch and the source branch because all those
will be part of the history of the target branch if it gets submitted (at
least with the current design where Gerrit has a change per commit).