chiark / gitweb /
git-debrebase: fixes
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 14 Jul 2017 14:10:05 +0000 (15:10 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
git-debrebase

index 982423a..c4fabe3 100755 (executable)
@@ -157,23 +157,23 @@ sub get_differs ($$) {
     my $differs = 0;
 
     my $rundiff = sub {
-       my ($opts, $sfx, $fn) = @_;
-       $opts //= [qw(--name-only)];
+       my ($opts, $limits, $fn) = @_;
        my @cmd = (@git, qw(diff-tree -z --no-renames));
        push @cmd, @$opts;
-       push @cmd, "$_:$sfx" foreach $x, $y;
+       push @cmd, "$_:" foreach $x, $y;
+       push @cmd, @$limits;
        my $diffs = cmdoutput @cmd;
        foreach (split /\0/, $diffs) { $fn->(); }
     };
 
-    $rundiff->(undef, '', sub {
+    $rundiff->([qw(--name-only)], [], sub {
         $differs |= $_ eq 'debian' ? D_DEB : D_UPS;
     });
 
     if ($differs & D_DEB) {
        $differs &= ~D_DEB;
-       $rundiff->(undef, ':debian', sub {
-            $differs |= $_ eq 'patches' ? D_PAT_OTH : D_DEB;
+       $rundiff->([qw(--name-only -r)], [qw(debian)], sub {
+            $differs |= $_ eq m{^debian/patches/} ? D_PAT_OTH : D_DEB;
        });
        die "mysterious debian changes $x..$y"
            unless $differs & (D_PAT_OTH|D_DEB);
@@ -186,11 +186,12 @@ sub get_differs ($$) {
            $differs |= D_PAT_OTH;
            no warnings qw(exiting);  last;
        };
-       $rundiff->([qw(--name-status)], ':debian/patches', sub {
+       $rundiff->([qw(--name-status -r)], [qw(debian/patches/)], sub {
             no warnings qw(exiting);
             if (!defined $mode) {
                $mode = $_;  next;
            }
+           die unless s{^debian/patches/}{};
            my $ok;
            if ($mode eq 'A' && !m/(?:^|\.)series$/s) {
                $ok = 1;
@@ -486,10 +487,11 @@ sub walk ($;$$) {
            $cur = $p0;
            next;
        } elsif ($ty eq 'Pseudomerge') {
-           print $report " Contributor=$cl->{Contributor}" if $report;
+           my $contrib = $cl->{Contributor}{CommitId};
+           print $report " Contributor=$contrib" if $report;
            push @pseudomerges, $cl;
            $rewrite_from_here->();
-           $cur = $ty->{Contributor};
+           $cur = $contrib;
            next;
        } elsif ($ty eq 'BreakwaterUpstreamMerge') {
            $build_start->("PreviousBreakwater", $cur);