From: Ian Jackson Date: Sat, 11 Aug 2018 09:38:06 +0000 (+0100) Subject: git-debrebase: Add a lot of printdebug X-Git-Tag: archive/debian/6.7~146 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=commitdiff_plain;h=499215e8030c9966577574a6ada7ef0f03df8db7 git-debrebase: Add a lot of printdebug 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 --- diff --git a/git-debrebase b/git-debrebase index b015e885..f72625d6 100755 --- a/git-debrebase +++ b/git-debrebase @@ -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;