chiark / gitweb /
git-debrebase: finish get_differs ?
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 9 Jul 2017 13:55:37 +0000 (14:55 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
git-debrebase

index e5e9203..a39699a 100755 (executable)
@@ -147,9 +147,11 @@ our @git = qw(git);
 
 sub get_differs ($$) {
     my ($x,$y) = @_;
-    # This resembles quiltify_trees_differ, in dgit, a bit.  But: we
-    # don't care about modes, or dpkg-source-unrepresentable changes,
-    # and we don't need the plethora of different modes.
+    # This resembles quiltify_trees_differ, in dgit, a bit.
+    # But we don't care about modes, or dpkg-source-unrepresentable
+    # changes, and we don't need the plethora of different modes.
+    # Conversely we need to distinguish different kinds of changes to
+    # debian/ and debian/patches/.
 
     my $differs = 0;
 
@@ -173,6 +175,8 @@ sub get_differs ($$) {
        $rundiff(undef, ':debian', sub {
             $differs |= $f eq 'patches' ? D_PAT_OTH : D_DEB;
        });
+       die "mysterious debian changes $x..$y"
+           unless $differs & (D_PAT_OTH|D_DEB);
     }
 
     if ($differs & D_PAT_OTH) {
@@ -186,22 +190,27 @@ sub get_differs ($$) {
             no warnings qw(exiting);
             if (!defined $mode) {
                $mode = $f;  next;
-           } elsif ($mode eq 'A' && $f !~ m/^\w+\.series$/) {
+           }
+           my $ok;
+           if ($mode eq 'A' && $f !~ m/(?:^|\.)series$/s) {
+               $ok = 1;
            } elsif ($mode eq 'M' && $f eq 'series') {
                my $x_s = git_cat_file "$x:debian/patches/series", 'blob';
                my $y_s = git_cat_file "$y:debian/patches/series", 'blob';
                chomp $x_s;  $x_s .= "\n";
-               $pat_oth->() unless $x_s = substr($y_s, 0, length $x_s);
+               $ok = $x_s eq substr($y_s, 0, length $x_s);
            } else {
-               $pat_oth->();
+               # nope
            }
            $mode = undef;
+           $differs |= $ok ? D_PAT_ADD : D_PAT_OTH;
         });
-       
-    
-       
-       }
-           $f eq '
+       die "mysterious debian/patches changes $x..$y"
+           unless $differs & (D_PAT_ADD|D_PAT_OTH);
+    }
+
+    return $differs;
+}
 
 sub commit_pr_info ($) {
     my ($r) = @_;