chiark / gitweb /
git-debrebase: Add a lot of printdebug
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 11 Aug 2018 09:38:06 +0000 (10:38 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 11 Aug 2018 09:39:09 +0000 (10:39 +0100)
We also operated on sorted patch lists, and reorganise the prereq
computation slightly, to make this possible.

This `print DEBUG ... if' is not very nice.  This is needed because
printdebug unconditionally prints $debugprefix.  These new debug
prints are nearly the first which want to do multi-stage printing
outside dgit (and dgit normally operates without $debugprefix set).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase

index b015e88..f72625d 100755 (executable)
@@ -329,6 +329,7 @@ sub gbp_pq_export ($$$) {
     # must be run in a workarea.  $bname and patch-queue/$bname
     # ought not to exist.  Leaves you on patch-queue/$bname with
     # the patches staged but not committed.
+    printdebug "gbp_pq_export $bname $base $tip\n";
     runcmd @git, qw(checkout -q -b), $bname, $base;
     runcmd @git, qw(checkout -q -b), "patch-queue/$bname", $tip;
     my @gbp_cmd = (qw(gbp pq export));
@@ -369,6 +370,8 @@ sub merge_series ($$;@) {
 
     # Creates, in *_q, a key MR for its private use
 
+    printdebug "merge_series newbase=$newbase\n";
+
     $input_qs[$_]{MR}{S} = $_ foreach (0..$#input_qs);
     $base_q->{MR}{S} = 'base';
 
@@ -407,17 +410,20 @@ sub merge_series ($$;@) {
                 "[git-debrebase merge-innards patch-queue import:".
                 " $q->{SeriesTip}]"
             ];
+           printdebug "merge_series  pec $pec ";
            runcmd @git, qw(rm -q --cached), $seriesfile;
            $pec = make_commit [ $pec ], [
                 "Drop series file from $s to avoid merge trouble",
                 "[git-debrebase merge-innards patch-queue prep:".
                 " $q->{SeriesTip}]"
             ];
+           printdebug "pec' $pec\n";
             runcmd @git, qw(reset -q --hard), $pec;
            $q->{MR}{PEC} = $pec;
        }
        # now, because of reverse, we are on $input_q->{MR}{OQC}
        runcmd @git, qw(checkout -q -b merge);
+       printdebug "merge_series merging...\n";
        my @mergecmd = (@git, qw(merge --quiet --no-edit), "p-1");
        debugcmd '+', @mergecmd;
        $!=0; $?=-1;
@@ -425,23 +431,29 @@ sub merge_series ($$;@) {
            failedcmd @mergecmd;
        }
 
+       printdebug "merge_series merge ok, series...\n";
        # We need to construct a new series file
        # Firstly, resolve prereq
-       foreach my $f (keys %prereq) {
+       foreach my $f (sort keys %prereq) {
+           printdebug "merge_series  patch\t$f\t";
            if (!stat_exists "debian/patches/$f") {
+               print DEBUG " drop\n" if $debuglevel;
                # git merge deleted it; that's how we tell it's not wanted
                delete $prereq{$f};
                next;
            }
-           foreach my $g (keys %{ $prereq{$f} }) {
+           print DEBUG " keep\n" if $debuglevel;
+           foreach my $g (sort keys %{ $prereq{$f} }) {
                my $gfp = $prereq{$f}{$g};
-               next unless
-                   # want to keep it
-                   !!$gfp->{0} == !!$gfp->{1}
+               printdebug "merge_series  prereq\t$f\t-> $g\t";
+               if (!!$gfp->{0} == !!$gfp->{1}
                    ? $gfp->{0}
-                   : !$gfp->{base}
-                   ;
-               delete $prereq{$f}{$g};
+                   : !$gfp->{base}) {
+                   print DEBUG "\tkeep\n" if $debuglevel;
+               } else {
+                   print DEBUG "\tdrop\n" if $debuglevel;
+                   delete $prereq{$f}{$g};
+               }
            }
        }
 
@@ -480,6 +492,7 @@ sub merge_series ($$;@) {
                }
                $best = $try;
            }
+           printdebug "merge_series series next $best\n";
            print NS "$best\n" or die $!;
            delete $prereq{$best};
            foreach my $gp (values %prereq) {
@@ -490,15 +503,18 @@ sub merge_series ($$;@) {
        runcmd @git, qw(add), $seriesfile;
        runcmd @git, qw(commit --quiet -m), 'Merged series';
 
+       printdebug "merge_series series gbp pq import\n";
        runcmd qw(gbp pq import);
 
        # OK now we are on patch-queue/merge, and we need to rebase
        # onto the intended parent and drop the patches from each one
 
+       printdebug "merge_series series ok, building...\n";
        my $build = $newbase;
        my @lcmd = (@git, qw(rev-list --reverse merge..patch-queue/merge));
        foreach my $c (grep /./, split /\n/, cmdoutput @lcmd) {
            my $commit = git_cat_file $c, 'commit';
+           printdebug "merge_series series ok, building $c\n";
            read_tree_upstream $c;
            my $tree = cmdoutput @git, qw(write-tree);
            $commit =~ s{^parent (\S+)$}{parent $build}m or confess;