[openstack-dev] [OpenStack-Infra] Gerrit Upgrade to ver 2.11, completed.

Carl Baldwin carl at ecbaldwin.net
Thu Dec 24 20:14:24 UTC 2015

On Wed, Dec 23, 2015 at 5:54 PM, Clark Boylan <cboylan at sapwetik.org> wrote:
> I got curious and this is an odd situation. I can't find where 212669
> has a patchset with a parent of the commit for 192032,37 (b7151e4). Git
> represents the tree as a DAG with each child commit pointing at its
> parent(s). Parents do not know who their children are. When 212669 has a
> patchset with a parent that maps to a valid 192032 patchset everything
> works (see 212669,30 and 192032,36 for example) but when 192032 has a
> patchset with no children in 212669 it gets confused.

This all makes sense.

> This makes some sense given Git's internal DAG. Gerrit knows 212669 is
> related to 192032 via the other patchsets, but it can't associate to a
> specific patchset. I am not sure yet if the selection of patchset 4 is
> intentional design and does something that would make sense if I
> understood it better or if it is a bug in a best effort approach. The
> most correct thing to do would be for 192032,37 to not show any
> association to 212669 since there doesn't exist a Git DAG with that
> relationship.

I can't imagine any use case where linking me to PS4 here would be helpful.  :)

If it did what you suggest (not show any association) then all
dependencies would disappear from view each time a parent change is
updated until the children got rebased.  It might be the most correct
thing to do if you limit your thinking to the patch set level
dependency dag.  But, isn't what I'd call the most correct thing to do
from a user's perspective.

I'd like gerrit to first use a change set level dag that looks like
the below.  (A "change" has a number like CCCCC where a patch has a
number like CCCCC/PP.  A change is a collection of patches.)

  for child_change in all open changes
      latest_patch = most recent patch set of child_change
      for git_parent in latest_patch's git_parents
          parent_change = get_change_from_git_commit(git_parent)
          if parent_change is open
             add child_change -> parent_change to dag

This dag is derived from the patch set level dag but is more often
than not what I'm really interested in as a user.  I want to know
whether another open change's most recent patch set depends on this
change.  That's the most important thing.  It is much less often that
I'm actually interested in the patch set level dependencies.

Once gerrit does that correctly, then it could look at the patch set
level dag to give me a little more detail.  "Has that change been
rebased to the latest patch in this change (or is it "out of date")?"
Or, if I'm looking at a specific patch set within a change, it can
show me a little more detail.  "CCCCC/PP depends on this patch set."
"CCCCC/PP depends on this patch set but the latest version of CCCCC no
longer depends on this change."  Stuff like that.


More information about the OpenStack-dev mailing list