chiark / gitweb /
git-debrebase new-upstream: Add a -1 revision if the user didn't supply one.
[dgit.git] / git-debrebase
index 658884d2d062fa5bb068ad2edd4d7e59bfd9bd1e..c28a775ce87261022855fcbb753c6d8b82ee9056 100755 (executable)
@@ -568,11 +568,12 @@ sub keycommits ($;$$$$) {
     my $cl;
     $fatal //= sub { fail $_[2]; };
     my $x = sub {
-       my ($cb, $tagsfx, $why) = @_;
+       my ($cb, $tagsfx, $mainwhy, $xwhy) = @_;
+       my $why = $mainwhy.$xwhy;
        my $m = "branch needs laundering (run git-debrebase): $why";
        fail $m unless defined $cb;
        return unless $cb;
-       $cb->("unclean-$tagsfx", $why, $cl);
+       $cb->("unclean-$tagsfx", $why, $cl, $mainwhy);
     };
     for (;;) {
        $cl = classify $head;
@@ -593,27 +594,27 @@ sub keycommits ($;$$$$) {
            last;
        } elsif ($ty eq 'Upstream') {
            $x->($unclean, 'ordering',
- "packaging change ($breakwater) follows upstream change (eg $head)")
+ "packaging change ($breakwater) follows upstream change"," (eg $head)")
                if defined $breakwater;
            $clogonly = undef;
            $breakwater = undef;
        } elsif ($ty eq 'Mixed') {
            $x->($unclean, 'mixed',
-                "found mixed upstream/packaging commit ($head)");
+                "found mixed upstream/packaging commit"," ($head)");
            $clogonly = undef;
            $breakwater = undef;
        } elsif ($ty eq 'Pseudomerge' or
                 $ty eq 'AddPatches') {
            $x->($furniture, (lc $ty),
-                "found interchange bureaucracy commit ($ty$head)");
+                "found interchange bureaucracy commit ($ty)"," ($head)");
        } elsif ($ty eq 'DgitImportUnpatched') {
            $x->($trouble, 'dgitimport',
                 "found dgit dsc import ($head)");
            return (undef,undef);
        } else {
            $x->($fatal, 'unprocessable',
-                "found unprocessable commit, cannot cope: $head; $cl->{Why}"
-               );
+                "found unprocessable commit, cannot cope: $cl->{Why}",
+                " ($head)");
            return (undef,undef);
        }
        $head = $cl->{Parents}[0]{CommitId};
@@ -1139,7 +1140,11 @@ sub cmd_new_upstream () {
     badusage "need NEW-VERSION [UPS-COMMITTISH]" unless @ARGV >= 1;
 
     # parse args - low commitment
-    my $new_version = (new Dpkg::Version scalar(shift @ARGV), check => 1);
+    my $spec_version = shift @ARGV;
+    my $new_version = (new Dpkg::Version $spec_version, check => 1);
+    if ($new_version->is_native()) {
+       $new_version = (new Dpkg::Version "$spec_version-1", check => 1);
+    }
     my $new_upstream_version = $new_version->version();
 
     my $new_upstream = shift @ARGV;
@@ -1388,15 +1393,20 @@ sub cmd_status () {
     # todo: gdr status should print upstream component(s) info
     # todo: gdr should leave/maintain some refs with this kind of info ?
 
-    my $oldest = [ 0 ];
+    my $oldest = { Badness => 0 };
     my $newest;
     my $note = sub {
-       my ($badness, $ourmsg, $snagname, $kcmsg, $cl) = @_;
-       if ($oldest->[0] < $badness) {
+       my ($badness, $ourmsg, $snagname, $dummy, $cl, $kcmsg) = @_;
+       if ($oldest->{Badness} < $badness) {
            $oldest = $newest = undef;
        }
-       $oldest = \@_; # we're walking backwards
-       $newest //= \@_;
+       $oldest = {
+                  Badness => $badness,
+                  CommitId => $cl->{CommitId},
+                  OurMsg => $ourmsg,
+                  KcMsg => $kcmsg,
+                 };
+       $newest //= $oldest;
     };
     my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'),
        sub { $note->(1, 'branch contains furniture (not laundered)', @_); },
@@ -1413,16 +1423,16 @@ sub cmd_status () {
     };
 
     print "current branch contents, in git-debrebase terms:\n";
-    if (!$oldest->[0]) {
+    if (!$oldest->{Badness}) {
        print "  branch is laundered\n";
     } else {
-       print "  $oldest->[1]\n";
+       print "  $oldest->{OurMsg}\n";
        my $printed = '';
        foreach my $info ($oldest, $newest) {
-           my $cid = $info->[4]{CommitId};
+           my $cid = $info->{CommitId};
            next if $cid eq $printed;
            $printed = $cid;
-           print "  $info->[3]\n";
+           print "  $info->{KcMsg}\n";
            $prcommitinfo->($cid);
        }
     }
@@ -1504,7 +1514,7 @@ sub make_patches_staged ($) {
            { local ($!,$?); copy('../gbp-pq-err', \*STDERR); }
            failedcmd @gbp_cmd;
        }
-       runcmd @git, qw(add debian/patches);
+       runcmd @git, qw(add -f debian/patches);
     };
 }