chiark / gitweb /
dgit: Replace branch_is_gdr with a history walker
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 25 Aug 2018 00:05:22 +0000 (01:05 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 25 Aug 2018 11:26:51 +0000 (12:26 +0100)
commit2da6bc9c434e12dd33e4506c3eaf605b87ec30d8
treed61f8e68a06f99a910ef989ed18ef2c2b6113d21
parentd7f555bf5c00a135d3991e9829450c4de73cafaa
dgit: Replace branch_is_gdr with a history walker

The debrebase-last approach is fundamentally wrong, because, for
example, cloning a stitched laundered gdr branch from a git server
does not establish debrebase-last, so dgit would make patches
itself (slowly).

So, instead, use git-debrebase make-patches in situations where it
will succeed.  We could just run it but that's slower, and it is a bit
awkward because we have to consider whether gdr is installed.  So
provide our own implementation.  It can be simpler because it only has
to handle the easy cases;

On testing of the new algorithm: we want to be confident that this
doesn't misfire; otherwise dgit users could be inconvenienced.  And we
want it to work for gdr users of course.

We can analyse the test coverage of the logic in branch_is_gdr
by running the whole test suite and then comparing this:

  cat tests/tmp/*.log |perl -ne 'next unless s/^branch_is_gdr  \w+ //; print' |sort -u |less

with this:

  git-grep 'branch_is_gdr  ' | perl -pe 's/^^dgit:\s+//' |sort |less

Noting that we should ideally have one each of all the gdr kinds we
try to recognise.  Currently that shows that we are missing only:

  gdr merged-breakwater
  unmarked BreakwaterStart YES

Closes: #907208.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
dgit