chiark / gitweb /
git-debrebase: new-upstream wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 24 Jan 2018 17:09:07 +0000 (17:09 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 16 Jun 2018 11:25:49 +0000 (12:25 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase

index 51b2429d3589a4bd2118f9e691a83b77578428c5..60a27ad175ff476708464b4851e54c6bf41701b5 100755 (executable)
@@ -837,7 +837,7 @@ sub cmd_new_upstream_v0 () {
 
     if ($old_orig_ci =~ m{^\[git-debrebase }m) {
        if ($old_orig_ci =~
- m{^\[git-debrebase combine-upstreams \.((?: $extra_orig_namepart_re)+)\]}
+ m{^\[git-debrebase new-upstream combine \.((?: $extra_orig_namepart_re)+)\]}
           ) {
            my @oldpieces = ('', split / /, $1);
            my $parentix = -1 + scalar @{ $old_orig->{Parents} };
@@ -847,7 +847,7 @@ sub cmd_new_upstream_v0 () {
            }
        } else {
            $problem->("previous upstream $old_orig->{CommitId} is from".
-                      " git-debrebase but not a \`combine-upstream' commit");
+                 " git-debrebase but not a \`new-upstream combine' commit");
        }
     }
 
@@ -882,14 +882,11 @@ sub cmd_new_upstream_v0 () {
        }
 
        foreach my $pc (@newpieces) { # always has '' first
-           my @cmd = @git, qw(read-tree);
            if ($pc->{Name}) {
-               push @cmd, "-prefix=$pcname/";
-               runcmd @git, qw(rm --cached -rf --ignore-unmatch), $pcname;
+               read_tree_subdir $pcname, $pc->{New];
+           } else {
+               runcmd @git, qw(read-tree), $pc->{New};
            }
-           push @cmd, $pc->{New};
-           runcmd @cmd;
-
            push @upstream_merge_parents, $pc->{New};
        }
 
@@ -898,11 +895,11 @@ sub cmd_new_upstream_v0 () {
        if (@newpieces > 1) {
            # need to make the upstream subtree merge commit
            my $us_tree = cmdoutput @git, qw(write-tree);
-           my @cmd = @git, qw(commit-tree), $us_tree;
+           my @cmd = (@git, qw(commit-tree), $us_tree);
            push @cmd, qw(-p), $_ foreach @upstream_merge_parents;
            push @cmd, qw(-m), "Combine upstreams for $new_upstream_version";
            push @cmd, qw(-m),
-               "[git-debrebase combine-upstreams . ".
+               "[git-debrebase new-upstream combine . ".
                (join " ", map { $_->{Name} } @newpieces[1..$#newpieces]).
                 "]";
            $new_upstream = cmdoutput @cmd;
@@ -912,13 +909,51 @@ sub cmd_new_upstream_v0 () {
        # combined commit we just made.  Either way it will be the
        # "upstream" parent of the breakwater special merge.
 
-       runcmd @git, qw(rm --cached -rf --ignore-unmatch), 'debian';
-       runcmd @git, qw(read-tree --prefix=debian/), 
-
-       my @bcmd = @git, qw
-
-           my $us_txt = ""
-           make_commit_te
+       read_tree_subdir 'debian', "$breakwater:debian";
+
+       # index now contains the breakwater merge contents
+
+       my $bw_tree = cmdoutput @git, qw(write_tree);
+       my @cmd = (@git, qw(commit-tree), $bw_tree);
+       push @cmd, qw(-p), $breakwater, qw(-p), $new_upstream;
+       push @cmd, qw(-m), "Update to upstream $new_upstream_version";
+       push @cmd, qw(-m),
+           "[git-debrebase new-upstream breakwater $new_upstream_version]";
+       my $new_bw = cmdoutput @git;
+
+       # Now we have to add a changelog stanza so the Debian version
+       # is right.
+
+       die if unlink "debian";
+       die unless $!==ENOTEMPTY;
+       unlink "debian/changelog" or die $!;
+       open CN, ">", "debian/changelog" or die $!;
+       my $oldclog = git_cat_file ":debian/changelog";
+       $oldclog =~ m/^($package_re) \(\S+\) / or
+           fail "cannot parse old changelog to get package name";
+       my $p = $1;
+       print CN, <<END, $oldclog or die $!;
+$p ($new_version) UNRELEASED; urgency=medium
+
+  * Update to new upstream version $new_upstream_version.
+
+ -- 
+
+END
+       close CN or die $!;
+       runcmd @git, qw(update-index --add --replace), 'debian/changelog';
+
+       # Now we have the final new breakwater branch in the index
+
+       $bw_tree = cmdoutput @git, qw(write_tree);
+       @cmd = (@git, qw(commit-tree), $bw_tree);
+       push @cmd, qw(-p), $new_bw;
+       push @cmd, qw(-m),
+           "Update changelog for new upstream $new_upstream_version";
+       push @cmd, qw(-m),
+           "[git-debrebase new-upstream changelog $new_upstream_version]";
+       $new_bw = cmdoutput @git;
+       
 
     update_head
     xxx check new orig version is reasonable;