chiark / gitweb /
git-debrebase: Add a lot of printdebug
[dgit.git] / git-debrebase
index 6c1f5d1996d87337ee26f526f26d269d8daca2d9..f72625d6166a156322b2860671e5a7bd6c1c8d87 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;
@@ -772,9 +788,6 @@ sub classify ($) {
                           OrigParents => \@orig_ps);
     }
 
-    if (@p > 2) {
-       return $unknown->("octopus merge");
-    }
     if (@p == 2 and
        $r->{Msg} =~ m{^\[git-debrebase merged-breakwater.*\]$}m) {
        # xxx ^ metadata tag needs adding to (5)
@@ -783,6 +796,9 @@ sub classify ($) {
     if ($r->{Msg} =~ m{^\[(git-debrebase|dgit)[: ].*\]$}m) {
        return $unknown->("unknown kind of merge from $1");
     }
+    if (@p > 2) {
+       return $unknown->("octopus merge");
+    }
 
     if (!$ENV{GIT_DEBREBASE_EXPERIMENTAL_MERGE}) {
        return $unknown->("general two-parent merge");