chiark / gitweb /
git-debrebase: introduce DS_DEB
[dgit.git] / git-debrebase
index 8f2e922355e440f7227a1f7afa3fd8bd8aa61753..f16b9b590de949f1e18a45df360886d6d28470b2 100755 (executable)
@@ -136,11 +136,12 @@ sub get_commit ($) {
     return ($`,$');
 }
 
-sub D_DEB ()     { return 0x1; } # debian/ (not including debian/patches/)
-sub D_UPS ()     { return 0x2; } # upstream files
-sub D_PAT_ADD () { return 0x4; } # debian/patches/ extra patches at end
-sub D_PAT_OTH () { return 0x8; } # debian/patches other changes
-
+sub D_UPS ()      { 0x02; } # upstream files
+sub D_PAT_ADD ()  { 0x04; } # debian/patches/ extra patches at end
+sub D_PAT_OTH ()  { 0x08; } # debian/patches other changes
+sub D_DEB_CLOG () { 0x10; } # debian/ (not patches/ or changelog)
+sub D_DEB_OTH ()  { 0x20; } # debian/changelog
+sub DS_DEB ()     { D_DEB_CLOG | D_DEB_OTH; } # debian/ (not patches/)
 
 our $playprefix = 'debrebase';
 our $rd;
@@ -181,16 +182,19 @@ sub get_differs ($$) {
     };
 
     $rundiff->([qw(--name-only)], [], sub {
-        $differs |= $_ eq 'debian' ? D_DEB : D_UPS;
+        $differs |= $_ eq 'debian' ? DS_DEB : D_UPS;
     });
 
-    if ($differs & D_DEB) {
-       $differs &= ~D_DEB;
+    if ($differs & DS_DEB) {
+       $differs &= ~DS_DEB;
        $rundiff->([qw(--name-only -r)], [qw(debian)], sub {
-            $differs |= $_ eq m{^debian/patches/} ? D_PAT_OTH : D_DEB;
+            $differs |=
+               m{^debian/patches/}      ? D_PAT_OTH  :
+               $_ eq 'debian/changelog' ? D_DEB_CLOG :
+                                          D_DEB_OTH;
        });
        die "mysterious debian changes $x..$y"
-           unless $differs & (D_PAT_OTH|D_DEB);
+           unless $differs & (D_PAT_OTH|DS_DEB);
     }
 
     if ($differs & D_PAT_OTH) {
@@ -330,7 +334,7 @@ sub classify ($) {
            return $classify->(qw(AddPatches));
        } elsif ($d & (D_PAT_ADD|D_PAT_OTH)) {
            return $unknown->("edits debian/patches");
-       } elsif ($d == D_DEB) {
+       } elsif ($d & DS_DEB and !($d & ~DS_DEB)) {
            my ($ty,$dummy) = git_cat_file "$ph[0]:debian";
            if ($ty eq 'tree') {
                return $classify->(qw(Packaging));
@@ -341,7 +345,7 @@ sub classify ($) {
            }
        } elsif ($d == D_UPS) {
            return $classify->(qw(Upstream));
-       } elsif ($d == (D_DEB|D_UPS)) {
+       } elsif ($d & DS_DEB and $d & D_UPS and !($d & ~(DS_DEB|D_UPS))) {
            return $classify->(qw(Mixed));
        } elsif ($d == 0) {
            return $unknown->("no changes");
@@ -409,7 +413,7 @@ sub classify ($) {
        if (@p == 2 &&
            !$haspatches &&
            !$p[$prevbrw]{IsOrigin} && # breakwater never starts with an origin
-           !($p[$prevbrw]{Differs} & ~D_DEB) &&
+           !($p[$prevbrw]{Differs} & ~DS_DEB) &&
            !($p[!$prevbrw]{Differs} & ~D_UPS)) {
            return $classify->(qw(BreakwaterUpstreamMerge),
                               OrigParents => [ $p[!$prevbrw] ]);