chiark / gitweb /
git-debrebase: Use debchange for new-upstream changelog entry
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 25 Aug 2018 16:39:32 +0000 (17:39 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 26 Aug 2018 00:20:44 +0000 (01:20 +0100)
Closes: #905888.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
git-debrebase
tests/tests/gdr-newupstream

index 4756748adaf58b9853166982d16763a452a5ad97..3d1f2a81bc48bba8dc20dd520435791699ae22eb 100755 (executable)
@@ -2170,30 +2170,39 @@ sub cmd_new_upstream () {
  "[git-debrebase anchor: new upstream $new_upstream_version, merge]",
             ];
 
-       my $clogsignoff = cmdoutput qw(git show),
-           '--pretty=format:%an <%ae>  %aD',
-           $new_bw;
-
        # Now we have to add a changelog stanza so the Debian version
-       # is right.
-       die if unlink "debian";
-       die $! unless $!==ENOENT or $!==ENOTEMPTY;
-       unlink "debian/changelog" or $!==ENOENT or die $!;
-        mkdir "debian" 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.
-
- -- $clogsignoff
-
-END
-       close CN or die $!;
+       # is right.  We use debchange to do this.  Invoking debchange
+       # here is a bit fiddly because it has a lot of optional
+       # exciting behaviours, some of which will break stuff, and
+       # some of which won't work in a playtree.
+
+       # Make debchange use git's idea of the user's identity.
+       # That way, if the user never uses debchange et al, configuring
+       # git is enough.
+       my $usetup = sub {
+           my ($e, $k) = @_;
+           my $v = cfg $k, 1;
+           defined $v or return;
+           $ENV{$e} = $v;
+       };
+       $usetup->('DEBEMAIL',    'user.email');
+       $usetup->('DEBFULLNAME', 'user.name');
+
+sleep 2;
+
+       my @dch = (qw(debchange
+                     --allow-lower-version .*
+                     --no-auto-nmu
+                     --preserve
+                     --vendor=Unknown-Vendor
+                     --changelog debian/changelog
+                     --check-dirname-level 0
+                     --release-heuristic=changelog
+                     -v), $new_version,
+                  "Update to new upstream version $new_upstream_version.");
+
+       runcmd @git, qw(checkout -q debian/changelog);
+       runcmd @dch;
        runcmd @git, qw(update-index --add --replace), 'debian/changelog';
 
        # Now we have the final new breakwater branch in the index
index b45a0bfe1ea8382161a589a96651910de20a46a7..300d4345dde9f2fd06f2f4a9327f2417b41c6118 100755 (executable)
@@ -31,6 +31,7 @@ git branch before-new-upstream
 clog-check-1 () {
        before=$1
        date=$(git log --format=%aD -n1 debian/changelog)
+       date=$(date -R -d "$date")
        git show $before:debian/changelog >../clog.before
        m="  * Update to new upstream version ${v%-*}."
        e="dgit test git user <dgit-test@debian.example.net>  $date"