chiark / gitweb /
git-debrebase: classificaton generates Changelog type
[dgit.git] / git-debrebase
index 8f2e922355e440f7227a1f7afa3fd8bd8aa61753..a1d277e54c7a6bf82417eb28c3689ef2063d6432 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) {
@@ -260,6 +264,7 @@ sub calculate_committer_authline () {
 #
 # Types:
 #   Packaging
+#   Changelog
 #   Upstream
 #   AddPatches
 #   Mixed
@@ -330,10 +335,14 @@ 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));
+               if ($d == D_DEB_CLOG) {
+                   return $classify->(qw(Changelog));
+               } else {
+                   return $classify->(qw(Packaging));
+               }
            } elsif ($ty eq 'missing') {
                return $classify->(qw(BreakwaterStart));
            } else {
@@ -341,7 +350,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 +418,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] ]);
@@ -490,7 +499,7 @@ sub walk ($;$$) {
            $cur = $p0;
            $rewrite_from_here->();
            next;
-       } elsif ($ty eq 'Packaging') {
+       } elsif ($ty eq 'Packaging' or $ty eq 'Changelog') {
            push @brw_cl, $cl;
            $cur = $p0;
            next;