chiark / gitweb /
changelog: start 9.14 master
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 12 Feb 2021 12:49:33 +0000 (12:49 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 12 Feb 2021 12:49:33 +0000 (12:49 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
91 files changed:
.gitignore
Debian/Dgit.pm
HACKING [new file with mode: 0644]
Makefile
absurd/git
debian/changelog
debian/control
debian/copyright
debian/dgit.lintian-overrides [new file with mode: 0644]
debian/git-debpush.install [new file with mode: 0644]
debian/rules
debian/source/lintian-overrides [new file with mode: 0644]
debian/tests/control
dgit
dgit-maint-bpo.7.pod [new file with mode: 0644]
dgit-maint-debrebase.7.pod
dgit-maint-gbp.7.pod
dgit-maint-merge.7.pod
dgit.1
dgit.7
git-debpush [new file with mode: 0755]
git-debpush.1.pod [new file with mode: 0644]
git-debrebase
git-debrebase.1.pod
git-debrebase.5.pod
git-playtree-setup [new file with mode: 0755]
infra/dgit-mirror-ssh-wrap [new file with mode: 0755]
infra/dgit-repos-policy-debian
infra/dgit-repos-server
po/en_US.po
po/messages.pot
po/nl.po
po4a/dgit-maint-debrebase_7.pot
po4a/dgit-maint-merge_7.pot
po4a/dgit_1.pot
po4a/dgit_7.pot
po4a/git-debrebase_1.pot
po4a/git-debrebase_5.pot
po4a/po4a.cfg
tests/drs-git-ext
tests/enumerate-tests
tests/git-srcs/pari-extra_3-1.git.tar
tests/http-static-server [new file with mode: 0755]
tests/lib
tests/lib-baredebian [new file with mode: 0644]
tests/lib-build-modes
tests/lib-core
tests/lib-gdr
tests/pkg-srcs/example_1.0-1+brokenmeta.debian.tar.xz [new file with mode: 0644]
tests/pkg-srcs/example_1.0-1+brokenmeta.dsc [new file with mode: 0644]
tests/setup/baredebian [new file with mode: 0755]
tests/setup/examplegit
tests/setup/gbp [new file with mode: 0755]
tests/setup/http-git-check [new file with mode: 0755]
tests/tests/alternating-dgit [new file with mode: 0755]
tests/tests/baredebian-multitar [new file with mode: 0755]
tests/tests/baredebian-plusgit [new file with mode: 0755]
tests/tests/baredebian-push [new file with mode: 0755]
tests/tests/baredebian-tarball [new file with mode: 0755]
tests/tests/clone-gitnosuite
tests/tests/clone-nogit
tests/tests/clone-skew [new file with mode: 0755]
tests/tests/debpolicy-newreject
tests/tests/debpolicy-taintrm [new file with mode: 0755]
tests/tests/drs-push-rejects
tests/tests/fetch-somegit-notlast
tests/tests/forcesplit-linear [new file with mode: 0755]
tests/tests/forcesplit-overwrite [new file with mode: 0755]
tests/tests/ftpmasterapi-http [new file with mode: 0755]
tests/tests/gbp-orig
tests/tests/gdr-edits
tests/tests/gdr-import-dgit
tests/tests/import-dsc
tests/tests/manpages-format
tests/tests/mirror
tests/tests/newtag-clone-nogit [deleted file]
tests/tests/oldnewtagalt [deleted file]
tests/tests/oldtag-clone-nogit [deleted file]
tests/tests/overwrite-splitbrains
tests/tests/push-newrepeat
tests/tests/quilt-gbp
tests/tests/quilt-singlepatch
tests/tests/quilt-splitbrains
tests/tests/rpush-quilt [new file with mode: 0755]
tests/tests/tagupl [new file with mode: 0755]
tests/tests/tagupl-baredebian [new file with mode: 0755]
tests/tests/tagupl-gbp [new file with mode: 0755]
tests/tests/tagupl-native [new file with mode: 0755]
tests/tests/trustingpolicy-replay
tests/tstunt/dgit [new file with mode: 0755]
tests/tstunt/sendmail [new file with mode: 0755]

index b8b1af6b1c01318a6775cb28bb3120de03d3cdbc..6e87a619a3af66bd28ffac92719829a1266fa4fc 100644 (file)
@@ -2,6 +2,7 @@
 tests/tmp
 debian/tmp
 debian/dgit
+debian/git-debpush
 debian/git-debrebase
 debian/dgit-infrastructure
 debian/files
@@ -15,9 +16,11 @@ dgit-maint-native.7
 dgit-maint-merge.7
 dgit-maint-gbp.7
 dgit-maint-debrebase.7
+dgit-maint-bpo.7
 dgit-sponsorship.7
 dgit-downstream-dsc.7
 git-debrebase.1
 git-debrebase.5
+git-debpush.1
 substituted
 .po4a.translated-only
index 2ef32f32a8179f9dc590bfdbcf27419470a62f21..4059e2b02372388d8c4107beda3a7e757bc9ff00 100644 (file)
@@ -2,7 +2,7 @@
 # dgit
 # Debian::Dgit: functions common to dgit and its helpers and servers
 #
-# Copyright (C) 2015-2016  Ian Jackson
+# Copyright (C) 2015-2019  Ian Jackson
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@ use Config;
 use Digest::SHA;
 use Data::Dumper;
 use IPC::Open2;
-use File::Path;
+use File::Path qw(:DEFAULT make_path);
 use File::Basename;
 use Dpkg::Control::Hash;
 use Debian::Dgit::ExitStatus;
@@ -43,27 +43,33 @@ BEGIN {
     @ISA         = qw(Exporter);
     @EXPORT      = qw(setup_sigwarn forkcheck_setup forkcheck_mainprocess
                      dep14_version_mangle
-                      debiantags debiantag_old debiantag_new
+                      debiantags debiantag_new
                      debiantag_maintview
                      upstreamversion
+                     upstream_commitish_search resolve_upstream_version
                      stripepoch source_file_leafname is_orig_file_of_p_v
                      server_branch server_ref
                       stat_exists link_ltarget rename_link_xf
                      hashfile
-                      fail failmsg ensuredir must_getcwd executable_on_path
+                      fail failmsg ensuredir ensurepath
+                     must_getcwd executable_on_path
                       waitstatusmsg failedcmd_waitstatus
                      failedcmd_report_cmd failedcmd
                       runcmd shell_cmd cmdoutput cmdoutput_errok
+                     @git
                       git_rev_parse changedir_git_toplevel git_cat_file
                      git_get_ref git_get_symref git_for_each_ref
                       git_for_each_tag_referring is_fast_fwd
                      git_check_unmodified
                      git_reflog_action_msg  git_update_ref_cmd
-                     make_commit_text
+                     rm_subdir_cached read_tree_subdir
+                     read_tree_debian read_tree_upstream
+                     make_commit hash_commit hash_commit_text
                      reflog_cache_insert reflog_cache_lookup
-                      $package_re $component_re $deliberately_re
+                      $package_re $component_re $suite_re $deliberately_re
                      $distro_re $versiontag_re $series_filename_re
-                     $orig_f_comp_re $orig_f_sig_re $orig_f_tail_re
+                     $orig_f_comp_re $orig_f_sig_re
+                     $tarball_f_ext_re $orig_f_tail_re
                      $extra_orig_namepart_re
                      $git_null_obj
                       $branchprefix
@@ -93,6 +99,7 @@ our @EXPORT_OK;
 
 our $package_re = '[0-9a-z][-+.0-9a-z]*';
 our $component_re = '[0-9a-zA-Z][-+.0-9a-zA-Z]*';
+our $suite_re = '[-+.0-9a-z]+';
 our $deliberately_re = "(?:TEST-)?$package_re";
 our $distro_re = $component_re;
 our $versiontag_re = qr{[-+.\%_0-9a-zA-Z/]+};
@@ -101,13 +108,16 @@ our $series_filename_re = qr{(?:^|\.)series(?!\n)$}s;
 our $extra_orig_namepart_re = qr{[-0-9a-zA-Z]+};
 our $orig_f_comp_re = qr{orig(?:-$extra_orig_namepart_re)?};
 our $orig_f_sig_re = '\\.(?:asc|gpg|pgp)';
-our $orig_f_tail_re = "$orig_f_comp_re\\.tar(?:\\.\\w+)?(?:$orig_f_sig_re)?";
+our $tarball_f_ext_re = "\\.tar(?:\\.\\w+)?(?:$orig_f_sig_re)?";
+our $orig_f_tail_re = "$orig_f_comp_re$tarball_f_ext_re";
 our $git_null_obj = '0' x 40;
 our $ffq_refprefix = 'ffq-prev';
 our $gdrlast_refprefix = 'debrebase-last';
 our $printdebug_when_debuglevel = 1;
 our $debugcmd_when_debuglevel = 1;
 
+our (@git) = qw(git);
+
 # these three all go together, only valid after record_maindir
 our $maindir;
 our $maindir_gitdir;
@@ -148,11 +158,11 @@ sub setup_sigwarn () {
 
 sub initdebug ($) { 
     ($debugprefix) = @_;
-    open DEBUG, ">/dev/null" or confess $!;
+    open DEBUG, ">/dev/null" or confess "$!";
 }
 
 sub enabledebug () {
-    open DEBUG, ">&STDERR" or confess $!;
+    open DEBUG, ">&STDERR" or confess "$!";
     DEBUG->autoflush(1);
     $debuglevel ||= 1;
 }
@@ -181,7 +191,7 @@ sub printdebug {
     print DEBUG $debugprefix unless $printdebug_noprefix;
     pop @_ while @_ and !length $_[-1];
     return unless @_;
-    print DEBUG @_ or confess $!;
+    print DEBUG @_ or confess "$!";
     $printdebug_noprefix = $_[-1] !~ m{\n$};
 }
 
@@ -214,9 +224,7 @@ sub shellquote {
 sub printcmd {
     my $fh = shift @_;
     my $intro = shift @_;
-    print $fh $intro," " or confess $!;
-    print $fh shellquote @_ or confess $!;
-    print $fh "\n" or confess $!;
+    print $fh $intro." ".(join '', shellquote @_)."\n" or confess "$!";
 }
 
 sub debugcmd {
@@ -233,11 +241,6 @@ sub dep14_version_mangle ($) {
     return $v;
 }
 
-sub debiantag_old ($$) { 
-    my ($v,$distro) = @_;
-    return "$distro/". dep14_version_mangle $v;
-}
-
 sub debiantag_new ($$) { 
     my ($v,$distro) = @_;
     return "archive/$distro/".dep14_version_mangle $v;
@@ -250,7 +253,7 @@ sub debiantag_maintview ($$) {
 
 sub debiantags ($$) {
     my ($version,$distro) = @_;
-    map { $_->($version, $distro) } (\&debiantag_new, \&debiantag_old);
+    map { $_->($version, $distro) } (\&debiantag_new, \&debiantag_maintview);
 }
 
 sub stripepoch ($) {
@@ -310,6 +313,12 @@ sub ensuredir ($) {
     confess "mkdir $dir: $!";
 }
 
+sub ensurepath ($$) {
+    my ($firsttocreate, $subdir) = @_; # creates necessary bits of $subidr
+    ensuredir $firsttocreate;
+    make_path "$firsttocreate/$subdir";
+}
+
 sub must_getcwd () {
     my $d = getcwd();
     defined $d or fail f_ "getcwd failed: %s\n", $!;
@@ -347,7 +356,7 @@ sub waitstatusmsg () {
 sub failedcmd_report_cmd {
     my $intro = shift @_;
     $intro //= __ "failed command";
-    { local ($!); printcmd \*STDERR, _us().": $intro:", @_ or confess $!; };
+    { local ($!); printcmd \*STDERR, _us().": $intro:", @_ or confess "$!"; };
 }
 
 sub failedcmd_waitstatus {
@@ -395,7 +404,7 @@ sub cmdoutput_errok {
     my $d;
     $!=0; $?=0;
     { local $/ = undef; $d = <P>; }
-    confess $! if P->error;
+    confess "$!" if P->error;
     if (!close P) { printdebug "=>!$?\n"; return undef; }
     chomp $d;
     if ($debuglevel > 0) {
@@ -528,10 +537,10 @@ sub git_cat_file ($;$) {
     if (!$gcf_pid) {
        my @cmd = qw(git cat-file --batch);
        debugcmd "GCF|", @cmd;
-       $gcf_pid = open2 $gcf_o, $gcf_i, @cmd or confess $!;
+       $gcf_pid = open2 $gcf_o, $gcf_i, @cmd or confess "$!";
     }
     printdebug "GCF>| $objname\n";
-    print $gcf_i $objname, "\n" or confess $!;
+    print $gcf_i $objname, "\n" or confess "$!";
     my $x = <$gcf_o>;
     printdebug "GCF<| ", $x;
     if ($x =~ m/ (missing)$/) { return $chk->($1, undef); }
@@ -567,7 +576,7 @@ sub git_for_each_ref ($$;$) {
     if (defined $gitdir) {
        @cmd = ('sh','-ec','cd "$1"; shift; exec "$@"','x', $gitdir, @cmd);
     }
-    open GFER, "-|", @cmd or confess $!;
+    open GFER, "-|", @cmd or confess "$!";
     debugcmd "|", @cmd;
     while (<GFER>) {
        chomp or confess "$_ ?";
@@ -622,6 +631,47 @@ sub git_check_unmodified () {
     }
 }
 
+sub upstream_commitish_search ($$) {
+    my ($upstream_version, $tried) = @_;
+    # todo: at some point maybe use git-deborig to do this
+    my @found;
+    foreach my $tagpfx ('', 'v', 'upstream/') {
+       my $tag = $tagpfx.(dep14_version_mangle $upstream_version);
+       my $new_upstream = git_get_ref "refs/tags/$tag";
+       push @$tried, $tag;
+       push @found, [ $tag, $new_upstream ] if $new_upstream;
+    }
+    return @{ $found[0] } if @found == 1;
+    return ();
+}
+
+sub resolve_upstream_version ($$) {
+    my ($new_upstream, $upstream_version) = @_;
+
+    my $used = $new_upstream;
+    my $message = __ 'using specified upstream commitish';
+    if (!defined $new_upstream) {
+       my @tried;
+       ($used, $new_upstream) =
+           upstream_commitish_search $upstream_version, \@tried;
+       if (!length $new_upstream) {
+           fail f_
+               "Could not determine appropriate upstream commitish.\n".
+               " (Tried these tags: %s)\n".
+               " Check version, and specify upstream commitish explicitly.",
+               "@tried";
+       }
+       $message = f_ 'using upstream from git tag %s', $used;
+    } elsif ($new_upstream =~ m{^refs/tags/($versiontag_re)$}s) {
+       $message = f_ 'using upstream from git tag %s', $1;
+       $used = $1;
+    }  
+    $new_upstream = git_rev_parse $new_upstream;
+
+    return ($new_upstream, $used, $message);
+    # used is a human-readable idea of what we found
+}
+
 sub is_fast_fwd ($$) {
     my ($ancestor,$child) = @_;
     my @cmd = (qw(git merge-base), $ancestor, $child);
@@ -649,6 +699,39 @@ sub git_update_ref_cmd {
     return qw(git update-ref -m), $msg, @_;
 }
 
+sub rm_subdir_cached ($) {
+    my ($subdir) = @_;
+    runcmd qw(git rm --quiet -rf --cached --ignore-unmatch), $subdir;
+}
+
+sub read_tree_subdir ($$) {
+    my ($subdir, $new_tree_object) = @_;
+    # If $new_tree_object is '', the subtree is deleted.
+    confess unless defined $new_tree_object;
+    rm_subdir_cached $subdir;
+    runcmd qw(git read-tree), "--prefix=$subdir/", $new_tree_object
+       if length $new_tree_object;
+}
+
+sub read_tree_debian ($) {
+    my ($treeish) = @_;
+    read_tree_subdir 'debian', "$treeish:debian";
+    rm_subdir_cached 'debian/patches';
+}
+
+sub read_tree_upstream ($;$$) {
+    my ($treeish, $keep_patches, $tree_with_debian) = @_;
+    # if $tree_with_debian is supplied, will use that for debian/
+    # otherwise will save and restore it.  If $tree_with_debian
+    # is '' then debian/ is deleted.
+    my $debian =
+       defined $tree_with_debian ? "$tree_with_debian:debian"
+       : cmdoutput qw(git write-tree --prefix=debian/);
+    runcmd qw(git read-tree), $treeish;
+    read_tree_subdir 'debian', $debian;
+    rm_subdir_cached 'debian/patches' unless $keep_patches;
+}
+
 sub changedir ($) {
     my ($newdir) = @_;
     printdebug "CD $newdir\n";
@@ -665,7 +748,7 @@ sub git_slurp_config_src ($) {
     local $/="\0";
 
     my $r = { };
-    open GITS, "-|", @cmd or confess $!;
+    open GITS, "-|", @cmd or confess "$!";
     while (<GITS>) {
        chomp or confess;
        printdebug "=> ", (messagequote $_), "\n";
@@ -728,7 +811,7 @@ sub parsecontrol {
     my $fh = new IO::Handle;
     open $fh, '<', $file or fail f_ "open %s (%s): %s", $file, $desc, $!;
     my $c = parsecontrolfh($fh,$desc,$allowsigned);
-    $fh->error and confess $!;
+    $fh->error and confess "$!";
     close $fh;
     return $c;
 }
@@ -737,7 +820,7 @@ sub parsechangelog {
     my $c = Dpkg::Control::Hash->new(name => 'parsed changelog');
     my $p = new IO::Handle;
     my @cmd = (qw(dpkg-parsechangelog), @_);
-    open $p, '-|', @cmd or confess $!;
+    open $p, '-|', @cmd or confess "$!";
     $c->parse($p);
     $?=0; $!=0; close $p or failedcmd @cmd;
     return $c;
@@ -755,7 +838,7 @@ sub parsechangelog_loop ($$$) {
     # @$clogcmd is qw(dpkg-parsechangelog ...some...options...)
     # calls $fn->($thisstanza, $desc);
     debugcmd "|",@$clogcmd;
-    open CLOGS, "-|", @$clogcmd or confess $!;
+    open CLOGS, "-|", @$clogcmd or confess "$!";
     for (;;) {
        my $stanzatext = do { local $/=""; <CLOGS>; };
        printdebug "clogp stanza ".Dumper($stanzatext) if $debuglevel>1;
@@ -767,21 +850,35 @@ sub parsechangelog_loop ($$$) {
 
        $fn->($thisstanza, $desc);
     }
-    confess $! if CLOGS->error;
+    confess "$!" if CLOGS->error;
     close CLOGS or $?==SIGPIPE or failedcmd @$clogcmd;
 }      
 
-sub make_commit_text ($) {
+sub make_commit ($$) {
+    my ($parents, $message_paras) = @_;
+    my $tree = cmdoutput qw(git write-tree);
+    my @cmd = (qw(git commit-tree), $tree);
+    push @cmd, qw(-p), $_ foreach @$parents;
+    push @cmd, qw(-m), $_ foreach @$message_paras;
+    return cmdoutput @cmd;
+}
+
+sub hash_commit ($) {
+    my ($file) = @_;
+    return cmdoutput qw(git hash-object -w -t commit), $file;
+}
+
+sub hash_commit_text ($) {
     my ($text) = @_;
     my ($out, $in);
     my @cmd = (qw(git hash-object -w -t commit --stdin));
     debugcmd "|",@cmd;
     print Dumper($text) if $debuglevel > 1;
-    my $child = open2($out, $in, @cmd) or confess $!;
+    my $child = open2($out, $in, @cmd) or confess "$!";
     my $h;
     eval {
-       print $in $text or confess $!;
-       close $in or confess $!;
+       print $in $text or confess "$!";
+       close $in or confess "$!";
        $h = <$out>;
        $h =~ m/^\w+$/ or confess;
        $h = $&;
@@ -801,9 +898,9 @@ sub reflog_cache_insert ($$$) {
     # When we no longer need to support squeeze, use --create-reflog
     # instead of this:
     my $parent = $ref; $parent =~ s{/[^/]+$}{};
-    ensuredir "$maindir_gitcommon/logs/$parent";
+    ensurepath "$maindir_gitcommon/logs", "$parent";
     my $makelogfh = new IO::File "$maindir_gitcommon/logs/$ref", '>>'
-      or confess $!;
+      or confess "$!";
 
     my $oldcache = git_get_ref $ref;
 
@@ -812,7 +909,7 @@ sub reflog_cache_insert ($$$) {
        # git update-ref doesn't always update, in this case.  *sigh*
        my $authline = (ucfirst _us()).
            ' <'._us().'@example.com> 1000000000 +0000';
-       my $dummy = make_commit_text <<ENDU.(__ <<END);
+       my $dummy = hash_commit_text <<ENDU.(__ <<END);
 tree $tree
 parent $value
 author $authline
@@ -832,11 +929,11 @@ sub reflog_cache_lookup ($$) {
     # you must have called record_maindir
     my @cmd = (qw(git log -g), '--pretty=format:%H %gs', $ref);
     debugcmd "|(probably)",@cmd;
-    my $child = open GC, "-|";  defined $child or confess $!;
+    my $child = open GC, "-|";  defined $child or confess "$!";
     if (!$child) {
-       chdir $maindir or confess $!;
+       chdir $maindir or confess "$!";
        if (!stat "$maindir_gitcommon/logs/$ref") {
-           $! == ENOENT or confess $!;
+           $! == ENOENT or confess "$!";
            printdebug ">(no reflog)\n";
            finish 0;
        }
@@ -849,7 +946,7 @@ sub reflog_cache_lookup ($$) {
        close GC;
        return $1;
     }
-    confess $! if GC->error;
+    confess "$!" if GC->error;
     failedcmd unless close GC;
     return undef;
 }
@@ -895,7 +992,7 @@ sub reflog_cache_lookup ($$) {
 #    changedir playground
 #    changedir $maindir
 #
-#    playtree_setup $local_git_cfg
+#    playtree_setup
 #            # ^ call in some (perhaps trivial) subdir of playground
 #
 #    rmtree playground
@@ -954,32 +1051,32 @@ sub fresh_playground ($) {
 
 # ----- playtrees -----
 
-sub playtree_setup (;$) {
-    my ($t_local_git_cfg) = @_;
-    $t_local_git_cfg //= $local_git_cfg;
+sub playtree_setup () {
     # for use in the playtree
     # $maindir must be set, eg by calling record_maindir or fresh_playground
-    runcmd qw(git init -q);
-    runcmd qw(git config gc.auto 0);
-    foreach my $copy (qw(user.email user.name user.useConfigOnly
-                         core.sharedRepository
-                         core.compression core.looseCompression
-                         core.bigFileThreshold core.fsyncObjectFiles)) {
-       my $v = $t_local_git_cfg->{$copy};
-       next unless $v;
-       runcmd qw(git config), $copy, $_ foreach @$v;
-    }
     # this is confusing: we have
     #   .                   playtree, not a worktree, has .git/, our cwd
     #   $maindir            might be a worktree so
     #   $maindir_gitdir     contains our main working "dgit", HEAD, etc.
     #   $maindir_gitcommon  the shared stuff, including .objects
-    rmtree('.git/objects');
-    symlink "$maindir_gitcommon/objects",'.git/objects' or confess $!;
+
+    # we need to invoke git-playtree-setup via git because
+    # there may be config options it needs which are only available
+    # to us, sensibly, in @git
+
+    # And, we look for it in @INC too.  This is a bit perverse.
+    # We do this because in the Debian packages we want to have
+    # a copy of this script in each binary package, rather than
+    # making yet another .deb or tangling the dependencies.
+    # @INC is conveniently available.
+    my $newpath = join ':', +(grep { !m/:/ } @INC),
+                 '/usr/share/dgit', $ENV{PATH};
+    runcmd qw(env), "PATH=$newpath", @git, qw(playtree-setup .);
+
     ensuredir '.git/info';
-    open GA, "> .git/info/attributes" or confess $!;
-    print GA "* $negate_harmful_gitattrs\n" or confess $!;
-    close GA or confess $!;
+    open GA, "> .git/info/attributes" or confess "$!";
+    print GA "* $negate_harmful_gitattrs\n" or confess "$!";
+    close GA or confess "$!";
 }
 
 1;
diff --git a/HACKING b/HACKING
new file mode 100644 (file)
index 0000000..2839200
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,91 @@
+Here are some hints and tips or working on src:dgit
+===================================================
+
+Program and source code layout
+------------------------------
+
+Most stuff is in the toplevel.
+Debian/ contains Perl modules, notably Debian/Dgit.pm.
+That module contains much shared code and is used by every package.
+
+The test suite is very useful for ad-hoc work, so see "Tests" below.
+
+Coding style
+------------
+
+I like to use perl "poetry mode" where ( ) are often elided.
+This is often nice and terse but there is a gotcha.  This
+   some_function ($a + 2), $b, $c
+is wrong, because the ( ) are treated as function call ( )
+for some_function.  When this is a risk, you have to write:
+   some_function +($a + 2), $b, $c
+
+Keep the line length to 75 at most please.
+
+i18n
+----
+
+In the Perl code we use these functions:
+
+ here:   meaning:                                           like, in C:
+  __      translate this message                             _ aka gettext
+  f_      this is a sprintf string to be translated          sprintf(_ ...
+  i_      mark for translation but do not translate here     gettext_noop
+
+See the info node `(gettext) Sources' for the complete semantics.
+
+The shell scripts are not translated right now.
+
+Running ad-hoc
+--------------
+
+You can run everything right out of the git tree, for ad hoc testing,,
+like this (supposing your dgit tree is in things/Dgit/dgit):
+
+  ~/things/Dgit/dgit/using-these dgit --some-option blah blah
+
+using-these will set PATH and PERLLIB so that programs and modules
+come from its own directory (obtained from $0).
+
+Tests, running and use for hacking
+----------------------------------
+
+The test cases are in bash and are in tests/tests/*.  They all use
+shell libraries tests/lib*.
+
+You can run it formally with autopkgtest, but you normally want to run
+tests in one of these two ways [1]:
+
+  tests/using-intree tests/tests/<some-test> 2>&1 |tee ../log
+  tests/run-all [tests/tests/<some shell glob>]
+
+These will leave their working stuff in ./tests/tmp/<name-of-test>.
+
+The test suite is often a nice way to set up situations for ad-hoc
+testing.  You can add "xxx" in the middle of one of the test cases to
+get it to crash at the right point.  Have an absolute cd like
+  cd ~/things/Dgit/dgit/tests/tmp/<some-test>
+in your shell history, because each time you run the test it will
+blow that directory away again.
+
+There are many env vars settings like
+   DGIT_TEST_DEBUG=          DGIT_TEST_DEBUG=-DDD
+   DGIT_TEST_DEBPUSH_DEBUG=  DGIT_TEST_DEBPUSH_DEBUG=x
+which can be used to control the level of debug output from
+individual programs run by the test suite.
+
+Editing/adding tests
+--------------------
+
+Things in tests/setup/ generate canned starting points.  You can run
+them by hand, but when they are imported by other tests they are not
+automatically regenerated by default.  So if you are editing one of
+those, git-clean is your friend.
+
+debian/tests/control is autogenerated by a rule in debia/rules.  If
+making actual releases, you must rerun that.
+
+[1] The test suite and libraries, when run without any special
+environment variables, expect to be run via DEP-8 (autopkgtest) - so
+they want an to everything out of PATH and /usr.  But there are also
+arrangements to honour environment variables set by using-intree.
index 7d0c422f8bb99eff8228bab41519ac0d38f1be55..87cff8b9bea79258568fa9fe2d83c0df9cbac18b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,8 @@
 # dgit
 # Integration between git and Debian-style archives
 #
-# Copyright (C)2013-2016 Ian Jackson
+# Copyright (C)2013-2018 Ian Jackson
+# Copyright (C)2019      Sean Whitton
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -33,7 +34,7 @@ infraexamplesdir=$(prefix)/share/doc/dgit-infrastructure/examples
 txtdocdir=$(prefix)/share/doc/dgit
 absurddir=$(prefix)/share/dgit/absurd
 
-PROGRAMS=dgit dgit-badcommit-fixup
+PROGRAMS=dgit dgit-badcommit-fixup git-playtree-setup
 MAN1PAGES=dgit.1
 
 MAN7PAGES=dgit.7                               \
@@ -42,7 +43,8 @@ MAN7PAGES=dgit.7                              \
        dgit-maint-merge.7 dgit-maint-gbp.7     \
        dgit-maint-debrebase.7                  \
        dgit-downstream-dsc.7                   \
-       dgit-sponsorship.7
+       dgit-sponsorship.7                      \
+       dgit-maint-bpo.7
 
 TXTDOCS=README.dsc-import
 PERLMODULES= \
@@ -60,7 +62,10 @@ GDR_PERLMODULES= \
 GDR_MAN1PAGES=git-debrebase.1
 GDR_MAN5PAGES=git-debrebase.5
 
-INFRA_PROGRAMS=dgit-repos-server dgit-ssh-dispatch \
+GDP_PROGRAMS=git-debpush
+GDP_MAN1PAGES=git-debpush.1
+
+INFRA_PROGRAMS=dgit-repos-server dgit-ssh-dispatch dgit-mirror-ssh-wrap \
        dgit-repos-policy-debian dgit-repos-admin-debian \
        dgit-repos-policy-trusting dgit-mirror-rsync
 INFRA_EXAMPLES=get-dm-txt ssh-wrap drs-cron-wrap get-suites
@@ -70,7 +75,8 @@ INFRA_PERLMODULES= \
        Debian/Dgit/Policy/Debian.pm
 
 MANPAGES=$(MAN1PAGES) $(MAN5PAGES) $(MAN7PAGES) \
-       $(GDR_MAN1PAGES) $(GDR_MAN5PAGES)
+       $(GDR_MAN1PAGES) $(GDR_MAN5PAGES) \
+       $(GDP_MAN1PAGES)
 
 all:   $(MANPAGES) $(addprefix substituted/,$(PROGRAMS))
 
@@ -98,6 +104,10 @@ installdirs:
                $(DESTDIR)$(txtdocdir) $(DESTDIR)$(absurddir) \
                $(addprefix $(DESTDIR)$(perldir)/, $(dir $(PERLMODULES)))
 
+install-gdp:    installdirs-gdp
+       $(INSTALL_PROGRAM) $(GDP_PROGRAMS) $(DESTDIR)$(bindir)
+       $(INSTALL_DATA) $(GDP_MAN1PAGES) $(DESTDIR)$(man1dir)
+
 install-gdr:   installdirs-gdr
        $(INSTALL_PROGRAM) $(GDR_PROGRAMS) $(DESTDIR)$(bindir)
        $(INSTALL_DATA) $(GDR_MAN1PAGES) $(DESTDIR)$(man1dir)
@@ -115,6 +125,9 @@ install-infra:      installdirs-infra
                $(INSTALL_DATA) $$m $(DESTDIR)$(perldir)/$${m%/*}; \
        done
 
+installdirs-gdp:
+       $(INSTALL_DIR) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir)
+
 installdirs-gdr:
        $(INSTALL_DIR) $(DESTDIR)$(bindir) \
                $(DESTDIR)$(man1dir) $(DESTDIR)$(man5dir) \
@@ -154,5 +167,10 @@ git-debrebase.%: git-debrebase.%.pod
                --name=$(subst .$*,,$@) \
                $^ $@
 
+git-debpush.1: git-debpush.1.pod
+       pod2man --section=1 --date="Debian Project" --center="git-debpush" \
+               --name git-debpush \
+               $^ $@
+
 %.view:        %
        man -l $*
index 0f562b549ea83f0c5fcc8326e223fecfca3cc751..d9e2d4ee66a2d8398a7c090514cc894767fa048e 100755 (executable)
@@ -7,6 +7,8 @@ case "$DGIT_ABSURD_DEBUG" in
 *)     exec 3>>../../gbp-pq-output 2>&3 ;;
 esac
 
+exec 4>>../../absurd-apply-warnings
+
 log () {
        echo >&3 "DGIT ABSURD GIT APPLY (DEBUG)  $*"
        echo >&2 "DGIT ABSURD GIT APPLY (STDERR) $*"
@@ -23,17 +25,46 @@ if test "x$PATH" = "x$npath"; then
        fail "PATH FILTER FAIL ($0 $self $PATH)"
 fi
 
+filter_path () {
+       PATH=$npath
+}
+
+squash_author () {
+       author_vars='NAME EMAIL DATE'
+       for var in in $author_vars; do
+               eval "GIT_AUTHOR_$var=\$GIT_COMMITTER_$var"
+       done
+}
+
+try_commit () { git commit-tree "$try_commit_obj" </dev/null >/dev/null; }
+
+maybe_squash_author () {
+       if   (set -e; filter_path;                try_commit); then return; fi
+       if ! (set -e; filter_path; squash_author; try_commit); then return; fi
+       read last <../../absurd-apply-applied
+       echo >&4 \
+ "dgit: warning: suppressed corrupted metadata! ($last)"
+       squash_author
+}
+
 bypass=true
 for arg in "$@"; do
        case "$arg" in
        apply)  bypass=false; break     ;;
+       commit-tree)
+               # Work around #950446 in gbp
+               echo >&3 "DGIT ABSURD GIT APPLY - COMMIT-TREE: $*"
+               try_commit_obj="$2"
+               maybe_squash_author
+               bypass=true; break
+               ;;
        -*)                             ;;
        *)      bypass=true; break      ;;
        esac
 done
 
 if $bypass; then
-       PATH=$npath
+       filter_path
        echo >&3 "DGIT ABSURD GIT APPLY - BYPASS: $*"
        exec git "$@"
 fi
@@ -112,4 +143,5 @@ git checkout debian/patches/series
 git add -Af .
 
 log "APPLIED $patch"
+printf >../../absurd-apply-applied '%s\n' "$patch"
 #printf 'APPLIED '; date --iso-8601=ns
index d244a6e6791079c4d98a5e69b359d91f59956fcf..660a39ef7d26aa5a11dcfefe4e1137c52a33bc33 100644 (file)
@@ -1,3 +1,368 @@
+dgit (9.14~) unstable; urgency=medium
+
+  * 
+
+ --
+
+dgit (9.13) unstable; urgency=medium
+
+  * gitattributes defuse: work even if .git/info/attributes missing
+    (Closes: #981344)
+  * dgit-maint-*(7): Advice for git-debpush users.
+    Closes:#932520.  [Sean Whitton]
+  * dgit.1: drop remark about sbuild not building arch-independent.
+    Closes:#952442.  [Helmut Grohne]
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Fri, 12 Feb 2021 12:48:15 +0000
+
+dgit (9.12) unstable; urgency=medium
+
+  Bugfixes:
+  * dgit-mirror-ssh-wrap: Cope with yet another new rsync rune.
+    Closes:#968635. [Sergio Durigan Junior]
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Wed, 19 Aug 2020 17:25:45 +0100
+
+dgit (9.11) unstable; urgency=medium
+
+  Bugfixes:
+  * git-debrebase, git-debpush: fail when looking for upstream tag if
+    there is more than one candidate.  Closes:#961682.  [Sean Whitton]
+  * git-debrebase: Fix error message for wrong use of -i
+  * git-debrebase: new-upstream: Do not treat late options as version
+
+  Documentation:
+  * dgit-maint-debrebase(7): Drop some bad advice about the upstream/ tag
+    case.  Closes:#961683.  [Sean Whitton]
+  * git-debrebase(1): Fix new-upstream -i docs
+
+  dgit-infrastructure:
+  * dgit-mirror-ssh-wrap: Cope with new rsync rune.  Closes:#963489.
+  * dgit-mirror-ssh-wrap: Clarify the error message 
+
+ Test suite:
+  * Cope with buster & eatmydata (ie, work around #963508)
+  * Provide navigation banner in log when exiting nonzero
+  * Print pwd in failure trap to help with diagnosis
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Mon, 22 Jun 2020 19:09:17 +0100
+
+dgit (9.10) unstable; urgency=medium
+
+  dgit bugfix:
+  * Work around gbp metadata handling bug which can prevent import
+    of some anomalous source packages.  Closes:#950326.
+    Report from Peter Green.
+
+  git-debpush bugfix:
+  * avoid a pipefail problem.  Closes:#940588.  [Sean Whitton]
+
+  Documentation:
+  * Terminology: Change "rewind" to "rewrite" where appropriate
+  * dgit(1): Cover more cases of --overwrite and --deliberately
+    Closes:#928473.
+  * dgit(1): Do not talk about `intermediate' uploads.
+  * d-m-{merge,debrebase}(7): Use an 'upstream/' tag prefix in
+    gbp.conf; set `merge' in gbp.conf; import tarball before
+    committing gbp.conf.  Closes:#932954.  [Sean Whitton]
+
+  i18n:
+  * Updated nl.po file.  Closes:#945356.  [Frans Spiesschaert]
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Mon, 03 Feb 2020 08:41:10 +0000
+
+dgit (9.9) unstable; urgency=medium
+
+  Documentation:
+  * dgit-maint-{merge,debrebase}(7): Suggest a better rune.
+    (`git fetch --tags upstream')  Closes:#939679.  [Sean Whitton]
+  * git-debpush(1) minor improvements.  Closes:#935084.  [Sean Whitton]
+  * dgit(1): Fix a typo (found by lintian)
+  * dgit-maint-bpo(7): Mention occasional need for --new.  Closes:#935443.
+  * git-debrebase: Extend extended description for this .deb.
+
+  Infrastructure:
+  * New script dgit-mirror-ssh-wrap suitable for use as restricted
+    command on repos mirror target hosts, and corresponding test.
+
+  Packaging niggles:
+  * control: Add missing dependency on liburl-perl (dgit and tests)
+  * control: Drop redundant Priority field for dgit-infrastruture
+  * control: update Vcs-Git to end in .git
+  * lintian: Override some checks
+  * control: Bump Standards-Version to 4.4.0.0.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sat, 14 Sep 2019 21:34:13 +0100
+
+dgit (9.8) unstable; urgency=medium
+
+  dgit, important bugfixes for bugs introduced in 9.6:
+  * Once again cope with archive skew.  Closes:#935874.
+    [Initial report from Colin Watson]
+  * Follow http[s] redirects again.  Closes:#939564.
+
+  dgit, useful new behaviours and fixes:
+  * Use distro-info-data to resolve unknown suites.  Closes:#931212.
+    [Suggestion from Simon McVittie]
+  * Try to warn about misplacement of dgit options.  Closes:#934807.
+    [Useability report from Félix Sipma]
+  * Fail early when the archive/ tag already exists, ie when version
+    needs to be not reused.  Closes:#935802.
+    [Useability report from IOhannes m zmölnig]
+  * Do not mistakely reject .asc and .sig files with push-source -C.
+    Closes:#939280.  [Report from Simon McVittie]
+
+  docs:
+  * dgit-maint-{merge,debrebase}(7): Suggest git fetch --all --tags
+    as it handles tags better.  [Sean Whitton]  Closes:#939504.
+  * git-debrebase(5): Tiny typo fix.
+  * dgit(1): Some semantic linefeeds (no change to rendered output)
+
+  Supporting changes:
+  * test suite: New test for http mirror and archive skew
+  * test suite: Test already-tagged check
+  * test suite: Add --force-reusing-version to many tests as now needed
+  * Dgit: Minor refactoring of a regexp.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Fri, 06 Sep 2019 23:42:15 +0100
+
+dgit (9.7) unstable; urgency=medium
+
+  dgit general bugfixes:
+  * Correctly test for presence of git repo on dgit git server.
+    Fixes behaviour following mixed dgit/non-dgit uploads.  Closes:#934126.
+    (Was badly broken by http fetching rework in dgit 9.6.)
+  * Fix use on NFS, by closing a file which is going to be deleted.
+    [Report and fix from Stéphane Glondu]  Closes:#933827.
+
+  dgit vcs-git bugfixes:
+  * Strip [<path>] (used eg by Debian Haskell Team).  Closes:#932699.
+  * update-vcs-git: Cope if url is unchanged.
+  * update-vcs-git: Strip -b (as it always should have done).
+
+  Test suite:
+  * New facilities for http testing, including mock webservers.
+  * New test cases for http, and for bugs fixed in this version.
+  * Switch to using http git check in three existing tests.
+  * Improve debian/tests/control generator.
+  * Limited refactoring to support other changes.
+
+  Other minor changes:
+  * dgit: Slightly more debugging for check_for_git with http[s]
+  * changelog: Fix a typo in the entry for 9.6.
+  * i18n (messages) updated, following message changes.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sun, 11 Aug 2019 01:11:01 +0100
+
+dgit (9.6) unstable; urgency=medium
+
+  * git-playtree-setup had a spurious set -x so many programs spewed
+    debugging output.  This is now fixed.  Closes:#932959.
+
+  dgit:
+  * Drop support for configuring old, not currently enabled, methods
+    of TLS key/cert pinning.  We are going to revisit this soon.
+  * Provide a --for-push option (useful in for certain special users).
+  * Reduce variety in HTTP clients we use.  Specifically, use WWW::Curl
+    for accessing (i) the ftpmaster API, (ii) the http dgit git server
+    mirror (iii) downloading the .dsc.
+
+  Administrivia:
+  * Add missing Closes of #932476 to changelog entry for 9.5
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Thu, 25 Jul 2019 13:12:08 +0100
+
+dgit (9.5) unstable; urgency=medium
+
+  git-debpush [Sean Whitton]:
+  * Support ignoring individual checks with --force=check.  Closes:#932459.
+  * Check upstream source is identical in the upstream tag.  Closes:#932476.
+  * Check that patches are (un)applicable.  Closes:#932477.
+  * Check for an unstitched git-debrebase branch.  Closes:#932612.
+  * Check for explicitly pushing detached HEAD.
+
+  dgit clone [Ian Jackson]:
+  * No longer create an "origin" remote.  Closes:#932694.
+
+  Documentation:
+  * dgit-maint-bpo(7): new manpage for maintainers of official Debian
+    backports.  Closes:#857490.  [Sean Whitton]
+  * git-debrebase(1): make this manpage a less intimidating entry point.
+    Closes:#926656.
+    [Sean Whitton & Ian Jackson; prompted by feedback from Sam Hartman]
+
+  Miscellaneous:
+  * Correct the description of --force in git-debpush(1) [Sean Whitton].
+  * git-debrebase(*): fix some crossreferences [Sean Whitton].
+    Closes:#932536.
+  * Break out git-playtree-setup and rewrite in shell. [Ian Jackson]
+  * Fix organisation copyright attribution for Matthew Vernon's
+    contributions.  Closes:#932630.
+  * HACKING: new document for helping people work on the code. [Ian Jackson]
+  * Update Vcs-Git etc. to point to salsa.
+
+ -- Sean Whitton <spwhitton@spwhitton.name>  Mon, 22 Jul 2019 21:38:19 +0100
+
+dgit (9.4) unstable; urgency=medium
+
+  dgit:
+  * Support the Ubuntu Cloud Archive [Matthew Vernon]. Closes:#932322.
+
+  test suite:
+  * tag-to-upload tests: Tolerate a changed git message.  Closes:#932475.
+
+  administrivia:
+  * debian/copyright: Add some missing credtis
+  * Update copyright notices in many files
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sat, 20 Jul 2019 16:26:32 +0100
+
+dgit (9.3) unstable; urgency=medium
+
+  dgit and git-debrebase bugfixes:
+  * No longer crash if .git/logs does not exist when we need it.
+  * Report the upstream tag, rather than commit id, in tags/commits,
+    if the user explicitly specifies refs/tags/...
+
+  tag-to-upload, git-debpush [Sean Whitton]:
+  * Several new checks designed to prevent broken uploads.
+    - Including: Check that upstream tag is ancestor of branch to be tagged.
+      Closes:#932096
+  * Cope with spaces in user-supplied upstream tag.
+
+  tag-to-upload, server side:
+  * Fix non-default quilt modes.  These were all previously broken.
+  * Arrange to report the upstream tag in dgit-generated commits/tags.
+
+  dgit archive query improvements [Matthew Vernon]:
+  * dgit(1): document the presence of the aptget method.  Closes:#932321.
+
+  minor supporting changes:
+  * New tests tagupl-baredebian and tagupl-gbp.
+  * Tiny addition to debugging output and test suite output.
+  * Test suite rearrangements.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Thu, 18 Jul 2019 03:10:25 +0100
+
+dgit (9.2) unstable; urgency=medium
+
+  * No change upload to force rebuild on buildd.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Tue, 09 Jul 2019 22:01:25 +0100
+
+dgit (9.1) unstable; urgency=medium
+
+  New tools for a "git-push-to-upload" workflow [Ian Jackson & Sean Whitton]:
+  * New script in a new binary package: git-debpush.
+    The new binary package is small, but
+    + git-debpush needs to be in src:dgit, because its test suite is the
+      dgit test suite; however,
+    + git-debpush is functionally and conceptually independent of dgit,
+      so should not go into bin:dgit; in particular
+    + git-debpush's dependencies are quite different to the other
+      binary packages.
+  * New dgit-infrastructure subcommand, tag2upload, to process tags made
+    by git-debpush.
+    Please see git-debpush(1) for a sketch of the workflow.
+
+  dgit:
+  * Allow the -p option to be used with various push modes.
+  * Include dgit tag metadata in maintainer view tags.
+    For consistency with, and use by, git-debpush.
+  * Include quilt metadata in the archive/ (dgit view) tag.
+  * rpush protocol: Version 6, which includes split brain information
+    for maintainer view tags.  And, actually use newer version
+    (was broken in 9.0, which would prefer to select 4 not 5).
+  * Add some missing blank lines to tag messages.
+  * Some other refactoring.
+
+  Other documentation:
+  * dgit(1): fix a reference in the description of --quilt=auto [Sean
+    Whitton].
+
+  Translations:
+  * Do not translate tag subject lines, because these are parsed by
+    dgit-repos-server.
+
+  Test suite:
+  * Test cases for new tools for "git-push-to-upload" workflow.
+  * drs-git-ext: honour DGIT_DRS_MODE.
+  * Provide a stunt sendmail and a stunt dgit.
+  * Unset CDPATH in case caller has it set.
+  * Some other refactoring.
+
+  Administrivia:
+  * Update d/copyright years to include 2019 [Sean Whitton].
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sun, 07 Jul 2019 14:28:27 +0100
+
+dgit (9.0) unstable; urgency=medium
+
+  dgit - low-impact incompatible change:
+  * Drop support for, and testing of, dgit versions which use old tag name
+    (debian/V; now that is maintainer view and dgit is archive/debian/V).
+    The new tags came in in dgit 2.0 in October 2016.  No version of dgit
+    without them was in any Debian release.  We don't expect there are any
+    sites using old servers which do not support the new format, or anyone
+    using a dgit client older than 2.x who cannot upgrade.
+
+  git-debrebase fixes [Niko Tyni]:
+  * Fix `git-debrebase convert-from-dgit-view <upstream>', which
+    would crash due to an argument parser bug.  Closes:#930214.
+  * git-debrebase(1): typo fix.  Closes:#930215.
+
+  dgit - new capabilities:
+  * Support split view with native packages, and with all quilt modes.
+    Now we distinguish "split view" (meaning separate dgit branch) from
+    "splitting quilt modes" (eg --quilt-unapplied).
+    [Prompted in part by enquiries from Sam Hartman]  Closes:#926640.
+  * Support for bare debian/ directory (aka packaging-only) git branches
+    Ie, --quilt=baredebian[+tarball].  [Thanks for info from Shengjing
+    Zhu, and docs and UI contributions/review from Sean Whitton.]
+    Closes:#903392.  Closes:#931253.
+
+  dgit - bugfixes:
+  * Fix --dgit-view-save option alias, which never worked.
+    (--save-dgit-view worked, and still does, though.)
+  * i18n: Do not translate import commit messages.
+
+  dgit - other documentation improvements [Sean Whitton]:
+  * Expand on description of --include-dirty.  New text may help
+    user avoid unexpected file deletion.  Closes:#930922.
+  * dgit-maint-*(7): Suggest --name-status --diff-filter.  Closes:#930956.
+  * dgit-maint-*(7): Using untagged upstream commits.  Closes:#930964.
+
+  dgit - minor consequences of these other changes:
+  * Actually properly reject invalid quilt modes found in git config.
+    (Previously they might be accepted and then cause malfunctions.)
+  * Reject split brain quilt modes with single-debian-patch.
+    (Previously this would malfunction; now we reject it.)
+  * i18n: Add translator notes about ASCII art changes display.
+  * Drop "dgit view: changes are required..." message.
+  * Some other minor changes to quilt fixup error handling.
+  * Changes to debugging output related to quilt modes and split view.
+  * Introduce rpush protocol version 5.  Minimum version is now 4.
+  * Considerable internal rearrangement of quilt fixup code.
+  * Considerable test suite work including new tests.
+
+  dgit test suite:
+  * dgit-repos-policy-debian: Test taint removal.  Closes:#929249.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Tue, 02 Jul 2019 16:55:15 +0100
+
+dgit (8.6~) UNRELEASED; urgency=medium
+
+  * dgit: rpush: Work in splitting quilt modes, again.  Closes:#931213.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Tue, 02 Jul 2019 14:36:47 +0100
+
+dgit (8.5) unstable; urgency=medium
+
+  * Replace `confess $!' with `confess "$!"', to actually print errno
+    when crashing.  Closes:#929549.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Mon, 27 May 2019 00:20:58 +0100
+
 dgit (8.4) unstable; urgency=medium
 
   Bugfixes:
index eef4dca84c97ca2279e9f8c7b197b0f25e93f541..210c5b73e3e97cf6b4aa0389990cde449c92eaaa 100644 (file)
@@ -2,21 +2,22 @@ Source: dgit
 Section: devel
 Priority: optional
 Maintainer: Ian Jackson <ijackson@chiark.greenend.org.uk>
-Standards-Version: 3.9.4.0
+Standards-Version: 4.4.0.0
 Build-Depends: debhelper (>= 9), gettext, po4a, tcl
 Testsuite: autopkgtest
-Vcs-Git: git://git.chiark.greenend.org.uk/~ianmdlvl/dgit.git
-Vcs-Browser: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git/dgit.git/
+Vcs-Git: https://salsa.debian.org/dgit-team/dgit.git
+Vcs-Browser: https://salsa.debian.org/dgit-team/dgit
 
 Package: dgit
-Depends: perl, libwww-perl, libdpkg-perl, git-core, devscripts, dpkg-dev,
+Depends: perl, libdpkg-perl, git-core, devscripts, dpkg-dev,
          ${misc:Depends}, git-buildpackage, liblist-moreutils-perl,
          liblocale-gettext-perl,
          coreutils (>= 8.23-1~),
          libdigest-sha-perl, dput, curl, apt,
          libjson-perl, ca-certificates,
-         libtext-iconv-perl, libtext-glob-perl
-Recommends: ssh-client
+         libtext-iconv-perl, libtext-glob-perl, libwww-curl-perl,
+         libtext-csv-perl
+Recommends: ssh-client, distro-info-data, liburi-perl
 Suggests: sbuild | pbuilder | cowbuilder
 Architecture: all
 Description: git interoperability with the Debian archive
@@ -36,15 +37,30 @@ Architecture: all
 Description: rebasing git workflow tool for Debian packaging
  git-debrebase is a tool for representing in git, and manipulating,
  Debian packages based on upstream source code.
+ .
+ git-debrebase is an alternative to workflows including git-dpm,
+ gbp pq, and direct use of quilt patches.
+
+Package: git-debpush
+Depends: devscripts, git, gnupg, ${misc:Depends}
+Architecture: all
+Description: client script for git pushing to Debian-style archives
+ git-debpush is a script to create and push a specially formatted
+ signed git tag.  The metadata in the tag indicates that the tagged
+ commit should be pushed (or "uploaded") to a Debian-style archive.
+ .
+ Tags generated by this script can be read by an intermediary service,
+ which performs any conversion that's needed (such as producing and
+ signing a .dsc and .changes), and then uploads the result to the
+ Debian-style archive on your behalf.
 
 Package: dgit-infrastructure
 Depends: ${misc:Depends}, perl, git-core, gpgv, chiark-utils-bin,
          libjson-perl, libdigest-sha-perl, libdbd-sqlite3-perl, sqlite3,
-         libwww-perl, libdpkg-perl,
+         libdpkg-perl,
          liblocale-gettext-perl
 Recommends: dgit
 Architecture: all
-Priority: extra
 Description: dgit server backend infrastructure
  This package contains tools which are useful for setting up a dgit
  git repository server.  You probably want dgit, the client package,
index f5c879d97cbef5f008b3db33cdd8886d8ae13435..cb3519848323907c90d8d3d0b52dc696c7659a8a 100644 (file)
@@ -1,10 +1,14 @@
 dgit
 Integration between git and Debian-style archives
 
-Copyright (C)2013-2018 Ian Jackson
-Copyright (C)2016-2018 Sean Whitton
+Copyright (C)2013-2019 Ian Jackson
+Copyright (C)2016-2019 Sean Whitton
+Copyright (C)2018-2019 Frans Spiesschaert
+Copyright (C)2019      Matthew Vernon / Genome Research Limited
+Copyright (C)2019      Paul Hardy
 Copyright (C)1999-2010 Joey Hess
 Copyright (C)2004-2010 Colin Watson
+Copyright (C)2004-2015 Best Practical Solutions, LLC
 
 
 This program is free software: you can redistribute it and/or modify
diff --git a/debian/dgit.lintian-overrides b/debian/dgit.lintian-overrides
new file mode 100644 (file)
index 0000000..2f7a968
--- /dev/null
@@ -0,0 +1,2 @@
+manpage-has-errors-from-man usr/share/man/man1/dgit.1.gz file '<standard input>', around line 51:
+binary-without-manpage usr/bin/dgit-badcommit-fixup
diff --git a/debian/git-debpush.install b/debian/git-debpush.install
new file mode 100644 (file)
index 0000000..afba498
--- /dev/null
@@ -0,0 +1 @@
+git-playtree-setup     /usr/share/git-debpush
index da482ed187473cd7aee793837ff61083e938df43..4d1a760274e419a93444c3e98291881f28839ab9 100755 (executable)
@@ -3,7 +3,8 @@
 # dgit
 # Integration between git and Debian-style archives
 #
-# Copyright (C)2013-2016 Ian Jackson
+# Copyright (C)2013-2019 Ian Jackson
+# Copyright (C)2019      Sean Whitton
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -36,28 +37,47 @@ override_dh_auto_clean:
 
 globalperl=/usr/share/perl5
 
-override_dh_auto_install: specpkg_install_gdr specpkg_install_infra
+override_dh_auto_install: specpkg_install_gdp \
+ specpkg_install_gdr \
+ specpkg_install_infra
        make install prefix=/usr DESTDIR=debian/dgit
        make -C po install prefix=/usr DESTDIR=../debian/tmp \
                SUPPRESS_PO_UPDATE=1 S=''
+       mv debian/dgit/usr/bin/git-playtree-setup debian/dgit/usr/share/dgit
        make -C po4a install DESTDIR=../debian/tmp S=''
 
 override_dh_missing:
        dh_missing --fail-missing
 
+specpkg_install_gdp: p=git-debpush
+
 specpkg_install_gdr: p=git-debrebase
 specpkg_install_gdr: pm=GDR
 
 specpkg_install_infra: p=dgit-infrastructure
 specpkg_install_infra: pm=Infra
 
+define specpkg_install_common
+       make install-$(tok) prefix=/usr DESTDIR=debian/$(p) perldir=$(specperl)
+endef
+
+specpkg_install_gdp: tok=gdp
+specpkg_install_gdp: specperl=/usr/share/dgit/gdp/perl5
+specpkg_install_gdp:
+       $(specpkg_install_common)
+       set -x; perl -i -pe 'next unless m/###substituted###/;' \
+ -e 's{^(git_playtree_setup)=.*}{$$1=/usr/share/$p/git-playtree-setup};' \
+               debian/$(p)/usr/bin/*
+
 specpkg_install_%: tok=$*
 specpkg_install_%: specperl=/usr/share/dgit/$(tok)/perl5
 specpkg_install_%:
-       make install-$(tok) prefix=/usr DESTDIR=debian/$(p) perldir=$(specperl)
+       $(specpkg_install_common)
 #      # Most of the Perl modules in this package live in
 #      # $(specperl).  The exception is Debian::Dgit::Infra, which
 #      # lives in $(globalperl) and adds $(specperl) to @INC.
+#      # We also abuse this for git-playtree-setup.  In .debs, this
+#      # goes in the per-.deb @INC dir.  See Dgit.pm::playtree_setup.
        set -ex; \
         base=debian/$(p); \
         mod=Debian/Dgit/$(pm).pm; \
@@ -65,6 +85,7 @@ specpkg_install_%:
         dst=$${base}$(globalperl)/$${mod}; \
         mkdir -p $${dst%/*}; \
         mv -f $$src $$dst; \
+        install -m 755 git-playtree-setup $${base}$(specperl); \
         perl -i -p -e 'next unless m/###substituted###/;' \
                -e 'next unless s/^# (?=unshift \@INC,)//;' \
                -e 'die unless s{q\{\S+\}}{q{$(specperl)}};' \
diff --git a/debian/source/lintian-overrides b/debian/source/lintian-overrides
new file mode 100644 (file)
index 0000000..26924a1
--- /dev/null
@@ -0,0 +1,4 @@
+file-contains-trailing-whitespace debian/changelog *
+unknown-runtime-tests-restriction x-dgit-*
+missing-debian-source-format
+older-source-format 1.0
index 7f0a90820722500b221762b044db40979b46b07d..46ee740adc58d858c65ba64938af680032a0205f 100644 (file)
@@ -1,32 +1,44 @@
+Tests: baredebian-multitar baredebian-plusgit baredebian-push baredebian-tarball
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, quilt, git-debrebase, git-buildpackage, libdpkg-perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-perl
+
 Tests: build-modes-gbp
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, git-buildpackage
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, git-buildpackage
 
 Tests: clone-reprepro downstream-gitless
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, reprepro
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, reprepro
 
 Tests: dpkgsourceignores-docs
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl
 Restrictions: x-dgit-intree-only
 
 Tests: defdistro-dsd-clone-drs dsd-clone-drs
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl
 Restrictions: x-dgit-intree-only x-dgit-git-only
 
+Tests: alternating-dgit clone-gitnosuite clone-nogit clone-skew drs-clone-nogit dsd-clone-nogit ftpmasterapi-http
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, libhttp-server-simple-static-perl
+
+Tests: gdr-import-dgit
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, git-debrebase, git-buildpackage, libhttp-server-simple-static-perl
+
 Tests: gdr-merge-conflicts
 Tests-Directory: tests/tests
 Depends: chiark-utils-bin, faketime, git-debrebase, git-buildpackage, quilt
 
-Tests: gdr-diverge-nmu gdr-diverge-nmu-dgit gdr-edits gdr-fresh gdr-import-dgit gdr-import-dgitview gdr-import-nostitch gdr-makepatches7 gdr-merge gdr-subcommands gdr-unprocessable gdr-unprocessable-hints
+Tests: gdr-diverge-nmu gdr-diverge-nmu-dgit gdr-edits gdr-fresh gdr-import-dgitview gdr-import-nostitch gdr-makepatches7 gdr-merge gdr-subcommands gdr-unprocessable gdr-unprocessable-hints
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, git-debrebase, git-buildpackage
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, git-debrebase, git-buildpackage
 
 Tests: gitattributes
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, bsdgames, man-db, git-man
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, bsdgames, man-db, git-man
 
 Tests: hint-testsuite-triggers
 Tests-Directory: tests/tests
@@ -39,36 +51,52 @@ Depends: chiark-utils-bin, faketime, git-debrebase, git-buildpackage
 
 Tests: manpages-format
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, man-db, make, groff, git-debrebase
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, man-db, make, groff, git-debrebase, git-debpush
 
 Tests: defdistro-mirror mirror mirror-debnewgit mirror-private
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, rsync
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, rsync
 
 Tests: build-modes-sbuild quilt-gbp-build-modes-sbuild
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, sbuild
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, sbuild
 Restrictions: x-dgit-schroot-build
 
 Tests: sbuild-gitish
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, sbuild, man-db
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, sbuild, man-db
 Restrictions: x-dgit-schroot-build
 
 Tests: i18n-po4a-uptodate package-build spelling
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl
 Restrictions: x-dgit-git-only
 
+Tests: tagupl
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, libdpkg-perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-perl, git-debpush
+
+Tests: tagupl-baredebian
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, quilt, git-debpush, git-debrebase, git-buildpackage, libdpkg-perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-perl
+
+Tests: tagupl-gbp
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, git-debpush, libdpkg-perl, libgit-wrapper-perl, liblist-compare-perl, libstring-shellquote-perl, libtry-tiny-perl
+
+Tests: tagupl-native
+Tests-Directory: tests/tests
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, git-debpush
+
 Tests: test-list-uptodate
 Tests-Directory: tests/tests
 Depends: git
 
 Tests: trustingpolicy-replay
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, dput-ng
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl, dput-ng
 
-Tests: absurd-gitapply badcommit-rewrite build-modes build-modes-long build-modes-source checkout clone-clogsigpipe clone-gitnosuite clone-nogit debpolicy-dbretry debpolicy-newreject debpolicy-quilt-gbp defdistro-rpush defdistro-setup distropatches-reject dpkgsourceignores-correct drs-clone-nogit drs-push-masterupdate drs-push-rejects dsd-clone-nogit dsd-divert fetch-localgitonly fetch-somegit-notlast gbp-orig gitconfig gitworktree import-dsc import-linkorigs import-maintmangle import-native import-nonnative import-tarbomb inarchivecopy mismatches-contents mismatches-dscchanges multisuite newtag-clone-nogit oldnewtagalt oldtag-clone-nogit orig-include-exclude orig-include-exclude-chkquery overwrite-chkclog overwrite-junk overwrite-splitbrains overwrite-version pbuilder protocol-compat push-buildproductsdir push-newpackage push-newrepeat push-nextdgit push-source push-source-with-changes quilt quilt-gbp quilt-gbp-build-modes quilt-singlepatch quilt-splitbrains quilt-useremail rpush sourceonlypolicy tag-updates unrepresentable version-opt
+Tests: absurd-gitapply badcommit-rewrite build-modes build-modes-long build-modes-source checkout clone-clogsigpipe debpolicy-dbretry debpolicy-newreject debpolicy-quilt-gbp debpolicy-taintrm defdistro-rpush defdistro-setup distropatches-reject dpkgsourceignores-correct drs-push-masterupdate drs-push-rejects dsd-divert fetch-localgitonly fetch-somegit-notlast forcesplit-linear forcesplit-overwrite gbp-orig gitconfig gitworktree import-dsc import-linkorigs import-maintmangle import-native import-nonnative import-tarbomb inarchivecopy mismatches-contents mismatches-dscchanges multisuite orig-include-exclude orig-include-exclude-chkquery overwrite-chkclog overwrite-junk overwrite-splitbrains overwrite-version pbuilder protocol-compat push-buildproductsdir push-newpackage push-newrepeat push-nextdgit push-source push-source-with-changes quilt quilt-gbp quilt-gbp-build-modes quilt-singlepatch quilt-splitbrains quilt-useremail rpush rpush-quilt sourceonlypolicy tag-updates unrepresentable version-opt
 Tests-Directory: tests/tests
-Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime
+Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl
 
diff --git a/dgit b/dgit
index a0d2e0a0f86034b6accf6fe81fb4f8556c65d9b3..145fa9bb044be29d383f8849f7766ff0a72f2eab 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -2,8 +2,9 @@
 # dgit
 # Integration between git and Debian-style archives
 #
-# Copyright (C)2013-2018 Ian Jackson
-# Copyright (C)2017-2018 Sean Whitton
+# Copyright (C)2013-2019 Ian Jackson
+# Copyright (C)2017-2019 Sean Whitton
+# Copyright (C)2019      Matthew Vernon / Genome Research Limited
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,12 +30,13 @@ setup_sigwarn();
 
 use IO::Handle;
 use Data::Dumper;
-use LWP::UserAgent;
+use WWW::Curl::Easy;
 use Dpkg::Control::Hash;
 use File::Path;
 use File::Spec;
 use File::Temp qw(tempdir);
 use File::Basename;
+use File::Copy ();
 use Dpkg::Version;
 use Dpkg::Compression;
 use Dpkg::Compression::Process;
@@ -45,6 +47,7 @@ use Digest::SHA;
 use Digest::MD5;
 use List::MoreUtils qw(pairwise);
 use Text::Glob qw(match_glob);
+use Text::CSV;
 use Fcntl qw(:DEFAULT :flock);
 use Carp;
 
@@ -53,7 +56,9 @@ use Debian::Dgit;
 our $our_version = 'UNRELEASED'; ###substituted###
 our $absurdity = undef; ###substituted###
 
-our @rpushprotovsn_support = qw(4 3 2); # 4 is new tag format
+$SIG{INT} = 'DEFAULT'; # work around #932841
+
+our @rpushprotovsn_support = qw(6 5 4); # Reverse order!
 our $protovsn;
 
 our $cmd;
@@ -79,29 +84,32 @@ our $changes_since_version;
 our $rmchanges;
 our $overwrite_version; # undef: not specified; '': check changelog
 our $quilt_mode;
-our $quilt_modes_re = 'linear|smash|auto|nofix|nocheck|gbp|dpm|unapplied';
+our $quilt_upstream_commitish;
+our $quilt_upstream_commitish_used;
+our $quilt_upstream_commitish_message;
+our $quilt_options_re = 'gbp|dpm|baredebian(?:\+tarball|\+git)?';
+our $quilt_modes_re = "linear|smash|auto|nofix|nocheck|unapplied|$quilt_options_re";
+our $splitview_mode;
+our $splitview_modes_re = qr{auto|always|never};
 our $dodep14tag;
 our %internal_object_save;
 our $we_are_responder;
 our $we_are_initiator;
 our $initiator_tempdir;
 our $patches_applied_dirtily = 00;
-our $tagformat_want;
-our $tagformat;
-our $tagformatfn;
 our $chase_dsc_distro=1;
 
 our %forceopts = map { $_=>0 }
     qw(unrepresentable unsupported-source-format
        dsc-changes-mismatch changes-origs-exactly
        uploading-binaries uploading-source-only
+       reusing-version
        import-gitapply-absurd
        import-gitapply-no-absurd
        import-dsc-with-dgit-field);
 
 our %format_ok = map { $_=>1 } ("1.0","3.0 (native)","3.0 (quilt)");
 
-our $suite_re = '[-+.0-9a-z]+';
 our $cleanmode_re = qr{(?: dpkg-source (?: -d )? (?: ,no-check | ,all-check )?
                      | (?: git | git-ff ) (?: ,always )?
                          | check (?: ,ignores )?
@@ -114,7 +122,6 @@ our $rewritemap = 'dgit-rewrite/map';
 
 our @dpkg_source_ignores = qw(-i(?:^|/)\.git(?:/|$) -I.git);
 
-our (@git) = qw(git);
 our (@dget) = qw(dget);
 our (@curl) = (qw(curl --proto-redir), '-all,http,https', qw(-L));
 our (@dput) = qw(dput);
@@ -175,7 +182,31 @@ our $keyid;
 autoflush STDOUT 1;
 
 our $supplementary_message = '';
-our $split_brain = 0;
+our $made_split_brain = 0;
+our $do_split_brain;
+
+# Interactions between quilt mode and split brain
+# (currently, split brain only implemented iff
+#  madformat_wantfixup && quiltmode_splitting)
+#
+#   source format        sane           `3.0 (quilt)'
+#                                       madformat_wantfixup()
+#
+#   quilt mode                          normal              quiltmode
+#                                       (eg linear)         _splitbrain
+#
+#   ------------      ------------------------------------------------
+#
+#   no split          no q cache        no q cache          forbidden,
+#     brain           PM on master      q fixup on master   prevented
+#   !do_split_brain()                    PM on master
+#
+#   split brain       no q cache        q fixup cached, to dgit view
+#                     PM in dgit view   PM in dgit view
+#
+# PM = pseudomerge to make ff, due to overwrite (or split view)
+# "no q cache" = do not record in cache on build, do not check cache
+# `3.0 (quilt)' with --quilt=nocheck is treated as sane format
 
 END {
     local ($@, $?);
@@ -193,11 +224,6 @@ if (!defined $absurdity) {
     $absurdity =~ s{/[^/]+$}{/absurd} or die;
 }
 
-sub debiantag ($$) {
-    my ($v,$distro) = @_;
-    return $tagformatfn->($v, $distro);
-}
-
 sub madformat ($) { $_[0] eq '3.0 (quilt)' }
 
 sub lbranch () { return "$branchprefix/$csuite"; }
@@ -275,10 +301,16 @@ sub deliberately_not_fast_forward () {
     }
 }
 
-sub quiltmode_splitbrain () {
-    $quilt_mode =~ m/gbp|dpm|unapplied/;
+sub quiltmode_splitting () {
+    $quilt_mode =~ m/gbp|dpm|unapplied|baredebian/;
+}
+sub format_quiltmode_splitting ($) {
+    my ($format) = @_;
+    return madformat_wantfixup($format) && quiltmode_splitting();
 }
 
+sub do_split_brain () { !!($do_split_brain // confess) }
+
 sub opts_opt_multi_cmd {
     my $extra = shift;
     my @cmd;
@@ -424,7 +456,7 @@ sub branch_is_gdr ($) {
 #  > progress NBYTES
 #  [NBYTES message]
 #
-#  > supplementary-message NBYTES          # $protovsn >= 3
+#  > supplementary-message NBYTES
 #  [NBYTES message]
 #
 # main sequence:
@@ -444,7 +476,8 @@ sub branch_is_gdr ($) {
 #
 #  > param head DGIT-VIEW-HEAD
 #  > param csuite SUITE
-#  > param tagformat old|new
+#  > param tagformat new              # $protovsn == 4
+#  > param splitbrain 0|1             # $protovsn >= 6
 #  > param maint-view MAINT-VIEW-HEAD
 #
 #  > param buildinfo-filename P_V_X.buildinfo   # zero or more times
@@ -524,11 +557,11 @@ sub protocol_send_file ($$) {
        my $got = read PF, $d, 65536;
        die "$ourfn: $!" unless defined $got;
        last if !$got;
-       print $fh "data-block ".length($d)."\n" or confess $!;
-       print $fh $d or confess $!;
+       print $fh "data-block ".length($d)."\n" or confess "$!";
+       print $fh $d or confess "$!";
     }
     PF->error and die "$ourfn $!";
-    print $fh "data-end\n" or confess $!;
+    print $fh "data-end\n" or confess "$!";
     close PF;
 }
 
@@ -553,9 +586,9 @@ sub protocol_receive_file ($$) {
        } $fh;
        last unless $y;
        my $d = protocol_read_bytes $fh, $l;
-       print PF $d or confess $!;
+       print PF $d or confess "$!";
     }
-    close PF or confess $!;
+    close PF or confess "$!";
 }
 
 #---------- remote protocol support, responder ----------
@@ -565,7 +598,7 @@ sub responder_send_command ($) {
     return unless $we_are_responder;
     # called even without $we_are_responder
     printdebug ">> $command\n";
-    print PO $command, "\n" or confess $!;
+    print PO $command, "\n" or confess "$!";
 }    
 
 sub responder_send_file ($$) {
@@ -600,8 +633,8 @@ sub initiator_expect (&) {
 sub progress {
     if ($we_are_responder) {
        my $m = join '', @_;
-       responder_send_command "progress ".length($m) or confess $!;
-       print PO $m or confess $!;
+       responder_send_command "progress ".length($m) or confess "$!";
+       print PO $m or confess "$!";
     } else {
        print @_, "\n";
     }
@@ -609,20 +642,6 @@ sub progress {
 
 our $ua;
 
-sub url_get {
-    if (!$ua) {
-       $ua = LWP::UserAgent->new();
-       $ua->env_proxy;
-    }
-    my $what = $_[$#_];
-    progress "downloading $what...";
-    my $r = $ua->get(@_) or confess $!;
-    return undef if $r->code == 404;
-    $r->is_success or fail f_ "failed to fetch %s: %s",
-       $what, $r->status_line;
-    return $r->decoded_content(charset => 'none');
-}
-
 our ($dscdata,$dscurl,$dsc,$dsc_checked,$skew_warning_vsn);
 
 sub act_local () { return $dryrun_level <= 1; }
@@ -680,7 +699,7 @@ Perhaps the upload is stuck in incoming.  Using the version from git.
 END
 
 sub badusage {
-    print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess $!;
+    print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess "$!";
     finish 8;
 }
 
@@ -693,7 +712,7 @@ sub pre_help () {
     not_necessarily_a_tree();
 }
 sub cmd_help () {
-    print __ $helpmsg or confess $!;
+    print __ $helpmsg or confess "$!";
     finish 0;
 }
 
@@ -709,7 +728,6 @@ our %defcfg = ('dgit.default.distro' => 'debian',
               'dgit.default.archive-query' => 'madison:',
               'dgit.default.sshpsql-dbname' => 'service=projectb',
               'dgit.default.aptget-components' => 'main',
-              'dgit.default.dgit-tag-format' => 'new,old,maint',
               'dgit.default.source-only-uploads' => 'ok',
               'dgit.dsc-url-proto-ok.http'    => 'true',
               'dgit.dsc-url-proto-ok.https'   => 'true',
@@ -756,6 +774,12 @@ our %defcfg = ('dgit.default.distro' => 'debian',
  'dgit-distro.debian-backports.mirror' => 'http://backports.debian.org/debian-backports/',
               'dgit-distro.ubuntu.git-check' => 'false',
  'dgit-distro.ubuntu.mirror' => 'http://archive.ubuntu.com/ubuntu',
+              'dgit-distro.ubuntucloud.git-check' => 'false',
+ 'dgit-distro.ubuntucloud.nominal-distro' => 'ubuntu',
+ 'dgit-distro.ubuntucloud.archive-query' => 'aptget:',
+ 'dgit-distro.ubuntucloud.mirror' => 'http://ubuntu-cloud.archive.canonical.com/ubuntu',
+ 'dgit-distro.ubuntucloud.aptget-suite-map' => 's#^([^-]+):([^:]+)$#${1}-updates/$2#; s#^(.+)-(.+):(.+)#$1-$2/$3#;',
+ 'dgit-distro.ubuntucloud.aptget-suite-rmap' => 's#/(.+)$#-$1#',
               'dgit-distro.test-dummy.ssh' => "$td/ssh",
               'dgit-distro.test-dummy.username' => "alice",
               'dgit-distro.test-dummy.git-check' => "ssh-cmd",
@@ -846,6 +870,22 @@ sub access_basedistro__noalias () {
                return $kl->{$k};
            }
        }
+       foreach my $csvf (</usr/share/distro-info/*.csv>) {
+           my $csv_distro =
+               $csvf =~ m{/(\w+)\.csv$} ? $1 : do {
+                   printdebug "skipping $csvf\n";
+                   next;
+               };
+           my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 }) or die;
+           my $fh = new IO::File $csvf, "<:encoding(utf8)"
+               or die "open $csvf: $!";
+           while (my $cols = $csv->getline($fh)) {
+               next unless $cols->[2] eq $isuite;
+               return $csv_distro;
+           }
+           die "$csvf $!" if $fh->error;
+           close $fh;
+       }
        return cfg("dgit.default.distro");
     }
 }
@@ -919,6 +959,20 @@ sub access_forpush () {
     return $access_forpush;
 }
 
+sub default_from_access_cfg ($$$;$) {
+    my ($var, $keybase, $defval, $permit_re) = @_;
+    return if defined $$var;
+
+    $$var = access_cfg("$keybase-newer", 'RETURN-UNDEF');
+    $$var = undef if $$var && $$var !~ m/^$permit_re$/;
+
+    $$var //= access_cfg($keybase, 'RETURN-UNDEF');
+    $$var //= $defval;
+
+    badcfg f_ "unknown %s \`%s'", $keybase, $$var
+       if defined $permit_re and $$var !~ m/$permit_re/;
+}
+
 sub pushing () {
     confess +(__ 'internal error').' '.Dumper($access_forpush)," ?" if
        defined $access_forpush and !$access_forpush;
@@ -936,15 +990,36 @@ sub notpushing () {
     parseopts_late_defaults();
 }
 
+sub determine_whether_split_brain ($) {
+    my ($format) = @_;
+    {
+       local $access_forpush;
+       default_from_access_cfg(\$splitview_mode, 'split-view', 'auto',
+                               $splitview_modes_re);
+       $do_split_brain = 1 if $splitview_mode eq 'always';
+    }
+
+    printdebug "format $format, quilt mode $quilt_mode\n";
+
+    if (format_quiltmode_splitting $format) {
+       $splitview_mode ne 'never' or
+           fail f_ "dgit: quilt mode \`%s' (for format \`%s')".
+                   " implies split view, but split-view set to \`%s'",
+                   $quilt_mode, $format, $splitview_mode;
+       $do_split_brain = 1;
+    }
+    $do_split_brain //= 0;
+}
+
 sub supplementary_message ($) {
     my ($msg) = @_;
     if (!$we_are_responder) {
        $supplementary_message = $msg;
        return;
-    } elsif ($protovsn >= 3) {
+    } else {
        responder_send_command "supplementary-message ".length($msg)
-           or confess $!;
-       print PO $msg or confess $!;
+           or confess "$!";
+       print PO $msg or confess "$!";
     }
 }
 
@@ -1081,7 +1156,7 @@ sub commit_getclogp ($) {
 }
 
 sub parse_dscdata () {
-    my $dscfh = new IO::File \$dscdata, '<' or confess $!;
+    my $dscfh = new IO::File \$dscdata, '<' or confess "$!";
     printdebug Dumper($dscdata) if $debuglevel>1;
     $dsc = parsecontrolfh($dscfh,$dscurl,1);
     printdebug Dumper($dsc) if $debuglevel>1;
@@ -1122,56 +1197,75 @@ sub cfg_apply_map ($$$) {
     $$varref = $_;
 }
 
-#---------- `ftpmasterapi' archive query method (nascent) ----------
+sub url_fetch ($;@) {
+    my ($url, %xopts) = @_;
+    # Ok404 => 1   means give undef for 404
+    # AccessBase => 'archive-query' (eg)
+    # CurlOpts => { key => value }
 
-sub archive_api_query_cmd ($) {
-    my ($subpath) = @_;
-    my @cmd = (@curl, qw(-sS));
-    my $url = access_cfg('archive-query-url');
-    if ($url =~ m#^https://([-.0-9a-z]+)/#) {
-       my $host = $1;
-       my $keys = access_cfg('archive-query-tls-key','RETURN-UNDEF') //'';
-       foreach my $key (split /\:/, $keys) {
-           $key =~ s/\%HOST\%/$host/g;
-           if (!stat $key) {
-               fail "for $url: stat $key: $!" unless $!==ENOENT;
-               next;
-           }
-           fail f_ "config requested specific TLS key but do not know".
-                   " how to get curl to use exactly that EE key (%s)",
-                   $key;
-#          push @cmd, "--cacert", $key, "--capath", "/dev/enoent";
-#           # Sadly the above line does not work because of changes
-#           # to gnutls.   The real fix for #790093 may involve
-#           # new curl options.
-           last;
+    my $curl  = WWW::Curl::Easy->new;
+    my $setopt = sub {
+       my ($k,$v) = @_;
+       my $x = $curl->setopt($k, $v);
+       confess "$k $v ".$curl->strerror($x)." ?" if $x;
+    };
+
+    my $response_body = '';
+    $setopt->(CURLOPT_FOLLOWLOCATION,  1);
+    $setopt->(CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS|CURLPROTO_HTTP);
+    $setopt->(CURLOPT_URL,             $url);
+    $setopt->(CURLOPT_NOSIGNAL,        1);
+    $setopt->(CURLOPT_WRITEDATA,       \$response_body);
+
+    my $xcurlopts = $xopts{CurlOpts} // { };
+    keys %$xcurlopts;
+    while (my ($k,$v) = each %$xcurlopts) { $setopt->($k,$v); }
+
+    if ($xopts{AccessBase} && $url =~ m#^https://([-.0-9a-z]+)/#) {
+       foreach my $k ("$xopts{AccessBase}-tls-key",
+                      "$xopts{AccessBase}-tls-curl-ca-args") {
+           fail "config option $k is obsolete and no longer supported"
+               if defined access_cfg($k, 'RETURN-UNDEF');
        }
-       # Fixing #790093 properly will involve providing a value
-       # for this on clients.
-       my $kargs = access_cfg('archive-query-tls-curl-ca-args','RETURN-UNDEF');
-       push @cmd, split / /, $kargs if defined $kargs;
     }
-    push @cmd, $url.$subpath;
-    return @cmd;
+
+    printdebug "query: fetching $url...\n";
+
+    local $SIG{PIPE} = 'IGNORE';
+
+    my $x = $curl->perform();
+    fail f_ "fetch of %s failed (%s): %s",
+       $url, $curl->strerror($x), $curl->errbuf
+       if $x;
+
+    my $code = $curl->getinfo(CURLINFO_HTTP_CODE);
+    if ($code eq '404' && $xopts{Ok404}) { return undef; }
+    
+    fail f_ "fetch of %s gave HTTP code %s", $url, $code
+       unless $url =~ m#^file://# or $code =~ m/^2/;
+
+    confess unless defined $response_body;
+    return $response_body;
+}
+
+#---------- `ftpmasterapi' archive query method (nascent) ----------
+
+sub api_query_raw ($;$) {
+    my ($subpath, $ok404) = @_;
+    my $url = access_cfg('archive-query-url');
+    $url .= $subpath;
+    return url_fetch $url,
+       Ok404 => $ok404,
+       AccessBase => 'archive-query';
 }
 
 sub api_query ($$;$) {
-    use JSON;
     my ($data, $subpath, $ok404) = @_;
+    use JSON;
     badcfg __ "ftpmasterapi archive query method takes no data part"
        if length $data;
-    my @cmd = archive_api_query_cmd($subpath);
-    my $url = $cmd[$#cmd];
-    push @cmd, qw(-w %{http_code});
-    my $json = cmdoutput @cmd;
-    unless ($json =~ s/\d+\d+\d$//) {
-       failedcmd_report_cmd undef, @cmd;
-       fail __ "curl failed to print 3-digit HTTP code";
-    }
-    my $code = $&;
-    return undef if $code eq '404' && $ok404;
-    fail f_ "fetch of %s gave HTTP code %s", $url, $code
-       unless $url =~ m#^file://# or $code =~ m/^2/;
+    my $json = api_query_raw $subpath, $ok404;
+    return undef unless defined $json;
     return decode_json($json);
 }
 
@@ -1299,17 +1393,17 @@ sub aptget_prep ($) {
     cfg_apply_map(\$aptsuites, 'suite map',
                  access_cfg('aptget-suite-map', 'RETURN-UNDEF'));
 
-    open SRCS, ">", "$aptget_base/$sourceslist" or confess $!;
+    open SRCS, ">", "$aptget_base/$sourceslist" or confess "$!";
     printf SRCS "deb-src %s %s %s\n",
        access_cfg('mirror'),
        $aptsuites,
        access_cfg('aptget-components')
-       or confess $!;
+       or confess "$!";
 
     ensuredir "$aptget_base/cache";
     ensuredir "$aptget_base/lists";
 
-    open CONF, ">", $aptget_configpath or confess $!;
+    open CONF, ">", $aptget_configpath or confess "$!";
     print CONF <<END;
 Debug::NoLocking "true";
 APT::Get::List-Cleanup "false";
@@ -1329,10 +1423,10 @@ END
                        Dir::Etc::preferencesparts
                      )) {
        ensuredir "$aptget_base/$key";
-       print CONF "$key \"$quoted_base/$key\";\n" or confess $!;
+       print CONF "$key \"$quoted_base/$key\";\n" or confess "$!";
     };
 
-    my $oldatime = (time // confess $!) - 1;
+    my $oldatime = (time // confess "$!") - 1;
     foreach my $oldlist (<$aptget_base/lists/*Release>) {
        next unless stat_exists $oldlist;
        my ($mtime) = (stat _)[9];
@@ -1373,11 +1467,11 @@ sub canonicalise_suite_aptget {
        my $val = $release->{$name};
        if (defined $val) {
            printdebug "release file $name: $val\n";
+           cfg_apply_map(\$val, 'suite rmap',
+                         access_cfg('aptget-suite-rmap', 'RETURN-UNDEF'));
            $val =~ m/^$suite_re$/o or fail f_
                "Release file (%s) specifies intolerable %s",
                $aptget_releasefile, $name;
-           cfg_apply_map(\$val, 'suite rmap',
-                         access_cfg('aptget-suite-rmap', 'RETURN-UNDEF'));
            return $val
        }
     }
@@ -1432,7 +1526,7 @@ sub dummycatapi_run_in_mirror ($@) {
     my @cmd = (qw(sh -ec), 'cd "$1"; shift'."\n".$rune,
               qw(x), $mirror, @$argl);
     debugcmd "-|", @cmd;
-    open FIA, "-|", @cmd or confess $!;
+    open FIA, "-|", @cmd or confess "$!";
     my $r = $fn->();
     close FIA or ($!==0 && $?==141) or die failedcmd @cmd;
     return $r;
@@ -1535,7 +1629,7 @@ sub sshpsql ($$$) {
               " export LC_MESSAGES=C; export LC_CTYPE=C;".
               " ".shellquote qw(psql -A), $dbname, qw(-c), $sql);
     debugcmd "|",@cmd;
-    open P, "-|", @cmd or confess $!;
+    open P, "-|", @cmd or confess "$!";
     while (<P>) {
        chomp or die;
        printdebug(">|$_|\n");
@@ -1643,58 +1737,6 @@ sub archive_query_dummycat ($$) {
 sub file_in_archive_dummycat () { return undef; }
 sub package_not_wholly_new_dummycat () { return undef; }
 
-#---------- tag format handling ----------
-# (untranslated, because everything should be new tag format by now)
-
-sub access_cfg_tagformats () {
-    split /\,/, access_cfg('dgit-tag-format');
-}
-
-sub access_cfg_tagformats_can_splitbrain () {
-    my %y = map { $_ => 1 } access_cfg_tagformats;
-    foreach my $needtf (qw(new maint)) {
-       next if $y{$needtf};
-       return 0;
-    }
-    return 1;
-}
-
-sub need_tagformat ($$) {
-    my ($fmt, $why) = @_;
-    fail "need to use tag format $fmt ($why) but also need".
-       " to use tag format $tagformat_want->[0] ($tagformat_want->[1])".
-       " - no way to proceed"
-       if $tagformat_want && $tagformat_want->[0] ne $fmt;
-    $tagformat_want = [$fmt, $why, $tagformat_want->[2] // 0];
-}
-
-sub select_tagformat () {
-    # sets $tagformatfn
-    return if $tagformatfn && !$tagformat_want;
-    die 'bug' if $tagformatfn && $tagformat_want;
-    # ... $tagformat_want assigned after previous select_tagformat
-
-    my (@supported) = grep { $_ =~ m/^(?:old|new)$/ } access_cfg_tagformats();
-    printdebug "select_tagformat supported @supported\n";
-
-    $tagformat_want //= [ $supported[0], "distro access configuration", 0 ];
-    printdebug "select_tagformat specified @$tagformat_want\n";
-
-    my ($fmt,$why,$override) = @$tagformat_want;
-
-    fail "target distro supports tag formats @supported".
-       " but have to use $fmt ($why)"
-       unless $override
-           or grep { $_ eq $fmt } @supported;
-
-    $tagformat_want = undef;
-    $tagformat = $fmt;
-    $tagformatfn = ${*::}{"debiantag_$fmt"};
-
-    fail "trying to use unknown tag format \`$fmt' ($why) !"
-       unless $tagformatfn;
-}
-
 #---------- archive query entrypoints and rest of program ----------
 
 sub canonicalise_suite () {
@@ -1714,7 +1756,7 @@ sub get_archive_dsc () {
     foreach my $vinfo (@vsns) {
        my ($vsn,$vsn_dscurl,$digester,$digest) = @$vinfo;
        $dscurl = $vsn_dscurl;
-       $dscdata = url_get($dscurl);
+       $dscdata = url_fetch($dscurl, Ok404 => 1 );
        if (!$dscdata) {
            $skew_warning_vsn = $vsn if !defined $skew_warning_vsn;
            next;
@@ -1768,22 +1810,13 @@ sub check_for_git () {
        my $suffix = access_cfg('git-check-suffix','git-suffix',
                                'RETURN-UNDEF') // '.git';
        my $url = "$prefix/$package$suffix";
-       my @cmd = (@curl, qw(-sS -I), $url);
-       my $result = cmdoutput @cmd;
-       $result =~ s/^\S+ 200 .*\n\r?\n//;
-       # curl -sS -I with https_proxy prints
-       # HTTP/1.0 200 Connection established
-       $result =~ m/^\S+ (404|200) /s or
-           fail +(__ "unexpected results from git check query - ").
-               Dumper($prefix, $result);
-       my $code = $1;
-       if ($code eq '404') {
-           return 0;
-       } elsif ($code eq '200') {
-           return 1;
-       } else {
-           die;
-       }
+       my $result = url_fetch $url,
+           CurlOpts => { CURLOPT_NOBODY() => 1 },
+           Ok404 => 1,
+           AccessBase => 'git-check';
+       $result = defined $result;
+       printdebug "dgit-repos check_for_git => $result.\n";
+       return $result;
     } elsif ($how eq 'true') {
        return 1;
     } elsif ($how eq 'false') {
@@ -1818,7 +1851,7 @@ sub prep_ud () {
 }
 
 sub mktree_in_ud_here () {
-    playtree_setup $gitcfgs{local};
+    playtree_setup();
 }
 
 sub git_write_tree () {
@@ -1836,7 +1869,7 @@ sub remove_stray_gits ($) {
     my ($what) = @_;
     my @gitscmd = qw(find -name .git -prune -print0);
     debugcmd "|",@gitscmd;
-    open GITS, "-|", @gitscmd or confess $!;
+    open GITS, "-|", @gitscmd or confess "$!";
     {
        local $/="\0";
        while (<GITS>) {
@@ -2002,7 +2035,7 @@ sub test_source_only_changes ($) {
     foreach my $l (split /\n/, getfield $changes, 'Files') {
         $l =~ m/\S+$/ or next;
         # \.tar\.[a-z0-9]+ covers orig.tar and the tarballs in native packages
-        unless ($& =~ m/(?:\.dsc|\.diff\.gz|\.tar\.[a-z0-9]+|_source\.buildinfo)$/) {
+        unless ($& =~ m/(?:\.dsc|\.diff\.gz|$tarball_f_ext_re|_source\.buildinfo)$/) {
             print f_ "purportedly source-only changes polluted by %s\n", $&;
             return 0;
         }
@@ -2109,11 +2142,6 @@ END
     }
 }
 
-sub make_commit ($) {
-    my ($file) = @_;
-    return cmdoutput @git, qw(hash-object -w -t commit), $file;
-}
-
 sub clogp_authline ($) {
     my ($clogp) = @_;
     my $author = getfield $clogp, 'Maintainer';
@@ -2267,62 +2295,9 @@ sub dotdot_bpd_transfer_origs ($$$) {
     closedir DD;
 }
 
-sub generate_commits_from_dsc () {
-    # See big comment in fetch_from_archive, below.
-    # See also README.dsc-import.
-    prep_ud();
-    changedir $playground;
-
-    my $bpd_abs = bpd_abs();
-    my $upstreamv = upstreamversion $dsc->{version};
-    my @dfi = dsc_files_info();
-
-    dotdot_bpd_transfer_origs $bpd_abs, $upstreamv,
-       sub { grep { $_->{Filename} eq $_[0] } @dfi };
-
-    foreach my $fi (@dfi) {
-       my $f = $fi->{Filename};
-       die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
-       my $upper_f = "$bpd_abs/$f";
-
-       printdebug "considering reusing $f: ";
-
-       if (link_ltarget "$upper_f,fetch", $f) {
-           printdebug "linked (using ...,fetch).\n";
-       } elsif ((printdebug "($!) "),
-                $! != ENOENT) {
-           fail f_ "accessing %s: %s", "$buildproductsdir/$f,fetch", $!;
-       } elsif (link_ltarget $upper_f, $f) {
-           printdebug "linked.\n";
-       } elsif ((printdebug "($!) "),
-                $! != ENOENT) {
-           fail f_ "accessing %s: %s", "$buildproductsdir/$f", $!;
-       } else {
-           printdebug "absent.\n";
-       }
-
-       my $refetched;
-       complete_file_from_dsc('.', $fi, \$refetched)
-           or next;
-
-       printdebug "considering saving $f: ";
-
-       if (rename_link_xf 1, $f, $upper_f) {
-           printdebug "linked.\n";
-       } elsif ((printdebug "($@) "),
-                $! != EEXIST) {
-           fail f_ "saving %s: %s", "$buildproductsdir/$f", $@;
-       } elsif (!$refetched) {
-           printdebug "no need.\n";
-       } elsif (rename_link_xf 1, $f, "$upper_f,fetch") {
-           printdebug "linked (using ...,fetch).\n";
-       } elsif ((printdebug "($@) "),
-                $! != EEXIST) {
-           fail f_ "saving %s: %s", "$buildproductsdir/$f,fetch", $@;
-       } else {
-           printdebug "cannot.\n";
-       }
-    }
+sub import_tarball_tartrees ($$) {
+    my ($upstreamv, $dfi) = @_;
+    # cwd should be the playground
 
     # We unpack and record the orig tarballs first, so that we only
     # need disk space for one private copy of the unpacked source.
@@ -2332,14 +2307,13 @@ sub generate_commits_from_dsc () {
     my @tartrees;
     my $orig_f_base = srcfn $upstreamv, '';
 
-    foreach my $fi (@dfi) {
+    foreach my $fi (@$dfi) {
        # We actually import, and record as a commit, every tarball
        # (unless there is only one file, in which case there seems
        # little point.
 
        my $f = $fi->{Filename};
        printdebug "import considering $f ";
-       (printdebug "only one dfi\n"), next if @dfi == 1;
        (printdebug "not tar\n"), next unless $f =~ m/\.tar(\.\w+)?$/;
        (printdebug "signature\n"), next if $f =~ m/$orig_f_sig_re$/o;
        my $compr_ext = $1;
@@ -2351,6 +2325,7 @@ sub generate_commits_from_dsc () {
                          $compr_ext, $orig_f_part
                         ), "\n";
 
+       my $path = $fi->{Path} // $f;
        my $input = new IO::File $f, '<' or die "$f $!";
        my $compr_pid;
        my @compr_cmd;
@@ -2364,9 +2339,9 @@ sub generate_commits_from_dsc () {
                new Dpkg::Compression::Process compression => $cname;
            @compr_cmd = $compr_proc->get_uncompress_cmdline();
            my $compr_fh = new IO::Handle;
-           my $compr_pid = open $compr_fh, "-|" // confess $!;
+           my $compr_pid = open $compr_fh, "-|" // confess "$!";
            if (!$compr_pid) {
-               open STDIN, "<&", $input or confess $!;
+               open STDIN, "<&", $input or confess "$!";
                exec @compr_cmd;
                die "dgit (child): exec $compr_cmd[0]: $!\n";
            }
@@ -2374,23 +2349,23 @@ sub generate_commits_from_dsc () {
        }
 
        rmtree "_unpack-tar";
-       mkdir "_unpack-tar" or confess $!;
+       mkdir "_unpack-tar" or confess "$!";
        my @tarcmd = qw(tar -x -f -
                        --no-same-owner --no-same-permissions
                        --no-acls --no-xattrs --no-selinux);
-       my $tar_pid = fork // confess $!;
+       my $tar_pid = fork // confess "$!";
        if (!$tar_pid) {
-           chdir "_unpack-tar" or confess $!;
-           open STDIN, "<&", $input or confess $!;
+           chdir "_unpack-tar" or confess "$!";
+           open STDIN, "<&", $input or confess "$!";
            exec @tarcmd;
            die f_ "dgit (child): exec %s: %s", $tarcmd[0], $!;
        }
-       $!=0; (waitpid $tar_pid, 0) == $tar_pid or confess $!;
+       $!=0; (waitpid $tar_pid, 0) == $tar_pid or confess "$!";
        !$? or failedcmd @tarcmd;
 
        close $input or
            (@compr_cmd ? ($?==SIGPIPE || failedcmd @compr_cmd)
-            : confess $!);
+            : confess "$!");
        # finally, we have the results in "tarball", but maybe
        # with the wrong permissions
 
@@ -2416,6 +2391,7 @@ sub generate_commits_from_dsc () {
             Sort => (!$orig_f_part         ? 2 :
                     $orig_f_part =~ m/-/g ? 1 :
                                             0),
+            OrigPart => $orig_f_part, # 'orig', 'orig-XXX', or undef 
             F => $f,
             Tree => $tree,
         };
@@ -2429,36 +2405,15 @@ sub generate_commits_from_dsc () {
        $a->{F}    cmp $b->{F}
     } @tartrees;
 
-    my $any_orig = grep { $_->{Orig} } @tartrees;
-
-    my $dscfn = "$package.dsc";
-
-    my $treeimporthow = 'package';
-
-    open D, ">", $dscfn or die "$dscfn: $!";
-    print D $dscdata or die "$dscfn: $!";
-    close D or die "$dscfn: $!";
-    my @cmd = qw(dpkg-source);
-    push @cmd, '--no-check' if $dsc_checked;
-    if (madformat $dsc->{format}) {
-       push @cmd, '--skip-patches';
-       $treeimporthow = 'unpatched';
-    }
-    push @cmd, qw(-x --), $dscfn;
-    runcmd @cmd;
+    @tartrees;
+}
 
-    my ($tree,$dir) = mktree_in_ud_from_only_subdir(__ "source package");
-    if (madformat $dsc->{format}) { 
-       check_for_vendor_patches();
-    }
+sub import_tarball_commits ($$) {
+    my ($tartrees, $upstreamv) = @_;
+    # cwd should be a playtree which has a relevant debian/changelog
+    # fills in $tt->{Commit} for each one
 
-    my $dappliedtree;
-    if (madformat $dsc->{format}) {
-       my @pcmd = qw(dpkg-source --before-build .);
-       runcmd shell_cmd 'exec >/dev/null', @pcmd;
-       rmtree '.pc';
-       $dappliedtree = git_add_write_tree();
-    }
+    my $any_orig = grep { $_->{Orig} } @$tartrees;
 
     my @clogcmd = qw(dpkg-parsechangelog --format rfc822 --all);
     my $clogp;
@@ -2512,20 +2467,22 @@ sub generate_commits_from_dsc () {
     $changes =~ s/^\n//; # Changes: \n
     my $cversion = getfield $clogp, 'Version';
 
-    if (@tartrees) {
+    my $r1authline;
+    if (@$tartrees) {
        $r1clogp //= $clogp; # maybe there's only one entry;
-       my $r1authline = clogp_authline $r1clogp;
+        $r1authline = clogp_authline $r1clogp;
        # Strictly, r1authline might now be wrong if it's going to be
        # unused because !$any_orig.  Whatever.
 
        printdebug "import tartrees authline   $authline\n";
        printdebug "import tartrees r1authline $r1authline\n";
 
-       foreach my $tt (@tartrees) {
+       foreach my $tt (@$tartrees) {
            printdebug "import tartree $tt->{F} $tt->{Tree}\n";
 
-           my $mbody = f_ "Import %s", $tt->{F};
-           $tt->{Commit} = make_commit_text($tt->{Orig} ? <<END_O : <<END_T);
+           # untranslated so that different people's imports are identical
+           my $mbody = sprintf "Import %s", $tt->{F};
+           $tt->{Commit} = hash_commit_text($tt->{Orig} ? <<END_O : <<END_T);
 tree $tt->{Tree}
 author $r1authline
 committer $r1authline
@@ -2545,16 +2502,114 @@ END_T
        }
     }
 
+    return ($authline, $r1authline, $clogp, $changes);
+}
+
+sub generate_commits_from_dsc () {
+    # See big comment in fetch_from_archive, below.
+    # See also README.dsc-import.
+    prep_ud();
+    changedir $playground;
+
+    my $bpd_abs = bpd_abs();
+    my $upstreamv = upstreamversion $dsc->{version};
+    my @dfi = dsc_files_info();
+
+    dotdot_bpd_transfer_origs $bpd_abs, $upstreamv,
+       sub { grep { $_->{Filename} eq $_[0] } @dfi };
+
+    foreach my $fi (@dfi) {
+       my $f = $fi->{Filename};
+       die "$f ?" if $f =~ m#/|^\.|\.dsc$|\.tmp$#;
+       my $upper_f = "$bpd_abs/$f";
+
+       printdebug "considering reusing $f: ";
+
+       if (link_ltarget "$upper_f,fetch", $f) {
+           printdebug "linked (using ...,fetch).\n";
+       } elsif ((printdebug "($!) "),
+                $! != ENOENT) {
+           fail f_ "accessing %s: %s", "$buildproductsdir/$f,fetch", $!;
+       } elsif (link_ltarget $upper_f, $f) {
+           printdebug "linked.\n";
+       } elsif ((printdebug "($!) "),
+                $! != ENOENT) {
+           fail f_ "accessing %s: %s", "$buildproductsdir/$f", $!;
+       } else {
+           printdebug "absent.\n";
+       }
+
+       my $refetched;
+       complete_file_from_dsc('.', $fi, \$refetched)
+           or next;
+
+       printdebug "considering saving $f: ";
+
+       if (rename_link_xf 1, $f, $upper_f) {
+           printdebug "linked.\n";
+       } elsif ((printdebug "($@) "),
+                $! != EEXIST) {
+           fail f_ "saving %s: %s", "$buildproductsdir/$f", $@;
+       } elsif (!$refetched) {
+           printdebug "no need.\n";
+       } elsif (rename_link_xf 1, $f, "$upper_f,fetch") {
+           printdebug "linked (using ...,fetch).\n";
+       } elsif ((printdebug "($@) "),
+                $! != EEXIST) {
+           fail f_ "saving %s: %s", "$buildproductsdir/$f,fetch", $@;
+       } else {
+           printdebug "cannot.\n";
+       }
+    }
+
+    my @tartrees;
+    @tartrees = import_tarball_tartrees($upstreamv, \@dfi)
+       unless @dfi == 1; # only one file in .dsc
+
+    my $dscfn = "$package.dsc";
+
+    my $treeimporthow = 'package';
+
+    open D, ">", $dscfn or die "$dscfn: $!";
+    print D $dscdata or die "$dscfn: $!";
+    close D or die "$dscfn: $!";
+    my @cmd = qw(dpkg-source);
+    push @cmd, '--no-check' if $dsc_checked;
+    if (madformat $dsc->{format}) {
+       push @cmd, '--skip-patches';
+       $treeimporthow = 'unpatched';
+    }
+    push @cmd, qw(-x --), $dscfn;
+    runcmd @cmd;
+
+    my ($tree,$dir) = mktree_in_ud_from_only_subdir(__ "source package");
+    if (madformat $dsc->{format}) { 
+       check_for_vendor_patches();
+    }
+
+    my $dappliedtree;
+    if (madformat $dsc->{format}) {
+       my @pcmd = qw(dpkg-source --before-build .);
+       runcmd shell_cmd 'exec >/dev/null', @pcmd;
+       rmtree '.pc';
+       $dappliedtree = git_add_write_tree();
+    }
+
+    my ($authline, $r1authline, $clogp, $changes) =
+       import_tarball_commits(\@tartrees, $upstreamv);
+
+    my $cversion = getfield $clogp, 'Version';
+
     printdebug "import main commit\n";
 
-    open C, ">../commit.tmp" or confess $!;
-    print C <<END or confess $!;
+    open C, ">../commit.tmp" or confess "$!";
+    print C <<END or confess "$!";
 tree $tree
 END
-    print C <<END or confess $! foreach @tartrees;
+    print C <<END or confess "$!" foreach @tartrees;
 parent $_->{Commit}
 END
-    print C <<END or confess $!;
+    print C <<END or confess "$!";
 author $authline
 committer $authline
 
@@ -2563,15 +2618,15 @@ $changes
 [dgit import $treeimporthow $package $cversion]
 END
 
-    close C or confess $!;
-    my $rawimport_hash = make_commit qw(../commit.tmp);
+    close C or confess "$!";
+    my $rawimport_hash = hash_commit qw(../commit.tmp);
 
     if (madformat $dsc->{format}) {
        printdebug "import apply patches...\n";
 
        # regularise the state of the working tree so that
        # the checkout of $rawimport_hash works nicely.
-       my $dappliedcommit = make_commit_text(<<END);
+       my $dappliedcommit = hash_commit_text(<<END);
 tree $dappliedtree
 author $authline
 committer $authline
@@ -2605,10 +2660,12 @@ END
                chomp $@;
                progress "warning: $@";
                $path = "$absurdity:$path";
+               open T, ">../../absurd-apply-warnings" or die $!;
+               close T or die $!;
                progress f_ "%s: trying slow absurd-git-apply...", $us;
                rename "../../gbp-pq-output","../../gbp-pq-output.0"
                    or $!==ENOENT
-                   or confess $!;
+                   or confess "$!";
            }
            eval {
                die "forbid absurd git-apply\n" if $use_absurd
@@ -2639,6 +2696,11 @@ gbp-pq import and dpkg-source disagree!
  dpkg-source --before-build gave tree %s
 END
                $rawimport_hash = $gapplied;
+
+               if ($use_absurd) {
+                   File::Copy::copy("../../absurd-apply-warnings", \*STDERR)
+                         or die $!;
+               }
            };
            last unless $@;
        }
@@ -2664,7 +2726,10 @@ END
        if ($vcmp < 0) {
            @output = ($rawimport_mergeinput, $lastpush_mergeinput,
                { ReverseParents => 1,
-                 Message => (f_ <<END, $package, $cversion, $csuite) });
+                 # untranslated so that different people's pseudomerges
+                 # are not needlessly different (although they will
+                 # still differ if the series of pulls is different)
+                 Message => (sprintf <<END, $package, $cversion, $csuite) });
 Record %s (%s) in archive suite %s
 END
        } elsif ($vcmp > 0) {
@@ -2674,7 +2739,7 @@ Version actually in archive:   %s (older)
 Last version pushed with dgit: %s (newer or same)
 %s
 END
-               __ $later_warning_msg or confess $!;
+               __ $later_warning_msg or confess "$!";
             @output = $lastpush_mergeinput;
         } else {
            # Same version.  Use what's in the server git branch,
@@ -2704,7 +2769,7 @@ sub complete_file_from_dsc ($$;$) {
        open F, "<", "$tf" or die "$tf: $!";
        $fi->{Digester}->reset();
        $fi->{Digester}->addfile(*F);
-       F->error and confess $!;
+       F->error and confess "$!";
        $got = $fi->{Digester}->hexdigest();
        return $got eq $fi->{Hash};
     };
@@ -2838,7 +2903,7 @@ sub git_lrfetch_sane {
        debugcmd "|",@lcmd;
 
        my %wantr;
-       open GITLS, "-|", @lcmd or confess $!;
+       open GITLS, "-|", @lcmd or confess "$!";
        while (<GITLS>) {
            printdebug "=> ", $_;
            m/^(\w+)\s+(\S+)\n/ or die "ls-remote $_ ?";
@@ -2945,11 +3010,7 @@ sub git_fetch_us () {
     # deliberately-not-ff, in which case we must fetch everything.
 
     my @specs = deliberately_not_fast_forward ? qw(tags/*) :
-       map { "tags/$_" }
-       (quiltmode_splitbrain
-        ? (map { $_->('*',access_nomdistro) }
-           \&debiantag_new, \&debiantag_maintview)
-        : debiantags('*',access_nomdistro));
+       map { "tags/$_" } debiantags('*',access_nomdistro);
     push @specs, server_branch($csuite);
     push @specs, $rewritemap;
     push @specs, qw(heads/*) if deliberately_not_fast_forward;
@@ -3260,7 +3321,7 @@ sub fetch_from_archive () {
            printdebug "del_lrfetchrefs: $objid $fullrefname\n";
            if (!$gur) {
                $gur ||= new IO::Handle;
-               open $gur, "|-", qw(git update-ref --stdin) or confess $!;
+               open $gur, "|-", qw(git update-ref --stdin) or confess "$!";
            }
            printf $gur "delete %s %s\n", $fullrefname, $objid;
        }
@@ -3281,7 +3342,7 @@ Commit referred to by archive: %s
 Last version pushed with dgit: %s
 %s
 END
-               __ $later_warning_msg or confess $!;
+               __ $later_warning_msg or confess "$!";
            @mergeinputs = ($lastpush_mergeinput);
        } else {
            # Archive has .dsc which is not a descendant of the last dgit
@@ -3316,11 +3377,11 @@ END
 Package not found in the archive, but has allegedly been pushed using dgit.
 %s
 END
-           __ $later_warning_msg or confess $!;
+           __ $later_warning_msg or confess "$!";
     } else {
        printdebug "nothing found!\n";
        if (defined $skew_warning_vsn) {
-           print STDERR f_ <<END, $skew_warning_vsn or confess $!;
+           print STDERR f_ <<END, $skew_warning_vsn or confess "$!";
 
 Warning: relevant archive skew detected.
 Archive allegedly contains %s
@@ -3386,26 +3447,26 @@ END
 
        my $mcf = dgit_privdir()."/mergecommit";
        open MC, ">", $mcf or die "$mcf $!";
-       print MC <<END or confess $!;
+       print MC <<END or confess "$!";
 tree $tree
 END
 
        my @parents = grep { $_->{Commit} } @mergeinputs;
        @parents = reverse @parents if $compat_info->{ReverseParents};
-       print MC <<END or confess $! foreach @parents;
+       print MC <<END or confess "$!" foreach @parents;
 parent $_->{Commit}
 END
 
-       print MC <<END or confess $!;
+       print MC <<END or confess "$!";
 author $author
 committer $author
 
 END
 
        if (defined $compat_info->{Message}) {
-           print MC $compat_info->{Message} or confess $!;
+           print MC $compat_info->{Message} or confess "$!";
        } else {
-           print MC f_ <<END, $package, $cversion, $csuite or confess $!;
+           print MC f_ <<END, $package, $cversion, $csuite or confess "$!";
 Record %s (%s) in archive suite %s
 
 Record that
@@ -3414,18 +3475,18 @@ END
                my ($mi) = (@_);
                my $mversion = mergeinfo_version $mi;
                printf MC "  %-20s %s\n", $mversion, $mi->{Info}
-                   or confess $!;
+                   or confess "$!";
            };
 
            $message_add_info->($mergeinputs[0]);
-           print MC __ <<END or confess $!;
+           print MC __ <<END or confess "$!";
 should be treated as descended from
 END
            $message_add_info->($_) foreach @mergeinputs[1..$#mergeinputs];
        }
 
-       close MC or confess $!;
-       $hash = make_commit $mcf;
+       close MC or confess "$!";
+       $hash = hash_commit $mcf;
     } else {
        $hash = $mergeinputs[0]{Commit};
     }
@@ -3449,7 +3510,7 @@ END
        my $got_vsn = getfield $gotclogp, 'Version';
        printdebug "SKEW CHECK GOT $got_vsn\n";
        if (version_compare($got_vsn, $skew_warning_vsn) < 0) {
-           print STDERR f_ <<END, $skew_warning_vsn, $got_vsn or confess $!;
+           print STDERR f_ <<END, $skew_warning_vsn, $got_vsn or confess "$!";
 
 Warning: archive skew detected.  Using the available version:
 Archive allegedly contains    %s
@@ -3493,12 +3554,12 @@ sub setup_mergechangelogs (;$) {
        while (<ATTRS>) {
            chomp;
            next if m{^debian/changelog\s};
-           print NATTRS $_, "\n" or confess $!;
+           print NATTRS $_, "\n" or confess "$!";
        }
-       ATTRS->error and confess $!;
+       ATTRS->error and confess "$!";
        close ATTRS;
     }
-    print NATTRS "debian/changelog merge=$driver\n" or confess $!;
+    print NATTRS "debian/changelog merge=$driver\n" or confess "$!";
     close NATTRS;
 
     set_local_git_config "$cb.name", __ 'debian/changelog merge driver';
@@ -3547,14 +3608,14 @@ sub is_gitattrs_setup () {
     #     0: there is a dgit-defuse-attrs but it needs fixing
     #     undef: there is none
     my $gai = open_main_gitattrs();
-    return 0 unless $gai;
+    return undef unless $gai;
     while (<$gai>) {
        next unless m{$gitattrs_ourmacro_re};
        return 1 if m{\s-working-tree-encoding\s};
        printdebug "is_gitattrs_setup: found old macro\n";
        return 0;
     }
-    $gai->error and confess $!;
+    $gai->error and confess "$!";
     printdebug "is_gitattrs_setup: found nothing\n";
     return undef;
 }    
@@ -3575,8 +3636,8 @@ END
     my $af = "$maindir_gitcommon/info/attributes";
     ensuredir "$maindir_gitcommon/info";
 
-    open GAO, "> $af.new" or confess $!;
-    print GAO <<END, __ <<ENDT or confess $! unless defined $already;
+    open GAO, "> $af.new" or confess "$!";
+    print GAO <<END, __ <<ENDT or confess "$!" unless defined $already;
 *      dgit-defuse-attrs
 $new
 END
@@ -3590,11 +3651,11 @@ ENDT
                $_ = $new;
            }
            chomp;
-           print GAO $_, "\n" or confess $!;
+           print GAO $_, "\n" or confess "$!";
        }
-       $gai->error and confess $!;
+       $gai->error and confess "$!";
     }
-    close GAO or confess $!;
+    close GAO or confess "$!";
     rename "$af.new", "$af" or fail f_ "install %s: %s", $af, $!;
 }
 
@@ -3613,7 +3674,7 @@ sub check_gitattrs ($$) {
     my @cmd = (@git, qw(ls-tree -lrz --), "${treeish}:");
     debugcmd "|",@cmd;
     my $gafl = new IO::File;
-    open $gafl, "-|", @cmd or confess $!;
+    open $gafl, "-|", @cmd or confess "$!";
     while (<$gafl>) {
        chomp or die;
        s/^\d+\s+\w+\s+\w+\s+(\d+)\t// or die;
@@ -3638,7 +3699,7 @@ sub multisuite_suite_child ($$$) {
     # in child, sets things up, calls $fn->(), and returns undef
     # in parent, returns canonical suite name for $tsuite
     my $canonsuitefh = IO::File::new_tmpfile;
-    my $pid = fork // confess $!;
+    my $pid = fork // confess "$!";
     if (!$pid) {
        forkcheck_setup();
        $isuite = $tsuite;
@@ -3646,17 +3707,17 @@ sub multisuite_suite_child ($$$) {
        $debugprefix .= " ";
        progress f_ "fetching %s...", $tsuite;
        canonicalise_suite();
-       print $canonsuitefh $csuite, "\n" or confess $!;
-       close $canonsuitefh or confess $!;
+       print $canonsuitefh $csuite, "\n" or confess "$!";
+       close $canonsuitefh or confess "$!";
        $fn->();
        return undef;
     }
-    waitpid $pid,0 == $pid or confess $!;
+    waitpid $pid,0 == $pid or confess "$!";
     fail f_ "failed to obtain %s: %s", $tsuite, waitstatusmsg()
        if $? && $?!=256*4;
-    seek $canonsuitefh,0,0 or confess $!;
+    seek $canonsuitefh,0,0 or confess "$!";
     local $csuite = <$canonsuitefh>;
-    confess $! unless defined $csuite && chomp $csuite;
+    confess "$!" unless defined $csuite && chomp $csuite;
     if ($? == 256*4) {
        printdebug "multisuite $tsuite missing\n";
        return $csuite;
@@ -3786,7 +3847,7 @@ sub fork_for_multisuite ($) {
        $commit .=
            "author $authline\n".
            "committer $authline\n\n";
-       $output = make_commit_text $commit.$msg;
+       $output = hash_commit_text $commit.$msg;
        printdebug "multisuite merge generated $output\n";
     }
 
@@ -3799,9 +3860,9 @@ sub fork_for_multisuite ($) {
 }
 
 sub clone_set_head () {
-    open H, "> .git/HEAD" or confess $!;
-    print H "ref: ".lref()."\n" or confess $!;
-    close H or confess $!;
+    open H, "> .git/HEAD" or confess "$!";
+    print H "ref: ".lref()."\n" or confess "$!";
+    close H or confess "$!";
 }
 sub clone_finish ($) {
     my ($dstdir) = @_;
@@ -3814,6 +3875,16 @@ END
     printdone f_ "ready for work in %s", $dstdir;
 }
 
+sub vcs_git_url_of_ctrl ($) {
+    my ($ctrl) = @_;
+    my $vcsgiturl = $ctrl->{'Vcs-Git'};
+    if (length $vcsgiturl) {
+       $vcsgiturl =~ s/\s+-b\s+\S+//g;
+       $vcsgiturl =~ s/\s+\[[^][]*\]//g;
+    }
+    return $vcsgiturl;
+}
+
 sub clone ($) {
     # in multisuite, returns twice!
     # once in parent after first suite fetched,
@@ -3845,21 +3916,15 @@ sub clone ($) {
     record_maindir();
     setup_new_tree();
     clone_set_head();
-    my $giturl = access_giturl(1);
-    if (defined $giturl) {
-       runcmd @git, qw(remote add), 'origin', $giturl;
-    }
     if ($hasgit) {
        progress __ "fetching existing git history";
        git_fetch_us();
-       runcmd_ordryrun_local @git, qw(fetch origin);
     } else {
        progress __ "starting new git history";
     }
     fetch_from_archive() or no_such_package;
-    my $vcsgiturl = $dsc->{'Vcs-Git'};
+    my $vcsgiturl = vcs_git_url_of_ctrl $dsc;
     if (length $vcsgiturl) {
-       $vcsgiturl =~ s/\s+-b\s+\S+//g;
        runcmd @git, qw(remote add vcs-git), $vcsgiturl;
     }
     clone_finish($dstdir);
@@ -3983,18 +4048,19 @@ sub get_source_format () {
                $options{$_} = 1;
            }
        }
-       F->error and confess $!;
+       F->error and confess "$!";
        close F;
     } else {
-       confess $! unless $!==&ENOENT;
+       confess "$!" unless $!==&ENOENT;
     }
 
     if (!open F, "debian/source/format") {
-       confess $! unless $!==&ENOENT;
+       confess "$!" unless $!==&ENOENT;
        return '';
     }
     $_ = <F>;
-    F->error and confess $!;
+    F->error and confess "$!";
+    close F;
     chomp;
     return ($_, \%options);
 }
@@ -4096,6 +4162,7 @@ sub pseudomerge_version_check ($$) {
                $cd = $gf->('Distribution');
            };
            if ($@) {
+                $@ =~ s/^\n//s;
                $@ =~ s/^dgit: //gm;
                fail "$@".
                    f_ "Perhaps debian/changelog does not mention %s ?", $v;
@@ -4112,7 +4179,7 @@ END
     return $i_arch_v;
 }
 
-sub pseudomerge_make_commit ($$$$ $$) {
+sub pseudomerge_hash_commit ($$$$ $$) {
     my ($clogp, $dgitview, $archive_hash, $i_arch_v,
        $msg_cmd, $msg_msg) = @_;
     progress f_ "Declaring that HEAD includes all changes in %s...",
@@ -4131,7 +4198,7 @@ sub pseudomerge_make_commit ($$$$ $$) {
     # git rev-list --first-parent DTRT.
     my $pmf = dgit_privdir()."/pseudomerge";
     open MC, ">", $pmf or die "$pmf $!";
-    print MC <<END or confess $!;
+    print MC <<END or confess "$!";
 tree $tree
 parent $dgitview
 parent $archive_hash
@@ -4142,9 +4209,9 @@ $msg_msg
 
 [$msg_cmd]
 END
-    close MC or confess $!;
+    close MC or confess "$!";
 
-    return make_commit($pmf);
+    return hash_commit($pmf);
 }
 
 sub splitbrain_pseudomerge ($$$$) {
@@ -4202,7 +4269,7 @@ ENDT
     }
 
     my $arch_v = $i_arch_v->[0];
-    my $r = pseudomerge_make_commit
+    my $r = pseudomerge_hash_commit
        $clogp, $dgitview, $archive_hash, $i_arch_v,
        "dgit --quilt=$quilt_mode",
        (defined $overwrite_version
@@ -4226,7 +4293,7 @@ sub plain_overwrite_pseudomerge ($$$) {
 
     my $m = f_ "Declare fast forward from %s", $i_arch_v->[0];
 
-    my $r = pseudomerge_make_commit
+    my $r = pseudomerge_hash_commit
        $clogp, $head, $archive_hash, $i_arch_v,
        "dgit", $m;
 
@@ -4251,7 +4318,7 @@ sub push_parse_changelog ($) {
 
     if (!$we_are_initiator) {
        # rpush initiator can't do this because it doesn't have $isuite yet
-       my $tag = debiantag($cversion, access_nomdistro);
+       my $tag = debiantag_new($cversion, access_nomdistro);
        runcmd @git, qw(check-ref-format), $tag;
     }
 
@@ -4275,7 +4342,7 @@ sub push_tagwants ($$$$) {
     my ($cversion, $dgithead, $maintviewhead, $tfbase) = @_;
     my @tagwants;
     push @tagwants, {
-        TagFn => \&debiantag,
+        TagFn => \&debiantag_new,
        Objid => $dgithead,
         TfSuffix => '',
         View => 'dgit',
@@ -4287,14 +4354,7 @@ sub push_tagwants ($$$$) {
            TfSuffix => '-maintview',
             View => 'maint',
         };
-    } elsif ($dodep14tag eq 'no' ? 0
-            : $dodep14tag eq 'want' ? access_cfg_tagformats_can_splitbrain
-            : $dodep14tag eq 'always'
-            ? (access_cfg_tagformats_can_splitbrain or fail <<END)
---dep14tag-always (or equivalent in config) means server must support
- both "new" and "maint" tag formats, but config says it doesn't.
-END
-           : die "$dodep14tag ?") {
+    } elsif ($dodep14tag ne 'no') {
        push @tagwants, {
            TagFn => \&debiantag_maintview,
            Objid => $dgithead,
@@ -4322,7 +4382,7 @@ sub push_mktags ($$ $$ $) {
     $dsc->{$ourdscfield[0]} = join " ",
        $tagwants->[0]{Objid}, $declaredistro, $tagwants->[0]{Tag},
        $reader_giturl;
-    $dsc->save("$dscfn.tmp") or confess $!;
+    $dsc->save("$dscfn.tmp") or confess "$!";
 
     my $changes = parsecontrol($changesfile,$changesfilewhat);
     foreach my $field (qw(Source Distribution Version)) {
@@ -4333,11 +4393,11 @@ sub push_mktags ($$ $$ $) {
 
     my $cversion = getfield $clogp, 'Version';
     my $clogsuite = getfield $clogp, 'Distribution';
+    my $format = getfield $dsc, 'Format';
 
     # We make the git tag by hand because (a) that makes it easier
     # to control the "tagger" (b) we can do remote signing
     my $authline = clogp_authline $clogp;
-    my $delibs = join(" ", "",@deliberatelies);
 
     my $mktag = sub {
        my ($tw) = @_;
@@ -4345,39 +4405,51 @@ sub push_mktags ($$ $$ $) {
        my $head = $tw->{Objid};
        my $tag = $tw->{Tag};
 
-       open TO, '>', $tfn->('.tmp') or confess $!;
-       print TO <<END or confess $!;
+       open TO, '>', $tfn->('.tmp') or confess "$!";
+       print TO <<END or confess "$!";
 object $head
 type commit
 tag $tag
 tagger $authline
 
 END
-       if ($tw->{View} eq 'dgit') {
-           print TO f_ <<ENDT, $package, $cversion, $clogsuite, $csuite
-%s release %s for %s (%s) [dgit]
-ENDT
-               or confess $!;
-           print TO <<END or confess $!;
-[dgit distro=$declaredistro$delibs]
+
+       my @dtxinfo = @deliberatelies;
+       unshift @dtxinfo, "--quilt=$quilt_mode" if madformat($format);
+       unshift @dtxinfo, do_split_brain() ? "split" : "no-split"
+           # rpush protocol 5 and earlier don't tell us
+           unless $we_are_initiator && $protovsn < 6;
+       my $dtxinfo = join(" ", "",@dtxinfo);
+       my $tag_metadata = <<END;
+[dgit distro=$declaredistro$dtxinfo]
 END
-           foreach my $ref (sort keys %previously) {
-               print TO <<END or confess $!;
+       foreach my $ref (sort keys %previously) {
+           $tag_metadata .= <<END or confess "$!";
 [dgit previously:$ref=$previously{$ref}]
 END
-           }
+       }
+
+       if ($tw->{View} eq 'dgit') {
+           print TO sprintf <<ENDT, $package, $cversion, $clogsuite, $csuite
+%s release %s for %s (%s) [dgit]
+ENDT
+               or confess "$!";
        } elsif ($tw->{View} eq 'maint') {
-           print TO f_ <<END, $package, $cversion, $clogsuite, $csuite,
+           print TO sprintf <<END, $package, $cversion, $clogsuite, $csuite;
 %s release %s for %s (%s)
+
+END
+           print TO f_ <<END,
 (maintainer view tag generated by dgit --quilt=%s)
 END
                $quilt_mode
-               or confess $!;
+               or confess "$!";
        } else {
            confess Dumper($tw)."?";
        }
+       print TO "\n", $tag_metadata;
 
-       close TO or confess $!;
+       close TO or confess "$!";
 
        my $tagobjfn = $tfn->('.tmp');
        if ($sign) {
@@ -4387,7 +4459,7 @@ END
            if (!defined $keyid) {
                $keyid = getfield $clogp, 'Maintainer';
            }
-           unlink $tfn->('.tmp.asc') or $!==&ENOENT or confess $!;
+           unlink $tfn->('.tmp.asc') or $!==&ENOENT or confess "$!";
            my @sign_cmd = (@gpg, qw(--detach-sign --armor));
            push @sign_cmd, qw(-u),$keyid if defined $keyid;
            push @sign_cmd, $tfn->('.tmp');
@@ -4438,14 +4510,10 @@ Push failed, while preparing your push.
 You can retry the push, after fixing the problem, if you like.
 END
 
-    need_tagformat 'new', "quilt mode $quilt_mode"
-        if quiltmode_splitbrain;
-
     prep_ud();
 
     access_giturl(); # check that success is vaguely likely
     rpush_handle_protovsn_bothends() if $we_are_initiator;
-    select_tagformat();
 
     my $clogpfn = dgit_privdir()."/changelog.822.tmp";
     runcmd shell_cmd "exec >$clogpfn", qw(dpkg-parsechangelog);
@@ -4465,13 +4533,12 @@ END
     push_parse_dsc($dscpath, $dscfn, $cversion);
 
     my $format = getfield $dsc, 'Format';
-    printdebug "format $format\n";
 
     my $symref = git_get_symref();
     my $actualhead = git_rev_parse('HEAD');
 
     if (branch_is_gdr_unstitched_ff($symref, $actualhead, $archive_hash)) {
-       if (quiltmode_splitbrain()) {
+       if (quiltmode_splitting()) {
            my ($ffq_prev, $gdrlast) = branch_gdr_info($symref, $actualhead);
            fail f_ <<END, $ffq_prev, $quilt_mode;
 Branch is managed by git-debrebase (%s
@@ -4491,9 +4558,8 @@ END
 
     if (madformat_wantfixup($format)) {
        # user might have not used dgit build, so maybe do this now:
-       if (quiltmode_splitbrain()) {
+       if (do_split_brain()) {
            changedir $playground;
-           quilt_make_fake_dsc($upstreamversion);
            my $cachekey;
            ($dgithead, $cachekey) =
                quilt_check_splitbrain_cache($actualhead, $upstreamversion);
@@ -4501,17 +4567,22 @@ END
  "--quilt=%s but no cached dgit view:
  perhaps HEAD changed since dgit build[-source] ?",
                               $quilt_mode;
-           $split_brain = 1;
-           $dgithead = splitbrain_pseudomerge($clogp,
-                                              $actualhead, $dgithead,
-                                              $archive_hash);
-           $maintviewhead = $actualhead;
-           changedir $maindir;
-           prep_ud(); # so _only_subdir() works, below
-       } else {
+       }
+       if (!do_split_brain()) {
+           # In split brain mode, do not attempt to incorporate dirty
+           # stuff from the user's working tree.  That would be mad.
            commit_quilty_patch();
        }
     }
+    if (do_split_brain()) {
+       $made_split_brain = 1;
+       $dgithead = splitbrain_pseudomerge($clogp,
+                                          $actualhead, $dgithead,
+                                          $archive_hash);
+       $maintviewhead = $actualhead;
+       changedir $maindir;
+       prep_ud(); # so _only_subdir() works, below
+    }
 
     if (defined $overwrite_version && !defined $maintviewhead
        && $archive_hash) {
@@ -4533,11 +4604,27 @@ END
                " of the archive's version.\n".
                "To overwrite the archive's contents,".
                " pass --overwrite[=VERSION].\n".
-               "To rewind history, if permitted by the archive,".
+               "To rewrite history, if permitted by the archive,".
                " use --deliberately-not-fast-forward.";
        }
     }
 
+    confess unless !!$made_split_brain == do_split_brain();
+
+    my $tagname = debiantag_new $cversion, access_nomdistro();
+    if (!(forceing[qw(reusing-version)]) && git_get_ref "refs/tags/$tagname") {
+       supplementary_message '';
+       print STDERR f_ <<END, $cversion;
+
+Version %s has already been tagged (pushed?)
+If this was a failed (or incomplete or rejected) upload by you, just
+add a new changelog stanza for a new version number and try again.
+END
+       fail f_ <<END, $tagname;
+Tag %s already exists.
+END
+    }
+
     changedir $playground;
     progress f_ "checking that %s corresponds to HEAD", $dscfn;
     runcmd qw(dpkg-source -x --),
@@ -4551,7 +4638,7 @@ END
     my $r = system @diffcmd;
     if ($r) {
        if ($r==256) {
-           my $referent = $split_brain ? $dgithead : 'HEAD';
+           my $referent = $made_split_brain ? $dgithead : 'HEAD';
            my $diffs = cmdoutput @git, qw(diff --stat), $tree, $dgithead;
 
            my @mode_changes;
@@ -4652,10 +4739,9 @@ ENDT
     responder_send_command("param head $dgithead");
     responder_send_command("param csuite $csuite");
     responder_send_command("param isuite $isuite");
-    responder_send_command("param tagformat $tagformat");
+    responder_send_command("param tagformat new"); # needed in $protovsn==4
+    responder_send_command("param splitbrain $do_split_brain");
     if (defined $maintviewhead) {
-       confess "internal error (protovsn=$protovsn)"
-           if defined $protovsn and $protovsn < 4;
        responder_send_command("param maint-view $maintviewhead");
     }
 
@@ -4858,10 +4944,11 @@ sub cmd_fetch {
 sub cmd_pull {
     parseopts();
     fetchpullargs();
-    if (quiltmode_splitbrain()) {
+    determine_whether_split_brain get_source_format();
+    if (do_split_brain()) {
        my ($format, $fopts) = get_source_format();
        madformat($format) and fail f_ <<END, $quilt_mode
-dgit pull not yet supported in split view mode (--quilt=%s)
+dgit pull not yet supported in split view mode (including with view-splitting quilt modes)
 END
     }
     pull();
@@ -4927,7 +5014,8 @@ sub cmd_update_vcs_git () {
        get_archive_dsc();
        $ctrl = $dsc;
     }
-    my $url = getfield $ctrl, 'Vcs-Git';
+    my $url = vcs_git_url_of_ctrl $ctrl;
+    fail 'no Vcs-Git header in control file' unless length $url;
 
     my @cmd;
     my $orgurl = cfg 'remote.vcs-git.url', 'RETURN-UNDEF';
@@ -4935,12 +5023,12 @@ sub cmd_update_vcs_git () {
        print STDERR f_ "setting up vcs-git: %s\n", $url;
        @cmd = (@git, qw(remote add vcs-git), $url);
     } elsif ($orgurl eq $url) {
-       print STDERR f_ "vcs git already configured: %s\n", $url;
+       print STDERR f_ "vcs git unchanged: %s\n", $url;
     } else {
        print STDERR f_ "changing vcs-git url to: %s\n", $url;
        @cmd = (@git, qw(remote set-url vcs-git), $url);
     }
-    runcmd_ordryrun_local @cmd;
+    runcmd_ordryrun_local @cmd if @cmd;
     if ($dofetch) {
        print f_ "fetching (%s)\n", "@ARGV";
        runcmd_ordryrun_local @git, qw(fetch vcs-git), @ARGV;
@@ -4951,6 +5039,7 @@ sub prep_push () {
     parseopts();
     build_or_push_prep_early();
     pushing();
+    build_or_push_prep_modes();
     check_not_dirty();
     my $specsuite;
     if (@ARGV==0) {
@@ -4994,11 +5083,11 @@ sub pre_remote_push_build_host {
     $we_are_responder = 1;
     $us .= " (build host)";
 
-    open PI, "<&STDIN" or confess $!;
-    open STDIN, "/dev/null" or confess $!;
-    open PO, ">&STDOUT" or confess $!;
+    open PI, "<&STDIN" or confess "$!";
+    open STDIN, "/dev/null" or confess "$!";
+    open PO, ">&STDOUT" or confess "$!";
     autoflush PO 1;
-    open STDOUT, ">&STDERR" or confess $!;
+    open STDOUT, ">&STDERR" or confess "$!";
     autoflush STDOUT 1;
 
     $vsnwant //= 1;
@@ -5024,10 +5113,6 @@ sub cmd_remote_push_responder { cmd_remote_push_build_host(); }
 #     a good error message)
 
 sub rpush_handle_protovsn_bothends () {
-    if ($protovsn < 4) {
-       need_tagformat 'old', "rpush negotiated protocol $protovsn";
-    }
-    select_tagformat();
 }
 
 our $i_tmp;
@@ -5095,7 +5180,6 @@ sub cmd_rpush {
     changedir $i_tmp;
     ($protovsn) = initiator_expect { m/^dgit-remote-push-ready (\S+)/ };
     die "$protovsn ?" unless grep { $_ eq $protovsn } @rpushprotovsn_support;
-    $supplementary_message = '' unless $protovsn >= 3;
 
     for (;;) {
        my ($icmd,$iargs) = initiator_expect {
@@ -5122,7 +5206,7 @@ sub i_resp_complete {
     $i_child_pid = undef; # prevents killing some other process with same pid
     printdebug "waiting for build host child $pid...\n";
     my $got = waitpid $pid, 0;
-    confess $! unless $got == $pid;
+    confess "$!" unless $got == $pid;
     fail f_ "build host child failed: %s", waitstatusmsg() if $?;
 
     i_cleanup();
@@ -5156,6 +5240,7 @@ sub i_resp_previously ($) {
 }
 
 our %i_wanted;
+our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
 
 sub i_resp_want ($) {
     my ($keyword) = @_;
@@ -5165,24 +5250,27 @@ sub i_resp_want ($) {
     $isuite = $i_param{'isuite'} // $i_param{'csuite'};
     die unless $isuite =~ m/^$suite_re$/;
 
-    pushing();
-    rpush_handle_protovsn_bothends();
-
-    fail f_ "rpush negotiated protocol version %s".
-       " which does not support quilt mode %s",
-       $protovsn, $quilt_mode
-       if quiltmode_splitbrain;
+    if (!defined $dsc) {
+       pushing();
+       rpush_handle_protovsn_bothends();
+       push_parse_dsc $i_dscfn, 'remote dsc', $i_version;
+       if ($protovsn >= 6) {
+           determine_whether_split_brain getfield $dsc, 'Format';
+           $do_split_brain eq ($i_param{'splitbrain'} // '<unsent>')
+               or badproto \*RO,
+ "split brain mismatch, $do_split_brain != $i_param{'split_brain'}";
+           printdebug "rpush split brain $do_split_brain\n";
+       }
+    }
 
     my @localpaths = i_method "i_want", $keyword;
     printdebug "[[  $keyword @localpaths\n";
     foreach my $localpath (@localpaths) {
        protocol_send_file \*RI, $localpath;
     }
-    print RI "files-end\n" or confess $!;
+    print RI "files-end\n" or confess "$!";
 }
 
-our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
-
 sub i_localname_parsed_changelog {
     return "remote-changelog.822";
 }
@@ -5242,16 +5330,15 @@ sub i_want_signed_tag {
     my $maintview = $i_param{'maint-view'};
     die if defined $maintview && $maintview =~ m/[^0-9a-f]/;
 
-    select_tagformat();
-    if ($protovsn >= 4) {
+    if ($protovsn == 4) {
        my $p = $i_param{'tagformat'} // '<undef>';
-       $p eq $tagformat
-           or badproto \*RO, "tag format mismatch: $p vs. $tagformat";
+       $p eq 'new'
+           or badproto \*RO, "tag format mismatch: $p vs. new";
     }
 
     die unless $i_param{'csuite'} =~ m/^$suite_re$/;
     $csuite = $&;
-    push_parse_dsc $i_dscfn, 'remote dsc', $i_version;
+    defined $dsc or badproto \*RO, "dsc (before parsed-changelog)";
 
     my @tagwants = push_tagwants $i_version, $head, $maintview, "tag";
 
@@ -5285,13 +5372,13 @@ sub quiltify_dpkg_commit ($$$;$) {
     my $descfn = ".git/dgit/quilt-description.tmp";
     open O, '>', $descfn or confess "$descfn: $!";
     $msg =~ s/\n+/\n\n/;
-    print O <<END or confess $!;
+    print O <<END or confess "$!";
 From: $author
 ${xinfo}Subject: $msg
 ---
 
 END
-    close O or confess $!;
+    close O or confess "$!";
 
     {
        local $ENV{'EDITOR'} = cmdoutput qw(realpath --), $0;
@@ -5374,19 +5461,11 @@ sub quiltify_tree_sentinelfiles ($) {
     return $r;
 }
 
-sub quiltify_splitbrain_needed () {
-    if (!$split_brain) {
-       progress __ "dgit view: changes are required...";
-       runcmd @git, qw(checkout -q -b dgit-view);
-       $split_brain = 1;
-    }
-}
-
-sub quiltify_splitbrain ($$$$$$$) {
+sub quiltify_splitting ($$$$$$$) {
     my ($clogp, $unapplied, $headref, $oldtiptree, $diffbits,
        $editedignores, $cachekey) = @_;
     my $gitignore_special = 1;
-    if ($quilt_mode !~ m/gbp|dpm/) {
+    if ($quilt_mode !~ m/gbp|dpm|baredebian/) {
        # treat .gitignore just like any other upstream file
        $diffbits = { %$diffbits };
        $_ = !!$_ foreach values %$diffbits;
@@ -5401,6 +5480,8 @@ sub quiltify_splitbrain ($$$$$$$) {
     local $ENV{GIT_AUTHOR_EMAIL} = $authline[1];
     local $ENV{GIT_AUTHOR_DATE} =  $authline[2];
 
+    confess unless do_split_brain();
+
     my $fulldiffhint = sub {
        my ($x,$y) = @_;
        my $cmd = "git diff $x $y -- :/ ':!debian'";
@@ -5409,14 +5490,14 @@ sub quiltify_splitbrain ($$$$$$$) {
                  $cmd;
     };
 
-    if ($quilt_mode =~ m/gbp|unapplied/ &&
+    if ($quilt_mode =~ m/gbp|unapplied|baredebian/ &&
        ($diffbits->{O2H} & 01)) {
        my $msg = f_
  "--quilt=%s specified, implying patches-unapplied git tree\n".
  " but git tree differs from orig in upstream files.",
                      $quilt_mode;
        $msg .= $fulldiffhint->($unapplied, 'HEAD');
-       if (!stat_exists "debian/patches") {
+       if (!stat_exists "debian/patches" and $quilt_mode !~ m/baredebian/) {
            $msg .= __
  "\n ... debian/patches is missing; perhaps this is a patch queue branch?";
        }  
@@ -5429,9 +5510,24 @@ sub quiltify_splitbrain ($$$$$$$) {
  but git tree differs from result of applying debian/patches to upstream
 END
     }
-    if ($quilt_mode =~ m/gbp|unapplied/ &&
+    if ($quilt_mode =~ m/baredebian/) {
+       # We need to construct a merge which has upstream files from
+       # upstream and debian/ files from HEAD.
+
+       read_tree_upstream $quilt_upstream_commitish, 1, $headref;
+       my $version = getfield $clogp, 'Version';
+       my $upsversion = upstreamversion $version;
+       my $merge = make_commit
+           [ $headref, $quilt_upstream_commitish ],
+ [ +(f_ <<ENDT, $upsversion), $quilt_upstream_commitish_message, <<ENDU ];
+Combine debian/ with upstream source for %s
+ENDT
+[dgit ($our_version) baredebian-merge $version $quilt_upstream_commitish_used]
+ENDU
+       runcmd @git, qw(reset -q --hard), $merge;
+    }
+    if ($quilt_mode =~ m/gbp|unapplied|baredebian/ &&
        ($diffbits->{O2A} & 01)) { # some patches
-       quiltify_splitbrain_needed();
        progress __ "dgit view: creating patches-applied version using gbp pq";
        runcmd shell_cmd 'exec >/dev/null', gbp_pq, qw(import);
        # gbp pq import creates a fresh branch; push back to dgit-view
@@ -5448,7 +5544,6 @@ END
     }
     if (($diffbits->{O2H} & 02) && # user has modified .gitignore
        !($diffbits->{O2A} & 02)) { # patches do not change .gitignore
-       quiltify_splitbrain_needed();
        progress __
            "dgit view: creating patch to represent .gitignore changes";
         ensuredir "debian/patches";
@@ -5473,12 +5568,12 @@ ENDU
         close GIPATCH or die "$gipatch: $!";
         runcmd shell_cmd "exec >>$gipatch", @git, qw(diff),
             $unapplied, $headref, "--", sort keys %$editedignores;
-        open SERIES, "+>>", "debian/patches/series" or confess $!;
-        defined seek SERIES, -1, 2 or $!==EINVAL or confess $!;
+        open SERIES, "+>>", "debian/patches/series" or confess "$!";
+        defined seek SERIES, -1, 2 or $!==EINVAL or confess "$!";
         my $newline;
-        defined read SERIES, $newline, 1 or confess $!;
-       print SERIES "\n" or confess $! unless $newline eq "\n";
-       print SERIES "auto-gitignore\n" or confess $!;
+        defined read SERIES, $newline, 1 or confess "$!";
+       print SERIES "\n" or confess "$!" unless $newline eq "\n";
+       print SERIES "auto-gitignore\n" or confess "$!";
        close SERIES or die  $!;
         runcmd @git, qw(add -f -- debian/patches/series), $gipatch;
         commit_admin +(__ <<END).<<ENDU
@@ -5488,16 +5583,6 @@ END
 [dgit ($our_version) update-gitignore-quilt-fixup]
 ENDU
     }
-
-    my $dgitview = git_rev_parse 'HEAD';
-
-    changedir $maindir;
-    reflog_cache_insert "refs/$splitbraincache", $cachekey, $dgitview;
-
-    changedir "$playground/work";
-
-    my $saved = maybe_split_brain_save $headref, $dgitview, __ "converted";
-    progress f_ "dgit view: created (%s)", $saved;
 }
 
 sub quiltify ($$$$) {
@@ -5778,8 +5863,6 @@ sub quiltify ($$$$) {
 
        runcmd @git, qw(checkout -q), $cc, qw(debian/changelog);
     }
-
-    runcmd @git, qw(checkout -q master);
 }
 
 sub build_maybe_quilt_fixup () {
@@ -5789,55 +5872,60 @@ sub build_maybe_quilt_fixup () {
 
     check_for_vendor_patches();
 
-    if (quiltmode_splitbrain) {
-       fail <<END unless access_cfg_tagformats_can_splitbrain;
-quilt mode $quilt_mode requires split view so server needs to support
- both "new" and "maint" tag formats, but config says it doesn't.
-END
-    }
-
     my $clogp = parsechangelog();
     my $headref = git_rev_parse('HEAD');
     my $symref = git_get_symref();
-
-    if ($quilt_mode eq 'linear'
-       && !$fopts->{'single-debian-patch'}
-       && branch_is_gdr($headref)) {
-       # This is much faster.  It also makes patches that gdr
-       # likes better for future updates without laundering.
-       #
-       # However, it can fail in some casses where we would
-       # succeed: if there are existing patches, which correspond
-       # to a prefix of the branch, but are not in gbp/gdr
-       # format, gdr will fail (exiting status 7), but we might
-       # be able to figure out where to start linearising.  That
-       # will be slower so hopefully there's not much to do.
-       my @cmd = (@git_debrebase,
-                  qw(--noop-ok -funclean-mixed -funclean-ordering
-                     make-patches --quiet-would-amend));
-       # We tolerate soe snags that gdr wouldn't, by default.
-       if (act_local()) {
-           debugcmd "+",@cmd;
-           $!=0; $?=-1;
-           failedcmd @cmd
-               if system @cmd
-               and not ($? == 7*256 or
-                        $? == -1 && $!==ENOENT);
-       } else {
-           dryrun_report @cmd;
-       }
-       $headref = git_rev_parse('HEAD');
-    }
+    my $upstreamversion = upstreamversion $version;
 
     prep_ud();
     changedir $playground;
 
-    my $upstreamversion = upstreamversion $version;
+    my $splitbrain_cachekey;
+
+    if (do_split_brain()) {
+       my $cachehit;
+       ($cachehit, $splitbrain_cachekey) =
+           quilt_check_splitbrain_cache($headref, $upstreamversion);
+       if ($cachehit) {
+           changedir $maindir;
+           return;
+       }
+    }
+
+    unpack_playtree_need_cd_work($headref);
+    if (do_split_brain()) {
+       runcmd @git, qw(checkout -q -b dgit-view);
+       # so long as work is not deleted, its current branch will
+       # remain dgit-view, rather than master, so subsequent calls to
+       #  unpack_playtree_need_cd_work
+       # will DTRT, resetting dgit-view.
+       confess if $made_split_brain;
+       $made_split_brain = 1;
+    }
+    chdir '..';
 
     if ($fopts->{'single-debian-patch'}) {
+       fail f_
+ "quilt mode %s does not make sense (or is not supported) with single-debian-patch",
+           $quilt_mode
+           if quiltmode_splitting();
        quilt_fixup_singlepatch($clogp, $headref, $upstreamversion);
     } else {
-       quilt_fixup_multipatch($clogp, $headref, $upstreamversion);
+       quilt_fixup_multipatch($clogp, $headref, $upstreamversion,
+                             $splitbrain_cachekey);
+    }
+
+    if (do_split_brain()) {
+       my $dgitview = git_rev_parse 'HEAD';
+
+       changedir $maindir;
+       reflog_cache_insert "refs/$splitbraincache",
+           $splitbrain_cachekey, $dgitview;
+
+       changedir "$playground/work";
+
+       my $saved = maybe_split_brain_save $headref, $dgitview, __ "converted";
+       progress f_ "dgit view: created (%s)", $saved;
     }
 
     changedir $maindir;
@@ -5845,12 +5933,22 @@ END
         @git, qw(pull --ff-only -q), "$playground/work", qw(master);
 }
 
-sub unpack_playtree_mkwork ($) {
+sub build_check_quilt_splitbrain () {
+    build_maybe_quilt_fixup();
+}
+
+sub unpack_playtree_need_cd_work ($) {
     my ($headref) = @_;
 
-    mkdir "work" or confess $!;
-    changedir "work";
-    mktree_in_ud_here();
+    # prep_ud() must have been called already.
+    if (!chdir "work") {
+       # Check in the filesystem because sometimes we run prep_ud
+       # in between multiple calls to unpack_playtree_need_cd_work.
+       confess "$!" unless $!==ENOENT;
+       mkdir "work" or confess "$!";
+       changedir "work";
+       mktree_in_ud_here();
+    }
     runcmd @git, qw(reset -q --hard), $headref;
 }
 
@@ -5899,7 +5997,7 @@ sub quilt_fixup_singlepatch ($$$) {
     # necessary to build the source package.
 
     unpack_playtree_linkorigs($upstreamversion, sub { });
-    unpack_playtree_mkwork($headref);
+    unpack_playtree_need_cd_work($headref);
 
     rmtree("debian/patches");
 
@@ -5915,13 +6013,18 @@ sub quilt_fixup_singlepatch ($$$) {
     commit_quilty_patch();
 }
 
-sub quilt_make_fake_dsc ($) {
+sub quilt_need_fake_dsc ($) {
+    # cwd should be playground
     my ($upstreamversion) = @_;
 
+    return if stat_exists "fake.dsc";
+    # ^ OK to test this as a sentinel because if we created it
+    # we must either have done the rest too, or crashed.
+
     my $fakeversion="$upstreamversion-~~DGITFAKE";
 
-    my $fakedsc=new IO::File 'fake.dsc', '>' or confess $!;
-    print $fakedsc <<END or confess $!;
+    my $fakedsc=new IO::File 'fake.dsc', '>' or confess "$!";
+    print $fakedsc <<END or confess "$!";
 Format: 3.0 (quilt)
 Source: $package
 Version: $fakeversion
@@ -5934,11 +6037,11 @@ END
        my $md = new Digest::MD5;
 
        my $fh = new IO::File $leaf, '<' or die "$leaf $!";
-       stat $fh or confess $!;
+       stat $fh or confess "$!";
        my $size = -s _;
 
        $md->addfile($fh);
-       print $fakedsc " ".$md->hexdigest." $size $leaf\n" or confess $!;
+       print $fakedsc " ".$md->hexdigest." $size $leaf\n" or confess "$!";
     };
 
     unpack_playtree_linkorigs($upstreamversion, $dscaddfile);
@@ -5955,14 +6058,15 @@ END
     runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C), $maindir, @files;
 
     $dscaddfile->($debtar);
-    close $fakedsc or confess $!;
+    close $fakedsc or confess "$!";
 }
 
 sub quilt_fakedsc2unapplied ($$) {
     my ($headref, $upstreamversion) = @_;
     # must be run in the playground
-    # quilt_make_fake_dsc must have been called
+    # quilt_need_fake_dsc must have been called
 
+    quilt_need_fake_dsc($upstreamversion);
     runcmd qw(sh -ec),
         'exec dpkg-source --no-check --skip-patches -x fake.dsc >/dev/null';
 
@@ -5990,6 +6094,8 @@ sub quilt_check_splitbrain_cache ($$) {
     # Computes the cache key and looks in the cache.
     # Returns ($dgit_view_commitid, $cachekey) or (undef, $cachekey)
 
+    quilt_need_fake_dsc($upstreamversion);
+
     my $splitbrain_cachekey;
     
     progress f_
@@ -6001,6 +6107,7 @@ sub quilt_check_splitbrain_cache ($$) {
     push @cachekey, $upstreamversion;
     push @cachekey, $quilt_mode;
     push @cachekey, $headref;
+    push @cachekey, $quilt_upstream_commitish // '-';
 
     push @cachekey, hashfile('fake.dsc');
 
@@ -6021,12 +6128,12 @@ sub quilt_check_splitbrain_cache ($$) {
        "refs/$splitbraincache", $splitbrain_cachekey;
 
     if ($cachehit) {
-       unpack_playtree_mkwork($headref);
+       unpack_playtree_need_cd_work($headref);
        my $saved = maybe_split_brain_save $headref, $cachehit, "cache-hit";
        if ($cachehit ne $headref) {
            progress f_ "dgit view: found cached (%s)", $saved;
            runcmd @git, qw(checkout -q -b dgit-view), $cachehit;
-           $split_brain = 1;
+           $made_split_brain = 1;
            return ($cachehit, $splitbrain_cachekey);
        }
        progress __ "dgit view: found cached, no changes required";
@@ -6037,8 +6144,32 @@ sub quilt_check_splitbrain_cache ($$) {
     return (undef, $splitbrain_cachekey);
 }
 
+sub baredebian_origtarballs_scan ($$$) {
+    my ($fakedfi, $upstreamversion, $dir) = @_;
+    if (!opendir OD, $dir) {
+       return if $! == ENOENT;
+       fail "opendir $dir (origs): $!";
+    }
+
+    while ($!=0, defined(my $leaf = readdir OD)) {
+       {
+           local ($debuglevel) = $debuglevel-1;
+           printdebug "BDOS $dir $leaf ?\n";
+       }
+       next unless is_orig_file_of_vsn $leaf, $upstreamversion;
+       next if grep { $_->{Filename} eq $leaf } @$fakedfi;
+       push @$fakedfi, {
+            Filename => $leaf,
+            Path => "$dir/$leaf",
+                       };
+    }
+
+    die "$dir; $!" if $!;
+    closedir OD;
+}
+
 sub quilt_fixup_multipatch ($$$) {
-    my ($clogp, $headref, $upstreamversion) = @_;
+    my ($clogp, $headref, $upstreamversion, $splitbrain_cachekey) = @_;
 
     progress f_ "examining quilt state (multiple patches, %s mode)",
                $quilt_mode;
@@ -6112,16 +6243,39 @@ sub quilt_fixup_multipatch ($$$) {
     # afterwards with dpkg-source --before-build.  That lets us save a
     # tree object corresponding to .origs.
 
-    my $splitbrain_cachekey;
+    if ($quilt_mode eq 'linear'
+       && branch_is_gdr($headref)) {
+       # This is much faster.  It also makes patches that gdr
+       # likes better for future updates without laundering.
+       #
+       # However, it can fail in some casses where we would
+       # succeed: if there are existing patches, which correspond
+       # to a prefix of the branch, but are not in gbp/gdr
+       # format, gdr will fail (exiting status 7), but we might
+       # be able to figure out where to start linearising.  That
+       # will be slower so hopefully there's not much to do.
 
-    quilt_make_fake_dsc($upstreamversion);
+       unpack_playtree_need_cd_work $headref;
 
-    if (quiltmode_splitbrain()) {
-       my $cachehit;
-       ($cachehit, $splitbrain_cachekey) =
-           quilt_check_splitbrain_cache($headref, $upstreamversion);
-       return if $cachehit;
+       my @cmd = (@git_debrebase,
+                  qw(--noop-ok -funclean-mixed -funclean-ordering
+                     make-patches --quiet-would-amend));
+       # We tolerate soe snags that gdr wouldn't, by default.
+       if (act_local()) {
+           debugcmd "+",@cmd;
+           $!=0; $?=-1;
+           failedcmd @cmd
+               if system @cmd
+               and not ($? == 7*256 or
+                        $? == -1 && $!==ENOENT);
+       } else {
+           dryrun_report @cmd;
+       }
+       $headref = git_rev_parse('HEAD');
+
+       chdir '..';
     }
+
     my $unapplied=quilt_fakedsc2unapplied($headref, $upstreamversion);
 
     ensuredir '.pc';
@@ -6140,7 +6294,7 @@ END
 
     changedir '..';
 
-    unpack_playtree_mkwork($headref);
+    unpack_playtree_need_cd_work($headref);
 
     my $mustdeletepc=0;
     if (stat_exists ".pc") {
@@ -6148,7 +6302,7 @@ END
        progress __ "Tree already contains .pc - will use it then delete it.";
         $mustdeletepc=1;
     } else {
-        rename '../fake/.pc','.pc' or confess $!;
+        rename '../fake/.pc','.pc' or confess "$!";
     }
 
     changedir '../fake';
@@ -6161,15 +6315,97 @@ END
     # We calculate some guesswork now about what kind of tree this might
     # be.  This is mostly for error reporting.
 
+    my $tentries = cmdoutput @git, qw(ls-tree --name-only -z), $headref;
+    my $onlydebian = $tentries eq "debian\0";
+
+    my $uheadref = $headref;
+    my $uhead_whatshort = 'HEAD';
+
+    if ($quilt_mode =~ m/baredebian\+tarball/) {
+       # We need to make a tarball import.  Yuk.
+       # We want to do this here so that we have a $uheadref value
+
+       my @fakedfi;
+       baredebian_origtarballs_scan \@fakedfi, $upstreamversion, bpd_abs();
+       baredebian_origtarballs_scan \@fakedfi, $upstreamversion,
+           "$maindir/.." unless $buildproductsdir eq '..';
+       changedir '..';
+
+       my @tartrees = import_tarball_tartrees $upstreamversion, \@fakedfi;
+
+       fail __ "baredebian quilt fixup: could not find any origs"
+           unless @tartrees;
+
+       changedir 'work';
+       my ($authline, $r1authline, $clogp,) =
+           import_tarball_commits \@tartrees, $upstreamversion;
+
+       if (@tartrees == 1) {
+           $uheadref = $tartrees[0]{Commit};
+           # TRANSLATORS: this translation must fit in the ASCII art
+           # quilt differences display.  The untranslated display
+           # says %9.9s, so with that display it must be at most 9
+           # characters.
+           $uhead_whatshort = __ 'tarball';
+       } else {
+           # on .dsc import we do not make a separate commit, but
+           # here we need to do so
+           rm_subdir_cached '.';
+           my $parents;
+           foreach my $ti (@tartrees) {
+               my $c = $ti->{Commit};
+               if ($ti->{OrigPart} eq 'orig') {
+                   runcmd qw(git read-tree), $c;
+               } elsif ($ti->{OrigPart} =~ m/orig-/) {
+                   read_tree_subdir $', $c;
+               } else {
+                   confess "$ti->OrigPart} ?"
+               }
+               $parents .= "parent $c\n";
+           }
+           my $tree = git_write_tree();
+           my $mbody = f_ 'Combine orig tarballs for %s %s',
+               $package, $upstreamversion;
+           $uheadref = hash_commit_text <<END;
+tree $tree
+${parents}author $r1authline
+committer $r1authline
+
+$mbody
+
+[dgit import tarballs combine $package $upstreamversion]
+END
+           # TRANSLATORS: this translation must fit in the ASCII art
+           # quilt differences display.  The untranslated display
+           # says %9.9s, so with that display it must be at most 9
+           # characters.  This fragmentt is referring to multiple
+           # orig tarballs in a source package.
+           $uhead_whatshort = __ 'tarballs';
+
+           runcmd @git, qw(reset -q);
+       }
+       $quilt_upstream_commitish = $uheadref;
+       $quilt_upstream_commitish_used = '*orig*';
+       $quilt_upstream_commitish_message = '';
+    }
+    if ($quilt_mode =~ m/baredebian$/) {
+       $uheadref = $quilt_upstream_commitish;
+       # TRANSLATORS: this translation must fit in the ASCII art
+       # quilt differences display.  The untranslated display
+       # says %9.9s, so with that display it must be at most 9
+       # characters.
+       $uhead_whatshort = __ 'upstream';
+    }
+
     my %editedignores;
     my @unrepres;
     my $diffbits = {
         # H = user's HEAD
         # O = orig, without patches applied
         # A = "applied", ie orig with H's debian/patches applied
-        O2H => quiltify_trees_differ($unapplied,$headref,   1,
+        O2H => quiltify_trees_differ($unapplied,$uheadref,   1,
                                     \%editedignores, \@unrepres),
-        H2A => quiltify_trees_differ($headref,  $oldtiptree,1),
+        H2A => quiltify_trees_differ($uheadref, $oldtiptree,1),
         O2A => quiltify_trees_differ($unapplied,$oldtiptree,1),
     };
 
@@ -6184,13 +6420,23 @@ END
     progress f_
 "%s: base trees orig=%.20s o+d/p=%.20s",
               $us, $unapplied, $oldtiptree;
+    # TRANSLATORS: Try to keep this ascii-art layout right.  The 0s in
+    # %9.00009s will be ignored and are there to make the format the
+    # same length (9 characters) as the output it generates.  If you
+    # change the value 9, your translations of "upstream" and
+    # 'tarball' must fit into the new length, and you should change
+    # the number of 0s.  Do not reduce it below 4 as HEAD has to fit
+    # too.
     progress f_
 "%s: quilt differences: src:  %s orig %s     gitignores:  %s orig %s\n".
-"%s: quilt differences:      HEAD %s o+d/p               HEAD %s o+d/p",
+"%s: quilt differences: %9.00009s %s o+d/p          %9.00009s %s o+d/p",
   $us,                      $dl[0], $dl[1],              $dl[3], $dl[4],
-  $us,                          $dl[2],                     $dl[5];
+  $us,        $uhead_whatshort, $dl[2],   $uhead_whatshort, $dl[5];
 
-    if (@unrepres) {
+    if (@unrepres && $quilt_mode !~ m/baredebian/) {
+       # With baredebian, even if the upstream commitish has this
+       # problem, we don't want to print this message, as nothing
+       # is going to try to make a patch out of it anyway.
        print STDERR f_ "dgit:  cannot represent change: %s: %s\n",
                        $_->[1], $_->[0]
            foreach @unrepres;
@@ -6200,7 +6446,11 @@ END
     }
 
     my @failsuggestion;
-    if (!($diffbits->{O2H} & $diffbits->{O2A})) {
+    if ($onlydebian) {
+       push @failsuggestion, [ 'onlydebian', __
+ "This has only a debian/ directory; you probably want --quilt=bare debian." ]
+           unless $quilt_mode =~ m/baredebian/;
+    } elsif (!($diffbits->{O2H} & $diffbits->{O2A})) {
         push @failsuggestion, [ 'unapplied', __
  "This might be a patches-unapplied branch." ];
     } elsif (!($diffbits->{H2A} & $diffbits->{O2A})) {
@@ -6215,20 +6465,23 @@ END
        if stat_exists '.gitattributes';
 
     push @failsuggestion, [ 'origs', __
- "Maybe orig tarball(s) are not identical to git representation?" ];
-
-    if (quiltmode_splitbrain()) {
-       quiltify_splitbrain($clogp, $unapplied, $headref, $oldtiptree,
-                            $diffbits, \%editedignores,
-                           $splitbrain_cachekey);
+ "Maybe orig tarball(s) are not identical to git representation?" ]
+       unless $onlydebian && $quilt_mode !~ m/baredebian/;
+              # ^ in that case, we didn't really look properly
+
+    if (quiltmode_splitting()) {
+       quiltify_splitting($clogp, $unapplied, $headref, $oldtiptree,
+                          $diffbits, \%editedignores,
+                          $splitbrain_cachekey);
        return;
     }
 
     progress f_ "starting quiltify (multiple patches, %s mode)", $quilt_mode;
     quiltify($clogp,$headref,$oldtiptree,\@failsuggestion);
+    runcmd @git, qw(checkout -q), (qw(master dgit-view)[do_split_brain()]);
 
     if (!open P, '>>', ".pc/applied-patches") {
-       $!==&ENOENT or confess $!;
+       $!==&ENOENT or confess "$!";
     } else {
        close P;
     }
@@ -6247,21 +6500,21 @@ sub quilt_fixup_editor () {
     open I2, '<', $editing or confess "$editing: $!";
     unlink $editing or confess "$editing: $!";
     open O, '>', $editing or confess "$editing: $!";
-    while (<I1>) { print O or confess $!; } I1->error and confess $!;
+    while (<I1>) { print O or confess "$!"; } I1->error and confess "$!";
     my $copying = 0;
     while (<I2>) {
        $copying ||= m/^\-\-\- /;
        next unless $copying;
-       print O or confess $!;
+       print O or confess "$!";
     }
-    I2->error and confess $!;
+    I2->error and confess "$!";
     close O or die $1;
     finish 0;
 }
 
 sub maybe_apply_patches_dirtily () {
-    return unless $quilt_mode =~ m/gbp|unapplied/;
-    print STDERR __ <<END or confess $!;
+    return unless $quilt_mode =~ m/gbp|unapplied|baredebian/;
+    print STDERR __ <<END or confess "$!";
 
 dgit: Building, or cleaning with rules target, in patches-unapplied tree.
 dgit: Have to apply the patches - making the tree dirty.
@@ -6291,7 +6544,7 @@ sub clean_tree_check_git ($$$) {
     push @cmd, qw(-x) unless $honour_ignores;
     my $leftovers = cmdoutput @cmd;
     if (length $leftovers) {
-       print STDERR $leftovers, "\n" or confess $!;
+       print STDERR $leftovers, "\n" or confess "$!";
        $message .= $ignmessage if $honour_ignores;
        fail $message;
     }
@@ -6332,6 +6585,18 @@ sub clean_tree_check () {
 sub clean_tree () {
     # We always clean the tree ourselves, rather than leave it to the
     # builder (dpkg-source, or soemthing which calls dpkg-source).
+    if ($quilt_mode =~ m/baredebian/ and $cleanmode =~ m/git/) {
+       fail f_ <<END, $quilt_mode, $cleanmode;
+quilt mode %s (generally needs untracked upstream files)
+contradicts clean mode %s (which would delete them)
+END
+       # This is not 100% true: dgit build-source and push-source
+       # (for example) could operate just fine with no upstream
+       # source in the working tree.  But it doesn't seem likely that
+       # the user wants dgit to proactively delete such things.
+       # -wn, for example, would produce identical output without
+       # deleting anything from the working tree.
+    }
     if ($cleanmode =~ m{^dpkg-source}) {
        my @cmd = @dpkgbuildpackage;
        push @cmd, qw(-d) if $cleanmode =~ m{^dpkg-source-d};
@@ -6366,18 +6631,43 @@ sub WANTSRC_BUILDER () { 02; } # caller should run dpkg-buildpackage
 sub build_or_push_prep_early () {
     our $build_or_push_prep_early_done //= 0;
     return if $build_or_push_prep_early_done++;
-    badusage f_ "-p is not allowed with dgit %s", $subcommand
-       if defined $package;
     my $clogp = parsechangelog();
     $isuite = getfield $clogp, 'Distribution';
-    $package = getfield $clogp, 'Source';
+    my $gotpackage = getfield $clogp, 'Source';
     $version = getfield $clogp, 'Version';
+    $package //= $gotpackage;
+    if ($package ne $gotpackage) {
+       fail f_ "-p specified package %s, but changelog says %s",
+           $package, $gotpackage;
+    }
     $dscfn = dscfn($version);
 }
 
+sub build_or_push_prep_modes () {
+    my ($format) = get_source_format();
+    determine_whether_split_brain($format);
+
+    fail __ "dgit: --include-dirty is not supported with split view".
+            " (including with view-splitting quilt modes)"
+       if do_split_brain() && $includedirty;
+
+    if (madformat_wantfixup $format and $quilt_mode =~ m/baredebian$/) {
+       ($quilt_upstream_commitish, $quilt_upstream_commitish_used,
+        $quilt_upstream_commitish_message)
+           = resolve_upstream_version
+           $quilt_upstream_commitish, upstreamversion $version;
+       progress f_ "dgit: --quilt=%s, %s", $quilt_mode,
+           $quilt_upstream_commitish_message;
+    } elsif (defined $quilt_upstream_commitish) {
+       fail __
+ "dgit: --upstream-commitish only makes sense with --quilt=baredebian"
+    }
+}
+
 sub build_prep_early () {
     build_or_push_prep_early();
     notpushing();
+    build_or_push_prep_modes();
     check_not_dirty();
 }
 
@@ -6399,7 +6689,7 @@ sub build_prep ($) {
        # said -wc we should still do the check.
        clean_tree_check();
     }
-    build_maybe_quilt_fixup();
+    build_check_quilt_splitbrain();
     if ($rmchanges) {
        my $pat = changespat $version;
        foreach my $f (glob "$buildproductsdir/$pat") {
@@ -6413,6 +6703,31 @@ sub build_prep ($) {
     }
 }
 
+sub maybe_warn_opt_confusion ($$$) {
+    my ($subcommand, $willrun, $optsref) = @_;
+    foreach (@$optsref) {
+       if (m/^(?: --dry-run  $
+                | --damp-run $
+                | --clean= | -w[gcnd]
+                | --(?:include|ignore)-dirty$
+                | --quilt= | --gbp$ | --dpm$ | --baredebian
+                | --split-view=
+                | --build-products-dir=
+                )/x) {
+           print STDERR f_ <<END, $&, $subcommand or die $!;
+warning: dgit option %s must be passed before %s on dgit command line
+END
+       } elsif (m/^(?: -C
+                     | --no-sign  $
+                     | -k
+                     )/x) {
+           print STDERR f_ <<END, $&, $subcommand, $willrun or die $!;
+warning: option %s should probably be passed to dgit before %s sub-command on the dgit command line, so that it is seen by dgit and not simply passed to %s
+END
+       }
+    }
+}
+
 sub changesopts_initial () {
     my @opts =@changesopts[1..$#changesopts];
 }
@@ -6550,7 +6865,7 @@ END
                "@changesfiles";
     }
     printdone f_ "build successful, results in %s\n", $result
-       or confess $!;
+       or confess "$!";
 }
 
 sub midbuild_checkchanges () {
@@ -6586,6 +6901,7 @@ sub postbuild_mergechanges_vanilla ($) {
 
 sub cmd_build {
     build_prep_early();
+    maybe_warn_opt_confusion 'build', 'dpkg-buildpackage', \@ARGV;
     $buildproductsdir eq '..' or print STDERR +(f_ <<END, $us, $us);
 %s: warning: build-products-dir set, but not supported by dpkg-buildpackage
 %s: warning: build-products-dir will be ignored; files will go to ..
@@ -6613,6 +6929,7 @@ sub pre_gbp_build {
 
 sub cmd_gbp_build {
     build_prep_early();
+    maybe_warn_opt_confusion 'gbp-build', 'gbp buildpackage', \@ARGV;
 
     # gbp can make .origs out of thin air.  In my tests it does this
     # even for a 1.0 format package, with no origs present.  So I
@@ -6648,7 +6965,7 @@ sub cmd_gbp_build {
     if ($gbp_make_orig) {
        my $priv = dgit_privdir();
        my $ok = "$priv/origs-gen-ok";
-       unlink $ok or $!==&ENOENT or confess $!;
+       unlink $ok or $!==&ENOENT or confess "$!";
        my @origs_cmd = @cmd;
        push @origs_cmd, qw(--git-cleaner=true);
        push @origs_cmd, "--git-prebuild=".
@@ -6688,7 +7005,7 @@ sub building_source_in_playtree {
     #
     # Note that if we are building a source package in split brain
     # mode we do not support including uncommitted changes, because
-    # that makes quilt fixup too hard.  I.e. ($split_brain && (dgit is
+    # that makes quilt fixup too hard.  I.e. ($made_split_brain && (dgit is
     # building a source package)) => !$includedirty
     return !$includedirty;
 }
@@ -6699,6 +7016,8 @@ sub build_source {
        unlink "$buildproductsdir/$sourcechanges" or $!==ENOENT
            or fail f_ "remove %s: %s", $sourcechanges, $!;
     }
+#    confess unless !!$made_split_brain == do_split_brain();
+
     my @cmd = (@dpkgsource, qw(-b --));
     my $leafdir;
     if (building_source_in_playtree()) {
@@ -6707,12 +7026,12 @@ sub build_source {
         # If we are in split brain, there is already a playtree with
         # the thing we should package into a .dsc (thanks to quilt
         # fixup).  If not, make a playtree
-        prep_ud() unless $split_brain;
+        prep_ud() unless $made_split_brain;
         changedir $playground;
-        unless ($split_brain) {
+        unless ($made_split_brain) {
             my $upstreamversion = upstreamversion $version;
             unpack_playtree_linkorigs($upstreamversion, sub { });
-            unpack_playtree_mkwork($headref);
+            unpack_playtree_need_cd_work($headref);
             changedir '..';
         }
     } else {
@@ -6779,7 +7098,7 @@ sub cmd_push_source {
        "dgit push-source: --include-dirty/--ignore-dirty does not make".
        "sense with push-source!"
        if $includedirty;
-    build_maybe_quilt_fixup();
+    build_check_quilt_splitbrain();
     if ($changesfile) {
         my $changes = parsecontrol("$buildproductsdir/$changesfile",
                                    __ "source changes file");
@@ -6818,6 +7137,7 @@ sub binary_builder {
 
 sub cmd_sbuild {
     build_prep_early();
+    maybe_warn_opt_confusion 'sbuild', 'sbuild', \@ARGV;
     binary_builder(\@sbuild, (__ <<END), qw(-d), $isuite, @ARGV, $dscfn);
 perhaps you need to pass -A ?  (sbuild's default is to build only
 arch-specific binaries; dgit 1.4 used to override that.)
@@ -6827,6 +7147,7 @@ END
 sub pbuilder ($) {
     my ($pbuilder) = @_;
     build_prep_early();
+    maybe_warn_opt_confusion 'pbuilder', 'pbuilder', \@ARGV;
     # @ARGV is allowed to contain only things that should be passed to
     # pbuilder under debbuildopts; just massage those
     my $wantsrc = massage_dbp_args \@ARGV;
@@ -6878,9 +7199,8 @@ sub cmd_print_unapplied_treeish {
     prep_ud();
     changedir $playground;
     my $uv = upstreamversion $version;
-    quilt_make_fake_dsc($uv);
     my $u = quilt_fakedsc2unapplied($headref, $uv);
-    print $u, "\n" or confess $!;
+    print $u, "\n" or confess "$!";
 }
 
 sub import_dsc_result {
@@ -7070,7 +7390,7 @@ END
            my $version = getfield $dsc, 'Version';
            my $clogp = commit_getclogp $newhash;
            my $authline = clogp_authline $clogp;
-           $newhash = make_commit_text <<ENDU
+           $newhash = hash_commit_text <<ENDU
 tree $tree
 parent $newhash
 parent $oldhash
@@ -7098,10 +7418,8 @@ sub cmd_archive_api_query {
     badusage __ "need only 1 subpath argument" unless @ARGV==1;
     my ($subpath) = @ARGV;
     local $isuite = 'DGIT-API-QUERY-CMD';
-    my @cmd = archive_api_query_cmd($subpath);
-    push @cmd, qw(-f);
-    debugcmd ">",@cmd;
-    exec @cmd or fail f_ "exec curl: %s\n", $!;
+    my $json = api_query_raw $subpath;
+    print $json or die "$!";
 }
 
 sub repos_server_url () {
@@ -7131,7 +7449,7 @@ sub cmd_print_dgit_repos_server_source_url {
        "no arguments allowed to dgit print-dgit-repos-server-source-url"
        if @ARGV;
     my $url = repos_server_url();
-    print $url, "\n" or confess $!;
+    print $url, "\n" or confess "$!";
 }
 
 sub pre_print_dpkg_source_ignores {
@@ -7141,7 +7459,7 @@ sub cmd_print_dpkg_source_ignores {
     badusage __
        "no arguments allowed to dgit print-dpkg-source-ignores"
        if @ARGV;
-    print "@dpkg_source_ignores\n" or confess $!;
+    print "@dpkg_source_ignores\n" or confess "$!";
 }
 
 sub cmd_setup_mergechangelogs {
@@ -7172,7 +7490,7 @@ sub cmd_setup_new_tree {
 #---------- argument parsing and main program ----------
 
 sub cmd_version {
-    print "dgit version $our_version\n" or confess $!;
+    print "dgit version $our_version\n" or confess "$!";
     finish 0;
 }
 
@@ -7302,7 +7620,7 @@ sub parseopts () {
                push @ropts, $_;
                my $cmd = shift @$om;
                @$om = ($cmd, grep { $_ ne $2 } @$om);
-           } elsif (m/^--(gbp|dpm)$/s) {
+           } elsif (m/^--($quilt_options_re)$/s) {
                push @ropts, "--quilt=$1";
                $quilt_mode = $1;
            } elsif (m/^--(?:ignore|include)-dirty$/s) {
@@ -7320,16 +7638,25 @@ sub parseopts () {
            } elsif (m/^--overwrite$/s) {
                push @ropts, $_;
                $overwrite_version = '';
+           } elsif (m/^--split-(?:view|brain)$/s) {
+               push @ropts, $_;
+               $splitview_mode = 'always';
+           } elsif (m/^--split-(?:view|brain)=($splitview_modes_re)$/s) {
+               push @ropts, $_;
+               $splitview_mode = $1;
            } elsif (m/^--overwrite=(.+)$/s) {
                push @ropts, $_;
                $overwrite_version = $1;
            } elsif (m/^--delayed=(\d+)$/s) {
                push @ropts, $_;
                push @dput, $_;
-           } elsif (my ($k,$v) =
-                    m/^--save-(dgit-view)=(.+)$/s ||
+           } elsif (m/^--upstream-commitish=(.+)$/s) {
+               push @ropts, $_;
+               $quilt_upstream_commitish = $1;
+           } elsif (m/^--save-(dgit-view)=(.+)$/s ||
                     m/^--(dgit-view)-save=(.+)$/s
                     ) {
+               my ($k,$v) = ($1,$2);
                push @ropts, $_;
                $v =~ s#^(?!refs/)#refs/heads/#;
                $internal_object_save{$k} = $v;
@@ -7348,11 +7675,9 @@ sub parseopts () {
                    f_ "%s: warning: ignoring unknown force option %s\n",
                       $us, $_;
                $_='';
-           } elsif (m/^--dgit-tag-format=(old|new)$/s) {
-               # undocumented, for testing
+           } elsif (m/^--for-push$/s) {
                push @ropts, $_;
-               $tagformat_want = [ $1, 'command line', 1 ];
-               # 1 menas overrides distro configuration
+               $access_forpush = 1;
            } elsif (m/^--config-lookup-explode=(.+)$/s) {
                # undocumented, for testing
                push @ropts, $_;
@@ -7429,7 +7754,7 @@ sub parseopts () {
 
 sub check_env_sanity () {
     my $blocked = new POSIX::SigSet;
-    sigprocmask SIG_UNBLOCK, $blocked, $blocked or confess $!;
+    sigprocmask SIG_UNBLOCK, $blocked, $blocked or confess "$!";
 
     eval {
        foreach my $name (qw(PIPE CHLD)) {
@@ -7498,6 +7823,7 @@ sub parseopts_late_defaults () {
            or badcfg f_ "unknown quilt-mode \`%s'", $quilt_mode;
        $quilt_mode = $1;
     }
+    $quilt_mode =~ s/^(baredebian)\+git$/$1/;
 
     foreach my $moc (@modeopt_cfgs) {
        local $access_forpush;
@@ -7510,19 +7836,10 @@ sub parseopts_late_defaults () {
        $$vr = $v;
     }
 
-    fail __ "dgit: --include-dirty is not supported in split view quilt mode"
-       if $split_brain && $includedirty;
-
-    if (!defined $cleanmode) {
+    {
        local $access_forpush;
-       $cleanmode = access_cfg('clean-mode-newer', 'RETURN-UNDEF');
-       $cleanmode = undef if $cleanmode && $cleanmode !~ m/^$cleanmode_re$/;
-
-       $cleanmode //= access_cfg('clean-mode', 'RETURN-UNDEF');
-       $cleanmode //= 'dpkg-source';
-
-       badcfg f_ "unknown clean-mode \`%s'", $cleanmode unless
-           $cleanmode =~ m/$cleanmode_re/;
+       default_from_access_cfg(\$cleanmode, 'clean-mode', 'dpkg-source',
+                               $cleanmode_re);
     }
 
     $buildproductsdir //= access_cfg('build-products-dir', 'RETURN-UNDEF');
@@ -7546,7 +7863,7 @@ print STDERR __ "DRY RUN ONLY\n" if $dryrun_level > 1;
 print STDERR __ "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
     if $dryrun_level == 1;
 if (!@ARGV) {
-    print STDERR __ $helpmsg or confess $!;
+    print STDERR __ $helpmsg or confess "$!";
     finish 8;
 }
 $cmd = $subcommand = shift @ARGV;
diff --git a/dgit-maint-bpo.7.pod b/dgit-maint-bpo.7.pod
new file mode 100644 (file)
index 0000000..86372dd
--- /dev/null
@@ -0,0 +1,147 @@
+=head1 NAME
+
+dgit - tips for maintaining official Debian backports
+
+=head1 INTRODUCTION
+
+This document describes elements of a workflow for using B<dgit> to
+maintain an official Debian backport.  We do not assume that whoever
+uploads the package to Debian unstable is using B<dgit>.
+
+=head1 GENERAL TIPS
+
+The first time a package is backported
+for any particular Debian release,
+you will have to pass the --new option to dgit.
+
+=head1 TERMINOLOGY
+
+Let the I<master> branch contain the packaging history uploaded to
+Debian unstable, and the I<buster-bpo> branch be where you prepare
+your uploads to the B<buster-backports> suite.
+
+A B<merging> backports workflow means that each time an upload
+migrates to Debian testing and you want to prepare an upload to
+B<buster-backports>, you do something like this:
+
+=over 4
+
+    % git checkout buster-bpo
+    % git merge master
+    % dch --bpo
+    % # any other changes needed for backporting
+    % git commit -a
+    % # try a build
+
+=back
+
+A B<rebasing> backports workflow means that you throw away the history
+of the I<buster-bpo> branch each time a new version migrates to Debian
+testing, something equivalent to this:
+
+=over 4
+
+    % git checkout -B buster-bpo master
+    % dch --bpo
+    % # any other changes needed for backporting
+    % git commit -a
+    % # try a build
+
+=back
+
+If you use a merging backports workflow, your changelog contains
+entries for each previous upload to B<buster-backports>; in a rebasing
+workflow, it contains only the latest.
+
+=head1 CHOOSING BETWEEN THE TWO WORKFLOWS
+
+If backporting involves making no (additional) changes to the upstream
+source, whether you use a merging or rebasing backports workflow is a
+matter of personal preference.  There are good arguments in favour of
+both workflows fitting the semantics of the B<*-backports> suites.
+
+If you have to make changes to the upstream source to make the package
+work on machines running Debian stable, it is advisable to choose a
+rebasing workflow.  This ensures that dgit can automatically update
+the debian/patches directory without any manual intervention.
+
+=head1 TIPS FOR A MERGING WORKFLOW
+
+=head2 Use dgit's branches
+
+If you do not yourself upload the package to Debian unstable, it is
+usually easiest to use dgit's branches, and ignore the configured
+Vcs-Git repository.
+
+You would use
+
+=over 4
+
+    % dgit clone foo bullseye
+
+=back
+
+for a new backport of package 'foo' to B<buster-backports>, and then
+
+=over 4
+
+    % dgit fetch bullseye
+    % git merge dgit/dgit/bullseye
+
+=back
+
+when new versions migrate to Debian testing.
+
+=head1 TIPS FOR A REBASING WORKFLOW
+
+=head2 Use dgit's branches
+
+If you do not yourself upload the package to Debian unstable, it is
+usually easiest to use dgit's branches, and ignore the configured
+Vcs-Git repository.  For each new version from Debian testing, you
+would
+
+=over 4
+
+    % dgit fetch bullseye
+    % git checkout -B buster-bpo dgit/dgit/bullseye
+    % # use git-cherry-pick(1) to (re)apply any needed backporting fixes
+
+=back
+
+=head2 Overwriting
+
+B<dgit push> tries hard to prevent you from accidentally overwriting
+uploads that it thinks aren't represented in the git history you are
+trying to upload.  This is mainly to prevent accidentally overwriting
+NMUs.
+
+With a rebasing backports workflow, dgit will think that every upload
+of a new version from Debian testing might be accidentally overwriting
+uploads.  You will need to explicitly indicate the upload to
+B<buster-backports> you wish to overwrite.
+
+Suppose that the last upload to B<buster-backports> was versioned
+I<1.2.2-1~bpo10+1> and you have now prepared I<1.2.3-1~bpo10+1> for
+upload.  When you B<dgit push>, you will need to pass
+I<--overwrite=1.2.2-1~bpo10+1>.
+
+Alternatively, you can perform the pseudomerge that I<--overwrite>
+would have done yourself:
+
+=over 4
+
+    % dgit fetch buster-backports
+    % git merge -s ours dgit/dgit/buster-backports
+    % dgit push-source
+
+=back
+
+=head1 SEE ALSO
+
+dgit(1), dgit(7), https://backports.debian.org/
+
+=head1 AUTHOR
+
+This manpage was written and is maintained by Sean Whitton
+<spwhitton@spwhitton.name>.
index b91ed1648ea676355c3727c7fcd327ea2b7bf375..b3700a467e56463c302cf0173b0673865650a694 100644 (file)
@@ -134,6 +134,32 @@ using git-diff(1) to compare the imported tarball to the release tag.
 
 =back
 
+=head3 Using untagged upstream commits
+
+=over 4
+
+Sometimes upstream does not tag their releases, or you want to package
+an unreleased git snapshot.  In such a case you can create your own
+upstream release tag, of the form B<upstream/>I<ver>, where I<ver> is
+the upstream version you plan to put in I<debian/changelog>.  The
+B<upstream/> prefix ensures that your tag will not clash with any tags
+upstream later creates.
+
+For example, suppose that the latest upstream release is 1.2.2 and you
+want to package git commit ab34c21 which was made on 2013-12-11.  A
+common convention is to use the upstream version number
+1.2.2+git20131211.ab34c21 and so you could use
+
+=over 4
+
+    % git tag -s upstream/1.2.2+git20131211.ab34c21 ab34c21
+
+=back
+
+to obtain a release tag, and then proceed as above.
+
+=back
+
 =head2 When upstream releases only tarballs
 
 Because we want to work in git, we need a virtual upstream branch with
@@ -145,64 +171,66 @@ begin
     % mkdir foo
     % cd foo
     % git init
+    % git checkout -b upstream
+    % gbp import-orig \
+        --upstream-branch=upstream --debian-branch=master \
+        --upstream-tag='upstream/%(version)s' \
+        --sign-tags --no-pristine-tar \
+        ../foo_1.2.2.orig.tar.xz
+    % git branch -f upstream
 
 =back
 
-Now create I<debian/gbp.conf>:
+This should leave you on the master branch.  Next, our upstream branch
+cannot be pushed to B<dgit-repos>, but since we will need it whenever
+we import a new upstream version, we must push it somewhere.  The
+usual choice is B<salsa.debian.org>:
+
+=over 4
+
+    % git remote add -f origin salsa.debian.org:Debian/foo.git
+    % git push --follow-tags -u origin master upstream
+
+=back
+
+You are now ready to proceed as above, making commits to the
+I<debian/> directory and to the upstream source.  As above, for
+technical reasons, B<it is essential that your first commit introduces
+the debian/ directory containing at least one file, and does nothing
+else.>  In other words, make a commit introducing I<debian/> before
+patching the upstream source.
+
+A convenient way to ensure this requirement is satisfied is to start
+by creating I<debian/gbp.conf>:
 
 =over 4
 
     [DEFAULT]
     upstream-branch = upstream
     debian-branch = master
-    upstream-tag = %(version)s
+    upstream-tag = upstream/%(version)s
 
     sign-tags = True
     pristine-tar = False
     pristine-tar-commit = False
 
     [import-orig]
-    merge-mode = merge
+    merge = False
 
 =back
 
-gbp-import-orig(1) requires a pre-existing upstream branch:
+and commit that:
 
 =over 4
 
     % git add debian/gbp.conf && git commit -m "create gbp.conf"
-    % git checkout --orphan upstream
-    % git rm -rf .
-    % git commit --allow-empty -m "initial, empty branch for upstream source"
-    % git checkout -f master
 
 =back
 
-Then we can import the upstream version:
-
-=over 4
-
-    % gbp import-orig --merge-mode=replace ../foo_1.2.2.orig.tar.xz
-
-=back
-
-Our upstream branch cannot be pushed to B<dgit-repos>, but since we
-will need it whenever we import a new upstream version, we must push
-it somewhere.  The usual choice is B<salsa.debian.org>:
-
-=over 4
-
-    % git remote add -f origin salsa.debian.org:Debian/foo.git
-    % git push --follow-tags -u origin master upstream
-
-=back
-
-You are now ready to proceed as above, making commits to the
-I<debian/> directory and to the upstream source.  As above, for
-technical reasons, B<it is essential that your first commit introduces
-the debian/ directory containing at least one file, and does nothing
-else.>  In other words, make a commit introducing I<debian/> before
-patching the upstream source.
+Note that we couldn't create I<debian/gbp.conf> before now for the
+same technical reasons which require our first commit to introduce
+I<debian/> without patching the upstream source.  That's why we had to
+pass a lot of options to our first call to gbp-import-orig(1).
 
 =head1 CONVERTING AN EXISTING PACKAGE
 
@@ -327,10 +355,14 @@ release, and importing that release using git-debrebase(1).
 
 =over 4
 
-    % git remote update
+    % git fetch --tags upstream
 
 =back
 
+If you want to package an untagged upstream commit (because upstream
+does not tag releases or because you want to package an upstream
+development snapshot), see "Using untagged upstream commits" above.
+
 =head3 When upstream releases only tarballs
 
 You will need the I<debian/gbp.conf> from "When upstream releases only
@@ -342,7 +374,7 @@ Then, either
 
 =over 4
 
-    % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz
+    % gbp import-orig ../foo_1.2.3.orig.tar.xz
 
 =back
 
@@ -350,7 +382,7 @@ or if you have a working watch file
 
 =over 4
 
-    % gbp import-orig --no-merge --uscan
+    % gbp import-orig --uscan
 
 =back
 
@@ -375,9 +407,10 @@ release:
 
 =back
 
-Pass I<--stat> just to see the list of changed files, which is useful
-to determine whether there are any new or deleted files that may need
-accounting for in your copyright file.
+Also, diff with I<--name-status> and I<--diff-filter=ADR> to see
+just the list of added or removed files, which is useful to determine
+whether there are any new or deleted files that may need accounting
+for in your copyright file.
 
 If you obtained a tarball from upstream, you are ready to try a build.
 If you merged a git tag from upstream, you will first need to generate
@@ -453,6 +486,10 @@ fast-forwarding from the history on B<dgit-repos>.  In such cases you
 will have to pass I<--overwrite> to dgit.  git-debrebase will normally
 tell you if this will be needed.
 
+If you want to upload with git-debpush(1), for the first upload you
+should pass the B<--quilt=linear> quilt mode option (see
+git-debpush(1)).
+
 Right before uploading, if you did not just already do so, you might
 want to have git-debrebase(1) shuffle your branch such that the Debian
 delta queue appears right at the tip of the branch you will push:
index b8abd66cb6dcce1713ddc6dcb9b15114f412339b..1988a317345d1a9ab006cb9233d6c62a53c653a1 100644 (file)
@@ -127,6 +127,9 @@ history.  (This origin commit would represent the most recent non-dgit
 upload of the package, but this should already be represented in your
 git history.)
 
+Alternatively, you can use git-debpush(1).  For the first upload you
+should pass the B<--gbp> quilt mode option (see git-debpush(1)).
+
 =head1 INCORPORATING NMUS
 
 B<dgit pull> can't yet incorporate NMUs into patches-unapplied gbp
index c20a2525d1d62a0d96229f7104a4e03bec880718..ddf37aa54402dbde2566338467305667506407fd 100644 (file)
@@ -120,6 +120,32 @@ upstream's tarball instead of running git-deborig(1).
 
 =back
 
+=head3 Using untagged upstream commits
+
+=over 4
+
+Sometimes upstream does not tag their releases, or you want to package
+an unreleased git snapshot.  In such a case you can create your own
+upstream release tag, of the form B<upstream/>I<ver>, where I<ver> is
+the upstream version you plan to put in I<debian/changelog>.  The
+B<upstream/> prefix ensures that your tag will not clash with any tags
+upstream later creates.
+
+For example, suppose that the latest upstream release is 1.2.2 and you
+want to package git commit ab34c21 which was made on 2013-12-11.  A
+common convention is to use the upstream version number
+1.2.2+git20131211.ab34c21 and so you could use
+
+=over 4
+
+    % git tag -s upstream/1.2.2+git20131211.ab34c21 ab34c21
+
+=back
+
+to obtain a release tag, and then proceed as above.
+
+=back
+
 =head2 When upstream releases only tarballs
 
 We need a virtual upstream branch with virtual release tags.
@@ -140,7 +166,7 @@ Now create I<debian/gbp.conf>:
     [DEFAULT]
     upstream-branch = upstream
     debian-branch = master
-    upstream-tag = %(version)s
+    upstream-tag = upstream/%(version)s
 
     sign-tags = True
     pristine-tar = False
@@ -148,6 +174,7 @@ Now create I<debian/gbp.conf>:
 
     [import-orig]
     merge-mode = merge
+    merge = False
 
 =back
 
@@ -167,7 +194,7 @@ Then we can import the upstream version:
 
 =over 4
 
-    % gbp import-orig --merge-mode=replace ../foo_1.2.2.orig.tar.xz
+    % gbp import-orig --merge --merge-mode=replace ../foo_1.2.2.orig.tar.xz
 
 =back
 
@@ -317,12 +344,16 @@ dgit(1).  If any command fails, dgit will provide a carefully-worded
 error message explaining what you should do.  If it's not clear, file
 a bug against dgit.  Remember to pass I<--new> for the first upload.
 
-As an alternative to B<dgit build> and friends, you can use a tool
-like gitpkg(1).  This works because like dgit, gitpkg(1) enforces that
-HEAD has exactly the contents of the source package.  gitpkg(1) is
-highly configurable, and one dgit user reports using it to produce and
-test multiple source packages, from different branches corresponding
-to each of the current Debian suites.
+If you want to upload with git-debpush(1), for the first upload you
+should pass the B<--quilt=smash> quilt mode option (see
+git-debpush(1)).
+
+As another alternative to B<dgit build> and friends, you can use a
+tool like gitpkg(1).  This works because like dgit, gitpkg(1) enforces
+that HEAD has exactly the contents of the source package.  gitpkg(1)
+is highly configurable, and one dgit user reports using it to produce
+and test multiple source packages, from different branches
+corresponding to each of the current Debian suites.
 
 If you want to skip dgit's checks while iterating on a problem with
 the package build (for example, you don't want to commit your changes
@@ -336,10 +367,14 @@ to git), you can just run dpkg-buildpackage(1) or debuild(1) instead.
 
 =over 4
 
-    % git remote update
+    % git fetch --tags upstream
 
 =back
 
+If you want to package an untagged upstream commit (because upstream
+does not tag releases or because you want to package an upstream
+development snapshot), see "Using untagged upstream commits" above.
+
 =head3 When upstream releases only tarballs
 
 You will need the I<debian/gbp.conf> from "When upstream releases only
@@ -351,7 +386,7 @@ Then, either
 
 =over 4
 
-    % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz
+    % gbp import-orig ../foo_1.2.3.orig.tar.xz
 
 =back
 
@@ -359,10 +394,12 @@ or if you have a working watch file
 
 =over 4
 
-    % gbp import-orig --no-merge --uscan
+    % gbp import-orig --uscan
 
 =back
 
+In the following, replace I<1.2.3> with I<upstream/1.2.3>.
+
 =head2 Reviewing & merging the release
 
 It's a good idea to preview the merge of the new upstream release.
@@ -371,7 +408,7 @@ accounting for in your copyright file:
 
 =over 4
 
-    % git diff --stat master..1.2.3 -- . ':!debian'
+    % git diff --name-status --diff-filter=ADR master..1.2.3 -- . ':!debian'
 
 =back
 
diff --git a/dgit.1 b/dgit.1
index 682562cab85b56fb7ee45215d89de3e39b13bc3c..bec8f975aa5f89f3a0510c83714498a054c5118b 100644 (file)
--- a/dgit.1
+++ b/dgit.1
@@ -192,10 +192,6 @@ passed on to sbuild.
 The output is left in
 .IR package \fB_\fR version \fB_multi.changes\fR.
 .IP
-Note that by default
-sbuild does not build arch-independent packages.
-You probably want to pass \-A, to request those.
-.IP
 Tagging, signing and actually uploading should be left to dgit push.
 .TP
 \fBdgit pbuilder\fR [\fIdebbuildopts\fP]
@@ -631,7 +627,8 @@ This could perhaps be used to detect bugs in your rules clean target.
 .TP
 .BR -N " | " --new
 The package is or may be new in this suite.  Without this, dgit will
-refuse to push.  It may (for Debian, will) be unable to access the git
+refuse to push.
+It may (for Debian, will) be unable to access the git
 history for any packages which have been newly pushed and have not yet
 been published.
 .TP
@@ -642,6 +639,18 @@ include the changes from your working tree.
 This can be useful with build, if you plan to commit later.  (dgit
 push will still ensure that the .dsc you upload and the git tree
 you push are identical, so this option won't make broken pushes.)
+
+Note that this does
+.BR not
+prevent dgit from cleaning your tree, so if the changes in your
+working tree are in the form of untracked files, those might still be
+deleted, especially with --clean=git.
+If you want to include untracked files in the build, you can
+use --clean=none or --clean=dpkg-source[-d]
+in addition to --include-dirty.
+Note that this
+combination can fail if the untracked files are under
+\fIdebian/patches/\fR.
 .TP
 .BR --ignore-dirty
 Deprecated alias for --include-dirty.
@@ -667,6 +676,8 @@ unless you know what you are doing.
 This option is useful if you are the maintainer, and you have
 incorporated NMU changes into your own git workflow in a way that
 doesn't make your branch a fast forward from the NMU.
+It can also be useful when there was an upload made without dgit
+since the most recent upload made with dgit.
 
 This option is also usually necessary
 the first time a package is pushed with dgit push
@@ -695,7 +706,7 @@ of git merge -s ours) to stitch the archive's version into your own
 git history, so that your push is a fast forward from the archive.
 
 (In quilt mode
-.BR gbp ", " dpm " or " unpatched ,
+.BR gbp ", " dpm ", " unpatched " or " baredebian *,
 implying a split between the dgit view and the
 maintainer view, the pseudo-merge will appear only in the dgit view.)
 .TP
@@ -742,7 +753,7 @@ it can mean that
 dgit fails to find necessary git commits.
 .TP
 .BR \-\-save-dgit-view= \fIbranch\fR|\fIref\fR
-Specifies that when a split view quilt mode is in operation,
+Specifies that when split view is in operation,
 and dgit calculates
 (or looks up in its cache)
 a dgit view corresponding to your HEAD,
@@ -753,10 +764,7 @@ so don't specify a branch you want to keep.
 
 This option is effective only with the following operations:
 quilt-fixup; push; all builds.
-And it is only effective with
-\-\-[quilt=]gbp,
-\-\-[quilt=]dpm,
-\-\-quilt=unpatched.
+And it is only effective when split view is actually in operation.
 
 If ref does not start with refs/
 it is taken to be a branch -
@@ -781,12 +789,18 @@ The meanings of
 understood in the context of Debian are discussed below:
 .TP
 .BR --deliberately-not-fast-forward
-Declare that you are deliberately rewinding history.  When pushing to
-Debian, use this when you are making a renewed upload of an entirely
+Declare that you are deliberately rewriting history.
+This could be because your branch is not fast forward from the
+dgit server history,
+or not fast forward from a locally-synthesised dsc import.
+
+When pushing to Debian,
+use this only when you are making a renewed upload of an entirely
 new source package whose previous version was not accepted for release
-from NEW because of problems with copyright or redistributibility.
+from NEW because of problems with copyright or redistributibility;
+or, exceptionally, for the very first upload with dgit.
 
-In split view quilt modes,
+When split view is in operation,
 this also prevents the construction by dgit of a pseudomerge
 to make the dgit view fast forwarding.
 Normally only one of
@@ -807,7 +821,7 @@ never-accepted) versions in the git history of your current push, were
 rejected by ftpmaster for copyright or redistributability reasons.
 .TP
 .BR --deliberately-fresh-repo
-Declare that you are deliberately rewinding history and want to
+Declare that you are deliberately rewriting history and want to
 throw away the existing repo.  Not relevant when pushing to Debian,
 as the Debian server will do this automatically when necessary.
 .TP
@@ -826,7 +840,7 @@ with as ancestor a patches-applied branch.
 .BR --quilt=auto
 When fixing up source format `3.0 (quilt)' metadata, prefer to
 generate a linear patch stack
-(as with --quilt=auto)
+(as with --quilt=linear)
 but if that doesn't seem possible,
 try to generate a single squashed patch for all the changes made in git
 (as with --quilt=smash).
@@ -856,13 +870,17 @@ Do not check whether source format `3.0 (quilt)' metadata needs
 fixing up.  If you use this option and the metadata did in fact need
 fixing up, dgit push will fail.
 .TP
-.BR -- [ quilt= ] gbp " | " -- [ quilt= ] dpm " | " --quilt=unapplied
+.BR -- [ quilt= ] gbp " | " -- [ quilt= ] dpm " | " --quilt=unapplied " | " -- [ quilt= ] baredebian [ +git | +tarball ]
 Tell dgit that you are using a nearly-dgit-compatible git branch,
 aka a
 .BR "maintainer view" ,
 and
 do not want your branch changed by dgit.
 
+These quilt modes are known as
+.BR "splitting quilt modes" .
+See --split-view, below.
+
 .B --gbp
 (short for
 .BR --quilt=gbp )
@@ -884,7 +902,32 @@ specifies that your HEAD is a patches-unapplied git branch (and
 that any changes to upstream .gitignore files are represented as
 patches in debian/patches).
 
-With --quilt=gbp|dpm|unapplied,
+.B --quilt=baredebian
+(or its alias
+.BR --quilt=baredebian+git )
+specifies that your HEAD contains only a debian/ directory,
+with any changes to upstream files represented as
+patches in debian/patches.
+The upstream source must be available in git,
+by default, in a suitably named git tag;
+see --upstream-commitish.
+In this mode, dgit cannot check that
+all edited upstream files are properly represented as patches:
+dgit relies on
+debian/patches being correct.
+
+.B --quilt=baredebian+tarball
+is like --quilt=baredebian,
+but is used when there is no appropriate upstream git history.
+To construct the dgit view,
+dgit will import your orig tarballs' contents into git.
+In this mode, dgit cannot check that
+the upstream parts of your upload correspond to what you intend:
+dgit relies on
+the right orig tarball(s) existing, and
+debian/patches being correct.
+
+With --quilt=gbp|dpm|unapplied|baredebian*,
 dgit push (or precursors like quilt-fixup and build) will automatically
 generate a conversion of your git branch into the right form.
 dgit push will push the
@@ -931,6 +974,42 @@ for fetching (and, for dgit push, altering) a variety of information both
 in the archive and in dgit-repos.
 How to set this up is not yet documented.
 .TP
+.BR \-\-split-view=auto | always | never
+Controls whether dgit operates a split view,
+separating your own branch (as Debian maintainer)
+from that shown to users of dgit clone and dgit fetch.
+
+When split view is in operation
+dgit will not make or merge any commits onto your own branch.
+Specifically, only the dgit view will contain
+dgit's pseudomerges,
+which bring into the git history previous uploads made with dgit push,
+and any commits in debian/patches required
+to make a correct `3.0 (quilt)' source package.
+
+.B auto
+is the default, and splits the view only when needed:
+i.e., when you are working with a `3.0 (quilt)' source package
+and a splitting quilt mode:
+\-\-[quilt=]gbp, dpm, unpatched or baredebian*.
+
+.B always
+splits the view regardless of the source format and the quilt mode.
+
+.B never
+will cause dgit to fail if split view is needed.
+
+When split view is in operation, the dgit view is visible
+in your local git clone,
+but only in refs specific to dgit:
+notably
+.BI remotes/dgit/dgit/ suite
+and
+.BR archive/ \fIdistro\fR / \fIversion\fR.
+
+Note that split view does not affect dgit fetch,
+and is not compatible with dgit pull.
+.TP
 .BI \-C changesfile
 Specifies the .changes file which is to be uploaded.  By default
 dgit push looks for a single .changes file in the parent directory whose
@@ -945,6 +1024,14 @@ otherwise, the changes file is expected in that directory (by
 default, in
 .BR .. ).
 .TP
+.BI \-\-upstream-commitish= upstream
+For use with --quilt=baredebian only.
+Specifies the commit containing the upstream source.
+This commit must be identical to your .orig tarball.
+The default is to look for one of the git tags
+.IB U " v" U " upstream/" U
+(in that order), where U is the upstream version.
+.TP
 .B \-\-rm-old-changes
 When doing a build, delete any changes files matching
 .IB package _ version _*.changes
@@ -983,19 +1070,14 @@ Do not delete the destination directory if clone fails.
 Generates a DEP-14 tag (eg
 .BR debian/ \fIversion\fR)
 as well as a dgit tag (eg
-.BR archive/debian/ \fIversion\fR)
-where possible.  This is the default.
+.BR archive/debian/ \fIversion\fR).
+This is the default.
 .TP
 .BI --no-dep14tag
-Do not generate a DEP-14 tag, except in split quilt view mode.
-(On servers where only the old tag format is supported,
-the dgit tag will have the DEP-14 name.
-This option does not prevent that.)
+Do not generate a DEP-14 tag, except when split view is in operation.
 .TP
-.BI --dep14tag-always
-Insist on generating a DEP-14 tag
-as well as a dgit tag.
-If the server does not support that, dgit push will fail.
+.BI --always-dep14tag
+Obsolete alias for --dep14tag, retained for compatibility.
 .TP
 .BI -D
 Prints debugging information to stderr.  Repeating the option produces
@@ -1214,6 +1296,13 @@ The result is a fresh import,
 discarding the git history
 that the person who pushed that .dsc was working with.
 .TP
+.B \-\-force-reusing-version
+Carry on even though this involves reusing a version number
+of a previous push or upload.
+It is normally best to give different versions different numbers.
+Some servers (including, usually, the Debian server)
+will reject attempts to reuse or replace already-pushed versions.
+.TP
 .B \-\-force-uploading-binaries
 Carry on and
 upload binaries
@@ -1250,6 +1339,12 @@ Force on or off the use of the absurd git-apply emulation
 when running gbp pq import
 when importing a package from a .dsc.
 See Debian bug #841867.
+.TP
+.BR \-\-for\-push
+Override the dgit-distro.distro.readonly configuration setting,
+to specify that we have read/write access
+and should use the corresponding git and achieve access approach
+even if the operation is a read-only one.
 .SH CONFIGURATION
 dgit can be configured via the git config system.
 You may set keys with git-config (either in system-global or per-tree
@@ -1275,6 +1370,10 @@ may be a glob pattern.
 .TP
 .BI dgit.default.distro " distro"
 The default distro for an unknown suite.
+
+This is only used if no
+.BI /usr/share/distro-info/ somedistro .csv
+mentions the specified suite.
 .TP
 .BI dgit.default.default-suite " suite"
 The default suite (eg for clone).
@@ -1298,6 +1397,8 @@ to provide a single git config compatible with different dgit versions.
 One of the values for the command line \-\-quilt= option; used if
 \-\-quilt is not specified.
 .TP
+.BR dgit-distro. \fIdistro\fR .split-view
+.TP
 .BR dgit-distro. \fIdistro\fR .rm-old-changes
 Boolean, used if neither \-\-rm-old-changes nor \-\-no-rm-old-changes
 is specified.  The default is not to remove.
@@ -1392,7 +1493,7 @@ or when pushing and
 .TP
 .BI dgit-distro. distro .git-create " " ssh-cmd | true
 .TP
-.BR dgit-distro. \fIdistro\fR .archive-query " " ftpmasterapi: " | " madison: "\fIdistro\fR | " dummycat: "\fI/path\fR  | " sshpsql: \fIuser\fR @ \fIhost\fR : \fIdbname\fR
+.BR dgit-distro. \fIdistro\fR .archive-query " " ftpmasterapi: " | " madison: "\fIdistro\fR | " dummycat: "\fI/path\fR  | " sshpsql: \fIuser\fR @ \fIhost\fR : \fIdbname\fR " " | " aptget:"
 .TP
 .BR dgit-distro. \fIdistro\fR .archive-query- ( url | tls-key | curl-ca-args )
 .TP
@@ -1402,7 +1503,7 @@ or when pushing and
 .TP
 .BI dgit-distro. distro .dgit-tag-format
 .TP
-.BR dgit-distro. \fIdistro\fR .dep14tag " " want | no | always
+.BR dgit-distro. \fIdistro\fR .dep14tag " " want | no [| always ]
 .TP
 .BI dgit-distro. distro .ssh
 .TP
@@ -1440,7 +1541,7 @@ also the \-\-ssh= and \-\-ssh: options.
 Default git user.email and user.name for new trees.  See
 .BR "dgit setup-new-tree" .
 .TP
-.BR gpg ", " dpkg- "..., " debsign ", " git ", " curl ", " dput ", " LWP::UserAgent
+.BR gpg ", " dpkg- "..., " debsign ", " git ", [" lib ] curl ", " dput
 and other subprograms and modules used by dgit are affected by various
 environment variables.  Consult the documentation for those programs
 for details.
diff --git a/dgit.7 b/dgit.7
index 8325c06b10aaeed869c49d41345d9e24b4ea4fd3..d1e5c7ea579309a047ac495e1cef8da3256fd80b 100644 (file)
--- a/dgit.7
+++ b/dgit.7
@@ -393,7 +393,7 @@ this problem can occur if you have provided
 Debian git tooling such as git-debrebase, git-dpm or git-buildpackage
 with upstream git commit(s) or tag(s)
 which are not 100% identical to your orig tarball(s).
-.SH SPLIT VIEW QUILT MODE
+.SH SPLIT VIEW AND SPLITTING QUILT MODES
 When working with git branches intended
 for use with the `3.0 (quilt)' source format
 dgit can automatically convert a suitable
@@ -401,21 +401,33 @@ maintainer-provided git branch
 (in one of a variety of formats)
 into a dgit branch.
 
-When a split view mode is engaged
+When a splitting quilt mode is selected
 dgit build commands and
 dgit push
 will, on each invocation,
 convert the user's HEAD into the dgit view,
 so that it can be built and/or uploaded.
 
-dgit push in split view mode will push the dgit view to the dgit
+Split view mode can also be enabled explicitly
+with
+the --split-view command line option
+and
+the .split-view access configuration key.
+
+When split view is in operation,
+regardless of the quilt mode,
+any dgit-generated pseudomerges
+and any quilt fixup commits
+will appear only in the dgit view.
+dgit push
+will push the dgit view to the dgit
 git server.
 The dgit view is always a descendant of the maintainer view.
 dgit push will also make a maintainer view tag
 according to DEP-14
 and push that to the dgit git server.
 
-Split view mode must be enabled explicitly
+Splitting quilt modes must be enabled explicitly
 (by the use of the applicable command line options,
 subcommands, or configuration).
 This is because it is not possible to reliably tell
diff --git a/git-debpush b/git-debpush
new file mode 100755 (executable)
index 0000000..2790560
--- /dev/null
@@ -0,0 +1,493 @@
+#!/bin/bash
+
+# git-debpush -- create & push a git tag with metadata for an ftp-master upload
+#
+# Copyright (C) 2019 Sean Whitton
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set -e$DGIT_TEST_DEBPUSH_DEBUG
+set -o pipefail
+
+# DESIGN PRINCIPLES
+#
+# - do not invoke dgit, do anything involving any tarballs, no network
+#   access except `git push` right at the end
+#
+# - do not look at the working tree, like `git push` `git tag`
+#
+# - we are always in split brain mode, because that fits this workflow,
+#   and avoids pushes failing just because dgit in the intermediary
+#   service wants to append commits
+#
+# - if there is no previous tag created by this script, require a quilt
+#   mode; if there is a previous tag, and no quilt mode provided, assume
+#   same quilt mode as in previous tag created by this script
+
+# **** Helper functions and variables ****
+
+us="$(basename $0)"
+git_playtree_setup=git-playtree-setup ###substituted###
+git_playtree_setup=${DEBPUSH_GIT_PLAYTREE_SETUP-$git_playtree_setup}
+
+cleanup() {
+    if [ -d "$temp" ]; then
+        rm -rf "$temp"
+    fi
+}
+
+fail () {
+    echo >&2 "$us: $*";
+    exit 127;
+}
+
+badusage () {
+    fail "bad usage: $*";
+}
+
+get_file_from_ref () {
+    local path=$1
+
+    # redirect to /dev/null instead of using `grep -Eq` to avoid grep
+    # SIGPIPEing git-ls-tree
+    if git ls-tree --name-only -r "$branch" \
+            | grep -E "^$path$" >/dev/null; then
+        git cat-file blob $branch:$path
+    fi
+}
+
+failed_check=false
+fail_check () {
+    local check=$1; shift
+    local check_is_forced=false
+
+    case ",$force," in
+        *",$check,"*) check_is_forced=true ;;
+    esac
+    if $force_all || $check_is_forced; then
+        echo >&2 "$us: warning: $* ('$check' check)"
+    else
+        echo >&2 "$us: $* ('$check' check)"
+        failed_check=true
+    fi
+}
+
+fail_check_upstream_nonidentical () {
+    fail_check upstream-nonidentical \
+ "the upstream source in tag $upstream_tag is not identical to the upstream source in $branch"
+}
+
+find_last_tag () {
+    local prefix=$1
+
+    set +o pipefail             # perl will SIGPIPE git-log(1) here
+    git log --pretty=format:'%D' --decorate=full "$branch" \
+        | perl -wne 'use Dpkg::Version;
+            @pieces = split /, /, $_;
+            @debian_tag_vs = sort { version_compare($b, $a) }
+                map { m|tag: refs/tags/'"$prefix"'(.+)| ? $1 : () } @pieces;
+            if (@debian_tag_vs) { print "'"$prefix"'$debian_tag_vs[0]\n"; exit }'
+    set -o pipefail
+}
+
+check_treesame () {
+    local first=$1
+    local second=$2
+    shift 2
+
+    set +e
+    git diff --quiet --exit-code "$first".."$second" -- . "$@"
+    git_diff_rc=$?
+    set -e
+
+    # show the user what the difference was
+    if [ $git_diff_rc = 1 ]; then
+        git diff --compact-summary "$first".."$second" -- . "$@"
+    fi
+
+    if [ $git_diff_rc -le 1 ]; then
+        return $git_diff_rc
+    else
+        fail "'git diff' exited with unexpected code $git_diff_rc"
+    fi
+}
+
+check_patches_apply () {
+    local should_match_branch="$1"
+
+    local playground="$(git rev-parse --git-dir)/gdp"
+    local playtree="$playground/apply-patches"
+    local git_apply_rc=0
+
+    rm -rf "$playground"
+    mkdir -p "$playtree"
+    local pwd="$(pwd)"
+    cd "$playtree"
+    "$git_playtree_setup" .
+
+    # checking out the upstream source and then d/patches on top
+    # ensures this check will work for a variety of quilt modes
+    git checkout -b upstream "$upstream_committish"
+    git checkout "$branch_commit" -- debian
+
+    if [ -s "debian/patches/series" ]; then
+        while read patch; do
+            shopt -s extglob; patch="${patch%%?( )#*}"; shopt -u extglob
+            if [ -z "$patch" ]; then continue; fi
+            set +e
+            git apply --index "debian/patches/$patch"
+            git_apply_rc=$?
+            set -e
+            if ! [ $git_apply_rc = 0 ]; then
+                fail_check patches-applicable \
+                           "'git apply' failed to apply patch $patch"
+                break
+            fi
+        done <debian/patches/series
+
+        if $should_match_branch && [ $git_apply_rc = 0 ]; then
+            git commit -q -a -m"commit result of applying all patches"
+            check_treesame HEAD "$branch_commit" ':!debian' \
+                || fail_check patches-applicable \
+                              "applying all patches does not yield $branch"
+        fi
+    fi
+
+    cd "$pwd"
+    rm -rf "$playground"
+}
+
+# **** Parse command line ****
+
+getopt=$(getopt -s bash -o 'nfu:' \
+              -l 'no-push,force::,branch:,remote:,distro:,upstream:,quilt:,gbp,dpm,\
+baredebian,baredebian+git,baredebian+tarball' \
+              -n "$us" -- "$@")
+eval "set - $getopt"
+set -e$DGIT_TEST_DEBPUSH_DEBUG
+
+git_tag_opts=()
+pushing=true
+force_all=false
+force=""
+distro=debian
+quilt_mode=""
+branch="HEAD"
+
+while true; do
+    case "$1" in
+        '-n'|'--no-push') pushing=false;           shift;   continue ;;
+       '-u')             git_tag_opts+=(-u "$2"); shift 2; continue ;;
+        '-f')             force_all=true;          shift;   continue ;;
+        '--gbp')          quilt_mode='gbp';        shift;   continue ;;
+        '--dpm')          quilt_mode='dpm';        shift;   continue ;;
+        '--branch')       branch=$2;               shift 2; continue ;;
+        '--remote')       remote=$2;               shift 2; continue ;;
+        '--distro')       distro=$2;               shift 2; continue ;;
+        '--quilt')        quilt_mode=$2;           shift 2; continue ;;
+        '--upstream')     upstream_tag=$2;         shift 2; continue ;;
+
+        '--baredebian'|'--baredebian+git')
+            quilt_mode=baredebian;         shift; continue ;;
+        '--baredebian+tarball')
+            fail "--baredebian+tarball quilt mode not supported"
+            ;;
+
+        # we require the long form of the option to skip individual
+        # checks, not permitting `-f check`, to avoid problems if we
+        # later want to introduce positional args
+        '--force')
+            case "$2" in
+                '')
+                    force_all=true                         ;;
+                *)
+                    force="$force,$2"                      ;;
+            esac
+            shift 2; continue ;;
+
+        '--') shift; break ;;
+       *) badusage "unknown option $1" ;;
+    esac
+done
+
+if [ $# != 0 ]; then
+    badusage 'no positional arguments allowed'
+fi
+
+case "$quilt_mode" in
+    linear|auto|smash|nofix|gbp|dpm|unapplied|baredebian|'') ;;
+    baredebian+git) quilt_mode="baredebian" ;;
+    baredebian+tarball) fail "--baredebian+tarball quilt mode not supported" ;;
+    *) badusage "invalid quilt mode: $quilt_mode" ;;
+esac
+
+# **** Early sanity check ****
+
+if [ "$branch" = "HEAD" ] \
+       && ! git symbolic-ref --quiet HEAD >/dev/null; then
+    fail_check detached \
+               "HEAD is detached; you probably don't want to debpush it"
+fi
+
+# **** Gather git information ****
+
+remoteconfigs=()
+to_push=()
+
+# Maybe $branch is a symbolic ref.  If so, resolve it
+branchref="$(git symbolic-ref -q $branch || test $? = 1)"
+if [ "x$branchref" != "x" ]; then
+   branch="$branchref"
+fi
+# If $branch is the name of a branch but it does not start with
+# 'refs/heads/', prepend 'refs/heads/', so that we can know later
+# whether we are tagging a branch or some other kind of committish
+case "$branch" in
+    refs/heads/*) ;;
+    *)
+        branchref="$(git for-each-ref --format='%(objectname)' \
+                         '[r]efs/heads/$branch')"
+        if [ "x$branchref" != "x" ]; then
+            branch="refs/heads/$branch"
+        fi
+        ;;
+esac
+
+# If our tag will point at a branch, push that branch, and add its
+# pushRemote and remote to the things we'll check if the user didn't
+# supply a remote
+case "$branch" in
+    refs/heads/*)
+        b=${branch#refs/heads/}
+        to_push+=("$b")
+        remoteconfigs+=( branch.$b.pushRemote branch.$b.remote )
+        ;;
+esac
+
+# resolve $branch to a commit
+branch_commit="$(git rev-parse --verify ${branch}^{commit})"
+
+# also check, if the branch does not have its own pushRemote or
+# remote, whether there's a default push remote configured
+remoteconfigs+=(remote.pushDefault)
+
+if $pushing && [ "x$remote" = "x" ]; then
+    for c in "${remoteconfigs[@]}"; do
+       remote=$(git config "$c" || test $? = 1)
+       if [ "x$remote" != "x" ]; then break; fi
+    done
+    if [ "x$remote" = "x" ]; then
+       fail "pushing, but could not determine remote, so need --remote="
+    fi
+fi
+
+# **** Gather source package information ****
+
+temp=$(mktemp -d)
+trap cleanup EXIT
+mkdir "$temp/debian"
+git cat-file blob "$branch":debian/changelog >"$temp/debian/changelog"
+version=$(cd $temp; dpkg-parsechangelog -SVersion)
+source=$(cd $temp; dpkg-parsechangelog -SSource)
+target=$(cd $temp; dpkg-parsechangelog -SDistribution)
+rm -rf "$temp"
+trap - EXIT
+
+format="$(get_file_from_ref debian/source/format)"
+case "$format" in
+    '3.0 (quilt)')  upstream=true ;;
+    '3.0 (native)') upstream=false ;;
+    '1.0'|'')
+       if get_file_from_ref debian/source/options | grep -q '^-sn *$'; then
+           upstream=false
+        elif get_file_from_ref debian/source/options | grep -q '^-sk *$'; then
+           upstream=true
+       else
+           fail 'please see "SOURCE FORMAT 1.0" in git-debpush(1)'
+       fi
+       ;;
+    *)
+       fail "unsupported debian/source/format $format"
+       ;;
+esac
+
+# **** Gather git history information ****
+
+last_debian_tag=$(find_last_tag "debian/")
+last_archive_tag=$(find_last_tag "archive/debian/")
+
+upstream_info=""
+if $upstream; then
+    if [ "x$upstream_tag" = x ]; then
+       upstream_tag=$(
+           set +e
+           git deborig --just-print --version="$version" \
+                          | head -n1
+           ps="${PIPESTATUS[*]}"
+           set -e
+           case "$ps" in
+               "0 0"|"141 0") ;; # ok or SIGPIPE
+               *" 0")
+                   echo >&2 \
+ "$us: git-deborig failed; maybe try $us --upstream=TAG"
+                   exit 0
+                   ;;
+               *) exit 127; # presumably head will have complained
+           esac
+       )
+       if [ "x$upstream_tag" = x ]; then exit 127; fi
+    fi
+    upstream_committish=$(git rev-parse "refs/tags/${upstream_tag}"^{})
+    upstream_info=" upstream-tag=$upstream_tag upstream=$upstream_committish"
+    to_push+=("$upstream_tag")
+fi
+
+# **** Useful sanity checks ****
+
+# ---- UNRELEASED suite
+
+if [ "$target" = "UNRELEASED" ]; then
+    fail_check unreleased "UNRELEASED changelog"
+fi
+
+# ---- Pushing dgit view to maintainer view
+
+if ! [ "x$last_debian_tag" = "x" ] && ! [ "x$last_archive_tag" = "x" ]; then
+    last_debian_tag_c=$(git rev-parse "$last_debian_tag"^{})
+    last_archive_tag_c=$(git rev-parse "$last_archive_tag"^{})
+    if ! [ "$last_debian_tag_c" = "$last_archive_tag_c" ] \
+            && git merge-base --is-ancestor \
+                   "$last_debian_tag" "$last_archive_tag"; then
+        fail_check dgit-view \
+"looks like you might be trying to push the dgit view to the maintainer branch?"
+    fi
+fi
+
+# ---- Targeting different suite
+
+if ! [ "x$last_debian_tag" = "x" ]; then
+    temp=$(mktemp -d)
+    trap cleanup EXIT
+    mkdir "$temp/debian"
+    git cat-file blob "$last_debian_tag":debian/changelog >"$temp/debian/changelog"
+    prev_target=$(cd $temp; dpkg-parsechangelog -SDistribution)
+    rm -rf "$temp"
+    trap - EXIT
+
+    if ! [ "$prev_target" = "$target" ] && ! [ "$target" = "UNRELEASED" ]; then
+        fail_check suite \
+"last upload targeted $prev_target, now targeting $target; might be a mistake?"
+    fi
+fi
+
+# ---- Upstream tag is not ancestor of $branch
+
+if ! [ "x$upstream_tag" = "x" ] \
+        && ! git merge-base --is-ancestor "$upstream_tag" "$branch" \
+        && ! [ "$quilt_mode" = "baredebian" ]; then
+    fail_check upstream-nonancestor \
+ "upstream tag $upstream_tag is not an ancestor of $branch; probably a mistake"
+fi
+
+# ---- Quilt mode-specific checks
+
+case "$quilt_mode" in
+    gbp)
+        check_treesame "$upstream_tag" "$branch" ':!debian' ':!**.gitignore' \
+            || fail_check_upstream_nonidentical
+        check_patches_apply false
+        ;;
+    unapplied)
+        check_treesame "$upstream_tag" "$branch" ':!debian' \
+            || fail_check_upstream_nonidentical
+        check_patches_apply false
+        ;;
+    baredebian)
+        check_patches_apply false
+        ;;
+    dpm|nofix)
+        check_patches_apply true
+        ;;
+esac
+
+# ---- git-debrebase branch format checks
+
+# only check branches, since you can't run `git debrebase conclude` on
+# non-branches
+case "$branch" in
+    refs/heads/*)
+        # see "STITCHING, PSEUDO-MERGES, FFQ RECORD" in git-debrebase(5)
+        ffq_prev_ref="refs/ffq-prev/${branch#refs/}"
+        if git show-ref --quiet --verify "$ffq_prev_ref"; then
+            fail_check unstitched \
+ "this looks like an unstitched git-debrebase branch, which should not be pushed"
+        fi
+esac
+
+# ---- Summary
+
+if $failed_check; then
+    # We don't mention the --force=check options here as those are
+    # mainly for use by scripts, or when you already know what check
+    # is going to fail before you invoke git-debpush.  Keep the
+    # script's terminal output as simple as possible.  No "see the
+    # manpage"!
+    fail "some check(s) failed; you can pass --force to ignore them"
+fi
+
+# **** Create the git tag ****
+
+# convert according to DEP-14 rules
+git_version=$(echo $version | tr ':~' '%_' | sed 's/\.(?=\.|$|lock$)/.#/g')
+
+debian_tag="$distro/$git_version"
+to_push+=("$debian_tag")
+
+# If the user didn't supply a quilt mode, look for it in a previous
+# tag made by this script
+if [ "x$quilt_mode" = "x" ] && [ "$format" = "3.0 (quilt)" ]; then
+    set +o pipefail             # perl will SIGPIPE git-cat-file(1) here
+    if [ "x$last_debian_tag" != "x" ]; then
+        quilt_mode=$(git cat-file -p $(git rev-parse "$last_debian_tag") \
+                         | perl -wne \
+                                'm/^\[dgit.*--quilt=([a-z+]+).*\]$/;
+                                 if ($1) { print "$1\n"; exit }')
+    fi
+    set -o pipefail
+fi
+
+quilt_mode_text=""
+if [ "$format" = "3.0 (quilt)" ]; then
+    if [ "x$quilt_mode" = "x" ]; then
+        echo >&2 "$us: could not determine the git branch layout"
+        echo >&2 "$us: please supply a --quilt= argument"
+        exit 1
+    else
+        quilt_mode_text=" --quilt=$quilt_mode"
+    fi
+fi
+
+tagmessage="$source release $version for $target
+
+[dgit distro=$distro split$quilt_mode_text]
+[dgit please-upload$upstream_info]
+"
+
+git tag "${git_tag_opts[@]}" -s -m "$tagmessage" "$debian_tag" "$branch"
+
+# **** Do a git push ****
+
+if $pushing; then
+    git push "$remote" "${to_push[@]}"
+fi
diff --git a/git-debpush.1.pod b/git-debpush.1.pod
new file mode 100644 (file)
index 0000000..3e065ab
--- /dev/null
@@ -0,0 +1,270 @@
+=head1 NAME
+
+git-debpush - create & push a git tag with metadata for an ftp-master upload
+
+=head1 SYNOPSIS
+
+B<git debpush> [I<option>...]
+
+=head1 DESCRIPTION
+
+B<git-debpush> is a wrapper around git-tag(1) and git-push(1).  It
+helps you create and push a specially formatted signed tag which
+indicates that the tagged commit should be pushed (or "uploaded") to a
+Debian-style archive.
+
+Typically, your git server will be configured to notify an
+intermediary service of the new tag that you pushed.  That service
+will then fetch your tag, check your PGP signature, do any conversion
+that's needed (such as producing and signing a B<.dsc> and
+B<.changes>), and upload the result to the Debian-style archive.
+
+B<git-debpush> is only for source-only uploads.
+
+=head1 TYPICAL USAGE
+
+B<git-debpush> is designed such that for regular uploads of your
+package, you should be able to just invoke it without passing any
+command line arguments.  After you've built and tested some .debs, run
+dch(1) to finalise your changelog and committed the result, just type
+"git debpush", and the intermediary service and your distribution's
+autobuilder network will take care of the rest.
+
+The most common exception to this is the first time you use
+B<git-debpush> for a non-native package.  You will need to pass a
+quilt mode option to inform the intermediary service which git branch
+format you are using, for example
+
+=over 4
+
+    % git debpush --gbp
+
+=back
+
+if you are using the git branch format typically used with gbp(1).
+See "QUILT MODE OPTIONS", below, for the available quilt mode options.
+
+Aside from a few sanity checks to help avoid broken uploads,
+B<git-debpush> does not do anything with the information provided by
+the quilt mode option.  It simply embeds the corresponding quilt mode
+in its generated tag, for use by the intermediary service.
+
+Future invocations of B<git-debpush> will try to read the quilt mode
+out of the tag generated by B<git-debpush> for your previous upload.
+You can override that on the command line by passing a quilt mode
+option, which always takes precedence.
+
+=head1 SETUP FOR SOURCE FORMAT 1.0
+
+B<git-debpush> needs to tell the intermediary git service whether this
+is a native or non-native package.  Given historical Debian practices,
+it is not sufficient for either B<git-debpush> or the intermediary
+service to rely on the version number in debian/changelog.
+
+If you are using one of the 3.0 source package formats, B<git-debpush>
+will just look in debian/source/format to determine whether the
+package is native or non-native, and you can ignore this section of
+the manpage.
+
+If you are using the 1.0 source package format -- either
+debian/source/format does not exist, or contains the string "1.0" --
+then B<git-debpush> must be told whether the package is native or
+non-native.  We do this using debian/source/options.  If your package
+is non-native, execute
+
+=over 4
+
+    % echo "-sn" >>debian/source/options
+
+=back
+
+If your package is native, execute
+
+=over 4
+
+    % echo "-sk" >>debian/source/options
+
+=back
+
+(With source format 1.0, dpkg-source(1) decides whether the package is
+native or non-native based on the presence of absence of an orig.tar
+in B<..>, but B<git-debpush> is a pure git tool that never looks at
+tarballs.)
+
+=head1 QUILT MODE OPTIONS
+
+=over 4
+
+=item B<--quilt=gbp>|B<--gbp>
+
+You are using the 'unapplied' branch format, typically used with
+gbp(1).
+
+=item B<--quilt=dpm>|B<--dpm>
+
+You are using git-dpm(1)'s branch format.
+
+=item B<--quilt=baredebian[+git]>|B<--baredebian[+git]>
+
+You are using the 'bare debian' branch format, with the upstream
+source in the form of an upstream tag.
+
+B<--quilt=baredebian+git> is an alias for B<--quilt=baredebian>.
+
+=item B<--quilt=linear>
+
+You are using the 'manually maintained applied' branch format or
+similar, and each commit touching the upstream source not already
+represented in debian/patches should be added as a new patch.
+
+=item B<--quilt=smash>
+
+You are using the 'manually maintained applied' branch format or
+similar, and you want all changes to the upstream source to be
+squashed into a single patch in debian/patches.
+
+=item B<--quilt=auto>
+
+Tell the intermediary service to try B<--quilt=linear>, and if that
+cannot succeed, fall back to B<--quilt=smash>.
+
+=item B<--quilt=nofix>
+
+You are using the 'manually maintained applied' branch format or
+similar, and you don't want debian/patches to be touched by the
+intermediary service.
+
+If all commits touching the upstream source are not already
+represented in debian/patches, the intermediary service will fail to
+upload your package.
+
+=back
+
+=head1 OTHER OPTIONS
+
+=over 4
+
+=item B<--no-push>|B<-n>
+
+Just tag, don't push.
+
+=item B<-u> I<keyid>
+
+Passed on to git-tag(1).
+
+=item B<--branch=>I<BRANCH>
+
+Where to place the tag, i.e., what you want to release.  If
+unspecified, we put the tag on whatever HEAD points to.
+
+Note that this need not actually be a branch, but any committish (see
+gitglossary(7)).  The option name is chosen to fit what is by far the
+most common case.
+
+=item B<--upstream=>I<TAG>
+
+When pushing a non-native package,
+B<git-debpush> needs a tag for the upstream part of your package.
+
+By default B<git-debpush> asks git-deborig(1),
+which searches for a suitable tag
+based on the upstream version in debian/changelog.
+
+=item B<--remote=>I<REMOTE>
+
+Where to push tags and branches.  If unspecified, use the remote which
+git would use if you typed "git push BRANCH".
+
+=item B<--distro=>I<DISTRO>
+
+What distribution name to embed in the signed tag.  Defaults to
+"debian".
+
+=item B<--force>|B<-f>
+
+Ignore the results of all checks designed to prevent broken uploads.
+
+=item B<--force>=I<check>[,I<check>] ...
+
+Override individual checks designed to prevent broken uploads.  May be
+specified more than once.
+
+Using B<--force> or B<--force=>I<check> might cause the upload to fail
+at some later point in the process.
+
+Valid values for I<check> are:
+
+=over 4
+
+=item B<suite>
+
+Permit uploading to a different suite than the target of the most
+recent upload made with B<git-debpush> (e.g. when uploading to
+Debian unstable after uploading to Debian experimental).
+
+=item B<upstream-nonancestor>
+
+Ignore the fact that the upstream tag is not an ancestor of the branch
+to be tagged (skipping this check is implied by B<--quilt=baredebian>).
+
+=item B<upstream-nonidentical>
+
+Ignore any differences between the upstream source in the upstream tag
+and the upstream source in the branch to be tagged (this check is only
+run when using B<--quilt=gbp> or B<--quilt=unapplied>).
+
+=item B<patches-applicable>
+
+Ignore any failures of the following two checks:
+
+=over 4
+
+=item
+
+With B<--quilt=gbp>, B<--quilt=unapplied>, B<--quilt=baredebian>,
+B<--quilt=dpm>, and B<--quilt=nofix>, the quilt patches should apply
+cleanly to the upstream source with git-apply(1).
+
+=item
+
+With B<--quilt=dpm> and B<--quilt=nofix>, applying the quilt patches
+to the upstream source should produce exactly the source tree to be
+tagged.
+
+=back
+
+=item B<unreleased>
+
+Permit upload to a suite called UNRELEASED.
+
+=item B<dgit-view>
+
+Ignore apparently pushing the dgit view of a package (as produced by
+B<dgit clone>) to the maintainer branch, where the dgit view and the
+maintainer view of the package are not identical.
+
+=item B<unstitched>
+
+Ignore the fact that the branch to be pushed seems to be a
+git-debrebase(1) branch in an unstitched state (see git-debrebase(5)).
+
+=back
+
+=item B<detached>
+
+Ignore the fact that HEAD is to be tagged, but HEAD is detached (this
+check is only run when B<--branch=HEAD> or no B<--branch> option is
+specified).
+
+=back
+
+=head1 SEE ALSO
+
+Git branch formats in use by Debian maintainers:
+<https://wiki.debian.org/GitPackagingSurvey>
+
+=head1 AUTHOR
+
+B<git-debpush> and this manpage were written by Sean Whitton
+<spwhitton@spwhitton.name> with much input from Ian Jackson
+<ijackson@chiark.greenend.org.uk>.
index efb0cea4997e102d225aa896fb0ca88b1c0dbcf4..781435861ecb05b1c816a440364425746abae6f7 100755 (executable)
@@ -3,7 +3,8 @@
 # Script helping make fast-forwarding histories while still rebasing
 # upstream deltas when working on Debian packaging
 #
-# Copyright (C)2017,2018 Ian Jackson
+# Copyright (C)2017-2019 Ian Jackson
+# Copyright (C)2019      Niko Tyni
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -120,7 +121,6 @@ our $playprefix = 'debrebase';
 our $rd;
 our $workarea;
 
-our @git = qw(git);
 our @dgit = qw(dgit);
 
 sub in_workarea ($) {
@@ -144,10 +144,10 @@ sub run_ref_updates_now ($$) {
 
     my @upd_cmd = (git_update_ref_cmd "debrebase: $mrest", qw(--stdin));
     debugcmd '>|', @upd_cmd;
-    open U, "|-", @upd_cmd or confess $!;
+    open U, "|-", @upd_cmd or confess "$!";
     foreach (@$updates) {
        printdebug ">= ", $_, "\n";
-       print U $_, "\n" or confess $!;
+       print U $_, "\n" or confess "$!";
     }
     printdebug ">\$\n";
     close U or failedcmd @upd_cmd;
@@ -355,44 +355,6 @@ sub calculate_committer_authline () {
     return $&;
 }
 
-sub rm_subdir_cached ($) {
-    my ($subdir) = @_;
-    runcmd @git, qw(rm --quiet -rf --cached --ignore-unmatch), $subdir;
-}
-
-sub read_tree_subdir ($$) {
-    my ($subdir, $new_tree_object) = @_;
-    rm_subdir_cached $subdir;
-    runcmd @git, qw(read-tree), "--prefix=$subdir/", $new_tree_object;
-}
-
-sub read_tree_debian ($) {
-    my ($treeish) = @_;
-    read_tree_subdir 'debian', "$treeish:debian";
-    rm_subdir_cached 'debian/patches';
-}
-
-sub read_tree_upstream ($;$$) {
-    my ($treeish, $keep_patches, $tree_with_debian) = @_;
-    # if $tree_with_debian is supplied, will use that for debian/
-    # otherwise will save and restore it.
-    my $debian =
-       $tree_with_debian ? "$tree_with_debian:debian"
-       : cmdoutput @git, qw(write-tree --prefix=debian/);
-    runcmd @git, qw(read-tree), $treeish;
-    read_tree_subdir 'debian', $debian;
-    rm_subdir_cached 'debian/patches' unless $keep_patches;
-};
-
-sub make_commit ($$) {
-    my ($parents, $message_paras) = @_;
-    my $tree = cmdoutput @git, qw(write-tree);
-    my @cmd = (@git, qw(commit-tree), $tree);
-    push @cmd, qw(-p), $_ foreach @$parents;
-    push @cmd, qw(-m), $_ foreach @$message_paras;
-    return cmdoutput @cmd;
-}
-
 our @snag_force_opts;
 sub snag ($$;@) {
     my ($tag,$msg) = @_; # ignores extra args, for benefit of keycommits
@@ -611,7 +573,7 @@ sub merge_series ($$$;@) {
            if ($any) {
                open S, $seriesfile or confess "$seriesfile $!";
                while (my $patch = <S>) {
-                   chomp $patch or confess $!;
+                   chomp $patch or confess "$!";
                    $prereq{$patch} //= {};
                    foreach my $earlier (@earlier) {
                        $prereq{$patch}{$earlier}{$s}++ and confess;
@@ -708,7 +670,7 @@ sub merge_series ($$$;@) {
            };
        };
 
-       open NS, '>', $seriesfile or confess $!;
+       open NS, '>', $seriesfile or confess "$!";
 
        while (keys %prereq) {
            my $best;
@@ -723,7 +685,7 @@ sub merge_series ($$$;@) {
                $best = $try;
            }
            printdebug "merge_series series next $best\n";
-           print NS "$best\n" or confess $!;
+           print NS "$best\n" or confess "$!";
            delete $prereq{$best};
            foreach my $gp (values %prereq) {
                delete $gp->{$best};
@@ -765,10 +727,10 @@ sub merge_series_patchqueue_convert ($$$) {
            my $tree = cmdoutput @git, qw(write-tree);
            $commit =~ s{^parent (\S+)$}{parent $build}m or confess;
            $commit =~ s{^tree (\S+)$}{tree $tree}m      or confess;
-           open C, ">", "../mcommit" or confess $!;
-           print C $commit or confess $!;
-           close C or confess $!;
-           $build = cmdoutput @git, qw(hash-object -w -t commit ../mcommit);
+           open C, ">", "../mcommit" or confess "$!";
+           print C $commit or confess "$!";
+           close C or confess "$!";
+           $build = hash_commit '../mcommit';
        }
        $result = $build;
        mwrecknote($wrecknotes, 'merged-result', $result);
@@ -1586,7 +1548,7 @@ sub walk ($;$$$) {
     confess __ "internal error" unless $build eq (pop @processed)->{CommitId};
 
     in_workarea sub {
-       mkdir $rd or $!==EEXIST or confess $!;
+       mkdir $rd or $!==EEXIST or confess "$!";
        my $current_method;
        my $want_debian = $build;
        my $want_upstream = $build;
@@ -1696,9 +1658,9 @@ sub walk ($;$$$) {
                        or confess "$ch ?";
                }
                my $cf = "$rd/m$rewriting";
-               open CD, ">", $cf or confess $!;
-               print CD $ch, "\n", $cl->{Msg} or confess $!;
-               close CD or confess $!;
+               open CD, ">", $cf or confess "$!";
+               print CD $ch, "\n", $cl->{Msg} or confess "$!";
+               close CD or confess "$!";
                my @cmd = (@git, qw(hash-object));
                push @cmd, qw(-w) if $rewriting;
                push @cmd, qw(-t commit), $cf;
@@ -1811,7 +1773,7 @@ sub cmd_analyse () {
        $old = git_rev_parse 'HEAD';
     }
     my ($dummy,$breakwater) = walk $old, 1,*STDOUT;
-    STDOUT->error and confess $!;
+    STDOUT->error and confess "$!";
 }
 
 sub ffq_check ($;$$) {
@@ -1828,7 +1790,7 @@ sub ffq_check ($;$$) {
     # normally $currentval should be HEAD
     my ($currentval, $ff, $notff) =@_;
 
-    $ff //= sub { print $_[0] or confess $!; };
+    $ff //= sub { print $_[0] or confess "$!"; };
     $notff //= \&snag;
 
     my ($status, $message, $current, $ffq_prev, $gdrlast)
@@ -1994,39 +1956,6 @@ sub do_stitch ($;$) {
     stitch($dangling_head, $ffq_prev, $gdrlast, $ffq_prev_commitish, $prose);
 }
 
-sub upstream_commitish_search ($$) {
-    my ($upstream_version, $tried) = @_;
-    # todo: at some point maybe use git-deborig to do this
-    foreach my $tagpfx ('', 'v', 'upstream/') {
-       my $tag = $tagpfx.(dep14_version_mangle $upstream_version);
-       my $new_upstream = git_get_ref "refs/tags/$tag";
-       push @$tried, $tag;
-       return $new_upstream if length $new_upstream;
-    }
-}
-
-sub resolve_upstream_version ($$) {
-    my ($new_upstream, $upstream_version) = @_;
-
-    my $used = $new_upstream;
-    if (!defined $new_upstream) {
-       my @tried;
-       $new_upstream = upstream_commitish_search $upstream_version, \@tried;
-       if (!length $new_upstream) {
-           fail f_
-               "Could not determine appropriate upstream commitish.\n".
-               " (Tried these tags: %s)\n".
-               " Check version, and specify upstream commitish explicitly.",
-               "@tried";
-       }
-       $used = $tried[-1];
-    }
-    $new_upstream = git_rev_parse $new_upstream;
-
-    return ($new_upstream, $used);
-    # used is a human-readable idea of what we found
-}
-
 sub cmd_new_upstream () {
     # automatically and unconditionally launders before rebasing
     # if rebase --abort is used, laundering has still been done
@@ -2044,7 +1973,7 @@ sub cmd_new_upstream () {
        $new_version = (new Dpkg::Version "$spec_version-1", check => 1);
     }
 
-    my $new_upstream = shift @ARGV;
+    my $new_upstream = (@ARGV && $ARGV[0] !~ m{^-}) ? shift @ARGV : undef;
     my $new_upstream_version = upstreamversion  $new_version;
     my $new_upstream_used;
     ($new_upstream, $new_upstream_used) =
@@ -2261,7 +2190,7 @@ sub cmd_record_ffq_prev () {
     badusage "no arguments allowed" if @ARGV;
     my ($status, $msg) = record_ffq_prev_deferred();
     if ($status eq 'exists' && $opt_noop_ok) {
-       print __ "Previous head already recorded\n" or confess $!;
+       print __ "Previous head already recorded\n" or confess "$!";
     } elsif ($status eq 'deferred') {
        run_deferred_updates 'record-ffq-prev';
     } else {
@@ -2272,13 +2201,13 @@ sub cmd_record_ffq_prev () {
 sub cmd_anchor () {
     badusage __ "no arguments allowed" if @ARGV;
     my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'), 0,0;
-    print "$anchor\n" or confess $!;
+    print "$anchor\n" or confess "$!";
 }
 
 sub cmd_breakwater () {
     badusage __ "no arguments allowed" if @ARGV;
     my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'), 0,0;
-    print "$bw\n" or confess $!;
+    print "$bw\n" or confess "$!";
 }
 
 sub cmd_status () {
@@ -2311,7 +2240,7 @@ sub cmd_status () {
 
     my $prcommitinfo = sub {
        my ($cid) = @_;
-       flush STDOUT or confess $!;
+       flush STDOUT or confess "$!";
        runcmd @git, qw(--no-pager log -n1),
            '--pretty=format:    %h %s%n',
            $cid;
@@ -2674,7 +2603,7 @@ END
     };
 
     complete_convert_from $old_head, $work, $gdrlastinfo, 'convert-from-gbp';
-    print f_ <<END, $us or confess $!;
+    print f_ <<END, $us or confess "$!";
 %s: converted from patched-unapplied (gbp) branch format, OK
 END
 }
@@ -2703,7 +2632,7 @@ sub cmd_convert_to_gbp () {
     }
     snags_maybe_bail();
     update_head_checkout $head, $out, "convert to gbp (v0)";
-    print f_ <<END, $us,$us,$us or confess $!;
+    print f_ <<END, $us,$us,$us or confess "$!";
 %s: converted to git-buildpackage branch format
 %s: WARNING: do not now run "git-debrebase" any more
 %s: WARNING: doing so would drop all upstream patches!
@@ -2733,7 +2662,7 @@ sub cmd_convert_from_dgit_view () {
        my $spec = shift @ARGV;
        my $commit = git_rev_parse "$spec^{commit}";
        push @upstreams, { Commit => $commit,
-                          Source => (f_ "%s, from command line", $ARGV[0]),
+                          Source => (f_ "%s, from command line", $spec),
                           Only => 1,
                         };
     }
@@ -2768,10 +2697,11 @@ END
     if (!@upstreams) {
        if ($do_tags) {
            my @tried;
-           my $ups_tag = upstream_commitish_search $version, \@tried;
-           if ($ups_tag) {
-               my $this = f_ "git tag %s", $tried[-1];
-               push @upstreams, { Commit => $ups_tag,
+           my ($ups_tag, $ups_rev) =
+               upstream_commitish_search $version, \@tried;
+           if ($ups_rev) {
+               my $this = f_ "git tag %s", $ups_tag;
+               push @upstreams, { Commit => $ups_rev,
                                   Source => $this,
                                 };
            } else {
@@ -3020,7 +2950,7 @@ getoptions_main
           'experimental-merge-resolution!', \$opt_merges,
           '-i:s' => sub {
               my ($opt,$val) = @_;
-              badusage f_ "%s: no cuddling to -i for git-rebase", $us
+              badusage f_ "%s: with git-debrebase, get-rebase -i option may only be followed by more options (as separate arguments)", $us
                   if length $val;
               confess if $opt_defaultcmd_interactive; # should not happen
               $opt_defaultcmd_interactive = [ qw(-i) ];
@@ -3030,7 +2960,7 @@ getoptions_main
               push @$opt_defaultcmd_interactive, @ARGV;
               @ARGV=();
           },
-          'help' => sub { print __ $usage_message or confess $!; finish 0; },
+          'help' => sub { print __ $usage_message or confess "$!"; finish 0; },
           );
 
 initdebug('git-debrebase ');
index cbdf292b2812e616248c06cfb8908374680d8c06..639b07d2e6af4feb4b17a0b9720d6e08a222a774 100644 (file)
@@ -1,21 +1,35 @@
 =head1 NAME
 
-git-debrebase - delta queue rebase tool for Debian packaging
+git-debrebase - tool to maintain series of Debian changes to upstream source
 
 =head1 SYNOPSYS
 
  git-debrebase [<options...>] [-- <git-rebase options...>]
  git-debrebase [<options...>] <operation> [<operation options...>
 
-=head1 INTRODUCTION
+=head1 QUICK REFERENCE
 
-git-debrebase is a tool for representing in git,
-and manpulating,
-Debian packages based on upstream source code.
+These are most of the commands you will regularly need:
+
+ git debrebase -i                           # edit the patch queue
+ git debrebase conclude && git push         # push to eg salsa
+ git debrebase conclude && dgit push-source # source-only upload
+ git debrebase new-upstream 1.2.3-1 [-i]    # uses tag, eg "v1.2.3"
+ dpkg-buildpackage -uc -b                   # get test debs, at any time
+
+To add patches, or edit the packaging, just make git commits.
+Ignore anything that may appear in debian/patches.
+Avoid using "git pull" and "git merge" without "--ff-only".
+
+git-debrebase has a special branch format, so see
+"CONVERTING AN EXISTING PACKAGE" in L<dgit-maint-debrebase(7)>.
+
+=head1 GUIDE TO DOCUMENTATION
 
 This is the command line reference.
-Please read the tutorial
-L<dgit-maint-debrebase(7)>.
+There is also a detailed workflow tutorial at
+L<dgit-maint-debrebase(7)>
+(on which the above "QUICK REFERENCE" is based).
 For background, theory of operation,
 and definitions see L<git-debrebase(5)>.
 
@@ -115,11 +129,12 @@ You should consider using B<prepush> or B<conclude> instead.
 =item git-debrebase scrap
 
 Throws away all the work since the branch was last stitched.
-This is done by rewinding you to ffq-prev.
+This is done by resetting you to ffq-prev
+and discarding all working tree changes.
 
 If you are in the middle of a git-rebase, will abort that too.
 
-=item git-debrebase new-upstream <new-version> [<upstream-details>...]
+=item git-debrebase new-upstream <new-version> [<upstream-details>...] [--|-i <git-rebase options...>]
 
 Rebases the delta queue
 onto a new upstream version.  In detail:
@@ -531,7 +546,7 @@ This is provided mostly for the benefit of the test suite.
 
 Requests (more) debugging.  May be repeated.
 
-=item --experimntal-merge-resolution
+=item --experimental-merge-resolution
 
 Enable experimental code for handling general merges
 (see L<git-debrebase(5)/General merges>).
@@ -619,6 +634,6 @@ The result is the laundered branch.
 =head1 SEE ALSO
 
 git-debrebase(1),
-dgit-maint-rebase(7),
+dgit-maint-debrebase(7),
 dgit(1),
 gitglossary(7)
index d23c6b21b6787b87fcc2fe9cba503f19b47f3bda..d55033b300814470939ce6135a1209f1991c8cb5 100644 (file)
@@ -391,7 +391,7 @@ general merges on any of the relevant branches.
 For this reason the tools will try to help the user
 avoid divergence of the interchange branch.
 
-See dgit-maint-rebase(7)
+See dgit-maint-debrebase(7)
 for a discussion of what kinds of behaviours
 should be be avoided
 because
@@ -562,7 +562,7 @@ paying no attention to PROSE.
 The full set of annotations is:
   [git-debrebase split: mixed commit, debian part]
   [git-debrebase split: mixed commit, upstream-part]
-  [git-debrebase onvert dgit import: debian changes]
+  [git-debrebase convert dgit import: debian changes]
   [git-debrebase anchor: convert dgit import, upstream changes]
 
   [git-debrebase upstream-combine . PIECE[ PIECE...]: new upstream]
diff --git a/git-playtree-setup b/git-playtree-setup
new file mode 100755 (executable)
index 0000000..184de4d
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# usage:
+#   rm -rf .git/some/play/thing
+#   git-playtree-setup .git/some/play/thing
+# or:
+#   mkdir .git/some/play/thing
+#   cd .git/some/play/thing
+#   git-playtree-setup .
+
+set -e${GIT_PLAYTREE_SETUP_DEBUG}
+
+target=$1; shift
+
+case "$#.$target" in
+0.[^-]*) ;;
+*) echo >&2 'bad usage' ; exit 8 ;;
+esac
+
+[ "x$target" = x. ] || mkdir $target
+cd $target
+
+gcd=$(cd .. && git rev-parse --git-common-dir)
+case "$gcd" in
+/*) ;;
+*) gcd="../$gcd" ;;
+esac
+
+git init -q
+git config gc.auto 0
+
+unset_all () { git config --local --unset-all $key || [ $? = 5 ]; }
+
+for key in \
+                         user.email user.name user.useConfigOnly \
+                         core.sharedRepository                   \
+                         core.compression core.looseCompression  \
+                         core.bigFileThreshold core.fsyncObjectFiles \
+; do
+       unset_all
+       (
+               git --git-dir="$gcd" config -z --get-all $key || [ $? = 1 ]
+       ) | xargs -n1 -0r -- \
+               git config --local --add $key
+done
+
+rm -rf .git/objects
+ln -s "$gcd/objects" .git/objects
diff --git a/infra/dgit-mirror-ssh-wrap b/infra/dgit-mirror-ssh-wrap
new file mode 100755 (executable)
index 0000000..afbbbbf
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/perl -w
+
+# Intended to be used as a restricted command.
+# Usage:
+#    command="/path/to/dgit-mirror-ssh-wrap /srv/repos/ .git --"
+# or similar.  The two substantive arguments are literals.
+# The example permits writes to directories
+#    /srv/repos/$PACKAGE.git
+# where $PACKAGE has the syntax of a Debian package name.
+
+use strict;
+
+die 'bad usage' unless @ARGV==3 && $ARGV[2] eq '--';
+our ($prefix, $suffix) = @ARGV;
+
+$prefix =~ s/\W/\\$&/g;
+$suffix =~ s/\W/\\$&/g;
+
+my $package = qr{[0-9a-z][-+.0-9a-z]*};
+my $d = qr{$prefix$package$suffix};
+
+my $command = $ENV{SSH_ORIGINAL_COMMAND}
+    // die "missing SSH_ORIGINAL_COMMAND";
+
+#print STDERR ">$d<\n";
+
+$_ = $command;
+
+m{^rsync --server -lHtre\.iLsfxC --timeout=\d+ --delete --safe-links \. $d$}
+||
+m{^rsync --server -lHtre\.iLsfxCIv --timeout=\d+ --delete --safe-links \. $d$}
+||
+m{^rsync --server -lHtre\.iLsfxCIvu --timeout=\d+ --delete --safe-links \. $d$}
+
+# To add a new command pattern, add || m{^ ... $} above.
+# The pattern should contain $d where the per-package destination
+# directory would go.
+
+or die "dgit-mirror-ssh-wrap: unexpected command (rsync upgraded?):
+ $command\n";
+
+exec $& or die $!;
index f7e5e53b473ddef2b9932ac4e7c213200649cd92..ad21564383ff979aa2f608e7626d04131e1128e8 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 # dgit repos policy hook script for Debian
 #
-# Copyright (C) 2015-2016  Ian Jackson
+# Copyright (C) 2015-2019  Ian Jackson
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -546,6 +546,7 @@ for (;;) {
        die unless defined $rcode;
 
        $poldbh->commit;
+       printdebug "poldbh commit\n";
     };
     last unless length $@;
     die $@ unless ref $@ eq $db_busy_exception;
index a8b9400b5a4729a2c92e0c86d318385dd1512c6c..bbf1aa215a34e054b5b4532254865365c7f6e3b4 100755 (executable)
@@ -3,7 +3,7 @@
 #
 # git protocol proxy to check dgit pushes etc.
 #
-# Copyright (C) 2014-2016  Ian Jackson
+# Copyright (C) 2014-2017,2019  Ian Jackson
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -21,6 +21,8 @@
 # usages:
 #   dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [<settings>] --ssh
 #   dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [<settings>] --cron
+#   dgit-repos-server DISTRO DISTRO-DIR AUTH-SPEC [<settings>] \
+#      --tag2upload URL TAGNAME
 # settings
 #   --repos=GIT-REPOS-DIR      default DISTRO-DIR/repos/
 #   --suites=SUITES-FILE       default DISTRO-DIR/suites
@@ -50,6 +52,8 @@
 # (With --cron AUTH-SPEC is not used and may be the empty string.)
 
 use strict;
+use Carp;
+use IO::Handle;
 
 use Debian::Dgit::Infra; # must precede Debian::Dgit; - can change @INC!
 use Debian::Dgit qw(:DEFAULT :policyflags);
@@ -539,15 +543,12 @@ sub readupdates () {
     STDIN->error and die $!;
 
     reject "push is missing tag ref update" unless %tags;
-    my @newtags = grep { m#^archive/# } keys %tags;
-    my @omtags = grep { !m#^archive/# } keys %tags;
-    reject "pushing too many similar tags" if @newtags>1 || @omtags>1;
-    if (@newtags) {
-       ($tagname) = @newtags;
-       ($maint_tagname) = @omtags;
-    } else {
-       ($tagname) = @omtags or die;
-    }
+    my @dtags = grep { m#^archive/# } keys %tags;
+    reject "need exactly one archive/* tag" if @dtags!=1;
+    my @mtags = grep { !m#^archive/# } keys %tags;
+    reject "pushing too many non-dgit tags" if @mtags>1;
+    ($tagname) = @dtags;
+    ($maint_tagname) = @mtags;
     $tagval = $tags{$tagname};
     $maint_tagval = $tags{$maint_tagname // ''};
 
@@ -555,8 +556,9 @@ sub readupdates () {
     printdebug " updates ok.\n";
 }
 
-sub parsetag () {
-    printdebug " parsetag...\n";
+sub readtag () {
+    printdebug " readtag...\n";
+
     open PT, ">dgit-tmp/plaintext" or die $!;
     open DS, ">dgit-tmp/plaintext.asc" or die $!;
     open T, "-|", qw(git cat-file tag), $tagval or die $!;
@@ -572,12 +574,11 @@ sub parsetag () {
        }
     }
     $!=0; $_=<T>; defined or die $!;
-    m/^($package_re) release (\S+) for \S+ \((\S+)\) \[dgit\]$/ or
-       reject "tag message not in expected format";
+}
 
-    die unless $1 eq $package;
-    $version = $2;
-    die "$3 != $suite " unless $3 eq $suite;
+sub parsetag_general ($$) {
+    my ($dgititemfn, $distrofn) = @_;
+    printdebug " parsetag...\n";
 
     my $copyl = $_;
     for (;;) {
@@ -587,14 +588,11 @@ sub parsetag () {
        if (m/^\[dgit ([^"].*)\]$/) { # [dgit "something"] is for future
            $_ = $1." ";
            while (length) {
-               if (s/^distro\=(\S+) //) {
-                   die "$1 != $distro" unless $1 eq $distro;
-               } elsif (s/^(--deliberately-$deliberately_re) //) {
-                   push @deliberatelies, $1;
-               } elsif (s/^previously:(\S+)=(\w+) //) {
-                   die "previously $1 twice" if defined $previously{$1};
-                   $previously{$1} = $2;
-               } elsif (s/^[-+.=0-9a-z]\S* //) {
+               if ($dgititemfn->()) {
+               } elsif (s/^distro\=(\S+) //) {
+                   $distrofn->($1);
+               } elsif (s/^([-+.=0-9a-z]\S*) //) {
+                   printdebug " parsetag ignoring unrecognised \`$1'\n";
                } else {
                    die "unknown dgit info in tag ($_)";
                }
@@ -603,6 +601,7 @@ sub parsetag () {
        }
        last if m/^-----BEGIN PGP/;
     }
+
     $_ = $copyl;
     for (;;) {
        print DS or die $!;
@@ -615,6 +614,30 @@ sub parsetag () {
     printdebug " parsetag ok.\n";
 }
 
+sub parsetag () {
+    readtag();
+    m/^($package_re) release (\S+) for \S+ \((\S+)\) \[dgit\]$/ or
+       reject "tag message not in expected format";
+    die unless $1 eq $package;
+    $version = $2;
+    die "$3 != $suite " unless $3 eq $suite;
+
+    parsetag_general sub {
+       if (s/^(--deliberately-$deliberately_re) //) {
+           push @deliberatelies, $1;
+       } elsif (s/^previously:(\S+)=(\w+) //) {
+           die "previously $1 twice" if defined $previously{$1};
+           $previously{$1} = $2;
+       } else {
+           return 0;
+       }
+       return 1;
+    }, sub {
+       my ($gotdistro) = @_;
+       die "$gotdistro != $distro" unless $gotdistro eq $distro;
+    };
+}
+
 sub checksig_keyring ($) {
     my ($keyringfile) = @_;
     # returns primary-keyid if signed by a key in this keyring
@@ -761,7 +784,7 @@ sub checktagnoreplay () {
     #     current head for the suite (there must be at least one).
     #
     #     This prevents any tag implying a NOFFCHECK push being
-    #     replayed to rewind from a different head.
+    #     replayed to overwrite a different head.
     #
     #     The possibility of an earlier ff-only push being replayed is
     #     eliminated as follows: the tag from such a push would still
@@ -850,20 +873,23 @@ sub tagh1 ($) {
     return $vals->[0];
 }
 
-sub checks () {
+sub basic_tag_checks() {
     printdebug "checks\n";
 
     tagh1('type') eq 'commit' or reject "tag refers to wrong kind of object";
     tagh1('object') eq $commit or reject "tag refers to wrong commit";
     tagh1('tag') eq $tagname or reject "tag name in tag is wrong";
+}
+
+sub checks () {
+    basic_tag_checks();
 
     my @expecttagnames = debiantags($version, $distro);
     printdebug "expected tag @expecttagnames\n";
     grep { $tagname eq $_ } @expecttagnames or die;
 
     foreach my $othertag (grep { $_ ne $tagname } @expecttagnames) {
-       reject "tag $othertag (pushed with differing dgit version)".
-           " already exists -".
+       reject "tag $othertag already exists -".
            " not replacing previously-pushed version"
            if git_get_ref "refs/tags/".$othertag;
     }
@@ -1047,6 +1073,228 @@ our @hookenvs = qw(distro suitesfile suitesformasterfile policyhook
 
 # workrepo and destrepo handled ad-hoc
 
+sub mode_tag2upload () {
+    # CALLER MUST PREVENT MULTIPLE CONCURRENT RUNS IN SAME CWD
+    # If we fail (exit nonzero), caller should capture our stderr,
+    #  and retry some bounded number of times in some appropriate way
+    # Uses whatever ambient gpg key is available
+    @ARGV==2 or die;
+
+    my $url;
+    ($url,$tagval) = @ARGV;
+
+    $ENV{DGIT_DRS_EMAIL_NOREPLY} // die;
+
+    my $start = time // die;
+    my @t = gmtime $start;
+
+    die if $url =~ m/[^[:graph:]]/;
+    die if $tagval =~ m/[^[:graph:]]/;
+
+    open OL, ">>overall.log" or die $!;
+    autoflush OL 1;
+    my $quit = sub {
+       printf OL "%04d-%02d-%02d %02d:%02d:%02d (%04ds): %s %s: %s\n",
+           $t[5] + 1900, @t[4,3,2,1,0], (time-$start), $url, $tagval, $_[0];
+       exit 0;
+    };
+
+    $ENV{DGIT_DRS_ANY_URL} or $url =~ m{^https://}s
+       or $quit->("url scheme not as expected");
+
+    $tagval =~ m{^$distro/($versiontag_re)$}s
+       or $quit->("tag name not for us");
+
+    $version = $1;
+    $version =~ y/_\%\#/:~/d;
+
+    my $work = 'work';
+
+    my $tagref = "refs/tags/$tagval";
+
+    rmtree $work;
+    rmtree 'bpd';
+    mkdir $work or die $!;
+    mkdir 'bpd' or die $!;
+    unlink <*.orig*>;
+    dif $! if <*.orig*>;
+    changedir $work;
+    runcmd qw(git init -q);
+    runcmd qw(git remote add origin), $url;
+    runcmd qw(git fetch --depth=1 origin), "$tagref:$tagref";
+    changedir ".git";
+    mkdir 'dgit-tmp' or die $!;
+
+    my $tagger;
+    open T, "-|", qw(git cat-file tag), $tagval or die $!;
+    {
+       local $/ = undef;
+       $!=0; $_=<T>; defined or die $!;
+
+       # quick and dirty check, will check properly later
+       m/^\[dgit[^"]* please-upload(?:\]| )/m or
+           $quit->("tag missing please-upload request");
+
+       m/^tagger (.*) \d+ [-+]\d+$/m or
+           $quit->("failed to fish tagger out of tag");
+       $tagger = $1;
+    };
+
+    readtag();
+    m/^($package_re) release (\S+) for ($suite_re)$/ or
+       $quit->("tag headline not for us");
+    $package = $1;
+    my $tagmversion = $2;
+    $suite = $3;
+
+
+    # This is for us.  From now on, we will capture errors to
+    # be emailed to the tagger.
+
+    open H, ">>dgit-tmp/tagupl.email" or die $!;
+    print H <<END or die $!;
+Subject: push-to-upload failed, $package $version ($distro)
+X-Debian-Push-Distro: $distro
+X-Debian-Push-Package: $package
+END
+    printf H "To: %s", $tagger or die $!; # no newline
+    flush H or die $!;
+
+    open L, ">>dgit-tmp/tagupl.log" or die $!;
+
+    my $child = fork() // die $!;
+    if ($child) {
+       # we are the parent
+       # if child exits 0, it has called $quit->()
+       $!=0; waitpid $child, 0 == $child or die $!;
+       printdebug "child $child ?=$?\n";
+       exit 0 unless $?;
+       print L "execution child: ", waitstatusmsg(), "\n" or die $!;
+       close L or die $!;
+       print H <<END or die $!;
+
+
+Processing of tag $tagval
+From url $url
+Was not successful:
+
+END
+       $ENV{DGIT_DRS_SENDMAIL} //= '/usr/lib/sendmail';
+
+       close H or die $!;
+       runcmd qw(sh -ec), <<"END";
+            cd dgit-tmp
+            cat tagupl.log >>tagupl.email
+            $ENV{DGIT_DRS_SENDMAIL} -oee -odb -oi -t  \\
+                -f$ENV{DGIT_DRS_EMAIL_NOREPLY}        \\
+                <tagupl.email
+END
+       $quit->("failed, emailed");
+    }
+
+    open STDERR, ">&L" or die $!;
+    open STDOUT, ">&STDERR" or die $!;
+    open DEBUG, ">&STDERR" if $debuglevel;
+
+    reject "version mismatch $tagmversion != $version "
+       unless $tagmversion eq $version;
+
+    my %need = map { $_ => 1 } qw(please-upload split);
+    my ($upstreamc, $upstreamt);
+    my $quilt;
+    my $distro_ok;
+
+    confess if defined $upstreamt;
+
+    parsetag_general sub {
+       if (m/^(\S+) / && exists $need{$1}) {
+           $_ = $';
+           delete $need{$1};
+       } elsif (s/^upstream=(\w+) //) {
+           $upstreamc = $1;
+       } elsif (s/^upstream-tag=(\S+) //) {
+           $upstreamt = $1;
+       } elsif (s/^--quilt=([-+0-9a-z]+) //) {
+           $quilt = $1;
+       } else {
+           return 0;
+       }
+       return 1;
+    }, sub {
+       my ($gotdistro) = @_;
+       $distro_ok ||= $gotdistro eq $distro;
+    };
+
+    $quit->("not for this distro") unless $distro_ok;
+
+    reject "missing \"$_\"" foreach keys %need;
+
+    verifytag();
+
+    reject "upstream tag and not commitish, or v-v"
+       unless defined $upstreamt == defined $upstreamc;
+
+    my @dgit;
+    push @dgit, $ENV{DGIT_DRS_DGIT} // 'dgit';
+    push @dgit, '-wn';
+    push @dgit, "-p$package";
+    push @dgit, '--build-products-dir=../bpd';
+
+    changedir "..";
+    runcmd (@dgit, qw(setup-gitattributes));
+
+    my @fetch = qw(git fetch origin --unshallow);
+    if (defined $upstreamt) {
+       runcmd qw(git check-ref-format), "refs/tags/$upstreamt";
+       my $utagref = "refs/tags/$upstreamt";
+       push @fetch, "$utagref:$utagref";
+    }
+    runcmd @fetch;
+
+    runcmd qw(git checkout -q), "refs/tags/$tagval";
+
+    my $clogp = parsechangelog();
+    my $clogf = sub {
+       my ($f, $exp) = @_;
+       my $got = getfield $clogp, $f;
+       return if $got eq $exp;
+       reject "mismatch: changelog $f $got != $exp";
+    };
+    $clogf->('Version', $version);
+    $clogf->('Source',  $package);
+
+    @fetch = (@dgit, qw(--for-push fetch), $suite);
+    debugcmd "+",@_;
+    $!=0; $?=-1;
+    if (system @fetch) {
+       failedcmd @fetch unless $? == 4*256;
+    }
+    # this is just to get the orig, so we don't really care about the ref
+    if (defined $upstreamc) {
+       my $need_upstreamc = git_rev_parse "refs/tags/$upstreamt";
+       $upstreamc eq $need_upstreamc or reject
+           "upstream-commitish=$upstreamc but tag refers to $need_upstreamc";
+       runcmd qw(git deborig), "$upstreamc";
+    }
+
+    my @dgitcmd;
+    push @dgitcmd, @dgit;
+    push @dgitcmd, qw(--force-uploading-source-only);
+    if (defined $quilt) {
+       push @dgitcmd, "--quilt=$quilt";
+       if ($quilt =~ m/baredebian/) {
+           die "needed upstream commmitish with --quilt=baredebian"
+               unless defined $upstreamc;
+           push @dgitcmd, "--upstream-commitish=refs/tags/$upstreamt";
+       }
+    }
+    push @dgitcmd, qw(push-source --new --overwrite), $suite;
+    
+    runcmd @dgitcmd;
+
+    $quit->('done');
+}
+
 sub mode_ssh () {
     die if @ARGV;
 
@@ -1155,7 +1403,7 @@ sub parseargsdispatch () {
 
     $ENV{"DGIT_DRS_\U$_"} = ${ $main::{$_} } foreach @hookenvs;
 
-    die unless @ARGV==1;
+    die unless @ARGV>=1;
 
     my $mode = shift @ARGV;
     die unless $mode =~ m/^--(\w+)$/;
index b0e64d47bf632488ed4e432c6c35830901b7c334..2436a5df86e0223ae65fcf50a09e0a2b2c0e9e1f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: dgit ongoing\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-01 21:54+0000\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: 2018-08-26 16:55+0100\n"
 "Last-Translator: Ian Jackson <ijackson@chiark.greenend.org.uk>\n"
 "Language-Team: dgit developrs <dgit@packages.debian.org>\n"
@@ -17,78 +17,73 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../dgit:242
+#: ../dgit:268
 #, perl-format
 msgid "%s: invalid configuration: %s\n"
 msgstr ""
 
-#: ../dgit:249
+#: ../dgit:275
 msgid "warning: overriding problem due to --force:\n"
 msgstr ""
 
-#: ../dgit:257
+#: ../dgit:283
 #, perl-format
 msgid "warning: skipping checks or functionality due to --force-%s\n"
 msgstr ""
 
-#: ../dgit:262
+#: ../dgit:288
 #, perl-format
 msgid "%s: source package %s does not exist in suite %s\n"
 msgstr ""
 
-#: ../dgit:487
+#: ../dgit:520
 #, perl-format
 msgid "build host child %s"
 msgstr ""
 
-#: ../dgit:492 ../dgit:498
+#: ../dgit:525 ../dgit:531
 #, perl-format
 msgid "connection lost: %s"
 msgstr ""
 
-#: ../dgit:493
+#: ../dgit:526
 #, perl-format
 msgid "protocol violation; %s not expected"
 msgstr ""
 
-#: ../dgit:501
+#: ../dgit:534
 #, perl-format
 msgid "eof (reading %s)"
 msgstr ""
 
-#: ../dgit:508
+#: ../dgit:541
 msgid "protocol message"
 msgstr ""
 
-#: ../dgit:516
+#: ../dgit:549
 #, perl-format
 msgid "`%s'"
 msgstr ""
 
-#: ../dgit:537
+#: ../dgit:570
 msgid "bad byte count"
 msgstr ""
 
-#: ../dgit:540
+#: ../dgit:573
 msgid "data block"
 msgstr ""
 
-#: ../dgit:621
-#, perl-format
-msgid "failed to fetch %s: %s"
-msgstr ""
-
-#: ../dgit:633
+#: ../dgit:652
 #, perl-format
 msgid "%s ok: %s"
 msgstr ""
 
-#: ../dgit:635
+#: ../dgit:654
 #, perl-format
 msgid "would be ok: %s (but dry run only)"
 msgstr ""
 
-#: ../dgit:660
+#: ../dgit:679
 msgid ""
 "main usages:\n"
 "  dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]\n"
@@ -109,141 +104,147 @@ msgid ""
 "  -c<name>=<value>    set git config option (used directly by dgit too)\n"
 msgstr ""
 
-#: ../dgit:679
+#: ../dgit:698
 msgid "Perhaps the upload is stuck in incoming.  Using the version from git.\n"
 msgstr ""
 
-#: ../dgit:683
+#: ../dgit:702
 #, perl-format
 msgid ""
 "%s: %s\n"
 "%s"
 msgstr ""
 
-#: ../dgit:688
+#: ../dgit:707
 msgid "too few arguments"
 msgstr ""
 
-#: ../dgit:799
+#: ../dgit:823
 #, perl-format
 msgid "multiple values for %s (in %s git config)"
 msgstr ""
 
-#: ../dgit:802
+#: ../dgit:826
 #, perl-format
 msgid "value for config option %s (in %s git config) contains newline(s)!"
 msgstr ""
 
-#: ../dgit:822
+#: ../dgit:846
 #, perl-format
 msgid ""
 "need value for one of: %s\n"
 "%s: distro or suite appears not to be (properly) supported"
 msgstr ""
 
-#: ../dgit:863
+#: ../dgit:903
 #, perl-format
 msgid "bad syntax for (nominal) distro `%s' (does not match %s)"
 msgstr ""
 
-#: ../dgit:878
+#: ../dgit:918
 #, perl-format
 msgid "backports-quirk needs % or ( )"
 msgstr ""
 
-#: ../dgit:894
+#: ../dgit:934
 #, perl-format
 msgid "%s needs t (true, y, 1) or f (false, n, 0) not `%s'"
 msgstr ""
 
-#: ../dgit:914
+#: ../dgit:954
 msgid "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"
 msgstr ""
 
-#: ../dgit:923 ../git-debrebase:1586 ../Debian/Dgit.pm:201
+#: ../dgit:972
+#, perl-format
+msgid "unknown %s `%s'"
+msgstr ""
+
+#: ../dgit:977 ../git-debrebase:1548 ../Debian/Dgit.pm:211
 msgid "internal error"
 msgstr ""
 
-#: ../dgit:925
+#: ../dgit:979
 msgid "pushing but distro is configured readonly"
 msgstr ""
 
-#: ../dgit:929
+#: ../dgit:983
 msgid ""
 "Push failed, before we got started.\n"
 "You can retry the push, after fixing the problem, if you like.\n"
 msgstr ""
 
-#: ../dgit:1094
-msgid "this operation does not support multiple comma-separated suites"
-msgstr ""
-
-#: ../dgit:1140
+#: ../dgit:1006
 #, perl-format
 msgid ""
-"config requested specific TLS key but do not know how to get curl to use "
-"exactly that EE key (%s)"
+"dgit: quilt mode `%s' (for format `%s') implies split view, but split-view "
+"set to `%s'"
 msgstr ""
 
-#: ../dgit:1161
-msgid "ftpmasterapi archive query method takes no data part"
+#: ../dgit:1169
+msgid "this operation does not support multiple comma-separated suites"
 msgstr ""
 
-#: ../dgit:1169
-msgid "curl failed to print 3-digit HTTP code"
+#: ../dgit:1237
+#, perl-format
+msgid "fetch of %s failed (%s): %s"
 msgstr ""
 
-#: ../dgit:1173
+#: ../dgit:1244
 #, perl-format
 msgid "fetch of %s gave HTTP code %s"
 msgstr ""
 
-#: ../dgit:1189
+#: ../dgit:1265
+msgid "ftpmasterapi archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1283
 #, perl-format
 msgid "unknown suite %s, maybe -d would help"
 msgstr ""
 
-#: ../dgit:1193
+#: ../dgit:1287
 #, perl-format
 msgid "multiple matches for suite %s\n"
 msgstr ""
 
-#: ../dgit:1195
+#: ../dgit:1289
 #, perl-format
 msgid "suite %s info has no codename\n"
 msgstr ""
 
-#: ../dgit:1197
+#: ../dgit:1291
 #, perl-format
 msgid "suite %s maps to bad codename\n"
 msgstr ""
 
-#: ../dgit:1199 ../dgit:1224
+#: ../dgit:1293 ../dgit:1318
 msgid "bad ftpmaster api response: "
 msgstr ""
 
-#: ../dgit:1213
+#: ../dgit:1307
 #, perl-format
 msgid "bad version: %s\n"
 msgstr ""
 
-#: ../dgit:1215
+#: ../dgit:1309
 msgid "bad component"
 msgstr ""
 
-#: ../dgit:1218
+#: ../dgit:1312
 msgid "bad filename"
 msgstr ""
 
-#: ../dgit:1220
+#: ../dgit:1314
 msgid "bad sha256sum"
 msgstr ""
 
-#: ../dgit:1271
+#: ../dgit:1365
 msgid "aptget archive query method takes no data part"
 msgstr ""
 
-#: ../dgit:1355
+#: ../dgit:1449
 #, perl-format
 msgid ""
 "apt seemed to not to update dgit's cached Release files for %s.\n"
@@ -251,163 +252,159 @@ msgid ""
 " is on a filesystem mounted `noatime'; if so, please use `relatime'.)\n"
 msgstr ""
 
-#: ../dgit:1377
+#: ../dgit:1473
 #, perl-format
 msgid "Release file (%s) specifies intolerable %s"
 msgstr ""
 
-#: ../dgit:1405
+#: ../dgit:1499
 msgid "apt-get source did not produce a .dsc"
 msgstr ""
 
-#: ../dgit:1406
+#: ../dgit:1500
 #, perl-format
 msgid "apt-get source produced several .dscs (%s)"
 msgstr ""
 
-#: ../dgit:1511
+#: ../dgit:1605
 #, perl-format
 msgid ""
 "unable to canonicalise suite using package %s which does not appear to exist "
 "in suite %s; --existing-package may help"
 msgstr ""
 
-#: ../dgit:1702
+#: ../dgit:1744
 #, perl-format
 msgid "cannot operate on %s suite"
 msgstr ""
 
-#: ../dgit:1705
+#: ../dgit:1747
 #, perl-format
 msgid "canonical suite name for %s is %s"
 msgstr ""
 
-#: ../dgit:1707
+#: ../dgit:1749
 #, perl-format
 msgid "canonical suite name is %s"
 msgstr ""
 
-#: ../dgit:1727
+#: ../dgit:1769
 #, perl-format
 msgid "%s has hash %s but archive told us to expect %s"
 msgstr ""
 
-#: ../dgit:1733
+#: ../dgit:1775
 #, perl-format
 msgid "unsupported source format %s, sorry"
 msgstr ""
 
-#: ../dgit:1760
+#: ../dgit:1802
 #, perl-format
 msgid "diverting to %s (using config for %s)"
 msgstr ""
 
-#: ../dgit:1777
-msgid "unexpected results from git check query - "
-msgstr ""
-
-#: ../dgit:1792
+#: ../dgit:1825
 #, perl-format
 msgid "unknown git-check `%s'"
 msgstr ""
 
-#: ../dgit:1807
+#: ../dgit:1840
 #, perl-format
 msgid "unknown git-create `%s'"
 msgstr ""
 
-#: ../dgit:1844
+#: ../dgit:1877
 #, perl-format
 msgid "%s: warning: removing from %s: %s\n"
 msgstr ""
 
-#: ../dgit:1890
+#: ../dgit:1923
 #, perl-format
 msgid "could not parse .dsc %s line `%s'"
 msgstr ""
 
-#: ../dgit:1901
+#: ../dgit:1934
 #, perl-format
 msgid "missing any supported Checksums-* or Files field in %s"
 msgstr ""
 
-#: ../dgit:1947
+#: ../dgit:1980
 #, perl-format
 msgid "hash or size of %s varies in %s fields (between: %s)"
 msgstr ""
 
-#: ../dgit:1956
+#: ../dgit:1989
 #, perl-format
 msgid "file list in %s varies between hash fields!"
 msgstr ""
 
-#: ../dgit:1960
+#: ../dgit:1993
 #, perl-format
 msgid "%s has no files list field(s)"
 msgstr ""
 
-#: ../dgit:1966
+#: ../dgit:1999
 #, perl-format
 msgid "no file appears in all file lists (looked in: %s)"
 msgstr ""
 
-#: ../dgit:2006
+#: ../dgit:2039
 #, perl-format
 msgid "purportedly source-only changes polluted by %s\n"
 msgstr ""
 
-#: ../dgit:2019
+#: ../dgit:2052
 msgid "cannot find section/priority from .changes Files field"
 msgstr ""
 
-#: ../dgit:2032
+#: ../dgit:2065
 msgid ""
 "archive does not support .orig check; hope you used --ch:--sa/-sd if needed\n"
 msgstr ""
 
-#: ../dgit:2048
+#: ../dgit:2081
 #, perl-format
 msgid ".dsc %s missing entry for %s"
 msgstr ""
 
-#: ../dgit:2053
+#: ../dgit:2086
 #, perl-format
 msgid "%s: %s (archive) != %s (local .dsc)"
 msgstr ""
 
-#: ../dgit:2061
+#: ../dgit:2094
 #, perl-format
 msgid "archive %s: %s"
 msgstr ""
 
-#: ../dgit:2068
+#: ../dgit:2101
 #, perl-format
 msgid "archive contains %s with different checksum"
 msgstr ""
 
-#: ../dgit:2096
+#: ../dgit:2129
 #, perl-format
 msgid "edited .changes for archive .orig contents: %s %s"
 msgstr ""
 
-#: ../dgit:2104
+#: ../dgit:2137
 #, perl-format
 msgid "[new .changes left in %s]"
 msgstr ""
 
-#: ../dgit:2107
+#: ../dgit:2140
 #, perl-format
 msgid "%s already has appropriate .orig(s) (if any)"
 msgstr ""
 
-#: ../dgit:2131
+#: ../dgit:2159
 #, perl-format
 msgid ""
 "unexpected commit author line format `%s' (was generated from changelog "
 "Maintainer field)"
 msgstr ""
 
-#: ../dgit:2154
+#: ../dgit:2182
 msgid ""
 "\n"
 "Unfortunately, this source package uses a feature of dpkg-source where\n"
@@ -422,113 +419,108 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:2166
+#: ../dgit:2194
 #, perl-format
 msgid ""
 "Found active distro-specific series file for %s (%s): %s, cannot continue"
 msgstr ""
 
-#: ../dgit:2197
+#: ../dgit:2225
 msgid "Dpkg::Vendor `current vendor'"
 msgstr ""
 
-#: ../dgit:2199
+#: ../dgit:2227
 msgid "(base) distro being accessed"
 msgstr ""
 
-#: ../dgit:2201
+#: ../dgit:2229
 msgid "(nominal) distro being accessed"
 msgstr ""
 
-#: ../dgit:2206
+#: ../dgit:2234
 #, perl-format
 msgid "build-products-dir %s is not accessible: %s\n"
 msgstr ""
 
-#: ../dgit:2231
+#: ../dgit:2259
 #, perl-format
 msgid ""
 "%s: found orig(s) in .. missing from build-products-dir, transferring:\n"
 msgstr ""
 
-#: ../dgit:2235
+#: ../dgit:2263
 #, perl-format
 msgid "check orig file %s in bpd %s: %s"
 msgstr ""
 
-#: ../dgit:2237
+#: ../dgit:2265
 #, perl-format
 msgid "check orig file %s in ..: %s"
 msgstr ""
 
-#: ../dgit:2240
+#: ../dgit:2268
 #, perl-format
 msgid "check target of orig symlink %s in ..: %s"
 msgstr ""
 
-#: ../dgit:2249
+#: ../dgit:2277
 #, perl-format
 msgid "%s: cloned orig symlink from ..: %s\n"
 msgstr ""
 
-#: ../dgit:2253
+#: ../dgit:2281
 #, perl-format
 msgid "%s: hardlinked orig from ..: %s\n"
 msgstr ""
 
-#: ../dgit:2256
+#: ../dgit:2284
 #, perl-format
 msgid "failed to make %s a hardlink to %s: %s"
 msgstr ""
 
-#: ../dgit:2262
+#: ../dgit:2290
 #, perl-format
 msgid "%s: symmlinked orig from .. on other filesystem: %s\n"
 msgstr ""
 
-#: ../dgit:2294 ../dgit:2299
-#, perl-format
-msgid "accessing %s: %s"
-msgstr ""
-
-#: ../dgit:2314 ../dgit:2321
-#, perl-format
-msgid "saving %s: %s"
-msgstr ""
-
-#: ../dgit:2386
+#: ../dgit:2361
 #, perl-format
 msgid "dgit (child): exec %s: %s"
 msgstr ""
 
-#: ../dgit:2450 ../dgit:5974
-msgid "source package"
-msgstr ""
-
-#: ../dgit:2468
+#: ../dgit:2423
 msgid "package changelog"
 msgstr ""
 
-#: ../dgit:2508
+#: ../dgit:2463
 msgid "package changelog has no entries!"
 msgstr ""
 
-#: ../dgit:2527
+#: ../dgit:2532 ../dgit:2537
 #, perl-format
-msgid "Import %s"
+msgid "accessing %s: %s"
 msgstr ""
 
-#: ../dgit:2608
+#: ../dgit:2552 ../dgit:2559
+#, perl-format
+msgid "saving %s: %s"
+msgstr ""
+
+#: ../dgit:2585 ../dgit:6078
+msgid "source package"
+msgstr ""
+
+#: ../dgit:2665
 #, perl-format
 msgid "%s: trying slow absurd-git-apply..."
 msgstr ""
 
-#: ../dgit:2627
+#: ../dgit:2684
 #, perl-format
 msgid "%s failed: %s\n"
 msgstr ""
 
-#: ../dgit:2636
+#: ../dgit:2693
 #, perl-format
 msgid ""
 "gbp-pq import and dpkg-source disagree!\n"
@@ -537,21 +529,16 @@ msgid ""
 " dpkg-source --before-build gave tree %s\n"
 msgstr ""
 
-#: ../dgit:2651
+#: ../dgit:2713
 #, perl-format
 msgid "synthesised git commit from .dsc %s"
 msgstr ""
 
-#: ../dgit:2655
+#: ../dgit:2717
 msgid "Import of source package"
 msgstr ""
 
-#: ../dgit:2668
-#, perl-format
-msgid "Record %s (%s) in archive suite %s\n"
-msgstr ""
-
-#: ../dgit:2672
+#: ../dgit:2737
 #, perl-format
 msgid ""
 "\n"
@@ -560,51 +547,51 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:2714
+#: ../dgit:2779
 #, perl-format
 msgid "using existing %s"
 msgstr ""
 
-#: ../dgit:2718
+#: ../dgit:2783
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (perhaps you should delete this "
 "file?)"
 msgstr ""
 
-#: ../dgit:2722
+#: ../dgit:2787
 #, perl-format
 msgid "need to fetch correct version of %s"
 msgstr ""
 
-#: ../dgit:2738
+#: ../dgit:2803
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (got wrong file from archive!)"
 msgstr ""
 
-#: ../dgit:2833
+#: ../dgit:2898
 msgid "too many iterations trying to get sane fetch!"
 msgstr ""
 
-#: ../dgit:2848
+#: ../dgit:2913
 #, perl-format
 msgid "warning: git ls-remote %s reported %s; this is silly, ignoring it.\n"
 msgstr ""
 
-#: ../dgit:2892
+#: ../dgit:2957
 #, perl-format
 msgid "warning: git fetch %s created %s; this is silly, deleting it.\n"
 msgstr ""
 
-#: ../dgit:2907
+#: ../dgit:2972
 msgid ""
 "--dry-run specified but we actually wanted the results of git fetch,\n"
 "so this is not going to work.  Try running dgit fetch first,\n"
 "or using --damp-run instead of --dry-run.\n"
 msgstr ""
 
-#: ../dgit:2912
+#: ../dgit:2977
 #, perl-format
 msgid ""
 "warning: git ls-remote suggests we want %s\n"
@@ -614,49 +601,24 @@ msgid ""
 "warning:  Will try again...\n"
 msgstr ""
 
-#: ../dgit:2979
-#, perl-format
-msgid "Not updating %s from %s to %s.\n"
-msgstr ""
-
-#: ../dgit:3028
-#, perl-format
-msgid "%s: NO git hash"
-msgstr ""
-
-#: ../dgit:3032
-#, perl-format
-msgid "%s: specified git info (%s)"
-msgstr ""
-
-#: ../dgit:3039
-#, perl-format
-msgid "%s: specified git hash"
-msgstr ""
-
-#: ../dgit:3041
-#, perl-format
-msgid "%s: invalid Dgit info"
-msgstr ""
-
-#: ../dgit:3063
+#: ../dgit:3124
 #, perl-format
 msgid "not chasing .dsc distro %s: not fetching %s"
 msgstr ""
 
-#: ../dgit:3068
+#: ../dgit:3129
 #, perl-format
 msgid ".dsc names distro %s: fetching %s"
 msgstr ""
 
-#: ../dgit:3073
+#: ../dgit:3134
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
 "for which we have no configured url and .dsc provides no hint\n"
 msgstr ""
 
-#: ../dgit:3083
+#: ../dgit:3144
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
@@ -665,54 +627,54 @@ msgid ""
 "(can be overridden by config - consult documentation)\n"
 msgstr ""
 
-#: ../dgit:3103
+#: ../dgit:3164
 msgid "rewrite map"
 msgstr ""
 
-#: ../dgit:3110
+#: ../dgit:3171
 msgid "server's git history rewrite map contains a relevant entry!"
 msgstr ""
 
-#: ../dgit:3114
+#: ../dgit:3175
 msgid "using rewritten git hash in place of .dsc value"
 msgstr ""
 
-#: ../dgit:3116
+#: ../dgit:3177
 msgid "server data says .dsc hash is to be disregarded"
 msgstr ""
 
-#: ../dgit:3123
+#: ../dgit:3184
 msgid "additional commits"
 msgstr ""
 
-#: ../dgit:3126
+#: ../dgit:3187
 #, perl-format
 msgid ""
 ".dsc Dgit metadata requires commit %s\n"
 "but we could not obtain that object anywhere.\n"
 msgstr ""
 
-#: ../dgit:3151
+#: ../dgit:3212
 msgid "last upload to archive"
 msgstr ""
 
-#: ../dgit:3155
+#: ../dgit:3216
 msgid "no version available from the archive"
 msgstr ""
 
-#: ../dgit:3238
+#: ../dgit:3299
 msgid "dgit suite branch on dgit git server"
 msgstr ""
 
-#: ../dgit:3245
+#: ../dgit:3306
 msgid "dgit client's archive history view"
 msgstr ""
 
-#: ../dgit:3250
+#: ../dgit:3311
 msgid "Dgit field in .dsc from archive"
 msgstr ""
 
-#: ../dgit:3278
+#: ../dgit:3339
 #, perl-format
 msgid ""
 "\n"
@@ -722,15 +684,15 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:3291
+#: ../dgit:3352
 msgid "archive .dsc names newer git commit"
 msgstr ""
 
-#: ../dgit:3294
+#: ../dgit:3355
 msgid "archive .dsc names other git commit, fixing up"
 msgstr ""
 
-#: ../dgit:3315
+#: ../dgit:3376
 #, perl-format
 msgid ""
 "\n"
@@ -738,7 +700,7 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:3324
+#: ../dgit:3385
 #, perl-format
 msgid ""
 "\n"
@@ -748,7 +710,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3409
+#: ../dgit:3470
 #, perl-format
 msgid ""
 "Record %s (%s) in archive suite %s\n"
@@ -756,19 +718,19 @@ msgid ""
 "Record that\n"
 msgstr ""
 
-#: ../dgit:3422
+#: ../dgit:3483
 msgid "should be treated as descended from\n"
 msgstr ""
 
-#: ../dgit:3440
+#: ../dgit:3501
 msgid "dgit repo server tip (last push)"
 msgstr ""
 
-#: ../dgit:3442
+#: ../dgit:3503
 msgid "local tracking tip (last fetch)"
 msgstr ""
 
-#: ../dgit:3453
+#: ../dgit:3514
 #, perl-format
 msgid ""
 "\n"
@@ -778,30 +740,30 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3468
+#: ../dgit:3529
 msgid "fetched source tree"
 msgstr ""
 
-#: ../dgit:3504
+#: ../dgit:3565
 msgid "debian/changelog merge driver"
 msgstr ""
 
-#: ../dgit:3569
+#: ../dgit:3630
 msgid ""
 "[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes\n"
 " not doing further gitattributes setup\n"
 msgstr ""
 
-#: ../dgit:3583
+#: ../dgit:3644
 msgid "# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)\n"
 msgstr ""
 
-#: ../dgit:3598
+#: ../dgit:3659
 #, perl-format
 msgid "install %s: %s"
 msgstr ""
 
-#: ../dgit:3625
+#: ../dgit:3686
 #, perl-format
 msgid ""
 "dgit: warning: %s contains .gitattributes\n"
@@ -809,30 +771,30 @@ msgid ""
 "tree.\n"
 msgstr ""
 
-#: ../dgit:3647
+#: ../dgit:3708
 #, perl-format
 msgid "fetching %s..."
 msgstr ""
 
-#: ../dgit:3655
+#: ../dgit:3716
 #, perl-format
 msgid "failed to obtain %s: %s"
 msgstr ""
 
-#: ../dgit:3694
+#: ../dgit:3755
 #, perl-format
 msgid "package %s missing in (base suite) %s"
 msgstr ""
 
-#: ../dgit:3726
+#: ../dgit:3787
 msgid "local combined tracking branch"
 msgstr ""
 
-#: ../dgit:3728
+#: ../dgit:3789
 msgid "archive seems to have rewound: local tracking branch is ahead!"
 msgstr ""
 
-#: ../dgit:3767
+#: ../dgit:3828
 #, perl-format
 msgid ""
 "Combine archive branches %s [dgit]\n"
@@ -840,7 +802,7 @@ msgid ""
 "Input branches:\n"
 msgstr ""
 
-#: ../dgit:3781
+#: ../dgit:3842
 msgid ""
 "\n"
 "Key\n"
@@ -849,613 +811,257 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3796
+#: ../dgit:3857
 #, perl-format
 msgid "calculated combined tracking suite %s"
 msgstr ""
 
-#: ../dgit:3814
+#: ../dgit:3875
 #, perl-format
 msgid "ready for work in %s"
 msgstr ""
 
-#: ../dgit:3822
+#: ../dgit:3893
 msgid "dry run makes no sense with clone"
 msgstr ""
 
-#: ../dgit:3837
+#: ../dgit:3908
 #, perl-format
 msgid "create `%s': %s"
 msgstr ""
 
-#: ../dgit:3853
+#: ../dgit:3920
 msgid "fetching existing git history"
 msgstr ""
 
-#: ../dgit:3857
+#: ../dgit:3923
 msgid "starting new git history"
 msgstr ""
 
-#: ../dgit:3883
+#: ../dgit:3948
 #, perl-format
 msgid ""
 "FYI: Vcs-Git in %s has different url to your vcs-git remote.\n"
 " Your vcs-git remote url may be out of date.  Use dgit update-vcs-git ?\n"
 msgstr ""
 
-#: ../dgit:3888
+#: ../dgit:3953
 #, perl-format
 msgid "fetched into %s"
 msgstr ""
 
-#: ../dgit:3900
+#: ../dgit:3965
 #, perl-format
 msgid "Merge from %s [dgit]"
 msgstr ""
 
-#: ../dgit:3902
+#: ../dgit:3967
 #, perl-format
 msgid "fetched to %s and merged into HEAD"
 msgstr ""
 
-#: ../dgit:3910
+#: ../dgit:3975
 #, perl-format
 msgid "git tree contains %s"
 msgstr ""
 
-#: ../dgit:3921
+#: ../dgit:3986
 msgid "you have uncommitted changes to critical files, cannot continue:\n"
 msgstr ""
 
-#: ../dgit:3940
+#: ../dgit:4005
 #, perl-format
 msgid ""
 "quilt fixup required but quilt mode is `nofix'\n"
 "HEAD commit%s differs from tree implied by debian/patches%s"
 msgstr ""
 
-#: ../dgit:3957
+#: ../dgit:4022
 msgid "nothing quilty to commit, ok."
 msgstr ""
 
-#: ../dgit:3960
+#: ../dgit:4025
 msgid " (wanted to commit patch update)"
 msgstr ""
 
-#: ../dgit:3964
+#: ../dgit:4029
 msgid ""
 "Commit Debian 3.0 (quilt) metadata\n"
 "\n"
 msgstr ""
 
-#: ../dgit:4007
+#: ../dgit:4073
 #, perl-format
 msgid ""
 "Not doing any fixup of `%s' due to ----no-quilt-fixup or --quilt=nocheck"
 msgstr ""
 
-#: ../dgit:4012
+#: ../dgit:4078
 #, perl-format
 msgid "Format `%s', need to check/update patch stack"
 msgstr ""
 
-#: ../dgit:4022
+#: ../dgit:4088
 #, perl-format
 msgid "commit id %s"
 msgstr ""
 
-#: ../dgit:4028
+#: ../dgit:4094
 #, perl-format
 msgid "and left in %s"
 msgstr ""
 
-#: ../dgit:4054
+#: ../dgit:4120
 #, perl-format
 msgid "Wanted tag %s (%s) on dgit server, but not found\n"
 msgstr ""
 
-#: ../dgit:4057
+#: ../dgit:4123
 #, perl-format
 msgid "Wanted tag %s (one of: %s) on dgit server, but not found\n"
 msgstr ""
 
-#: ../dgit:4065
+#: ../dgit:4131
 #, perl-format
 msgid "%s (%s) .. %s (%s) is not fast forward\n"
 msgstr ""
 
-#: ../dgit:4074
+#: ../dgit:4140
 msgid "version currently in archive"
 msgstr ""
 
-#: ../dgit:4083
+#: ../dgit:4149
 #, perl-format
 msgid "Checking package changelog for archive version %s ..."
 msgstr ""
 
-#: ../dgit:4091
+#: ../dgit:4157
 #, perl-format
 msgid "%s field from dpkg-parsechangelog %s"
 msgstr ""
 
-#: ../dgit:4101
+#: ../dgit:4168
 #, perl-format
 msgid "Perhaps debian/changelog does not mention %s ?"
 msgstr ""
 
-#: ../dgit:4104
+#: ../dgit:4171
 #, perl-format
 msgid ""
 "%s is %s\n"
 "Your tree seems to based on earlier (not uploaded) %s.\n"
 msgstr ""
 
-#: ../dgit:4118
+#: ../dgit:4185
 #, perl-format
 msgid "Declaring that HEAD includes all changes in %s..."
 msgstr ""
 
-#: ../dgit:4174
+#: ../dgit:4241
 msgid "Checking that HEAD includes all changes in archive..."
 msgstr ""
 
-#: ../dgit:4183
+#: ../dgit:4250
 msgid "maintainer view tag"
 msgstr ""
 
-#: ../dgit:4185
+#: ../dgit:4252
 msgid "dgit view tag"
 msgstr ""
 
-#: ../dgit:4186
+#: ../dgit:4253
 msgid "current archive contents"
 msgstr ""
 
-#: ../dgit:4199
+#: ../dgit:4266
 msgid ""
 "| Not fast forward; maybe --overwrite is needed ?  Please see dgit(1).\n"
 msgstr ""
 
-#: ../dgit:4209
+#: ../dgit:4276
 #, perl-format
 msgid "Declare fast forward from %s\n"
 msgstr ""
 
-#: ../dgit:4210
+#: ../dgit:4277
 #, perl-format
 msgid "Make fast forward from %s\n"
 msgstr ""
 
-#: ../dgit:4214
+#: ../dgit:4281
 #, perl-format
 msgid "Made pseudo-merge of %s into dgit view."
 msgstr ""
 
-#: ../dgit:4227
+#: ../dgit:4294
 #, perl-format
 msgid "Declare fast forward from %s"
 msgstr ""
 
-#: ../dgit:4235
+#: ../dgit:4302
 #, perl-format
 msgid "Make pseudo-merge of %s into your HEAD."
 msgstr ""
 
-#: ../dgit:4247
+#: ../dgit:4314
 #, perl-format
 msgid "-p specified %s but changelog specified %s"
 msgstr ""
 
-#: ../dgit:4269
+#: ../dgit:4336
 #, perl-format
 msgid "%s is for %s %s but debian/changelog is for %s %s"
 msgstr ""
 
-#: ../dgit:4330
+#: ../dgit:4390
 #, perl-format
 msgid "changes field %s `%s' does not match changelog `%s'"
 msgstr ""
 
-#: ../dgit:4358
-#, perl-format
-msgid "%s release %s for %s (%s) [dgit]\n"
-msgstr ""
-
-#: ../dgit:4371
-#, perl-format
-msgid ""
-"%s release %s for %s (%s)\n"
-"(maintainer view tag generated by dgit --quilt=%s)\n"
-msgstr ""
-
-#: ../dgit:4423
-msgid ""
-"Push failed, while checking state of the archive.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4432
-msgid ""
-"package appears to be new in this suite; if this is intentional, use --new"
-msgstr ""
-
-#: ../dgit:4437
-msgid ""
-"Push failed, while preparing your push.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4460
-#, perl-format
-msgid "looked for .dsc %s, but %s; maybe you forgot to build"
-msgstr ""
-
-#: ../dgit:4477
-#, perl-format
-msgid ""
-"Branch is managed by git-debrebase (%s\n"
-"exists), but quilt mode (%s) implies a split view.\n"
-"Pass the right --quilt option or adjust your git config.\n"
-"Or, maybe, run git-debrebase forget-was-ever-debrebase.\n"
-msgstr ""
-
-#: ../dgit:4501
-#, perl-format
-msgid ""
-"--quilt=%s but no cached dgit view:\n"
-" perhaps HEAD changed since dgit build[-source] ?"
-msgstr ""
-
-#: ../dgit:4532
-msgid ""
-"dgit push: HEAD is not a descendant of the archive's version.\n"
-"To overwrite the archive's contents, pass --overwrite[=VERSION].\n"
-"To rewind history, if permitted by the archive, use --deliberately-not-fast-"
-"forward."
-msgstr ""
-
-#: ../dgit:4542
-#, perl-format
-msgid "checking that %s corresponds to HEAD"
-msgstr ""
-
-#: ../dgit:4576 ../dgit:4588
-#, perl-format
-msgid "HEAD specifies a different tree to %s:\n"
-msgstr ""
-
-#: ../dgit:4582
-#, perl-format
-msgid ""
-"There is a problem with your source tree (see dgit(7) for some hints).\n"
-"To see a full diff, run git diff %s %s\n"
-msgstr ""
-
-#: ../dgit:4592
-#, perl-format
-msgid ""
-"Perhaps you forgot to build.  Or perhaps there is a problem with your\n"
-" source tree (see dgit(7) for some hints).  To see a full diff, run\n"
-"   git diff %s %s\n"
-msgstr ""
-
-#: ../dgit:4603
-#, perl-format
-msgid ""
-"failed to find unique changes file (looked for %s in %s); perhaps you need "
-"to use dgit -C"
-msgstr ""
-
-#: ../dgit:4625
-msgid "uploading binaries, although distro policy is source only"
-msgstr ""
-
-#: ../dgit:4629
-msgid "source-only upload, although distro policy requires .debs"
-msgstr ""
-
-#: ../dgit:4633
-#, perl-format
-msgid ""
-"source-only upload, even though package is entirely NEW\n"
-"(this is contrary to policy in %s)"
-msgstr ""
-
-#: ../dgit:4640
-#, perl-format
-msgid "unknown source-only-uploads policy `%s'"
-msgstr ""
-
-#: ../dgit:4684
-msgid ""
-"Push failed, while signing the tag.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4697
-msgid ""
-"Push failed, *after* signing the tag.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4714
-msgid ""
-"Push failed, while updating the remote git repository - see messages above.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4731
-msgid ""
-"Push failed, while obtaining signatures on the .changes and .dsc.\n"
-"If it was just that the signature failed, you may try again by using\n"
-"debsign by hand to sign the changes file (see the command dgit tried,\n"
-"above), and then dput that changes file to complete the upload.\n"
-"If you need to change the package, you must use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4762
-#, perl-format
-msgid "pushed and uploaded %s"
-msgstr ""
-
-#: ../dgit:4774
-msgid "-p is not allowed with clone; specify as argument instead"
-msgstr ""
-
-#: ../dgit:4785
-msgid "incorrect arguments to dgit clone"
-msgstr ""
-
-#: ../dgit:4791 ../git-debrebase:1839
-#, perl-format
-msgid "%s already exists"
-msgstr ""
-
-#: ../dgit:4805
-#, perl-format
-msgid "remove %s: %s\n"
-msgstr ""
-
-#: ../dgit:4809
-#, perl-format
-msgid "check whether to remove %s: %s\n"
-msgstr ""
-
-#: ../dgit:4847
-msgid "incorrect arguments to dgit fetch or dgit pull"
-msgstr ""
-
-#: ../dgit:4864
-#, perl-format
-msgid "dgit pull not yet supported in split view mode (--quilt=%s)\n"
-msgstr ""
-
-#: ../dgit:4873
-msgid "dgit checkout needs a suite argument"
-msgstr ""
-
-#: ../dgit:4935
-#, perl-format
-msgid "setting up vcs-git: %s\n"
-msgstr ""
-
-#: ../dgit:4938
-#, perl-format
-msgid "vcs git already configured: %s\n"
-msgstr ""
-
-#: ../dgit:4940
-#, perl-format
-msgid "changing vcs-git url to: %s\n"
-msgstr ""
-
-#: ../dgit:4945
-#, perl-format
-msgid "fetching (%s)\n"
-msgstr ""
-
-#: ../dgit:4960
-#, perl-format
-msgid "incorrect arguments to dgit %s"
-msgstr ""
-
-#: ../dgit:4971
-#, perl-format
-msgid "dgit %s: changelog specifies %s (%s) but command line specifies %s"
-msgstr ""
-
-#: ../dgit:5009
-#, perl-format
-msgid ""
-"build host has dgit rpush protocol versions %s but invocation host has %s"
-msgstr ""
-
-#: ../dgit:5089
-#, perl-format
-msgid "create %s: %s"
-msgstr ""
-
-#: ../dgit:5126
-#, perl-format
-msgid "build host child failed: %s"
-msgstr ""
-
-#: ../dgit:5129
-msgid "all done\n"
-msgstr ""
-
-#: ../dgit:5138
-#, perl-format
-msgid "file %s (%s) twice"
-msgstr ""
-
-#: ../dgit:5146
-msgid "bad param spec"
-msgstr ""
-
-#: ../dgit:5152
-msgid "bad previously spec"
-msgstr ""
-
-#: ../dgit:5171
-#, perl-format
-msgid ""
-"rpush negotiated protocol version %s which does not support quilt mode %s"
-msgstr ""
-
-#: ../dgit:5216
-#, perl-format
-msgid "buildinfo mismatch in field %s"
-msgstr ""
-
-#: ../dgit:5219
-#, perl-format
-msgid "buildinfo contains forbidden field %s"
-msgstr ""
-
-#: ../dgit:5260
-msgid "remote changes file"
-msgstr ""
-
-#: ../dgit:5335
-msgid "not a plain file or symlink\n"
-msgstr ""
-
-#: ../dgit:5341
-msgid "mode or type changed\n"
-msgstr ""
-
-#: ../dgit:5342
-msgid "modified symlink\n"
-msgstr ""
-
-#: ../dgit:5345
-msgid "deletion of symlink\n"
-msgstr ""
-
-#: ../dgit:5349
-msgid "creation with non-default mode\n"
-msgstr ""
-
-#: ../dgit:5379
-msgid "dgit view: changes are required..."
-msgstr ""
-
-#: ../dgit:5408
-#, perl-format
-msgid ""
-"\n"
-"For full diff showing the problem(s), type:\n"
-" %s\n"
-msgstr ""
-
-#: ../dgit:5415
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-unapplied git tree\n"
-" but git tree differs from orig in upstream files."
-msgstr ""
-
-#: ../dgit:5421
-msgid ""
-"\n"
-" ... debian/patches is missing; perhaps this is a patch queue branch?"
-msgstr ""
-
-#: ../dgit:5428
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-applied git tree\n"
-" but git tree differs from result of applying debian/patches to upstream\n"
-msgstr ""
-
-#: ../dgit:5435
-msgid "dgit view: creating patches-applied version using gbp pq"
-msgstr ""
-
-#: ../dgit:5444
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying that HEAD is for use with a\n"
-" tool which does not create patches for changes to upstream\n"
-" .gitignores: but, such patches exist in debian/patches.\n"
-msgstr ""
-
-#: ../dgit:5453
-msgid "dgit view: creating patch to represent .gitignore changes"
-msgstr ""
-
-#: ../dgit:5458
-#, perl-format
-msgid "%s already exists; but want to create it to record .gitignore changes"
-msgstr ""
-
-#: ../dgit:5463
-msgid ""
-"Subject: Update .gitignore from Debian packaging branch\n"
-"\n"
-"The Debian packaging git branch contains these updates to the upstream\n"
-".gitignore file(s).  This patch is autogenerated, to provide these\n"
-"updates to users of the official Debian archive view of the package.\n"
-msgstr ""
-
-#: ../dgit:5485
-msgid "Commit patch to update .gitignore\n"
-msgstr ""
-
-#: ../dgit:5499
-msgid "converted"
-msgstr ""
-
-#: ../dgit:5500
-#, perl-format
-msgid "dgit view: created (%s)"
-msgstr ""
-
-#: ../dgit:5565
+#: ../dgit:5650
 msgid "maximum search space exceeded"
 msgstr ""
 
-#: ../dgit:5583
+#: ../dgit:5668
 #, perl-format
 msgid "has %s not %s"
 msgstr ""
 
-#: ../dgit:5592
+#: ../dgit:5677
 msgid "root commit"
 msgstr ""
 
-#: ../dgit:5598
+#: ../dgit:5683
 #, perl-format
 msgid "merge (%s nontrivial parents)"
 msgstr ""
 
-#: ../dgit:5610
+#: ../dgit:5695
 #, perl-format
 msgid "changed %s"
 msgstr ""
 
-#: ../dgit:5629
+#: ../dgit:5714
 #, perl-format
 msgid ""
 "\n"
 "%s: error: quilt fixup cannot be linear.  Stopped at:\n"
 msgstr ""
 
-#: ../dgit:5636
+#: ../dgit:5721
 #, perl-format
 msgid "%s:  %s: %s\n"
 msgstr ""
 
-#: ../dgit:5648
+#: ../dgit:5733
 msgid "quilt history linearisation failed.  Search `quilt fixup' in dgit(7).\n"
 msgstr ""
 
-#: ../dgit:5651
+#: ../dgit:5736
 msgid "quilt fixup cannot be linear, smashing..."
 msgstr ""
 
-#: ../dgit:5663
+#: ../dgit:5748
 #, perl-format
 msgid ""
 "Automatically generated patch (%s)\n"
@@ -1463,68 +1069,84 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:5670
+#: ../dgit:5755
 msgid "quiltify linearisation planning successful, executing..."
 msgstr ""
 
-#: ../dgit:5704
+#: ../dgit:5789
 msgid "contains unexpected slashes\n"
 msgstr ""
 
-#: ../dgit:5705
+#: ../dgit:5790
 msgid "contains leading punctuation\n"
 msgstr ""
 
-#: ../dgit:5706
+#: ../dgit:5791
 msgid "contains bad character(s)\n"
 msgstr ""
 
-#: ../dgit:5707
+#: ../dgit:5792
 msgid "is series file\n"
 msgstr ""
 
-#: ../dgit:5708
+#: ../dgit:5793
 msgid "too long\n"
 msgstr ""
 
-#: ../dgit:5712
+#: ../dgit:5797
 #, perl-format
 msgid "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s"
 msgstr ""
 
-#: ../dgit:5741
+#: ../dgit:5826
 #, perl-format
 msgid "dgit: patch title transliteration error: %s"
 msgstr ""
 
-#: ../dgit:5884
+#: ../dgit:5909
+#, perl-format
+msgid ""
+"quilt mode %s does not make sense (or is not supported) with single-debian-"
+"patch"
+msgstr ""
+
+#: ../dgit:5927
+msgid "converted"
+msgstr ""
+
+#: ../dgit:5928
+#, perl-format
+msgid "dgit view: created (%s)"
+msgstr ""
+
+#: ../dgit:5982
 msgid "Commit removal of .pc (quilt series tracking data)\n"
 msgstr ""
 
-#: ../dgit:5894
+#: ../dgit:5992
 msgid "starting quiltify (single-debian-patch)"
 msgstr ""
 
-#: ../dgit:5996
+#: ../dgit:6102
 #, perl-format
 msgid "dgit: split brain (separate dgit view) may be needed (--quilt=%s)."
 msgstr ""
 
-#: ../dgit:6027
+#: ../dgit:6134
 #, perl-format
 msgid "dgit view: found cached (%s)"
 msgstr ""
 
-#: ../dgit:6032
+#: ../dgit:6139
 msgid "dgit view: found cached, no changes required"
 msgstr ""
 
-#: ../dgit:6043
+#: ../dgit:6174
 #, perl-format
 msgid "examining quilt state (multiple patches, %s mode)"
 msgstr ""
 
-#: ../dgit:6134
+#: ../dgit:6288
 msgid ""
 "failed to apply your git tree's patch stack (from debian/patches/) to\n"
 " the corresponding upstream tarball(s).  Your source tree and .orig\n"
@@ -1532,58 +1154,84 @@ msgid ""
 " anomaly (depending on the quilt mode).  Please see --quilt= in dgit(1).\n"
 msgstr ""
 
-#: ../dgit:6148
+#: ../dgit:6302
 msgid "Tree already contains .pc - will use it then delete it."
 msgstr ""
 
-#: ../dgit:6185
+#: ../dgit:6336
+msgid "baredebian quilt fixup: could not find any origs"
+msgstr ""
+
+#: ../dgit:6349
+msgid "tarball"
+msgstr ""
+
+#: ../dgit:6367
+#, perl-format
+msgid "Combine orig tarballs for %s %s"
+msgstr ""
+
+#: ../dgit:6383
+msgid "tarballs"
+msgstr ""
+
+#: ../dgit:6397
+msgid "upstream"
+msgstr ""
+
+#: ../dgit:6421
 #, perl-format
 msgid "%s: base trees orig=%.20s o+d/p=%.20s"
 msgstr ""
 
-#: ../dgit:6188
+#: ../dgit:6431
 #, perl-format
 msgid ""
 "%s: quilt differences: src:  %s orig %s     gitignores:  %s orig %s\n"
-"%s: quilt differences:      HEAD %s o+d/p               HEAD %s o+d/p"
+"%s: quilt differences: %9.00009s %s o+d/p          %9.00009s %s o+d/p"
 msgstr ""
 
-#: ../dgit:6194
+#: ../dgit:6440
 #, perl-format
 msgid "dgit:  cannot represent change: %s: %s\n"
 msgstr ""
 
-#: ../dgit:6198
+#: ../dgit:6444
 msgid ""
 "HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'\n"
 msgstr ""
 
-#: ../dgit:6205
+#: ../dgit:6451
+msgid ""
+"This has only a debian/ directory; you probably want --quilt=bare debian."
+msgstr ""
+
+#: ../dgit:6455
 msgid "This might be a patches-unapplied branch."
 msgstr ""
 
-#: ../dgit:6208
+#: ../dgit:6458
 msgid "This might be a patches-applied branch."
 msgstr ""
 
-#: ../dgit:6211
+#: ../dgit:6461
 msgid "Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?"
 msgstr ""
 
-#: ../dgit:6214
+#: ../dgit:6464
 msgid "Warning: Tree has .gitattributes.  See GITATTRIBUTES in dgit(7)."
 msgstr ""
 
-#: ../dgit:6218
+#: ../dgit:6468
 msgid "Maybe orig tarball(s) are not identical to git representation?"
 msgstr ""
 
-#: ../dgit:6227
+#: ../dgit:6479
 #, perl-format
 msgid "starting quiltify (multiple patches, %s mode)"
 msgstr ""
 
-#: ../dgit:6265
+#: ../dgit:6518
 msgid ""
 "\n"
 "dgit: Building, or cleaning with rules target, in patches-unapplied tree.\n"
@@ -1592,102 +1240,137 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:6277
+#: ../dgit:6530
 msgid "dgit: Unapplying patches again to tidy up the tree."
 msgstr ""
 
-#: ../dgit:6306
+#: ../dgit:6559
 msgid ""
 "If this is just missing .gitignore entries, use a different clean\n"
 "mode, eg --clean=dpkg-source,no-check (-wdn/-wddn) to ignore them\n"
 "or --clean=git (-wg/-wgf) to use `git clean' instead.\n"
 msgstr ""
 
-#: ../dgit:6318
+#: ../dgit:6571
 msgid "tree contains uncommitted files and --clean=check specified"
 msgstr ""
 
-#: ../dgit:6321
+#: ../dgit:6574
 msgid "tree contains uncommitted files (NB dgit didn't run rules clean)"
 msgstr ""
 
-#: ../dgit:6324
+#: ../dgit:6577
 msgid ""
 "tree contains uncommited, untracked, unignored files\n"
 "You can use --clean=git[-ff],always (-wga/-wgfa) to delete them."
 msgstr ""
 
-#: ../dgit:6342
+#: ../dgit:6590
+#, perl-format
+msgid ""
+"quilt mode %s (generally needs untracked upstream files)\n"
+"contradicts clean mode %s (which would delete them)\n"
+msgstr ""
+
+#: ../dgit:6607
 msgid "tree contains uncommitted files (after running rules clean)"
 msgstr ""
 
-#: ../dgit:6356
+#: ../dgit:6621
 msgid "clean takes no additional arguments"
 msgstr ""
 
-#: ../dgit:6369
+#: ../dgit:6640
+#, perl-format
+msgid "-p specified package %s, but changelog says %s"
+msgstr ""
+
+#: ../dgit:6650
+msgid ""
+"dgit: --include-dirty is not supported with split view (including with view-"
+"splitting quilt modes)"
+msgstr ""
+
+#: ../dgit:6659
 #, perl-format
-msgid "-p is not allowed with dgit %s"
+msgid "dgit: --quilt=%s, %s"
 msgstr ""
 
-#: ../dgit:6408
+#: ../dgit:6663
+msgid "dgit: --upstream-commitish only makes sense with --quilt=baredebian"
+msgstr ""
+
+#: ../dgit:6698
 #, perl-format
 msgid "remove old changes file %s: %s"
 msgstr ""
 
-#: ../dgit:6410
+#: ../dgit:6700
 #, perl-format
 msgid "would remove %s"
 msgstr ""
 
-#: ../dgit:6436
+#: ../dgit:6718
+#, perl-format
+msgid "warning: dgit option %s must be passed before %s on dgit command line\n"
+msgstr ""
+
+#: ../dgit:6725
+#, perl-format
+msgid ""
+"warning: option %s should probably be passed to dgit before %s sub-command "
+"on the dgit command line, so that it is seen by dgit and not simply passed "
+"to %s\n"
+msgstr ""
+
+#: ../dgit:6751
 msgid "archive query failed (queried because --since-version not specified)"
 msgstr ""
 
-#: ../dgit:6442
+#: ../dgit:6757
 #, perl-format
 msgid "changelog will contain changes since %s"
 msgstr ""
 
-#: ../dgit:6445
+#: ../dgit:6760
 msgid "package seems new, not specifying -v<version>"
 msgstr ""
 
-#: ../dgit:6488
+#: ../dgit:6803
 msgid "Wanted to build nothing!"
 msgstr ""
 
-#: ../dgit:6526
+#: ../dgit:6841
 #, perl-format
 msgid "only one changes file from build (%s)\n"
 msgstr ""
 
-#: ../dgit:6533
+#: ../dgit:6848
 #, perl-format
 msgid "%s found in binaries changes file %s"
 msgstr ""
 
-#: ../dgit:6540
+#: ../dgit:6855
 #, perl-format
 msgid "%s unexpectedly not created by build"
 msgstr ""
 
-#: ../dgit:6544
+#: ../dgit:6859
 #, perl-format
 msgid "install new changes %s{,.inmulti}: %s"
 msgstr ""
 
-#: ../dgit:6549
+#: ../dgit:6864
 #, perl-format
 msgid "wrong number of different changes files (%s)"
 msgstr ""
 
-#: ../dgit:6552
+#: ../dgit:6867
 #, perl-format
 msgid "build successful, results in %s\n"
 msgstr ""
 
-#: ../dgit:6565
+#: ../dgit:6880
 #, perl-format
 msgid ""
 "changes files other than source matching %s already present; building would "
@@ -1695,136 +1378,136 @@ msgid ""
 "Suggest you delete %s.\n"
 msgstr ""
 
-#: ../dgit:6583
+#: ../dgit:6898
 msgid "build successful\n"
 msgstr ""
 
-#: ../dgit:6590
+#: ../dgit:6906
 #, perl-format
 msgid ""
 "%s: warning: build-products-dir set, but not supported by dpkg-buildpackage\n"
 "%s: warning: build-products-dir will be ignored; files will go to ..\n"
 msgstr ""
 
-#: ../dgit:6700
+#: ../dgit:7017
 #, perl-format
 msgid "remove %s: %s"
 msgstr ""
 
-#: ../dgit:6735
+#: ../dgit:7054
 msgid "--include-dirty not supported with --build-products-dir, sorry"
 msgstr ""
 
-#: ../dgit:6755
+#: ../dgit:7074
 #, perl-format
 msgid "put in place new built file (%s): %s"
 msgstr ""
 
-#: ../dgit:6768
+#: ../dgit:7087
 msgid "build-source takes no additional arguments"
 msgstr ""
 
-#: ../dgit:6772
+#: ../dgit:7091
 #, perl-format
 msgid "source built, results in %s and %s"
 msgstr ""
 
-#: ../dgit:6779
+#: ../dgit:7098
 msgid ""
 "dgit push-source: --include-dirty/--ignore-dirty does not makesense with "
 "push-source!"
 msgstr ""
 
-#: ../dgit:6785
+#: ../dgit:7104
 msgid "source changes file"
 msgstr ""
 
-#: ../dgit:6787
+#: ../dgit:7106
 msgid "user-specified changes file is not source-only"
 msgstr ""
 
-#: ../dgit:6807 ../dgit:6809
+#: ../dgit:7126 ../dgit:7128
 #, perl-format
 msgid "%s (in build products dir): %s"
 msgstr ""
 
-#: ../dgit:6822
+#: ../dgit:7142
 msgid ""
 "perhaps you need to pass -A ?  (sbuild's default is to build only\n"
 "arch-specific binaries; dgit 1.4 used to override that.)\n"
 msgstr ""
 
-#: ../dgit:6834
+#: ../dgit:7155
 msgid ""
 "you asked for a builder but your debbuildopts didn't ask for any binaries -- "
 "is this really what you meant?"
 msgstr ""
 
-#: ../dgit:6838
+#: ../dgit:7159
 msgid ""
 "we must build a .dsc to pass to the builder but your debbuiltopts forbids "
 "the building of a source package; cannot continue"
 msgstr ""
 
-#: ../dgit:6868
+#: ../dgit:7189
 msgid "incorrect arguments to dgit print-unapplied-treeish"
 msgstr ""
 
-#: ../dgit:6890
+#: ../dgit:7210
 msgid "source tree"
 msgstr ""
 
-#: ../dgit:6892
+#: ../dgit:7212
 #, perl-format
 msgid "dgit: import-dsc: %s"
 msgstr ""
 
-#: ../dgit:6905
+#: ../dgit:7225
 #, perl-format
 msgid "unknown dgit import-dsc sub-option `%s'"
 msgstr ""
 
-#: ../dgit:6909
+#: ../dgit:7229
 msgid "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
 msgstr ""
 
-#: ../dgit:6913
+#: ../dgit:7233
 msgid "dry run makes no sense with import-dsc"
 msgstr ""
 
-#: ../dgit:6930
+#: ../dgit:7250
 #, perl-format
 msgid "%s is checked out - will not update it"
 msgstr ""
 
-#: ../dgit:6935
+#: ../dgit:7255
 #, perl-format
 msgid "open import .dsc (%s): %s"
 msgstr ""
 
-#: ../dgit:6937
+#: ../dgit:7257
 #, perl-format
 msgid "read %s: %s"
 msgstr ""
 
-#: ../dgit:6948
+#: ../dgit:7268
 msgid "import-dsc signature check failed"
 msgstr ""
 
-#: ../dgit:6951
+#: ../dgit:7271
 #, perl-format
 msgid "%s: warning: importing unsigned .dsc\n"
 msgstr ""
 
-#: ../dgit:6962
+#: ../dgit:7282
 msgid "Dgit metadata in .dsc"
 msgstr ""
 
-#: ../dgit:6973
+#: ../dgit:7293
 msgid "dgit: import-dsc of .dsc with Dgit field, using git hash"
 msgstr ""
 
-#: ../dgit:6982
+#: ../dgit:7302
 #, perl-format
 msgid ""
 ".dsc contains Dgit field referring to object %s\n"
@@ -1832,21 +1515,21 @@ msgid ""
 "plausible server (browse.dgit.d.o? salsa?), and try the import-dsc again.\n"
 msgstr ""
 
-#: ../dgit:6989
+#: ../dgit:7309
 msgid "Not fast forward, forced update."
 msgstr ""
 
-#: ../dgit:6991
+#: ../dgit:7311
 #, perl-format
 msgid "Not fast forward to %s"
 msgstr ""
 
-#: ../dgit:6996
+#: ../dgit:7316
 #, perl-format
 msgid "updated git ref %s"
 msgstr ""
 
-#: ../dgit:7001
+#: ../dgit:7321
 #, perl-format
 msgid ""
 "Branch %s already exists\n"
@@ -1854,134 +1537,129 @@ msgid ""
 "Specify  +%s to overwrite, discarding existing history\n"
 msgstr ""
 
-#: ../dgit:7021
+#: ../dgit:7341
 #, perl-format
 msgid "lstat %s works but stat gives %s !"
 msgstr ""
 
-#: ../dgit:7023
+#: ../dgit:7343
 #, perl-format
 msgid "stat %s: %s"
 msgstr ""
 
-#: ../dgit:7031
+#: ../dgit:7351
 #, perl-format
 msgid "import %s requires %s, but: %s"
 msgstr ""
 
-#: ../dgit:7050
+#: ../dgit:7370
 #, perl-format
 msgid "cannot import %s which seems to be inside working tree!"
 msgstr ""
 
-#: ../dgit:7054
+#: ../dgit:7374
 #, perl-format
 msgid "symlink %s to %s: %s"
 msgstr ""
 
-#: ../dgit:7055
+#: ../dgit:7375
 #, perl-format
 msgid "made symlink %s -> %s"
 msgstr ""
 
-#: ../dgit:7066
+#: ../dgit:7386
 msgid "Import, forced update - synthetic orphan git history."
 msgstr ""
 
-#: ../dgit:7068
+#: ../dgit:7388
 msgid "Import, merging."
 msgstr ""
 
-#: ../dgit:7082
+#: ../dgit:7402
 #, perl-format
 msgid "Merge %s (%s) import into %s\n"
 msgstr ""
 
-#: ../dgit:7091
+#: ../dgit:7411
 #, perl-format
 msgid "results are in git ref %s"
 msgstr ""
 
-#: ../dgit:7098
+#: ../dgit:7418
 msgid "need only 1 subpath argument"
 msgstr ""
 
-#: ../dgit:7104
-#, perl-format
-msgid "exec curl: %s\n"
-msgstr ""
-
-#: ../dgit:7118
+#: ../dgit:7436
 msgid "need destination argument"
 msgstr ""
 
-#: ../dgit:7123
+#: ../dgit:7441
 #, perl-format
 msgid "exec git clone: %s\n"
 msgstr ""
 
-#: ../dgit:7131
+#: ../dgit:7449
 msgid "no arguments allowed to dgit print-dgit-repos-server-source-url"
 msgstr ""
 
-#: ../dgit:7142
+#: ../dgit:7460
 msgid "no arguments allowed to dgit print-dpkg-source-ignores"
 msgstr ""
 
-#: ../dgit:7148
+#: ../dgit:7466
 msgid "no arguments allowed to dgit setup-mergechangelogs"
 msgstr ""
 
-#: ../dgit:7155 ../dgit:7161
+#: ../dgit:7473 ../dgit:7479
 msgid "no arguments allowed to dgit setup-useremail"
 msgstr ""
 
-#: ../dgit:7167
+#: ../dgit:7485
 msgid "no arguments allowed to dgit setup-tree"
 msgstr ""
 
-#: ../dgit:7214
+#: ../dgit:7532
 msgid ""
 "--initiator-tempdir must be used specify an absolute, not relative, "
 "directory."
 msgstr ""
 
-#: ../dgit:7253
+#: ../dgit:7571
 #, perl-format
 msgid "%s needs a value"
 msgstr ""
 
-#: ../dgit:7257
+#: ../dgit:7575
 #, perl-format
 msgid "bad value `%s' for %s"
 msgstr ""
 
-#: ../dgit:7348
+#: ../dgit:7675
 #, perl-format
 msgid "%s: warning: ignoring unknown force option %s\n"
 msgstr ""
 
-#: ../dgit:7368
+#: ../dgit:7693
 #, perl-format
 msgid "unknown long option `%s'"
 msgstr ""
 
-#: ../dgit:7423
+#: ../dgit:7748
 #, perl-format
 msgid "unknown short option `%s'"
 msgstr ""
 
-#: ../dgit:7438
+#: ../dgit:7763
 #, perl-format
 msgid "%s is set to something other than SIG_DFL\n"
 msgstr ""
 
-#: ../dgit:7442
+#: ../dgit:7767
 #, perl-format
 msgid "%s is blocked\n"
 msgstr ""
 
-#: ../dgit:7448
+#: ../dgit:7773
 #, perl-format
 msgid ""
 "On entry to dgit, %s\n"
@@ -1989,49 +1667,40 @@ msgid ""
 "Giving up.\n"
 msgstr ""
 
-#: ../dgit:7465
+#: ../dgit:7790
 #, perl-format
 msgid "cannot set command for %s"
 msgstr ""
 
-#: ../dgit:7478
+#: ../dgit:7803
 #, perl-format
 msgid "cannot configure options for %s"
 msgstr ""
 
-#: ../dgit:7498
+#: ../dgit:7823
 #, perl-format
 msgid "unknown quilt-mode `%s'"
 msgstr ""
 
-#: ../dgit:7508
+#: ../dgit:7834
 #, perl-format
 msgid "unknown %s setting `%s'"
 msgstr ""
 
-#: ../dgit:7513
-msgid "dgit: --include-dirty is not supported in split view quilt mode"
-msgstr ""
-
-#: ../dgit:7524
-#, perl-format
-msgid "unknown clean-mode `%s'"
-msgstr ""
-
-#: ../dgit:7545
+#: ../dgit:7862
 msgid "DRY RUN ONLY\n"
 msgstr ""
 
-#: ../dgit:7546
+#: ../dgit:7863
 msgid "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
 msgstr ""
 
-#: ../dgit:7565
+#: ../dgit:7882
 #, perl-format
 msgid "unknown operation %s"
 msgstr ""
 
-#: ../git-debrebase:44
+#: ../git-debrebase:45
 msgid ""
 "usages:\n"
 "  git-debrebase [<options>] [--|-i <git rebase options...>]\n"
@@ -2044,60 +1713,60 @@ msgid ""
 "See git-debrebase(1), git-debrebase(5), dgit-maint-debrebase(7) (in dgit).\n"
 msgstr ""
 
-#: ../git-debrebase:67
+#: ../git-debrebase:68
 #, perl-format
 msgid "%s: bad usage: %s\n"
 msgstr ""
 
-#: ../git-debrebase:78
+#: ../git-debrebase:79
 #, perl-format
 msgid "bad options follow `git-debrebase %s'"
 msgstr ""
 
-#: ../git-debrebase:89
+#: ../git-debrebase:90
 #, perl-format
 msgid "missing required git config %s"
 msgstr ""
 
-#: ../git-debrebase:401
+#: ../git-debrebase:363
 #, perl-format
 msgid "%s: snag ignored (-f%s): %s\n"
 msgstr ""
 
-#: ../git-debrebase:404
+#: ../git-debrebase:366
 #, perl-format
 msgid "%s: snag detected (-f%s): %s\n"
 msgstr ""
 
-#: ../git-debrebase:417
+#: ../git-debrebase:379
 #, perl-format
 msgid "%s: snags: %d overriden by individual -f options\n"
 msgstr ""
 
-#: ../git-debrebase:423
+#: ../git-debrebase:385
 #, perl-format
 msgid "%s: snags: %d overriden by global --force\n"
 msgstr ""
 
-#: ../git-debrebase:427
+#: ../git-debrebase:389
 #, perl-format
 msgid "%s: snags: %d blocker(s) (you could -f<tag>, or --force)"
 msgstr ""
 
-#: ../git-debrebase:459
+#: ../git-debrebase:421
 msgid ""
 "Branch/history seems mangled - no longer in gdr format.\n"
 "See ILLEGAL OPERATIONS in git-debrebase(5).\n"
 msgstr ""
 
-#: ../git-debrebase:466
+#: ../git-debrebase:428
 #, perl-format
 msgid ""
 "%s\n"
 "Is this meant to be a gdr branch?  %s\n"
 msgstr ""
 
-#: ../git-debrebase:471
+#: ../git-debrebase:433
 #, perl-format
 msgid ""
 "%s\n"
@@ -2105,7 +1774,7 @@ msgid ""
 "Consider git-debrebase scrap, to throw away your recent work.\n"
 msgstr ""
 
-#: ../git-debrebase:477
+#: ../git-debrebase:439
 #, perl-format
 msgid ""
 "%s\n"
@@ -2113,7 +1782,7 @@ msgid ""
 "Wrong branch, or maybe you needed git-debrebase convert-from-*.\n"
 msgstr ""
 
-#: ../git-debrebase:488
+#: ../git-debrebase:450
 #, perl-format
 msgid ""
 "%s\n"
@@ -2121,418 +1790,415 @@ msgid ""
 "Maybe you reset to, or rebased from, somewhere inappropriate.\n"
 msgstr ""
 
-#: ../git-debrebase:935
+#: ../git-debrebase:897
 #, perl-format
 msgid "git-debrebase `anchor' but %s"
 msgstr ""
 
-#: ../git-debrebase:937
+#: ../git-debrebase:899
 msgid "has other than two parents"
 msgstr ""
 
-#: ../git-debrebase:938
+#: ../git-debrebase:900
 msgid "contains debian/patches"
 msgstr ""
 
-#: ../git-debrebase:964
+#: ../git-debrebase:926
 msgid "is an origin commit"
 msgstr ""
 
-#: ../git-debrebase:966
+#: ../git-debrebase:928
 msgid "upstream files differ from left parent"
 msgstr ""
 
-#: ../git-debrebase:968
+#: ../git-debrebase:930
 msgid "debian/ differs from right parent"
 msgstr ""
 
-#: ../git-debrebase:979
+#: ../git-debrebase:941
 msgid "edits debian/patches"
 msgstr ""
 
-#: ../git-debrebase:991
+#: ../git-debrebase:953
 msgid "parent's debian is not a directory"
 msgstr ""
 
-#: ../git-debrebase:998
+#: ../git-debrebase:960
 msgid "no changes"
 msgstr ""
 
-#: ../git-debrebase:1004
+#: ../git-debrebase:966
 msgid "origin commit"
 msgstr ""
 
-#: ../git-debrebase:1055
+#: ../git-debrebase:1017
 #, perl-format
 msgid "unknown kind of merge from %s"
 msgstr ""
 
-#: ../git-debrebase:1058
+#: ../git-debrebase:1020
 msgid "octopus merge"
 msgstr ""
 
-#: ../git-debrebase:1062
+#: ../git-debrebase:1024
 msgid "general two-parent merge"
 msgstr ""
 
-#: ../git-debrebase:1079
+#: ../git-debrebase:1041
 #, perl-format
 msgid "inconsistent anchors in merged-breakwaters %s"
 msgstr ""
 
-#: ../git-debrebase:1119
+#: ../git-debrebase:1081
 #, perl-format
 msgid "branch needs laundering (run git-debrebase): %s"
 msgstr ""
 
-#: ../git-debrebase:1147
+#: ../git-debrebase:1109
 #, perl-format
 msgid "packaging change (%s) follows upstream change"
 msgstr ""
 
-#: ../git-debrebase:1148
+#: ../git-debrebase:1110
 #, perl-format
 msgid " (eg %s)"
 msgstr ""
 
-#: ../git-debrebase:1154
+#: ../git-debrebase:1116
 msgid "found mixed upstream/packaging commit"
 msgstr ""
 
-#: ../git-debrebase:1155 ../git-debrebase:1163 ../git-debrebase:1168
-#: ../git-debrebase:1173 ../git-debrebase:1179 ../git-debrebase:1187
+#: ../git-debrebase:1117 ../git-debrebase:1125 ../git-debrebase:1130
+#: ../git-debrebase:1135 ../git-debrebase:1141 ../git-debrebase:1149
 #, perl-format
 msgid " (%s)"
 msgstr ""
 
-#: ../git-debrebase:1162
+#: ../git-debrebase:1124
 #, perl-format
 msgid "found interchange bureaucracy commit (%s)"
 msgstr ""
 
-#: ../git-debrebase:1167
+#: ../git-debrebase:1129
 msgid "found dgit dsc import"
 msgstr ""
 
-#: ../git-debrebase:1172
+#: ../git-debrebase:1134
 msgid "found bare dgit dsc import with no prior history"
 msgstr ""
 
-#: ../git-debrebase:1178
+#: ../git-debrebase:1140
 msgid "found vanilla merge"
 msgstr ""
 
-#: ../git-debrebase:1185
+#: ../git-debrebase:1147
 #, perl-format
 msgid "found unprocessable commit, cannot cope: %s"
 msgstr ""
 
-#: ../git-debrebase:1253
+#: ../git-debrebase:1215
 #, perl-format
 msgid "found unprocessable commit, cannot cope; %3$s: (commit %1$s) (d.%2$s)"
 msgstr ""
 
-#: ../git-debrebase:1254
+#: ../git-debrebase:1216
 #, perl-format
 msgid "found unprocessable commit, cannot cope: (commit %1$s) (d.%2$s)"
 msgstr ""
 
-#: ../git-debrebase:1375
+#: ../git-debrebase:1337
 msgid "bare dgit dsc import"
 msgstr ""
 
-#: ../git-debrebase:1715 ../git-debrebase:1718
+#: ../git-debrebase:1677 ../git-debrebase:1680
 #, perl-format
 msgid "mismatch %s ?"
 msgstr ""
 
-#: ../git-debrebase:1721
+#: ../git-debrebase:1683
 #, perl-format
 msgid "mismatch %s != %s ?"
 msgstr ""
 
-#: ../git-debrebase:1731
+#: ../git-debrebase:1693
 #, perl-format
 msgid "internal error %#x %s %s"
 msgstr ""
 
-#: ../git-debrebase:1759
+#: ../git-debrebase:1721
 #, perl-format
 msgid "%s: laundered (head was %s)\n"
 msgstr ""
 
-#: ../git-debrebase:1773
+#: ../git-debrebase:1735
 msgid "you are in the middle of a git-rebase already"
 msgstr ""
 
-#: ../git-debrebase:1799
+#: ../git-debrebase:1761
 msgid "launder for rebase"
 msgstr ""
 
-#: ../git-debrebase:1804
+#: ../git-debrebase:1766
 msgid "analyse does not support any options"
 msgstr ""
 
-#: ../git-debrebase:1806
+#: ../git-debrebase:1768
 msgid "too many arguments to analyse"
 msgstr ""
 
-#: ../git-debrebase:1841
+#: ../git-debrebase:1801
+#, perl-format
+msgid "%s already exists"
+msgstr ""
+
+#: ../git-debrebase:1803
 msgid "HEAD symref is not to refs/heads/"
 msgstr ""
 
-#: ../git-debrebase:1864
+#: ../git-debrebase:1826
 #, perl-format
 msgid "OK, you are ahead of %s\n"
 msgstr ""
 
-#: ../git-debrebase:1868
+#: ../git-debrebase:1830
 #, perl-format
 msgid "you are behind %s, divergence risk"
 msgstr ""
 
-#: ../git-debrebase:1872
+#: ../git-debrebase:1834
 #, perl-format
 msgid "you have diverged from %s"
 msgstr ""
 
-#: ../git-debrebase:1894
+#: ../git-debrebase:1856
 msgid "remote dgit branch"
 msgstr ""
 
-#: ../git-debrebase:1897
+#: ../git-debrebase:1859
 msgid "remote dgit branch for sid"
 msgstr ""
 
-#: ../git-debrebase:1925
+#: ../git-debrebase:1887
 msgid "Recorded previous head for preservation"
 msgstr ""
 
-#: ../git-debrebase:1933
+#: ../git-debrebase:1895
 #, perl-format
 msgid "could not record ffq-prev: %s"
 msgstr ""
 
-#: ../git-debrebase:1944
+#: ../git-debrebase:1906
 #, perl-format
 msgid "could not check ffq-prev: %s"
 msgstr ""
 
-#: ../git-debrebase:1964
+#: ../git-debrebase:1926
 msgid "fast forward"
 msgstr ""
 
-#: ../git-debrebase:1974
+#: ../git-debrebase:1936
 msgid "Declare fast forward / record previous work"
 msgstr ""
 
-#: ../git-debrebase:1986
+#: ../git-debrebase:1948
 msgid "No ffq-prev to stitch."
 msgstr ""
 
-#: ../git-debrebase:2017
-#, perl-format
-msgid ""
-"Could not determine appropriate upstream commitish.\n"
-" (Tried these tags: %s)\n"
-" Check version, and specify upstream commitish explicitly."
-msgstr ""
-
-#: ../git-debrebase:2036
+#: ../git-debrebase:1965
 msgid "need NEW-VERSION [UPS-COMMITTISH]"
 msgstr ""
 
-#: ../git-debrebase:2041
+#: ../git-debrebase:1970
 #, perl-format
 msgid "bad version number `%s'"
 msgstr ""
 
-#: ../git-debrebase:2059
+#: ../git-debrebase:1988
 #, perl-format
 msgid "upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2060
+#: ../git-debrebase:1989
 msgid "upstream (main piece"
 msgstr ""
 
-#: ../git-debrebase:2080
+#: ../git-debrebase:2009
 msgid "for each EXTRA-UPS-NAME need EXTRA-UPS-COMMITISH"
 msgstr ""
 
-#: ../git-debrebase:2098
+#: ../git-debrebase:2027
 msgid "old anchor is recognised due to --anchor, cannot check upstream"
 msgstr "old anchor is recognized due to --anchor, cannot check upstream"
 
-#: ../git-debrebase:2114
+#: ../git-debrebase:2043
 #, perl-format
 msgid ""
 "previous upstream combine %s mentions %d pieces (each implying one parent) "
 "but has %d parents (one per piece plus maybe a previous combine)"
 msgstr ""
 
-#: ../git-debrebase:2123
+#: ../git-debrebase:2052
 #, perl-format
 msgid "previous upstream combine %s first piece is not `.'"
 msgstr ""
 
-#: ../git-debrebase:2136
+#: ../git-debrebase:2065
 #, perl-format
 msgid ""
 "previous upstream %s is from git-debrebase but not an `upstream-combine' "
 "commit"
 msgstr ""
 
-#: ../git-debrebase:2147
+#: ../git-debrebase:2076
 #, perl-format
 msgid "introducing upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2150
+#: ../git-debrebase:2079
 #, perl-format
 msgid "dropping upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2153
+#: ../git-debrebase:2082
 #, perl-format
 msgid "not fast forward: %s %s"
 msgstr ""
 
-#: ../git-debrebase:2264
+#: ../git-debrebase:2193
 msgid "Previous head already recorded\n"
 msgstr ""
 
-#: ../git-debrebase:2268
+#: ../git-debrebase:2197
 #, perl-format
 msgid "Could not preserve: %s"
 msgstr ""
 
-#: ../git-debrebase:2273 ../git-debrebase:2279 ../git-debrebase:2285
-#: ../git-debrebase:2375 ../git-debrebase:2384 ../git-debrebase:2408
-#: ../git-debrebase:2472
+#: ../git-debrebase:2202 ../git-debrebase:2208 ../git-debrebase:2214
+#: ../git-debrebase:2304 ../git-debrebase:2313 ../git-debrebase:2337
+#: ../git-debrebase:2401
 msgid "no arguments allowed"
 msgstr ""
 
-#: ../git-debrebase:2307
+#: ../git-debrebase:2236
 msgid "branch contains furniture (not laundered)"
 msgstr ""
 
-#: ../git-debrebase:2308
+#: ../git-debrebase:2237
 msgid "branch is unlaundered"
 msgstr ""
 
-#: ../git-debrebase:2309
+#: ../git-debrebase:2238
 msgid "branch needs laundering"
 msgstr ""
 
-#: ../git-debrebase:2310
+#: ../git-debrebase:2239
 msgid "branch not in git-debrebase form"
 msgstr ""
 
-#: ../git-debrebase:2320
+#: ../git-debrebase:2249
 msgid "current branch contents, in git-debrebase terms:\n"
 msgstr ""
 
-#: ../git-debrebase:2322
+#: ../git-debrebase:2251
 msgid "  branch is laundered\n"
 msgstr ""
 
-#: ../git-debrebase:2338
+#: ../git-debrebase:2267
 #, perl-format
 msgid "  %s is not well-defined\n"
 msgstr ""
 
-#: ../git-debrebase:2344
+#: ../git-debrebase:2273
 msgid "key git-debrebase commits:\n"
 msgstr ""
 
-#: ../git-debrebase:2345
+#: ../git-debrebase:2274
 msgid "anchor"
 msgstr ""
 
-#: ../git-debrebase:2346
+#: ../git-debrebase:2275
 msgid "breakwater"
 msgstr ""
 
-#: ../git-debrebase:2351
+#: ../git-debrebase:2280
 msgid "branch and ref status, in git-debrebase terms:\n"
 msgstr ""
 
-#: ../git-debrebase:2358
+#: ../git-debrebase:2287
 msgid "  unstitched; previous tip was:\n"
 msgstr ""
 
-#: ../git-debrebase:2361
+#: ../git-debrebase:2290
 msgid "  stitched? (no record of git-debrebase work)\n"
 msgstr ""
 
-#: ../git-debrebase:2363
+#: ../git-debrebase:2292
 msgid "  stitched\n"
 msgstr ""
 
-#: ../git-debrebase:2365
+#: ../git-debrebase:2294
 msgid "  not git-debrebase (diverged since last stitch)\n"
 msgstr ""
 
-#: ../git-debrebase:2368
+#: ../git-debrebase:2297
 msgid "you are currently rebasing\n"
 msgstr ""
 
-#: ../git-debrebase:2385 ../git-debrebase:2398
+#: ../git-debrebase:2314 ../git-debrebase:2327
 msgid "launder for git-debrebase quick"
 msgstr ""
 
-#: ../git-debrebase:2392 ../git-debrebase:2422
+#: ../git-debrebase:2321 ../git-debrebase:2351
 msgid "No ongoing git-debrebase session."
 msgstr ""
 
-#: ../git-debrebase:2461
+#: ../git-debrebase:2390
 msgid "Commit patch queue (exported by git-debrebase)"
 msgstr ""
 
-#: ../git-debrebase:2478
+#: ../git-debrebase:2407
 msgid "No (more) patches to export."
 msgstr ""
 
-#: ../git-debrebase:2485
+#: ../git-debrebase:2414
 #, perl-format
 msgid ""
 "Patch export produced patch amendments (abandoned output commit %s).  Try "
 "laundering first."
 msgstr ""
 
-#: ../git-debrebase:2505
+#: ../git-debrebase:2434
 #, perl-format
 msgid "%s contains comments, which will be discarded"
 msgstr ""
 
-#: ../git-debrebase:2510
+#: ../git-debrebase:2439
 #, perl-format
 msgid "patch %s repeated in %s !"
 msgstr ""
 
-#: ../git-debrebase:2517
+#: ../git-debrebase:2446
 #, perl-format
 msgid "Unused patch file %s will be discarded"
 msgstr ""
 
-#: ../git-debrebase:2525
+#: ../git-debrebase:2454
 msgid "ffq-prev exists, this is already managed by git-debrebase!"
 msgstr ""
 
-#: ../git-debrebase:2530
+#: ../git-debrebase:2459
 msgid "ahead of debrebase-last, this is already managed by git-debrebase!"
 msgstr ""
 
-#: ../git-debrebase:2546
+#: ../git-debrebase:2475
 msgid "want only 1 optional argument, the upstream git commitish"
 msgstr ""
 
-#: ../git-debrebase:2551
+#: ../git-debrebase:2480
 msgid "missing Version from changelog\n"
 msgstr ""
 
-#: ../git-debrebase:2567
+#: ../git-debrebase:2496
 #, perl-format
 msgid ""
 "upstream (%s) and HEAD are not\n"
@@ -2540,58 +2206,58 @@ msgid ""
 "  git diff %s HEAD -- :!/debian :/\n"
 msgstr ""
 
-#: ../git-debrebase:2575
+#: ../git-debrebase:2504
 #, perl-format
 msgid "upstream (%s) is not an ancestor of HEAD"
 msgstr ""
 
-#: ../git-debrebase:2582
+#: ../git-debrebase:2511
 #, perl-format
 msgid ""
 "history between upstream (%s) and HEAD contains direct changes to upstream "
 "files - are you sure this is a gbp (patches-unapplied) branch?"
 msgstr ""
 
-#: ../git-debrebase:2584
+#: ../git-debrebase:2513
 #, perl-format
 msgid "list expected changes with:  %s\n"
 msgstr ""
 
-#: ../git-debrebase:2591
+#: ../git-debrebase:2520
 #, perl-format
 msgid "upstream (%s) contains debian/ directory"
 msgstr ""
 
-#: ../git-debrebase:2609
+#: ../git-debrebase:2538
 msgid "neither of the first two changelog entries are released\n"
 msgstr ""
 
-#: ../git-debrebase:2615
+#: ../git-debrebase:2544
 #, perl-format
 msgid "could not find suitable maintainer view tag %s\n"
 msgstr ""
 
-#: ../git-debrebase:2618
+#: ../git-debrebase:2547
 #, perl-format
 msgid "HEAD is not FF from maintainer tag %s!"
 msgstr ""
 
-#: ../git-debrebase:2621
+#: ../git-debrebase:2550
 #, perl-format
 msgid "dgit view tag %s not found\n"
 msgstr ""
 
-#: ../git-debrebase:2623
+#: ../git-debrebase:2552
 #, perl-format
 msgid "dgit view tag %s is not FF from maintainer tag %s\n"
 msgstr ""
 
-#: ../git-debrebase:2625
+#: ../git-debrebase:2554
 #, perl-format
 msgid "will stitch in dgit view, %s\n"
 msgstr ""
 
-#: ../git-debrebase:2632
+#: ../git-debrebase:2561
 #, perl-format
 msgid ""
 "Cannot confirm dgit view: %s\n"
@@ -2599,12 +2265,12 @@ msgid ""
 "dgit --overwrite will be needed on the first dgit push after conversion.\n"
 msgstr ""
 
-#: ../git-debrebase:2678
+#: ../git-debrebase:2607
 #, perl-format
 msgid "%s: converted from patched-unapplied (gbp) branch format, OK\n"
 msgstr ""
 
-#: ../git-debrebase:2707
+#: ../git-debrebase:2636
 #, perl-format
 msgid ""
 "%s: converted to git-buildpackage branch format\n"
@@ -2612,16 +2278,16 @@ msgid ""
 "%s: WARNING: doing so would drop all upstream patches!\n"
 msgstr ""
 
-#: ../git-debrebase:2728
+#: ../git-debrebase:2657
 msgid "takes 1 optional argument, the upstream commitish"
 msgstr ""
 
-#: ../git-debrebase:2736
+#: ../git-debrebase:2665
 #, perl-format
 msgid "%s, from command line"
 msgstr ""
 
-#: ../git-debrebase:2750
+#: ../git-debrebase:2679
 #, perl-format
 msgid ""
 "%s: Branch already seems to be in git-debrebase format!\n"
@@ -2629,225 +2295,242 @@ msgid ""
 "%s: but is probably a bad idea.  Probably, you wanted to do nothing.\n"
 msgstr ""
 
-#: ../git-debrebase:2754
+#: ../git-debrebase:2683
 msgid "Branch already in git-debrebase format."
 msgstr ""
 
-#: ../git-debrebase:2766
+#: ../git-debrebase:2695
 msgid "Considering possible commits corresponding to upstream:\n"
 msgstr ""
 
-#: ../git-debrebase:2773
+#: ../git-debrebase:2702
 #, perl-format
 msgid "git tag %s"
 msgstr ""
 
-#: ../git-debrebase:2779
+#: ../git-debrebase:2708
 #, perl-format
 msgid " git tag: no suitable tag found (tried %s)\n"
 msgstr ""
 
-#: ../git-debrebase:2788
+#: ../git-debrebase:2717
 #, perl-format
 msgid "opendir build-products-dir %s: %s"
 msgstr ""
 
-#: ../git-debrebase:2794
+#: ../git-debrebase:2723
 #, perl-format
 msgid " orig: found what looks like a .orig, %s\n"
 msgstr ""
 
-#: ../git-debrebase:2825
+#: ../git-debrebase:2754
 #, perl-format
 msgid " orig: no suitable origs found (looked for %s in %s)\n"
 msgstr ""
 
-#: ../git-debrebase:2834
+#: ../git-debrebase:2763
 msgid "Evaluating possible commits corresponding to upstream:\n"
 msgstr ""
 
-#: ../git-debrebase:2871
+#: ../git-debrebase:2800
 #, perl-format
 msgid " %s: couldn't apply patches: gbp pq %s"
 msgstr ""
 
-#: ../git-debrebase:2880
+#: ../git-debrebase:2809
 #, perl-format
 msgid " %s: applying patches gives different tree\n"
 msgstr ""
 
-#: ../git-debrebase:2894
+#: ../git-debrebase:2823
 msgid ""
 "Could not find or construct a suitable upstream commit.\n"
 "Rerun adding --diagnose after convert-from-dgit-view, or pass a\n"
 "upstream commmit explicitly or provide suitable origs.\n"
 msgstr ""
 
-#: ../git-debrebase:2900
+#: ../git-debrebase:2829
 #, perl-format
 msgid "Yes, will base new branch on %s\n"
 msgstr ""
 
-#: ../git-debrebase:2907
+#: ../git-debrebase:2836
 msgid "forget-was-ever-debrebase takes no further arguments"
 msgstr ""
 
-#: ../git-debrebase:2911
+#: ../git-debrebase:2840
 #, perl-format
 msgid "Not suitable for recording git-debrebaseness anyway: %s"
 msgstr ""
 
-#: ../git-debrebase:3013
+#: ../git-debrebase:2942
 msgid "bad options\n"
 msgstr ""
 
-#: ../git-debrebase:3023
+#: ../git-debrebase:2952
 #, perl-format
 msgid "%s: no cuddling to -i for git-rebase"
 msgstr ""
 
-#: ../git-debrebase:3053
+#: ../git-debrebase:2982
 #, perl-format
 msgid "unknown git-debrebase sub-operation %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:295
+#: ../Debian/Dgit.pm:298
 #, perl-format
 msgid "error: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:315
+#: ../Debian/Dgit.pm:324
 #, perl-format
 msgid "getcwd failed: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:334
+#: ../Debian/Dgit.pm:343
 msgid "terminated, reporting successful completion"
 msgstr ""
 
-#: ../Debian/Dgit.pm:336
+#: ../Debian/Dgit.pm:345
 #, perl-format
 msgid "failed with error exit status %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:339
+#: ../Debian/Dgit.pm:348
 #, perl-format
 msgid "died due to fatal signal %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:343
+#: ../Debian/Dgit.pm:352
 #, perl-format
 msgid "failed with unknown wait status %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:349
+#: ../Debian/Dgit.pm:358
 msgid "failed command"
 msgstr ""
 
-#: ../Debian/Dgit.pm:355
+#: ../Debian/Dgit.pm:364
 #, perl-format
 msgid "failed to fork/exec: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:357
+#: ../Debian/Dgit.pm:366
 #, perl-format
 msgid "subprocess %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:359
+#: ../Debian/Dgit.pm:368
 msgid "subprocess produced invalid output"
 msgstr ""
 
-#: ../Debian/Dgit.pm:450
+#: ../Debian/Dgit.pm:459
 msgid "stat source file: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:460
+#: ../Debian/Dgit.pm:469
 msgid "stat destination file: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:479
+#: ../Debian/Dgit.pm:488
 msgid "finally install file after cp: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:485
+#: ../Debian/Dgit.pm:494
 msgid "delete old file after cp: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:506
+#: ../Debian/Dgit.pm:515
 msgid ""
 "not in a git working tree?\n"
 "(git rev-parse --show-toplevel produced no output)\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:509
+#: ../Debian/Dgit.pm:518
 #, perl-format
 msgid "chdir toplevel %s: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:617
+#: ../Debian/Dgit.pm:626
 msgid "git index contains changes (does not match HEAD)"
 msgstr ""
 
-#: ../Debian/Dgit.pm:618
+#: ../Debian/Dgit.pm:627
 msgid "working tree is dirty (does not match HEAD)"
 msgstr ""
 
-#: ../Debian/Dgit.pm:689
+#: ../Debian/Dgit.pm:649
+msgid "using specified upstream commitish"
+msgstr ""
+
+#: ../Debian/Dgit.pm:655
+#, perl-format
+msgid ""
+"Could not determine appropriate upstream commitish.\n"
+" (Tried these tags: %s)\n"
+" Check version, and specify upstream commitish explicitly."
+msgstr ""
+
+#: ../Debian/Dgit.pm:661 ../Debian/Dgit.pm:663
+#, perl-format
+msgid "using upstream from git tag %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:769
 msgid "detached HEAD"
 msgstr ""
 
-#: ../Debian/Dgit.pm:690
+#: ../Debian/Dgit.pm:770
 msgid "HEAD symref is not to refs/"
 msgstr ""
 
-#: ../Debian/Dgit.pm:706
+#: ../Debian/Dgit.pm:786
 #, perl-format
 msgid "parsing of %s failed"
 msgstr ""
 
-#: ../Debian/Dgit.pm:715
+#: ../Debian/Dgit.pm:795
 #, perl-format
 msgid ""
 "control file %s is (already) PGP-signed.  Note that dgit push needs to "
 "modify the .dsc and then do the signature itself"
 msgstr ""
 
-#: ../Debian/Dgit.pm:729
+#: ../Debian/Dgit.pm:809
 #, perl-format
 msgid "open %s (%s): %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:750
+#: ../Debian/Dgit.pm:830
 #, perl-format
 msgid "missing field %s in %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:822
+#: ../Debian/Dgit.pm:916
 msgid "Dummy commit - do not use\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:843
+#: ../Debian/Dgit.pm:937
 #, perl-format
 msgid "exec %s: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:911
+#: ../Debian/Dgit.pm:1005
 #, perl-format
 msgid "cannot stat %s/.git: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:934
+#: ../Debian/Dgit.pm:1028
 #, perl-format
 msgid "failed to mkdir playground parent %s: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:942
+#: ../Debian/Dgit.pm:1036
 #, perl-format
 msgid "failed to mkdir a playground %s: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:951
+#: ../Debian/Dgit.pm:1045
 #, perl-format
 msgid "failed to mkdir the playground %s: %s"
 msgstr ""
index 69096f01bbaa15491051ba811f5354224731f427..f81c3ef31dbfba23ce099e87e21d102b797b0f71 100644 (file)
@@ -6,32 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"#-#-#-#-#  .dgit.pot (dgit ongoing)  #-#-#-#-#\n"
 "Project-Id-Version: dgit ongoing\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-01 21:54+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"#-#-#-#-#  .git-debrebase.pot (dgit ongoing)  #-#-#-#-#\n"
-"Project-Id-Version: dgit ongoing\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-01 21:54+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"#-#-#-#-#  .common.pot (dgit ongoing)  #-#-#-#-#\n"
-"Project-Id-Version: dgit ongoing\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-01 15:31+0000\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -40,78 +17,73 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../dgit:242
+#: ../dgit:268
 #, perl-format
 msgid "%s: invalid configuration: %s\n"
 msgstr ""
 
-#: ../dgit:249
+#: ../dgit:275
 msgid "warning: overriding problem due to --force:\n"
 msgstr ""
 
-#: ../dgit:257
+#: ../dgit:283
 #, perl-format
 msgid "warning: skipping checks or functionality due to --force-%s\n"
 msgstr ""
 
-#: ../dgit:262
+#: ../dgit:288
 #, perl-format
 msgid "%s: source package %s does not exist in suite %s\n"
 msgstr ""
 
-#: ../dgit:487
+#: ../dgit:520
 #, perl-format
 msgid "build host child %s"
 msgstr ""
 
-#: ../dgit:492 ../dgit:498
+#: ../dgit:525 ../dgit:531
 #, perl-format
 msgid "connection lost: %s"
 msgstr ""
 
-#: ../dgit:493
+#: ../dgit:526
 #, perl-format
 msgid "protocol violation; %s not expected"
 msgstr ""
 
-#: ../dgit:501
+#: ../dgit:534
 #, perl-format
 msgid "eof (reading %s)"
 msgstr ""
 
-#: ../dgit:508
+#: ../dgit:541
 msgid "protocol message"
 msgstr ""
 
-#: ../dgit:516
+#: ../dgit:549
 #, perl-format
 msgid "`%s'"
 msgstr ""
 
-#: ../dgit:537
+#: ../dgit:570
 msgid "bad byte count"
 msgstr ""
 
-#: ../dgit:540
+#: ../dgit:573
 msgid "data block"
 msgstr ""
 
-#: ../dgit:621
-#, perl-format
-msgid "failed to fetch %s: %s"
-msgstr ""
-
-#: ../dgit:633
+#: ../dgit:652
 #, perl-format
 msgid "%s ok: %s"
 msgstr ""
 
-#: ../dgit:635
+#: ../dgit:654
 #, perl-format
 msgid "would be ok: %s (but dry run only)"
 msgstr ""
 
-#: ../dgit:660
+#: ../dgit:679
 msgid ""
 "main usages:\n"
 "  dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]\n"
@@ -132,141 +104,147 @@ msgid ""
 "  -c<name>=<value>    set git config option (used directly by dgit too)\n"
 msgstr ""
 
-#: ../dgit:679
+#: ../dgit:698
 msgid "Perhaps the upload is stuck in incoming.  Using the version from git.\n"
 msgstr ""
 
-#: ../dgit:683
+#: ../dgit:702
 #, perl-format
 msgid ""
 "%s: %s\n"
 "%s"
 msgstr ""
 
-#: ../dgit:688
+#: ../dgit:707
 msgid "too few arguments"
 msgstr ""
 
-#: ../dgit:799
+#: ../dgit:823
 #, perl-format
 msgid "multiple values for %s (in %s git config)"
 msgstr ""
 
-#: ../dgit:802
+#: ../dgit:826
 #, perl-format
 msgid "value for config option %s (in %s git config) contains newline(s)!"
 msgstr ""
 
-#: ../dgit:822
+#: ../dgit:846
 #, perl-format
 msgid ""
 "need value for one of: %s\n"
 "%s: distro or suite appears not to be (properly) supported"
 msgstr ""
 
-#: ../dgit:863
+#: ../dgit:903
 #, perl-format
 msgid "bad syntax for (nominal) distro `%s' (does not match %s)"
 msgstr ""
 
-#: ../dgit:878
+#: ../dgit:918
 #, perl-format
 msgid "backports-quirk needs % or ( )"
 msgstr ""
 
-#: ../dgit:894
+#: ../dgit:934
 #, perl-format
 msgid "%s needs t (true, y, 1) or f (false, n, 0) not `%s'"
 msgstr ""
 
-#: ../dgit:914
+#: ../dgit:954
 msgid "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"
 msgstr ""
 
-#: ../dgit:923 ../git-debrebase:1586 ../Debian/Dgit.pm:201
+#: ../dgit:972
+#, perl-format
+msgid "unknown %s `%s'"
+msgstr ""
+
+#: ../dgit:977 ../git-debrebase:1548 ../Debian/Dgit.pm:211
 msgid "internal error"
 msgstr ""
 
-#: ../dgit:925
+#: ../dgit:979
 msgid "pushing but distro is configured readonly"
 msgstr ""
 
-#: ../dgit:929
+#: ../dgit:983
 msgid ""
 "Push failed, before we got started.\n"
 "You can retry the push, after fixing the problem, if you like.\n"
 msgstr ""
 
-#: ../dgit:1094
-msgid "this operation does not support multiple comma-separated suites"
-msgstr ""
-
-#: ../dgit:1140
+#: ../dgit:1006
 #, perl-format
 msgid ""
-"config requested specific TLS key but do not know how to get curl to use "
-"exactly that EE key (%s)"
+"dgit: quilt mode `%s' (for format `%s') implies split view, but split-view "
+"set to `%s'"
 msgstr ""
 
-#: ../dgit:1161
-msgid "ftpmasterapi archive query method takes no data part"
+#: ../dgit:1169
+msgid "this operation does not support multiple comma-separated suites"
 msgstr ""
 
-#: ../dgit:1169
-msgid "curl failed to print 3-digit HTTP code"
+#: ../dgit:1237
+#, perl-format
+msgid "fetch of %s failed (%s): %s"
 msgstr ""
 
-#: ../dgit:1173
+#: ../dgit:1244
 #, perl-format
 msgid "fetch of %s gave HTTP code %s"
 msgstr ""
 
-#: ../dgit:1189
+#: ../dgit:1265
+msgid "ftpmasterapi archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1283
 #, perl-format
 msgid "unknown suite %s, maybe -d would help"
 msgstr ""
 
-#: ../dgit:1193
+#: ../dgit:1287
 #, perl-format
 msgid "multiple matches for suite %s\n"
 msgstr ""
 
-#: ../dgit:1195
+#: ../dgit:1289
 #, perl-format
 msgid "suite %s info has no codename\n"
 msgstr ""
 
-#: ../dgit:1197
+#: ../dgit:1291
 #, perl-format
 msgid "suite %s maps to bad codename\n"
 msgstr ""
 
-#: ../dgit:1199 ../dgit:1224
+#: ../dgit:1293 ../dgit:1318
 msgid "bad ftpmaster api response: "
 msgstr ""
 
-#: ../dgit:1213
+#: ../dgit:1307
 #, perl-format
 msgid "bad version: %s\n"
 msgstr ""
 
-#: ../dgit:1215
+#: ../dgit:1309
 msgid "bad component"
 msgstr ""
 
-#: ../dgit:1218
+#: ../dgit:1312
 msgid "bad filename"
 msgstr ""
 
-#: ../dgit:1220
+#: ../dgit:1314
 msgid "bad sha256sum"
 msgstr ""
 
-#: ../dgit:1271
+#: ../dgit:1365
 msgid "aptget archive query method takes no data part"
 msgstr ""
 
-#: ../dgit:1355
+#: ../dgit:1449
 #, perl-format
 msgid ""
 "apt seemed to not to update dgit's cached Release files for %s.\n"
@@ -274,163 +252,159 @@ msgid ""
 " is on a filesystem mounted `noatime'; if so, please use `relatime'.)\n"
 msgstr ""
 
-#: ../dgit:1377
+#: ../dgit:1473
 #, perl-format
 msgid "Release file (%s) specifies intolerable %s"
 msgstr ""
 
-#: ../dgit:1405
+#: ../dgit:1499
 msgid "apt-get source did not produce a .dsc"
 msgstr ""
 
-#: ../dgit:1406
+#: ../dgit:1500
 #, perl-format
 msgid "apt-get source produced several .dscs (%s)"
 msgstr ""
 
-#: ../dgit:1511
+#: ../dgit:1605
 #, perl-format
 msgid ""
 "unable to canonicalise suite using package %s which does not appear to exist "
 "in suite %s; --existing-package may help"
 msgstr ""
 
-#: ../dgit:1702
+#: ../dgit:1744
 #, perl-format
 msgid "cannot operate on %s suite"
 msgstr ""
 
-#: ../dgit:1705
+#: ../dgit:1747
 #, perl-format
 msgid "canonical suite name for %s is %s"
 msgstr ""
 
-#: ../dgit:1707
+#: ../dgit:1749
 #, perl-format
 msgid "canonical suite name is %s"
 msgstr ""
 
-#: ../dgit:1727
+#: ../dgit:1769
 #, perl-format
 msgid "%s has hash %s but archive told us to expect %s"
 msgstr ""
 
-#: ../dgit:1733
+#: ../dgit:1775
 #, perl-format
 msgid "unsupported source format %s, sorry"
 msgstr ""
 
-#: ../dgit:1760
+#: ../dgit:1802
 #, perl-format
 msgid "diverting to %s (using config for %s)"
 msgstr ""
 
-#: ../dgit:1777
-msgid "unexpected results from git check query - "
-msgstr ""
-
-#: ../dgit:1792
+#: ../dgit:1825
 #, perl-format
 msgid "unknown git-check `%s'"
 msgstr ""
 
-#: ../dgit:1807
+#: ../dgit:1840
 #, perl-format
 msgid "unknown git-create `%s'"
 msgstr ""
 
-#: ../dgit:1844
+#: ../dgit:1877
 #, perl-format
 msgid "%s: warning: removing from %s: %s\n"
 msgstr ""
 
-#: ../dgit:1890
+#: ../dgit:1923
 #, perl-format
 msgid "could not parse .dsc %s line `%s'"
 msgstr ""
 
-#: ../dgit:1901
+#: ../dgit:1934
 #, perl-format
 msgid "missing any supported Checksums-* or Files field in %s"
 msgstr ""
 
-#: ../dgit:1947
+#: ../dgit:1980
 #, perl-format
 msgid "hash or size of %s varies in %s fields (between: %s)"
 msgstr ""
 
-#: ../dgit:1956
+#: ../dgit:1989
 #, perl-format
 msgid "file list in %s varies between hash fields!"
 msgstr ""
 
-#: ../dgit:1960
+#: ../dgit:1993
 #, perl-format
 msgid "%s has no files list field(s)"
 msgstr ""
 
-#: ../dgit:1966
+#: ../dgit:1999
 #, perl-format
 msgid "no file appears in all file lists (looked in: %s)"
 msgstr ""
 
-#: ../dgit:2006
+#: ../dgit:2039
 #, perl-format
 msgid "purportedly source-only changes polluted by %s\n"
 msgstr ""
 
-#: ../dgit:2019
+#: ../dgit:2052
 msgid "cannot find section/priority from .changes Files field"
 msgstr ""
 
-#: ../dgit:2032
+#: ../dgit:2065
 msgid ""
 "archive does not support .orig check; hope you used --ch:--sa/-sd if needed\n"
 msgstr ""
 
-#: ../dgit:2048
+#: ../dgit:2081
 #, perl-format
 msgid ".dsc %s missing entry for %s"
 msgstr ""
 
-#: ../dgit:2053
+#: ../dgit:2086
 #, perl-format
 msgid "%s: %s (archive) != %s (local .dsc)"
 msgstr ""
 
-#: ../dgit:2061
+#: ../dgit:2094
 #, perl-format
 msgid "archive %s: %s"
 msgstr ""
 
-#: ../dgit:2068
+#: ../dgit:2101
 #, perl-format
 msgid "archive contains %s with different checksum"
 msgstr ""
 
-#: ../dgit:2096
+#: ../dgit:2129
 #, perl-format
 msgid "edited .changes for archive .orig contents: %s %s"
 msgstr ""
 
-#: ../dgit:2104
+#: ../dgit:2137
 #, perl-format
 msgid "[new .changes left in %s]"
 msgstr ""
 
-#: ../dgit:2107
+#: ../dgit:2140
 #, perl-format
 msgid "%s already has appropriate .orig(s) (if any)"
 msgstr ""
 
-#: ../dgit:2131
+#: ../dgit:2159
 #, perl-format
 msgid ""
 "unexpected commit author line format `%s' (was generated from changelog "
 "Maintainer field)"
 msgstr ""
 
-#: ../dgit:2154
+#: ../dgit:2182
 msgid ""
 "\n"
 "Unfortunately, this source package uses a feature of dpkg-source where\n"
@@ -445,113 +419,108 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:2166
+#: ../dgit:2194
 #, perl-format
 msgid ""
 "Found active distro-specific series file for %s (%s): %s, cannot continue"
 msgstr ""
 
-#: ../dgit:2197
+#: ../dgit:2225
 msgid "Dpkg::Vendor `current vendor'"
 msgstr ""
 
-#: ../dgit:2199
+#: ../dgit:2227
 msgid "(base) distro being accessed"
 msgstr ""
 
-#: ../dgit:2201
+#: ../dgit:2229
 msgid "(nominal) distro being accessed"
 msgstr ""
 
-#: ../dgit:2206
+#: ../dgit:2234
 #, perl-format
 msgid "build-products-dir %s is not accessible: %s\n"
 msgstr ""
 
-#: ../dgit:2231
+#: ../dgit:2259
 #, perl-format
 msgid ""
 "%s: found orig(s) in .. missing from build-products-dir, transferring:\n"
 msgstr ""
 
-#: ../dgit:2235
+#: ../dgit:2263
 #, perl-format
 msgid "check orig file %s in bpd %s: %s"
 msgstr ""
 
-#: ../dgit:2237
+#: ../dgit:2265
 #, perl-format
 msgid "check orig file %s in ..: %s"
 msgstr ""
 
-#: ../dgit:2240
+#: ../dgit:2268
 #, perl-format
 msgid "check target of orig symlink %s in ..: %s"
 msgstr ""
 
-#: ../dgit:2249
+#: ../dgit:2277
 #, perl-format
 msgid "%s: cloned orig symlink from ..: %s\n"
 msgstr ""
 
-#: ../dgit:2253
+#: ../dgit:2281
 #, perl-format
 msgid "%s: hardlinked orig from ..: %s\n"
 msgstr ""
 
-#: ../dgit:2256
+#: ../dgit:2284
 #, perl-format
 msgid "failed to make %s a hardlink to %s: %s"
 msgstr ""
 
-#: ../dgit:2262
+#: ../dgit:2290
 #, perl-format
 msgid "%s: symmlinked orig from .. on other filesystem: %s\n"
 msgstr ""
 
-#: ../dgit:2294 ../dgit:2299
-#, perl-format
-msgid "accessing %s: %s"
-msgstr ""
-
-#: ../dgit:2314 ../dgit:2321
-#, perl-format
-msgid "saving %s: %s"
-msgstr ""
-
-#: ../dgit:2386
+#: ../dgit:2361
 #, perl-format
 msgid "dgit (child): exec %s: %s"
 msgstr ""
 
-#: ../dgit:2450 ../dgit:5974
-msgid "source package"
-msgstr ""
-
-#: ../dgit:2468
+#: ../dgit:2423
 msgid "package changelog"
 msgstr ""
 
-#: ../dgit:2508
+#: ../dgit:2463
 msgid "package changelog has no entries!"
 msgstr ""
 
-#: ../dgit:2527
+#: ../dgit:2532 ../dgit:2537
+#, perl-format
+msgid "accessing %s: %s"
+msgstr ""
+
+#: ../dgit:2552 ../dgit:2559
 #, perl-format
-msgid "Import %s"
+msgid "saving %s: %s"
 msgstr ""
 
-#: ../dgit:2608
+#: ../dgit:2585 ../dgit:6078
+msgid "source package"
+msgstr ""
+
+#: ../dgit:2665
 #, perl-format
 msgid "%s: trying slow absurd-git-apply..."
 msgstr ""
 
-#: ../dgit:2627
+#: ../dgit:2684
 #, perl-format
 msgid "%s failed: %s\n"
 msgstr ""
 
-#: ../dgit:2636
+#: ../dgit:2693
 #, perl-format
 msgid ""
 "gbp-pq import and dpkg-source disagree!\n"
@@ -560,21 +529,16 @@ msgid ""
 " dpkg-source --before-build gave tree %s\n"
 msgstr ""
 
-#: ../dgit:2651
+#: ../dgit:2713
 #, perl-format
 msgid "synthesised git commit from .dsc %s"
 msgstr ""
 
-#: ../dgit:2655
+#: ../dgit:2717
 msgid "Import of source package"
 msgstr ""
 
-#: ../dgit:2668
-#, perl-format
-msgid "Record %s (%s) in archive suite %s\n"
-msgstr ""
-
-#: ../dgit:2672
+#: ../dgit:2737
 #, perl-format
 msgid ""
 "\n"
@@ -583,51 +547,51 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:2714
+#: ../dgit:2779
 #, perl-format
 msgid "using existing %s"
 msgstr ""
 
-#: ../dgit:2718
+#: ../dgit:2783
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (perhaps you should delete this "
 "file?)"
 msgstr ""
 
-#: ../dgit:2722
+#: ../dgit:2787
 #, perl-format
 msgid "need to fetch correct version of %s"
 msgstr ""
 
-#: ../dgit:2738
+#: ../dgit:2803
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (got wrong file from archive!)"
 msgstr ""
 
-#: ../dgit:2833
+#: ../dgit:2898
 msgid "too many iterations trying to get sane fetch!"
 msgstr ""
 
-#: ../dgit:2848
+#: ../dgit:2913
 #, perl-format
 msgid "warning: git ls-remote %s reported %s; this is silly, ignoring it.\n"
 msgstr ""
 
-#: ../dgit:2892
+#: ../dgit:2957
 #, perl-format
 msgid "warning: git fetch %s created %s; this is silly, deleting it.\n"
 msgstr ""
 
-#: ../dgit:2907
+#: ../dgit:2972
 msgid ""
 "--dry-run specified but we actually wanted the results of git fetch,\n"
 "so this is not going to work.  Try running dgit fetch first,\n"
 "or using --damp-run instead of --dry-run.\n"
 msgstr ""
 
-#: ../dgit:2912
+#: ../dgit:2977
 #, perl-format
 msgid ""
 "warning: git ls-remote suggests we want %s\n"
@@ -637,49 +601,24 @@ msgid ""
 "warning:  Will try again...\n"
 msgstr ""
 
-#: ../dgit:2979
-#, perl-format
-msgid "Not updating %s from %s to %s.\n"
-msgstr ""
-
-#: ../dgit:3028
-#, perl-format
-msgid "%s: NO git hash"
-msgstr ""
-
-#: ../dgit:3032
-#, perl-format
-msgid "%s: specified git info (%s)"
-msgstr ""
-
-#: ../dgit:3039
-#, perl-format
-msgid "%s: specified git hash"
-msgstr ""
-
-#: ../dgit:3041
-#, perl-format
-msgid "%s: invalid Dgit info"
-msgstr ""
-
-#: ../dgit:3063
+#: ../dgit:3124
 #, perl-format
 msgid "not chasing .dsc distro %s: not fetching %s"
 msgstr ""
 
-#: ../dgit:3068
+#: ../dgit:3129
 #, perl-format
 msgid ".dsc names distro %s: fetching %s"
 msgstr ""
 
-#: ../dgit:3073
+#: ../dgit:3134
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
 "for which we have no configured url and .dsc provides no hint\n"
 msgstr ""
 
-#: ../dgit:3083
+#: ../dgit:3144
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
@@ -688,54 +627,54 @@ msgid ""
 "(can be overridden by config - consult documentation)\n"
 msgstr ""
 
-#: ../dgit:3103
+#: ../dgit:3164
 msgid "rewrite map"
 msgstr ""
 
-#: ../dgit:3110
+#: ../dgit:3171
 msgid "server's git history rewrite map contains a relevant entry!"
 msgstr ""
 
-#: ../dgit:3114
+#: ../dgit:3175
 msgid "using rewritten git hash in place of .dsc value"
 msgstr ""
 
-#: ../dgit:3116
+#: ../dgit:3177
 msgid "server data says .dsc hash is to be disregarded"
 msgstr ""
 
-#: ../dgit:3123
+#: ../dgit:3184
 msgid "additional commits"
 msgstr ""
 
-#: ../dgit:3126
+#: ../dgit:3187
 #, perl-format
 msgid ""
 ".dsc Dgit metadata requires commit %s\n"
 "but we could not obtain that object anywhere.\n"
 msgstr ""
 
-#: ../dgit:3151
+#: ../dgit:3212
 msgid "last upload to archive"
 msgstr ""
 
-#: ../dgit:3155
+#: ../dgit:3216
 msgid "no version available from the archive"
 msgstr ""
 
-#: ../dgit:3238
+#: ../dgit:3299
 msgid "dgit suite branch on dgit git server"
 msgstr ""
 
-#: ../dgit:3245
+#: ../dgit:3306
 msgid "dgit client's archive history view"
 msgstr ""
 
-#: ../dgit:3250
+#: ../dgit:3311
 msgid "Dgit field in .dsc from archive"
 msgstr ""
 
-#: ../dgit:3278
+#: ../dgit:3339
 #, perl-format
 msgid ""
 "\n"
@@ -745,15 +684,15 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:3291
+#: ../dgit:3352
 msgid "archive .dsc names newer git commit"
 msgstr ""
 
-#: ../dgit:3294
+#: ../dgit:3355
 msgid "archive .dsc names other git commit, fixing up"
 msgstr ""
 
-#: ../dgit:3315
+#: ../dgit:3376
 #, perl-format
 msgid ""
 "\n"
@@ -761,7 +700,7 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#: ../dgit:3324
+#: ../dgit:3385
 #, perl-format
 msgid ""
 "\n"
@@ -771,7 +710,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3409
+#: ../dgit:3470
 #, perl-format
 msgid ""
 "Record %s (%s) in archive suite %s\n"
@@ -779,19 +718,19 @@ msgid ""
 "Record that\n"
 msgstr ""
 
-#: ../dgit:3422
+#: ../dgit:3483
 msgid "should be treated as descended from\n"
 msgstr ""
 
-#: ../dgit:3440
+#: ../dgit:3501
 msgid "dgit repo server tip (last push)"
 msgstr ""
 
-#: ../dgit:3442
+#: ../dgit:3503
 msgid "local tracking tip (last fetch)"
 msgstr ""
 
-#: ../dgit:3453
+#: ../dgit:3514
 #, perl-format
 msgid ""
 "\n"
@@ -801,30 +740,30 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3468
+#: ../dgit:3529
 msgid "fetched source tree"
 msgstr ""
 
-#: ../dgit:3504
+#: ../dgit:3565
 msgid "debian/changelog merge driver"
 msgstr ""
 
-#: ../dgit:3569
+#: ../dgit:3630
 msgid ""
 "[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes\n"
 " not doing further gitattributes setup\n"
 msgstr ""
 
-#: ../dgit:3583
+#: ../dgit:3644
 msgid "# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)\n"
 msgstr ""
 
-#: ../dgit:3598
+#: ../dgit:3659
 #, perl-format
 msgid "install %s: %s"
 msgstr ""
 
-#: ../dgit:3625
+#: ../dgit:3686
 #, perl-format
 msgid ""
 "dgit: warning: %s contains .gitattributes\n"
@@ -832,30 +771,30 @@ msgid ""
 "tree.\n"
 msgstr ""
 
-#: ../dgit:3647
+#: ../dgit:3708
 #, perl-format
 msgid "fetching %s..."
 msgstr ""
 
-#: ../dgit:3655
+#: ../dgit:3716
 #, perl-format
 msgid "failed to obtain %s: %s"
 msgstr ""
 
-#: ../dgit:3694
+#: ../dgit:3755
 #, perl-format
 msgid "package %s missing in (base suite) %s"
 msgstr ""
 
-#: ../dgit:3726
+#: ../dgit:3787
 msgid "local combined tracking branch"
 msgstr ""
 
-#: ../dgit:3728
+#: ../dgit:3789
 msgid "archive seems to have rewound: local tracking branch is ahead!"
 msgstr ""
 
-#: ../dgit:3767
+#: ../dgit:3828
 #, perl-format
 msgid ""
 "Combine archive branches %s [dgit]\n"
@@ -863,7 +802,7 @@ msgid ""
 "Input branches:\n"
 msgstr ""
 
-#: ../dgit:3781
+#: ../dgit:3842
 msgid ""
 "\n"
 "Key\n"
@@ -872,613 +811,257 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:3796
+#: ../dgit:3857
 #, perl-format
 msgid "calculated combined tracking suite %s"
 msgstr ""
 
-#: ../dgit:3814
+#: ../dgit:3875
 #, perl-format
 msgid "ready for work in %s"
 msgstr ""
 
-#: ../dgit:3822
+#: ../dgit:3893
 msgid "dry run makes no sense with clone"
 msgstr ""
 
-#: ../dgit:3837
+#: ../dgit:3908
 #, perl-format
 msgid "create `%s': %s"
 msgstr ""
 
-#: ../dgit:3853
+#: ../dgit:3920
 msgid "fetching existing git history"
 msgstr ""
 
-#: ../dgit:3857
+#: ../dgit:3923
 msgid "starting new git history"
 msgstr ""
 
-#: ../dgit:3883
+#: ../dgit:3948
 #, perl-format
 msgid ""
 "FYI: Vcs-Git in %s has different url to your vcs-git remote.\n"
 " Your vcs-git remote url may be out of date.  Use dgit update-vcs-git ?\n"
 msgstr ""
 
-#: ../dgit:3888
+#: ../dgit:3953
 #, perl-format
 msgid "fetched into %s"
 msgstr ""
 
-#: ../dgit:3900
+#: ../dgit:3965
 #, perl-format
 msgid "Merge from %s [dgit]"
 msgstr ""
 
-#: ../dgit:3902
+#: ../dgit:3967
 #, perl-format
 msgid "fetched to %s and merged into HEAD"
 msgstr ""
 
-#: ../dgit:3910
+#: ../dgit:3975
 #, perl-format
 msgid "git tree contains %s"
 msgstr ""
 
-#: ../dgit:3921
+#: ../dgit:3986
 msgid "you have uncommitted changes to critical files, cannot continue:\n"
 msgstr ""
 
-#: ../dgit:3940
+#: ../dgit:4005
 #, perl-format
 msgid ""
 "quilt fixup required but quilt mode is `nofix'\n"
 "HEAD commit%s differs from tree implied by debian/patches%s"
 msgstr ""
 
-#: ../dgit:3957
+#: ../dgit:4022
 msgid "nothing quilty to commit, ok."
 msgstr ""
 
-#: ../dgit:3960
+#: ../dgit:4025
 msgid " (wanted to commit patch update)"
 msgstr ""
 
-#: ../dgit:3964
+#: ../dgit:4029
 msgid ""
 "Commit Debian 3.0 (quilt) metadata\n"
 "\n"
 msgstr ""
 
-#: ../dgit:4007
+#: ../dgit:4073
 #, perl-format
 msgid ""
 "Not doing any fixup of `%s' due to ----no-quilt-fixup or --quilt=nocheck"
 msgstr ""
 
-#: ../dgit:4012
+#: ../dgit:4078
 #, perl-format
 msgid "Format `%s', need to check/update patch stack"
 msgstr ""
 
-#: ../dgit:4022
+#: ../dgit:4088
 #, perl-format
 msgid "commit id %s"
 msgstr ""
 
-#: ../dgit:4028
+#: ../dgit:4094
 #, perl-format
 msgid "and left in %s"
 msgstr ""
 
-#: ../dgit:4054
+#: ../dgit:4120
 #, perl-format
 msgid "Wanted tag %s (%s) on dgit server, but not found\n"
 msgstr ""
 
-#: ../dgit:4057
+#: ../dgit:4123
 #, perl-format
 msgid "Wanted tag %s (one of: %s) on dgit server, but not found\n"
 msgstr ""
 
-#: ../dgit:4065
+#: ../dgit:4131
 #, perl-format
 msgid "%s (%s) .. %s (%s) is not fast forward\n"
 msgstr ""
 
-#: ../dgit:4074
+#: ../dgit:4140
 msgid "version currently in archive"
 msgstr ""
 
-#: ../dgit:4083
+#: ../dgit:4149
 #, perl-format
 msgid "Checking package changelog for archive version %s ..."
 msgstr ""
 
-#: ../dgit:4091
+#: ../dgit:4157
 #, perl-format
 msgid "%s field from dpkg-parsechangelog %s"
 msgstr ""
 
-#: ../dgit:4101
+#: ../dgit:4168
 #, perl-format
 msgid "Perhaps debian/changelog does not mention %s ?"
 msgstr ""
 
-#: ../dgit:4104
+#: ../dgit:4171
 #, perl-format
 msgid ""
 "%s is %s\n"
 "Your tree seems to based on earlier (not uploaded) %s.\n"
 msgstr ""
 
-#: ../dgit:4118
+#: ../dgit:4185
 #, perl-format
 msgid "Declaring that HEAD includes all changes in %s..."
 msgstr ""
 
-#: ../dgit:4174
+#: ../dgit:4241
 msgid "Checking that HEAD includes all changes in archive..."
 msgstr ""
 
-#: ../dgit:4183
+#: ../dgit:4250
 msgid "maintainer view tag"
 msgstr ""
 
-#: ../dgit:4185
+#: ../dgit:4252
 msgid "dgit view tag"
 msgstr ""
 
-#: ../dgit:4186
+#: ../dgit:4253
 msgid "current archive contents"
 msgstr ""
 
-#: ../dgit:4199
+#: ../dgit:4266
 msgid ""
 "| Not fast forward; maybe --overwrite is needed ?  Please see dgit(1).\n"
 msgstr ""
 
-#: ../dgit:4209
+#: ../dgit:4276
 #, perl-format
 msgid "Declare fast forward from %s\n"
 msgstr ""
 
-#: ../dgit:4210
+#: ../dgit:4277
 #, perl-format
 msgid "Make fast forward from %s\n"
 msgstr ""
 
-#: ../dgit:4214
+#: ../dgit:4281
 #, perl-format
 msgid "Made pseudo-merge of %s into dgit view."
 msgstr ""
 
-#: ../dgit:4227
+#: ../dgit:4294
 #, perl-format
 msgid "Declare fast forward from %s"
 msgstr ""
 
-#: ../dgit:4235
+#: ../dgit:4302
 #, perl-format
 msgid "Make pseudo-merge of %s into your HEAD."
 msgstr ""
 
-#: ../dgit:4247
+#: ../dgit:4314
 #, perl-format
 msgid "-p specified %s but changelog specified %s"
 msgstr ""
 
-#: ../dgit:4269
+#: ../dgit:4336
 #, perl-format
 msgid "%s is for %s %s but debian/changelog is for %s %s"
 msgstr ""
 
-#: ../dgit:4330
+#: ../dgit:4390
 #, perl-format
 msgid "changes field %s `%s' does not match changelog `%s'"
 msgstr ""
 
-#: ../dgit:4358
-#, perl-format
-msgid "%s release %s for %s (%s) [dgit]\n"
-msgstr ""
-
-#: ../dgit:4371
-#, perl-format
-msgid ""
-"%s release %s for %s (%s)\n"
-"(maintainer view tag generated by dgit --quilt=%s)\n"
-msgstr ""
-
-#: ../dgit:4423
-msgid ""
-"Push failed, while checking state of the archive.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4432
-msgid ""
-"package appears to be new in this suite; if this is intentional, use --new"
-msgstr ""
-
-#: ../dgit:4437
-msgid ""
-"Push failed, while preparing your push.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4460
-#, perl-format
-msgid "looked for .dsc %s, but %s; maybe you forgot to build"
-msgstr ""
-
-#: ../dgit:4477
-#, perl-format
-msgid ""
-"Branch is managed by git-debrebase (%s\n"
-"exists), but quilt mode (%s) implies a split view.\n"
-"Pass the right --quilt option or adjust your git config.\n"
-"Or, maybe, run git-debrebase forget-was-ever-debrebase.\n"
-msgstr ""
-
-#: ../dgit:4501
-#, perl-format
-msgid ""
-"--quilt=%s but no cached dgit view:\n"
-" perhaps HEAD changed since dgit build[-source] ?"
-msgstr ""
-
-#: ../dgit:4532
-msgid ""
-"dgit push: HEAD is not a descendant of the archive's version.\n"
-"To overwrite the archive's contents, pass --overwrite[=VERSION].\n"
-"To rewind history, if permitted by the archive, use --deliberately-not-fast-"
-"forward."
-msgstr ""
-
-#: ../dgit:4542
-#, perl-format
-msgid "checking that %s corresponds to HEAD"
-msgstr ""
-
-#: ../dgit:4576 ../dgit:4588
-#, perl-format
-msgid "HEAD specifies a different tree to %s:\n"
-msgstr ""
-
-#: ../dgit:4582
-#, perl-format
-msgid ""
-"There is a problem with your source tree (see dgit(7) for some hints).\n"
-"To see a full diff, run git diff %s %s\n"
-msgstr ""
-
-#: ../dgit:4592
-#, perl-format
-msgid ""
-"Perhaps you forgot to build.  Or perhaps there is a problem with your\n"
-" source tree (see dgit(7) for some hints).  To see a full diff, run\n"
-"   git diff %s %s\n"
-msgstr ""
-
-#: ../dgit:4603
-#, perl-format
-msgid ""
-"failed to find unique changes file (looked for %s in %s); perhaps you need "
-"to use dgit -C"
-msgstr ""
-
-#: ../dgit:4625
-msgid "uploading binaries, although distro policy is source only"
-msgstr ""
-
-#: ../dgit:4629
-msgid "source-only upload, although distro policy requires .debs"
-msgstr ""
-
-#: ../dgit:4633
-#, perl-format
-msgid ""
-"source-only upload, even though package is entirely NEW\n"
-"(this is contrary to policy in %s)"
-msgstr ""
-
-#: ../dgit:4640
-#, perl-format
-msgid "unknown source-only-uploads policy `%s'"
-msgstr ""
-
-#: ../dgit:4684
-msgid ""
-"Push failed, while signing the tag.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-
-#: ../dgit:4697
-msgid ""
-"Push failed, *after* signing the tag.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4714
-msgid ""
-"Push failed, while updating the remote git repository - see messages above.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4731
-msgid ""
-"Push failed, while obtaining signatures on the .changes and .dsc.\n"
-"If it was just that the signature failed, you may try again by using\n"
-"debsign by hand to sign the changes file (see the command dgit tried,\n"
-"above), and then dput that changes file to complete the upload.\n"
-"If you need to change the package, you must use a new version number.\n"
-msgstr ""
-
-#: ../dgit:4762
-#, perl-format
-msgid "pushed and uploaded %s"
-msgstr ""
-
-#: ../dgit:4774
-msgid "-p is not allowed with clone; specify as argument instead"
-msgstr ""
-
-#: ../dgit:4785
-msgid "incorrect arguments to dgit clone"
-msgstr ""
-
-#: ../dgit:4791 ../git-debrebase:1839
-#, perl-format
-msgid "%s already exists"
-msgstr ""
-
-#: ../dgit:4805
-#, perl-format
-msgid "remove %s: %s\n"
-msgstr ""
-
-#: ../dgit:4809
-#, perl-format
-msgid "check whether to remove %s: %s\n"
-msgstr ""
-
-#: ../dgit:4847
-msgid "incorrect arguments to dgit fetch or dgit pull"
-msgstr ""
-
-#: ../dgit:4864
-#, perl-format
-msgid "dgit pull not yet supported in split view mode (--quilt=%s)\n"
-msgstr ""
-
-#: ../dgit:4873
-msgid "dgit checkout needs a suite argument"
-msgstr ""
-
-#: ../dgit:4935
-#, perl-format
-msgid "setting up vcs-git: %s\n"
-msgstr ""
-
-#: ../dgit:4938
-#, perl-format
-msgid "vcs git already configured: %s\n"
-msgstr ""
-
-#: ../dgit:4940
-#, perl-format
-msgid "changing vcs-git url to: %s\n"
-msgstr ""
-
-#: ../dgit:4945
-#, perl-format
-msgid "fetching (%s)\n"
-msgstr ""
-
-#: ../dgit:4960
-#, perl-format
-msgid "incorrect arguments to dgit %s"
-msgstr ""
-
-#: ../dgit:4971
-#, perl-format
-msgid "dgit %s: changelog specifies %s (%s) but command line specifies %s"
-msgstr ""
-
-#: ../dgit:5009
-#, perl-format
-msgid ""
-"build host has dgit rpush protocol versions %s but invocation host has %s"
-msgstr ""
-
-#: ../dgit:5089
-#, perl-format
-msgid "create %s: %s"
-msgstr ""
-
-#: ../dgit:5126
-#, perl-format
-msgid "build host child failed: %s"
-msgstr ""
-
-#: ../dgit:5129
-msgid "all done\n"
-msgstr ""
-
-#: ../dgit:5138
-#, perl-format
-msgid "file %s (%s) twice"
-msgstr ""
-
-#: ../dgit:5146
-msgid "bad param spec"
-msgstr ""
-
-#: ../dgit:5152
-msgid "bad previously spec"
-msgstr ""
-
-#: ../dgit:5171
-#, perl-format
-msgid ""
-"rpush negotiated protocol version %s which does not support quilt mode %s"
-msgstr ""
-
-#: ../dgit:5216
-#, perl-format
-msgid "buildinfo mismatch in field %s"
-msgstr ""
-
-#: ../dgit:5219
-#, perl-format
-msgid "buildinfo contains forbidden field %s"
-msgstr ""
-
-#: ../dgit:5260
-msgid "remote changes file"
-msgstr ""
-
-#: ../dgit:5335
-msgid "not a plain file or symlink\n"
-msgstr ""
-
-#: ../dgit:5341
-msgid "mode or type changed\n"
-msgstr ""
-
-#: ../dgit:5342
-msgid "modified symlink\n"
-msgstr ""
-
-#: ../dgit:5345
-msgid "deletion of symlink\n"
-msgstr ""
-
-#: ../dgit:5349
-msgid "creation with non-default mode\n"
-msgstr ""
-
-#: ../dgit:5379
-msgid "dgit view: changes are required..."
-msgstr ""
-
-#: ../dgit:5408
-#, perl-format
-msgid ""
-"\n"
-"For full diff showing the problem(s), type:\n"
-" %s\n"
-msgstr ""
-
-#: ../dgit:5415
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-unapplied git tree\n"
-" but git tree differs from orig in upstream files."
-msgstr ""
-
-#: ../dgit:5421
-msgid ""
-"\n"
-" ... debian/patches is missing; perhaps this is a patch queue branch?"
-msgstr ""
-
-#: ../dgit:5428
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-applied git tree\n"
-" but git tree differs from result of applying debian/patches to upstream\n"
-msgstr ""
-
-#: ../dgit:5435
-msgid "dgit view: creating patches-applied version using gbp pq"
-msgstr ""
-
-#: ../dgit:5444
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying that HEAD is for use with a\n"
-" tool which does not create patches for changes to upstream\n"
-" .gitignores: but, such patches exist in debian/patches.\n"
-msgstr ""
-
-#: ../dgit:5453
-msgid "dgit view: creating patch to represent .gitignore changes"
-msgstr ""
-
-#: ../dgit:5458
-#, perl-format
-msgid "%s already exists; but want to create it to record .gitignore changes"
-msgstr ""
-
-#: ../dgit:5463
-msgid ""
-"Subject: Update .gitignore from Debian packaging branch\n"
-"\n"
-"The Debian packaging git branch contains these updates to the upstream\n"
-".gitignore file(s).  This patch is autogenerated, to provide these\n"
-"updates to users of the official Debian archive view of the package.\n"
-msgstr ""
-
-#: ../dgit:5485
-msgid "Commit patch to update .gitignore\n"
-msgstr ""
-
-#: ../dgit:5499
-msgid "converted"
-msgstr ""
-
-#: ../dgit:5500
-#, perl-format
-msgid "dgit view: created (%s)"
-msgstr ""
-
-#: ../dgit:5565
+#: ../dgit:5650
 msgid "maximum search space exceeded"
 msgstr ""
 
-#: ../dgit:5583
+#: ../dgit:5668
 #, perl-format
 msgid "has %s not %s"
 msgstr ""
 
-#: ../dgit:5592
+#: ../dgit:5677
 msgid "root commit"
 msgstr ""
 
-#: ../dgit:5598
+#: ../dgit:5683
 #, perl-format
 msgid "merge (%s nontrivial parents)"
 msgstr ""
 
-#: ../dgit:5610
+#: ../dgit:5695
 #, perl-format
 msgid "changed %s"
 msgstr ""
 
-#: ../dgit:5629
+#: ../dgit:5714
 #, perl-format
 msgid ""
 "\n"
 "%s: error: quilt fixup cannot be linear.  Stopped at:\n"
 msgstr ""
 
-#: ../dgit:5636
+#: ../dgit:5721
 #, perl-format
 msgid "%s:  %s: %s\n"
 msgstr ""
 
-#: ../dgit:5648
+#: ../dgit:5733
 msgid "quilt history linearisation failed.  Search `quilt fixup' in dgit(7).\n"
 msgstr ""
 
-#: ../dgit:5651
+#: ../dgit:5736
 msgid "quilt fixup cannot be linear, smashing..."
 msgstr ""
 
-#: ../dgit:5663
+#: ../dgit:5748
 #, perl-format
 msgid ""
 "Automatically generated patch (%s)\n"
@@ -1486,68 +1069,84 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:5670
+#: ../dgit:5755
 msgid "quiltify linearisation planning successful, executing..."
 msgstr ""
 
-#: ../dgit:5704
+#: ../dgit:5789
 msgid "contains unexpected slashes\n"
 msgstr ""
 
-#: ../dgit:5705
+#: ../dgit:5790
 msgid "contains leading punctuation\n"
 msgstr ""
 
-#: ../dgit:5706
+#: ../dgit:5791
 msgid "contains bad character(s)\n"
 msgstr ""
 
-#: ../dgit:5707
+#: ../dgit:5792
 msgid "is series file\n"
 msgstr ""
 
-#: ../dgit:5708
+#: ../dgit:5793
 msgid "too long\n"
 msgstr ""
 
-#: ../dgit:5712
+#: ../dgit:5797
 #, perl-format
 msgid "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s"
 msgstr ""
 
-#: ../dgit:5741
+#: ../dgit:5826
 #, perl-format
 msgid "dgit: patch title transliteration error: %s"
 msgstr ""
 
-#: ../dgit:5884
+#: ../dgit:5909
+#, perl-format
+msgid ""
+"quilt mode %s does not make sense (or is not supported) with single-debian-"
+"patch"
+msgstr ""
+
+#: ../dgit:5927
+msgid "converted"
+msgstr ""
+
+#: ../dgit:5928
+#, perl-format
+msgid "dgit view: created (%s)"
+msgstr ""
+
+#: ../dgit:5982
 msgid "Commit removal of .pc (quilt series tracking data)\n"
 msgstr ""
 
-#: ../dgit:5894
+#: ../dgit:5992
 msgid "starting quiltify (single-debian-patch)"
 msgstr ""
 
-#: ../dgit:5996
+#: ../dgit:6102
 #, perl-format
 msgid "dgit: split brain (separate dgit view) may be needed (--quilt=%s)."
 msgstr ""
 
-#: ../dgit:6027
+#: ../dgit:6134
 #, perl-format
 msgid "dgit view: found cached (%s)"
 msgstr ""
 
-#: ../dgit:6032
+#: ../dgit:6139
 msgid "dgit view: found cached, no changes required"
 msgstr ""
 
-#: ../dgit:6043
+#: ../dgit:6174
 #, perl-format
 msgid "examining quilt state (multiple patches, %s mode)"
 msgstr ""
 
-#: ../dgit:6134
+#: ../dgit:6288
 msgid ""
 "failed to apply your git tree's patch stack (from debian/patches/) to\n"
 " the corresponding upstream tarball(s).  Your source tree and .orig\n"
@@ -1555,58 +1154,84 @@ msgid ""
 " anomaly (depending on the quilt mode).  Please see --quilt= in dgit(1).\n"
 msgstr ""
 
-#: ../dgit:6148
+#: ../dgit:6302
 msgid "Tree already contains .pc - will use it then delete it."
 msgstr ""
 
-#: ../dgit:6185
+#: ../dgit:6336
+msgid "baredebian quilt fixup: could not find any origs"
+msgstr ""
+
+#: ../dgit:6349
+msgid "tarball"
+msgstr ""
+
+#: ../dgit:6367
+#, perl-format
+msgid "Combine orig tarballs for %s %s"
+msgstr ""
+
+#: ../dgit:6383
+msgid "tarballs"
+msgstr ""
+
+#: ../dgit:6397
+msgid "upstream"
+msgstr ""
+
+#: ../dgit:6421
 #, perl-format
 msgid "%s: base trees orig=%.20s o+d/p=%.20s"
 msgstr ""
 
-#: ../dgit:6188
+#: ../dgit:6431
 #, perl-format
 msgid ""
 "%s: quilt differences: src:  %s orig %s     gitignores:  %s orig %s\n"
-"%s: quilt differences:      HEAD %s o+d/p               HEAD %s o+d/p"
+"%s: quilt differences: %9.00009s %s o+d/p          %9.00009s %s o+d/p"
 msgstr ""
 
-#: ../dgit:6194
+#: ../dgit:6440
 #, perl-format
 msgid "dgit:  cannot represent change: %s: %s\n"
 msgstr ""
 
-#: ../dgit:6198
+#: ../dgit:6444
 msgid ""
 "HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'\n"
 msgstr ""
 
-#: ../dgit:6205
+#: ../dgit:6451
+msgid ""
+"This has only a debian/ directory; you probably want --quilt=bare debian."
+msgstr ""
+
+#: ../dgit:6455
 msgid "This might be a patches-unapplied branch."
 msgstr ""
 
-#: ../dgit:6208
+#: ../dgit:6458
 msgid "This might be a patches-applied branch."
 msgstr ""
 
-#: ../dgit:6211
+#: ../dgit:6461
 msgid "Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?"
 msgstr ""
 
-#: ../dgit:6214
+#: ../dgit:6464
 msgid "Warning: Tree has .gitattributes.  See GITATTRIBUTES in dgit(7)."
 msgstr ""
 
-#: ../dgit:6218
+#: ../dgit:6468
 msgid "Maybe orig tarball(s) are not identical to git representation?"
 msgstr ""
 
-#: ../dgit:6227
+#: ../dgit:6479
 #, perl-format
 msgid "starting quiltify (multiple patches, %s mode)"
 msgstr ""
 
-#: ../dgit:6265
+#: ../dgit:6518
 msgid ""
 "\n"
 "dgit: Building, or cleaning with rules target, in patches-unapplied tree.\n"
@@ -1615,102 +1240,137 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../dgit:6277
+#: ../dgit:6530
 msgid "dgit: Unapplying patches again to tidy up the tree."
 msgstr ""
 
-#: ../dgit:6306
+#: ../dgit:6559
 msgid ""
 "If this is just missing .gitignore entries, use a different clean\n"
 "mode, eg --clean=dpkg-source,no-check (-wdn/-wddn) to ignore them\n"
 "or --clean=git (-wg/-wgf) to use `git clean' instead.\n"
 msgstr ""
 
-#: ../dgit:6318
+#: ../dgit:6571
 msgid "tree contains uncommitted files and --clean=check specified"
 msgstr ""
 
-#: ../dgit:6321
+#: ../dgit:6574
 msgid "tree contains uncommitted files (NB dgit didn't run rules clean)"
 msgstr ""
 
-#: ../dgit:6324
+#: ../dgit:6577
 msgid ""
 "tree contains uncommited, untracked, unignored files\n"
 "You can use --clean=git[-ff],always (-wga/-wgfa) to delete them."
 msgstr ""
 
-#: ../dgit:6342
+#: ../dgit:6590
+#, perl-format
+msgid ""
+"quilt mode %s (generally needs untracked upstream files)\n"
+"contradicts clean mode %s (which would delete them)\n"
+msgstr ""
+
+#: ../dgit:6607
 msgid "tree contains uncommitted files (after running rules clean)"
 msgstr ""
 
-#: ../dgit:6356
+#: ../dgit:6621
 msgid "clean takes no additional arguments"
 msgstr ""
 
-#: ../dgit:6369
+#: ../dgit:6640
+#, perl-format
+msgid "-p specified package %s, but changelog says %s"
+msgstr ""
+
+#: ../dgit:6650
+msgid ""
+"dgit: --include-dirty is not supported with split view (including with view-"
+"splitting quilt modes)"
+msgstr ""
+
+#: ../dgit:6659
 #, perl-format
-msgid "-p is not allowed with dgit %s"
+msgid "dgit: --quilt=%s, %s"
+msgstr ""
+
+#: ../dgit:6663
+msgid "dgit: --upstream-commitish only makes sense with --quilt=baredebian"
 msgstr ""
 
-#: ../dgit:6408
+#: ../dgit:6698
 #, perl-format
 msgid "remove old changes file %s: %s"
 msgstr ""
 
-#: ../dgit:6410
+#: ../dgit:6700
 #, perl-format
 msgid "would remove %s"
 msgstr ""
 
-#: ../dgit:6436
+#: ../dgit:6718
+#, perl-format
+msgid "warning: dgit option %s must be passed before %s on dgit command line\n"
+msgstr ""
+
+#: ../dgit:6725
+#, perl-format
+msgid ""
+"warning: option %s should probably be passed to dgit before %s sub-command "
+"on the dgit command line, so that it is seen by dgit and not simply passed "
+"to %s\n"
+msgstr ""
+
+#: ../dgit:6751
 msgid "archive query failed (queried because --since-version not specified)"
 msgstr ""
 
-#: ../dgit:6442
+#: ../dgit:6757
 #, perl-format
 msgid "changelog will contain changes since %s"
 msgstr ""
 
-#: ../dgit:6445
+#: ../dgit:6760
 msgid "package seems new, not specifying -v<version>"
 msgstr ""
 
-#: ../dgit:6488
+#: ../dgit:6803
 msgid "Wanted to build nothing!"
 msgstr ""
 
-#: ../dgit:6526
+#: ../dgit:6841
 #, perl-format
 msgid "only one changes file from build (%s)\n"
 msgstr ""
 
-#: ../dgit:6533
+#: ../dgit:6848
 #, perl-format
 msgid "%s found in binaries changes file %s"
 msgstr ""
 
-#: ../dgit:6540
+#: ../dgit:6855
 #, perl-format
 msgid "%s unexpectedly not created by build"
 msgstr ""
 
-#: ../dgit:6544
+#: ../dgit:6859
 #, perl-format
 msgid "install new changes %s{,.inmulti}: %s"
 msgstr ""
 
-#: ../dgit:6549
+#: ../dgit:6864
 #, perl-format
 msgid "wrong number of different changes files (%s)"
 msgstr ""
 
-#: ../dgit:6552
+#: ../dgit:6867
 #, perl-format
 msgid "build successful, results in %s\n"
 msgstr ""
 
-#: ../dgit:6565
+#: ../dgit:6880
 #, perl-format
 msgid ""
 "changes files other than source matching %s already present; building would "
@@ -1718,136 +1378,136 @@ msgid ""
 "Suggest you delete %s.\n"
 msgstr ""
 
-#: ../dgit:6583
+#: ../dgit:6898
 msgid "build successful\n"
 msgstr ""
 
-#: ../dgit:6590
+#: ../dgit:6906
 #, perl-format
 msgid ""
 "%s: warning: build-products-dir set, but not supported by dpkg-buildpackage\n"
 "%s: warning: build-products-dir will be ignored; files will go to ..\n"
 msgstr ""
 
-#: ../dgit:6700
+#: ../dgit:7017
 #, perl-format
 msgid "remove %s: %s"
 msgstr ""
 
-#: ../dgit:6735
+#: ../dgit:7054
 msgid "--include-dirty not supported with --build-products-dir, sorry"
 msgstr ""
 
-#: ../dgit:6755
+#: ../dgit:7074
 #, perl-format
 msgid "put in place new built file (%s): %s"
 msgstr ""
 
-#: ../dgit:6768
+#: ../dgit:7087
 msgid "build-source takes no additional arguments"
 msgstr ""
 
-#: ../dgit:6772
+#: ../dgit:7091
 #, perl-format
 msgid "source built, results in %s and %s"
 msgstr ""
 
-#: ../dgit:6779
+#: ../dgit:7098
 msgid ""
 "dgit push-source: --include-dirty/--ignore-dirty does not makesense with "
 "push-source!"
 msgstr ""
 
-#: ../dgit:6785
+#: ../dgit:7104
 msgid "source changes file"
 msgstr ""
 
-#: ../dgit:6787
+#: ../dgit:7106
 msgid "user-specified changes file is not source-only"
 msgstr ""
 
-#: ../dgit:6807 ../dgit:6809
+#: ../dgit:7126 ../dgit:7128
 #, perl-format
 msgid "%s (in build products dir): %s"
 msgstr ""
 
-#: ../dgit:6822
+#: ../dgit:7142
 msgid ""
 "perhaps you need to pass -A ?  (sbuild's default is to build only\n"
 "arch-specific binaries; dgit 1.4 used to override that.)\n"
 msgstr ""
 
-#: ../dgit:6834
+#: ../dgit:7155
 msgid ""
 "you asked for a builder but your debbuildopts didn't ask for any binaries -- "
 "is this really what you meant?"
 msgstr ""
 
-#: ../dgit:6838
+#: ../dgit:7159
 msgid ""
 "we must build a .dsc to pass to the builder but your debbuiltopts forbids "
 "the building of a source package; cannot continue"
 msgstr ""
 
-#: ../dgit:6868
+#: ../dgit:7189
 msgid "incorrect arguments to dgit print-unapplied-treeish"
 msgstr ""
 
-#: ../dgit:6890
+#: ../dgit:7210
 msgid "source tree"
 msgstr ""
 
-#: ../dgit:6892
+#: ../dgit:7212
 #, perl-format
 msgid "dgit: import-dsc: %s"
 msgstr ""
 
-#: ../dgit:6905
+#: ../dgit:7225
 #, perl-format
 msgid "unknown dgit import-dsc sub-option `%s'"
 msgstr ""
 
-#: ../dgit:6909
+#: ../dgit:7229
 msgid "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
 msgstr ""
 
-#: ../dgit:6913
+#: ../dgit:7233
 msgid "dry run makes no sense with import-dsc"
 msgstr ""
 
-#: ../dgit:6930
+#: ../dgit:7250
 #, perl-format
 msgid "%s is checked out - will not update it"
 msgstr ""
 
-#: ../dgit:6935
+#: ../dgit:7255
 #, perl-format
 msgid "open import .dsc (%s): %s"
 msgstr ""
 
-#: ../dgit:6937
+#: ../dgit:7257
 #, perl-format
 msgid "read %s: %s"
 msgstr ""
 
-#: ../dgit:6948
+#: ../dgit:7268
 msgid "import-dsc signature check failed"
 msgstr ""
 
-#: ../dgit:6951
+#: ../dgit:7271
 #, perl-format
 msgid "%s: warning: importing unsigned .dsc\n"
 msgstr ""
 
-#: ../dgit:6962
+#: ../dgit:7282
 msgid "Dgit metadata in .dsc"
 msgstr ""
 
-#: ../dgit:6973
+#: ../dgit:7293
 msgid "dgit: import-dsc of .dsc with Dgit field, using git hash"
 msgstr ""
 
-#: ../dgit:6982
+#: ../dgit:7302
 #, perl-format
 msgid ""
 ".dsc contains Dgit field referring to object %s\n"
@@ -1855,21 +1515,21 @@ msgid ""
 "plausible server (browse.dgit.d.o? salsa?), and try the import-dsc again.\n"
 msgstr ""
 
-#: ../dgit:6989
+#: ../dgit:7309
 msgid "Not fast forward, forced update."
 msgstr ""
 
-#: ../dgit:6991
+#: ../dgit:7311
 #, perl-format
 msgid "Not fast forward to %s"
 msgstr ""
 
-#: ../dgit:6996
+#: ../dgit:7316
 #, perl-format
 msgid "updated git ref %s"
 msgstr ""
 
-#: ../dgit:7001
+#: ../dgit:7321
 #, perl-format
 msgid ""
 "Branch %s already exists\n"
@@ -1877,134 +1537,129 @@ msgid ""
 "Specify  +%s to overwrite, discarding existing history\n"
 msgstr ""
 
-#: ../dgit:7021
+#: ../dgit:7341
 #, perl-format
 msgid "lstat %s works but stat gives %s !"
 msgstr ""
 
-#: ../dgit:7023
+#: ../dgit:7343
 #, perl-format
 msgid "stat %s: %s"
 msgstr ""
 
-#: ../dgit:7031
+#: ../dgit:7351
 #, perl-format
 msgid "import %s requires %s, but: %s"
 msgstr ""
 
-#: ../dgit:7050
+#: ../dgit:7370
 #, perl-format
 msgid "cannot import %s which seems to be inside working tree!"
 msgstr ""
 
-#: ../dgit:7054
+#: ../dgit:7374
 #, perl-format
 msgid "symlink %s to %s: %s"
 msgstr ""
 
-#: ../dgit:7055
+#: ../dgit:7375
 #, perl-format
 msgid "made symlink %s -> %s"
 msgstr ""
 
-#: ../dgit:7066
+#: ../dgit:7386
 msgid "Import, forced update - synthetic orphan git history."
 msgstr ""
 
-#: ../dgit:7068
+#: ../dgit:7388
 msgid "Import, merging."
 msgstr ""
 
-#: ../dgit:7082
+#: ../dgit:7402
 #, perl-format
 msgid "Merge %s (%s) import into %s\n"
 msgstr ""
 
-#: ../dgit:7091
+#: ../dgit:7411
 #, perl-format
 msgid "results are in git ref %s"
 msgstr ""
 
-#: ../dgit:7098
+#: ../dgit:7418
 msgid "need only 1 subpath argument"
 msgstr ""
 
-#: ../dgit:7104
-#, perl-format
-msgid "exec curl: %s\n"
-msgstr ""
-
-#: ../dgit:7118
+#: ../dgit:7436
 msgid "need destination argument"
 msgstr ""
 
-#: ../dgit:7123
+#: ../dgit:7441
 #, perl-format
 msgid "exec git clone: %s\n"
 msgstr ""
 
-#: ../dgit:7131
+#: ../dgit:7449
 msgid "no arguments allowed to dgit print-dgit-repos-server-source-url"
 msgstr ""
 
-#: ../dgit:7142
+#: ../dgit:7460
 msgid "no arguments allowed to dgit print-dpkg-source-ignores"
 msgstr ""
 
-#: ../dgit:7148
+#: ../dgit:7466
 msgid "no arguments allowed to dgit setup-mergechangelogs"
 msgstr ""
 
-#: ../dgit:7155 ../dgit:7161
+#: ../dgit:7473 ../dgit:7479
 msgid "no arguments allowed to dgit setup-useremail"
 msgstr ""
 
-#: ../dgit:7167
+#: ../dgit:7485
 msgid "no arguments allowed to dgit setup-tree"
 msgstr ""
 
-#: ../dgit:7214
+#: ../dgit:7532
 msgid ""
 "--initiator-tempdir must be used specify an absolute, not relative, "
 "directory."
 msgstr ""
 
-#: ../dgit:7253
+#: ../dgit:7571
 #, perl-format
 msgid "%s needs a value"
 msgstr ""
 
-#: ../dgit:7257
+#: ../dgit:7575
 #, perl-format
 msgid "bad value `%s' for %s"
 msgstr ""
 
-#: ../dgit:7348
+#: ../dgit:7675
 #, perl-format
 msgid "%s: warning: ignoring unknown force option %s\n"
 msgstr ""
 
-#: ../dgit:7368
+#: ../dgit:7693
 #, perl-format
 msgid "unknown long option `%s'"
 msgstr ""
 
-#: ../dgit:7423
+#: ../dgit:7748
 #, perl-format
 msgid "unknown short option `%s'"
 msgstr ""
 
-#: ../dgit:7438
+#: ../dgit:7763
 #, perl-format
 msgid "%s is set to something other than SIG_DFL\n"
 msgstr ""
 
-#: ../dgit:7442
+#: ../dgit:7767
 #, perl-format
 msgid "%s is blocked\n"
 msgstr ""
 
-#: ../dgit:7448
+#: ../dgit:7773
 #, perl-format
 msgid ""
 "On entry to dgit, %s\n"
@@ -2012,49 +1667,40 @@ msgid ""
 "Giving up.\n"
 msgstr ""
 
-#: ../dgit:7465
+#: ../dgit:7790
 #, perl-format
 msgid "cannot set command for %s"
 msgstr ""
 
-#: ../dgit:7478
+#: ../dgit:7803
 #, perl-format
 msgid "cannot configure options for %s"
 msgstr ""
 
-#: ../dgit:7498
+#: ../dgit:7823
 #, perl-format
 msgid "unknown quilt-mode `%s'"
 msgstr ""
 
-#: ../dgit:7508
+#: ../dgit:7834
 #, perl-format
 msgid "unknown %s setting `%s'"
 msgstr ""
 
-#: ../dgit:7513
-msgid "dgit: --include-dirty is not supported in split view quilt mode"
-msgstr ""
-
-#: ../dgit:7524
-#, perl-format
-msgid "unknown clean-mode `%s'"
-msgstr ""
-
-#: ../dgit:7545
+#: ../dgit:7862
 msgid "DRY RUN ONLY\n"
 msgstr ""
 
-#: ../dgit:7546
+#: ../dgit:7863
 msgid "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
 msgstr ""
 
-#: ../dgit:7565
+#: ../dgit:7882
 #, perl-format
 msgid "unknown operation %s"
 msgstr ""
 
-#: ../git-debrebase:44
+#: ../git-debrebase:45
 msgid ""
 "usages:\n"
 "  git-debrebase [<options>] [--|-i <git rebase options...>]\n"
@@ -2067,60 +1713,60 @@ msgid ""
 "See git-debrebase(1), git-debrebase(5), dgit-maint-debrebase(7) (in dgit).\n"
 msgstr ""
 
-#: ../git-debrebase:67
+#: ../git-debrebase:68
 #, perl-format
 msgid "%s: bad usage: %s\n"
 msgstr ""
 
-#: ../git-debrebase:78
+#: ../git-debrebase:79
 #, perl-format
 msgid "bad options follow `git-debrebase %s'"
 msgstr ""
 
-#: ../git-debrebase:89
+#: ../git-debrebase:90
 #, perl-format
 msgid "missing required git config %s"
 msgstr ""
 
-#: ../git-debrebase:401
+#: ../git-debrebase:363
 #, perl-format
 msgid "%s: snag ignored (-f%s): %s\n"
 msgstr ""
 
-#: ../git-debrebase:404
+#: ../git-debrebase:366
 #, perl-format
 msgid "%s: snag detected (-f%s): %s\n"
 msgstr ""
 
-#: ../git-debrebase:417
+#: ../git-debrebase:379
 #, perl-format
 msgid "%s: snags: %d overriden by individual -f options\n"
 msgstr ""
 
-#: ../git-debrebase:423
+#: ../git-debrebase:385
 #, perl-format
 msgid "%s: snags: %d overriden by global --force\n"
 msgstr ""
 
-#: ../git-debrebase:427
+#: ../git-debrebase:389
 #, perl-format
 msgid "%s: snags: %d blocker(s) (you could -f<tag>, or --force)"
 msgstr ""
 
-#: ../git-debrebase:459
+#: ../git-debrebase:421
 msgid ""
 "Branch/history seems mangled - no longer in gdr format.\n"
 "See ILLEGAL OPERATIONS in git-debrebase(5).\n"
 msgstr ""
 
-#: ../git-debrebase:466
+#: ../git-debrebase:428
 #, perl-format
 msgid ""
 "%s\n"
 "Is this meant to be a gdr branch?  %s\n"
 msgstr ""
 
-#: ../git-debrebase:471
+#: ../git-debrebase:433
 #, perl-format
 msgid ""
 "%s\n"
@@ -2128,7 +1774,7 @@ msgid ""
 "Consider git-debrebase scrap, to throw away your recent work.\n"
 msgstr ""
 
-#: ../git-debrebase:477
+#: ../git-debrebase:439
 #, perl-format
 msgid ""
 "%s\n"
@@ -2136,7 +1782,7 @@ msgid ""
 "Wrong branch, or maybe you needed git-debrebase convert-from-*.\n"
 msgstr ""
 
-#: ../git-debrebase:488
+#: ../git-debrebase:450
 #, perl-format
 msgid ""
 "%s\n"
@@ -2144,418 +1790,415 @@ msgid ""
 "Maybe you reset to, or rebased from, somewhere inappropriate.\n"
 msgstr ""
 
-#: ../git-debrebase:935
+#: ../git-debrebase:897
 #, perl-format
 msgid "git-debrebase `anchor' but %s"
 msgstr ""
 
-#: ../git-debrebase:937
+#: ../git-debrebase:899
 msgid "has other than two parents"
 msgstr ""
 
-#: ../git-debrebase:938
+#: ../git-debrebase:900
 msgid "contains debian/patches"
 msgstr ""
 
-#: ../git-debrebase:964
+#: ../git-debrebase:926
 msgid "is an origin commit"
 msgstr ""
 
-#: ../git-debrebase:966
+#: ../git-debrebase:928
 msgid "upstream files differ from left parent"
 msgstr ""
 
-#: ../git-debrebase:968
+#: ../git-debrebase:930
 msgid "debian/ differs from right parent"
 msgstr ""
 
-#: ../git-debrebase:979
+#: ../git-debrebase:941
 msgid "edits debian/patches"
 msgstr ""
 
-#: ../git-debrebase:991
+#: ../git-debrebase:953
 msgid "parent's debian is not a directory"
 msgstr ""
 
-#: ../git-debrebase:998
+#: ../git-debrebase:960
 msgid "no changes"
 msgstr ""
 
-#: ../git-debrebase:1004
+#: ../git-debrebase:966
 msgid "origin commit"
 msgstr ""
 
-#: ../git-debrebase:1055
+#: ../git-debrebase:1017
 #, perl-format
 msgid "unknown kind of merge from %s"
 msgstr ""
 
-#: ../git-debrebase:1058
+#: ../git-debrebase:1020
 msgid "octopus merge"
 msgstr ""
 
-#: ../git-debrebase:1062
+#: ../git-debrebase:1024
 msgid "general two-parent merge"
 msgstr ""
 
-#: ../git-debrebase:1079
+#: ../git-debrebase:1041
 #, perl-format
 msgid "inconsistent anchors in merged-breakwaters %s"
 msgstr ""
 
-#: ../git-debrebase:1119
+#: ../git-debrebase:1081
 #, perl-format
 msgid "branch needs laundering (run git-debrebase): %s"
 msgstr ""
 
-#: ../git-debrebase:1147
+#: ../git-debrebase:1109
 #, perl-format
 msgid "packaging change (%s) follows upstream change"
 msgstr ""
 
-#: ../git-debrebase:1148
+#: ../git-debrebase:1110
 #, perl-format
 msgid " (eg %s)"
 msgstr ""
 
-#: ../git-debrebase:1154
+#: ../git-debrebase:1116
 msgid "found mixed upstream/packaging commit"
 msgstr ""
 
-#: ../git-debrebase:1155 ../git-debrebase:1163 ../git-debrebase:1168
-#: ../git-debrebase:1173 ../git-debrebase:1179 ../git-debrebase:1187
+#: ../git-debrebase:1117 ../git-debrebase:1125 ../git-debrebase:1130
+#: ../git-debrebase:1135 ../git-debrebase:1141 ../git-debrebase:1149
 #, perl-format
 msgid " (%s)"
 msgstr ""
 
-#: ../git-debrebase:1162
+#: ../git-debrebase:1124
 #, perl-format
 msgid "found interchange bureaucracy commit (%s)"
 msgstr ""
 
-#: ../git-debrebase:1167
+#: ../git-debrebase:1129
 msgid "found dgit dsc import"
 msgstr ""
 
-#: ../git-debrebase:1172
+#: ../git-debrebase:1134
 msgid "found bare dgit dsc import with no prior history"
 msgstr ""
 
-#: ../git-debrebase:1178
+#: ../git-debrebase:1140
 msgid "found vanilla merge"
 msgstr ""
 
-#: ../git-debrebase:1185
+#: ../git-debrebase:1147
 #, perl-format
 msgid "found unprocessable commit, cannot cope: %s"
 msgstr ""
 
-#: ../git-debrebase:1253
+#: ../git-debrebase:1215
 #, perl-format
 msgid "found unprocessable commit, cannot cope; %3$s: (commit %1$s) (d.%2$s)"
 msgstr ""
 
-#: ../git-debrebase:1254
+#: ../git-debrebase:1216
 #, perl-format
 msgid "found unprocessable commit, cannot cope: (commit %1$s) (d.%2$s)"
 msgstr ""
 
-#: ../git-debrebase:1375
+#: ../git-debrebase:1337
 msgid "bare dgit dsc import"
 msgstr ""
 
-#: ../git-debrebase:1715 ../git-debrebase:1718
+#: ../git-debrebase:1677 ../git-debrebase:1680
 #, perl-format
 msgid "mismatch %s ?"
 msgstr ""
 
-#: ../git-debrebase:1721
+#: ../git-debrebase:1683
 #, perl-format
 msgid "mismatch %s != %s ?"
 msgstr ""
 
-#: ../git-debrebase:1731
+#: ../git-debrebase:1693
 #, perl-format
 msgid "internal error %#x %s %s"
 msgstr ""
 
-#: ../git-debrebase:1759
+#: ../git-debrebase:1721
 #, perl-format
 msgid "%s: laundered (head was %s)\n"
 msgstr ""
 
-#: ../git-debrebase:1773
+#: ../git-debrebase:1735
 msgid "you are in the middle of a git-rebase already"
 msgstr ""
 
-#: ../git-debrebase:1799
+#: ../git-debrebase:1761
 msgid "launder for rebase"
 msgstr ""
 
-#: ../git-debrebase:1804
+#: ../git-debrebase:1766
 msgid "analyse does not support any options"
 msgstr ""
 
-#: ../git-debrebase:1806
+#: ../git-debrebase:1768
 msgid "too many arguments to analyse"
 msgstr ""
 
-#: ../git-debrebase:1841
+#: ../git-debrebase:1801
+#, perl-format
+msgid "%s already exists"
+msgstr ""
+
+#: ../git-debrebase:1803
 msgid "HEAD symref is not to refs/heads/"
 msgstr ""
 
-#: ../git-debrebase:1864
+#: ../git-debrebase:1826
 #, perl-format
 msgid "OK, you are ahead of %s\n"
 msgstr ""
 
-#: ../git-debrebase:1868
+#: ../git-debrebase:1830
 #, perl-format
 msgid "you are behind %s, divergence risk"
 msgstr ""
 
-#: ../git-debrebase:1872
+#: ../git-debrebase:1834
 #, perl-format
 msgid "you have diverged from %s"
 msgstr ""
 
-#: ../git-debrebase:1894
+#: ../git-debrebase:1856
 msgid "remote dgit branch"
 msgstr ""
 
-#: ../git-debrebase:1897
+#: ../git-debrebase:1859
 msgid "remote dgit branch for sid"
 msgstr ""
 
-#: ../git-debrebase:1925
+#: ../git-debrebase:1887
 msgid "Recorded previous head for preservation"
 msgstr ""
 
-#: ../git-debrebase:1933
+#: ../git-debrebase:1895
 #, perl-format
 msgid "could not record ffq-prev: %s"
 msgstr ""
 
-#: ../git-debrebase:1944
+#: ../git-debrebase:1906
 #, perl-format
 msgid "could not check ffq-prev: %s"
 msgstr ""
 
-#: ../git-debrebase:1964
+#: ../git-debrebase:1926
 msgid "fast forward"
 msgstr ""
 
-#: ../git-debrebase:1974
+#: ../git-debrebase:1936
 msgid "Declare fast forward / record previous work"
 msgstr ""
 
-#: ../git-debrebase:1986
+#: ../git-debrebase:1948
 msgid "No ffq-prev to stitch."
 msgstr ""
 
-#: ../git-debrebase:2017
-#, perl-format
-msgid ""
-"Could not determine appropriate upstream commitish.\n"
-" (Tried these tags: %s)\n"
-" Check version, and specify upstream commitish explicitly."
-msgstr ""
-
-#: ../git-debrebase:2036
+#: ../git-debrebase:1965
 msgid "need NEW-VERSION [UPS-COMMITTISH]"
 msgstr ""
 
-#: ../git-debrebase:2041
+#: ../git-debrebase:1970
 #, perl-format
 msgid "bad version number `%s'"
 msgstr ""
 
-#: ../git-debrebase:2059
+#: ../git-debrebase:1988
 #, perl-format
 msgid "upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2060
+#: ../git-debrebase:1989
 msgid "upstream (main piece"
 msgstr ""
 
-#: ../git-debrebase:2080
+#: ../git-debrebase:2009
 msgid "for each EXTRA-UPS-NAME need EXTRA-UPS-COMMITISH"
 msgstr ""
 
-#: ../git-debrebase:2098
+#: ../git-debrebase:2027
 msgid "old anchor is recognised due to --anchor, cannot check upstream"
 msgstr ""
 
-#: ../git-debrebase:2114
+#: ../git-debrebase:2043
 #, perl-format
 msgid ""
 "previous upstream combine %s mentions %d pieces (each implying one parent) "
 "but has %d parents (one per piece plus maybe a previous combine)"
 msgstr ""
 
-#: ../git-debrebase:2123
+#: ../git-debrebase:2052
 #, perl-format
 msgid "previous upstream combine %s first piece is not `.'"
 msgstr ""
 
-#: ../git-debrebase:2136
+#: ../git-debrebase:2065
 #, perl-format
 msgid ""
 "previous upstream %s is from git-debrebase but not an `upstream-combine' "
 "commit"
 msgstr ""
 
-#: ../git-debrebase:2147
+#: ../git-debrebase:2076
 #, perl-format
 msgid "introducing upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2150
+#: ../git-debrebase:2079
 #, perl-format
 msgid "dropping upstream piece `%s'"
 msgstr ""
 
-#: ../git-debrebase:2153
+#: ../git-debrebase:2082
 #, perl-format
 msgid "not fast forward: %s %s"
 msgstr ""
 
-#: ../git-debrebase:2264
+#: ../git-debrebase:2193
 msgid "Previous head already recorded\n"
 msgstr ""
 
-#: ../git-debrebase:2268
+#: ../git-debrebase:2197
 #, perl-format
 msgid "Could not preserve: %s"
 msgstr ""
 
-#: ../git-debrebase:2273 ../git-debrebase:2279 ../git-debrebase:2285
-#: ../git-debrebase:2375 ../git-debrebase:2384 ../git-debrebase:2408
-#: ../git-debrebase:2472
+#: ../git-debrebase:2202 ../git-debrebase:2208 ../git-debrebase:2214
+#: ../git-debrebase:2304 ../git-debrebase:2313 ../git-debrebase:2337
+#: ../git-debrebase:2401
 msgid "no arguments allowed"
 msgstr ""
 
-#: ../git-debrebase:2307
+#: ../git-debrebase:2236
 msgid "branch contains furniture (not laundered)"
 msgstr ""
 
-#: ../git-debrebase:2308
+#: ../git-debrebase:2237
 msgid "branch is unlaundered"
 msgstr ""
 
-#: ../git-debrebase:2309
+#: ../git-debrebase:2238
 msgid "branch needs laundering"
 msgstr ""
 
-#: ../git-debrebase:2310
+#: ../git-debrebase:2239
 msgid "branch not in git-debrebase form"
 msgstr ""
 
-#: ../git-debrebase:2320
+#: ../git-debrebase:2249
 msgid "current branch contents, in git-debrebase terms:\n"
 msgstr ""
 
-#: ../git-debrebase:2322
+#: ../git-debrebase:2251
 msgid "  branch is laundered\n"
 msgstr ""
 
-#: ../git-debrebase:2338
+#: ../git-debrebase:2267
 #, perl-format
 msgid "  %s is not well-defined\n"
 msgstr ""
 
-#: ../git-debrebase:2344
+#: ../git-debrebase:2273
 msgid "key git-debrebase commits:\n"
 msgstr ""
 
-#: ../git-debrebase:2345
+#: ../git-debrebase:2274
 msgid "anchor"
 msgstr ""
 
-#: ../git-debrebase:2346
+#: ../git-debrebase:2275
 msgid "breakwater"
 msgstr ""
 
-#: ../git-debrebase:2351
+#: ../git-debrebase:2280
 msgid "branch and ref status, in git-debrebase terms:\n"
 msgstr ""
 
-#: ../git-debrebase:2358
+#: ../git-debrebase:2287
 msgid "  unstitched; previous tip was:\n"
 msgstr ""
 
-#: ../git-debrebase:2361
+#: ../git-debrebase:2290
 msgid "  stitched? (no record of git-debrebase work)\n"
 msgstr ""
 
-#: ../git-debrebase:2363
+#: ../git-debrebase:2292
 msgid "  stitched\n"
 msgstr ""
 
-#: ../git-debrebase:2365
+#: ../git-debrebase:2294
 msgid "  not git-debrebase (diverged since last stitch)\n"
 msgstr ""
 
-#: ../git-debrebase:2368
+#: ../git-debrebase:2297
 msgid "you are currently rebasing\n"
 msgstr ""
 
-#: ../git-debrebase:2385 ../git-debrebase:2398
+#: ../git-debrebase:2314 ../git-debrebase:2327
 msgid "launder for git-debrebase quick"
 msgstr ""
 
-#: ../git-debrebase:2392 ../git-debrebase:2422
+#: ../git-debrebase:2321 ../git-debrebase:2351
 msgid "No ongoing git-debrebase session."
 msgstr ""
 
-#: ../git-debrebase:2461
+#: ../git-debrebase:2390
 msgid "Commit patch queue (exported by git-debrebase)"
 msgstr ""
 
-#: ../git-debrebase:2478
+#: ../git-debrebase:2407
 msgid "No (more) patches to export."
 msgstr ""
 
-#: ../git-debrebase:2485
+#: ../git-debrebase:2414
 #, perl-format
 msgid ""
 "Patch export produced patch amendments (abandoned output commit %s).  Try "
 "laundering first."
 msgstr ""
 
-#: ../git-debrebase:2505
+#: ../git-debrebase:2434
 #, perl-format
 msgid "%s contains comments, which will be discarded"
 msgstr ""
 
-#: ../git-debrebase:2510
+#: ../git-debrebase:2439
 #, perl-format
 msgid "patch %s repeated in %s !"
 msgstr ""
 
-#: ../git-debrebase:2517
+#: ../git-debrebase:2446
 #, perl-format
 msgid "Unused patch file %s will be discarded"
 msgstr ""
 
-#: ../git-debrebase:2525
+#: ../git-debrebase:2454
 msgid "ffq-prev exists, this is already managed by git-debrebase!"
 msgstr ""
 
-#: ../git-debrebase:2530
+#: ../git-debrebase:2459
 msgid "ahead of debrebase-last, this is already managed by git-debrebase!"
 msgstr ""
 
-#: ../git-debrebase:2546
+#: ../git-debrebase:2475
 msgid "want only 1 optional argument, the upstream git commitish"
 msgstr ""
 
-#: ../git-debrebase:2551
+#: ../git-debrebase:2480
 msgid "missing Version from changelog\n"
 msgstr ""
 
-#: ../git-debrebase:2567
+#: ../git-debrebase:2496
 #, perl-format
 msgid ""
 "upstream (%s) and HEAD are not\n"
@@ -2563,58 +2206,58 @@ msgid ""
 "  git diff %s HEAD -- :!/debian :/\n"
 msgstr ""
 
-#: ../git-debrebase:2575
+#: ../git-debrebase:2504
 #, perl-format
 msgid "upstream (%s) is not an ancestor of HEAD"
 msgstr ""
 
-#: ../git-debrebase:2582
+#: ../git-debrebase:2511
 #, perl-format
 msgid ""
 "history between upstream (%s) and HEAD contains direct changes to upstream "
 "files - are you sure this is a gbp (patches-unapplied) branch?"
 msgstr ""
 
-#: ../git-debrebase:2584
+#: ../git-debrebase:2513
 #, perl-format
 msgid "list expected changes with:  %s\n"
 msgstr ""
 
-#: ../git-debrebase:2591
+#: ../git-debrebase:2520
 #, perl-format
 msgid "upstream (%s) contains debian/ directory"
 msgstr ""
 
-#: ../git-debrebase:2609
+#: ../git-debrebase:2538
 msgid "neither of the first two changelog entries are released\n"
 msgstr ""
 
-#: ../git-debrebase:2615
+#: ../git-debrebase:2544
 #, perl-format
 msgid "could not find suitable maintainer view tag %s\n"
 msgstr ""
 
-#: ../git-debrebase:2618
+#: ../git-debrebase:2547
 #, perl-format
 msgid "HEAD is not FF from maintainer tag %s!"
 msgstr ""
 
-#: ../git-debrebase:2621
+#: ../git-debrebase:2550
 #, perl-format
 msgid "dgit view tag %s not found\n"
 msgstr ""
 
-#: ../git-debrebase:2623
+#: ../git-debrebase:2552
 #, perl-format
 msgid "dgit view tag %s is not FF from maintainer tag %s\n"
 msgstr ""
 
-#: ../git-debrebase:2625
+#: ../git-debrebase:2554
 #, perl-format
 msgid "will stitch in dgit view, %s\n"
 msgstr ""
 
-#: ../git-debrebase:2632
+#: ../git-debrebase:2561
 #, perl-format
 msgid ""
 "Cannot confirm dgit view: %s\n"
@@ -2622,12 +2265,12 @@ msgid ""
 "dgit --overwrite will be needed on the first dgit push after conversion.\n"
 msgstr ""
 
-#: ../git-debrebase:2678
+#: ../git-debrebase:2607
 #, perl-format
 msgid "%s: converted from patched-unapplied (gbp) branch format, OK\n"
 msgstr ""
 
-#: ../git-debrebase:2707
+#: ../git-debrebase:2636
 #, perl-format
 msgid ""
 "%s: converted to git-buildpackage branch format\n"
@@ -2635,16 +2278,16 @@ msgid ""
 "%s: WARNING: doing so would drop all upstream patches!\n"
 msgstr ""
 
-#: ../git-debrebase:2728
+#: ../git-debrebase:2657
 msgid "takes 1 optional argument, the upstream commitish"
 msgstr ""
 
-#: ../git-debrebase:2736
+#: ../git-debrebase:2665
 #, perl-format
 msgid "%s, from command line"
 msgstr ""
 
-#: ../git-debrebase:2750
+#: ../git-debrebase:2679
 #, perl-format
 msgid ""
 "%s: Branch already seems to be in git-debrebase format!\n"
@@ -2652,225 +2295,242 @@ msgid ""
 "%s: but is probably a bad idea.  Probably, you wanted to do nothing.\n"
 msgstr ""
 
-#: ../git-debrebase:2754
+#: ../git-debrebase:2683
 msgid "Branch already in git-debrebase format."
 msgstr ""
 
-#: ../git-debrebase:2766
+#: ../git-debrebase:2695
 msgid "Considering possible commits corresponding to upstream:\n"
 msgstr ""
 
-#: ../git-debrebase:2773
+#: ../git-debrebase:2702
 #, perl-format
 msgid "git tag %s"
 msgstr ""
 
-#: ../git-debrebase:2779
+#: ../git-debrebase:2708
 #, perl-format
 msgid " git tag: no suitable tag found (tried %s)\n"
 msgstr ""
 
-#: ../git-debrebase:2788
+#: ../git-debrebase:2717
 #, perl-format
 msgid "opendir build-products-dir %s: %s"
 msgstr ""
 
-#: ../git-debrebase:2794
+#: ../git-debrebase:2723
 #, perl-format
 msgid " orig: found what looks like a .orig, %s\n"
 msgstr ""
 
-#: ../git-debrebase:2825
+#: ../git-debrebase:2754
 #, perl-format
 msgid " orig: no suitable origs found (looked for %s in %s)\n"
 msgstr ""
 
-#: ../git-debrebase:2834
+#: ../git-debrebase:2763
 msgid "Evaluating possible commits corresponding to upstream:\n"
 msgstr ""
 
-#: ../git-debrebase:2871
+#: ../git-debrebase:2800
 #, perl-format
 msgid " %s: couldn't apply patches: gbp pq %s"
 msgstr ""
 
-#: ../git-debrebase:2880
+#: ../git-debrebase:2809
 #, perl-format
 msgid " %s: applying patches gives different tree\n"
 msgstr ""
 
-#: ../git-debrebase:2894
+#: ../git-debrebase:2823
 msgid ""
 "Could not find or construct a suitable upstream commit.\n"
 "Rerun adding --diagnose after convert-from-dgit-view, or pass a\n"
 "upstream commmit explicitly or provide suitable origs.\n"
 msgstr ""
 
-#: ../git-debrebase:2900
+#: ../git-debrebase:2829
 #, perl-format
 msgid "Yes, will base new branch on %s\n"
 msgstr ""
 
-#: ../git-debrebase:2907
+#: ../git-debrebase:2836
 msgid "forget-was-ever-debrebase takes no further arguments"
 msgstr ""
 
-#: ../git-debrebase:2911
+#: ../git-debrebase:2840
 #, perl-format
 msgid "Not suitable for recording git-debrebaseness anyway: %s"
 msgstr ""
 
-#: ../git-debrebase:3013
+#: ../git-debrebase:2942
 msgid "bad options\n"
 msgstr ""
 
-#: ../git-debrebase:3023
+#: ../git-debrebase:2952
 #, perl-format
 msgid "%s: no cuddling to -i for git-rebase"
 msgstr ""
 
-#: ../git-debrebase:3053
+#: ../git-debrebase:2982
 #, perl-format
 msgid "unknown git-debrebase sub-operation %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:295
+#: ../Debian/Dgit.pm:298
 #, perl-format
 msgid "error: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:315
+#: ../Debian/Dgit.pm:324
 #, perl-format
 msgid "getcwd failed: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:334
+#: ../Debian/Dgit.pm:343
 msgid "terminated, reporting successful completion"
 msgstr ""
 
-#: ../Debian/Dgit.pm:336
+#: ../Debian/Dgit.pm:345
 #, perl-format
 msgid "failed with error exit status %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:339
+#: ../Debian/Dgit.pm:348
 #, perl-format
 msgid "died due to fatal signal %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:343
+#: ../Debian/Dgit.pm:352
 #, perl-format
 msgid "failed with unknown wait status %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:349
+#: ../Debian/Dgit.pm:358
 msgid "failed command"
 msgstr ""
 
-#: ../Debian/Dgit.pm:355
+#: ../Debian/Dgit.pm:364
 #, perl-format
 msgid "failed to fork/exec: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:357
+#: ../Debian/Dgit.pm:366
 #, perl-format
 msgid "subprocess %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:359
+#: ../Debian/Dgit.pm:368
 msgid "subprocess produced invalid output"
 msgstr ""
 
-#: ../Debian/Dgit.pm:450
+#: ../Debian/Dgit.pm:459
 msgid "stat source file: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:460
+#: ../Debian/Dgit.pm:469
 msgid "stat destination file: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:479
+#: ../Debian/Dgit.pm:488
 msgid "finally install file after cp: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:485
+#: ../Debian/Dgit.pm:494
 msgid "delete old file after cp: %S"
 msgstr ""
 
-#: ../Debian/Dgit.pm:506
+#: ../Debian/Dgit.pm:515
 msgid ""
 "not in a git working tree?\n"
 "(git rev-parse --show-toplevel produced no output)\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:509
+#: ../Debian/Dgit.pm:518
 #, perl-format
 msgid "chdir toplevel %s: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:617
+#: ../Debian/Dgit.pm:626
 msgid "git index contains changes (does not match HEAD)"
 msgstr ""
 
-#: ../Debian/Dgit.pm:618
+#: ../Debian/Dgit.pm:627
 msgid "working tree is dirty (does not match HEAD)"
 msgstr ""
 
-#: ../Debian/Dgit.pm:689
+#: ../Debian/Dgit.pm:649
+msgid "using specified upstream commitish"
+msgstr ""
+
+#: ../Debian/Dgit.pm:655
+#, perl-format
+msgid ""
+"Could not determine appropriate upstream commitish.\n"
+" (Tried these tags: %s)\n"
+" Check version, and specify upstream commitish explicitly."
+msgstr ""
+
+#: ../Debian/Dgit.pm:661 ../Debian/Dgit.pm:663
+#, perl-format
+msgid "using upstream from git tag %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:769
 msgid "detached HEAD"
 msgstr ""
 
-#: ../Debian/Dgit.pm:690
+#: ../Debian/Dgit.pm:770
 msgid "HEAD symref is not to refs/"
 msgstr ""
 
-#: ../Debian/Dgit.pm:706
+#: ../Debian/Dgit.pm:786
 #, perl-format
 msgid "parsing of %s failed"
 msgstr ""
 
-#: ../Debian/Dgit.pm:715
+#: ../Debian/Dgit.pm:795
 #, perl-format
 msgid ""
 "control file %s is (already) PGP-signed.  Note that dgit push needs to "
 "modify the .dsc and then do the signature itself"
 msgstr ""
 
-#: ../Debian/Dgit.pm:729
+#: ../Debian/Dgit.pm:809
 #, perl-format
 msgid "open %s (%s): %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:750
+#: ../Debian/Dgit.pm:830
 #, perl-format
 msgid "missing field %s in %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:822
+#: ../Debian/Dgit.pm:916
 msgid "Dummy commit - do not use\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:843
+#: ../Debian/Dgit.pm:937
 #, perl-format
 msgid "exec %s: %s\n"
 msgstr ""
 
-#: ../Debian/Dgit.pm:911
+#: ../Debian/Dgit.pm:1005
 #, perl-format
 msgid "cannot stat %s/.git: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:934
+#: ../Debian/Dgit.pm:1028
 #, perl-format
 msgid "failed to mkdir playground parent %s: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:942
+#: ../Debian/Dgit.pm:1036
 #, perl-format
 msgid "failed to mkdir a playground %s: %s"
 msgstr ""
 
-#: ../Debian/Dgit.pm:951
+#: ../Debian/Dgit.pm:1045
 #, perl-format
 msgid "failed to mkdir the playground %s: %s"
 msgstr ""
index 4aad97d3c06ac81ef46d05bbbd66a54a4fb38ae1..19deda3c46132220cf286aee74e36313e2d841cd 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -6,10 +6,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: dgit_8.3\n"
+"Project-Id-Version: dgit_9.9\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-03-01 21:54+0000\n"
-"PO-Revision-Date: 2019-01-19 20:58+0100\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
+"PO-Revision-Date: 2019-11-10 22:17+0100\n"
 "Last-Translator: Frans Spiesschaert <Frans.Spiesschaert@yucom.be>\n"
 "Language-Team: Debian Dutch l10n Team <debian-l10n-dutch@lists.debian.org>\n"
 "Language: nl\n"
@@ -17,81 +17,76 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 2.91.7\n"
+"X-Generator: Poedit 1.8.11\n"
 
-#: ../dgit:242
+#: ../dgit:268
 #, perl-format
 msgid "%s: invalid configuration: %s\n"
 msgstr "%s: ongeldige configuratie: %s\n"
 
-#: ../dgit:249
+#: ../dgit:275
 msgid "warning: overriding problem due to --force:\n"
 msgstr "waarschuwing: overschrijvingsprobleem wegens --force:\n"
 
-#: ../dgit:257
+#: ../dgit:283
 #, perl-format
 msgid "warning: skipping checks or functionality due to --force-%s\n"
 msgstr ""
 "waarschuwing: controles of functionaliteit overgeslagen wegens --force-%s\n"
 
-#: ../dgit:262
+#: ../dgit:288
 #, perl-format
 msgid "%s: source package %s does not exist in suite %s\n"
 msgstr "%s: broncodepakket %s bestaat niet in suite %s\n"
 
-#: ../dgit:487
+#: ../dgit:520
 #, perl-format
 msgid "build host child %s"
 msgstr "bouwcomputer-dochter %s"
 
-#: ../dgit:492 ../dgit:498
+#: ../dgit:525 ../dgit:531
 #, perl-format
 msgid "connection lost: %s"
 msgstr "verbinding verbroken: %s"
 
-#: ../dgit:493
+#: ../dgit:526
 #, perl-format
 msgid "protocol violation; %s not expected"
 msgstr "protocolschending; %s werd niet verwacht"
 
-#: ../dgit:501
+#: ../dgit:534
 #, perl-format
 msgid "eof (reading %s)"
 msgstr "eof (bij het lezen van %s)"
 
-#: ../dgit:508
+#: ../dgit:541
 msgid "protocol message"
 msgstr "protocolbericht"
 
-#: ../dgit:516
+#: ../dgit:549
 #, perl-format
 msgid "`%s'"
 msgstr "`%s'"
 
-#: ../dgit:537
+#: ../dgit:570
 msgid "bad byte count"
 msgstr "aantal slechte bytes"
 
-#: ../dgit:540
+#: ../dgit:573
 msgid "data block"
 msgstr "gegevensblok"
 
-#: ../dgit:621
-#, perl-format
-msgid "failed to fetch %s: %s"
-msgstr "ophalen (fetch) van %s mislukt: %s"
-
-#: ../dgit:633
+#: ../dgit:652
 #, perl-format
 msgid "%s ok: %s"
 msgstr "%s oké: %s"
 
-#: ../dgit:635
+#: ../dgit:654
 #, perl-format
 msgid "would be ok: %s (but dry run only)"
 msgstr "zou oké zijn: %s (maar slechts een testuitvoering)"
 
-#: ../dgit:660
+#: ../dgit:679
 msgid ""
 "main usages:\n"
 "  dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]\n"
@@ -131,13 +126,13 @@ msgstr ""
 "  -c<naam>=<waarde>   configuratieoptie instellen voor git\n"
 "                       (ook rechtstreeks gebruikt door dgit)\n"
 
-#: ../dgit:679
+#: ../dgit:698
 msgid "Perhaps the upload is stuck in incoming.  Using the version from git.\n"
 msgstr ""
 "Misschien zit de upload vast in incoming.  De versie van git wordt "
 "gebruikt.\n"
 
-#: ../dgit:683
+#: ../dgit:702
 #, perl-format
 msgid ""
 "%s: %s\n"
@@ -146,22 +141,22 @@ msgstr ""
 "%s: %s\n"
 "%s"
 
-#: ../dgit:688
+#: ../dgit:707
 msgid "too few arguments"
 msgstr "te weinig argumenten"
 
-#: ../dgit:799
+#: ../dgit:823
 #, perl-format
 msgid "multiple values for %s (in %s git config)"
 msgstr "verschillende waarden voor %s (in %s git config)"
 
-#: ../dgit:802
+#: ../dgit:826
 #, perl-format
 msgid "value for config option %s (in %s git config) contains newline(s)!"
 msgstr ""
 "waarde voor configuratieoptie %s (in %s git config) bevat regeleinde(s)!"
 
-#: ../dgit:822
+#: ../dgit:846
 #, perl-format
 msgid ""
 "need value for one of: %s\n"
@@ -170,39 +165,44 @@ msgstr ""
 "heb waarde nodig voor Ã©Ã©n van: %s\n"
 "%s: distributie of suite lijkt niet (behoorlijk) ondersteund te worden"
 
-#: ../dgit:863
+#: ../dgit:903
 #, perl-format
 msgid "bad syntax for (nominal) distro `%s' (does not match %s)"
 msgstr ""
 "slechte syntaxis voor (nominale) distributie `%s' (komt niet overeen met %s)"
 
-#: ../dgit:878
+#: ../dgit:918
 #, perl-format
 msgid "backports-quirk needs % or ( )"
 msgstr "backports-spitsvondigheid vereist % of ( )"
 
-#: ../dgit:894
+#: ../dgit:934
 #, perl-format
 msgid "%s needs t (true, y, 1) or f (false, n, 0) not `%s'"
 msgstr "%s vereist t (true, y, 1) of f (false, n, 0) en niet `%s'"
 
-#: ../dgit:914
+#: ../dgit:954
 msgid "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"
 msgstr ""
 "alleen-lezen (readonly) vereist t (true, y, 1) of f (false, n, 0) of een "
 "(auto)"
 
-#: ../dgit:923 ../git-debrebase:1586 ../Debian/Dgit.pm:201
+#: ../dgit:972
+#, perl-format
+msgid "unknown %s `%s'"
+msgstr "onbekend %s `%s'"
+
+#: ../dgit:977 ../git-debrebase:1548 ../Debian/Dgit.pm:211
 msgid "internal error"
 msgstr "interne fout"
 
-#: ../dgit:925
+#: ../dgit:979
 msgid "pushing but distro is configured readonly"
 msgstr ""
 "bezig een push uit te voeren, maar de distributie is voor alleen-lezen "
 "geconfigureerd"
 
-#: ../dgit:929
+#: ../dgit:983
 msgid ""
 "Push failed, before we got started.\n"
 "You can retry the push, after fixing the problem, if you like.\n"
@@ -211,83 +211,84 @@ msgstr ""
 "Als u wilt, kunt u de push opnieuw proberen nadat het probleem opgelost "
 "werd.\n"
 
-#: ../dgit:1094
+#: ../dgit:1006
+#, perl-format
+msgid ""
+"dgit: quilt mode `%s' (for format `%s') implies split view, but split-view "
+"set to `%s'"
+msgstr ""
+"dgit: quilt modus `%s' (voor indeling `%s') impliceert gesplitste weergave, "
+"maar gesplitste weergave staat ingesteld op `%s'"
+
+#: ../dgit:1169
 msgid "this operation does not support multiple comma-separated suites"
 msgstr ""
 "meerdere met een komma van elkaar gescheiden suites worden door deze "
 "bewerking niet ondersteund"
 
-#: ../dgit:1140
+#: ../dgit:1237
 #, perl-format
-msgid ""
-"config requested specific TLS key but do not know how to get curl to use "
-"exactly that EE key (%s)"
-msgstr ""
-"de configuratie vereiste een specifieke TLS-sleutel, maar weet niet hoe curl "
-"ertoe te brengen exact die EE-sleutel (%s) te gebruiken"
+msgid "fetch of %s failed (%s): %s"
+msgstr "ophalen (fetch) van %s mislukte (%s): %s"
+
+#: ../dgit:1244
+#, perl-format
+msgid "fetch of %s gave HTTP code %s"
+msgstr "een fetch van %s gaf HTTP-code %s"
 
-#: ../dgit:1161
+#: ../dgit:1265
 msgid "ftpmasterapi archive query method takes no data part"
 msgstr ""
 "de methode ftpmasterapi voor een verzoek aan het archief kent geen data-"
 "onderdeel"
 
-#: ../dgit:1169
-msgid "curl failed to print 3-digit HTTP code"
-msgstr "curl slaagde niet in het weergeven van een 3-cijferige HTTP-code"
-
-#: ../dgit:1173
-#, perl-format
-msgid "fetch of %s gave HTTP code %s"
-msgstr "een fetch van %s gaf HTTP-code %s"
-
-#: ../dgit:1189
+#: ../dgit:1283
 #, perl-format
 msgid "unknown suite %s, maybe -d would help"
 msgstr "onbekende suite %s, misschien is -d nuttig"
 
-#: ../dgit:1193
+#: ../dgit:1287
 #, perl-format
 msgid "multiple matches for suite %s\n"
 msgstr "meerdere overeenkomsten met suite %s\n"
 
-#: ../dgit:1195
+#: ../dgit:1289
 #, perl-format
 msgid "suite %s info has no codename\n"
 msgstr "info over suite %s bevat geen codenaam\n"
 
-#: ../dgit:1197
+#: ../dgit:1291
 #, perl-format
 msgid "suite %s maps to bad codename\n"
 msgstr "suite %s is gekoppeld aan een verkeerde codenaam\n"
 
-#: ../dgit:1199 ../dgit:1224
+#: ../dgit:1293 ../dgit:1318
 msgid "bad ftpmaster api response: "
 msgstr "verkeerd antwoord van de ftpmaster api:"
 
-#: ../dgit:1213
+#: ../dgit:1307
 #, perl-format
 msgid "bad version: %s\n"
 msgstr "verkeerde versie: %s\n"
 
-#: ../dgit:1215
+#: ../dgit:1309
 msgid "bad component"
 msgstr "verkeerde component"
 
-#: ../dgit:1218
+#: ../dgit:1312
 msgid "bad filename"
 msgstr "verkeerde bestandsnaam"
 
-#: ../dgit:1220
+#: ../dgit:1314
 msgid "bad sha256sum"
 msgstr "verkeerde sha256sum"
 
-#: ../dgit:1271
+#: ../dgit:1365
 msgid "aptget archive query method takes no data part"
 msgstr ""
 "de methode aptget voor een verzoek aan het archief kent geen data-onderdeel"
 
-#: ../dgit:1355
+#: ../dgit:1449
 #, perl-format
 msgid ""
 "apt seemed to not to update dgit's cached Release files for %s.\n"
@@ -300,21 +301,21 @@ msgstr ""
 " zich op een bestandssysteem dat met `noatime' aangekoppeld is; mocht dit "
 "het geval zijn, gebruik dan `relatime'.)\n"
 
-#: ../dgit:1377
+#: ../dgit:1473
 #, perl-format
 msgid "Release file (%s) specifies intolerable %s"
 msgstr "Release-bestand (%s) vermeldt ontoelaatbaar %s"
 
-#: ../dgit:1405
+#: ../dgit:1499
 msgid "apt-get source did not produce a .dsc"
 msgstr "apt-get source produceerde geen .dsc-bestand"
 
-#: ../dgit:1406
+#: ../dgit:1500
 #, perl-format
 msgid "apt-get source produced several .dscs (%s)"
 msgstr "apt-get source produceerde verschillende .dsc-bestanden (%s)"
 
-#: ../dgit:1511
+#: ../dgit:1605
 #, perl-format
 msgid ""
 "unable to canonicalise suite using package %s which does not appear to exist "
@@ -323,138 +324,134 @@ msgstr ""
 "niet in staat de suite ondubbelzinnig te bepalen met pakket %s dat blijkbaar "
 "niet bestaat in suite %s; --existing-package kan behulpzaam zijn"
 
-#: ../dgit:1702
+#: ../dgit:1744
 #, perl-format
 msgid "cannot operate on %s suite"
 msgstr "kan geen acties uitvoeren op suite %s"
 
-#: ../dgit:1705
+#: ../dgit:1747
 #, perl-format
 msgid "canonical suite name for %s is %s"
 msgstr "de gebruikelijke suitenaam voor %s is %s"
 
-#: ../dgit:1707
+#: ../dgit:1749
 #, perl-format
 msgid "canonical suite name is %s"
 msgstr "de gebruikelijke suitenaam is %s"
 
-#: ../dgit:1727
+#: ../dgit:1769
 #, perl-format
 msgid "%s has hash %s but archive told us to expect %s"
 msgstr "%s heeft hash %s maar volgens het archief moesten we %s verwachten"
 
-#: ../dgit:1733
+#: ../dgit:1775
 #, perl-format
 msgid "unsupported source format %s, sorry"
 msgstr "niet-ondersteunde broncode-indeling %s, sorry"
 
-#: ../dgit:1760
+#: ../dgit:1802
 #, perl-format
 msgid "diverting to %s (using config for %s)"
 msgstr "er wordt omgeschakeld naar %s (de configuratie voor %s wordt gebruikt)"
 
-#: ../dgit:1777
-msgid "unexpected results from git check query - "
-msgstr "het verzoek git check leverde onverwachte resultaten op - "
-
-#: ../dgit:1792
+#: ../dgit:1825
 #, perl-format
 msgid "unknown git-check `%s'"
 msgstr "onbekende git-check `%s'"
 
-#: ../dgit:1807
+#: ../dgit:1840
 #, perl-format
 msgid "unknown git-create `%s'"
 msgstr "onbekende git-create `%s'"
 
-#: ../dgit:1844
+#: ../dgit:1877
 #, perl-format
 msgid "%s: warning: removing from %s: %s\n"
 msgstr "%s: waarschuwing: wordt verwijderd van %s: %s\n"
 
-#: ../dgit:1890
+#: ../dgit:1923
 #, perl-format
 msgid "could not parse .dsc %s line `%s'"
 msgstr "kon .dsc %s regel `%s' niet ontleden"
 
-#: ../dgit:1901
+#: ../dgit:1934
 #, perl-format
 msgid "missing any supported Checksums-* or Files field in %s"
 msgstr "een ondersteund Checksums-* of Files-veld ontbreekt in %s"
 
-#: ../dgit:1947
+#: ../dgit:1980
 #, perl-format
 msgid "hash or size of %s varies in %s fields (between: %s)"
 msgstr "hash of grootte van %s varieert in %s-velden (tussen: %s)"
 
-#: ../dgit:1956
+#: ../dgit:1989
 #, perl-format
 msgid "file list in %s varies between hash fields!"
 msgstr "bestandenlijst in %s varieert tussen hash-velden!"
 
-#: ../dgit:1960
+#: ../dgit:1993
 #, perl-format
 msgid "%s has no files list field(s)"
 msgstr "%s bevat geen veld(en) met een bestandenlijst"
 
-#: ../dgit:1966
+#: ../dgit:1999
 #, perl-format
 msgid "no file appears in all file lists (looked in: %s)"
 msgstr "in geen enkele bestandenlijst komt een bestand voor (gezocht in: %s)"
 
-#: ../dgit:2006
+#: ../dgit:2039
 #, perl-format
 msgid "purportedly source-only changes polluted by %s\n"
 msgstr "ogenschijnlijke source-only wijzigingen vervuild door %s\n"
 
-#: ../dgit:2019
+#: ../dgit:2052
 msgid "cannot find section/priority from .changes Files field"
 msgstr ""
 "kan sectie/prioriteit niet vinden in het veld Files van het .changes-bestand"
 
-#: ../dgit:2032
+#: ../dgit:2065
 msgid ""
 "archive does not support .orig check; hope you used --ch:--sa/-sd if needed\n"
 msgstr ""
 "archief ondersteunt controle van .orig niet; hopelijk gebruikte u zo nodig --"
 "ch:--sa/-sd\n"
 
-#: ../dgit:2048
+#: ../dgit:2081
 #, perl-format
 msgid ".dsc %s missing entry for %s"
 msgstr ".dsc %s mist een item voor %s"
 
-#: ../dgit:2053
+#: ../dgit:2086
 #, perl-format
 msgid "%s: %s (archive) != %s (local .dsc)"
 msgstr "%s: %s (archief) != %s (lokale .dsc)"
 
-#: ../dgit:2061
+#: ../dgit:2094
 #, perl-format
 msgid "archive %s: %s"
 msgstr "archief %s: %s"
 
-#: ../dgit:2068
+#: ../dgit:2101
 #, perl-format
 msgid "archive contains %s with different checksum"
 msgstr "archief bevat %s met een andere checksum"
 
-#: ../dgit:2096
+#: ../dgit:2129
 #, perl-format
 msgid "edited .changes for archive .orig contents: %s %s"
 msgstr "bewerkte .changes voor de inhoud van .orig van het archief: %s %s"
 
-#: ../dgit:2104
+#: ../dgit:2137
 #, perl-format
 msgid "[new .changes left in %s]"
 msgstr "[nieuwe .changes achtergelaten in %s]"
 
-#: ../dgit:2107
+#: ../dgit:2140
 #, perl-format
 msgid "%s already has appropriate .orig(s) (if any)"
 msgstr "%s heeft reeds passende .orig(s) (indien van toepassing)"
 
-#: ../dgit:2131
+#: ../dgit:2159
 #, perl-format
 msgid ""
 "unexpected commit author line format `%s' (was generated from changelog "
@@ -463,7 +460,7 @@ msgstr ""
 "onverwachte indeling `%s' van de auteursregel van de commit (werd "
 "gegenereerd uit het Maintainer-veld in changelog)"
 
-#: ../dgit:2154
+#: ../dgit:2182
 msgid ""
 "\n"
 "Unfortunately, this source package uses a feature of dpkg-source where\n"
@@ -490,7 +487,7 @@ msgstr ""
 "dat verschillende distributies andere broncode hebben).\n"
 "\n"
 
-#: ../dgit:2166
+#: ../dgit:2194
 #, perl-format
 msgid ""
 "Found active distro-specific series file for %s (%s): %s, cannot continue"
@@ -498,24 +495,24 @@ msgstr ""
 "Vond een actief distributiespecifiek series-bestand voor %s (%s): %s, kan "
 "niet voortgaan"
 
-#: ../dgit:2197
+#: ../dgit:2225
 msgid "Dpkg::Vendor `current vendor'"
 msgstr "Dpkg::Vendor `current vendor'"
 
-#: ../dgit:2199
+#: ../dgit:2227
 msgid "(base) distro being accessed"
 msgstr "(basis)-distributie wordt benaderd"
 
-#: ../dgit:2201
+#: ../dgit:2229
 msgid "(nominal) distro being accessed"
 msgstr "(nominale) distributie wordt benaderd"
 
-#: ../dgit:2206
+#: ../dgit:2234
 #, perl-format
 msgid "build-products-dir %s is not accessible: %s\n"
 msgstr "build-products-dir %s is niet toegankelijk: %s\n"
 
-#: ../dgit:2231
+#: ../dgit:2259
 #, perl-format
 msgid ""
 "%s: found orig(s) in .. missing from build-products-dir, transferring:\n"
@@ -523,85 +520,80 @@ msgstr ""
 "%s: orig(s) gevonden in .. welke ontbreken in build-products-dir, bezig met "
 "overbrengen:\n"
 
-#: ../dgit:2235
+#: ../dgit:2263
 #, perl-format
 msgid "check orig file %s in bpd %s: %s"
 msgstr "controleer orig-bestand %s in bpd %s: %s"
 
-#: ../dgit:2237
+#: ../dgit:2265
 #, perl-format
 msgid "check orig file %s in ..: %s"
 msgstr "controleer orig-bestand %s in ..: %s"
 
-#: ../dgit:2240
+#: ../dgit:2268
 #, perl-format
 msgid "check target of orig symlink %s in ..: %s"
 msgstr "controleer doel van orig-symbolische koppeling %s in ..: %s"
 
-#: ../dgit:2249
+#: ../dgit:2277
 #, perl-format
 msgid "%s: cloned orig symlink from ..: %s\n"
 msgstr "%s: orig-symbolische koppeling gekloond van ..: %s\n"
 
-#: ../dgit:2253
+#: ../dgit:2281
 #, perl-format
 msgid "%s: hardlinked orig from ..: %s\n"
 msgstr "%s: vast gekoppelde orig van ..: %s\n"
 
-#: ../dgit:2256
+#: ../dgit:2284
 #, perl-format
 msgid "failed to make %s a hardlink to %s: %s"
 msgstr "niet gelukt om %s een vaste koppeling naar %s te maken: %s"
 
-#: ../dgit:2262
+#: ../dgit:2290
 #, perl-format
 msgid "%s: symmlinked orig from .. on other filesystem: %s\n"
 msgstr ""
 "%s: symbolisch gekoppelde orig van .. op een ander bestandssysteem: %s\n"
 
-#: ../dgit:2294 ../dgit:2299
-#, perl-format
-msgid "accessing %s: %s"
-msgstr "bezig met benaderen van %s: %s"
-
-#: ../dgit:2314 ../dgit:2321
-#, perl-format
-msgid "saving %s: %s"
-msgstr "bezig met opslaan van %s: %s"
-
-#: ../dgit:2386
+#: ../dgit:2361
 #, perl-format
 msgid "dgit (child): exec %s: %s"
 msgstr "dgit (dochter): exec %s: %s"
 
-#: ../dgit:2450 ../dgit:5974
-msgid "source package"
-msgstr "broncodepakket"
-
-#: ../dgit:2468
+#: ../dgit:2423
 msgid "package changelog"
 msgstr "changelog van het pakket"
 
-#: ../dgit:2508
+#: ../dgit:2463
 msgid "package changelog has no entries!"
 msgstr "het changelog-bestand van het pakket bevat geen vermeldingen!"
 
-#: ../dgit:2527
+#: ../dgit:2532 ../dgit:2537
+#, perl-format
+msgid "accessing %s: %s"
+msgstr "bezig met benaderen van %s: %s"
+
+#: ../dgit:2552 ../dgit:2559
 #, perl-format
-msgid "Import %s"
-msgstr "Importeren van %s"
+msgid "saving %s: %s"
+msgstr "bezig met opslaan van %s: %s"
+
+#: ../dgit:2585 ../dgit:6078
+msgid "source package"
+msgstr "broncodepakket"
 
-#: ../dgit:2608
+#: ../dgit:2665
 #, perl-format
 msgid "%s: trying slow absurd-git-apply..."
 msgstr "%s: langzame absurd-git-apply wordt gebruikt..."
 
-#: ../dgit:2627
+#: ../dgit:2684
 #, perl-format
 msgid "%s failed: %s\n"
 msgstr "%s mislukte: %s\n"
 
-#: ../dgit:2636
+#: ../dgit:2693
 #, perl-format
 msgid ""
 "gbp-pq import and dpkg-source disagree!\n"
@@ -614,21 +606,16 @@ msgstr ""
 " gbp-pq import gaf boom %s\n"
 " dpkg-source --before-build gaf boom %s\n"
 
-#: ../dgit:2651
+#: ../dgit:2713
 #, perl-format
 msgid "synthesised git commit from .dsc %s"
 msgstr "git commit samengesteld vanuit .dsc %s"
 
-#: ../dgit:2655
+#: ../dgit:2717
 msgid "Import of source package"
 msgstr "Importeren van broncodepakket"
 
-#: ../dgit:2668
-#, perl-format
-msgid "Record %s (%s) in archive suite %s\n"
-msgstr "Gegeven %s (%s) uit archiefsuite %s\n"
-
-#: ../dgit:2672
+#: ../dgit:2737
 #, perl-format
 msgid ""
 "\n"
@@ -641,12 +628,12 @@ msgstr ""
 "Laatste versie die met dgit gepusht werd : %s (recentere of dezelfde)\n"
 "%s\n"
 
-#: ../dgit:2714
+#: ../dgit:2779
 #, perl-format
 msgid "using existing %s"
 msgstr "bestaande %s wordt gebruikt"
 
-#: ../dgit:2718
+#: ../dgit:2783
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (perhaps you should delete this "
@@ -655,12 +642,12 @@ msgstr ""
 "bestand %s heeft hash %s maar .dsc vereist hash %s (moet u misschien dit "
 "bestand verwijderen?)"
 
-#: ../dgit:2722
+#: ../dgit:2787
 #, perl-format
 msgid "need to fetch correct version of %s"
 msgstr "moet de juiste versie van %s ophalen met fetch"
 
-#: ../dgit:2738
+#: ../dgit:2803
 #, perl-format
 msgid ""
 "file %s has hash %s but .dsc demands hash %s (got wrong file from archive!)"
@@ -668,24 +655,24 @@ msgstr ""
 "bestand %s heeft hash %s maar .dsc vereist hash %s (verkreeg een verkeerd "
 "bestand van het archief!)"
 
-#: ../dgit:2833
+#: ../dgit:2898
 msgid "too many iterations trying to get sane fetch!"
 msgstr "te veel pogingen om een foutloze fetch te bekomen!"
 
-#: ../dgit:2848
+#: ../dgit:2913
 #, perl-format
 msgid "warning: git ls-remote %s reported %s; this is silly, ignoring it.\n"
 msgstr ""
 "waarschuwing: git ls-remote %s rapporteerde %s; dit is onzinnig, wordt "
 "genegeerd.\n"
 
-#: ../dgit:2892
+#: ../dgit:2957
 #, perl-format
 msgid "warning: git fetch %s created %s; this is silly, deleting it.\n"
 msgstr ""
 "waarschuwing: git fetch %s creëerde %s; dit is onzinnig, wordt verwijderd.\n"
 
-#: ../dgit:2907
+#: ../dgit:2972
 msgid ""
 "--dry-run specified but we actually wanted the results of git fetch,\n"
 "so this is not going to work.  Try running dgit fetch first,\n"
@@ -695,7 +682,7 @@ msgstr ""
 "git fetch, dus dit zal niet werken. Probeer eerst git fetch uit te voeren,\n"
 "of --damp-run te gebruiken in plaats van --dry-run.\n"
 
-#: ../dgit:2912
+#: ../dgit:2977
 #, perl-format
 msgid ""
 "warning: git ls-remote suggests we want %s\n"
@@ -711,44 +698,19 @@ msgstr ""
 "waarschuwing:  Is mogelijk te wijten aan een race met iemand die de server\n"
 "waarschuwing:  bijwerkt. Zal later opnieuw proberen...\n"
 
-#: ../dgit:2979
-#, perl-format
-msgid "Not updating %s from %s to %s.\n"
-msgstr "%s wordt niet opgewaardeerd van %s naar %s.\n"
-
-#: ../dgit:3028
-#, perl-format
-msgid "%s: NO git hash"
-msgstr "%s: GEEN hash van git"
-
-#: ../dgit:3032
-#, perl-format
-msgid "%s: specified git info (%s)"
-msgstr "%s: git info werd opgegeven (%s)"
-
-#: ../dgit:3039
-#, perl-format
-msgid "%s: specified git hash"
-msgstr "%s: git hash werd opgegeven"
-
-#: ../dgit:3041
-#, perl-format
-msgid "%s: invalid Dgit info"
-msgstr "%s: ongeldige Dgit info"
-
-#: ../dgit:3063
+#: ../dgit:3124
 #, perl-format
 msgid "not chasing .dsc distro %s: not fetching %s"
 msgstr ""
 "ben niet bezig met achter .dsc van distributie %s aan te gaan: %s wordt niet "
 "gehaald"
 
-#: ../dgit:3068
+#: ../dgit:3129
 #, perl-format
 msgid ".dsc names distro %s: fetching %s"
 msgstr ".dsc vernoemt distributie %s: %s wordt opgehaald"
 
-#: ../dgit:3073
+#: ../dgit:3134
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
@@ -757,7 +719,7 @@ msgstr ""
 "De Dgit-metadata van .dsc zijn in de context van distributie %s\n"
 "waarvoor we geen geconfigureerde url hebben en .dsc geeft geen aanwijzing\n"
 
-#: ../dgit:3083
+#: ../dgit:3144
 #, perl-format
 msgid ""
 ".dsc Dgit metadata is in context of distro %s\n"
@@ -770,30 +732,30 @@ msgstr ""
 ".dsc geeft een aanduiding voor een url met het onveilige protocol %s.\n"
 "(kan door de configuratie overschreven worden - raadpleeg de documentatie)\n"
 
-#: ../dgit:3103
+#: ../dgit:3164
 msgid "rewrite map"
 msgstr "modificatieplan (rewrite map)"
 
-#: ../dgit:3110
+#: ../dgit:3171
 msgid "server's git history rewrite map contains a relevant entry!"
 msgstr ""
 "het modificatieplan (rewrite map) van de git-geschiedenis op de server bevat "
 "een relevant element!"
 
-#: ../dgit:3114
+#: ../dgit:3175
 msgid "using rewritten git hash in place of .dsc value"
 msgstr "de gemodificeerde git hash wordt gebruikt in plaats van de .dsc-waarde"
 
-#: ../dgit:3116
+#: ../dgit:3177
 msgid "server data says .dsc hash is to be disregarded"
 msgstr ""
 "de gegevens van de server zeggen dat de .dsc-hash genegeerd moet worden"
 
-#: ../dgit:3123
+#: ../dgit:3184
 msgid "additional commits"
 msgstr "extra vastleggingen (commits)"
 
-#: ../dgit:3126
+#: ../dgit:3187
 #, perl-format
 msgid ""
 ".dsc Dgit metadata requires commit %s\n"
@@ -802,27 +764,27 @@ msgstr ""
 "De Dgit-metadata uit .dsc vereist commit %s\n"
 "maar we konden dat object nergens bekomen.\n"
 
-#: ../dgit:3151
+#: ../dgit:3212
 msgid "last upload to archive"
 msgstr "laatste upload naar het archief"
 
-#: ../dgit:3155
+#: ../dgit:3216
 msgid "no version available from the archive"
 msgstr "geen versie beschikbaar uit het archief"
 
-#: ../dgit:3238
+#: ../dgit:3299
 msgid "dgit suite branch on dgit git server"
 msgstr "dgit suite-tak op dgit git-server"
 
-#: ../dgit:3245
+#: ../dgit:3306
 msgid "dgit client's archive history view"
 msgstr "dgit - weergave geschiedenis van cliëntarchief"
 
-#: ../dgit:3250
+#: ../dgit:3311
 msgid "Dgit field in .dsc from archive"
 msgstr "Dgit-veld in het .dsc uit het archief"
 
-#: ../dgit:3278
+#: ../dgit:3339
 #, perl-format
 msgid ""
 "\n"
@@ -838,15 +800,15 @@ msgstr ""
 "Laatste versie die met dgit gepusht werd: %s\n"
 "%s\n"
 
-#: ../dgit:3291
+#: ../dgit:3352
 msgid "archive .dsc names newer git commit"
 msgstr ".dsc van het archief vermeldt een recentere git commit"
 
-#: ../dgit:3294
+#: ../dgit:3355
 msgid "archive .dsc names other git commit, fixing up"
 msgstr ".dsc van het archief vermeldt een andere git commit, wordt gerepareerd"
 
-#: ../dgit:3315
+#: ../dgit:3376
 #, perl-format
 msgid ""
 "\n"
@@ -858,7 +820,7 @@ msgstr ""
 "dgit.\n"
 "%s\n"
 
-#: ../dgit:3324
+#: ../dgit:3385
 #, perl-format
 msgid ""
 "\n"
@@ -873,7 +835,7 @@ msgstr ""
 "Maar we konden geen enkele versie bekomen uit het archief of uit git.\n"
 "\n"
 
-#: ../dgit:3409
+#: ../dgit:3470
 #, perl-format
 msgid ""
 "Record %s (%s) in archive suite %s\n"
@@ -884,19 +846,19 @@ msgstr ""
 "\n"
 "Gegeven dat\n"
 
-#: ../dgit:3422
+#: ../dgit:3483
 msgid "should be treated as descended from\n"
 msgstr "behandeld zou moeten worden als afstammend van\n"
 
-#: ../dgit:3440
+#: ../dgit:3501
 msgid "dgit repo server tip (last push)"
 msgstr "tip van de dgit-opslagplaats op de server (laatste push)"
 
-#: ../dgit:3442
+#: ../dgit:3503
 msgid "local tracking tip (last fetch)"
 msgstr "tip van de lokale kopie (laatste fetch)"
 
-#: ../dgit:3453
+#: ../dgit:3514
 #, perl-format
 msgid ""
 "\n"
@@ -912,15 +874,15 @@ msgstr ""
 "We waren slechts in staat om   %s te bekomen\n"
 "\n"
 
-#: ../dgit:3468
+#: ../dgit:3529
 msgid "fetched source tree"
 msgstr "broncodeboom opgehaald"
 
-#: ../dgit:3504
+#: ../dgit:3565
 msgid "debian/changelog merge driver"
 msgstr "stuurprogramma voor samenvoeging van debian/changelog"
 
-#: ../dgit:3569
+#: ../dgit:3630
 msgid ""
 "[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes\n"
 " not doing further gitattributes setup\n"
@@ -928,16 +890,16 @@ msgstr ""
 "[attr]dgit-defuse-attrs reeds gevonden in .git/info/attributes, en geschikt\n"
 " gitattributes wordt niet verder ingesteld\n"
 
-#: ../dgit:3583
+#: ../dgit:3644
 msgid "# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)\n"
 msgstr "# ^ zie GITATTRIBUTES in dgit(7) en dgit setup-new-tree in dgit(1)\n"
 
-#: ../dgit:3598
+#: ../dgit:3659
 #, perl-format
 msgid "install %s: %s"
 msgstr "installeren van %s: %s"
 
-#: ../dgit:3625
+#: ../dgit:3686
 #, perl-format
 msgid ""
 "dgit: warning: %s contains .gitattributes\n"
@@ -948,32 +910,32 @@ msgstr ""
 "dgit: .gitattributes niet (volledig) geneutraliseerd.  Aanbevolen: dgit "
 "setup-new-tree.\n"
 
-#: ../dgit:3647
+#: ../dgit:3708
 #, perl-format
 msgid "fetching %s..."
 msgstr "ophalen van %s..."
 
-#: ../dgit:3655
+#: ../dgit:3716
 #, perl-format
 msgid "failed to obtain %s: %s"
 msgstr "verkrijgen van %s mislukte: %s"
 
-#: ../dgit:3694
+#: ../dgit:3755
 #, perl-format
 msgid "package %s missing in (base suite) %s"
 msgstr "pakket %s ontbreekt in (basissuite) %s"
 
-#: ../dgit:3726
+#: ../dgit:3787
 msgid "local combined tracking branch"
 msgstr "lokale gecombineerde navolgende tak (tracking branch)"
 
-#: ../dgit:3728
+#: ../dgit:3789
 msgid "archive seems to have rewound: local tracking branch is ahead!"
 msgstr ""
 "het archief lijkt teruggespoeld te hebben: de lokale navolgende tak loopt "
 "voorop!"
 
-#: ../dgit:3767
+#: ../dgit:3828
 #, perl-format
 msgid ""
 "Combine archive branches %s [dgit]\n"
@@ -984,7 +946,7 @@ msgstr ""
 "\n"
 "Invoertakken:\n"
 
-#: ../dgit:3781
+#: ../dgit:3842
 msgid ""
 "\n"
 "Key\n"
@@ -998,34 +960,34 @@ msgstr ""
 " + markeert elke tak die niet reeds een voorouder was\n"
 "\n"
 
-#: ../dgit:3796
+#: ../dgit:3857
 #, perl-format
 msgid "calculated combined tracking suite %s"
 msgstr "berekende gecombineerde navolgende suite %s"
 
-#: ../dgit:3814
+#: ../dgit:3875
 #, perl-format
 msgid "ready for work in %s"
 msgstr "klaar om te werken in %s"
 
-#: ../dgit:3822
+#: ../dgit:3893
 msgid "dry run makes no sense with clone"
 msgstr "dry run is zinloos met clone"
 
-#: ../dgit:3837
+#: ../dgit:3908
 #, perl-format
 msgid "create `%s': %s"
 msgstr "creëren van `%s': %s"
 
-#: ../dgit:3853
+#: ../dgit:3920
 msgid "fetching existing git history"
 msgstr "ophalen van bestaande git-geschiedenis"
 
-#: ../dgit:3857
+#: ../dgit:3923
 msgid "starting new git history"
 msgstr "starten van een nieuwe git-geschiedenis"
 
-#: ../dgit:3883
+#: ../dgit:3948
 #, perl-format
 msgid ""
 "FYI: Vcs-Git in %s has different url to your vcs-git remote.\n"
@@ -1035,33 +997,33 @@ msgstr ""
 " De url voor uw externe vcs-git zou verouderd kunnen zijn. Misschien dgit "
 "update-vcs-git gebruiken?\n"
 
-#: ../dgit:3888
+#: ../dgit:3953
 #, perl-format
 msgid "fetched into %s"
 msgstr "opgehaald naar %s"
 
-#: ../dgit:3900
+#: ../dgit:3965
 #, perl-format
 msgid "Merge from %s [dgit]"
 msgstr "Samenvoegen vanuit %s [dgit]"
 
-#: ../dgit:3902
+#: ../dgit:3967
 #, perl-format
 msgid "fetched to %s and merged into HEAD"
 msgstr "opgehaald naar %s samengevoegd naar HEAD"
 
-#: ../dgit:3910
+#: ../dgit:3975
 #, perl-format
 msgid "git tree contains %s"
 msgstr "git-boom bevat %s"
 
-#: ../dgit:3921
+#: ../dgit:3986
 msgid "you have uncommitted changes to critical files, cannot continue:\n"
 msgstr ""
 "u heeft niet-vastgelegde wijzigingen in cruciale bestanden, kan niet "
 "voortgaan:\n"
 
-#: ../dgit:3940
+#: ../dgit:4005
 #, perl-format
 msgid ""
 "quilt fixup required but quilt mode is `nofix'\n"
@@ -1070,15 +1032,15 @@ msgstr ""
 "er is een quilt fixup vereist, maar de quilt-modus is `nofix'\n"
 "HEAD commit%s verschilt van de boom die uit debian/patches%s volgt"
 
-#: ../dgit:3957
+#: ../dgit:4022
 msgid "nothing quilty to commit, ok."
 msgstr "niets quilt-achtig vast te leggen, oké."
 
-#: ../dgit:3960
+#: ../dgit:4025
 msgid " (wanted to commit patch update)"
 msgstr " (wilde een patch-update vastleggen)"
 
-#: ../dgit:3964
+#: ../dgit:4029
 msgid ""
 "Commit Debian 3.0 (quilt) metadata\n"
 "\n"
@@ -1086,7 +1048,7 @@ msgstr ""
 "Vastleggen van (commit) Debian 3.0 (quilt) metadata\n"
 "\n"
 
-#: ../dgit:4007
+#: ../dgit:4073
 #, perl-format
 msgid ""
 "Not doing any fixup of `%s' due to ----no-quilt-fixup or --quilt=nocheck"
@@ -1094,60 +1056,60 @@ msgstr ""
 "Opknappen van `%s' wordt niet gedaan, wegens ----no-quilt-fixup of --"
 "quilt=nocheck"
 
-#: ../dgit:4012
+#: ../dgit:4078
 #, perl-format
 msgid "Format `%s', need to check/update patch stack"
 msgstr "Indeling `%s', moet de patch-stack nakijken/bijwerken"
 
-#: ../dgit:4022
+#: ../dgit:4088
 #, perl-format
 msgid "commit id %s"
 msgstr "vastleggings-id (commit id) %s"
 
-#: ../dgit:4028
+#: ../dgit:4094
 #, perl-format
 msgid "and left in %s"
 msgstr "en achtergelaten in %s"
 
-#: ../dgit:4054
+#: ../dgit:4120
 #, perl-format
 msgid "Wanted tag %s (%s) on dgit server, but not found\n"
 msgstr "Wenste tag %s (%s) op de dgit-server, maar niet gevonden\n"
 
-#: ../dgit:4057
+#: ../dgit:4123
 #, perl-format
 msgid "Wanted tag %s (one of: %s) on dgit server, but not found\n"
 msgstr "Wenste tag %s (één van: %s) op de dgit-server, maar niet gevonden\n"
 
-#: ../dgit:4065
+#: ../dgit:4131
 #, perl-format
 msgid "%s (%s) .. %s (%s) is not fast forward\n"
 msgstr ""
 "%s (%s) .. %s (%s) is niet fast forward (geen lineaire "
 "veranderingsgeschiedenis)\n"
 
-#: ../dgit:4074
+#: ../dgit:4140
 msgid "version currently in archive"
 msgstr "momenteel in het archief aanwezige versie"
 
-#: ../dgit:4083
+#: ../dgit:4149
 #, perl-format
 msgid "Checking package changelog for archive version %s ..."
 msgstr ""
 "Het changlog-bestand van het pakket wordt gecontroleerd op archiefversie "
 "%s ..."
 
-#: ../dgit:4091
+#: ../dgit:4157
 #, perl-format
 msgid "%s field from dpkg-parsechangelog %s"
 msgstr "veld %s van dpkg-parsechangelog %s"
 
-#: ../dgit:4101
+#: ../dgit:4168
 #, perl-format
 msgid "Perhaps debian/changelog does not mention %s ?"
 msgstr "Vermeldt debian/changelog misschien %s niet?"
 
-#: ../dgit:4104
+#: ../dgit:4171
 #, perl-format
 msgid ""
 "%s is %s\n"
@@ -1156,547 +1118,99 @@ msgstr ""
 "%s is %s\n"
 "Uw boom lijkt gebaseerd op een eerdere (niet geüploade) %s.\n"
 
-#: ../dgit:4118
+#: ../dgit:4185
 #, perl-format
 msgid "Declaring that HEAD includes all changes in %s..."
 msgstr "Bezig te verklaren dat HEAD alle wijzigingen uit %s omvat..."
 
-#: ../dgit:4174
+#: ../dgit:4241
 msgid "Checking that HEAD includes all changes in archive..."
 msgstr ""
 "Bezig te controleren dat HEAD alle wijzigingen uit het archief omvat..."
 
-#: ../dgit:4183
+#: ../dgit:4250
 msgid "maintainer view tag"
 msgstr "tag weergave pakketonderhouder"
 
-#: ../dgit:4185
+#: ../dgit:4252
 msgid "dgit view tag"
 msgstr "tag weergave dgit"
 
-#: ../dgit:4186
+#: ../dgit:4253
 msgid "current archive contents"
 msgstr "huidige inhoud van het archief"
 
-#: ../dgit:4199
+#: ../dgit:4266
 msgid ""
 "| Not fast forward; maybe --overwrite is needed ?  Please see dgit(1).\n"
 msgstr ""
 "| Niet fast forward (geen lineaire geschiedenis); is misschien --overwrite "
 "nodig?  Raadpleeg dgit(1).\n"
 
-#: ../dgit:4209
+#: ../dgit:4276
 #, perl-format
 msgid "Declare fast forward from %s\n"
 msgstr "Lineair (fast forward) declareren vanuit %s\n"
 
-#: ../dgit:4210
+#: ../dgit:4277
 #, perl-format
 msgid "Make fast forward from %s\n"
 msgstr "Lineair (fast forward) maken vanuit %s\n"
 
-#: ../dgit:4214
+#: ../dgit:4281
 #, perl-format
 msgid "Made pseudo-merge of %s into dgit view."
 msgstr "Maakte een pseudo-samenvoeging van %s in de dgit-weergave."
 
-#: ../dgit:4227
+#: ../dgit:4294
 #, perl-format
 msgid "Declare fast forward from %s"
 msgstr "Lineair (fast forward) declareren vanuit %s"
 
-#: ../dgit:4235
+#: ../dgit:4302
 #, perl-format
 msgid "Make pseudo-merge of %s into your HEAD."
 msgstr "Pseudo-samenvoeging maken van %s naar uw HEAD."
 
-#: ../dgit:4247
+#: ../dgit:4314
 #, perl-format
 msgid "-p specified %s but changelog specified %s"
 msgstr "-p gaf %s op, maar het changelog-bestand vermeldde %s"
 
-#: ../dgit:4269
+#: ../dgit:4336
 #, perl-format
 msgid "%s is for %s %s but debian/changelog is for %s %s"
 msgstr "%s is voor %s %s maar debian/changelog is voor %s %s"
 
-#: ../dgit:4330
+#: ../dgit:4390
 #, perl-format
 msgid "changes field %s `%s' does not match changelog `%s'"
 msgstr "het changes-veld %s `%s' komt niet overeen met `%s' uit changelog"
 
-#: ../dgit:4358
-#, perl-format
-msgid "%s release %s for %s (%s) [dgit]\n"
-msgstr "%s release %s voor %s (%s) [dgit]\n"
-
-#: ../dgit:4371
-#, perl-format
-msgid ""
-"%s release %s for %s (%s)\n"
-"(maintainer view tag generated by dgit --quilt=%s)\n"
-msgstr ""
-"%s release %s voor %s (%s)\n"
-"(tag 'maintainer view' gegenereerd door dgit --quilt=%s)\n"
-
-#: ../dgit:4423
-msgid ""
-"Push failed, while checking state of the archive.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-"Push mislukte tijdens het nagaan van de toestand van het archief.\n"
-"Indien u wenst, kunt u de push opnieuw proberen, na het oplossen van het "
-"probleem.\n"
-
-#: ../dgit:4432
-msgid ""
-"package appears to be new in this suite; if this is intentional, use --new"
-msgstr ""
-"het pakket lijkt in deze suite nieuw te zijn; als dit ook de bedoeling is, "
-"gebruik dan --new"
-
-#: ../dgit:4437
-msgid ""
-"Push failed, while preparing your push.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-"Push mislukte tijdens het voorbereiden van uw push.\n"
-"Indien u wenst, kunt u de push opnieuw proberen, na het oplossen van het "
-"probleem.\n"
-
-#: ../dgit:4460
-#, perl-format
-msgid "looked for .dsc %s, but %s; maybe you forgot to build"
-msgstr "zocht naar .dsc %s, maar %s; misschien vergat u te bouwen"
-
-#: ../dgit:4477
-#, perl-format
-msgid ""
-"Branch is managed by git-debrebase (%s\n"
-"exists), but quilt mode (%s) implies a split view.\n"
-"Pass the right --quilt option or adjust your git config.\n"
-"Or, maybe, run git-debrebase forget-was-ever-debrebase.\n"
-msgstr ""
-"Tak wordt beheerd door git-debrebase (%s\n"
-"bestaat), maar de quilt-modus (%s) impliceert een gesplitste weergave.\n"
-"Gebruik de juiste --quilt-optie of pas uw git config aan.\n"
-"Of voer misschien git-debrebase forget-was-ever-debrebase uit.\n"
-
-#: ../dgit:4501
-#, perl-format
-msgid ""
-"--quilt=%s but no cached dgit view:\n"
-" perhaps HEAD changed since dgit build[-source] ?"
-msgstr ""
-"--quilt=%s maar geen gecachete dgit-weergave:\n"
-" werd HEAD misschien gewijzigd sinds dgit build[-source]?"
-
-#: ../dgit:4532
-msgid ""
-"dgit push: HEAD is not a descendant of the archive's version.\n"
-"To overwrite the archive's contents, pass --overwrite[=VERSION].\n"
-"To rewind history, if permitted by the archive, use --deliberately-not-fast-"
-"forward."
-msgstr ""
-"dgit push: HEAD is geen afstammeling van de versie van het archief.\n"
-"Om de inhoud van het archief te overschrijven, geeft u de opdracht --"
-"overwrite[=VERSIE].\n"
-"Om de geschiedenis terug te spoelen, als het archief dat toestaat, gebruikt "
-"u --deliberately-not-fast-forward."
-
-#: ../dgit:4542
-#, perl-format
-msgid "checking that %s corresponds to HEAD"
-msgstr "bezig na te gaan dat %s overeenkomt met HEAD"
-
-#: ../dgit:4576 ../dgit:4588
-#, perl-format
-msgid "HEAD specifies a different tree to %s:\n"
-msgstr "HEAD geeft een andere boom op aan %s:\n"
-
-#: ../dgit:4582
-#, perl-format
-msgid ""
-"There is a problem with your source tree (see dgit(7) for some hints).\n"
-"To see a full diff, run git diff %s %s\n"
-msgstr ""
-"Er is een probleem met uw broncodeboom (zie dgit(7) voor suggesties).\n"
-"Om alle verschillen te zien, gebruikt u git diff %s %s\n"
-
-#: ../dgit:4592
-#, perl-format
-msgid ""
-"Perhaps you forgot to build.  Or perhaps there is a problem with your\n"
-" source tree (see dgit(7) for some hints).  To see a full diff, run\n"
-"   git diff %s %s\n"
-msgstr ""
-"Misschien vergat u te bouwen (build). Of er is misschien een probleem met\n"
-" uw broncodeboom (zie dgit(7) voor suggesties). Om alle verschillen te "
-"zien,\n"
-" gebruikt u git diff %s %s\n"
-
-#: ../dgit:4603
-#, perl-format
-msgid ""
-"failed to find unique changes file (looked for %s in %s); perhaps you need "
-"to use dgit -C"
-msgstr ""
-"kon geen uniek changes-bestand vinden (zocht naar %s in %s); misschien moet "
-"u dgit -C gebruiken"
-
-#: ../dgit:4625
-msgid "uploading binaries, although distro policy is source only"
-msgstr ""
-"bezig met uploaden van binaire pakketten, hoewel het beleid van de "
-"distributie uitsluitend broncode (source only) voorschrijft"
-
-#: ../dgit:4629
-msgid "source-only upload, although distro policy requires .debs"
-msgstr ""
-"upload van uitsluitend broncode (source-only), hoewel het beleid van de "
-"distributie .deb's vereist"
-
-#: ../dgit:4633
-#, perl-format
-msgid ""
-"source-only upload, even though package is entirely NEW\n"
-"(this is contrary to policy in %s)"
-msgstr ""
-"upload van uitsluitend broncode (source-only), hoewel pakket volledig NIEUW "
-"is\n"
-"(dit is in tegenspraak met de beleidsrichtlijnen in %s)"
-
-#: ../dgit:4640
-#, perl-format
-msgid "unknown source-only-uploads policy `%s'"
-msgstr "onbekende source-only-uploads beleidsrichtlijn `%s'"
-
-#: ../dgit:4684
-msgid ""
-"Push failed, while signing the tag.\n"
-"You can retry the push, after fixing the problem, if you like.\n"
-msgstr ""
-"Push mislukte tijdens het ondertekenen van de tag.\n"
-"Indien u dit wenst, kunt u de push opnieuw proberen na het oplossen van het "
-"probleem.\n"
-
-#: ../dgit:4697
-msgid ""
-"Push failed, *after* signing the tag.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-"Push mislukte *na* het ondertekenen van de tag.\n"
-"Indien u opnieuw wenst te proberen, moet u een nieuw versienummer "
-"gebruiken.\n"
-
-#: ../dgit:4714
-msgid ""
-"Push failed, while updating the remote git repository - see messages above.\n"
-"If you want to try again, you should use a new version number.\n"
-msgstr ""
-"Push mislukte tijdens het bijwerken van de externe git-opslagplaats - zie de "
-"meldingen hierboven.\n"
-"Indien u opnieuw wenst te proberen, moet u een nieuw versienummer "
-"gebruiken.\n"
-
-#: ../dgit:4731
-msgid ""
-"Push failed, while obtaining signatures on the .changes and .dsc.\n"
-"If it was just that the signature failed, you may try again by using\n"
-"debsign by hand to sign the changes file (see the command dgit tried,\n"
-"above), and then dput that changes file to complete the upload.\n"
-"If you need to change the package, you must use a new version number.\n"
-msgstr ""
-"Push mislukte bij het verkrijgen van de ondertekening van .changes en .dsc.\n"
-"Indien het louter een mislukte ondertekening betreft, kunt u opnieuw "
-"proberen\n"
-"door handmatig het changes-bestand te ondertekenen met debsign (zie "
-"hierboven\n"
-"welk commando dgit gebruikte) en vervolgens het changes-bestand te uploaden\n"
-"met dput om zo de upload te vervolledigen.\n"
-"Indien u het pakket moet aanpassen, moet u een nieuw versienummer "
-"gebruiken.\n"
-
-#: ../dgit:4762
-#, perl-format
-msgid "pushed and uploaded %s"
-msgstr "%s gepusht en geüpload"
-
-#: ../dgit:4774
-msgid "-p is not allowed with clone; specify as argument instead"
-msgstr ""
-"-p mag niet met clone gebruikt worden; geef het in de plaats daarvan op als "
-"argument"
-
-#: ../dgit:4785
-msgid "incorrect arguments to dgit clone"
-msgstr "incorrecte argumenten voor dgit clone"
-
-#: ../dgit:4791 ../git-debrebase:1839
-#, perl-format
-msgid "%s already exists"
-msgstr "%s bestaat reeds"
-
-#: ../dgit:4805
-#, perl-format
-msgid "remove %s: %s\n"
-msgstr "verwijder %s: %s\n"
-
-#: ../dgit:4809
-#, perl-format
-msgid "check whether to remove %s: %s\n"
-msgstr "controleer of %s moet verwijderd worden: %s\n"
-
-#: ../dgit:4847
-msgid "incorrect arguments to dgit fetch or dgit pull"
-msgstr "incorrecte argumenten voor dgit fetch of dgit pull"
-
-#: ../dgit:4864
-#, perl-format
-msgid "dgit pull not yet supported in split view mode (--quilt=%s)\n"
-msgstr ""
-"dgit pull wordt in gesplitste weergavemodus (--quilt=%s) nog niet "
-"ondersteund\n"
-
-#: ../dgit:4873
-msgid "dgit checkout needs a suite argument"
-msgstr "dgit checkout heeft een suite nodig als argument"
-
-#: ../dgit:4935
-#, perl-format
-msgid "setting up vcs-git: %s\n"
-msgstr "bezig met opzetten van vcs-git: %s\n"
-
-#: ../dgit:4938
-#, perl-format
-msgid "vcs git already configured: %s\n"
-msgstr "vcs git is reeds geconfigureerd: %s\n"
-
-#: ../dgit:4940
-#, perl-format
-msgid "changing vcs-git url to: %s\n"
-msgstr "url van vcs-git wordt veranderd naar: %s\n"
-
-#: ../dgit:4945
-#, perl-format
-msgid "fetching (%s)\n"
-msgstr "bezig met ophalen (%s)\n"
-
-#: ../dgit:4960
-#, perl-format
-msgid "incorrect arguments to dgit %s"
-msgstr "incorrecte argumenten voor dgit %s"
-
-#: ../dgit:4971
-#, perl-format
-msgid "dgit %s: changelog specifies %s (%s) but command line specifies %s"
-msgstr ""
-"dgit %s: het changelog-bestand vermeldt %s (%s), maar op de commandoregel "
-"wordt %s opgegeven"
-
-#: ../dgit:5009
-#, perl-format
-msgid ""
-"build host has dgit rpush protocol versions %s but invocation host has %s"
-msgstr ""
-"de protocolversies van dgit rpush op de bouwcomputer zijn %s, maar die van "
-"de aanroepende computer zijn %s"
-
-#: ../dgit:5089
-#, perl-format
-msgid "create %s: %s"
-msgstr "maak %s aan: %s"
-
-#: ../dgit:5126
-#, perl-format
-msgid "build host child failed: %s"
-msgstr "dochterproces op de bouwcomputer faalde: %s"
-
-#: ../dgit:5129
-msgid "all done\n"
-msgstr "alles klaar\n"
-
-#: ../dgit:5138
-#, perl-format
-msgid "file %s (%s) twice"
-msgstr "bestand %s (%s) tweemaal"
-
-#: ../dgit:5146
-msgid "bad param spec"
-msgstr "slechte parameter-spec"
-
-#: ../dgit:5152
-msgid "bad previously spec"
-msgstr "slechte vroegere spec"
-
-#: ../dgit:5171
-#, perl-format
-msgid ""
-"rpush negotiated protocol version %s which does not support quilt mode %s"
-msgstr ""
-"de onderhandeling van rpush leverde protocolversie %s op, welke quilt-modus "
-"%s niet ondersteunt"
-
-#: ../dgit:5216
-#, perl-format
-msgid "buildinfo mismatch in field %s"
-msgstr "buildinfo-incongruentie in veld %s"
-
-#: ../dgit:5219
-#, perl-format
-msgid "buildinfo contains forbidden field %s"
-msgstr "buildinfo bevat ongeoorloofd veld %s"
-
-#: ../dgit:5260
-msgid "remote changes file"
-msgstr "extern changes-bestand"
-
-#: ../dgit:5335
-msgid "not a plain file or symlink\n"
-msgstr "geen echt bestand of symbolische koppeling\n"
-
-#: ../dgit:5341
-msgid "mode or type changed\n"
-msgstr "modus of type gewijzigd\n"
-
-#: ../dgit:5342
-msgid "modified symlink\n"
-msgstr "symbolische koppeling gewijzigd\n"
-
-#: ../dgit:5345
-msgid "deletion of symlink\n"
-msgstr "verwijdering van symbolische koppeling\n"
-
-#: ../dgit:5349
-msgid "creation with non-default mode\n"
-msgstr "creatie met een niet-standaard modus\n"
-
-#: ../dgit:5379
-msgid "dgit view: changes are required..."
-msgstr "dgit-weergave: er zijn wijzigingen vereist..."
-
-#: ../dgit:5408
-#, perl-format
-msgid ""
-"\n"
-"For full diff showing the problem(s), type:\n"
-" %s\n"
-msgstr ""
-"\n"
-"Voor een volledige diff die het/de probl(e)em(en) laat zien, typt u:\n"
-" %s\n"
-
-#: ../dgit:5415
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-unapplied git tree\n"
-" but git tree differs from orig in upstream files."
-msgstr ""
-"--quilt=%s opgegeven, hetgeen een patches-unapplied git tree impliceert\n"
-" (een git-boom zonder dat de patches toegepast worden)\n"
-" maar de git-boom verschilt van orig in de toeleveraarsbestanden."
-
-#: ../dgit:5421
-msgid ""
-"\n"
-" ... debian/patches is missing; perhaps this is a patch queue branch?"
-msgstr ""
-"\n"
-" ... debian/patches ontbreekt; is dit misschien een tak met een patch-"
-"wachtrij?"
-
-#: ../dgit:5428
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying patches-applied git tree\n"
-" but git tree differs from result of applying debian/patches to upstream\n"
-msgstr ""
-"--quilt=%s opgegeven, hetgeen een patches-applied git tree impliceert\n"
-" (een git-boom met toegepaste patches)\n"
-" maar de git-boom verschilt van het resultaat van het toepassen van\n"
-" debian/patches op de broncode van de toeleveraar.\n"
-
-#: ../dgit:5435
-msgid "dgit view: creating patches-applied version using gbp pq"
-msgstr ""
-"dgit-weergave: met gbp pq wordt een versie met toegepaste patches gemaakt"
-
-#: ../dgit:5444
-#, perl-format
-msgid ""
-"--quilt=%s specified, implying that HEAD is for use with a\n"
-" tool which does not create patches for changes to upstream\n"
-" .gitignores: but, such patches exist in debian/patches.\n"
-msgstr ""
-"--quilt=%s werd opgegeven, hetgeen inhoudt dat HEAD bedoeld is om gebruikt\n"
-" te worden met een hulpmiddel dat geen patches maakt om .gitignores van de\n"
-" toeleveraar te wijzigen: maar debian/patches heeft wel dergelijke patches.\n"
-
-#: ../dgit:5453
-msgid "dgit view: creating patch to represent .gitignore changes"
-msgstr ""
-"dgit-weergave: een patch wordt gemaakt om de wijzigingen aan .gitignore te "
-"representeren"
-
-#: ../dgit:5458
-#, perl-format
-msgid "%s already exists; but want to create it to record .gitignore changes"
-msgstr ""
-"%s bestaat reeds; maar wil het aanmaken om de wijzigingen aan .gitignore op "
-"te tekenen"
-
-#: ../dgit:5463
-msgid ""
-"Subject: Update .gitignore from Debian packaging branch\n"
-"\n"
-"The Debian packaging git branch contains these updates to the upstream\n"
-".gitignore file(s).  This patch is autogenerated, to provide these\n"
-"updates to users of the official Debian archive view of the package.\n"
-msgstr ""
-"Onderwerp: Bijwerken van .gitignore vanuit de Debian pakketbouw-tak\n"
-"\n"
-"De git-tak met het Debian pakket bevat deze bijwerkingen aan het/de\n"
-".gitignore-bestand(en) van de toeleveraar. Deze patch werd automatisch\n"
-"gegenereerd om deze updates ter beschikking te stellen van gebruikers van\n"
-"de weergave van het pakket uit het officiële Debian-archief.\n"
-
-#: ../dgit:5485
-msgid "Commit patch to update .gitignore\n"
-msgstr "Commit (vastleggen) van patch om .gitignore bij te werken\n"
-
-#: ../dgit:5499
-msgid "converted"
-msgstr "omgezet"
-
-#: ../dgit:5500
-#, perl-format
-msgid "dgit view: created (%s)"
-msgstr "dgit-weergave: gecreëerd: (%s)"
-
-#: ../dgit:5565
+#: ../dgit:5650
 msgid "maximum search space exceeded"
 msgstr "maximale zoekruimte overschreden"
 
-#: ../dgit:5583
+#: ../dgit:5668
 #, perl-format
 msgid "has %s not %s"
 msgstr "bevat %s, niet %s"
 
-#: ../dgit:5592
+#: ../dgit:5677
 msgid "root commit"
 msgstr "beginvastlegging (root commit)"
 
-#: ../dgit:5598
+#: ../dgit:5683
 #, perl-format
 msgid "merge (%s nontrivial parents)"
 msgstr "samenvoeging (merge) (%s niet-triviale ouders)"
 
-#: ../dgit:5610
+#: ../dgit:5695
 #, perl-format
 msgid "changed %s"
 msgstr "gewijzigd: %s"
 
-#: ../dgit:5629
+#: ../dgit:5714
 #, perl-format
 msgid ""
 "\n"
@@ -1705,23 +1219,23 @@ msgstr ""
 "\n"
 "%s: fout: een quilt fixup kan niet lineair zijn. Gestopt bij:\n"
 
-#: ../dgit:5636
+#: ../dgit:5721
 #, perl-format
 msgid "%s:  %s: %s\n"
 msgstr "%s:  %s: %s\n"
 
-#: ../dgit:5648
+#: ../dgit:5733
 msgid "quilt history linearisation failed.  Search `quilt fixup' in dgit(7).\n"
 msgstr ""
 "lineair maken van de quilt-geschiedenis mislukte. Zoek naar `quilt fixup' in "
 "dgit(7).\n"
 
-#: ../dgit:5651
+#: ../dgit:5736
 msgid "quilt fixup cannot be linear, smashing..."
 msgstr ""
 "de quilt fixup kan niet lineair zijn, de smash strategie wordt gebruikt..."
 
-#: ../dgit:5663
+#: ../dgit:5748
 #, perl-format
 msgid ""
 "Automatically generated patch (%s)\n"
@@ -1732,72 +1246,89 @@ msgstr ""
 "Laatste (tot en met) %s git-wijzigingen, ter informatie:\n"
 "\n"
 
-#: ../dgit:5670
+#: ../dgit:5755
 msgid "quiltify linearisation planning successful, executing..."
 msgstr "linearisatieplanning voor quiltify was succesvol, wordt uitgevoerd..."
 
-#: ../dgit:5704
+#: ../dgit:5789
 msgid "contains unexpected slashes\n"
 msgstr "bevat onverwachte slashes\n"
 
-#: ../dgit:5705
+#: ../dgit:5790
 msgid "contains leading punctuation\n"
 msgstr "bevat leestekens aan het begin\n"
 
-#: ../dgit:5706
+#: ../dgit:5791
 msgid "contains bad character(s)\n"
 msgstr "bevat foutieve teken(s)\n"
 
-#: ../dgit:5707
+#: ../dgit:5792
 msgid "is series file\n"
 msgstr "is een series-bestand\n"
 
-#: ../dgit:5708
+#: ../dgit:5793
 msgid "too long\n"
 msgstr "te lang\n"
 
-#: ../dgit:5712
+#: ../dgit:5797
 #, perl-format
 msgid "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s"
 msgstr ""
 "quiltifying commit (quiltificerende vastlegging) %s: Gbp-Pq %s wordt "
 "genegeerd/weggelaten: %s"
 
-#: ../dgit:5741
+#: ../dgit:5826
 #, perl-format
 msgid "dgit: patch title transliteration error: %s"
 msgstr "dgit: fout bij de transliteratie van de patch-titel: %s"
 
-#: ../dgit:5884
+#: ../dgit:5909
+#, perl-format
+msgid ""
+"quilt mode %s does not make sense (or is not supported) with single-debian-"
+"patch"
+msgstr ""
+"quilt modus %s is zinloos (of wordt niet ondersteund) met single-debian-patch"
+
+#: ../dgit:5927
+msgid "converted"
+msgstr "omgezet"
+
+#: ../dgit:5928
+#, perl-format
+msgid "dgit view: created (%s)"
+msgstr "dgit-weergave: gecreëerd: (%s)"
+
+#: ../dgit:5982
 msgid "Commit removal of .pc (quilt series tracking data)\n"
 msgstr ""
 "Vastleggingsverwijdering (commit removal) van .pc (quilt-seriegegevens)\n"
 
-#: ../dgit:5894
+#: ../dgit:5992
 msgid "starting quiltify (single-debian-patch)"
 msgstr "quiltify wordt gestart (één enkele debian-patch)"
 
-#: ../dgit:5996
+#: ../dgit:6102
 #, perl-format
 msgid "dgit: split brain (separate dgit view) may be needed (--quilt=%s)."
 msgstr ""
 "dgit: gespleten brein (aparte dgit-weergave) is mogelijk nodig (--quilt=%s)."
 
-#: ../dgit:6027
+#: ../dgit:6134
 #, perl-format
 msgid "dgit view: found cached (%s)"
 msgstr "dgit-weergave: gecachete (%s) aangetroffen"
 
-#: ../dgit:6032
+#: ../dgit:6139
 msgid "dgit view: found cached, no changes required"
 msgstr "dgit-weergave: gecachete aangetroffen, geen wijzigingen vereist"
 
-#: ../dgit:6043
+#: ../dgit:6174
 #, perl-format
 msgid "examining quilt state (multiple patches, %s mode)"
 msgstr "toestand van quilt wordt nagegaan (meerdere patches, %s-modus)"
 
-#: ../dgit:6134
+#: ../dgit:6288
 msgid ""
 "failed to apply your git tree's patch stack (from debian/patches/) to\n"
 " the corresponding upstream tarball(s).  Your source tree and .orig\n"
@@ -1806,72 +1337,99 @@ msgid ""
 msgstr ""
 "toepassen van de patch-stapel (uit debian/patches/) van uw git-boom op het/"
 "de\n"
-" overeenkomstig(e) tararchie(f)(ven) van de toeleveraar mislukte.\n"
+" overeenkomstig(e) tararchie(f)(ven) van de bovenstroomse toeleveraar "
+"mislukte.\n"
 " Uw broncodeboom en .orig zijn wellicht te inconsistent.\n"
 " dgit can enkel bepaalde soorten anomalieën repareren\n"
 " (afhankelijk van de quilt-modus). Raadpleeg --quilt= in dgit(1).\n"
 
-#: ../dgit:6148
+#: ../dgit:6302
 msgid "Tree already contains .pc - will use it then delete it."
 msgstr "Boom bevat reeds een .pc - zal dit gebruiken en dan verwijderen."
 
-#: ../dgit:6185
+#: ../dgit:6336
+msgid "baredebian quilt fixup: could not find any origs"
+msgstr "baredebian quilt reparatie: kon geen origs vinden"
+
+#: ../dgit:6349
+msgid "tarball"
+msgstr "tar-archief"
+
+#: ../dgit:6367
+#, perl-format
+msgid "Combine orig tarballs for %s %s"
+msgstr " Combineren van orig tar-archieven voor %s %s"
+
+#: ../dgit:6383
+msgid "tarballs"
+msgstr "tar-archieven"
+
+#: ../dgit:6397
+msgid "upstream"
+msgstr "bovenstrooms"
+
+#: ../dgit:6421
 #, perl-format
 msgid "%s: base trees orig=%.20s o+d/p=%.20s"
 msgstr "%s: van de basisbomen zijn orig=%.20s en o+d/p=%.20s"
 
-#: ../dgit:6188
+#: ../dgit:6431
 #, perl-format
 msgid ""
 "%s: quilt differences: src:  %s orig %s     gitignores:  %s orig %s\n"
-"%s: quilt differences:      HEAD %s o+d/p               HEAD %s o+d/p"
+"%s: quilt differences: %9.00009s %s o+d/p          %9.00009s %s o+d/p"
 msgstr ""
 "%s: quilt-verschillen: src:  %s orig %s     gitignores:  %s orig %s\n"
-"%s: quilt-verschillen:      HEAD %s o+d/p               HEAD %s o+d/p"
+"%s: quilt-verschillen:  %9.00009s %s o+d/p          %9.00009s %s o+d/p"
 
-#: ../dgit:6194
+#: ../dgit:6440
 #, perl-format
 msgid "dgit:  cannot represent change: %s: %s\n"
 msgstr "dgit: kan wijziging niet representeren: %s: %s\n"
 
-#: ../dgit:6198
+#: ../dgit:6444
 msgid ""
 "HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'\n"
 msgstr ""
 "HEAD bevat wijzigingen aan .orig[s] welke niet door `3.0 (quilt)' vertolkt "
 "kunnen worden\n"
 
-#: ../dgit:6205
+#: ../dgit:6451
+msgid ""
+"This has only a debian/ directory; you probably want --quilt=bare debian."
+msgstr "Dit bevat enkel een map debian/; wellicht wilt u --quilt=bare debian."
+
+#: ../dgit:6455
 msgid "This might be a patches-unapplied branch."
 msgstr "Dit is mogelijk een tak zonder toepassing van patches."
 
-#: ../dgit:6208
+#: ../dgit:6458
 msgid "This might be a patches-applied branch."
 msgstr "Dit is mogelijk een tak met toegepaste patches."
 
-#: ../dgit:6211
+#: ../dgit:6461
 msgid "Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?"
 msgstr ""
 "Heeft u mogelijk een van de volgende opties nodig: --[quilt=]gbp --"
 "[quilt=]dpm --quilt=unapplied ?"
 
-#: ../dgit:6214
+#: ../dgit:6464
 msgid "Warning: Tree has .gitattributes.  See GITATTRIBUTES in dgit(7)."
 msgstr ""
 "Waarschuwing: Boom bevat .gitattributes.  Zie GITATTRIBUTES in dgit(7)."
 
-#: ../dgit:6218
+#: ../dgit:6468
 msgid "Maybe orig tarball(s) are not identical to git representation?"
 msgstr ""
 "Is/zijn het/de orig-tararchie(f)(ven) misschien niet identiek aan de "
 "representatie ervan door git?"
 
-#: ../dgit:6227
+#: ../dgit:6479
 #, perl-format
 msgid "starting quiltify (multiple patches, %s mode)"
 msgstr "quiltify wordt gestart (meerdere patches, %s-modus)"
 
-#: ../dgit:6265
+#: ../dgit:6518
 msgid ""
 "\n"
 "dgit: Building, or cleaning with rules target, in patches-unapplied tree.\n"
@@ -1886,13 +1444,13 @@ msgstr ""
 "dgit: (Overweeg het gebruik van --clean=git en (of) dgit sbuild.)\n"
 "\n"
 
-#: ../dgit:6277
+#: ../dgit:6530
 msgid "dgit: Unapplying patches again to tidy up the tree."
 msgstr ""
 "dgit: Bezig toepassen van patches terug ongedaan te maken om de boom op te "
 "schonen."
 
-#: ../dgit:6306
+#: ../dgit:6559
 msgid ""
 "If this is just missing .gitignore entries, use a different clean\n"
 "mode, eg --clean=dpkg-source,no-check (-wdn/-wddn) to ignore them\n"
@@ -1904,18 +1462,18 @@ msgstr ""
 "negeren, of --clean=git (-wg/-wgf) om in de plaats `git clean' te "
 "gebruiken.\n"
 
-#: ../dgit:6318
+#: ../dgit:6571
 msgid "tree contains uncommitted files and --clean=check specified"
 msgstr ""
 "de boom bevat niet-vastgelegde bestanden en --clean=check werd opgegeven"
 
-#: ../dgit:6321
+#: ../dgit:6574
 msgid "tree contains uncommitted files (NB dgit didn't run rules clean)"
 msgstr ""
 "de boom bevat niet-vastgelegde bestanden (NB dgit voerde geen rules clean "
 "uit)"
 
-#: ../dgit:6324
+#: ../dgit:6577
 msgid ""
 "tree contains uncommited, untracked, unignored files\n"
 "You can use --clean=git[-ff],always (-wga/-wgfa) to delete them."
@@ -1923,80 +1481,124 @@ msgstr ""
 "de boom bevat niet-vastgelegde, niet-gevolgde, niet-genegeerde bestanden\n"
 "U kunt --clean=git[-ff],always (-wga/-wgfa) gebruiken om ze te verwijderen."
 
-#: ../dgit:6342
+#: ../dgit:6590
+#, perl-format
+msgid ""
+"quilt mode %s (generally needs untracked upstream files)\n"
+"contradicts clean mode %s (which would delete them)\n"
+msgstr ""
+"quilt modus %s (heeft meestal niet gevolgde bovenstroomse bestanden nodig)\n"
+"is in strijd met clean modus %s (welke deze zou verwijderen)\n"
+
+#: ../dgit:6607
 msgid "tree contains uncommitted files (after running rules clean)"
 msgstr ""
 "de boom bevat niet-vastgelegde bestanden (na het uitvoeren van rules clean)"
 
-#: ../dgit:6356
+#: ../dgit:6621
 msgid "clean takes no additional arguments"
 msgstr "met clean kunnen geen extra argumenten opgegeven worden"
 
-#: ../dgit:6369
+#: ../dgit:6640
 #, perl-format
-msgid "-p is not allowed with dgit %s"
-msgstr "-p is niet toegestaan met dgit %s"
+msgid "-p specified package %s, but changelog says %s"
+msgstr "-p specificeerde pakket %s, maar het changelog-bestand vermeldt %s"
 
-#: ../dgit:6408
+#: ../dgit:6650
+msgid ""
+"dgit: --include-dirty is not supported with split view (including with view-"
+"splitting quilt modes)"
+msgstr ""
+"dgit: --include-dirty wordt niet ondersteund bij gesplitste weergave (met "
+"inbegrip van quilt-modi welke de weergave splitsen)"
+
+#: ../dgit:6659
+#, perl-format
+msgid "dgit: --quilt=%s, %s"
+msgstr "dgit: --quilt=%s, %s"
+
+#: ../dgit:6663
+msgid "dgit: --upstream-commitish only makes sense with --quilt=baredebian"
+msgstr "dgit: --upstream-commitish is enkel zinvol met --quilt=baredebian"
+
+#: ../dgit:6698
 #, perl-format
 msgid "remove old changes file %s: %s"
 msgstr "verwijder oud changes-bestand %s: %s"
 
-#: ../dgit:6410
+#: ../dgit:6700
 #, perl-format
 msgid "would remove %s"
 msgstr "zou %s verwijderen"
 
-#: ../dgit:6436
+#: ../dgit:6718
+#, perl-format
+msgid "warning: dgit option %s must be passed before %s on dgit command line\n"
+msgstr ""
+"waarschuwing: aan de commandoregel van dgit moet de optie %s van dgit "
+"opgegeven worden voor %s\n"
+
+#: ../dgit:6725
+#, perl-format
+msgid ""
+"warning: option %s should probably be passed to dgit before %s sub-command "
+"on the dgit command line, so that it is seen by dgit and not simply passed "
+"to %s\n"
+msgstr ""
+"waarschuwing: op de commandoregel van dgit moet optie %s wellicht meegegeven "
+"worden aan dgit voor het sub-commando %s, zodat het door dgit gezien wordt "
+"en niet enkel meegegeven wordt aan %s\n"
+
+#: ../dgit:6751
 msgid "archive query failed (queried because --since-version not specified)"
 msgstr ""
 "mislukt verzoek aan het archief (verzoek gedaan omdat --since-version niet "
 "opgegeven werd)"
 
-#: ../dgit:6442
+#: ../dgit:6757
 #, perl-format
 msgid "changelog will contain changes since %s"
 msgstr "changelog zal wijzigingen sinds %s bevatten"
 
-#: ../dgit:6445
+#: ../dgit:6760
 msgid "package seems new, not specifying -v<version>"
 msgstr "pakket lijkt nieuw te zijn, geen vermelding van -v<versie>"
 
-#: ../dgit:6488
+#: ../dgit:6803
 msgid "Wanted to build nothing!"
 msgstr "Wilde niets bouwen!"
 
-#: ../dgit:6526
+#: ../dgit:6841
 #, perl-format
 msgid "only one changes file from build (%s)\n"
 msgstr "slechts Ã©Ã©n changes-bestand van bouw (%s)\n"
 
-#: ../dgit:6533
+#: ../dgit:6848
 #, perl-format
 msgid "%s found in binaries changes file %s"
 msgstr "%s aangetroffen in changes-bestand %s van de binaire pakketten"
 
-#: ../dgit:6540
+#: ../dgit:6855
 #, perl-format
 msgid "%s unexpectedly not created by build"
 msgstr "%s tegen de verwachtingen in niet gecreëerd door de bouw"
 
-#: ../dgit:6544
+#: ../dgit:6859
 #, perl-format
 msgid "install new changes %s{,.inmulti}: %s"
 msgstr "installeer nieuw changes %s{,.inmulti}: %s"
 
-#: ../dgit:6549
+#: ../dgit:6864
 #, perl-format
 msgid "wrong number of different changes files (%s)"
 msgstr "fout nummer van verschillende changes-bestanden (%s)"
 
-#: ../dgit:6552
+#: ../dgit:6867
 #, perl-format
 msgid "build successful, results in %s\n"
 msgstr "bouw was succesvol, resultaten in %s\n"
 
-#: ../dgit:6565
+#: ../dgit:6880
 #, perl-format
 msgid ""
 "changes files other than source matching %s already present; building would "
@@ -2008,11 +1610,11 @@ msgstr ""
 "resultaat.\n"
 "De suggestie is dat u %s verwijdert.\n"
 
-#: ../dgit:6583
+#: ../dgit:6898
 msgid "build successful\n"
 msgstr "de bouw was succesvol\n"
 
-#: ../dgit:6590
+#: ../dgit:6906
 #, perl-format
 msgid ""
 "%s: warning: build-products-dir set, but not supported by dpkg-buildpackage\n"
@@ -2023,30 +1625,30 @@ msgstr ""
 "%s: waarschuwing: build-products-dir zal genegeerd worden; bestanden zullen "
 "gaan naar ..\n"
 
-#: ../dgit:6700
+#: ../dgit:7017
 #, perl-format
 msgid "remove %s: %s"
 msgstr "verwijder %s: %s"
 
-#: ../dgit:6735
+#: ../dgit:7054
 msgid "--include-dirty not supported with --build-products-dir, sorry"
 msgstr "--include-dirty niet ondersteund met --build-products-dir, sorry"
 
-#: ../dgit:6755
+#: ../dgit:7074
 #, perl-format
 msgid "put in place new built file (%s): %s"
 msgstr "zet nieuw gebouwd bestand (%s) op zijn plaats: %s"
 
-#: ../dgit:6768
+#: ../dgit:7087
 msgid "build-source takes no additional arguments"
 msgstr "build-source moet zonder bijkomende argumenten gebruikt worden"
 
-#: ../dgit:6772
+#: ../dgit:7091
 #, perl-format
 msgid "source built, results in %s and %s"
 msgstr "broncodepakket is gebouwd, resultaten in %s en %s"
 
-#: ../dgit:6779
+#: ../dgit:7098
 msgid ""
 "dgit push-source: --include-dirty/--ignore-dirty does not makesense with "
 "push-source!"
@@ -2054,21 +1656,21 @@ msgstr ""
 "dgit push-source: --include-dirty/--ignore-dirty zijn zinloos met push-"
 "source!"
 
-#: ../dgit:6785
+#: ../dgit:7104
 msgid "source changes file"
 msgstr "broncode-changes-bestand"
 
-#: ../dgit:6787
+#: ../dgit:7106
 msgid "user-specified changes file is not source-only"
 msgstr ""
 "door de gebruiker opgegeven changes-bestand is niet 'uitsluitend broncode'"
 
-#: ../dgit:6807 ../dgit:6809
+#: ../dgit:7126 ../dgit:7128
 #, perl-format
 msgid "%s (in build products dir): %s"
 msgstr "%s (in bouwproductenmap): %s"
 
-#: ../dgit:6822
+#: ../dgit:7142
 msgid ""
 "perhaps you need to pass -A ?  (sbuild's default is to build only\n"
 "arch-specific binaries; dgit 1.4 used to override that.)\n"
@@ -2077,7 +1679,7 @@ msgstr ""
 "specifieke\n"
 "binaire pakketten te bouwen; dgit 1.4 was gewend dit te overschrijven.)\n"
 
-#: ../dgit:6834
+#: ../dgit:7155
 msgid ""
 "you asked for a builder but your debbuildopts didn't ask for any binaries -- "
 "is this really what you meant?"
@@ -2085,7 +1687,7 @@ msgstr ""
 "u vroeg een bouwprogramma maar uw debbuildopts vroeg geen enkel binair "
 "pakket - is dit echt wat u bedoelde?"
 
-#: ../dgit:6838
+#: ../dgit:7159
 msgid ""
 "we must build a .dsc to pass to the builder but your debbuiltopts forbids "
 "the building of a source package; cannot continue"
@@ -2094,65 +1696,65 @@ msgstr ""
 "debbuiltopts verbiedt het bouwen van een broncodepakket; voortgaan is "
 "onmogelijk"
 
-#: ../dgit:6868
+#: ../dgit:7189
 msgid "incorrect arguments to dgit print-unapplied-treeish"
 msgstr "foutieve argumenten voor dgit print-unapplied-treeish"
 
-#: ../dgit:6890
+#: ../dgit:7210
 msgid "source tree"
 msgstr "broncodeboom"
 
-#: ../dgit:6892
+#: ../dgit:7212
 #, perl-format
 msgid "dgit: import-dsc: %s"
 msgstr "dgit: import-dsc: %s"
 
-#: ../dgit:6905
+#: ../dgit:7225
 #, perl-format
 msgid "unknown dgit import-dsc sub-option `%s'"
 msgstr "onbekende onderliggende optie `%s' voor dgit import-dsc"
 
-#: ../dgit:6909
+#: ../dgit:7229
 msgid "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
 msgstr "gebruik: dgit import-dsc .../PAD/NAAR/.DSC TAK"
 
-#: ../dgit:6913
+#: ../dgit:7233
 msgid "dry run makes no sense with import-dsc"
 msgstr "testuitvoering (dry run) is zinloos met import-dsc"
 
-#: ../dgit:6930
+#: ../dgit:7250
 #, perl-format
 msgid "%s is checked out - will not update it"
 msgstr "%s is binnengehaald (checked out) - zal het niet bijwerken"
 
-#: ../dgit:6935
+#: ../dgit:7255
 #, perl-format
 msgid "open import .dsc (%s): %s"
 msgstr "open import-.dsc (%s): %s"
 
-#: ../dgit:6937
+#: ../dgit:7257
 #, perl-format
 msgid "read %s: %s"
 msgstr "lees %s: %s"
 
-#: ../dgit:6948
+#: ../dgit:7268
 msgid "import-dsc signature check failed"
 msgstr "controle ondertekening van import-dsc mislukte"
 
-#: ../dgit:6951
+#: ../dgit:7271
 #, perl-format
 msgid "%s: warning: importing unsigned .dsc\n"
 msgstr "%s: waarschuwing: niet-ondertekend .dsc wordt geïmporteerd\n"
 
-#: ../dgit:6962
+#: ../dgit:7282
 msgid "Dgit metadata in .dsc"
 msgstr "Dgit-metadata in .dsc"
 
-#: ../dgit:6973
+#: ../dgit:7293
 msgid "dgit: import-dsc of .dsc with Dgit field, using git hash"
 msgstr "dgit: import-dsc van .dsc met Dgit-veld, met behulp van git hash"
 
-#: ../dgit:6982
+#: ../dgit:7302
 #, perl-format
 msgid ""
 ".dsc contains Dgit field referring to object %s\n"
@@ -2163,21 +1765,21 @@ msgstr ""
 "Uw git-boom bevat dat object niet. Gebruik `git fetch' van een aannemelijke\n"
 "server (browse.dgit.d.o? salsa?) en probeer import-dsc opnieuw.\n"
 
-#: ../dgit:6989
+#: ../dgit:7309
 msgid "Not fast forward, forced update."
 msgstr "Niet lineair (fast forward), gedwongen update."
 
-#: ../dgit:6991
+#: ../dgit:7311
 #, perl-format
 msgid "Not fast forward to %s"
 msgstr "Niet lineair (fast forward) naar %s"
 
-#: ../dgit:6996
+#: ../dgit:7316
 #, perl-format
 msgid "updated git ref %s"
 msgstr "git ref %s geüpdatet"
 
-#: ../dgit:7001
+#: ../dgit:7321
 #, perl-format
 msgid ""
 "Branch %s already exists\n"
@@ -2189,93 +1791,88 @@ msgstr ""
 "geschiedenis\n"
 "Geef  +%s op om te overschrijven en bestaande geschiedenis te verwijderen\n"
 
-#: ../dgit:7021
+#: ../dgit:7341
 #, perl-format
 msgid "lstat %s works but stat gives %s !"
 msgstr "lstat %s werkt maar stat geeft %s !"
 
-#: ../dgit:7023
+#: ../dgit:7343
 #, perl-format
 msgid "stat %s: %s"
 msgstr "stat %s: %s"
 
-#: ../dgit:7031
+#: ../dgit:7351
 #, perl-format
 msgid "import %s requires %s, but: %s"
 msgstr "importeren van %s vereist %s, maar: %s"
 
-#: ../dgit:7050
+#: ../dgit:7370
 #, perl-format
 msgid "cannot import %s which seems to be inside working tree!"
 msgstr "kan %s niet importeren, het lijkt in de werkboom te zitten!"
 
-#: ../dgit:7054
+#: ../dgit:7374
 #, perl-format
 msgid "symlink %s to %s: %s"
 msgstr "symbolische koppeling %s naar %s: %s"
 
-#: ../dgit:7055
+#: ../dgit:7375
 #, perl-format
 msgid "made symlink %s -> %s"
 msgstr "maakte symbolische koppeling %s -> %s"
 
-#: ../dgit:7066
+#: ../dgit:7386
 msgid "Import, forced update - synthetic orphan git history."
 msgstr "Import, gedwongen update - kunstmatige verweesde git-geschiedenis."
 
-#: ../dgit:7068
+#: ../dgit:7388
 msgid "Import, merging."
 msgstr "Import, bezig met samenvoegen."
 
-#: ../dgit:7082
+#: ../dgit:7402
 #, perl-format
 msgid "Merge %s (%s) import into %s\n"
 msgstr "Invoegen van import %s (%s) in %s\n"
 
-#: ../dgit:7091
+#: ../dgit:7411
 #, perl-format
 msgid "results are in git ref %s"
 msgstr "resultaten staan in git ref %s"
 
-#: ../dgit:7098
+#: ../dgit:7418
 msgid "need only 1 subpath argument"
 msgstr "slechts 1 argument met een onderliggend pad nodig"
 
-#: ../dgit:7104
-#, perl-format
-msgid "exec curl: %s\n"
-msgstr "exec curl: %s\n"
-
-#: ../dgit:7118
+#: ../dgit:7436
 msgid "need destination argument"
 msgstr "bestemmingsargument nodig"
 
-#: ../dgit:7123
+#: ../dgit:7441
 #, perl-format
 msgid "exec git clone: %s\n"
 msgstr "exec git clone: %s\n"
 
-#: ../dgit:7131
+#: ../dgit:7449
 msgid "no arguments allowed to dgit print-dgit-repos-server-source-url"
 msgstr "geen argumenten toegelaten bij dgit print-dgit-repos-server-source-url"
 
-#: ../dgit:7142
+#: ../dgit:7460
 msgid "no arguments allowed to dgit print-dpkg-source-ignores"
 msgstr "geen argumenten toegelaten bij dgit print-dpkg-source-ignores"
 
-#: ../dgit:7148
+#: ../dgit:7466
 msgid "no arguments allowed to dgit setup-mergechangelogs"
 msgstr "geen argumenten toegelaten bij dgit setup-mergechangelogs"
 
-#: ../dgit:7155 ../dgit:7161
+#: ../dgit:7473 ../dgit:7479
 msgid "no arguments allowed to dgit setup-useremail"
 msgstr "geen argumenten toegelaten bij dgit setup-useremail"
 
-#: ../dgit:7167
+#: ../dgit:7485
 msgid "no arguments allowed to dgit setup-tree"
 msgstr "geen argumenten toegelaten bij dgit setup-tree"
 
-#: ../dgit:7214
+#: ../dgit:7532
 msgid ""
 "--initiator-tempdir must be used specify an absolute, not relative, "
 "directory."
@@ -2283,42 +1880,42 @@ msgstr ""
 "--initiator-tempdir moet gebruikt worden om een absolute, geen relatieve map "
 "op te geven."
 
-#: ../dgit:7253
+#: ../dgit:7571
 #, perl-format
 msgid "%s needs a value"
 msgstr "%s moet een waarde hebben"
 
-#: ../dgit:7257
+#: ../dgit:7575
 #, perl-format
 msgid "bad value `%s' for %s"
 msgstr "foute waarde `%s' voor %s"
 
-#: ../dgit:7348
+#: ../dgit:7675
 #, perl-format
 msgid "%s: warning: ignoring unknown force option %s\n"
 msgstr "%s: waarschuwing: onbekende force-optie %s wordt genegeerd\n"
 
-#: ../dgit:7368
+#: ../dgit:7693
 #, perl-format
 msgid "unknown long option `%s'"
 msgstr "onbekende lange optie `%s'"
 
-#: ../dgit:7423
+#: ../dgit:7748
 #, perl-format
 msgid "unknown short option `%s'"
 msgstr "onbekende korte optie `%s'"
 
-#: ../dgit:7438
+#: ../dgit:7763
 #, perl-format
 msgid "%s is set to something other than SIG_DFL\n"
 msgstr "%s staat ingesteld op iets anders dan SIG_DFL\n"
 
-#: ../dgit:7442
+#: ../dgit:7767
 #, perl-format
 msgid "%s is blocked\n"
 msgstr "%s is geblokkeerd\n"
 
-#: ../dgit:7448
+#: ../dgit:7773
 #, perl-format
 msgid ""
 "On entry to dgit, %s\n"
@@ -2329,53 +1926,42 @@ msgstr ""
 "Dit is een bug die veroorzaakt wordt door iets in uw uitvoeringsomgeving.\n"
 "Er wordt opgegeven.\n"
 
-#: ../dgit:7465
+#: ../dgit:7790
 #, perl-format
 msgid "cannot set command for %s"
 msgstr "kan commando voor %s niet instellen"
 
-#: ../dgit:7478
+#: ../dgit:7803
 #, perl-format
 msgid "cannot configure options for %s"
 msgstr "kan opties voor %s niet configureren"
 
-#: ../dgit:7498
+#: ../dgit:7823
 #, perl-format
 msgid "unknown quilt-mode `%s'"
 msgstr "onbekende quilt-modus `%s'"
 
-#: ../dgit:7508
+#: ../dgit:7834
 #, perl-format
 msgid "unknown %s setting `%s'"
 msgstr "onbekende %s dat `%s' instelt"
 
-#: ../dgit:7513
-msgid "dgit: --include-dirty is not supported in split view quilt mode"
-msgstr ""
-"dgit: --include-dirty wordt niet ondersteund in de quilt-modus gesplitste "
-"weergave"
-
-#: ../dgit:7524
-#, perl-format
-msgid "unknown clean-mode `%s'"
-msgstr "onbekende clean-modus `%s'"
-
-#: ../dgit:7545
+#: ../dgit:7862
 msgid "DRY RUN ONLY\n"
 msgstr "ENKEL TESTUITVOERING (DRY RUN)\n"
 
-#: ../dgit:7546
+#: ../dgit:7863
 msgid "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
 msgstr ""
 "GETEMPERDE UITVOERING (DAMP RUN) - ZAL LOKALE (NIET-ONDERTEKENDE) "
 "WIJZIGINGEN MAKEN\n"
 
-#: ../dgit:7565
+#: ../dgit:7882
 #, perl-format
 msgid "unknown operation %s"
 msgstr "onbekende bewerking %s"
 
-#: ../git-debrebase:44
+#: ../git-debrebase:45
 msgid ""
 "usages:\n"
 "  git-debrebase [<options>] [--|-i <git rebase options...>]\n"
@@ -2397,50 +1983,50 @@ msgstr ""
 "  ...\n"
 "Zie git-debrebase(1), git-debrebase(5), dgit-maint-debrebase(7) (in dgit).\n"
 
-#: ../git-debrebase:67
+#: ../git-debrebase:68
 #, perl-format
 msgid "%s: bad usage: %s\n"
 msgstr "%s: foutief gebruik: %s\n"
 
-#: ../git-debrebase:78
+#: ../git-debrebase:79
 #, perl-format
 msgid "bad options follow `git-debrebase %s'"
 msgstr "foutieve opties volgen na `git-debrebase %s'"
 
-#: ../git-debrebase:89
+#: ../git-debrebase:90
 #, perl-format
 msgid "missing required git config %s"
 msgstr "de vereiste git-configuratie %s ontbreekt"
 
-#: ../git-debrebase:401
+#: ../git-debrebase:363
 #, perl-format
 msgid "%s: snag ignored (-f%s): %s\n"
 msgstr "%s: moeilijkheid (snag) genegeerd (-f%s): %s\n"
 
-#: ../git-debrebase:404
+#: ../git-debrebase:366
 #, perl-format
 msgid "%s: snag detected (-f%s): %s\n"
 msgstr "%s: moeilijkheid (snag) gevonden (-f%s): %s\n"
 
-#: ../git-debrebase:417
+#: ../git-debrebase:379
 #, perl-format
 msgid "%s: snags: %d overriden by individual -f options\n"
 msgstr ""
 "%s: moeilijkheden (snags): %d overschreven door individuele -f opties\n"
 
-#: ../git-debrebase:423
+#: ../git-debrebase:385
 #, perl-format
 msgid "%s: snags: %d overriden by global --force\n"
 msgstr "%s: moeilijkheden (snags): %d overschreven door het globale --force\n"
 
-#: ../git-debrebase:427
+#: ../git-debrebase:389
 #, perl-format
 msgid "%s: snags: %d blocker(s) (you could -f<tag>, or --force)"
 msgstr ""
 "%s: moeilijkheden (snags): %d blokker(s) (u zou -f<tag> of --force kunnen "
 "gebruiken)"
 
-#: ../git-debrebase:459
+#: ../git-debrebase:421
 msgid ""
 "Branch/history seems mangled - no longer in gdr format.\n"
 "See ILLEGAL OPERATIONS in git-debrebase(5).\n"
@@ -2448,7 +2034,7 @@ msgstr ""
 "Tak/geschiedenis lijkt verknoeid - niet langer in gdr-indeling.\n"
 "Zie ILLEGAL OPERATIONS (ongeldige bewerkingen) in git-debrebase(5).\n"
 
-#: ../git-debrebase:466
+#: ../git-debrebase:428
 #, perl-format
 msgid ""
 "%s\n"
@@ -2457,7 +2043,7 @@ msgstr ""
 "%s\n"
 "Zou dit een gdr-tak moeten zijn?  %s\n"
 
-#: ../git-debrebase:471
+#: ../git-debrebase:433
 #, perl-format
 msgid ""
 "%s\n"
@@ -2468,7 +2054,7 @@ msgstr ""
 "%s\n"
 "Overweeg git-debrebase scrap, om uw recent werk weg te gooien.\n"
 
-#: ../git-debrebase:477
+#: ../git-debrebase:439
 #, perl-format
 msgid ""
 "%s\n"
@@ -2479,7 +2065,7 @@ msgstr ""
 "Tak lijkt niet bedoeld te zijn als git-debrebase tak?\n"
 "Foute tak, of misschien had u git-debrebase convert-from-* nodig.\n"
 
-#: ../git-debrebase:488
+#: ../git-debrebase:450
 #, perl-format
 msgid ""
 "%s\n"
@@ -2491,397 +2077,394 @@ msgstr ""
 "Misschien voerde u een reset naar of een rebase van een ongepaste plaats "
 "uit.\n"
 
-#: ../git-debrebase:935
+#: ../git-debrebase:897
 #, perl-format
 msgid "git-debrebase `anchor' but %s"
 msgstr "git-debrebase `anker' maar %s"
 
-#: ../git-debrebase:937
+#: ../git-debrebase:899
 msgid "has other than two parents"
 msgstr "heeft iets anders dan twee ouders"
 
-#: ../git-debrebase:938
+#: ../git-debrebase:900
 msgid "contains debian/patches"
 msgstr "bevat debian/patches"
 
-#: ../git-debrebase:964
+#: ../git-debrebase:926
 msgid "is an origin commit"
 msgstr "is een externe vastlegging (origin commit)"
 
-#: ../git-debrebase:966
+#: ../git-debrebase:928
 msgid "upstream files differ from left parent"
-msgstr "bestanden van de toeleveraar verschillen van de linkerouder"
+msgstr ""
+"bestanden van de bovenstroomse toeleveraar verschillen van de linkerouder"
 
-#: ../git-debrebase:968
+#: ../git-debrebase:930
 msgid "debian/ differs from right parent"
 msgstr "debian/ verschilt van de rechterouder"
 
-#: ../git-debrebase:979
+#: ../git-debrebase:941
 msgid "edits debian/patches"
 msgstr "bewerkt debian/patches"
 
-#: ../git-debrebase:991
+#: ../git-debrebase:953
 msgid "parent's debian is not a directory"
 msgstr "bij de ouder is debian geen map"
 
-#: ../git-debrebase:998
+#: ../git-debrebase:960
 msgid "no changes"
 msgstr "geen wijzigingen"
 
-#: ../git-debrebase:1004
+#: ../git-debrebase:966
 msgid "origin commit"
 msgstr "externe vastlegging (origin commit)"
 
-#: ../git-debrebase:1055
+#: ../git-debrebase:1017
 #, perl-format
 msgid "unknown kind of merge from %s"
 msgstr "onbekend soort samenvoeging vanuit %s"
 
-#: ../git-debrebase:1058
+#: ../git-debrebase:1020
 msgid "octopus merge"
 msgstr "meervoudige samenvoeging (octopus merge)"
 
-#: ../git-debrebase:1062
+#: ../git-debrebase:1024
 msgid "general two-parent merge"
 msgstr "algemene twee-oudersamenvoeging (two-parent merge)"
 
-#: ../git-debrebase:1079
+#: ../git-debrebase:1041
 #, perl-format
 msgid "inconsistent anchors in merged-breakwaters %s"
 msgstr "strijdige ankers in samengevoegde golfbrekers (merged-breakwaters) %s"
 
-#: ../git-debrebase:1119
+#: ../git-debrebase:1081
 #, perl-format
 msgid "branch needs laundering (run git-debrebase): %s"
 msgstr "tak heeft wasbeurt (laundering) nodig (voer git-debrebase uit): %s"
 
-#: ../git-debrebase:1147
+#: ../git-debrebase:1109
 #, perl-format
 msgid "packaging change (%s) follows upstream change"
-msgstr "wijziging (%s) bij het verpakken volgt de wijziging van de toeleveraar"
+msgstr ""
+"wijziging (%s) bij het verpakken volgt de wijziging van de bovenstroomse "
+"toeleveraar"
 
-#: ../git-debrebase:1148
+#: ../git-debrebase:1110
 #, perl-format
 msgid " (eg %s)"
 msgstr " (bijv. %s)"
 
-#: ../git-debrebase:1154
+#: ../git-debrebase:1116
 msgid "found mixed upstream/packaging commit"
-msgstr "gemengde toeleveraar/pakket-vastlegging aangetroffen"
+msgstr "gemengde toeleveraars-/verpakkings-vastlegging aangetroffen"
 
-#: ../git-debrebase:1155 ../git-debrebase:1163 ../git-debrebase:1168
-#: ../git-debrebase:1173 ../git-debrebase:1179 ../git-debrebase:1187
+#: ../git-debrebase:1117 ../git-debrebase:1125 ../git-debrebase:1130
+#: ../git-debrebase:1135 ../git-debrebase:1141 ../git-debrebase:1149
 #, perl-format
 msgid " (%s)"
 msgstr " (%s)"
 
-#: ../git-debrebase:1162
+#: ../git-debrebase:1124
 #, perl-format
 msgid "found interchange bureaucracy commit (%s)"
 msgstr "vastlegging in verband met uitwisselingsbeheer aangetroffen (%s)"
 
-#: ../git-debrebase:1167
+#: ../git-debrebase:1129
 msgid "found dgit dsc import"
 msgstr "dsc-import door dgit aangetroffen"
 
-#: ../git-debrebase:1172
+#: ../git-debrebase:1134
 msgid "found bare dgit dsc import with no prior history"
 msgstr ""
 "kale dsc-import door dgit aangetroffen zonder voorafgaande geschiedenis"
 
-#: ../git-debrebase:1178
+#: ../git-debrebase:1140
 msgid "found vanilla merge"
 msgstr "standaardsamenvoeging (vanilla merge) aangetroffen"
 
-#: ../git-debrebase:1185
+#: ../git-debrebase:1147
 #, perl-format
 msgid "found unprocessable commit, cannot cope: %s"
 msgstr "niet-verwerkbare vastlegging aangetroffen, kan er niet mee om: %s"
 
-#: ../git-debrebase:1253
+#: ../git-debrebase:1215
 #, perl-format
 msgid "found unprocessable commit, cannot cope; %3$s: (commit %1$s) (d.%2$s)"
 msgstr ""
 "niet-verwerkbare vastlegging aangetroffen, kan er niet mee om; %3$s: "
 "(vastlegging %1$s) (d.%2$s)"
 
-#: ../git-debrebase:1254
+#: ../git-debrebase:1216
 #, perl-format
 msgid "found unprocessable commit, cannot cope: (commit %1$s) (d.%2$s)"
 msgstr ""
 "niet-verwerkbare vastlegging aangetroffen, kan er niet mee om: (vastlegging "
 "%1$s) (d.%2$s)"
 
-#: ../git-debrebase:1375
+#: ../git-debrebase:1337
 msgid "bare dgit dsc import"
 msgstr "kale dsc-import door dgit"
 
-#: ../git-debrebase:1715 ../git-debrebase:1718
+#: ../git-debrebase:1677 ../git-debrebase:1680
 #, perl-format
 msgid "mismatch %s ?"
 msgstr "discrepantie %s ?"
 
-#: ../git-debrebase:1721
+#: ../git-debrebase:1683
 #, perl-format
 msgid "mismatch %s != %s ?"
 msgstr "discrepantie %s != %s ?"
 
-#: ../git-debrebase:1731
+#: ../git-debrebase:1693
 #, perl-format
 msgid "internal error %#x %s %s"
 msgstr "interne fout %#x %s %s"
 
-#: ../git-debrebase:1759
+#: ../git-debrebase:1721
 #, perl-format
 msgid "%s: laundered (head was %s)\n"
 msgstr "%s: gewassen (laundered) (head was %s)\n"
 
-#: ../git-debrebase:1773
+#: ../git-debrebase:1735
 msgid "you are in the middle of a git-rebase already"
 msgstr "u bent reeds middenin een git-rebase"
 
-#: ../git-debrebase:1799
+#: ../git-debrebase:1761
 msgid "launder for rebase"
 msgstr "wassen (launder) voor rebase"
 
-#: ../git-debrebase:1804
+#: ../git-debrebase:1766
 msgid "analyse does not support any options"
 msgstr "analyse ondersteunt geen opties"
 
-#: ../git-debrebase:1806
+#: ../git-debrebase:1768
 msgid "too many arguments to analyse"
 msgstr "te veel argumenten om te analyseren"
 
-#: ../git-debrebase:1841
+#: ../git-debrebase:1801
+#, perl-format
+msgid "%s already exists"
+msgstr "%s bestaat reeds"
+
+#: ../git-debrebase:1803
 msgid "HEAD symref is not to refs/heads/"
 msgstr "HEAD symref wijst niet naar refs/heads/"
 
-#: ../git-debrebase:1864
+#: ../git-debrebase:1826
 #, perl-format
 msgid "OK, you are ahead of %s\n"
 msgstr "Oké, u bent voor op %s\n"
 
-#: ../git-debrebase:1868
+#: ../git-debrebase:1830
 #, perl-format
 msgid "you are behind %s, divergence risk"
 msgstr "u bent achter op %s, gevaar voor uiteenlopen"
 
-#: ../git-debrebase:1872
+#: ../git-debrebase:1834
 #, perl-format
 msgid "you have diverged from %s"
 msgstr "u bent uiteengelopen van %s"
 
-#: ../git-debrebase:1894
+#: ../git-debrebase:1856
 msgid "remote dgit branch"
 msgstr "externe dgit-tak"
 
-#: ../git-debrebase:1897
+#: ../git-debrebase:1859
 msgid "remote dgit branch for sid"
 msgstr "externe dgit-tak voor sid"
 
-#: ../git-debrebase:1925
+#: ../git-debrebase:1887
 msgid "Recorded previous head for preservation"
 msgstr "Vorige head voor behoud opgetekend"
 
-#: ../git-debrebase:1933
+#: ../git-debrebase:1895
 #, perl-format
 msgid "could not record ffq-prev: %s"
 msgstr "kon ffq-prev niet optekenen: %s"
 
-#: ../git-debrebase:1944
+#: ../git-debrebase:1906
 #, perl-format
 msgid "could not check ffq-prev: %s"
 msgstr "kon ffq-prev niet controleren: %s"
 
-#: ../git-debrebase:1964
+#: ../git-debrebase:1926
 msgid "fast forward"
 msgstr "lineair (fast forward)"
 
-#: ../git-debrebase:1974
+#: ../git-debrebase:1936
 msgid "Declare fast forward / record previous work"
 msgstr "Afkondigen lineair (fast forward) / optekenen vorig werk"
 
-#: ../git-debrebase:1986
+#: ../git-debrebase:1948
 msgid "No ffq-prev to stitch."
 msgstr "Geen ffq-prev om te borduren."
 
-#: ../git-debrebase:2017
-#, perl-format
-msgid ""
-"Could not determine appropriate upstream commitish.\n"
-" (Tried these tags: %s)\n"
-" Check version, and specify upstream commitish explicitly."
-msgstr ""
-"Kon geen passende toeleveraar-commitish bepalen.\n"
-" (Probeerde deze tags: %s)\n"
-" Controleer versie en geef toeleveraar-commitish expliciet op."
-
-#: ../git-debrebase:2036
+#: ../git-debrebase:1965
 msgid "need NEW-VERSION [UPS-COMMITTISH]"
 msgstr "heb NIEUWE-VERSIE [TOEL-COMMITTISH] nodig"
 
-#: ../git-debrebase:2041
+#: ../git-debrebase:1970
 #, perl-format
 msgid "bad version number `%s'"
 msgstr "fout versienummer `%s'"
 
-#: ../git-debrebase:2059
+#: ../git-debrebase:1988
 #, perl-format
 msgid "upstream piece `%s'"
-msgstr "toeleveraarsstuk `%s'"
+msgstr "bovenstrooms stuk `%s'"
 
-#: ../git-debrebase:2060
+#: ../git-debrebase:1989
 msgid "upstream (main piece"
-msgstr "van de toeleveraar (belangrijkste stuk"
+msgstr "van de bovenstroomse toeleveraar (belangrijkste stuk"
 
-#: ../git-debrebase:2080
+#: ../git-debrebase:2009
 msgid "for each EXTRA-UPS-NAME need EXTRA-UPS-COMMITISH"
 msgstr "voor elke EXTRA-TOEL-NAAM is een EXTRA-TOEL-COMMITISH nodig"
 
-#: ../git-debrebase:2098
+#: ../git-debrebase:2027
 msgid "old anchor is recognised due to --anchor, cannot check upstream"
 msgstr ""
 "oud anker werd herkend omwille van --anchor, kan niet controleren bij "
-"toeleveraar"
+"bovenstroomse toeleveraar"
 
-#: ../git-debrebase:2114
+#: ../git-debrebase:2043
 #, perl-format
 msgid ""
 "previous upstream combine %s mentions %d pieces (each implying one parent) "
 "but has %d parents (one per piece plus maybe a previous combine)"
 msgstr ""
-"vorige toeleveraarscombinatie (upstream combine) %s vermeldt %d stukken "
+"vorige bovenstroom-bijeenvoeging (upstream combine) %s vermeldt %d stukken "
 "(hetgeen voor elk ervan Ã©Ã©n ouder impliceert) maar heeft %d ouders (één per "
-"stuk plus misschien een eerdere combinatie)"
+"stuk plus misschien een eerdere bijeenvoeging)"
 
-#: ../git-debrebase:2123
+#: ../git-debrebase:2052
 #, perl-format
 msgid "previous upstream combine %s first piece is not `.'"
 msgstr ""
-"eerste stuk van vorige toeleveraarscombinatie (upstream combine) %s is niet "
-"`.'"
+"eerste stuk van vorige bovenstroom-bijeenvoeging (upstream combine) %s is "
+"niet `.'"
 
-#: ../git-debrebase:2136
+#: ../git-debrebase:2065
 #, perl-format
 msgid ""
 "previous upstream %s is from git-debrebase but not an `upstream-combine' "
 "commit"
 msgstr ""
-"vorige toeleveraarsvastlegging %s is van git-debrebase maar geen `upstream-"
-"combine'-vastlegging"
+"vorige bovenstroomse %s is van git-debrebase maar geen `upstream-combine'-"
+"vastlegging"
 
-#: ../git-debrebase:2147
+#: ../git-debrebase:2076
 #, perl-format
 msgid "introducing upstream piece `%s'"
-msgstr "toeleveraarsstuk `%s' wordt ingevoerd"
+msgstr "bovenstrooms stuk `%s' wordt ingevoerd"
 
-#: ../git-debrebase:2150
+#: ../git-debrebase:2079
 #, perl-format
 msgid "dropping upstream piece `%s'"
-msgstr "toeleveraarsstuk `%s' wordt weggelaten"
+msgstr "bovenstrooms stuk `%s' wordt weggelaten"
 
-#: ../git-debrebase:2153
+#: ../git-debrebase:2082
 #, perl-format
 msgid "not fast forward: %s %s"
 msgstr "niet lineair (fast forward): %s %s"
 
-#: ../git-debrebase:2264
+#: ../git-debrebase:2193
 msgid "Previous head already recorded\n"
 msgstr "Vorige head reeds opgenomen\n"
 
-#: ../git-debrebase:2268
+#: ../git-debrebase:2197
 #, perl-format
 msgid "Could not preserve: %s"
 msgstr "Niet in staat te behouden: %s"
 
-#: ../git-debrebase:2273 ../git-debrebase:2279 ../git-debrebase:2285
-#: ../git-debrebase:2375 ../git-debrebase:2384 ../git-debrebase:2408
-#: ../git-debrebase:2472
+#: ../git-debrebase:2202 ../git-debrebase:2208 ../git-debrebase:2214
+#: ../git-debrebase:2304 ../git-debrebase:2313 ../git-debrebase:2337
+#: ../git-debrebase:2401
 msgid "no arguments allowed"
 msgstr "geen argumenten toegelaten"
 
-#: ../git-debrebase:2307
+#: ../git-debrebase:2236
 msgid "branch contains furniture (not laundered)"
 msgstr "tak bevat stoffering (niet gewassen)"
 
-#: ../git-debrebase:2308
+#: ../git-debrebase:2237
 msgid "branch is unlaundered"
 msgstr "tak is ongewassen (unlaundered)"
 
-#: ../git-debrebase:2309
+#: ../git-debrebase:2238
 msgid "branch needs laundering"
 msgstr "tak heeft wasbeurt nodig"
 
-#: ../git-debrebase:2310
+#: ../git-debrebase:2239
 msgid "branch not in git-debrebase form"
 msgstr "tak is niet in git-debrebase-indeling"
 
-#: ../git-debrebase:2320
+#: ../git-debrebase:2249
 msgid "current branch contents, in git-debrebase terms:\n"
 msgstr "inhoud van de huidige tak, in git-debrebase-terminologie:\n"
 
-#: ../git-debrebase:2322
+#: ../git-debrebase:2251
 msgid "  branch is laundered\n"
 msgstr "  tak is gewassen\n"
 
-#: ../git-debrebase:2338
+#: ../git-debrebase:2267
 #, perl-format
 msgid "  %s is not well-defined\n"
 msgstr "  %s is niet goed gedefinieerd\n"
 
-#: ../git-debrebase:2344
+#: ../git-debrebase:2273
 msgid "key git-debrebase commits:\n"
 msgstr "kern-git-debrebase-vastleggingen:\n"
 
-#: ../git-debrebase:2345
+#: ../git-debrebase:2274
 msgid "anchor"
 msgstr "anker"
 
-#: ../git-debrebase:2346
+#: ../git-debrebase:2275
 msgid "breakwater"
 msgstr "golfbreker (breakwater)"
 
-#: ../git-debrebase:2351
+#: ../git-debrebase:2280
 msgid "branch and ref status, in git-debrebase terms:\n"
 msgstr "toestand van tak en ref, in git-debrebase-terminologie:\n"
 
-#: ../git-debrebase:2358
+#: ../git-debrebase:2287
 msgid "  unstitched; previous tip was:\n"
 msgstr "  borduursel losgemaakt; vorige tip was:\n"
 
-#: ../git-debrebase:2361
+#: ../git-debrebase:2290
 msgid "  stitched? (no record of git-debrebase work)\n"
 msgstr "  geborduurd? (geen registratie van git-debrebase-werk)\n"
 
-#: ../git-debrebase:2363
+#: ../git-debrebase:2292
 msgid "  stitched\n"
 msgstr "  geborduurd\n"
 
-#: ../git-debrebase:2365
+#: ../git-debrebase:2294
 msgid "  not git-debrebase (diverged since last stitch)\n"
 msgstr "  geen git-debrebase (uiteengelopen sinds laatste borduursel)\n"
 
-#: ../git-debrebase:2368
+#: ../git-debrebase:2297
 msgid "you are currently rebasing\n"
 msgstr "u bent momenteel aan het rebasen\n"
 
-#: ../git-debrebase:2385 ../git-debrebase:2398
+#: ../git-debrebase:2314 ../git-debrebase:2327
 msgid "launder for git-debrebase quick"
 msgstr "wassen voor git-debrebase quick"
 
-#: ../git-debrebase:2392 ../git-debrebase:2422
+#: ../git-debrebase:2321 ../git-debrebase:2351
 msgid "No ongoing git-debrebase session."
 msgstr "Geen lopende git-debrebase-sessie."
 
-#: ../git-debrebase:2461
+#: ../git-debrebase:2390
 msgid "Commit patch queue (exported by git-debrebase)"
 msgstr "Vastlegging patch-wachtrij (geëxporteerd door git-debrebase)"
 
-#: ../git-debrebase:2478
+#: ../git-debrebase:2407
 msgid "No (more) patches to export."
 msgstr "Geen (andere) patches die geëxporteerd moeten worden."
 
-#: ../git-debrebase:2485
+#: ../git-debrebase:2414
 #, perl-format
 msgid ""
 "Patch export produced patch amendments (abandoned output commit %s).  Try "
@@ -2890,39 +2473,40 @@ msgstr ""
 "De patch-export produceerde patch-herzieningen (vastlegging van uitvoer %s "
 "gestaakt). Probeer eerst een wasbeurt te doen."
 
-#: ../git-debrebase:2505
+#: ../git-debrebase:2434
 #, perl-format
 msgid "%s contains comments, which will be discarded"
 msgstr "%s bevat commentaar die verwijderd zal worden"
 
-#: ../git-debrebase:2510
+#: ../git-debrebase:2439
 #, perl-format
 msgid "patch %s repeated in %s !"
 msgstr "patch %s herhaald in %s !"
 
-#: ../git-debrebase:2517
+#: ../git-debrebase:2446
 #, perl-format
 msgid "Unused patch file %s will be discarded"
 msgstr "Niet gebruikt patch-bestand %s zal verwijderd worden"
 
-#: ../git-debrebase:2525
+#: ../git-debrebase:2454
 msgid "ffq-prev exists, this is already managed by git-debrebase!"
 msgstr "ffq-prev bestaat; dit wordt reeds beheerd door git-debrebase!"
 
-#: ../git-debrebase:2530
+#: ../git-debrebase:2459
 msgid "ahead of debrebase-last, this is already managed by git-debrebase!"
 msgstr "voorop op debrebase-last; dit wordt reeds beheerd door git-debrebase!"
 
-#: ../git-debrebase:2546
+#: ../git-debrebase:2475
 msgid "want only 1 optional argument, the upstream git commitish"
 msgstr ""
-"wil slechts 1 facultatief argument, de git commitish van de toeleveraar"
+"wil slechts 1 facultatief argument, de git commitish van de bovenstroomse "
+"toeleveraar"
 
-#: ../git-debrebase:2551
+#: ../git-debrebase:2480
 msgid "missing Version from changelog\n"
 msgstr "Version vanuit de changelog wordt gemist\n"
 
-#: ../git-debrebase:2567
+#: ../git-debrebase:2496
 #, perl-format
 msgid ""
 "upstream (%s) and HEAD are not\n"
@@ -2930,66 +2514,66 @@ msgid ""
 "  git diff %s HEAD -- :!/debian :/\n"
 msgstr ""
 "upstream (%s) en HEAD zijn niet\n"
-"identiek in de toeleveraarsbestanden. Zie diffstat hierboven, of voer dit "
+"identiek in de bovenstroomse bestanden. Zie diffstat hierboven, of voer dit "
 "commando uit:\n"
 "  git diff %s HEAD -- :!/debian :/\n"
 
-#: ../git-debrebase:2575
+#: ../git-debrebase:2504
 #, perl-format
 msgid "upstream (%s) is not an ancestor of HEAD"
 msgstr "upstream (%s) is geen voorouder van HEAD"
 
-#: ../git-debrebase:2582
+#: ../git-debrebase:2511
 #, perl-format
 msgid ""
 "history between upstream (%s) and HEAD contains direct changes to upstream "
 "files - are you sure this is a gbp (patches-unapplied) branch?"
 msgstr ""
 "de geschiedenis tussen upstream (%s) en HEAD bevat rechtstreekse wijzigingen "
-"aan toeleveraarsbestanden - bent u zeker dat dit een gbp-tak (patches-"
-"unapplied)(geen toepassing van patches) is?"
+"aan bovenstroomse bestanden - bent u zeker dat dit een gbp-tak (patches-"
+"unapplied) (geen toepassing van patches) is?"
 
-#: ../git-debrebase:2584
+#: ../git-debrebase:2513
 #, perl-format
 msgid "list expected changes with:  %s\n"
 msgstr "toon verwachte wijzigingen met:  %s\n"
 
-#: ../git-debrebase:2591
+#: ../git-debrebase:2520
 #, perl-format
 msgid "upstream (%s) contains debian/ directory"
 msgstr "upstream (%s) bevat een map debian/"
 
-#: ../git-debrebase:2609
+#: ../git-debrebase:2538
 msgid "neither of the first two changelog entries are released\n"
 msgstr ""
 "geen van de eerste twee items uit het changelog-bestand werd uitgebracht\n"
 
-#: ../git-debrebase:2615
+#: ../git-debrebase:2544
 #, perl-format
 msgid "could not find suitable maintainer view tag %s\n"
 msgstr "kon geen geschikte maintainer-weergavetag %s vinden\n"
 
-#: ../git-debrebase:2618
+#: ../git-debrebase:2547
 #, perl-format
 msgid "HEAD is not FF from maintainer tag %s!"
 msgstr "HEAD is niet FF (lineair) vanaf maintainer-tag %s!"
 
-#: ../git-debrebase:2621
+#: ../git-debrebase:2550
 #, perl-format
 msgid "dgit view tag %s not found\n"
 msgstr "dgit-weergavetag %s niet gevonden\n"
 
-#: ../git-debrebase:2623
+#: ../git-debrebase:2552
 #, perl-format
 msgid "dgit view tag %s is not FF from maintainer tag %s\n"
 msgstr "dgit-weergavetag %s is niet FF (lineair) vanaf maintainer-tag %s\n"
 
-#: ../git-debrebase:2625
+#: ../git-debrebase:2554
 #, perl-format
 msgid "will stitch in dgit view, %s\n"
 msgstr "zal borduren in de dgit-weergave, %s\n"
 
-#: ../git-debrebase:2632
+#: ../git-debrebase:2561
 #, perl-format
 msgid ""
 "Cannot confirm dgit view: %s\n"
@@ -3000,14 +2584,14 @@ msgstr ""
 "Borduren in dgit-weergave mislukte (zie bovenstaande berichten).\n"
 "dgit --overwrite zal nodig zijn bij de eerste dgit push na de omzetting.\n"
 
-#: ../git-debrebase:2678
+#: ../git-debrebase:2607
 #, perl-format
 msgid "%s: converted from patched-unapplied (gbp) branch format, OK\n"
 msgstr ""
 "%s: omgezet vanuit de indeling van de tak zonder toepassing van patches "
 "(patched-unapplied) (gbp), Oké\n"
 
-#: ../git-debrebase:2707
+#: ../git-debrebase:2636
 #, perl-format
 msgid ""
 "%s: converted to git-buildpackage branch format\n"
@@ -3016,19 +2600,19 @@ msgid ""
 msgstr ""
 "%s: omgezet naar de indeling voor een tak van git-buildpackage\n"
 "%s: WAARSCHUWING: voer \"git-debrebase\" nu niet meer uit\n"
-"%s: WAARSCHUWING: dat doen zou alle toeleveraarspatches doen wegvallen!\n"
+"%s: WAARSCHUWING: dat doen zou alle bovenstroomse patches doen wegvallen!\n"
 
-#: ../git-debrebase:2728
+#: ../git-debrebase:2657
 msgid "takes 1 optional argument, the upstream commitish"
 msgstr ""
-"heeft 1 facultatief argument, de toeleveraar-commitish (upstream commitish)"
+"heeft 1 facultatief argument, de bovenstroomse commitish (upstream commitish)"
 
-#: ../git-debrebase:2736
+#: ../git-debrebase:2665
 #, perl-format
 msgid "%s, from command line"
 msgstr "%s, van de commandoregel"
 
-#: ../git-debrebase:2750
+#: ../git-debrebase:2679
 #, perl-format
 msgid ""
 "%s: Branch already seems to be in git-debrebase format!\n"
@@ -3039,161 +2623,162 @@ msgstr ""
 "%s: --always-convert-anyway zou de omzettingsbewerking toch uitvoeren,\n"
 "%s: maar is wellicht geen goed idee. Vermoedelijk wilde u niets doen.\n"
 
-#: ../git-debrebase:2754
+#: ../git-debrebase:2683
 msgid "Branch already in git-debrebase format."
 msgstr "Tak is reeds in git-debrebase-indeling."
 
-#: ../git-debrebase:2766
+#: ../git-debrebase:2695
 msgid "Considering possible commits corresponding to upstream:\n"
 msgstr ""
 "Bezig vastleggingen na te gaan die mogelijk overeenkomen met die van de "
-"toeleveraar:\n"
+"bovenstroomse toeleveraar:\n"
 
-#: ../git-debrebase:2773
+#: ../git-debrebase:2702
 #, perl-format
 msgid "git tag %s"
 msgstr "git tag %s"
 
-#: ../git-debrebase:2779
+#: ../git-debrebase:2708
 #, perl-format
 msgid " git tag: no suitable tag found (tried %s)\n"
 msgstr " git tag: geen geschikte tag gevonden (probeerde %s)\n"
 
-#: ../git-debrebase:2788
+#: ../git-debrebase:2717
 #, perl-format
 msgid "opendir build-products-dir %s: %s"
 msgstr "opendir build-products-dir %s: %s"
 
-#: ../git-debrebase:2794
+#: ../git-debrebase:2723
 #, perl-format
 msgid " orig: found what looks like a .orig, %s\n"
 msgstr " orig: iets wat op een .orig lijkt gevonden, %s\n"
 
-#: ../git-debrebase:2825
+#: ../git-debrebase:2754
 #, perl-format
 msgid " orig: no suitable origs found (looked for %s in %s)\n"
 msgstr " orig: geen geschikte origs gevonden (gezocht naar %s in %s)\n"
 
-#: ../git-debrebase:2834
+#: ../git-debrebase:2763
 msgid "Evaluating possible commits corresponding to upstream:\n"
 msgstr ""
 "Bezig vastleggingen te evalueren die mogelijk overeenkomen met die van de "
-"toeleveraar:\n"
+"bovenstroomse toeleveraar:\n"
 
-#: ../git-debrebase:2871
+#: ../git-debrebase:2800
 #, perl-format
 msgid " %s: couldn't apply patches: gbp pq %s"
 msgstr " %s: kon patches niet toepassen: gbp pq %s"
 
-#: ../git-debrebase:2880
+#: ../git-debrebase:2809
 #, perl-format
 msgid " %s: applying patches gives different tree\n"
 msgstr " %s: patches toepassen geeft een afwijkende boom\n"
 
-#: ../git-debrebase:2894
+#: ../git-debrebase:2823
 msgid ""
 "Could not find or construct a suitable upstream commit.\n"
 "Rerun adding --diagnose after convert-from-dgit-view, or pass a\n"
 "upstream commmit explicitly or provide suitable origs.\n"
 msgstr ""
-"Kon geen geschikte vastlegging van de toeleveraar vinden of construeren.\n"
+"Kon geen geschikte vastlegging van de bovenstroomse toeleveraar vinden of "
+"construeren.\n"
 "Voer convert-from-dgit-view opnieuw uit met toevoeging van --diagnose,\n"
-"of geef expliciet een vastlegging van de toeleveraar op,\n"
+"of geef expliciet een vastlegging van de bovenstroomse toeleveraar op,\n"
 "of bezorg geschikte origs.\n"
 
-#: ../git-debrebase:2900
+#: ../git-debrebase:2829
 #, perl-format
 msgid "Yes, will base new branch on %s\n"
 msgstr "Ja, zal nieuwe tak baseren op %s\n"
 
-#: ../git-debrebase:2907
+#: ../git-debrebase:2836
 msgid "forget-was-ever-debrebase takes no further arguments"
 msgstr "forget-was-ever-debrebase wordt zonder verdere argumenten gebruikt"
 
-#: ../git-debrebase:2911
+#: ../git-debrebase:2840
 #, perl-format
 msgid "Not suitable for recording git-debrebaseness anyway: %s"
 msgstr ""
 "Hoe dan ook niet geschikt om de git-debrebase-toestand te registreren: %s"
 
-#: ../git-debrebase:3013
+#: ../git-debrebase:2942
 msgid "bad options\n"
 msgstr "foute opties\n"
 
-#: ../git-debrebase:3023
+#: ../git-debrebase:2952
 #, perl-format
 msgid "%s: no cuddling to -i for git-rebase"
 msgstr "%s: niet gek van -i voor git-rebase"
 
-#: ../git-debrebase:3053
+#: ../git-debrebase:2982
 #, perl-format
 msgid "unknown git-debrebase sub-operation %s"
 msgstr "onbekende onderliggende bewerking van git-debrebase: %s"
 
-#: ../Debian/Dgit.pm:295
+#: ../Debian/Dgit.pm:298
 #, perl-format
 msgid "error: %s\n"
 msgstr "fout: %s\n"
 
-#: ../Debian/Dgit.pm:315
+#: ../Debian/Dgit.pm:324
 #, perl-format
 msgid "getcwd failed: %s\n"
 msgstr "getcwd mislukte: %s\n"
 
-#: ../Debian/Dgit.pm:334
+#: ../Debian/Dgit.pm:343
 msgid "terminated, reporting successful completion"
 msgstr "beëindigd, met de melding van een succesvolle voltooiing"
 
-#: ../Debian/Dgit.pm:336
+#: ../Debian/Dgit.pm:345
 #, perl-format
 msgid "failed with error exit status %s"
 msgstr "mislukt met de foutmelding %s"
 
-#: ../Debian/Dgit.pm:339
+#: ../Debian/Dgit.pm:348
 #, perl-format
 msgid "died due to fatal signal %s"
 msgstr "gestorven vanwege fataal signaal %s"
 
-#: ../Debian/Dgit.pm:343
+#: ../Debian/Dgit.pm:352
 #, perl-format
 msgid "failed with unknown wait status %s"
 msgstr "mislukt met ongekende wachttoestand %s"
 
-#: ../Debian/Dgit.pm:349
+#: ../Debian/Dgit.pm:358
 msgid "failed command"
 msgstr "mislukt commando"
 
-#: ../Debian/Dgit.pm:355
+#: ../Debian/Dgit.pm:364
 #, perl-format
 msgid "failed to fork/exec: %s"
 msgstr "fork/exec is mislukt: %s"
 
-#: ../Debian/Dgit.pm:357
+#: ../Debian/Dgit.pm:366
 #, perl-format
 msgid "subprocess %s"
 msgstr "onderliggend proces %s"
 
-#: ../Debian/Dgit.pm:359
+#: ../Debian/Dgit.pm:368
 msgid "subprocess produced invalid output"
 msgstr "onderliggend proces produceerde ongeldige uitvoer"
 
-#: ../Debian/Dgit.pm:450
+#: ../Debian/Dgit.pm:459
 msgid "stat source file: %S"
 msgstr "stat bronbestand: %S"
 
-#: ../Debian/Dgit.pm:460
+#: ../Debian/Dgit.pm:469
 msgid "stat destination file: %S"
 msgstr "stat doelbestand: %S"
 
-#: ../Debian/Dgit.pm:479
+#: ../Debian/Dgit.pm:488
 msgid "finally install file after cp: %S"
 msgstr "tot slot, installeer bestand na cp: %S"
 
-#: ../Debian/Dgit.pm:485
+#: ../Debian/Dgit.pm:494
 msgid "delete old file after cp: %S"
 msgstr "verwijder oud bestand na cp: %S"
 
-#: ../Debian/Dgit.pm:506
+#: ../Debian/Dgit.pm:515
 msgid ""
 "not in a git working tree?\n"
 "(git rev-parse --show-toplevel produced no output)\n"
@@ -3201,33 +2786,53 @@ msgstr ""
 "niet in een git werkboom?\n"
 "(git rev-parse --show-toplevel gaf geen uitvoer)\n"
 
-#: ../Debian/Dgit.pm:509
+#: ../Debian/Dgit.pm:518
 #, perl-format
 msgid "chdir toplevel %s: %s\n"
 msgstr "chdir naar hoogste niveau %s: %s\n"
 
-#: ../Debian/Dgit.pm:617
+#: ../Debian/Dgit.pm:626
 msgid "git index contains changes (does not match HEAD)"
 msgstr "de index van git bevat wijzigingen (komt niet overeen met HEAD)"
 
-#: ../Debian/Dgit.pm:618
+#: ../Debian/Dgit.pm:627
 msgid "working tree is dirty (does not match HEAD)"
 msgstr "werkboom is bevuild (komt niet overeen met HEAD)"
 
-#: ../Debian/Dgit.pm:689
+#: ../Debian/Dgit.pm:649
+msgid "using specified upstream commitish"
+msgstr "opgegeven bovenstroomse commitish wordt gebruikt"
+
+#: ../Debian/Dgit.pm:655
+#, perl-format
+msgid ""
+"Could not determine appropriate upstream commitish.\n"
+" (Tried these tags: %s)\n"
+" Check version, and specify upstream commitish explicitly."
+msgstr ""
+"Kon geen passende bovenstroomse commitish bepalen.\n"
+" (Probeerde deze tags: %s)\n"
+" Controleer versie en geef bovenstroomse commitish expliciet op."
+
+#: ../Debian/Dgit.pm:661 ../Debian/Dgit.pm:663
+#, perl-format
+msgid "using upstream from git tag %s"
+msgstr "bovenstroom van git tag %s wordt gebruikt"
+
+#: ../Debian/Dgit.pm:769
 msgid "detached HEAD"
 msgstr "vrijstaande HEAD (detached HEAD)"
 
-#: ../Debian/Dgit.pm:690
+#: ../Debian/Dgit.pm:770
 msgid "HEAD symref is not to refs/"
 msgstr "symbolische referentie HEAD is geen referentie naar refs/"
 
-#: ../Debian/Dgit.pm:706
+#: ../Debian/Dgit.pm:786
 #, perl-format
 msgid "parsing of %s failed"
 msgstr "ontleden van %s mislukte"
 
-#: ../Debian/Dgit.pm:715
+#: ../Debian/Dgit.pm:795
 #, perl-format
 msgid ""
 "control file %s is (already) PGP-signed.  Note that dgit push needs to "
@@ -3236,44 +2841,41 @@ msgstr ""
 "controlebestand %s heeft (reeds) een PGP-ondertekening. Merk op dat dgit "
 "push het .dsc moet aanpassen en het dan zelf moet ondertekenen"
 
-#: ../Debian/Dgit.pm:729
+#: ../Debian/Dgit.pm:809
 #, perl-format
 msgid "open %s (%s): %s"
 msgstr "open %s (%s): %s"
 
-#: ../Debian/Dgit.pm:750
+#: ../Debian/Dgit.pm:830
 #, perl-format
 msgid "missing field %s in %s"
 msgstr "ontbrekend veld %s in %s"
 
-#: ../Debian/Dgit.pm:822
+#: ../Debian/Dgit.pm:916
 msgid "Dummy commit - do not use\n"
 msgstr "Voorbeeldvastlegging - niet gebruiken\n"
 
-#: ../Debian/Dgit.pm:843
+#: ../Debian/Dgit.pm:937
 #, perl-format
 msgid "exec %s: %s\n"
 msgstr "exec %s: %s\n"
 
-#: ../Debian/Dgit.pm:911
+#: ../Debian/Dgit.pm:1005
 #, perl-format
 msgid "cannot stat %s/.git: %s"
 msgstr "kan status van %s/.git niet verkrijgen: %s"
 
-#: ../Debian/Dgit.pm:934
+#: ../Debian/Dgit.pm:1028
 #, perl-format
 msgid "failed to mkdir playground parent %s: %s"
 msgstr "mkdir van speelplaatsouder %s mislukte: %s"
 
-#: ../Debian/Dgit.pm:942
+#: ../Debian/Dgit.pm:1036
 #, perl-format
 msgid "failed to mkdir a playground %s: %s"
 msgstr "mkdir van een speelplaats %s mislukte: %s"
 
-#: ../Debian/Dgit.pm:951
+#: ../Debian/Dgit.pm:1045
 #, perl-format
 msgid "failed to mkdir the playground %s: %s"
 msgstr "mkdir van de speelplaats %s mislukte: %s"
-
-#~ msgid "import %s requires .../%s, but it does not exist"
-#~ msgstr "importeren van %s vereist .../%s, maar dit bestaat niet"
index 71969f4a15dff1214ef7435a2fa97b07839aa8bc..3410d8b6ddf9c745c0b8ae636f97cd7eba04d0e7 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-03-01 16:59+0000\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,18 +21,20 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1470 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1575 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:747 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:619
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:524 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:782 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:140
+#: ../git-debrebase.1.pod:634 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:261
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
@@ -41,7 +43,7 @@ msgstr ""
 #: ../dgit-user.7.pod:5 ../dgit-maint-native.7.pod:5
 #: ../dgit-maint-merge.7.pod:5 ../dgit-maint-gbp.7.pod:5
 #: ../dgit-maint-debrebase.7.pod:5 ../dgit-downstream-dsc.7.pod:5
-#: ../git-debrebase.1.pod:10 ../git-debrebase.5.pod:5
+#: ../dgit-maint-bpo.7.pod:5 ../git-debrebase.5.pod:5
 msgid "INTRODUCTION"
 msgstr ""
 
@@ -66,9 +68,9 @@ msgid ""
 msgstr ""
 
 #. type: =head3
-#: ../dgit-maint-merge.7.pod:53 ../dgit-maint-merge.7.pod:335
-#: ../dgit-maint-merge.7.pod:408 ../dgit-maint-debrebase.7.pod:67
-#: ../dgit-maint-debrebase.7.pod:326
+#: ../dgit-maint-merge.7.pod:53 ../dgit-maint-merge.7.pod:362
+#: ../dgit-maint-merge.7.pod:441 ../dgit-maint-debrebase.7.pod:67
+#: ../dgit-maint-debrebase.7.pod:354
 msgid "When upstream tags releases in git"
 msgstr ""
 
@@ -106,8 +108,8 @@ msgid "Finally, you need an orig tarball:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:97 ../dgit-maint-merge.7.pod:402
-#: ../dgit-maint-debrebase.7.pod:106 ../dgit-maint-debrebase.7.pod:388
+#: ../dgit-maint-merge.7.pod:97 ../dgit-maint-merge.7.pod:435
+#: ../dgit-maint-debrebase.7.pod:106 ../dgit-maint-debrebase.7.pod:423
 #, no-wrap
 msgid ""
 "    % git deborig\n"
@@ -127,97 +129,72 @@ msgid ""
 msgstr ""
 
 #. type: =head3
-#: ../dgit-maint-merge.7.pod:123 ../dgit-maint-merge.7.pod:343
-#: ../dgit-maint-merge.7.pod:433 ../dgit-maint-debrebase.7.pod:137
-#: ../dgit-maint-debrebase.7.pod:334
-msgid "When upstream releases only tarballs"
+#: ../dgit-maint-merge.7.pod:123 ../dgit-maint-debrebase.7.pod:137
+msgid "Using untagged upstream commits"
 msgstr ""
 
-#. type: verbatim
-#: ../dgit-maint-merge.7.pod:130 ../dgit-maint-debrebase.7.pod:145
-#, no-wrap
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:127 ../dgit-maint-debrebase.7.pod:141
 msgid ""
-"    % mkdir foo\n"
-"    % cd foo\n"
-"    % git init\n"
-"\n"
+"Sometimes upstream does not tag their releases, or you want to package an "
+"unreleased git snapshot.  In such a case you can create your own upstream "
+"release tag, of the form B<upstream/>I<ver>, where I<ver> is the upstream "
+"version you plan to put in I<debian/changelog>.  The B<upstream/> prefix "
+"ensures that your tag will not clash with any tags upstream later creates."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:136 ../dgit-maint-debrebase.7.pod:151
-msgid "Now create I<debian/gbp.conf>:"
-msgstr ""
-
-#. type: verbatim
-#: ../dgit-maint-merge.7.pod:140 ../dgit-maint-debrebase.7.pod:155
-#, no-wrap
+#: ../dgit-maint-merge.7.pod:134 ../dgit-maint-debrebase.7.pod:148
 msgid ""
-"    [DEFAULT]\n"
-"    upstream-branch = upstream\n"
-"    debian-branch = master\n"
-"    upstream-tag = %(version)s\n"
-"\n"
+"For example, suppose that the latest upstream release is 1.2.2 and you want "
+"to package git commit ab34c21 which was made on 2013-12-11.  A common "
+"convention is to use the upstream version number 1.2.2+git20131211.ab34c21 "
+"and so you could use"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:160
+#: ../dgit-maint-merge.7.pod:141 ../dgit-maint-debrebase.7.pod:155
 #, no-wrap
 msgid ""
-"    sign-tags = True\n"
-"    pristine-tar = False\n"
-"    pristine-tar-commit = False\n"
+"    % git tag -s upstream/1.2.2+git20131211.ab34c21 ab34c21\n"
 "\n"
 msgstr ""
 
-#. type: verbatim
-#: ../dgit-maint-merge.7.pod:149 ../dgit-maint-debrebase.7.pod:164
-#, no-wrap
-msgid ""
-"    [import-orig]\n"
-"    merge-mode = merge\n"
-"\n"
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:159
+msgid "to obtain a release tag, and then proceed as above."
 msgstr ""
 
-#. type: textblock
-#: ../dgit-maint-merge.7.pod:154 ../dgit-maint-debrebase.7.pod:169
-msgid "gbp-import-orig(1) requires a pre-existing upstream branch:"
+#. type: =head3
+#: ../dgit-maint-merge.7.pod:149 ../dgit-maint-merge.7.pod:374
+#: ../dgit-maint-merge.7.pod:466 ../dgit-maint-debrebase.7.pod:163
+#: ../dgit-maint-debrebase.7.pod:366
+msgid "When upstream releases only tarballs"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:158 ../dgit-maint-debrebase.7.pod:173
+#: ../dgit-maint-merge.7.pod:166 ../dgit-maint-debrebase.7.pod:208
 #, no-wrap
 msgid ""
-"    % git add debian/gbp.conf && git commit -m \"create gbp.conf\"\n"
-"    % git checkout --orphan upstream\n"
-"    % git rm -rf .\n"
-"    % git commit --allow-empty -m \"initial, empty branch for upstream source\"\n"
-"    % git checkout -f master\n"
+"    [DEFAULT]\n"
+"    upstream-branch = upstream\n"
+"    debian-branch = master\n"
+"    upstream-tag = upstream/%(version)s\n"
 "\n"
 msgstr ""
 
-#. type: textblock
-#: ../dgit-maint-merge.7.pod:166 ../dgit-maint-debrebase.7.pod:181
-msgid "Then we can import the upstream version:"
-msgstr ""
-
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:170 ../dgit-maint-debrebase.7.pod:185
+#: ../dgit-maint-merge.7.pod:171 ../dgit-maint-debrebase.7.pod:213
 #, no-wrap
 msgid ""
-"    % gbp import-orig --merge-mode=replace ../foo_1.2.2.orig.tar.xz\n"
+"    sign-tags = True\n"
+"    pristine-tar = False\n"
+"    pristine-tar-commit = False\n"
 "\n"
 msgstr ""
 
-#. type: textblock
-#: ../dgit-maint-merge.7.pod:174 ../dgit-maint-debrebase.7.pod:189
-msgid ""
-"Our upstream branch cannot be pushed to B<dgit-repos>, but since we will "
-"need it whenever we import a new upstream version, we must push it "
-"somewhere.  The usual choice is B<salsa.debian.org>:"
-msgstr ""
-
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:180 ../dgit-maint-debrebase.7.pod:195
+#: ../dgit-maint-merge.7.pod:207 ../dgit-maint-debrebase.7.pod:191
 #, no-wrap
 msgid ""
 "    % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
@@ -226,19 +203,19 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:188 ../dgit-maint-debrebase.7.pod:207
+#: ../dgit-maint-merge.7.pod:215 ../dgit-maint-debrebase.7.pod:235
 msgid "CONVERTING AN EXISTING PACKAGE"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:190 ../dgit-maint-debrebase.7.pod:209
+#: ../dgit-maint-merge.7.pod:217 ../dgit-maint-debrebase.7.pod:237
 msgid ""
 "This section explains how to convert an existing Debian package to this "
 "workflow.  It should be skipped when debianising a new package."
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:229 ../dgit-maint-debrebase.7.pod:240
+#: ../dgit-maint-merge.7.pod:256 ../dgit-maint-debrebase.7.pod:268
 #, no-wrap
 msgid ""
 "    % git remote add -f upstream https://some.upstream/foo.git\n"
@@ -246,32 +223,40 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:242 ../dgit-maint-debrebase.7.pod:294
+#: ../dgit-maint-merge.7.pod:269 ../dgit-maint-debrebase.7.pod:322
 msgid ""
 "To achieve this, you might need to delete I<debian/source/local-options>.  "
 "One way to have dgit check your progress is to run B<dgit build-source>."
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:312 ../dgit-maint-debrebase.7.pod:441
+#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:476
 msgid "BUILDING AND UPLOADING"
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:333 ../dgit-maint-debrebase.7.pod:324
+#: ../dgit-maint-merge.7.pod:360 ../dgit-maint-debrebase.7.pod:352
 msgid "Obtaining the release"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:330
+#: ../dgit-maint-merge.7.pod:366 ../dgit-maint-debrebase.7.pod:358
 #, no-wrap
 msgid ""
-"    % git remote update\n"
+"    % git fetch --tags upstream\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:345 ../dgit-maint-debrebase.7.pod:336
+#: ../dgit-maint-merge.7.pod:370 ../dgit-maint-debrebase.7.pod:362
+msgid ""
+"If you want to package an untagged upstream commit (because upstream does "
+"not tag releases or because you want to package an upstream development "
+"snapshot), see \"Using untagged upstream commits\" above."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:376 ../dgit-maint-debrebase.7.pod:368
 msgid ""
 "You will need the I<debian/gbp.conf> from \"When upstream releases only "
 "tarballs\", above.  You will also need your upstream branch.  Above, we "
@@ -280,33 +265,33 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:350 ../dgit-maint-debrebase.7.pod:341
+#: ../dgit-maint-merge.7.pod:381 ../dgit-maint-debrebase.7.pod:373
 msgid "Then, either"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:354 ../dgit-maint-debrebase.7.pod:345
+#: ../dgit-maint-merge.7.pod:385 ../dgit-maint-debrebase.7.pod:377
 #, no-wrap
 msgid ""
-"    % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz\n"
+"    % gbp import-orig ../foo_1.2.3.orig.tar.xz\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:358 ../dgit-maint-debrebase.7.pod:349
+#: ../dgit-maint-merge.7.pod:389 ../dgit-maint-debrebase.7.pod:381
 msgid "or if you have a working watch file"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:362 ../dgit-maint-debrebase.7.pod:353
+#: ../dgit-maint-merge.7.pod:393 ../dgit-maint-debrebase.7.pod:385
 #, no-wrap
 msgid ""
-"    % gbp import-orig --no-merge --uscan\n"
+"    % gbp import-orig --uscan\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:396 ../dgit-maint-debrebase.7.pod:382
+#: ../dgit-maint-merge.7.pod:429 ../dgit-maint-debrebase.7.pod:417
 msgid ""
 "If you obtained a tarball from upstream, you are ready to try a build.  If "
 "you merged a git tag from upstream, you will first need to generate a "
@@ -314,12 +299,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:406 ../dgit-maint-debrebase.7.pod:472
+#: ../dgit-maint-merge.7.pod:439 ../dgit-maint-debrebase.7.pod:507
 msgid "HANDLING DFSG-NON-FREE MATERIAL"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:435 ../dgit-maint-debrebase.7.pod:546
+#: ../dgit-maint-merge.7.pod:468 ../dgit-maint-debrebase.7.pod:581
 msgid ""
 "The easiest way to handle this is to add a B<Files-Excluded> field to "
 "I<debian/copyright>, and a B<uversionmangle> setting in I<debian/watch>.  "
@@ -328,19 +313,20 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:480 ../dgit-maint-gbp.7.pod:130
-#: ../dgit-maint-debrebase.7.pod:551
+#: ../dgit-maint-merge.7.pod:513 ../dgit-maint-gbp.7.pod:130
+#: ../dgit-maint-debrebase.7.pod:586
 msgid "INCORPORATING NMUS"
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:495 ../dgit-maint-gbp.7.pod:140
-#: ../dgit-maint-debrebase.7.pod:751
+#: ../dgit-maint-merge.7.pod:528 ../dgit-maint-gbp.7.pod:140
+#: ../dgit-maint-debrebase.7.pod:786 ../dgit-maint-bpo.7.pod:144
+#: ../git-debpush.1.pod:266
 msgid "AUTHOR"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:497 ../dgit-maint-debrebase.7.pod:753
+#: ../dgit-maint-merge.7.pod:530 ../dgit-maint-debrebase.7.pod:788
 msgid ""
 "This tutorial was written and is maintained by Sean Whitton "
 "<spwhitton@spwhitton.name>.  It contains contributions from other dgit "
@@ -348,7 +334,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-gbp.7.pod:32 ../dgit-maint-debrebase.7.pod:298
+#: ../dgit-maint-gbp.7.pod:32 ../dgit-maint-debrebase.7.pod:326
 msgid "GIT CONFIGURATION"
 msgstr ""
 
@@ -481,14 +467,40 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:139
+#: ../dgit-maint-debrebase.7.pod:165
 msgid ""
 "Because we want to work in git, we need a virtual upstream branch with "
 "virtual release tags.  gbp-import-orig(1) can manage this for us.  To begin"
 msgstr ""
 
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:171
+#, no-wrap
+msgid ""
+"    % mkdir foo\n"
+"    % cd foo\n"
+"    % git init\n"
+"    % git checkout -b upstream\n"
+"    % gbp import-orig \\\n"
+"        --upstream-branch=upstream --debian-branch=master \\\n"
+"        --upstream-tag='upstream/%(version)s' \\\n"
+"        --sign-tags --no-pristine-tar \\\n"
+"        ../foo_1.2.2.orig.tar.xz\n"
+"    % git branch -f upstream\n"
+"\n"
+msgstr ""
+
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:200
+#: ../dgit-maint-debrebase.7.pod:184
+msgid ""
+"This should leave you on the master branch.  Next, our upstream branch "
+"cannot be pushed to B<dgit-repos>, but since we will need it whenever we "
+"import a new upstream version, we must push it somewhere.  The usual choice "
+"is B<salsa.debian.org>:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:196
 msgid ""
 "You are now ready to proceed as above, making commits to the I<debian/> "
 "directory and to the upstream source.  As above, for technical reasons, B<it "
@@ -498,7 +510,45 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:212
+#: ../dgit-maint-debrebase.7.pod:203
+msgid ""
+"A convenient way to ensure this requirement is satisfied is to start by "
+"creating I<debian/gbp.conf>:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:217
+#, no-wrap
+msgid ""
+"    [import-orig]\n"
+"    merge = False\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:222
+msgid "and commit that:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:226
+#, no-wrap
+msgid ""
+"    % git add debian/gbp.conf && git commit -m \"create gbp.conf\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:230
+msgid ""
+"Note that we couldn't create I<debian/gbp.conf> before now for the same "
+"technical reasons which require our first commit to introduce I<debian/> "
+"without patching the upstream source.  That's why we had to pass a lot of "
+"options to our first call to gbp-import-orig(1)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:240
 msgid ""
 "If you have an existing git history that you have pushed to an ordinary git "
 "server like B<salsa.debian.org>, we start with that.  If you don't already "
@@ -507,7 +557,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:219
+#: ../dgit-maint-debrebase.7.pod:247
 #, no-wrap
 msgid ""
 "    % git clone salsa.debian.org:Debian/foo\n"
@@ -518,14 +568,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:226
+#: ../dgit-maint-debrebase.7.pod:254
 msgid ""
 "If you don't have any existing git history, or you have history only on the "
 "special B<dgit-repos> server, we start with B<dgit clone>:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:231
+#: ../dgit-maint-debrebase.7.pod:259
 #, no-wrap
 msgid ""
 "    % dgit clone foo\n"
@@ -534,12 +584,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:236
+#: ../dgit-maint-debrebase.7.pod:264
 msgid "Then we make new upstream tags available:"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:244
+#: ../dgit-maint-debrebase.7.pod:272
 msgid ""
 "We now use a B<git debrebase convert-from-*> command to convert your "
 "existing history to the git-debrebase(5) data model.  Which command you "
@@ -547,17 +597,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../dgit-maint-debrebase.7.pod:250
+#: ../dgit-maint-debrebase.7.pod:278
 msgid "(A) There is no delta queue."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:252
+#: ../dgit-maint-debrebase.7.pod:280
 msgid "If there do not exist any Debian patches, use"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:256 ../dgit-maint-debrebase.7.pod:268
+#: ../dgit-maint-debrebase.7.pod:284 ../dgit-maint-debrebase.7.pod:296
 #, no-wrap
 msgid ""
 "    % git debrebase convert-from-gbp\n"
@@ -565,12 +615,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../dgit-maint-debrebase.7.pod:260
+#: ../dgit-maint-debrebase.7.pod:288
 msgid "(B) There is a delta queue, and patches are unapplied."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:262
+#: ../dgit-maint-debrebase.7.pod:290
 msgid ""
 "This is the standard git-buildpackage(1) workflow: there are Debian patches, "
 "but the upstream source is committed to git without those patches applied.  "
@@ -578,7 +628,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:272
+#: ../dgit-maint-debrebase.7.pod:300
 msgid ""
 "If you were not previously using dgit to upload your package (i.e. you were "
 "not using the workflow described in dgit-maint-gbp(7)), and you happen to "
@@ -587,17 +637,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../dgit-maint-debrebase.7.pod:277
+#: ../dgit-maint-debrebase.7.pod:305
 msgid "(C) There is a delta queue, and patches are applied."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:279
+#: ../dgit-maint-debrebase.7.pod:307
 msgid "Use"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:283
+#: ../dgit-maint-debrebase.7.pod:311
 #, no-wrap
 msgid ""
 "    % git debrebase convert-from-dgit-view\n"
@@ -605,7 +655,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:289
+#: ../dgit-maint-debrebase.7.pod:317
 msgid ""
 "Finally, you need to ensure that your git HEAD is dgit-compatible, i.e., it "
 "is exactly what you would get if you deleted .git, invoked B<dpkg-"
@@ -613,7 +663,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:300
+#: ../dgit-maint-debrebase.7.pod:328
 msgid ""
 "git-debrebase(1) does not yet support using B<git merge> to merge divergent "
 "branches of development (see \"OTHER MERGES\" in git-debrebase(5)).  You "
@@ -621,7 +671,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:307
+#: ../dgit-maint-debrebase.7.pod:335
 #, no-wrap
 msgid ""
 "    % git config --local pull.rebase true\n"
@@ -629,14 +679,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:311
+#: ../dgit-maint-debrebase.7.pod:339
 msgid ""
 "Now when you pull work from other Debian contributors, git will rebase your "
 "work on top of theirs."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:314
+#: ../dgit-maint-debrebase.7.pod:342
 msgid ""
 "If you use this clone for upstream development in addition to Debian "
 "packaging work, you may not want to set this global setting.  Instead, see "
@@ -645,24 +695,24 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-debrebase.7.pod:319
+#: ../dgit-maint-debrebase.7.pod:347
 msgid "IMPORTING NEW UPSTREAM RELEASES"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:321
+#: ../dgit-maint-debrebase.7.pod:349
 msgid ""
 "There are two steps: obtaining git refs that correspond to the new release, "
 "and importing that release using git-debrebase(1)."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:357
+#: ../dgit-maint-debrebase.7.pod:389
 msgid "Importing the release"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:361
+#: ../dgit-maint-debrebase.7.pod:393
 #, no-wrap
 msgid ""
 "    % git debrebase new-upstream 1.2.3\n"
@@ -670,7 +720,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:365
+#: ../dgit-maint-debrebase.7.pod:397
+msgid "replacing I<1.2.3> with I<upstream/1.2.3> if you imported a tarball."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:399
 msgid ""
 "This invocation of git-debrebase(1) involves a git rebase.  You may need to "
 "resolve conflicts if the Debian delta queue does not apply cleanly to the "
@@ -678,13 +733,13 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:369
+#: ../dgit-maint-debrebase.7.pod:403
 msgid ""
 "If all went well, you can now review the merge of the new upstream release:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:374
+#: ../dgit-maint-debrebase.7.pod:408
 #, no-wrap
 msgid ""
 "    git diff debian/1.2.2-1..HEAD -- . ':!debian'\n"
@@ -692,35 +747,36 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:378
+#: ../dgit-maint-debrebase.7.pod:412
 msgid ""
-"Pass I<--stat> just to see the list of changed files, which is useful to "
-"determine whether there are any new or deleted files that may need "
-"accounting for in your copyright file."
+"Also, diff with I<--name-status> and I<--diff-filter=ADR> to see just the "
+"list of added or removed files, which is useful to determine whether there "
+"are any new or deleted files that may need accounting for in your copyright "
+"file."
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-debrebase.7.pod:392
+#: ../dgit-maint-debrebase.7.pod:427
 msgid "EDITING THE DEBIAN PACKAGING"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:394
+#: ../dgit-maint-debrebase.7.pod:429
 msgid "Just make commits on master that change the contents of I<debian/>."
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-debrebase.7.pod:396
+#: ../dgit-maint-debrebase.7.pod:431
 msgid "EDITING THE DELTA QUEUE"
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:398
+#: ../dgit-maint-debrebase.7.pod:433
 msgid "Adding new patches"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:400
+#: ../dgit-maint-debrebase.7.pod:435
 msgid ""
 "Adding new patches is straightforward: just make commits touching only files "
 "outside of the I<debian/> directory.  You can also use tools like git-"
@@ -728,19 +784,19 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:404
+#: ../dgit-maint-debrebase.7.pod:439
 msgid "Editing patches: starting a debrebase"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:406
+#: ../dgit-maint-debrebase.7.pod:441
 msgid ""
 "git-debrebase(1) is a wrapper around git-rebase(1) which allows us to edit, "
 "re-order and delete patches.  Run"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:411 ../dgit-maint-debrebase.7.pod:714
+#: ../dgit-maint-debrebase.7.pod:446 ../dgit-maint-debrebase.7.pod:749
 #, no-wrap
 msgid ""
 "    % git debrebase -i\n"
@@ -748,19 +804,19 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:415
+#: ../dgit-maint-debrebase.7.pod:450
 msgid ""
 "to start an interactive rebase.  You can edit, re-order and delete commits "
 "just as you would during B<git rebase -i>."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:418
+#: ../dgit-maint-debrebase.7.pod:453
 msgid "Editing patches: finishing a debrebase"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:420
+#: ../dgit-maint-debrebase.7.pod:455
 msgid ""
 "After completing the git rebase, your branch will not be a fast-forward of "
 "the git HEAD you had before the rebase.  This means that we cannot push the "
@@ -769,14 +825,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:426
+#: ../dgit-maint-debrebase.7.pod:461
 msgid ""
 "If you are not yet ready to upload, and want to push your branch to a git "
 "remote such as B<salsa.debian.org>,"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:431
+#: ../dgit-maint-debrebase.7.pod:466
 #, no-wrap
 msgid ""
 "    % git debrebase conclude\n"
@@ -784,7 +840,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:435
+#: ../dgit-maint-debrebase.7.pod:470
 msgid ""
 "Note that each time you conclude a debrebase you introduce a pseudomerge "
 "into your git history, which may make it harder to read.  Try to do all of "
@@ -794,7 +850,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:443
+#: ../dgit-maint-debrebase.7.pod:478
 msgid ""
 "You can use dpkg-buildpackage(1) for test builds.  When you are ready to "
 "build for an upload, use B<dgit sbuild>, B<dgit pbuilder> or B<dgit "
@@ -802,14 +858,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:447
+#: ../dgit-maint-debrebase.7.pod:482
 msgid ""
 "Upload with B<dgit push> or B<dgit push-source>.  Remember to pass I<--new> "
 "if the package is new in the target suite."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:450
+#: ../dgit-maint-debrebase.7.pod:485
 msgid ""
 "In some cases where you used B<git debrebase convert-from-gbp> since the "
 "last upload, it is not possible for dgit to make your history fast-"
@@ -819,7 +875,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:456
+#: ../dgit-maint-debrebase.7.pod:491
 msgid ""
 "Right before uploading, if you did not just already do so, you might want to "
 "have git-debrebase(1) shuffle your branch such that the Debian delta queue "
@@ -827,7 +883,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:462
+#: ../dgit-maint-debrebase.7.pod:497
 #, no-wrap
 msgid ""
 "    % git debrebase\n"
@@ -836,24 +892,24 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:467
+#: ../dgit-maint-debrebase.7.pod:502
 msgid "Note that this will introduce a new pseudomerge."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:469
+#: ../dgit-maint-debrebase.7.pod:504
 msgid ""
 "After dgit pushing, be sure to git push to B<salsa.debian.org>, if you're "
 "using that."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:474
+#: ../dgit-maint-debrebase.7.pod:509
 msgid "Illegal material"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:476
+#: ../dgit-maint-debrebase.7.pod:511
 msgid ""
 "Here we explain how to handle material that is merely DFSG-non-free.  "
 "Material which is legally dangerous (for example, files which are actually "
@@ -861,7 +917,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:480
+#: ../dgit-maint-debrebase.7.pod:515
 #, no-wrap
 msgid ""
 "If you encounter possibly-legally-dangerous material in the upstream\n"
@@ -873,12 +929,12 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:486
+#: ../dgit-maint-debrebase.7.pod:521
 msgid "DFSG-non-free: When upstream tags releases in git"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:488
+#: ../dgit-maint-debrebase.7.pod:523
 msgid ""
 "Our approach is to maintain a DFSG-clean upstream branch, and create tags on "
 "this branch for each release that we want to import.  We then import those "
@@ -887,12 +943,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:494
+#: ../dgit-maint-debrebase.7.pod:529
 msgid "For the first upstream release that requires DFSG filtering:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:498
+#: ../dgit-maint-debrebase.7.pod:533
 #, no-wrap
 msgid ""
 "    % git checkout -b upstream-dfsg 1.2.3\n"
@@ -904,14 +960,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:506
+#: ../dgit-maint-debrebase.7.pod:541
 msgid ""
 "Now either proceed with \"Importing the release\" on the 1.2.3+dfsg tag, or "
 "in the case of a new package,"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:511
+#: ../dgit-maint-debrebase.7.pod:546
 #, no-wrap
 msgid ""
 "    % git branch --unset-upstream\n"
@@ -920,18 +976,18 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:516
+#: ../dgit-maint-debrebase.7.pod:551
 msgid "and proceed with \"INITIAL DEBIANISATION\"."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:518
+#: ../dgit-maint-debrebase.7.pod:553
 msgid ""
 "For subsequent releases (whether or not they require additional filtering):"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:523
+#: ../dgit-maint-debrebase.7.pod:558
 #, no-wrap
 msgid ""
 "    % git checkout upstream-dfsg\n"
@@ -945,7 +1001,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:533
+#: ../dgit-maint-debrebase.7.pod:568
 msgid ""
 "Our upstream-dfsg branch cannot be pushed to B<dgit-repos>, but since we "
 "will need it whenever we import a new upstream version, we must push it "
@@ -954,7 +1010,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:540
+#: ../dgit-maint-debrebase.7.pod:575
 #, no-wrap
 msgid ""
 "    % git push --follow-tags -u origin master upstream-dfsg\n"
@@ -962,17 +1018,17 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:544
+#: ../dgit-maint-debrebase.7.pod:579
 msgid "DFSG-non-free: When upstream releases only tarballs"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:553
+#: ../dgit-maint-debrebase.7.pod:588
 msgid "In the simplest case,"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:557
+#: ../dgit-maint-debrebase.7.pod:592
 #, no-wrap
 msgid ""
 "    % dgit fetch\n"
@@ -981,7 +1037,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:562
+#: ../dgit-maint-debrebase.7.pod:597
 msgid ""
 "If that fails, because your branch and the NMUers' work represent divergent "
 "branches of development, you have a number of options.  Here we describe the "
@@ -989,7 +1045,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:566
+#: ../dgit-maint-debrebase.7.pod:601
 msgid ""
 "Note that you should not try to resolve the divergent branches by editing "
 "files in I<debian/patches>.  Changes there would either cause trouble, or be "
@@ -997,12 +1053,12 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:570
+#: ../dgit-maint-debrebase.7.pod:605
 msgid "Rebasing your work onto the NMU"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:574
+#: ../dgit-maint-debrebase.7.pod:609
 #, no-wrap
 msgid ""
 "    % git rebase dgit/dgit/sid\n"
@@ -1010,14 +1066,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:578
+#: ../dgit-maint-debrebase.7.pod:613
 msgid ""
 "If the NMUer added new commits modifying the upstream source, you will "
 "probably want to debrebase before your next upload to tidy those up."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:581
+#: ../dgit-maint-debrebase.7.pod:616
 msgid ""
 "For example, the NMUer might have used git-revert(1) to unapply one of your "
 "patches.  A debrebase can be used to strip both the patch and the reversion "
@@ -1025,12 +1081,12 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:585
+#: ../dgit-maint-debrebase.7.pod:620
 msgid "Manually applying the debdiff"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:587
+#: ../dgit-maint-debrebase.7.pod:622
 msgid ""
 "If you cannot rebase because you have already pushed to B<salsa.debian.org>, "
 "say, you can manually apply the NMU debdiff, commit and debrebase.  The next "
@@ -1038,24 +1094,24 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-debrebase.7.pod:592
+#: ../dgit-maint-debrebase.7.pod:627
 msgid "HINTS AND TIPS"
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:594
+#: ../dgit-maint-debrebase.7.pod:629
 msgid "Minimising pseudomerges"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:596
+#: ../dgit-maint-debrebase.7.pod:631
 msgid ""
 "Above we noted that each time you conclude a debrebase, you introduce a "
 "pseudomerge into your git history, which may make it harder to read."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:599
+#: ../dgit-maint-debrebase.7.pod:634
 msgid ""
 "A simple convention you can use to minimise the number of pseudomerges is to "
 "B<git debrebase conclude> only right before you upload or push to B<salsa."
@@ -1063,7 +1119,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:603
+#: ../dgit-maint-debrebase.7.pod:638
 msgid ""
 "It is possible, though much less convenient, to reduce the number of "
 "pseudomerges yet further.  We debrebase only (i) when importing a new "
@@ -1075,12 +1131,12 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:611
+#: ../dgit-maint-debrebase.7.pod:646
 msgid "The debian/patches directory"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:613
+#: ../dgit-maint-debrebase.7.pod:648
 msgid ""
 "In this workflow, I<debian/patches> is purely an output of git-"
 "debrebase(1).  You should not make changes there.  They will either cause "
@@ -1088,7 +1144,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:618
+#: ../dgit-maint-debrebase.7.pod:653
 msgid ""
 "I<debian/patches> will often be out-of-date because git-debrebase(1)  will "
 "only regenerate it when it needs to.  So you should not rely on the "
@@ -1098,17 +1154,17 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:624
+#: ../dgit-maint-debrebase.7.pod:659
 msgid "Upstream branches"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:626
+#: ../dgit-maint-debrebase.7.pod:661
 msgid "In this workflow, we specify upstream tags rather than any branches."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:628
+#: ../dgit-maint-debrebase.7.pod:663
 msgid ""
 "Except when (i) upstream releases only tarballs, (ii) we require DFSG "
 "filtering, or (iii) you also happen to be involved in upstream development, "
@@ -1117,7 +1173,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:634
+#: ../dgit-maint-debrebase.7.pod:669
 msgid ""
 "The idea here is that from Debian's point of view, upstream releases are "
 "immutable points in history.  We want to make sure that we are basing our "
@@ -1126,19 +1182,19 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:640
+#: ../dgit-maint-debrebase.7.pod:675
 msgid ""
 "Upstream's branches remain available as the git remote tracking branches for "
 "your upstream remote, e.g. I<remotes/upstream/master>."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:643
+#: ../dgit-maint-debrebase.7.pod:678
 msgid "The first ever dgit push"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:645
+#: ../dgit-maint-debrebase.7.pod:680
 msgid ""
 "If this is the first ever dgit push of the package, consider passing I<--"
 "deliberately-not-fast-forward> instead of I<--overwrite>.  This avoids "
@@ -1148,12 +1204,12 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:651
+#: ../dgit-maint-debrebase.7.pod:686
 msgid "Inspecting the history"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:653
+#: ../dgit-maint-debrebase.7.pod:688
 msgid ""
 "The git history made by git-debrebase can seem complicated.  Here are some "
 "suggestions for helpful invocations of gitk and git.  They can be adapted "
@@ -1161,12 +1217,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:657
+#: ../dgit-maint-debrebase.7.pod:692
 msgid "History of package in Debian, disregarding history from upstream:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:661
+#: ../dgit-maint-debrebase.7.pod:696
 #, no-wrap
 msgid ""
 "    % gitk --first-parent\n"
@@ -1174,17 +1230,17 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:663
+#: ../dgit-maint-debrebase.7.pod:698
 msgid "In a laundered branch, the delta queue is at the top."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:667
+#: ../dgit-maint-debrebase.7.pod:702
 msgid "History of the packaging, excluding the delta queue:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:669
+#: ../dgit-maint-debrebase.7.pod:704
 #, no-wrap
 msgid ""
 "    % gitk :/debian :!/debian/patches\n"
@@ -1192,12 +1248,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:671
+#: ../dgit-maint-debrebase.7.pod:706
 msgid "Just the delta queue (i.e. Debian's changes to upstream):"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:673
+#: ../dgit-maint-debrebase.7.pod:708
 #, no-wrap
 msgid ""
 "    % gitk --first-parent -- :/ :!/debian\n"
@@ -1205,12 +1261,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:675
+#: ../dgit-maint-debrebase.7.pod:710
 msgid "Full history including old versions of the delta queue:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:679
+#: ../dgit-maint-debrebase.7.pod:714
 #, no-wrap
 msgid ""
 "    % gitk --date-order\n"
@@ -1218,7 +1274,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:681
+#: ../dgit-maint-debrebase.7.pod:716
 msgid ""
 "The \"Declare fast forward\" commits you see have an older history (usually, "
 "an older delta queue) as one parent, and a newer history as the other.  --"
@@ -1226,12 +1282,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:688
+#: ../dgit-maint-debrebase.7.pod:723
 msgid "Complete diff since the last upload:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:692
+#: ../dgit-maint-debrebase.7.pod:727
 #, no-wrap
 msgid ""
 "    % git diff dgit/dgit/sid..HEAD -- :/ :!/debian/patches\n"
@@ -1239,17 +1295,17 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:694
+#: ../dgit-maint-debrebase.7.pod:729
 msgid "This includes changes to upstream files."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:698
+#: ../dgit-maint-debrebase.7.pod:733
 msgid "Interdiff of delta queue since last upload, if you really want it:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:700
+#: ../dgit-maint-debrebase.7.pod:735
 #, no-wrap
 msgid ""
 "    % git debrebase make-patches\n"
@@ -1258,12 +1314,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:703
+#: ../dgit-maint-debrebase.7.pod:738
 msgid "And of course there is:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:705
+#: ../dgit-maint-debrebase.7.pod:740
 #, no-wrap
 msgid ""
 "    % git debrebase status\n"
@@ -1271,24 +1327,24 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-debrebase.7.pod:707
+#: ../dgit-maint-debrebase.7.pod:742
 msgid "Alternative ways to start a debrebase"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:709
+#: ../dgit-maint-debrebase.7.pod:744
 msgid ""
 "Above we started an interactive debrebase by invoking git-debrebase(1)  like "
 "this:"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:718
+#: ../dgit-maint-debrebase.7.pod:753
 msgid "It is also possible to perform a non-interactive rebase, like this:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:722
+#: ../dgit-maint-debrebase.7.pod:757
 #, no-wrap
 msgid ""
 "    % git debrebase -- [git-rebase options...]\n"
@@ -1296,7 +1352,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:727
+#: ../dgit-maint-debrebase.7.pod:762
 msgid ""
 "A third alternative is to have git-debrebase(1) shuffle all the Debian "
 "changes to the end of your branch, and then manipulate them yourself using "
@@ -1304,7 +1360,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-debrebase.7.pod:733
+#: ../dgit-maint-debrebase.7.pod:768
 #, no-wrap
 msgid ""
 "    % git debrebase\n"
@@ -1313,7 +1369,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:738
+#: ../dgit-maint-debrebase.7.pod:773
 msgid ""
 "If you take this approach, you should be very careful not to start the "
 "rebase too early, including before the most recent pseudomerge.  git-rebase "
@@ -1323,6 +1379,6 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-debrebase.7.pod:749
+#: ../dgit-maint-debrebase.7.pod:784
 msgid "dgit(1), dgit(7), git-debrebase(1), git-debrebase(5)"
 msgstr ""
index 1dbb6826c1620fc49594d99d0837dbc698742867..b973a7a8f51292300b6ee2e5bde57761e3663b05 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2018-10-04 01:04+0100\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,36 +21,38 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:286 ../dgit-maint-merge.7.pod:446
+#: ../dgit.1:286 ../dgit-maint-merge.7.pod:479
 #, no-wrap
 msgid "1."
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:287 ../dgit-maint-merge.7.pod:450
+#: ../dgit.1:287 ../dgit-maint-merge.7.pod:483
 #, no-wrap
 msgid "2."
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:288 ../dgit-maint-merge.7.pod:455
+#: ../dgit.1:288 ../dgit-maint-merge.7.pod:488
 #, no-wrap
 msgid "3."
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1394 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1575 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:722 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:601
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:524 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:782 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:140
+#: ../git-debrebase.1.pod:634 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:261
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
@@ -59,18 +61,18 @@ msgstr ""
 #: ../dgit-user.7.pod:5 ../dgit-maint-native.7.pod:5
 #: ../dgit-maint-merge.7.pod:5 ../dgit-maint-gbp.7.pod:5
 #: ../dgit-maint-debrebase.7.pod:5 ../dgit-downstream-dsc.7.pod:5
-#: ../git-debrebase.1.pod:10 ../git-debrebase.5.pod:5
+#: ../dgit-maint-bpo.7.pod:5 ../git-debrebase.5.pod:5
 msgid "INTRODUCTION"
 msgstr ""
 
 #. type: textblock
 #: ../dgit-user.7.pod:449 ../dgit-maint-native.7.pod:128
-#: ../dgit-maint-merge.7.pod:493 ../dgit-maint-gbp.7.pod:138
+#: ../dgit-maint-merge.7.pod:526 ../dgit-maint-gbp.7.pod:138
 msgid "dgit(1), dgit(7)"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-native.7.pod:107 ../dgit-maint-merge.7.pod:484
+#: ../dgit-maint-native.7.pod:107 ../dgit-maint-merge.7.pod:517
 #, no-wrap
 msgid ""
 "    % dgit pull\n"
@@ -147,9 +149,9 @@ msgid ""
 msgstr ""
 
 #. type: =head3
-#: ../dgit-maint-merge.7.pod:53 ../dgit-maint-merge.7.pod:335
-#: ../dgit-maint-merge.7.pod:408 ../dgit-maint-debrebase.7.pod:67
-#: ../dgit-maint-debrebase.7.pod:321
+#: ../dgit-maint-merge.7.pod:53 ../dgit-maint-merge.7.pod:362
+#: ../dgit-maint-merge.7.pod:441 ../dgit-maint-debrebase.7.pod:67
+#: ../dgit-maint-debrebase.7.pod:354
 msgid "When upstream tags releases in git"
 msgstr ""
 
@@ -216,8 +218,8 @@ msgid "Finally, you need an orig tarball:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:97 ../dgit-maint-merge.7.pod:402
-#: ../dgit-maint-debrebase.7.pod:106 ../dgit-maint-debrebase.7.pod:383
+#: ../dgit-maint-merge.7.pod:97 ../dgit-maint-merge.7.pod:435
+#: ../dgit-maint-debrebase.7.pod:106 ../dgit-maint-debrebase.7.pod:423
 #, no-wrap
 msgid ""
 "    % git deborig\n"
@@ -261,21 +263,58 @@ msgid ""
 msgstr ""
 
 #. type: =head3
-#: ../dgit-maint-merge.7.pod:123 ../dgit-maint-merge.7.pod:343
-#: ../dgit-maint-merge.7.pod:433 ../dgit-maint-debrebase.7.pod:137
-#: ../dgit-maint-debrebase.7.pod:329
+#: ../dgit-maint-merge.7.pod:123 ../dgit-maint-debrebase.7.pod:137
+msgid "Using untagged upstream commits"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:127 ../dgit-maint-debrebase.7.pod:141
+msgid ""
+"Sometimes upstream does not tag their releases, or you want to package an "
+"unreleased git snapshot.  In such a case you can create your own upstream "
+"release tag, of the form B<upstream/>I<ver>, where I<ver> is the upstream "
+"version you plan to put in I<debian/changelog>.  The B<upstream/> prefix "
+"ensures that your tag will not clash with any tags upstream later creates."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:134 ../dgit-maint-debrebase.7.pod:148
+msgid ""
+"For example, suppose that the latest upstream release is 1.2.2 and you want "
+"to package git commit ab34c21 which was made on 2013-12-11.  A common "
+"convention is to use the upstream version number 1.2.2+git20131211.ab34c21 "
+"and so you could use"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:141 ../dgit-maint-debrebase.7.pod:155
+#, no-wrap
+msgid ""
+"    % git tag -s upstream/1.2.2+git20131211.ab34c21 ab34c21\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:159
+msgid "to obtain a release tag, and then proceed as above."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-maint-merge.7.pod:149 ../dgit-maint-merge.7.pod:374
+#: ../dgit-maint-merge.7.pod:466 ../dgit-maint-debrebase.7.pod:163
+#: ../dgit-maint-debrebase.7.pod:366
 msgid "When upstream releases only tarballs"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:125
+#: ../dgit-maint-merge.7.pod:151
 msgid ""
 "We need a virtual upstream branch with virtual release tags.  gbp-import-"
 "orig(1) can manage this for us.  To begin"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:130 ../dgit-maint-debrebase.7.pod:145
+#: ../dgit-maint-merge.7.pod:156
 #, no-wrap
 msgid ""
 "    % mkdir foo\n"
@@ -285,23 +324,23 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:136 ../dgit-maint-debrebase.7.pod:151
+#: ../dgit-maint-merge.7.pod:162
 msgid "Now create I<debian/gbp.conf>:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:140 ../dgit-maint-debrebase.7.pod:155
+#: ../dgit-maint-merge.7.pod:166 ../dgit-maint-debrebase.7.pod:208
 #, no-wrap
 msgid ""
 "    [DEFAULT]\n"
 "    upstream-branch = upstream\n"
 "    debian-branch = master\n"
-"    upstream-tag = %(version)s\n"
+"    upstream-tag = upstream/%(version)s\n"
 "\n"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:160
+#: ../dgit-maint-merge.7.pod:171 ../dgit-maint-debrebase.7.pod:213
 #, no-wrap
 msgid ""
 "    sign-tags = True\n"
@@ -311,21 +350,22 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:149 ../dgit-maint-debrebase.7.pod:164
+#: ../dgit-maint-merge.7.pod:175
 #, no-wrap
 msgid ""
 "    [import-orig]\n"
 "    merge-mode = merge\n"
+"    merge = False\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:154 ../dgit-maint-debrebase.7.pod:169
+#: ../dgit-maint-merge.7.pod:181
 msgid "gbp-import-orig(1) requires a pre-existing upstream branch:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:158 ../dgit-maint-debrebase.7.pod:173
+#: ../dgit-maint-merge.7.pod:185
 #, no-wrap
 msgid ""
 "    % git add debian/gbp.conf && git commit -m \"create gbp.conf\"\n"
@@ -337,20 +377,20 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:166 ../dgit-maint-debrebase.7.pod:181
+#: ../dgit-maint-merge.7.pod:193
 msgid "Then we can import the upstream version:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:170 ../dgit-maint-debrebase.7.pod:185
+#: ../dgit-maint-merge.7.pod:197
 #, no-wrap
 msgid ""
-"    % gbp import-orig --merge-mode=replace ../foo_1.2.2.orig.tar.xz\n"
+"    % gbp import-orig --merge --merge-mode=replace ../foo_1.2.2.orig.tar.xz\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:174 ../dgit-maint-debrebase.7.pod:189
+#: ../dgit-maint-merge.7.pod:201
 msgid ""
 "Our upstream branch cannot be pushed to B<dgit-repos>, but since we will "
 "need it whenever we import a new upstream version, we must push it "
@@ -358,7 +398,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:180 ../dgit-maint-debrebase.7.pod:195
+#: ../dgit-maint-merge.7.pod:207 ../dgit-maint-debrebase.7.pod:191
 #, no-wrap
 msgid ""
 "    % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
@@ -367,31 +407,31 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:185
+#: ../dgit-maint-merge.7.pod:212
 msgid ""
 "You are now ready to proceed as above, making commits to both the upstream "
 "source and the I<debian/> directory."
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:188 ../dgit-maint-debrebase.7.pod:207
+#: ../dgit-maint-merge.7.pod:215 ../dgit-maint-debrebase.7.pod:235
 msgid "CONVERTING AN EXISTING PACKAGE"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:190 ../dgit-maint-debrebase.7.pod:209
+#: ../dgit-maint-merge.7.pod:217 ../dgit-maint-debrebase.7.pod:237
 msgid ""
 "This section explains how to convert an existing Debian package to this "
 "workflow.  It should be skipped when debianising a new package."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:193
+#: ../dgit-maint-merge.7.pod:220
 msgid "No existing git history"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:197
+#: ../dgit-maint-merge.7.pod:224
 #, no-wrap
 msgid ""
 "    % dgit clone foo\n"
@@ -401,19 +441,19 @@ msgid ""
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:203
+#: ../dgit-maint-merge.7.pod:230
 msgid "Existing git history using another workflow"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:205
+#: ../dgit-maint-merge.7.pod:232
 msgid ""
 "First, if you don't already have the git history locally, clone it, and "
 "obtain the corresponding orig.tar from the archive:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:210
+#: ../dgit-maint-merge.7.pod:237
 #, no-wrap
 msgid ""
 "    % git clone git.debian.org:collab-maint/foo\n"
@@ -423,12 +463,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:216
+#: ../dgit-maint-merge.7.pod:243
 msgid "Now dump any existing patch queue:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:220
+#: ../dgit-maint-merge.7.pod:247
 #, no-wrap
 msgid ""
 "    % git rm -rf debian/patches\n"
@@ -437,12 +477,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:225
+#: ../dgit-maint-merge.7.pod:252
 msgid "Then make new upstream tags available:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:229 ../dgit-maint-debrebase.7.pod:240
+#: ../dgit-maint-merge.7.pod:256 ../dgit-maint-debrebase.7.pod:268
 #, no-wrap
 msgid ""
 "    % git remote add -f upstream https://some.upstream/foo.git\n"
@@ -450,12 +490,12 @@ msgid ""
 msgstr ""
 
 #. type: =for
-#: ../dgit-maint-merge.7.pod:233
+#: ../dgit-maint-merge.7.pod:260
 msgid "dgit-test dpkg-source-ignores begin"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:235
+#: ../dgit-maint-merge.7.pod:262
 msgid ""
 "Now you simply need to ensure that your git HEAD is dgit-compatible, i.e., "
 "it is exactly what you would get if you ran B<dpkg-buildpackage -i'(?:^|/)\\."
@@ -463,19 +503,19 @@ msgid ""
 msgstr ""
 
 #. type: =for
-#: ../dgit-maint-merge.7.pod:240
+#: ../dgit-maint-merge.7.pod:267
 msgid "dgit-test dpkg-source-ignores end"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:242 ../dgit-maint-debrebase.7.pod:289
+#: ../dgit-maint-merge.7.pod:269 ../dgit-maint-debrebase.7.pod:322
 msgid ""
 "To achieve this, you might need to delete I<debian/source/local-options>.  "
 "One way to have dgit check your progress is to run B<dgit build-source>."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:246
+#: ../dgit-maint-merge.7.pod:273
 msgid ""
 "The first dgit push will require I<--overwrite>.  If this is the first ever "
 "dgit push of the package, consider passing I<--deliberately-not-fast-"
@@ -486,24 +526,24 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:253
+#: ../dgit-maint-merge.7.pod:280
 msgid "SOURCE PACKAGE CONFIGURATION"
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:255
+#: ../dgit-maint-merge.7.pod:282
 msgid "debian/source/options"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:257
+#: ../dgit-maint-merge.7.pod:284
 msgid ""
 "We set some source package options such that dgit can transparently handle "
 "the \"dropping\" and \"refreshing\" of changes to the upstream source:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:263
+#: ../dgit-maint-merge.7.pod:290
 #, no-wrap
 msgid ""
 "    single-debian-patch\n"
@@ -512,26 +552,26 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:268
+#: ../dgit-maint-merge.7.pod:295
 msgid ""
 "You don't need to create this file if you are using the version 1.0 source "
 "package format."
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:271
+#: ../dgit-maint-merge.7.pod:298
 msgid "Sample text for debian/source/patch-header"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:273
+#: ../dgit-maint-merge.7.pod:300
 msgid ""
 "It is a good idea to explain how a user can obtain a breakdown of the "
 "changes to the upstream source:"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:278
+#: ../dgit-maint-merge.7.pod:305
 msgid ""
 "The Debian packaging of foo is maintained in git, using the merging workflow "
 "described in dgit-maint-merge(7).  There isn't a patch queue that can be "
@@ -539,7 +579,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:282
+#: ../dgit-maint-merge.7.pod:309
 msgid ""
 "A detailed breakdown of the changes is available from their canonical "
 "representation - git commits in the packaging repository.  For example, to "
@@ -548,7 +588,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:290
+#: ../dgit-maint-merge.7.pod:317
 #, no-wrap
 msgid ""
 "    % git clone https://git.dgit.debian.org/foo\n"
@@ -558,18 +598,18 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:296
+#: ../dgit-maint-merge.7.pod:323
 msgid ""
 "(If you have dgit, use `dgit clone foo`, rather than plain `git clone`.)"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:299
+#: ../dgit-maint-merge.7.pod:326
 msgid "A single combined diff, containing all the changes, follows."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:303
+#: ../dgit-maint-merge.7.pod:330
 msgid ""
 "If you are using the version 1.0 source package format, this text should be "
 "added to README.source instead.  The version 1.0 source package format "
@@ -577,7 +617,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:307
+#: ../dgit-maint-merge.7.pod:334
 msgid ""
 "If you're using the version 3.0 (quilt) source package format, you could add "
 "this text to README.source instead of debian/source/patch-header, but this "
@@ -585,12 +625,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:312 ../dgit-maint-debrebase.7.pod:436
+#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:476
 msgid "BUILDING AND UPLOADING"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:314
+#: ../dgit-maint-merge.7.pod:341
 msgid ""
 "Use B<dgit build>, B<dgit sbuild>, B<dgit pbuilder>, B<dgit cowbuilder>, "
 "B<dgit push-source>, and B<dgit push> as detailed in dgit(1).  If any "
@@ -600,7 +640,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:320
+#: ../dgit-maint-merge.7.pod:347
 msgid ""
 "As an alternative to B<dgit build> and friends, you can use a tool like "
 "gitpkg(1).  This works because like dgit, gitpkg(1) enforces that HEAD has "
@@ -611,7 +651,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:327
+#: ../dgit-maint-merge.7.pod:354
 msgid ""
 "If you want to skip dgit's checks while iterating on a problem with the "
 "package build (for example, you don't want to commit your changes to git), "
@@ -619,25 +659,33 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:331
+#: ../dgit-maint-merge.7.pod:358
 msgid "NEW UPSTREAM RELEASES"
 msgstr ""
 
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:333 ../dgit-maint-debrebase.7.pod:319
+#: ../dgit-maint-merge.7.pod:360 ../dgit-maint-debrebase.7.pod:352
 msgid "Obtaining the release"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:325
+#: ../dgit-maint-merge.7.pod:366 ../dgit-maint-debrebase.7.pod:358
 #, no-wrap
 msgid ""
-"    % git remote update\n"
+"    % git fetch --tags upstream\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:345 ../dgit-maint-debrebase.7.pod:331
+#: ../dgit-maint-merge.7.pod:370 ../dgit-maint-debrebase.7.pod:362
+msgid ""
+"If you want to package an untagged upstream commit (because upstream does "
+"not tag releases or because you want to package an upstream development "
+"snapshot), see \"Using untagged upstream commits\" above."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:376 ../dgit-maint-debrebase.7.pod:368
 msgid ""
 "You will need the I<debian/gbp.conf> from \"When upstream releases only "
 "tarballs\", above.  You will also need your upstream branch.  Above, we "
@@ -646,38 +694,43 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:350 ../dgit-maint-debrebase.7.pod:336
+#: ../dgit-maint-merge.7.pod:381 ../dgit-maint-debrebase.7.pod:373
 msgid "Then, either"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:354 ../dgit-maint-debrebase.7.pod:340
+#: ../dgit-maint-merge.7.pod:385 ../dgit-maint-debrebase.7.pod:377
 #, no-wrap
 msgid ""
-"    % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz\n"
+"    % gbp import-orig ../foo_1.2.3.orig.tar.xz\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:358 ../dgit-maint-debrebase.7.pod:344
+#: ../dgit-maint-merge.7.pod:389 ../dgit-maint-debrebase.7.pod:381
 msgid "or if you have a working watch file"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:362 ../dgit-maint-debrebase.7.pod:348
+#: ../dgit-maint-merge.7.pod:393 ../dgit-maint-debrebase.7.pod:385
 #, no-wrap
 msgid ""
-"    % gbp import-orig --no-merge --uscan\n"
+"    % gbp import-orig --uscan\n"
 "\n"
 msgstr ""
 
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:397
+msgid "In the following, replace I<1.2.3> with I<upstream/1.2.3>."
+msgstr ""
+
 #. type: =head2
-#: ../dgit-maint-merge.7.pod:366
+#: ../dgit-maint-merge.7.pod:399
 msgid "Reviewing & merging the release"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:368
+#: ../dgit-maint-merge.7.pod:401
 msgid ""
 "It's a good idea to preview the merge of the new upstream release.  First, "
 "just check for any new or deleted files that may need accounting for in your "
@@ -685,20 +738,20 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:374
+#: ../dgit-maint-merge.7.pod:407
 #, no-wrap
 msgid ""
-"    % git diff --stat master..1.2.3 -- . ':!debian'\n"
+"    % git diff --name-status --diff-filter=ADR master..1.2.3 -- . ':!debian'\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:378
+#: ../dgit-maint-merge.7.pod:411
 msgid "You can then review the full merge diff:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:382
+#: ../dgit-maint-merge.7.pod:415
 #, no-wrap
 msgid ""
 "    % git merge-tree `git merge-base master 1.2.3` master 1.2.3 | $PAGER\n"
@@ -706,12 +759,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:386
+#: ../dgit-maint-merge.7.pod:419
 msgid "Once you're satisfied with what will be merged, update your package:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:390
+#: ../dgit-maint-merge.7.pod:423
 #, no-wrap
 msgid ""
 "    % git merge 1.2.3\n"
@@ -721,7 +774,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:396 ../dgit-maint-debrebase.7.pod:377
+#: ../dgit-maint-merge.7.pod:429 ../dgit-maint-debrebase.7.pod:417
 msgid ""
 "If you obtained a tarball from upstream, you are ready to try a build.  If "
 "you merged a git tag from upstream, you will first need to generate a "
@@ -729,17 +782,17 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:406 ../dgit-maint-debrebase.7.pod:461
+#: ../dgit-maint-merge.7.pod:439 ../dgit-maint-debrebase.7.pod:507
 msgid "HANDLING DFSG-NON-FREE MATERIAL"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:410
+#: ../dgit-maint-merge.7.pod:443
 msgid "We create a DFSG-clean tag to merge to master:"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:414
+#: ../dgit-maint-merge.7.pod:447
 #, no-wrap
 msgid ""
 "    % git checkout -b pre-dfsg 1.2.3\n"
@@ -752,7 +805,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:423
+#: ../dgit-maint-merge.7.pod:456
 msgid ""
 "Before merging the new 1.2.3+dfsg tag to master, you should first determine "
 "whether it would be legally dangerous for the non-free material to be "
@@ -760,7 +813,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:428
+#: ../dgit-maint-merge.7.pod:461
 msgid ""
 "If it would be dangerous, there is a big problem; in this case please "
 "consult your archive administrators (for Debian this is the dgit "
@@ -769,7 +822,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:435 ../dgit-maint-debrebase.7.pod:521
+#: ../dgit-maint-merge.7.pod:468 ../dgit-maint-debrebase.7.pod:581
 msgid ""
 "The easiest way to handle this is to add a B<Files-Excluded> field to "
 "I<debian/copyright>, and a B<uversionmangle> setting in I<debian/watch>.  "
@@ -778,40 +831,40 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:440
+#: ../dgit-maint-merge.7.pod:473
 msgid "FORWARDING PATCHES UPSTREAM"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:442
+#: ../dgit-maint-merge.7.pod:475
 msgid "The basic steps are:"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:448
+#: ../dgit-maint-merge.7.pod:481
 msgid "Create a new branch based off upstream's master branch."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:452
+#: ../dgit-maint-merge.7.pod:485
 msgid ""
 "git-cherry-pick(1) commits from your master branch onto your new branch."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:457
+#: ../dgit-maint-merge.7.pod:490
 msgid ""
 "Push the branch somewhere and ask upstream to merge it, or use git-format-"
 "patch(1) or git-request-pull(1)."
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:462
+#: ../dgit-maint-merge.7.pod:495
 msgid "For example (and it is only an example):"
 msgstr ""
 
 #. type: verbatim
-#: ../dgit-maint-merge.7.pod:466
+#: ../dgit-maint-merge.7.pod:499
 #, no-wrap
 msgid ""
 "    % # fork foo.git on GitHub\n"
@@ -825,7 +878,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:476
+#: ../dgit-maint-merge.7.pod:509
 msgid ""
 "Note that when you merge an upstream release containing your forwarded "
 "patches, git and dgit will transparently handle \"dropping\" the patches "
@@ -833,26 +886,27 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:480 ../dgit-maint-gbp.7.pod:130
-#: ../dgit-maint-debrebase.7.pod:526
+#: ../dgit-maint-merge.7.pod:513 ../dgit-maint-gbp.7.pod:130
+#: ../dgit-maint-debrebase.7.pod:586
 msgid "INCORPORATING NMUS"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:488
+#: ../dgit-maint-merge.7.pod:521
 msgid ""
 "Alternatively, you can apply the NMU diff to your repository.  The next push "
 "will then require I<--overwrite>."
 msgstr ""
 
 #. type: =head1
-#: ../dgit-maint-merge.7.pod:495 ../dgit-maint-gbp.7.pod:140
-#: ../dgit-maint-debrebase.7.pod:726
+#: ../dgit-maint-merge.7.pod:528 ../dgit-maint-gbp.7.pod:140
+#: ../dgit-maint-debrebase.7.pod:786 ../dgit-maint-bpo.7.pod:144
+#: ../git-debpush.1.pod:266
 msgid "AUTHOR"
 msgstr ""
 
 #. type: textblock
-#: ../dgit-maint-merge.7.pod:497 ../dgit-maint-debrebase.7.pod:728
+#: ../dgit-maint-merge.7.pod:530 ../dgit-maint-debrebase.7.pod:788
 msgid ""
 "This tutorial was written and is maintained by Sean Whitton "
 "<spwhitton@spwhitton.name>.  It contains contributions from other dgit "
index 052904fe4ec6216ddaf1f179603913962311ca28..c7d489ba45990849f35e63c51d8c118a4c34a0a6 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-03-01 16:59+0000\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,7 +33,8 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
@@ -43,8 +44,8 @@ msgstr ""
 msgid "dgit - git integration with the Debian archive"
 msgstr ""
 
-#. type: SH
-#: ../dgit.1:6
+#. type: =head1
+#: ../dgit.1:6 ../git-debpush.1.pod:5
 #, no-wrap
 msgid "SYNOPSIS"
 msgstr ""
@@ -89,8 +90,8 @@ msgstr ""
 msgid "B<dgit> [I<dgit-opts>] I<action> ..."
 msgstr ""
 
-#. type: SH
-#: ../dgit.1:33
+#. type: =head1
+#: ../dgit.1:33 ../git-debpush.1.pod:9
 #, no-wrap
 msgid "DESCRIPTION"
 msgstr ""
@@ -417,7 +418,7 @@ msgid "B<dgit help>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:185 ../dgit.1:1192
+#: ../dgit.1:185 ../dgit.1:1278
 msgid "Print a usage summary."
 msgstr ""
 
@@ -594,7 +595,7 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:286 ../dgit-maint-merge.7.pod:446
+#: ../dgit.1:286 ../dgit-maint-merge.7.pod:479
 #, no-wrap
 msgid "1."
 msgstr ""
@@ -606,7 +607,7 @@ msgid "Clone on build host (dgit clone)"
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:287 ../dgit-maint-merge.7.pod:450
+#: ../dgit.1:287 ../dgit-maint-merge.7.pod:483
 #, no-wrap
 msgid "2."
 msgstr ""
@@ -618,7 +619,7 @@ msgid "Edit code on build host (edit, git commit)"
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:288 ../dgit-maint-merge.7.pod:455
+#: ../dgit.1:288 ../dgit-maint-merge.7.pod:488
 #, no-wrap
 msgid "3."
 msgstr ""
@@ -955,7 +956,7 @@ msgid "This function is primarily provided for the benefit of git-debrebase."
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:496 ../git-debrebase.1.pod:462
+#: ../dgit.1:496 ../git-debrebase.1.pod:477
 #, no-wrap
 msgid "OPTIONS"
 msgstr ""
@@ -1205,7 +1206,7 @@ msgid "B<-N> | B<--new>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:637
+#: ../dgit.1:638
 msgid ""
 "The package is or may be new in this suite.  Without this, dgit will refuse "
 "to push.  It may (for Debian, will) be unable to access the git history for "
@@ -1213,13 +1214,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:637
+#: ../dgit.1:638
 #, no-wrap
 msgid "B<--include-dirty>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:645
+#: ../dgit.1:646
 msgid ""
 "Do not complain if the working tree does not match your git HEAD, and when "
 "building, include the changes from your working tree.  This can be useful "
@@ -1228,25 +1229,36 @@ msgid ""
 "won't make broken pushes.)"
 msgstr ""
 
+#. type: Plain text
+#: ../dgit.1:658
+msgid ""
+"Note that this does B<not> prevent dgit from cleaning your tree, so if the "
+"changes in your working tree are in the form of untracked files, those might "
+"still be deleted, especially with --clean=git.  If you want to include "
+"untracked files in the build, you can use --clean=none or --clean=dpkg-"
+"source[-d] in addition to --include-dirty.  Note that this combination can "
+"fail if the untracked files are under I<debian/patches/>."
+msgstr ""
+
 #. type: TP
-#: ../dgit.1:645
+#: ../dgit.1:658
 #, no-wrap
 msgid "B<--ignore-dirty>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:648
+#: ../dgit.1:661
 msgid "Deprecated alias for --include-dirty."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:648
+#: ../dgit.1:661
 #, no-wrap
 msgid "B<--overwrite>[=I<previous-version>]"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:659
+#: ../dgit.1:672
 msgid ""
 "Declare that your HEAD really does contain all the (wanted) changes from all "
 "versions listed in its changelog; or, all (wanted) changes from I<previous-"
@@ -1255,29 +1267,30 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:666
+#: ../dgit.1:679
 msgid ""
 "It is safer not to specify I<previous-version>, and usually it's not "
 "needed.  Just say B<--overwrite>, unless you know what you are doing."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:670
+#: ../dgit.1:685
 msgid ""
 "This option is useful if you are the maintainer, and you have incorporated "
 "NMU changes into your own git workflow in a way that doesn't make your "
-"branch a fast forward from the NMU."
+"branch a fast forward from the NMU.  It can also be useful when there was an "
+"upload made without dgit since the most recent upload made with dgit."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:676
+#: ../dgit.1:691
 msgid ""
 "This option is also usually necessary the first time a package is pushed "
 "with dgit push to a particular suite.  See B<dgit-maint->I<*>B<(7)>."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:690
+#: ../dgit.1:705
 msgid ""
 "If I<previous-version> is not specified, dgit will check that the version in "
 "the archive is mentioned in your debian/changelog.  (This will avoid losing "
@@ -1288,7 +1301,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:696
+#: ../dgit.1:711
 msgid ""
 "dgit push --overwrite will, if necessary, make a pseudo-merge (that is, "
 "something that looks like the result of git merge -s ours) to stitch the "
@@ -1297,26 +1310,26 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:701
+#: ../dgit.1:716
 msgid ""
-"(In quilt mode B<gbp>, B<dpm> or B<unpatched>, implying a split between the "
-"dgit view and the maintainer view, the pseudo-merge will appear only in the "
-"dgit view.)"
+"(In quilt mode B<gbp>, B<dpm>, B<unpatched> or B<baredebian>*, implying a "
+"split between the dgit view and the maintainer view, the pseudo-merge will "
+"appear only in the dgit view.)"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:701
+#: ../dgit.1:716
 #, no-wrap
 msgid "B<--delayed>=I<days>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:704
+#: ../dgit.1:719
 msgid "Upload to a DELAYED queue."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:714
+#: ../dgit.1:729
 msgid ""
 "B<WARNING:> If the maintainer responds by cancelling your upload from the "
 "queue, and does not make an upload of their own, this will not rewind the "
@@ -1326,27 +1339,27 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:719
+#: ../dgit.1:734
 msgid ""
 "If this situation arises, someone should make a suitable dgit push to update "
 "the contents of dgit-repos to a version without the controversial changes."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:719
+#: ../dgit.1:734
 #, no-wrap
 msgid "B<--no-chase-dsc-distro>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:725
+#: ../dgit.1:740
 msgid ""
 "Tells dgit not to look online for additional git repositories containing "
 "information about a particular .dsc being imported.  Chasing is the default."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:735
+#: ../dgit.1:750
 msgid ""
 "For most operations (such as fetch and pull), disabling chasing means dgit "
 "will access only the git server for the distro you are directly working "
@@ -1355,7 +1368,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:743
+#: ../dgit.1:758
 msgid ""
 "Disabling chasing can be hazardous: if the .dsc names a git commit which has "
 "been rewritten by those in charge of the distro, this option may prevent "
@@ -1364,48 +1377,48 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:743
+#: ../dgit.1:758
 #, no-wrap
 msgid "B<--save-dgit-view=>I<branch>|I<ref>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:753
+#: ../dgit.1:768
 msgid ""
-"Specifies that when a split view quilt mode is in operation, and dgit "
-"calculates (or looks up in its cache)  a dgit view corresponding to your "
-"HEAD, the dgit view will be left in I<ref>.  The specified ref is "
-"unconditionally overwritten, so don't specify a branch you want to keep."
+"Specifies that when split view is in operation, and dgit calculates (or "
+"looks up in its cache)  a dgit view corresponding to your HEAD, the dgit "
+"view will be left in I<ref>.  The specified ref is unconditionally "
+"overwritten, so don't specify a branch you want to keep."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:760
+#: ../dgit.1:772
 msgid ""
 "This option is effective only with the following operations: quilt-fixup; "
-"push; all builds.  And it is only effective with --[quilt=]gbp, --"
-"[quilt=]dpm, --quilt=unpatched."
+"push; all builds.  And it is only effective when split view is actually in "
+"operation."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:764
+#: ../dgit.1:776
 msgid ""
 "If ref does not start with refs/ it is taken to be a branch - i.e. refs/"
 "heads/ is prepended."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:768
+#: ../dgit.1:780
 msgid "B<--dgit-view-save> is a deprecated alias for --save-dgit-view."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:768
+#: ../dgit.1:780
 #, no-wrap
 msgid "B<--deliberately->I<something>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:782
+#: ../dgit.1:794
 msgid ""
 "Declare that you are deliberately doing I<something>.  This can be used to "
 "override safety catches, including safety catches which relate to distro-"
@@ -1417,38 +1430,46 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:782
+#: ../dgit.1:794
 #, no-wrap
 msgid "B<--deliberately-not-fast-forward>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:788
+#: ../dgit.1:800
 msgid ""
-"Declare that you are deliberately rewinding history.  When pushing to "
-"Debian, use this when you are making a renewed upload of an entirely new "
-"source package whose previous version was not accepted for release from NEW "
-"because of problems with copyright or redistributibility."
+"Declare that you are deliberately rewriting history.  This could be because "
+"your branch is not fast forward from the dgit server history, or not fast "
+"forward from a locally-synthesised dsc import."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:799
+#: ../dgit.1:806
 msgid ""
-"In split view quilt modes, this also prevents the construction by dgit of a "
-"pseudomerge to make the dgit view fast forwarding.  Normally only one of --"
-"overwrite (which creates a suitable pseudomerge)  and --deliberately-not-"
-"fast-forward (which suppresses the pseudomerge and the fast forward checks)  "
-"should be needed; --overwrite is usually better."
+"When pushing to Debian, use this only when you are making a renewed upload "
+"of an entirely new source package whose previous version was not accepted "
+"for release from NEW because of problems with copyright or "
+"redistributibility; or, exceptionally, for the very first upload with dgit."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:817
+msgid ""
+"When split view is in operation, this also prevents the construction by dgit "
+"of a pseudomerge to make the dgit view fast forwarding.  Normally only one "
+"of --overwrite (which creates a suitable pseudomerge)  and --deliberately-"
+"not-fast-forward (which suppresses the pseudomerge and the fast forward "
+"checks)  should be needed; --overwrite is usually better."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:799
+#: ../dgit.1:817
 #, no-wrap
 msgid "B<--deliberately-include-questionable-history>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:808
+#: ../dgit.1:826
 msgid ""
 "Declare that you are deliberately including, in the git history of your "
 "current push, history which contains a previously-submitted version of this "
@@ -1460,27 +1481,27 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:808
+#: ../dgit.1:826
 #, no-wrap
 msgid "B<--deliberately-fresh-repo>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:813
+#: ../dgit.1:831
 msgid ""
-"Declare that you are deliberately rewinding history and want to throw away "
+"Declare that you are deliberately rewriting history and want to throw away "
 "the existing repo.  Not relevant when pushing to Debian, as the Debian "
 "server will do this automatically when necessary."
 msgstr ""
 
-#. type: TP
-#: ../dgit.1:813
+#. type: =item
+#: ../dgit.1:831 ../git-debpush.1.pod:114
 #, no-wrap
 msgid "B<--quilt=linear>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:820
+#: ../dgit.1:838
 msgid ""
 "When fixing up source format `3.0 (quilt)' metadata, insist on generating a "
 "linear patch stack: one new patch for each relevant commit.  If such a stack "
@@ -1488,36 +1509,36 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:825
+#: ../dgit.1:843
 msgid ""
 "HEAD should be a series of plain commits (not touching debian/patches/), and "
 "pseudomerges, with as ancestor a patches-applied branch."
 msgstr ""
 
-#. type: TP
-#: ../dgit.1:825
+#. type: =item
+#: ../dgit.1:843 ../git-debpush.1.pod:126
 #, no-wrap
 msgid "B<--quilt=auto>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:834
+#: ../dgit.1:852
 msgid ""
 "When fixing up source format `3.0 (quilt)' metadata, prefer to generate a "
-"linear patch stack (as with --quilt=auto)  but if that doesn't seem "
+"linear patch stack (as with --quilt=linear)  but if that doesn't seem "
 "possible, try to generate a single squashed patch for all the changes made "
 "in git (as with --quilt=smash).  This is not a good idea for an NMU in "
 "Debian."
 msgstr ""
 
-#. type: TP
-#: ../dgit.1:834
+#. type: =item
+#: ../dgit.1:852 ../git-debpush.1.pod:120
 #, no-wrap
 msgid "B<--quilt=smash>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:839
+#: ../dgit.1:857
 msgid ""
 "When fixing up source format `3.0 (quilt)' metadata, generate a single "
 "additional patch for all the changes made in git.  This is not a good idea "
@@ -1525,7 +1546,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:845
+#: ../dgit.1:863
 msgid ""
 "(If HEAD has any in-tree patches already, they must apply cleanly.  This "
 "will be the case for any trees produced by dgit fetch or clone; if you do "
@@ -1533,14 +1554,14 @@ msgid ""
 "remain true.)"
 msgstr ""
 
-#. type: TP
-#: ../dgit.1:845
+#. type: =item
+#: ../dgit.1:863 ../git-debpush.1.pod:131
 #, no-wrap
 msgid "B<--quilt=nofix>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:853
+#: ../dgit.1:871
 msgid ""
 "Check whether source format `3.0 (quilt)' metadata would need fixing up, "
 "but, if it does, fail.  You must then fix the metadata yourself somehow "
@@ -1549,13 +1570,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:853
+#: ../dgit.1:871
 #, no-wrap
 msgid "B<--quilt=nocheck> | B<--no-quilt-fixup>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:858
+#: ../dgit.1:876
 msgid ""
 "Do not check whether source format `3.0 (quilt)' metadata needs fixing up.  "
 "If you use this option and the metadata did in fact need fixing up, dgit "
@@ -1563,20 +1584,27 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:858
+#: ../dgit.1:876
 #, no-wrap
-msgid "B<-->[B<quilt=>]B<gbp> | B<-->[B<quilt=>]B<dpm> | B<--quilt=unapplied>"
+msgid "B<-->[B<quilt=>]B<gbp> | B<-->[B<quilt=>]B<dpm> | B<--quilt=unapplied> | B<-->[B<quilt=>]B<baredebian>[B<+git>|B<+tarball>]"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:865
+#: ../dgit.1:883
 msgid ""
 "Tell dgit that you are using a nearly-dgit-compatible git branch, aka a "
 "B<maintainer view>, and do not want your branch changed by dgit."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:873
+#: ../dgit.1:887
+msgid ""
+"These quilt modes are known as B<splitting quilt modes>.  See --split-view, "
+"below."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:895
 msgid ""
 "B<--gbp> (short for B<--quilt=gbp>)  is for use with git-buildpackage.  Your "
 "HEAD is expected to be a patches-unapplied git branch, except that it might "
@@ -1585,7 +1613,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:881
+#: ../dgit.1:903
 msgid ""
 "B<--dpm> (short for B<--quilt=dpm>)  is for use with git-dpm.  Your HEAD is "
 "expected to be a patches-applied git branch, except that it might contain "
@@ -1593,7 +1621,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:886
+#: ../dgit.1:908
 msgid ""
 "B<--quilt=unapplied> specifies that your HEAD is a patches-unapplied git "
 "branch (and that any changes to upstream .gitignore files are represented as "
@@ -1601,20 +1629,44 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:904
+#: ../dgit.1:922
 msgid ""
-"With --quilt=gbp|dpm|unapplied, dgit push (or precursors like quilt-fixup "
-"and build) will automatically generate a conversion of your git branch into "
-"the right form.  dgit push will push the dgit-compatible form (the B<dgit "
-"view>)  to the dgit git server.  The dgit view will be visible to you in the "
-"dgit remote tracking branches, but your own branch will not be modified.  "
-"dgit push will create a tag B<debian/>I<version> for the maintainer view, "
-"and the dgit tag B<archive/debian/>I<version> for the dgit view.  dgit quilt-"
-"fixup will merely do some checks, and cache the maintainer view."
+"B<--quilt=baredebian> (or its alias B<--quilt=baredebian+git>)  specifies "
+"that your HEAD contains only a debian/ directory, with any changes to "
+"upstream files represented as patches in debian/patches.  The upstream "
+"source must be available in git, by default, in a suitably named git tag; "
+"see --upstream-commitish.  In this mode, dgit cannot check that all edited "
+"upstream files are properly represented as patches: dgit relies on debian/"
+"patches being correct."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:913
+#: ../dgit.1:933
+msgid ""
+"B<--quilt=baredebian+tarball> is like --quilt=baredebian, but is used when "
+"there is no appropriate upstream git history.  To construct the dgit view, "
+"dgit will import your orig tarballs' contents into git.  In this mode, dgit "
+"cannot check that the upstream parts of your upload correspond to what you "
+"intend: dgit relies on the right orig tarball(s) existing, and debian/"
+"patches being correct."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:951
+msgid ""
+"With --quilt=gbp|dpm|unapplied|baredebian*, dgit push (or precursors like "
+"quilt-fixup and build) will automatically generate a conversion of your git "
+"branch into the right form.  dgit push will push the dgit-compatible form "
+"(the B<dgit view>)  to the dgit git server.  The dgit view will be visible "
+"to you in the dgit remote tracking branches, but your own branch will not be "
+"modified.  dgit push will create a tag B<debian/>I<version> for the "
+"maintainer view, and the dgit tag B<archive/debian/>I<version> for the dgit "
+"view.  dgit quilt-fixup will merely do some checks, and cache the maintainer "
+"view."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:960
 msgid ""
 "B<If you have a branch like this it is essential to specify the appropriate "
 "--quilt= option!> This is because it is not always possible to tell: a "
@@ -1626,13 +1678,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:913
+#: ../dgit.1:960
 #, no-wrap
 msgid "B<-d>I<distro> | B<--distro=>I<distro>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:922
+#: ../dgit.1:969
 msgid ""
 "Specifies that the suite to be operated on is part of distro I<distro>.  "
 "This overrides the default value found from the git config option B<dgit-"
@@ -1642,7 +1694,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:928
+#: ../dgit.1:975
 msgid ""
 "If your suite is part of a distro that dgit already knows about, you can use "
 "this option to make dgit work even if your dgit doesn't know about the "
@@ -1651,7 +1703,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:933
+#: ../dgit.1:980
 msgid ""
 "To define a new distro it is necessary to define methods and URLs for "
 "fetching (and, for dgit push, altering) a variety of information both in the "
@@ -1659,13 +1711,70 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:933
+#: ../dgit.1:980
+#, no-wrap
+msgid "B<--split-view=auto>|B<always>|B<never>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:985
+msgid ""
+"Controls whether dgit operates a split view, separating your own branch (as "
+"Debian maintainer)  from that shown to users of dgit clone and dgit fetch."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:993
+msgid ""
+"When split view is in operation dgit will not make or merge any commits onto "
+"your own branch.  Specifically, only the dgit view will contain dgit's "
+"pseudomerges, which bring into the git history previous uploads made with "
+"dgit push, and any commits in debian/patches required to make a correct `3.0 "
+"(quilt)' source package."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:999
+msgid ""
+"B<auto> is the default, and splits the view only when needed: i.e., when you "
+"are working with a `3.0 (quilt)' source package and a splitting quilt mode: "
+"--[quilt=]gbp, dpm, unpatched or baredebian*."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1002
+msgid ""
+"B<always> splits the view regardless of the source format and the quilt mode."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1005
+msgid "B<never> will cause dgit to fail if split view is needed."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1013
+msgid ""
+"When split view is in operation, the dgit view is visible in your local git "
+"clone, but only in refs specific to dgit: notably B<remotes/dgit/dgit/"
+">I<suite> and B<archive/>I<distro>B</>I<version>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1016
+msgid ""
+"Note that split view does not affect dgit fetch, and is not compatible with "
+"dgit pull."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1016
 #, no-wrap
 msgid "B<-C>I<changesfile>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:938
+#: ../dgit.1:1021
 msgid ""
 "Specifies the .changes file which is to be uploaded.  By default dgit push "
 "looks for a single .changes file in the parent directory whose filename "
@@ -1673,7 +1782,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:947
+#: ../dgit.1:1030
 msgid ""
 "If the specified I<changesfile> pathname contains slashes, the directory "
 "part is also used as the value for B<--build-products-dir>; otherwise, the "
@@ -1681,13 +1790,28 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:947
+#: ../dgit.1:1030
+#, no-wrap
+msgid "B<--upstream-commitish=>I<upstream>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1038
+msgid ""
+"For use with --quilt=baredebian only.  Specifies the commit containing the "
+"upstream source.  This commit must be identical to your .orig tarball.  The "
+"default is to look for one of the git tags I<U>B< v>I<U>B< upstream/>I<U> "
+"(in that order), where U is the upstream version."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1038
 #, no-wrap
 msgid "B<--rm-old-changes>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:959
+#: ../dgit.1:1050
 msgid ""
 "When doing a build, delete any changes files matching "
 "I<package>B<_>I<version>B<_*.changes> before starting.  This ensures that "
@@ -1699,32 +1823,32 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:962
+#: ../dgit.1:1053
 msgid ""
 "Note that B<dgit push-source> will always find the right .changes, "
 "regardless of this option."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:962
+#: ../dgit.1:1053
 #, no-wrap
 msgid "B<--build-products-dir=>I<directory>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:966
+#: ../dgit.1:1057
 msgid ""
 "Specifies where to find and create tarballs, binary packages, source "
 "packages, .changes files, and so on."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:969
+#: ../dgit.1:1060
 msgid "By default, dgit uses the parent directory (B<..>)."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:978
+#: ../dgit.1:1069
 msgid ""
 "Changing this setting may necessitate moving .orig tarballs to the new "
 "directory, so it is probably best to use the B<dgit.default.build-products-"
@@ -1733,90 +1857,85 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:978
+#: ../dgit.1:1069
 #, no-wrap
 msgid "B<--no-rm-on-error>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:981
+#: ../dgit.1:1072
 msgid "Do not delete the destination directory if clone fails."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:981
+#: ../dgit.1:1072
 #, no-wrap
 msgid "B<--dep14tag>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:988
+#: ../dgit.1:1079
 msgid ""
 "Generates a DEP-14 tag (eg B<debian/>I<version>)  as well as a dgit tag (eg "
-"B<archive/debian/>I<version>)  where possible.  This is the default."
+"B<archive/debian/>I<version>).  This is the default."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:988
+#: ../dgit.1:1079
 #, no-wrap
 msgid "B<--no-dep14tag>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:994
-msgid ""
-"Do not generate a DEP-14 tag, except in split quilt view mode.  (On servers "
-"where only the old tag format is supported, the dgit tag will have the "
-"DEP-14 name.  This option does not prevent that.)"
+#: ../dgit.1:1082
+msgid "Do not generate a DEP-14 tag, except when split view is in operation."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:994
+#: ../dgit.1:1082
 #, no-wrap
-msgid "B<--dep14tag-always>"
+msgid "B<--always-dep14tag>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:999
-msgid ""
-"Insist on generating a DEP-14 tag as well as a dgit tag.  If the server does "
-"not support that, dgit push will fail."
+#: ../dgit.1:1085
+msgid "Obsolete alias for --dep14tag, retained for compatibility."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:999
+#: ../dgit.1:1085
 #, no-wrap
 msgid "B<-D>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1003
+#: ../dgit.1:1089
 msgid ""
 "Prints debugging information to stderr.  Repeating the option produces more "
 "output (currently, up to -DDDD is meaningfully different)."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1003
+#: ../dgit.1:1089
 #, no-wrap
 msgid "B<-c>I<name>B<=>I<value>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1007
+#: ../dgit.1:1093
 msgid ""
 "Specifies a git configuration option, to be used for this run.  dgit itself "
 "is also controlled by git configuration options."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1007
+#: ../dgit.1:1093
 #, no-wrap
 msgid "B<-v>I<version>|B<_> | B<--since-version=>versionI<|>B<_>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1016
+#: ../dgit.1:1102
 msgid ""
 "Specifies the B<-v>I<version> option to pass to dpkg-genchanges, during "
 "builds.  Changes (from debian/changelog) since this version will be included "
@@ -1826,7 +1945,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1022
+#: ../dgit.1:1108
 msgid ""
 "Specifying B<_> inhibits this, so that no -v option will be passed to dpkg-"
 "genchanges (and as a result, only the last stanza from debian/changelog will "
@@ -1834,30 +1953,30 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1022
+#: ../dgit.1:1108
 #, no-wrap
 msgid "B<-m>I<maintaineraddress>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1025
+#: ../dgit.1:1111
 msgid "Passed to dpkg-genchanges (eventually)."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1025
+#: ../dgit.1:1111
 #, no-wrap
 msgid "B<--ch:>I<option>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1029
+#: ../dgit.1:1115
 msgid ""
 "Specifies a single additional option to pass, eventually, to dpkg-genchanges."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1036
+#: ../dgit.1:1122
 msgid ""
 "Options which are safe to pass include B<-C> (and also B<-si -sa -sd> "
 "although these should never be necessary with Debian since dgit "
@@ -1865,18 +1984,18 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1038
+#: ../dgit.1:1124
 msgid "For other options the caveat below applies."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1038
+#: ../dgit.1:1124
 #, no-wrap
 msgid "B<--curl:>I<option> | B<--dput:>I<option> |..."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1060
+#: ../dgit.1:1146
 msgid ""
 "Specifies a single additional option to pass to B<curl>, B<dput>, "
 "B<debsign>, B<dpkg-source>, B<dpkg-buildpackage>, B<dpkg-genchanges>, "
@@ -1886,7 +2005,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1068
+#: ../dgit.1:1154
 msgid ""
 "Use of this ability should not normally be necessary.  It is provided for "
 "working around bugs, or other unusual situations.  If you use these options, "
@@ -1895,7 +2014,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1073
+#: ../dgit.1:1159
 msgid ""
 "For dpkg-buildpackage, dpkg-genchanges, mergechanges and sbuild, the option "
 "applies only when the program is invoked directly by dgit.  Usually, for "
@@ -1903,7 +2022,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1077
+#: ../dgit.1:1163
 msgid ""
 "Specifying --git is not effective for some lower-level read-only git "
 "operations performed by dgit, and also not when git is invoked by another "
@@ -1911,39 +2030,39 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1079
+#: ../dgit.1:1165
 msgid "See notes below regarding ssh and dgit."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1087
+#: ../dgit.1:1173
 msgid ""
 "NB that --gpg:option is not supported (because debsign does not have that "
 "facility).  But see B<-k> and the B<keyid> distro config setting."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1087
+#: ../dgit.1:1173
 #, no-wrap
 msgid "B<--curl!:>I<option> | B<--dput!:>I<option> |..."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1093
+#: ../dgit.1:1179
 msgid ""
 "Specifies an option to remove from the command line for a program called by "
 "dgit, as for B<-->I<program>B<:>I<option> (and the same caveats apply)."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1098
+#: ../dgit.1:1184
 msgid ""
 "Any options or arguments exactly identical to I<option> are removed.  (It is "
 "not an error if there were none.)"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1105
+#: ../dgit.1:1191
 msgid ""
 "This can only be used to delete options which are always passed by default "
 "by dgit, or to undo a previous B<-->I<program>B<:>I<option>.  It cannot be "
@@ -1951,13 +2070,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1105
+#: ../dgit.1:1191
 #, no-wrap
 msgid "B<--curl=>I<program> | B<--dput=>I<program> |..."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1128
+#: ../dgit.1:1214
 msgid ""
 "Specifies alternative programs to use instead of B<curl>, B<dput>, "
 "B<debsign>, B<dpkg-source>, B<dpkg-buildpackage>, B<dpkg-genchanges>, "
@@ -1967,14 +2086,14 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1136
+#: ../dgit.1:1222
 msgid ""
 "For B<dpkg-buildpackage>, B<dpkg-genchanges>, B<mergechanges> and B<sbuild>, "
 "this applies only when the program is invoked directly by dgit."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1143
+#: ../dgit.1:1229
 msgid ""
 "For B<dgit>, specifies the command to run on the remote host when dgit rpush "
 "needs to invoke a remote copy of itself.  (dgit also reinvokes itself as the "
@@ -1983,7 +2102,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1154
+#: ../dgit.1:1240
 msgid ""
 "B<gbp-build>'s value is used instead of gbp build or git-buildpackage.  (The "
 "default is the latter unless the former exists on PATH.)  B<gbp-pq>'s value "
@@ -1993,7 +2112,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1162
+#: ../dgit.1:1248
 msgid ""
 "For pbuilder and cowbuilder, the defaults are B<sudo -E pbuilder> and B<sudo "
 "-E cowbuilder> respectively.  Like with gbp-build and gbp pq, the specified "
@@ -2001,7 +2120,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1179
+#: ../dgit.1:1265
 msgid ""
 "For B<ssh>, the default value is taken from the B<DGIT_SSH> or B<GIT_SSH> "
 "environment variables, if set (see below).  And, for ssh, when accessing the "
@@ -2013,13 +2132,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1179
+#: ../dgit.1:1265
 #, no-wrap
 msgid "B<--existing-package=>I<package>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1189
+#: ../dgit.1:1275
 msgid ""
 "dgit push needs to canonicalise the suite name.  Sometimes, dgit lacks a way "
 "to ask the archive to do this without knowing the name of an existing "
@@ -2030,19 +2149,19 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1189
+#: ../dgit.1:1275
 #, no-wrap
 msgid "B<-h>|B<--help>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1192
+#: ../dgit.1:1278
 #, no-wrap
 msgid "B<--initiator-tempdir=>I<directory>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1201
+#: ../dgit.1:1287
 msgid ""
 "dgit rpush uses a temporary directory on the invoking (signing) host.  This "
 "option causes dgit to use I<directory> instead.  Furthermore, the specified "
@@ -2052,13 +2171,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1201
+#: ../dgit.1:1287
 #, no-wrap
 msgid "B<--force->I<something>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1209
+#: ../dgit.1:1295
 msgid ""
 "Instructs dgit to try to proceed despite detecting what it thinks is going "
 "to be a fatal problem.  B<This is probably not going to work.> These options "
@@ -2067,13 +2186,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1209
+#: ../dgit.1:1295
 #, no-wrap
 msgid "B<--force-import-dsc-with-dgit-field>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1216
+#: ../dgit.1:1302
 msgid ""
 "Tell dgit import-dsc to treat a .dsc with a Dgit field like one without it.  "
 "The result is a fresh import, discarding the git history that the person who "
@@ -2081,26 +2200,41 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1216
+#: ../dgit.1:1302
+#, no-wrap
+msgid "B<--force-reusing-version>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1309
+msgid ""
+"Carry on even though this involves reusing a version number of a previous "
+"push or upload.  It is normally best to give different versions different "
+"numbers.  Some servers (including, usually, the Debian server)  will reject "
+"attempts to reuse or replace already-pushed versions."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1309
 #, no-wrap
 msgid "B<--force-uploading-binaries>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1221
+#: ../dgit.1:1314
 msgid ""
 "Carry on and upload binaries even though dgit thinks your distro does not "
 "permit that."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1221
+#: ../dgit.1:1314
 #, no-wrap
 msgid "B<--force-uploading-source-only>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1227
+#: ../dgit.1:1320
 msgid ""
 "Carry on and do a source-only upload, without any binaries, even though dgit "
 "thinks your distro does not permit that, or does not permit that in this "
@@ -2108,13 +2242,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1227
+#: ../dgit.1:1320
 #, no-wrap
 msgid "B<--force-unrepresentable>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1234
+#: ../dgit.1:1327
 msgid ""
 "Carry on even if dgit thinks that your git tree contains changes (relative "
 "to your .orig tarballs)  which dpkg-source is not able to represent.  Your "
@@ -2122,65 +2256,79 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1234
+#: ../dgit.1:1327
 #, no-wrap
 msgid "B<--force-changes-origs-exactly>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1239
+#: ../dgit.1:1332
 msgid ""
 "Use the set of .origs specified in your .changes, exactly, without regard to "
 "what is in the archive already.  The archive may well reject your upload."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1239
+#: ../dgit.1:1332
 #, no-wrap
 msgid "B<--force-unsupported-source-format>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1243
+#: ../dgit.1:1336
 msgid ""
 "Carry on despite dgit not understanding your source package format.  dgit "
 "will probably mishandle it."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1243
+#: ../dgit.1:1336
 #, no-wrap
 msgid "B<--force-dsc-changes-mismatch>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1247
+#: ../dgit.1:1340
 msgid ""
 "Do not check whether .dsc and .changes match.  The archive will probably "
 "reject your upload."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1247
+#: ../dgit.1:1340
 #, no-wrap
 msgid "B<--force-import-gitapply-absurd> | B<--force-import-gitapply-no-absurd>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1253
+#: ../dgit.1:1346
 msgid ""
 "Force on or off the use of the absurd git-apply emulation when running gbp "
 "pq import when importing a package from a .dsc.  See Debian bug #841867."
 msgstr ""
 
+#. type: TP
+#: ../dgit.1:1346
+#, no-wrap
+msgid "B<--for-push>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1352
+msgid ""
+"Override the dgit-distro.distro.readonly configuration setting, to specify "
+"that we have read/write access and should use the corresponding git and "
+"achieve access approach even if the operation is a read-only one."
+msgstr ""
+
 #. type: =head1
-#: ../dgit.1:1253 ../dgit-downstream-dsc.7.pod:150
+#: ../dgit.1:1352 ../dgit-downstream-dsc.7.pod:150
 #, no-wrap
 msgid "CONFIGURATION"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1259
+#: ../dgit.1:1358
 msgid ""
 "dgit can be configured via the git config system.  You may set keys with git-"
 "config (either in system-global or per-tree configuration), or provide B<-"
@@ -2188,31 +2336,31 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1261
+#: ../dgit.1:1360
 msgid "Settings likely to be useful for an end user include:"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1261
+#: ../dgit.1:1360
 #, no-wrap
 msgid "B<dgit.default.build-products-dir>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1267
+#: ../dgit.1:1366
 msgid ""
 "Specifies where to find the built files to be uploaded, when --build-"
 "products-dir is not specified.  The default is the parent directory (B<..>)."
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:1267 ../dgit-downstream-dsc.7.pod:286
+#: ../dgit.1:1366 ../dgit-downstream-dsc.7.pod:286
 #, no-wrap
 msgid "B<dgit-suite.>I<suite>B<.distro> I<distro>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1272
+#: ../dgit.1:1371
 msgid ""
 "Specifies the distro for a suite.  dgit keys off the suite name (which "
 "appears in changelogs etc.), and uses that to determine the distro which is "
@@ -2220,66 +2368,73 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1275
+#: ../dgit.1:1374
 msgid "I<suite> may be a glob pattern."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1275
+#: ../dgit.1:1374
 #, no-wrap
 msgid "B<dgit.default.distro>I< distro>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1278
+#: ../dgit.1:1377
 msgid "The default distro for an unknown suite."
 msgstr ""
 
+#. type: Plain text
+#: ../dgit.1:1381
+msgid ""
+"This is only used if no B</usr/share/distro-info/>I<somedistro>B<.csv> "
+"mentions the specified suite."
+msgstr ""
+
 #. type: TP
-#: ../dgit.1:1278
+#: ../dgit.1:1381
 #, no-wrap
 msgid "B<dgit.default.default-suite>I< suite>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1281
+#: ../dgit.1:1384
 msgid "The default suite (eg for clone)."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1281
+#: ../dgit.1:1384
 #, no-wrap
 msgid "B<dgit.default.>*"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1286
+#: ../dgit.1:1389
 msgid ""
 "for each B<dgit-distro.>I<distro>B<.>*, the default value used if there is "
 "no distro-specific setting."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1286
+#: ../dgit.1:1389
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.clean-mode>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1290
+#: ../dgit.1:1393
 msgid ""
 "One of the values for the command line --clean= option; used if --clean is "
 "not specified."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1290
+#: ../dgit.1:1393
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.clean-mode-newer>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1296
+#: ../dgit.1:1399
 msgid ""
 "Like .clean-mode, but ignored if the value is unknown to this version of "
 "dgit.  Setting both .clean-mode and .clean-mode-newer is useful to provide a "
@@ -2287,39 +2442,45 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1296
+#: ../dgit.1:1399
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.quilt-mode>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1300
+#: ../dgit.1:1403
 msgid ""
 "One of the values for the command line --quilt= option; used if --quilt is "
 "not specified."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1300
+#: ../dgit.1:1403
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.split-view>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1405
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.rm-old-changes>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1304
+#: ../dgit.1:1409
 msgid ""
 "Boolean, used if neither --rm-old-changes nor --no-rm-old-changes is "
 "specified.  The default is not to remove."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1304
+#: ../dgit.1:1409
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.readonly> B<auto>|B<a> | B<true>|B<t>|B<y>|B<1> | B<false>|B<f>|B<n>|B<0>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1311
+#: ../dgit.1:1416
 msgid ""
 "Whether you have push access to the distro.  For Debian, it is OK to use "
 "auto, which uses readonly mode if you are not pushing right now; but, "
@@ -2328,52 +2489,52 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1311
+#: ../dgit.1:1416
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.keyid>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1315
+#: ../dgit.1:1420
 msgid "See also B<-k>."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1315
+#: ../dgit.1:1420
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.mirror>I< url>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1317
+#: ../dgit.1:1422
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.username>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1320
+#: ../dgit.1:1425
 msgid "Not relevant for Debian."
 msgstr ""
 
 #. type: =item
-#: ../dgit.1:1320 ../dgit-downstream-dsc.7.pod:242
+#: ../dgit.1:1425 ../dgit-downstream-dsc.7.pod:242
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.upload-host>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1323
+#: ../dgit.1:1428
 msgid "Might be useful if you have an intermediate queue server."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1323
+#: ../dgit.1:1428
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.user-name>I< >B<dgit-distro.>I<distro>B<.user-email>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1328
+#: ../dgit.1:1433
 msgid ""
 "Values to configure for user.name and user.email in new git trees.  If not "
 "specified, the DEBFULLNAME and DEBEMAIL environment variables are used, "
@@ -2381,26 +2542,26 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1328
+#: ../dgit.1:1433
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.setup-useremail>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1332
+#: ../dgit.1:1437
 msgid ""
 "Whether to set user.name and user.email in new git trees.  True by default.  "
 "Ignored for dgit setup-useremail, which does it anyway."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1332
+#: ../dgit.1:1437
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.setup-mergechangelogs>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1337
+#: ../dgit.1:1442
 msgid ""
 "Whether to set up a merge driver which uses dpkg-mergechangelogs for debian/"
 "changelog.  True by default.  Ignored for dgit setup-mergechangelogs, which "
@@ -2408,13 +2569,13 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1337
+#: ../dgit.1:1442
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.setup-gitattributes>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1343
+#: ../dgit.1:1448
 msgid ""
 "Whether to configure .git/info/attributes to suppress checkin/checkout file "
 "content transformations in new git trees.  True by default.  Ignored for "
@@ -2422,24 +2583,24 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1343
+#: ../dgit.1:1448
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.cmd->I<cmd>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1349
+#: ../dgit.1:1454
 msgid "Program to use instead of I<cmd>.  Works like B<-->I<cmd>B<=>... ."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1349
+#: ../dgit.1:1454
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.opts->I<cmd>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1361
+#: ../dgit.1:1466
 msgid ""
 "Extra options to pass to I<cmd>.  Works like B<-->I<cmd>B<:>... .  To pass "
 "several options, configure multiple values in git config (with git config --"
@@ -2449,13 +2610,13 @@ msgid ""
 msgstr ""
 
 #. type: SH
-#: ../dgit.1:1361
+#: ../dgit.1:1466
 #, no-wrap
 msgid "ACCESS CONFIGURATION"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1366
+#: ../dgit.1:1471
 msgid ""
 "There are many other settings which specify how a particular distro's "
 "services (archive and git) are provided.  These should not normally be "
@@ -2464,204 +2625,204 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1366
+#: ../dgit.1:1471
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.nominal-distro>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1369
+#: ../dgit.1:1474
 msgid "Shown in git tags, Dgit fields, and so on."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1369
+#: ../dgit.1:1474
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.alias-canon>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1372
+#: ../dgit.1:1477
 msgid "Used for all access configuration lookup."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1372
+#: ../dgit.1:1477
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B</push.>*"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1378
+#: ../dgit.1:1483
 msgid ""
 "If set, overrides corresponding non B</push> config when B<readonly=false>, "
 "or when pushing and B<readonly=auto>."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1378
+#: ../dgit.1:1483
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-url>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1380
+#: ../dgit.1:1485
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-url>[B<-suffix>]"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1382
+#: ../dgit.1:1487
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-proto>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1384
+#: ../dgit.1:1489
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-path>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1386
+#: ../dgit.1:1491
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-check> B<true>|B<false>|B<url>|B<ssh-cmd>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1388
+#: ../dgit.1:1493
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-check-suffix>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1390
+#: ../dgit.1:1495
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.diverts.divert> B<new-distro>|B</>I<distro-suffix>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1392
+#: ../dgit.1:1497
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.git-create>I< >B<ssh-cmd>I<|>B<true>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1394
+#: ../dgit.1:1499
 #, no-wrap
-msgid "B<dgit-distro.>I<distro>B<.archive-query> B<ftpmasterapi:> | B<madison:>I<distro> | B<dummycat:>I</path>  | B<sshpsql:>I<user>B<@>I<host>B<:>I<dbname>"
+msgid "B<dgit-distro.>I<distro>B<.archive-query> B<ftpmasterapi:> | B<madison:>I<distro> | B<dummycat:>I</path>  | B<sshpsql:>I<user>B<@>I<host>B<:>I<dbname>B< >|B< aptget:>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1396
+#: ../dgit.1:1501
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.archive-query->(B<url>|B<tls-key>|B<curl-ca-args>)"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1398
+#: ../dgit.1:1503
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.madison-distro>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1400
+#: ../dgit.1:1505
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.archive-query-default-component>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1402
+#: ../dgit.1:1507
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.dgit-tag-format>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1404
+#: ../dgit.1:1509
 #, no-wrap
-msgid "B<dgit-distro.>I<distro>B<.dep14tag> B<want>|B<no>|B<always>"
+msgid "B<dgit-distro.>I<distro>B<.dep14tag> B<want>|B<no>[|B<always>]"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1406
+#: ../dgit.1:1511
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.ssh>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1408
+#: ../dgit.1:1513
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.sshpsql-dbname>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1410
+#: ../dgit.1:1515
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.>(B<git>|B<sshpsql>)B<->(B<user>|B<host>|B<user-force>)"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1412
+#: ../dgit.1:1517
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.backports-quirk>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1414
+#: ../dgit.1:1519
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.rewrite-map-enable>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1416
+#: ../dgit.1:1521
 #, no-wrap
 msgid "B<dgit-distro.>I<distro>B<.source-only-uploads> B<ok>|B<always>|B<never>|B<not-wholly-new>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1418
+#: ../dgit.1:1523
 #, no-wrap
 msgid "B<dgit.default.old-dsc-distro>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1420
+#: ../dgit.1:1525
 #, no-wrap
 msgid "B<dgit.dsc-url-proto-ok.>I<protocol>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1422
+#: ../dgit.1:1527
 #, no-wrap
 msgid "B<dgit.dsc-url-proto-ok.bad-syntax>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1424
+#: ../dgit.1:1529
 #, no-wrap
 msgid "B<dgit.default.dsc-url-proto-ok>"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1426
+#: ../dgit.1:1531
 #, no-wrap
 msgid "B<dgit.vcs-git.suites> I<suite>[B<;>...]"
 msgstr ""
 
 #. type: SH
-#: ../dgit.1:1428
+#: ../dgit.1:1533
 #, no-wrap
 msgid "ENVIRONMENT VARIABLES"
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1429
+#: ../dgit.1:1534
 #, no-wrap
 msgid "B<DGIT_SSH>, B<GIT_SSH>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1438
+#: ../dgit.1:1543
 msgid ""
 "specify an alternative default program (and perhaps arguments) to use "
 "instead of ssh.  DGIT_SSH is consulted first and may contain arguments; if "
@@ -2671,26 +2832,26 @@ msgid ""
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1438
+#: ../dgit.1:1543
 #, no-wrap
 msgid "B<DEBEMAIL>, B<DEBFULLNAME>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1442
+#: ../dgit.1:1547
 msgid ""
 "Default git user.email and user.name for new trees.  See B<dgit setup-new-"
 "tree>."
 msgstr ""
 
 #. type: TP
-#: ../dgit.1:1442
+#: ../dgit.1:1547
 #, no-wrap
-msgid "B<gpg>, B<dpkg->..., B<debsign>, B<git>, B<curl>, B<dput>, B<LWP::UserAgent>"
+msgid "B<gpg>, B<dpkg->..., B<debsign>, B<git>, [B<lib>]B<curl>, B<dput>"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1447
+#: ../dgit.1:1552
 msgid ""
 "and other subprograms and modules used by dgit are affected by various "
 "environment variables.  Consult the documentation for those programs for "
@@ -2698,13 +2859,13 @@ msgid ""
 msgstr ""
 
 #. type: SH
-#: ../dgit.1:1447
+#: ../dgit.1:1552
 #, no-wrap
 msgid "BUGS"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1454
+#: ../dgit.1:1559
 msgid ""
 "There should be a `dgit rebase-prep' command or some such to turn a fast-"
 "forwarding branch containing pseudo-merges back into a rebasing patch "
@@ -2712,7 +2873,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1460
+#: ../dgit.1:1565
 msgid ""
 "If the dgit push fails halfway through, it is not necessarily restartable "
 "and idempotent.  It would be good to check that the proposed signing key is "
@@ -2720,7 +2881,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1465
+#: ../dgit.1:1570
 msgid ""
 "dgit's build functions, and dgit push, may make changes to your current "
 "HEAD.  Sadly this is necessary for packages in the `3.0 (quilt)' source "
@@ -2729,7 +2890,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1470
+#: ../dgit.1:1575
 msgid ""
 "--dry-run does not always work properly, as not doing some of the git "
 "fetches may result in subsequent actions being different.  Doing a non-dry-"
@@ -2737,24 +2898,25 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1470 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1575 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:747 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:619
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:524 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:782 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:140
+#: ../git-debrebase.1.pod:634 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:261
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1479
+#: ../dgit.1:1584
 msgid ""
 "B<dgit>(7), B<dgit-*>(7), B<curl>(1), B<dput>(1), B<debsign>(1), B<git-"
 "config>(1), B<git-buildpackage>(1), B<dpkg-buildpackage>(1),"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.1:1480
+#: ../dgit.1:1585
 msgid "https://browse.dgit.debian.org/"
 msgstr ""
index 1329e77680095adb1cacc334be02857d2e041d3c..f41a2b8eab52dd0a7c05597aba24c56be88ef471 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-03-01 16:59+0000\n"
+"POT-Creation-Date: 2019-07-21 01:37+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,18 +33,20 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1470 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1549 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:747 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:619
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:521 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:778 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:134
+#: ../git-debrebase.1.pod:619 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:223
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
@@ -642,7 +644,7 @@ msgstr ""
 #. type: SH
 #: ../dgit.7:396
 #, no-wrap
-msgid "SPLIT VIEW QUILT MODE"
+msgid "SPLIT VIEW AND SPLITTING QUILT MODES"
 msgstr ""
 
 #. type: Plain text
@@ -656,51 +658,61 @@ msgstr ""
 #. type: Plain text
 #: ../dgit.7:410
 msgid ""
-"When a split view mode is engaged dgit build commands and dgit push will, on "
-"each invocation, convert the user's HEAD into the dgit view, so that it can "
-"be built and/or uploaded."
+"When a splitting quilt mode is selected dgit build commands and dgit push "
+"will, on each invocation, convert the user's HEAD into the dgit view, so "
+"that it can be built and/or uploaded."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:417
+#: ../dgit.7:416
 msgid ""
-"dgit push in split view mode will push the dgit view to the dgit git "
-"server.  The dgit view is always a descendant of the maintainer view.  dgit "
-"push will also make a maintainer view tag according to DEP-14 and push that "
-"to the dgit git server."
+"Split view mode can also be enabled explicitly with the --split-view command "
+"line option and the .split-view access configuration key."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:425
+#: ../dgit.7:429
 msgid ""
-"Split view mode must be enabled explicitly (by the use of the applicable "
-"command line options, subcommands, or configuration).  This is because it is "
-"not possible to reliably tell (for example)  whether a git tree for a dpkg-"
-"source `3.0 (quilt)' package is a patches-applied or patches-unapplied tree."
+"When split view is in operation, regardless of the quilt mode, any dgit-"
+"generated pseudomerges and any quilt fixup commits will appear only in the "
+"dgit view.  dgit push will push the dgit view to the dgit git server.  The "
+"dgit view is always a descendant of the maintainer view.  dgit push will "
+"also make a maintainer view tag according to DEP-14 and push that to the "
+"dgit git server."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:429
+#: ../dgit.7:437
+msgid ""
+"Splitting quilt modes must be enabled explicitly (by the use of the "
+"applicable command line options, subcommands, or configuration).  This is "
+"because it is not possible to reliably tell (for example)  whether a git "
+"tree for a dpkg-source `3.0 (quilt)' package is a patches-applied or patches-"
+"unapplied tree."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:441
 msgid ""
 "Split view conversions are cached in the ref dgit-intern/quilt-cache.  This "
 "should not be manipulated directly."
 msgstr ""
 
 #. type: SH
-#: ../dgit.7:429
+#: ../dgit.7:441
 #, no-wrap
 msgid "FILES IN THE ORIG TARBALL BUT NOT IN GIT - AUTOTOOLS ETC."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:432
+#: ../dgit.7:444
 msgid ""
 "This section is mainly of interest to maintainers who want to use dgit with "
 "their existing git history for the Debian package."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:438
+#: ../dgit.7:450
 msgid ""
 "Some developers like to have an extra-clean git tree which lacks files which "
 "are normally found in source tarballs and therefore in Debian source "
@@ -710,7 +722,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:443
+#: ../dgit.7:455
 msgid ""
 "dgit requires that the source package unpacks to exactly the same files as "
 "are in the git commit on which dgit push operates.  So if you just try to "
@@ -718,18 +730,18 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:445
+#: ../dgit.7:457
 msgid "As the maintainer you therefore have the following options:"
 msgstr ""
 
 #. type: TP
-#: ../dgit.7:445 ../dgit.7:456 ../dgit.7:505 ../dgit.7:513
+#: ../dgit.7:457 ../dgit.7:468 ../dgit.7:517 ../dgit.7:525
 #, no-wrap
 msgid "\\(bu"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:456
+#: ../dgit.7:468
 msgid ""
 "Delete the files from your git branches, and your Debian source packages, "
 "and carry the deletion as a delta from upstream.  (With `3.0 (quilt)' this "
@@ -740,7 +752,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:462
+#: ../dgit.7:474
 msgid ""
 "Persuade upstream that the source code in their git history and the source "
 "they ship as tarballs should be identical.  Of course simply removing the "
@@ -748,7 +760,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:468
+#: ../dgit.7:480
 msgid ""
 "One answer is to commit the (maybe autogenerated)  files, perhaps with some "
 "simple automation to deal with conflicts and spurious changes.  This has the "
@@ -757,7 +769,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:473
+#: ../dgit.7:485
 msgid ""
 "Of course it may also be that the differences are due to build system bugs, "
 "which cause unintended files to end up in the source package.  dgit will "
@@ -766,13 +778,13 @@ msgid ""
 msgstr ""
 
 #. type: SH
-#: ../dgit.7:474
+#: ../dgit.7:486
 #, no-wrap
 msgid "FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - DOCS, BINARIES ETC."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:478
+#: ../dgit.7:490
 msgid ""
 "Some upstream tarballs contain build artifacts which upstream expects some "
 "users not to want to rebuild (or indeed to find hard to rebuild), but which "
@@ -780,7 +792,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:488
+#: ../dgit.7:500
 msgid ""
 "Examples sometimes include crossbuild firmware binaries and documentation.  "
 "To avoid problems when building updated source packages (in particular, to "
@@ -790,7 +802,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:496
+#: ../dgit.7:508
 msgid ""
 "dpkg-source does not (with any of the commonly used source formats)  "
 "represent deletion of binaries (outside debian/) present in upstream.  Thus "
@@ -800,7 +812,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:502
+#: ../dgit.7:514
 msgid ""
 "However, git does always properly record file deletion.  Since dgit's "
 "principle is that the dgit git tree is the same of dpkg-source -x, that "
@@ -808,14 +820,14 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:505
+#: ../dgit.7:517
 msgid ""
 "For the non-maintainer, this can be observed in the following suboptimal "
 "occurrences:"
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:513
+#: ../dgit.7:525
 msgid ""
 "The package clean target often deletes these files, making the git tree "
 "dirty trying to build the source package, etc.  This can be fixed by using "
@@ -824,7 +836,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:520
+#: ../dgit.7:532
 msgid ""
 "The package build modifies these files, so that builds make the git tree "
 "dirty.  This can be worked around by using `git reset --hard' after each "
@@ -832,7 +844,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:530
+#: ../dgit.7:542
 msgid ""
 "From the maintainer's point of view, the main consequence is that to make a "
 "dgit-compatible git branch it is necessary to commit these files to git.  "
@@ -843,13 +855,13 @@ msgid ""
 msgstr ""
 
 #. type: SH
-#: ../dgit.7:530
+#: ../dgit.7:542
 #, no-wrap
 msgid "PROBLEMS WITH PACKAGE CLEAN TARGETS ETC."
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:538
+#: ../dgit.7:550
 msgid ""
 "A related problem is other unexpected behaviour by a package's B<clean> "
 "target.  If a package's rules modify files which are distributed in the "
@@ -858,7 +870,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:546
+#: ../dgit.7:558
 msgid ""
 "Again, the solution is to use B<dgit -wg> aka B<--clean=git>, which "
 "instructs dgit to use git clean instead of the package's build target, along "
@@ -866,7 +878,7 @@ msgid ""
 msgstr ""
 
 #. type: Plain text
-#: ../dgit.7:550
+#: ../dgit.7:562
 msgid ""
 "This is 100% reliable, but has the downside that if you forget to git add or "
 "to commit, and then use B<dgit -wg> or B<git reset --hard>, your changes may "
index 06970825ed0b549ac8f078a91aed458f5de38965..46aa9f4cbcadb25a36647917806e12fdf5be6e0c 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-03-01 16:59+0000\n"
+"POT-Creation-Date: 2020-02-02 16:50+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,39 +21,34 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:496 ../git-debrebase.1.pod:462
+#: ../dgit.1:496 ../git-debrebase.1.pod:477
 #, no-wrap
 msgid "OPTIONS"
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1470 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1575 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:747 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:619
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:524 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:782 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:140
+#: ../git-debrebase.1.pod:634 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:261
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
 
-#. type: =head1
-#: ../dgit-user.7.pod:5 ../dgit-maint-native.7.pod:5
-#: ../dgit-maint-merge.7.pod:5 ../dgit-maint-gbp.7.pod:5
-#: ../dgit-maint-debrebase.7.pod:5 ../dgit-downstream-dsc.7.pod:5
-#: ../git-debrebase.1.pod:10 ../git-debrebase.5.pod:5
-msgid "INTRODUCTION"
-msgstr ""
-
 #. type: textblock
 #: ../git-debrebase.1.pod:3
-msgid "git-debrebase - delta queue rebase tool for Debian packaging"
+msgid ""
+"git-debrebase - tool to maintain series of Debian changes to upstream source"
 msgstr ""
 
 #. type: =head1
@@ -70,59 +65,95 @@ msgid ""
 "\n"
 msgstr ""
 
+#. type: =head1
+#: ../git-debrebase.1.pod:10
+msgid "QUICK REFERENCE"
+msgstr ""
+
 #. type: textblock
-#: ../git-debrebase.1.pod:12 ../git-debrebase.5.pod:7
+#: ../git-debrebase.1.pod:12
+msgid "These are most of the commands you will regularly need:"
+msgstr ""
+
+#. type: verbatim
+#: ../git-debrebase.1.pod:14
+#, no-wrap
 msgid ""
-"git-debrebase is a tool for representing in git, and manpulating, Debian "
-"packages based on upstream source code."
+" git debrebase -i                           # edit the patch queue\n"
+" git debrebase conclude && git push         # push to eg salsa\n"
+" git debrebase conclude && dgit push-source # source-only upload\n"
+" git debrebase [-i] new-upstream 1.2.3-1    # uses tag, eg \"v1.2.3\"\n"
+" dpkg-buildpackage -uc -b                   # get test debs, at any time\n"
+"\n"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:16
+#: ../git-debrebase.1.pod:20
 msgid ""
-"This is the command line reference.  Please read the tutorial L<dgit-maint-"
-"debrebase(7)>.  For background, theory of operation, and definitions see "
+"To add patches, or edit the packaging, just make git commits.  Ignore "
+"anything that may appear in debian/patches.  Avoid using \"git pull\" and "
+"\"git merge\" without \"--ff-only\"."
+msgstr ""
+
+#. type: textblock
+#: ../git-debrebase.1.pod:24
+msgid ""
+"git-debrebase has a special branch format, so see \"CONVERTING AN EXISTING "
+"PACKAGE\" in L<dgit-maint-debrebase(7)>."
+msgstr ""
+
+#. type: =head1
+#: ../git-debrebase.1.pod:27
+msgid "GUIDE TO DOCUMENTATION"
+msgstr ""
+
+#. type: textblock
+#: ../git-debrebase.1.pod:29
+msgid ""
+"This is the command line reference.  There is also a detailed workflow "
+"tutorial at L<dgit-maint-debrebase(7)> (on which the above \"QUICK REFERENCE"
+"\" is based).  For background, theory of operation, and definitions see "
 "L<git-debrebase(5)>."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:22
+#: ../git-debrebase.1.pod:36
 msgid ""
 "You should read this manpage in conjunction with L<git-debrebase(5)/"
 "TERMINOLOGY>, which defines many important terms used here."
 msgstr ""
 
 #. type: =head1
-#: ../git-debrebase.1.pod:26
+#: ../git-debrebase.1.pod:40
 msgid "PRINCIPAL OPERATIONS"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:30
+#: ../git-debrebase.1.pod:44
 msgid "git-debrebase [-- <git-rebase options...>]"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:32
+#: ../git-debrebase.1.pod:46
 msgid "git-debrebase [-i <further git-rebase options...>]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:34
+#: ../git-debrebase.1.pod:48
 msgid ""
 "Unstitches and launders the branch.  (See L</UNSTITCHING AND LAUNDERING> "
 "below.)"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:37
+#: ../git-debrebase.1.pod:51
 msgid ""
 "Then, if any git-rebase options were supplied, edits the Debian delta queue, "
 "using git-rebase, by running"
 msgstr ""
 
 #. type: verbatim
-#: ../git-debrebase.1.pod:41
+#: ../git-debrebase.1.pod:55
 #, no-wrap
 msgid ""
 "    git rebase <git-rebase options> <breakwater-tip>\n"
@@ -130,7 +161,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:43
+#: ../git-debrebase.1.pod:57
 msgid ""
 "Do not pass a base branch argument: git-debrebase will supply that.  Do not "
 "use --onto, or --fork-point.  Useful git-rebase options include -i and --"
@@ -138,7 +169,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:48
+#: ../git-debrebase.1.pod:62
 msgid ""
 "If git-rebase stops for any reason, you may git-rebase --abort, --continue, "
 "or --skip, as usual.  If you abort the git-rebase, the branch will still "
@@ -146,14 +177,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:54
+#: ../git-debrebase.1.pod:68
 msgid ""
 "The options for git-rebase must either start with C<-i>, or be prececded by "
 "C<-->, to distinguish them from options for git-debrebase."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:58
+#: ../git-debrebase.1.pod:72
 msgid ""
 "It is hazardous to use plain git-rebase on a git-debrebase branch, because "
 "git-rebase has a tendency to start the rebase too far back in history, and "
@@ -161,19 +192,19 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:64
+#: ../git-debrebase.1.pod:78
 msgid "git-debrebase status"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:66
+#: ../git-debrebase.1.pod:80
 msgid ""
 "Analyses the current branch, both in terms of its contents, and the refs "
 "which are relevant to git-debrebase, and prints a human-readable summary."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:71
+#: ../git-debrebase.1.pod:85
 msgid ""
 "Please do not attempt to parse the output; it may be reformatted or "
 "reorganised in the future.  Instead, use one of the L<UNDERLYING AND "
@@ -181,107 +212,107 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:77
+#: ../git-debrebase.1.pod:91
 msgid "git-debrebase conclude"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:79
+#: ../git-debrebase.1.pod:93
 msgid ""
 "Finishes a git-debrebase session, tidying up the branch and making it fast "
 "forward again."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:82
+#: ../git-debrebase.1.pod:96
 msgid ""
 "Specifically: if the branch is unstitched, launders and restitches it, "
 "making a new pseudomerge.  Otherwise, it is an error, unless --noop-ok."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:88
+#: ../git-debrebase.1.pod:102
 msgid "git-debrebase quick"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:90
+#: ../git-debrebase.1.pod:104
 msgid ""
 "Unconditionally launders and restitches the branch, consuming any ffq-prev "
 "and making a new pseudomerge."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:94
+#: ../git-debrebase.1.pod:108
 msgid "If the branch is already laundered and stitched, does nothing."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:96
+#: ../git-debrebase.1.pod:110
 msgid "git-debrebase prepush [--prose=<for commit message>]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:98
+#: ../git-debrebase.1.pod:112
 msgid "If the branch is unstitched, stitches it, consuming ffq-prev."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:102
+#: ../git-debrebase.1.pod:116
 msgid ""
 "This is a good command to run before pushing to a git server.  You should "
 "consider using B<conclude> instead, because that launders the branch too."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:106
+#: ../git-debrebase.1.pod:120
 msgid "git-debrebase stitch [--prose=<for commit message>]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:108
+#: ../git-debrebase.1.pod:122
 msgid "Stitches the branch, consuming ffq-prev."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:111
+#: ../git-debrebase.1.pod:125
 msgid "If there is no ffq-prev, it is an error, unless --noop-ok."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:113
+#: ../git-debrebase.1.pod:127
 msgid "You should consider using B<prepush> or B<conclude> instead."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:115
+#: ../git-debrebase.1.pod:129
 msgid "git-debrebase scrap"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:117
+#: ../git-debrebase.1.pod:131
 msgid ""
 "Throws away all the work since the branch was last stitched.  This is done "
-"by rewinding you to ffq-prev."
+"by resetting you to ffq-prev and discarding all working tree changes."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:120
+#: ../git-debrebase.1.pod:135
 msgid "If you are in the middle of a git-rebase, will abort that too."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:122
+#: ../git-debrebase.1.pod:137
 msgid "git-debrebase new-upstream <new-version> [<upstream-details>...]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:124
+#: ../git-debrebase.1.pod:139
 msgid "Rebases the delta queue onto a new upstream version.  In detail:"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:127
+#: ../git-debrebase.1.pod:142
 msgid ""
 "Firstly, checks that the proposed rebase seems to make sense: It is a snag "
 "unless the new upstream(s)  are fast forward from the previous upstream(s)  "
@@ -291,12 +322,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:135
+#: ../git-debrebase.1.pod:150
 msgid "If all seems well, unstitches and launders the branch."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:137
+#: ../git-debrebase.1.pod:152
 msgid ""
 "Then, generates (in a private working area)  a new anchor merge commit, on "
 "top of the breakwater tip, and on top of that a commit to update the version "
@@ -304,26 +335,26 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:145
+#: ../git-debrebase.1.pod:160
 msgid "Finally, starts a git-rebase of the delta queue onto these new commits."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:149
+#: ../git-debrebase.1.pod:164
 msgid ""
 "That git-rebase may complete successfully, or it may require your "
 "assistance, just like a normal git-rebase."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:153
+#: ../git-debrebase.1.pod:168
 msgid ""
 "If you git-rebase --abort, the whole new upstream operation is aborted, "
 "except for the laundering."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:157
+#: ../git-debrebase.1.pod:172
 msgid ""
 "<new-version> may be a whole new Debian version, including revision, or just "
 "the upstream part, in which case -1 will be appended to make the new Debian "
@@ -331,17 +362,17 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:163
+#: ../git-debrebase.1.pod:178
 msgid "The <upstream-details> are, optionally, in order:"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:167
+#: ../git-debrebase.1.pod:182
 msgid "<upstream-commit-ish>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:169
+#: ../git-debrebase.1.pod:184
 msgid ""
 "The new upstream branch (or commit-ish).  The default is to look for one of "
 "these tags, in this order: U vU upstream/U; where U is the new upstream "
@@ -349,7 +380,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:175
+#: ../git-debrebase.1.pod:190
 msgid ""
 "It is a snag if the upstream contains a debian/ directory; if forced to "
 "proceed, git-debrebase will disregard the upstream's debian/ and take (only) "
@@ -357,17 +388,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:180
+#: ../git-debrebase.1.pod:195
 msgid "<piece-name> <piece-upstream-commit-ish>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:182
+#: ../git-debrebase.1.pod:197
 msgid "Specifies that this is a multi-piece upstream.  May be repeated."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:185
+#: ../git-debrebase.1.pod:200
 msgid ""
 "When such a pair is specified, git-debrebase will first combine the pieces "
 "of the upstream together, and then use the result as the combined new "
@@ -375,7 +406,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:190
+#: ../git-debrebase.1.pod:205
 msgid ""
 "For each <piece-name>, the tree of the <piece-upstream-commit-ish> becomes "
 "the subdirectory <piece-name> in the combined new upstream (supplanting any "
@@ -383,14 +414,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:197
+#: ../git-debrebase.1.pod:212
 msgid ""
 "<piece-name> has a restricted syntax: it may contain only ASCII "
 "alphanumerics and hyphens."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:200
+#: ../git-debrebase.1.pod:215
 msgid ""
 "The combined upstream is itself recorded as a commit, with each of the "
 "upstream pieces' commits as parents.  The combined commit contains an "
@@ -399,24 +430,24 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:206
+#: ../git-debrebase.1.pod:221
 msgid "<git-rebase options>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:208
+#: ../git-debrebase.1.pod:223
 msgid "These will be passed to git rebase."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:210
+#: ../git-debrebase.1.pod:225
 msgid ""
 "If the upstream rebase is troublesome, -i may be helpful.  As with plain git-"
 "debrebase, do not specify a base, or --onto, or --fork-point."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:216
+#: ../git-debrebase.1.pod:231
 msgid ""
 "If you are planning to generate a .dsc, you will also need to have, or "
 "generate, actual orig tarball(s), which must be identical to the rev-"
@@ -427,19 +458,19 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:227
+#: ../git-debrebase.1.pod:242
 msgid "git-debrebase make-patches [--quiet-would-amend]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:229
+#: ../git-debrebase.1.pod:244
 msgid ""
 "Generate patches in debian/patches/ representing the changes made to "
 "upstream files."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:232
+#: ../git-debrebase.1.pod:247
 msgid ""
 "It is not normally necessary to run this command explicitly.  When uploading "
 "to Debian, dgit and git-debrebase will cooperate to regenerate patches as "
@@ -447,7 +478,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:239
+#: ../git-debrebase.1.pod:254
 msgid ""
 "Normally git-debrebase make-patches will require a laundered branch.  (A "
 "laundered branch does not contain any patches.)  But if there are already "
@@ -457,7 +488,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:248
+#: ../git-debrebase.1.pod:263
 msgid ""
 "If the patches implied by the current branch are not a simple superset of "
 "those already in debian/patches, make-patches will fail with exit status 7, "
@@ -467,53 +498,53 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:257
+#: ../git-debrebase.1.pod:272
 msgid "git-debrebase convert-from-unapplied [<upstream-commit-ish>]"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:259
+#: ../git-debrebase.1.pod:274
 msgid "git-debrebase convert-from-gbp [<upstream-commit-ish>]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:261
+#: ../git-debrebase.1.pod:276
 msgid "Converts any of the following into a git-debrebase interchange branch:"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:267
+#: ../git-debrebase.1.pod:282
 msgid "a gbp patches-unapplied branch (but not a gbp pq patch-queue branch)"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:271
+#: ../git-debrebase.1.pod:286
 msgid ""
 "a patches-unapplied git packaging branch containing debian/patches, as used "
 "with quilt"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:276
+#: ../git-debrebase.1.pod:291
 msgid ""
 "a git branch for a package which has no Debian delta - ie where upstream "
 "files are have not been modified in Debian, so there are no patches"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:282
+#: ../git-debrebase.1.pod:297
 msgid "(These two commands operate identically and are simply aliases.)"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:284
+#: ../git-debrebase.1.pod:299
 msgid ""
 "The conversion is done by generating a new anchor merge, converting any "
 "quilt patches as a delta queue, and dropping the patches from the tree."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:288
+#: ../git-debrebase.1.pod:303
 msgid ""
 "The upstream commit-ish should correspond to the upstream branch or tag, if "
 "there is one.  It is a snag if it is not an ancestor of HEAD, or if the "
@@ -523,7 +554,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:296
+#: ../git-debrebase.1.pod:311
 msgid ""
 "It is also a snag if the specified upstream has a debian/ subdirectory.  "
 "This check exists to detect certain likely user errors, but if this "
@@ -531,7 +562,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:302
+#: ../git-debrebase.1.pod:317
 msgid ""
 "git-debrebase will try to look for the dgit archive view of the most recent "
 "release, and if it finds it will make a pseduomerge so that your new git-"
@@ -539,14 +570,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:307
+#: ../git-debrebase.1.pod:322
 msgid ""
 "The result is a well-formed git-debrebase interchange branch.  The result is "
 "also fast-forward from the original branch."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:310
+#: ../git-debrebase.1.pod:325
 msgid ""
 "It is a snag if the new branch looks like it will have diverged, just as for "
 "a laundering/unstitching call to git-debrebase; See L</Establish the current "
@@ -554,7 +585,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:314
+#: ../git-debrebase.1.pod:329
 msgid ""
 "Note that it is dangerous not to know whether you are dealing with a (gbp) "
 "patches-unapplied branch containing quilt patches, or a git-debrebase "
@@ -563,39 +594,39 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../git-debrebase.1.pod:323
+#: ../git-debrebase.1.pod:338
 msgid "UNDERLYING AND SUPPLEMENTARY OPERATIONS"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:327
+#: ../git-debrebase.1.pod:342
 msgid "git-debrebase breakwater"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:329
+#: ../git-debrebase.1.pod:344
 msgid ""
 "Prints the breakwater tip commitid.  If your HEAD branch is not fully "
 "laundered, prints the tip of the so-far-laundered breakwater."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:333
+#: ../git-debrebase.1.pod:348
 msgid "git-debrebase anchor"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:335
+#: ../git-debrebase.1.pod:350
 msgid "Prints the breakwater anchor commitid."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:337
+#: ../git-debrebase.1.pod:352
 msgid "git-debrebase analyse"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:339
+#: ../git-debrebase.1.pod:354
 msgid ""
 "Walks the history of the current branch, most recent commit first, back "
 "until the most recent anchor, printing the commit object id, and commit type "
@@ -603,31 +634,31 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:347
+#: ../git-debrebase.1.pod:362
 msgid "git-debrebase record-ffq-prev"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:349
+#: ../git-debrebase.1.pod:364
 msgid ""
 "Establishes the current branch's ffq-prev, as discussed in L</UNSTITCHING "
 "AND LAUNDERING>, but does not launder the branch or move HEAD."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:353
+#: ../git-debrebase.1.pod:368
 msgid ""
 "It is an error if the ffq-prev could not be recorded.  It is also an error "
 "if an ffq-prev has already been recorded, unless --noop-ok."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:357
+#: ../git-debrebase.1.pod:372
 msgid "git-debrebase launder-v0"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:359
+#: ../git-debrebase.1.pod:374
 msgid ""
 "Launders the branch without recording anything in ffq-prev.  Then prints "
 "some information about the current branch.  Do not use this operation; it "
@@ -635,12 +666,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:364
+#: ../git-debrebase.1.pod:379
 msgid "git-debrebase convert-to-gbp"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:366
+#: ../git-debrebase.1.pod:381
 msgid ""
 "Converts a laundered branch into a gbp patches-unapplied branch containing "
 "quilt patches.  The result is not fast forward from the interchange branch, "
@@ -648,7 +679,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:371
+#: ../git-debrebase.1.pod:386
 msgid ""
 "This is provided mostly for the test suite and for unusual situations.  It "
 "should only be used with care and with a proper understanding of the "
@@ -656,19 +687,19 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:376
+#: ../git-debrebase.1.pod:391
 msgid ""
 "Be sure to not accidentally treat the result as a git-debrebase branch, or "
 "you will drop all the patches!"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:380
+#: ../git-debrebase.1.pod:395
 msgid "git-debrebase convert-from-dgit-view [<convert-options>] [upstream]"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:382
+#: ../git-debrebase.1.pod:397
 msgid ""
 "Converts any dgit-compatible git branch corresponding to a (possibly "
 "hypothetical) 3.0 quilt dsc source package into a git-debrebase-compatible "
@@ -676,7 +707,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:386
+#: ../git-debrebase.1.pod:401
 msgid ""
 "This operation should not be used if the branch is already in git-debrebase "
 "form.  Normally git-debrebase will refuse to continue in this case (or "
@@ -684,7 +715,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:391
+#: ../git-debrebase.1.pod:406
 msgid ""
 "Some representation of the original upstream source code will be needed.  If "
 "I<upstream> is supplied, that must be a suitable upstream commit.  By "
@@ -693,7 +724,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:397
+#: ../git-debrebase.1.pod:412
 msgid ""
 "The upstream source must be exactly right and all the patches in debian/"
 "patches must be up to date.  Applying the patches from debian/patches to the "
@@ -701,7 +732,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:402
+#: ../git-debrebase.1.pod:417
 msgid ""
 "The output is laundered and stitched.  The resulting history is not "
 "particularly pretty, especially if orig tarball(s) were imported to produce "
@@ -709,31 +740,31 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:407
+#: ../git-debrebase.1.pod:422
 msgid ""
 "The available convert-options are as follows.  (These must come after "
 "convert-from-dgit-view.)"
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:412
+#: ../git-debrebase.1.pod:427
 msgid "--[no-]diagnose"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:414
+#: ../git-debrebase.1.pod:429
 msgid ""
 "Print additional error messages to help diagnose failure to find an "
 "appropriate upstream.  --no-diagnose is the default."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:418
+#: ../git-debrebase.1.pod:433
 msgid "--build-products-dir"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:420
+#: ../git-debrebase.1.pod:435
 msgid ""
 "Directory to look in for orig tarballs.  The default is the git config "
 "option dgit.default.build-products-dir or failing that, C<..>.  Passed on to "
@@ -741,35 +772,35 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:426
+#: ../git-debrebase.1.pod:441
 msgid "--[no-]origs"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:428
+#: ../git-debrebase.1.pod:443
 msgid ""
 "Whether to try to look for or use any orig tarballs.  --origs is the default."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:431
+#: ../git-debrebase.1.pod:446
 msgid "--[no-]tags"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:433
+#: ../git-debrebase.1.pod:448
 msgid ""
 "Whether to try to look for or use any upstream git tags.  --tags is the "
 "default."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:436
+#: ../git-debrebase.1.pod:451
 msgid "--always-convert-anyway"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:438
+#: ../git-debrebase.1.pod:453
 msgid ""
 "Perform the conversion operation, producing unpleasant extra history, even "
 "if the branch seems to be in git-debrebase form already.  This should not be "
@@ -777,12 +808,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:446
+#: ../git-debrebase.1.pod:461
 msgid "git-debrebase forget-was-ever-debrebase"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:448
+#: ../git-debrebase.1.pod:463
 msgid ""
 "Deletes the ffq-prev and debrebase-last refs associated with this branch, "
 "that git-debrebase and dgit use to determine whether this branch is managed "
@@ -790,19 +821,19 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:454
+#: ../git-debrebase.1.pod:469
 msgid ""
 "This can be useful if you were just playing with git-debrebase, and have "
 "used git-reset --hard to go back to a commit before your experiments."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:458
+#: ../git-debrebase.1.pod:473
 msgid "Do not use this if you expect to run git-debrebase on the branch again."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:464
+#: ../git-debrebase.1.pod:479
 msgid ""
 "This section documents the general options to git-debrebase (ie, the ones "
 "which immediately follow git-debrebase or git debrebase on the command "
@@ -811,78 +842,78 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:476
+#: ../git-debrebase.1.pod:491
 msgid "-f<snag-id>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:478
+#: ../git-debrebase.1.pod:493
 msgid "Turns snag(s) with id <snag-id> into warnings."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:480
+#: ../git-debrebase.1.pod:495
 msgid ""
 "Some troublesome things which git-debrebase encounters are B<snag>s.  (The "
 "specific instances are discussed in the text for the relevant operation.)"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:485
+#: ../git-debrebase.1.pod:500
 msgid ""
 "When a snag is detected, a message is printed to stderr containing the snag "
 "id (in the form C<-f<snag-idE<gt>>), along with some prose."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:490
+#: ../git-debrebase.1.pod:505
 msgid ""
 "If snags are detected, git-debrebase does not continue, unless the relevant -"
 "f<snag-id> is specified, or --force is specified."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:494
+#: ../git-debrebase.1.pod:509
 msgid "--force"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:496
+#: ../git-debrebase.1.pod:511
 msgid "Turns all snags into warnings.  See the -f<snag-id> option."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:499
+#: ../git-debrebase.1.pod:514
 msgid ""
 "Do not invoke git-debrebase --force in scripts and aliases; instead, specify "
 "the particular -f<snag-id> for expected snags."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:502
+#: ../git-debrebase.1.pod:517
 msgid "--noop-ok"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:504
+#: ../git-debrebase.1.pod:519
 msgid ""
 "Suppresses the error in some situations where git-debrebase does nothing, "
 "because there is nothing to do."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:508
+#: ../git-debrebase.1.pod:523
 msgid ""
 "The specific instances are discussed in the text for the relvant operation."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:511
+#: ../git-debrebase.1.pod:526
 msgid "--anchor=<commit-ish>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:513
+#: ../git-debrebase.1.pod:528
 msgid ""
 "Treats <commit-ish> as an anchor.  This overrides the usual logic which "
 "automatically classifies commits as anchors, pseudomerges, delta queue "
@@ -890,7 +921,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:517
+#: ../git-debrebase.1.pod:532
 msgid ""
 "It also disables some coherency checks which depend on metadata extracted "
 "from its commit message, so it is a snag if <commit-ish> is the anchor for "
@@ -898,41 +929,41 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:524
+#: ../git-debrebase.1.pod:539
 msgid "--dgit=<program>"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:526
+#: ../git-debrebase.1.pod:541
 msgid ""
 "Run <program>, instead of dgit from PATH, when invocation of dgit is "
 "necessary.  This is provided mostly for the benefit of the test suite."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:530
+#: ../git-debrebase.1.pod:545
 msgid "-D"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:532
+#: ../git-debrebase.1.pod:547
 msgid "Requests (more) debugging.  May be repeated."
 msgstr ""
 
 #. type: =item
-#: ../git-debrebase.1.pod:534
-msgid "--experimntal-merge-resolution"
+#: ../git-debrebase.1.pod:549
+msgid "--experimental-merge-resolution"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:536
+#: ../git-debrebase.1.pod:551
 msgid ""
 "Enable experimental code for handling general merges (see L<git-debrebase(5)/"
 "General merges>)."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:539
+#: ../git-debrebase.1.pod:554
 msgid ""
 "This option may generate lossage of various kinds, including misleading "
 "error messages, references to nonexistent documentation, and you being "
@@ -940,24 +971,24 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../git-debrebase.1.pod:547
+#: ../git-debrebase.1.pod:562
 msgid "UNSTITCHING AND LAUNDERING"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:549
+#: ../git-debrebase.1.pod:564
 msgid ""
 "Several operations unstitch and launder the branch first.  In detail this "
 "means:"
 msgstr ""
 
 #. type: =head2
-#: ../git-debrebase.1.pod:552
+#: ../git-debrebase.1.pod:567
 msgid "Establish the current branch's ffq-prev"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:554
+#: ../git-debrebase.1.pod:569
 msgid ""
 "If ffq-prev is not yet recorded, git-debrebase checks that the current "
 "branch is ahead of relevant remote tracking branches.  The relevant branches "
@@ -965,30 +996,30 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:566
+#: ../git-debrebase.1.pod:581
 msgid ""
 "The branch that git would merge from (remote.<branch>.merge, remote.<branch>."
 "remote);"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:571
+#: ../git-debrebase.1.pod:586
 msgid ""
 "The branch git would push to, if different (remote.<branch>.pushRemote etc.);"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:576
+#: ../git-debrebase.1.pod:591
 msgid "For local dgit suite branches, the corresponding tracking remote;"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:581
+#: ../git-debrebase.1.pod:596
 msgid "If you are on C<master>, remotes/dgit/dgit/sid."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:586
+#: ../git-debrebase.1.pod:601
 msgid ""
 "The apparently relevant ref names to check are filtered through branch."
 "<branch>.ffq-ffrefs, which is a semicolon-separated list of glob patterns, "
@@ -996,7 +1027,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:591
+#: ../git-debrebase.1.pod:606
 msgid ""
 "In each case it is a snag if the local HEAD is behind the checked remote, or "
 "if local HEAD has diverged from it.  All the checks are done locally using "
@@ -1005,31 +1036,31 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:597
+#: ../git-debrebase.1.pod:612
 msgid ""
 "If these checks pass, or are forced, git-debrebse then records the current "
 "tip as ffq-prev."
 msgstr ""
 
 #. type: =head2
-#: ../git-debrebase.1.pod:601
+#: ../git-debrebase.1.pod:616
 msgid "Examine the branch"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:603
+#: ../git-debrebase.1.pod:618
 msgid ""
 "git-debrebase analyses the current HEAD's history to find the anchor in its "
 "breakwater, and the most recent breakwater tip."
 msgstr ""
 
 #. type: =head2
-#: ../git-debrebase.1.pod:608
+#: ../git-debrebase.1.pod:623
 msgid "Rewrite the commits into laundered form"
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:610
+#: ../git-debrebase.1.pod:625
 msgid ""
 "Mixed debian+upstream commits are split into two commits each.  Delta queue "
 "(upstream files) commits bubble to the top.  Pseudomerges, and quilt patch "
@@ -1037,13 +1068,13 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:616
+#: ../git-debrebase.1.pod:631
 msgid ""
 "This rewrite will always succeed, by construction.  The result is the "
 "laundered branch."
 msgstr ""
 
 #. type: textblock
-#: ../git-debrebase.1.pod:621
-msgid "git-debrebase(1), dgit-maint-rebase(7), dgit(1), gitglossary(7)"
+#: ../git-debrebase.1.pod:636
+msgid "git-debrebase(1), dgit-maint-debrebase(7), dgit(1), gitglossary(7)"
 msgstr ""
index 71601b17e44687922a3bbb4d60cc4d63be35fd93..238be6aa4fde5f3b8bdba56c28ca0f57df2a0516 100644 (file)
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2019-03-01 16:59+0000\n"
+"POT-Creation-Date: 2019-09-06 23:47+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -21,18 +21,20 @@ msgstr ""
 #: ../dgit-maint-native.7.pod:1 ../dgit-maint-merge.7.pod:1
 #: ../dgit-maint-gbp.7.pod:1 ../dgit-maint-debrebase.7.pod:1
 #: ../dgit-downstream-dsc.7.pod:1 ../dgit-sponsorship.7.pod:1
-#: ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../dgit-maint-bpo.7.pod:1 ../git-debrebase.1.pod:1 ../git-debrebase.5.pod:1
+#: ../git-debpush.1.pod:1
 #, no-wrap
 msgid "NAME"
 msgstr ""
 
 #. type: =head1
-#: ../dgit.1:1470 ../dgit.7:23 ../dgit-user.7.pod:447
+#: ../dgit.1:1568 ../dgit.7:23 ../dgit-user.7.pod:447
 #: ../dgit-nmu-simple.7.pod:137 ../dgit-maint-native.7.pod:126
-#: ../dgit-maint-merge.7.pod:491 ../dgit-maint-gbp.7.pod:136
-#: ../dgit-maint-debrebase.7.pod:747 ../dgit-downstream-dsc.7.pod:352
-#: ../dgit-sponsorship.7.pod:321 ../git-debrebase.1.pod:619
-#: ../git-debrebase.5.pod:678
+#: ../dgit-maint-merge.7.pod:521 ../dgit-maint-gbp.7.pod:136
+#: ../dgit-maint-debrebase.7.pod:778 ../dgit-downstream-dsc.7.pod:352
+#: ../dgit-sponsorship.7.pod:321 ../dgit-maint-bpo.7.pod:134
+#: ../git-debrebase.1.pod:633 ../git-debrebase.5.pod:678
+#: ../git-debpush.1.pod:254
 #, no-wrap
 msgid "SEE ALSO"
 msgstr ""
@@ -41,15 +43,13 @@ msgstr ""
 #: ../dgit-user.7.pod:5 ../dgit-maint-native.7.pod:5
 #: ../dgit-maint-merge.7.pod:5 ../dgit-maint-gbp.7.pod:5
 #: ../dgit-maint-debrebase.7.pod:5 ../dgit-downstream-dsc.7.pod:5
-#: ../git-debrebase.1.pod:10 ../git-debrebase.5.pod:5
+#: ../dgit-maint-bpo.7.pod:5 ../git-debrebase.5.pod:5
 msgid "INTRODUCTION"
 msgstr ""
 
-#. type: textblock
-#: ../git-debrebase.1.pod:12 ../git-debrebase.5.pod:7
-msgid ""
-"git-debrebase is a tool for representing in git, and manpulating, Debian "
-"packages based on upstream source code."
+#. type: =head1
+#: ../dgit-maint-bpo.7.pod:11 ../git-debrebase.5.pod:37
+msgid "TERMINOLOGY"
 msgstr ""
 
 #. type: textblock
@@ -57,6 +57,13 @@ msgstr ""
 msgid "git-debrebase - git data model for Debian packaging"
 msgstr ""
 
+#. type: textblock
+#: ../git-debrebase.5.pod:7
+msgid ""
+"git-debrebase is a tool for representing in git, and manpulating, Debian "
+"packages based on upstream source code."
+msgstr ""
+
 #. type: textblock
 #: ../git-debrebase.5.pod:11
 msgid ""
@@ -96,11 +103,6 @@ msgid ""
 "output than the default."
 msgstr ""
 
-#. type: =head1
-#: ../git-debrebase.5.pod:37
-msgid "TERMINOLOGY"
-msgstr ""
-
 #. type: =item
 #: ../git-debrebase.5.pod:41
 msgid "Pseudomerge"
@@ -620,7 +622,7 @@ msgstr ""
 #. type: textblock
 #: ../git-debrebase.5.pod:394
 msgid ""
-"See dgit-maint-rebase(7)  for a discussion of what kinds of behaviours "
+"See dgit-maint-debrebase(7)  for a discussion of what kinds of behaviours "
 "should be be avoided because they might generate such merges."
 msgstr ""
 
@@ -912,7 +914,7 @@ msgid ""
 "The full set of annotations is:\n"
 "  [git-debrebase split: mixed commit, debian part]\n"
 "  [git-debrebase split: mixed commit, upstream-part]\n"
-"  [git-debrebase onvert dgit import: debian changes]\n"
+"  [git-debrebase convert dgit import: debian changes]\n"
 "  [git-debrebase anchor: convert dgit import, upstream changes]\n"
 "\n"
 msgstr ""
index f296e4c62b4b981b1d6a3904254a6b0d35fd9620..491c3d0a21e8f4b558083a0e7ab936a48570a5bf 100644 (file)
@@ -14,5 +14,7 @@
 [type: pod] ../dgit-maint-debrebase.7.pod $lang:translated/man/$lang/man7/dgit-maint-debrebase.7.pod master:file=dgit-maint-debrebase_7
 [type: pod] ../dgit-downstream-dsc.7.pod $lang:translated/man/$lang/man7/dgit-downstream-dsc.7.pod master:file=dgit-downstream-dsc_7
 [type: pod] ../dgit-sponsorship.7.pod $lang:translated/man/$lang/man7/dgit-sponsorship.7.pod master:file=dgit-sponsorship_7
+[type: pod] ../dgit-maint-bpo.7.pod $lang:translated/man/$lang/man7/dgit-maint-bpo.7.pod master:file=dgit-maint-bpo_7
 [type: pod] ../git-debrebase.1.pod $lang:translated/man/$lang/man1/git-debrebase.1.pod master:file=git-debrebase_1
 [type: pod] ../git-debrebase.5.pod $lang:translated/man/$lang/man5/git-debrebase.5.pod master:file=git-debrebase_5
+[type: pod] ../git-debpush.1.pod $lang:translated/man/$lang/man1/git-debpush.1.pod master:file=git-debpush_1
index ad27c9b689e4edb349b5252b8bdf81036bb3bb16..2d336942d069079e4d51468b449ef9e128294fa8 100755 (executable)
@@ -11,5 +11,5 @@ ${DGIT_REPOS_SERVER_TEST-dgit-repos-server} \
        test-dummy $tmp/distro=test-dummy \
        $tmp/dd.gpg,a:$tmp/dm.gpg,m$tmp/dm.txt \
        --repos=$tmp/git --suites=$tmp/suites \
-       --ssh
+       --${DGIT_DRS_MODE-ssh}
 : '))))))))))))))))))))))))))))))))))))))))'
index a532b526bfa56efcccaf6000016914a1eb4749e9..9b9271cb1baf1cf756caed9313ba694e3a1d29a3 100755 (executable)
@@ -42,18 +42,30 @@ finish- () {
 
 test-begin-gencontrol () {
        restrictions=''
-       dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime'
+       dependencies='dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, liburi-perl'
+}
+
+gencontrol-add-things () {
+       local varname=$1; shift
+       local delim=$1; shift
+       local thing
+       eval '
+               for thing in "$@"; do
+                       case " $'$varname$delim '" in
+                       *" "$thing"'$delim' "*) continue ;;
+                       esac
+                       '$varname'+="${'$varname':+'$delim' }$thing"
+               done
+       '
 }
 
 restriction-gencontrol () {
        if [ $r = x-dgit-out-of-tree-only ]; then return; fi
-       restrictions+=" $r"
+       gencontrol-add-things restrictions '' "$r"
 }
 
 gencontrol-add-deps () {
-       for dep in "$@"; do
-               dependencies+="${dependencies:+, }$dep"
-       done
+       gencontrol-add-things dependencies , "$@"
 }
 
 dependencies-gencontrol () {
@@ -64,6 +76,13 @@ dependencies-gencontrol () {
                GDR) gencontrol-add-deps \
                        git-debrebase git-buildpackage
                        ;;
+               DEBORIG) gencontrol-add-deps \
+                       devscripts libdpkg-perl \
+                       libgit-wrapper-perl liblist-compare-perl \
+                       libstring-shellquote-perl libtry-tiny-perl \
+                       # NB git-deborig is not compatible with
+                       #  t-tstunt-parsechangelog
+                       ;;
                *) gencontrol-add-deps "$dep" ;;
                esac
        done
@@ -79,7 +98,7 @@ test-done-gencontrol () {
                        }
                ' 
                case "$restrictions" in
-               ?*) echo "Restrictions:$restrictions" ;;
+               ?*) echo "Restrictions: $restrictions" ;;
                esac
                )
        key=$(printf "%s" "$stanza" | sha256sum)
@@ -104,21 +123,33 @@ finish-gencontrol () {
 
 seddery () {
        local seddery=$1
-       sed <$t -n '
+       sed <$tf -n '
                20q;
                /^: t-enumerate-tests-end$/q;
                '"$seddery"'
        '
 }
 
-for t in $(run-parts --list tests/tests); do
-       test-begin-$mode
+allsedderies () {
+       local tf=$1
        for r in $(seddery 's/^t-restrict //p'); do
                restriction-$mode
        done
        for deps in $(seddery 's/^t-dependencies //p'); do
                dependencies-$mode
        done
+       for import in $(seddery 's/^t-setup-import //p'); do
+               allsedderies tests/setup/$import
+       done
+       if egrep -q '^t-alt-test *$' <$tf; then
+               local leaf=${tf#tests/tests/}
+               allsedderies tests/tests/"${leaf#*-}"
+       fi
+}
+
+for t in $(run-parts --list tests/tests); do
+       test-begin-$mode
+       allsedderies $t
        test-done-$mode
 done
 
index 1673c72631a5f10ede3366c52c36492eb3aeee93..6392d8348b8eaa8dd9d94b15800f660c079e1d2a 100644 (file)
Binary files a/tests/git-srcs/pari-extra_3-1.git.tar and b/tests/git-srcs/pari-extra_3-1.git.tar differ
diff --git a/tests/http-static-server b/tests/http-static-server
new file mode 100755 (executable)
index 0000000..f2f7cd0
--- /dev/null
@@ -0,0 +1,96 @@
+#!/usr/bin/perl -w
+#
+# This file is part of the dgit test suite.
+#
+# Copyright (C)2004-2015 Best Practical Solutions, LLC
+# Copyright (C)2019      Ian Jackson
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+#
+# invocation protocol:
+#
+#   http-static-server >port-file tests/tmp/$thing/aq
+#
+# Will write the allocated port number to port-file.
+# Then we fork and the parent exits 0.
+# If port-file is unlinked, we exit.
+
+use strict;
+use IO::Handle;
+
+our ($webroot) = @ARGV;
+our $port = '';
+
+# HTTP::Server::Simple handles requests in the main process so it
+# must redirect and close STDOUT.  So transplant STDOUT to CHECK.
+open CHECK, ">& STDOUT" or die $!;
+open STDOUT, ">/dev/null" or die $!;
+
+sub stat_type_check () {
+    die "[$port, $webroot] stdout not ta plain file"
+       unless -f _;
+}
+
+stat CHECK or die $!;
+stat_type_check();
+
+sub start_polling_fstat () {
+    our $polling_pid = $$;
+    $SIG{ALRM} = sub {
+       return unless $$ = $polling_pid;
+       stat CHECK or die $!;
+       my $nlink = (stat _)[3];
+       exit 0 unless $nlink;
+       stat_type_check(); # doesn't seem possible to fail but check anyway
+       alarm(1);
+    };
+    alarm(1);
+}
+
+package ServerClass;
+
+use strict;
+use Socket qw(AF_INET SOCK_STREAM);
+use Socket qw(AF_INET SOCK_STREAM unpack_sockaddr_in);
+use IO::Handle;
+
+use base qw(HTTP::Server::Simple::CGI);
+use HTTP::Server::Simple::Static;
+
+sub handle_request {
+    my ($self, $cgi) = @_;
+
+    if (!$self->serve_static($cgi, $::webroot)) {
+       print "HTTP/1.0 404 Not found\r\n";
+       print $cgi->header,
+           $cgi->start_html('Not found'),
+           $cgi->h1('Not found'),
+           $cgi->end_html;
+    }
+}
+
+sub port () { return 0; }
+
+sub after_setup_listener () {
+    my $sn = getsockname HTTP::Server::Simple::HTTPDaemon or die $!;
+    ($main::port,) = unpack_sockaddr_in $sn;
+    print main::CHECK $port, "\n" or die $!;
+    flush main::CHECK or die $!;
+    my $c = fork // die $!;
+    exit 0 if $c;
+    ::main::start_polling_fstat();
+}
+
+package main;
+
+our $server = ServerClass->new();
+$server->run();
index fa553af9d5e89af67a971ad23617ff1eedbc376e..749509c4fc240d301d77cb56c8d33adbb263362d 100644 (file)
--- a/tests/lib
+++ b/tests/lib
@@ -22,7 +22,23 @@ END
        exit 16
 }
 
-trap 'test $? = 0 || t-report-failure' EXIT
+trap '
+       rc=$?
+       set +x
+       test $rc = 0 || echo "
+%%%%%%%%%%%%%%%%%%%% EXITING $rc %%%%%%%%%%%%%%%%%%%%
+
+               Most relevant logs are just before assignment rc=$rc
+               Will now do cleanup etc.
+"
+       set -x
+       set +e
+       pwd
+       [ "x$DGIT_TEST_KEEP_MUSTCLEAN" != x ] || \
+       [ "x$DGIT_TEST_TMP" = x ] || rm -rf $DGIT_TEST_TMP/must-clean
+       set -e
+       test $rc = 0 || t-report-failure
+' EXIT
 
 t-filter-out-git-hyphen-dir
 
@@ -31,12 +47,16 @@ t-set-intree
 : ${DGIT_TEST_DEBUG=-D}
 export DGIT_TEST_DEBUG
 
+: ${DGIT_TEST_DEBPUSH_DEBUG=x}
+export DGIT_TEST_DEBPUSH_DEBUG
+
 : ${DGIT_TEST_DISTRO+ ${distro=${DGIT_TEST_DISTRO}}}
 
 export GIT_COMMITTER_DATE='1530000000 +0100'
 export GIT_AUTHOR_DATE='1530000000 +0100'
 
 export LC_CTYPE=C.UTF-8
+unset CDPATH
 
 root=`pwd`
 troot=$root/tests
@@ -70,6 +90,11 @@ export DEBCHANGE_VENDOR=dpkg
 unset VISUAL
 unset GIT_EDITOR
 
+mkdir -p $tmp/must-clean
+# must-clean is usually removed after each test, on success or failure.
+# But this must not be relied on for correctness, only for garbage
+# collection etc.
+
 mkdir -p $tmp/incoming
 cat <<END >$tmp/dput.cf
 [test-dummy]
@@ -346,7 +371,8 @@ t-archive () {
        v=$2
        local dscf=${p}_$2.dsc
        rm -f $tmp/mirror/pool/main/${p}_*
-       ln -s $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/
+       ${t_archive_ln_s-ln -s} \
+                $troot/pkg-srcs/${p}_${2%-*}* $tmp/mirror/pool/main/
        t-archive-query $suite
        rm -rf $tmp/extract
        mkdir $tmp/extract
@@ -460,6 +486,19 @@ t-dgit () {
 '
 }
 
+t-non-dgit-upload () {
+       t-dgit -wgf build-source
+
+       cd ..
+       c=${p}_${v}_source.changes
+       debsign -kBCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A $c
+       dput -c $tmp/dput.cf test-dummy $c
+
+       t-archive-process-incoming sid
+       t-git-next-date
+       cd $p
+}
+
 t-dgit-manpage () {
        local section=$1
        local page=$2
@@ -520,6 +559,14 @@ t-setup-done () {
                ' $vn "$(eval "printf '%s\n' \"\$$vn\"")"
        done
 
+       perl >&4 -"I$root" -MDebian::Dgit -we '
+               foreach my $vn (grep m/^DGIT_TEST_REAL_/, keys %ENV) {
+                       print STDERR "saving-exporting $vn\n";
+                       printf "export %s=%s\n", $vn, shellquote $ENV{$vn}
+                               or die $!;
+               }
+       '
+
        (set -e; cd $tmp; tar cf $import.tar $savedirs)
 
        printf >&4 "\n%s\n" "$importeval"
@@ -561,6 +608,8 @@ t-setup-import () {
                (set -e; cd $tmp; tar xf "$simport.tar")
        fi
 
+       mkdir -p $tmp/must-clean
+
        . "$simport"
 }
 
@@ -736,6 +785,7 @@ t-splitbrain-pushed-good--unpack () {
        ln -s $tmp/incoming/*.orig*.tar* . ||:
        ln -s $incoming_dsc .
        ln -s ${incoming_dsc/.dsc/.debian.tar}* .
+       ln -s ${incoming_dsc/.dsc/.tar}* . ||:
        dpkg-source "$@" -x *.dsc
        cd */.
        git init
@@ -764,11 +814,12 @@ t-splitbrain-pushed-good-start () {
 
        t-refs-same-start
        t-ref-same refs/heads/split.p
-       case "$(t-git-get-ref refs/heads/split.b)" in
+       local split_b=$(t-git-get-ref refs/heads/split.b)
+       case "$split_b" in
        "$t_ref_val") ;;
        "$(git rev-parse refs/heads/split.p^0)") ;;
        "$(git rev-parse refs/heads/split.p^1)") ;;
-       *) fail 'bad b/p' ;;
+       *) fail "bad b/p (b=$split_b)" ;;
        esac
        t-pushed-good-core
 
@@ -782,16 +833,21 @@ t-splitbrain-pushed-good-end-made-dep14 () {
        cd $tmp/$p
 }
 
-t-splitbrain-rm-gitignore-patch () {
+t-splitbrain-rm-1-patch () {
+       local patchname=$1
        perl -i -pe '
-               next unless $_ eq "auto-gitignore\n";
+               next unless $_ eq "'"$patchname"'\n";
                die if $counter++;
                chomp;
-               rename "debian/patches/$_", "../t-auto-gitignore" or die $!;
+               rename "debian/patches/$_", "../t-'"$patchname"'" or die $!;
                $_ = "";
        ' debian/patches/series
 }
 
+t-splitbrain-rm-gitignore-patch () {
+       t-splitbrain-rm-1-patch auto-gitignore
+}
+
 t-gbp-pushed-good () {
        local suite=${1:-sid}
        t-splitbrain-pushed-good-start
@@ -826,18 +882,27 @@ t-gbp-pushed-good () {
 }
 
 t-unapplied-pushed-good () {
+       local suite=${1:-sid}
        t-splitbrain-pushed-good-start
        t-splitbrain-pushed-good--unpack --skip-patches
        t-splitbrain-pushed-good-end-made-dep14
 }
 
 t-dpm-pushed-good () {
+       local suite=${1:-sid}
        t-splitbrain-pushed-good-start
        t-splitbrain-pushed-good--unpack
        t-splitbrain-rm-gitignore-patch
        t-splitbrain-pushed-good-end-made-dep14
 }
 
+t-split-unchanged-pushed-good () {
+       local suite=${1:-sid}
+       t-splitbrain-pushed-good-start
+       t-splitbrain-pushed-good--unpack
+       t-splitbrain-pushed-good-end-made-dep14
+}
+
 t-commit-build-push-expect-log () {
        local msg=$1
        local mpat=$2
@@ -1000,7 +1065,6 @@ t-git-pseudo-merge () {
 }
 
 t-gbp-example-prep-no-ff () {
-       t-tstunt-parsechangelog
        t-archive example 1.0-1
        t-git-none
        t-worktree 1.0
@@ -1092,7 +1156,6 @@ t-drs () {
  t-git-config dgit-distro.test-dummy.git-url "ext::$troot/drs-git-ext %S "
  t-git-config dgit-distro.test-dummy.git-check true
  t-git-config dgit-distro.test-dummy.git-create true
- t-git-config dgit-distro.test-dummy.dgit-tag-format new,old,maint
        cp $troot/gnupg/{dd.gpg,dm.gpg,dm.txt} $tmp/.
        cp $troot/suites $tmp/.
        cp $troot/suites $tmp/suites-master
@@ -1114,15 +1177,6 @@ t-drs () {
        ln -sf /bin/true $drs_dispatch/policy-hook
 }
 
-t-newtag () {
- export tagpfx=archive/test-dummy
- t-git-config dgit-distro.test-dummy.dgit-tag-format new,maint
-}
-t-oldtag () {
- export tagpfx=test-dummy
- t-git-config dgit-distro.test-dummy.dgit-tag-format old
-}
-
 t-dsd () {
        t-drs
  t-git-config dgit-distro.test-dummy.ssh "$troot/dsd-ssh"
@@ -1170,7 +1224,7 @@ t-debpolicy () {
        t-dsd
        t-policy dgit-repos-policy-debian
 
-       mkdir $tmp/git
+       mkdir -p $tmp/git
        t-policy-admin create-db
 }
 
@@ -1181,6 +1235,46 @@ t-policy-periodic () {
        : '))))))))))))))))))))))))))))))))))))))))'
 }
 
+t-tagupl-settings () {
+       export DGIT_DRS_EMAIL_NOREPLY=noreply@example.org
+       export DGIT_DRS_SENDMAIL=$troot/tstunt/sendmail
+       export DGIT_DRS_DGIT=$troot/tstunt/dgit
+       t-chain-test-somehow
+
+       mkdir ../pretend-salsa
+       (set -e; cd ../pretend-salsa; git init --bare)
+       git remote add salsa $tmp/pretend-salsa
+       # git branch --set-upstream-to complains, so
+       git config branch.master.remote salsa
+       git config branch.master.merge refs/heads/master
+}
+
+t-tagupl-run-drs () {
+       local source=$1
+       cd ..
+       cd tagupl
+
+       DGIT_DRS_ANY_URL=1 \
+       DGIT_DRS_MODE="tag2upload $source $tagname" \
+        $troot/drs-git-ext 
+
+       cd $tmp/$p
+}
+
+t-tagupl-test () {
+       ${DGIT_DEBPUSH_TEST-git debpush} \
+               --distro=test-dummy -u Senatus "$@"
+
+       mkdir ../tagupl
+       t-tagupl-run-drs $tmp/pretend-salsa
+
+       cd ../pretend-salsa
+       t-refs-same refs/heads/master
+       cd ../$p
+
+       t-dgit fetch
+}
+
 t-buildproductsdir-config () {
        bpd=$tmp/bpd
        t-git-config dgit.default.build-products-dir $bpd
@@ -1200,13 +1294,17 @@ t-dependencies () {
        : "Hopefully installed: $*"
 }
 
+t-chain-test-somehow () {
+       export DGIT_TEST_TESTNAME="$testname"
+       export DGIT_TEST_TMPBASE="$tmpbase"
+       export ADTTMP=$tmp
+}
+
 t-chain-test () {
+       t-chain-test-somehow
        local ct=$1
        local d=${0%/*}
        cd $root
-       export DGIT_TEST_TESTNAME="$testname"
-       export DGIT_TEST_TMPBASE="$tmpbase"
-       export ADTTMP=$tmp
        exec "$d/$ct"
 }      
 
diff --git a/tests/lib-baredebian b/tests/lib-baredebian
new file mode 100644 (file)
index 0000000..557c051
--- /dev/null
@@ -0,0 +1,107 @@
+#
+
+baredebian-test-vars () {
+       quiltmode=baredebian
+       v=1.0-1
+       suite=sid
+       uv=${v%-*}
+       uvtag=v$uv
+       origbase=${p}_${uv}.orig
+       xorigcomps=''
+}
+
+baredebian-tarball-mode () {
+       git tag -d $uvtag
+       uvtag=''
+       quiltmode=baredebian+tarball
+}
+
+baredebian-test-minimum () {
+       t-expect-fail 'contradicts clean mode git-ff' \
+       t-dgit -wgf --dgit-view-save=split.f1 --$quiltmode quilt-fixup
+
+       t-dgit -wn --dgit-view-save=split.f1 --$quiltmode quilt-fixup
+}
+
+baredebian-test-core-prepush () {
+       tar --strip-components=1 -axf ../$origbase.tar.*
+       for comp in $xorigcomps; do
+               mkdir $comp
+               cd $comp
+               tar --strip-components=1 -axf ../../$origbase-$comp.tar.*
+               cd ..
+       done
+
+       cd debian
+       git clean -xdff
+       git checkout HEAD -- .
+       cd ..
+
+       # Now we are in this insane state that people seem to expect
+
+       export QUILT_PATCHES=debian/patches
+       quilt push -a
+
+       git add -Af .
+       git reset .pc
+       git diff --cached --exit-code split.f1 -- :/ :!/debian
+       git diff --exit-code HEAD..split.f1 -- :/debian
+       git reset
+
+       quilt new made-with-quilt
+       quilt add src.c
+       echo //omg >>src.c
+       quilt refresh
+
+       git add debian/patches/.
+       t-commit 'extra patch made with quilt' 1.0-2
+
+       t-refs-same-start
+       t-ref-head
+       t-dgit -wn --quilt=$quiltmode --dgit-view-save=split.b quilt-fixup
+       t-ref-head
+}
+
+baredebian-test-core-push () {
+       dpkg-buildpackage -uc -us --build=source
+       # ^ Do this by hand here not because we expect users to do this
+       #   (rather than dgit build), but so that we can check that our
+       #   output is the same as users are used to.
+
+       t-dgit -wn --quilt=$quiltmode --dgit-view-save=split.p --new push
+}
+
+baredebian-test-core-postpush () {
+       git merge-base --is-ancestor HEAD     split.p
+       if [ "$uvtag" ]; then
+               git merge-base --is-ancestor $uvtag split.p
+               set +e; git merge-base HEAD $uvtag; rc=$?; set -e; [ $rc = 1 ]
+       fi
+
+       git clean -xdff
+       # t-pushed-good-* wants a clean tree to start with, but this
+       #  workflow expects a mess
+
+       t-splitbrain-pushed-good-start
+       t-splitbrain-pushed-good--unpack
+
+       find . -mindepth 1 -maxdepth 1          \
+               \! -path ./debian               \
+               \! -path ./.git                 \
+               -print0                         \
+               | xargs -0r rm -rf --
+
+       t-splitbrain-pushed-good-end-made-dep14
+}
+
+baredebian-test-core () {
+       baredebian-test-core-prepush
+       baredebian-test-core-push
+       baredebian-test-core-postpush
+}
+
+baredebian-test () {
+       baredebian-test-vars
+       baredebian-test-minimum
+       baredebian-test-core
+}
index 27c5b06ca6abc5f1f9fde4488ee309b9f40f5953..a4482be2ed56e1c556772b363f312255f67c060d 100644 (file)
@@ -44,6 +44,7 @@ bm-prep () {
 
 bm-gbp-example-acts () {
        t-gbp-example-prep
+       t-tstunt-parsechangelog
 
        git checkout -b for-build-modes qc/quilt-tip-2
        # build-modes cannot cope with branches containing /
index 4550b9ec9d091b3b8d798c24b62576da521745ef..7fdddb42614cae2325b6ecaab86e9579c01b044d 100644 (file)
@@ -11,12 +11,16 @@ t-set-intree () {
        : ${DGIT_BADCOMMIT_FIXUP:=$DGIT_TEST_INTREE/dgit-badcommit-fixup}
        : ${DGIT_REPOS_SERVER_TEST:=$DGIT_TEST_INTREE/infra/dgit-repos-server}
        : ${DGIT_SSH_DISPATCH_TEST:=$DGIT_TEST_INTREE/infra/dgit-ssh-dispatch}
+: ${DGIT_MIRROR_SSH_WRAP_TEST:=$DGIT_TEST_INTREE/infra/dgit-mirror-ssh-wrap}
+       : ${DGIT_DEBPUSH_TEST:=$DGIT_TEST_INTREE/git-debpush}
        : ${DGIT_INFRA_PFX:=$DGIT_TEST_INTREE${DGIT_TEST_INTREE:+/infra/}}
        : ${DGIT_GITDEBREBASE_TEST:=$DGIT_TEST_INTREE/git-debrebase}
        : ${DGIT_MANPAGES_SOURCE_DIR:=$DGIT_TEST_INTREE}
+       : ${DEBPUSH_GIT_PLAYTREE_SETUP:=$DGIT_TEST_INTREE/git-playtree-setup}
        export DGIT_TEST DGIT_BADCOMMIT_FIXUP
        export DGIT_REPOS_SERVER_TEST DGIT_SSH_DISPATCH_TEST
-       export DGIT_MANPAGES_SOURCE_DIR
+       export DGIT_MIRROR_SSH_WRAP_TEST
+       export DGIT_MANPAGES_SOURCE_DIR DEBPUSH_GIT_PLAYTREE_SETUP
        export PERLLIB="$DGIT_TEST_INTREE${PERLLIB:+:}${PERLLIB}"
 }
 
index cda11df5b8d5fe7d322d9f8f8168cc44c2554746..bf94fbaedc4c21529b705af2bc0b561cd13b4ddb 100644 (file)
@@ -260,17 +260,7 @@ t-nmu-upload-2 () {
 
 t-nmu-upload-3 () {
        t-dch-commit-r
-
-       t-dgit -wgf build-source
-
-       cd ..
-       c=${p}_${v}_source.changes
-       debsign -kBCD22CD83243B79D3DFAC33EA3DBCBC039B13D8A $c
-       dput -c $tmp/dput.cf test-dummy $c
-
-       t-archive-process-incoming sid
-       t-git-next-date
-       cd $p
+       t-non-dgit-upload
        git checkout master
 }
 
diff --git a/tests/pkg-srcs/example_1.0-1+brokenmeta.debian.tar.xz b/tests/pkg-srcs/example_1.0-1+brokenmeta.debian.tar.xz
new file mode 100644 (file)
index 0000000..caad820
Binary files /dev/null and b/tests/pkg-srcs/example_1.0-1+brokenmeta.debian.tar.xz differ
diff --git a/tests/pkg-srcs/example_1.0-1+brokenmeta.dsc b/tests/pkg-srcs/example_1.0-1+brokenmeta.dsc
new file mode 100644 (file)
index 0000000..c7c363d
--- /dev/null
@@ -0,0 +1,22 @@
+Format: 3.0 (quilt)
+Source: example
+Binary: example
+Architecture: all
+Version: 1.0-1+brokenmeta
+Maintainer: Ian Jackson <ijackson@chiark.greenend.org.uk>
+Standards-Version: 3.9.4.0
+Build-Depends: debhelper (>= 8)
+Package-List:
+ example deb devel extra arch=all
+Checksums-Sha1:
+ 2bc730f941db49de57e9678fb0b07bd95507bb44 236 example_1.0.orig-docs.tar.gz
+ 4bff9170ce9b10cb59937195c5ae2c73719fe150 373 example_1.0.orig.tar.gz
+ 68e0e1e3ec092409652d047e62bd3f0dba5a51f3 1304 example_1.0-1+brokenmeta.debian.tar.xz
+Checksums-Sha256:
+ ad9671f6b25cdd9f0573f803f702448a45a45183db1d79701aa760bccbeed29c 236 example_1.0.orig-docs.tar.gz
+ a3ef7c951152f3ec754f96fd483457aa88ba06df3084e6f1cc7c25b669567c17 373 example_1.0.orig.tar.gz
+ 3ef0a50e3c0e025d0facada85d4508469c88150504c079698ae329c0c18bf315 1304 example_1.0-1+brokenmeta.debian.tar.xz
+Files:
+ cb0cb5487b1e5bcb82547396b4fe93e5 236 example_1.0.orig-docs.tar.gz
+ 599f47808a7754c66aea3cda1b3208d6 373 example_1.0.orig.tar.gz
+ 2ed3f4310bdda12b58b1b412d1c88dd9 1304 example_1.0-1+brokenmeta.debian.tar.xz
diff --git a/tests/setup/baredebian b/tests/setup/baredebian
new file mode 100755 (executable)
index 0000000..bbd901f
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-gdr
+
+t-dependencies GDR DEBORIG quilt
+
+t-archive-none example
+t-git-none
+
+t-gdr-gbp-import-core-with-queue
+
+git-deborig
+
+for b in                       \
+       patch-queue/quilt-tip   \
+       gitish-only             \
+       quilt-tip-1.1           \
+       quilt-tip-2             \
+       indep-arch              \
+; do
+       git branch -D $b
+done
+
+git rm -rf . # yikes
+git checkout HEAD -- debian
+t=$(git write-tree)
+t=$(git commit-tree -m 'Convert to bare debian' $t)
+git reset --hard $t
+
+t-setup-done '' "$(echo $p*) git mirror aq" '
+       t-select-package example
+       t-git-next-date
+'
index 88f6178ce75f76a11798637e0f2f4756858e1707..d25ee95a039921191d05f9bcc58333c474b4dea3 100755 (executable)
@@ -50,4 +50,6 @@ push-to master sid
 
 git clean -xdff
 
-t-setup-done 'p v suitespecs majorv revision' "aq git mirror $p"
+t-setup-done 'v suitespecs majorv revision' "aq git mirror $p" "
+       t-select-package $p
+"
diff --git a/tests/setup/gbp b/tests/setup/gbp
new file mode 100755 (executable)
index 0000000..d8675fe
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-archive-none example
+t-git-none
+t-worktree 1.0
+
+cd $p
+
+: '----- construct an unpatched branch with patches -----'
+
+git checkout patch-queue/quilt-tip
+gbp pq export
+: 'now on quilt-tip'
+git add debian/patches
+git commit -m 'Commit patch queue'
+
+: '----- construct an upstream branch -----'
+
+git checkout --orphan upstream
+git reset --hard
+git clean -xdf
+
+tar --strip-components=1 -xf $troot/pkg-srcs/${p}_1.0.orig.tar.gz
+
+mkdir docs
+cd docs
+tar --strip-components=1 -xf $troot/pkg-srcs/${p}_1.0.orig-docs.tar.gz
+cd ..
+
+git add -Af .
+git commit -m 'Import 1.0'
+git tag upstream/1.0
+
+git checkout quilt-tip
+t-git-pseudo-merge -m 'gbp-orig pseudomerge' upstream
+
+v=1.0-1
+
+git checkout -B master
+
+cd ..
+
+t-setup-done 'v' "$(echo $p*) git mirror aq" '
+       t-select-package example
+       t-git-next-date
+'
diff --git a/tests/setup/http-git-check b/tests/setup/http-git-check
new file mode 100755 (executable)
index 0000000..0e3b7c2
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies libhttp-server-simple-static-perl
+
+t-setup-done '' --files-from=/dev/null '
+ $troot/http-static-server >$tmp/must-clean/git-check.port $tmp/git
+ read <$tmp/must-clean/git-check.port git_check_port
+
+ t-git-config --global dgit-distro.test-dummy.git-check        url
+ t-git-config --global dgit-distro.test-dummy.git-check-suffix .git/HEAD
+ t-git-config --global dgit-distro.test-dummy.git-check-url    \
+          http://127.0.0.1:$git_check_port
+'
diff --git a/tests/tests/alternating-dgit b/tests/tests/alternating-dgit
new file mode 100755 (executable)
index 0000000..c2ada5c
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-setup-import examplegit
+t-setup-import http-git-check
+
+cd $p
+
+git checkout -b nondgit
+t-commit 'non-dgit upload'
+t-non-dgit-upload
+
+cd ..
+
+t-dgit clone $p ./$p.2
+cd $p.2
+
+t-commit 'now a dgit upload again'
+
+t-dgit -wgf push-source
+t-refs-same-start
+t-pushed-good dgit/sid
+
+t-ok
diff --git a/tests/tests/baredebian-multitar b/tests/tests/baredebian-multitar
new file mode 100755 (executable)
index 0000000..39b6668
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies quilt
+
+t-setup-import baredebian
+t-tstunt-parsechangelog
+
+cd $p
+baredebian-test-vars
+baredebian-tarball-mode
+
+rm -f ../example_1.0.orig.tar.*
+cp $troot/pkg-srcs/${p}_${uv}.orig*.tar.* ..
+xorigcomps=docs
+
+git tag -d $uvtag
+
+baredebian-test-minimum
+baredebian-test-core
+
+combine=$(
+       git log --pretty=format:%H \
+       --grep "Combine orig tarballs for example $uv" split.p
+)
+
+parentnum=0
+for comp in '' $xorigcomps; do
+       parentnum=$(( $parentnum + 1 ))
+       fn=${origbase}${comp:+-}${comp}.tar.gz
+
+       git checkout --orphan imp$parentnum
+       git rm -rf .
+       tar --strip-components=1 -axf ../$fn
+       git add -Af .
+
+       git commit -m P$parentnum
+       git diff --stat --exit-code $combine^$parentnum
+
+       count=$(git log $combine^$parentnum | grep -Fc $fn)
+       [ $count = 2 ]
+done
+
+t-ok
diff --git a/tests/tests/baredebian-plusgit b/tests/tests/baredebian-plusgit
new file mode 100755 (executable)
index 0000000..5c53fdd
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies quilt
+
+t-setup-import baredebian
+t-tstunt-parsechangelog
+
+cd $p
+baredebian-test-vars
+quiltmode=baredebian+git
+
+baredebian-test-minimum
+
+t-ok
diff --git a/tests/tests/baredebian-push b/tests/tests/baredebian-push
new file mode 100755 (executable)
index 0000000..f095601
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies quilt
+
+t-setup-import baredebian
+t-tstunt-parsechangelog
+
+cd $p
+baredebian-test
+
+t-ok
diff --git a/tests/tests/baredebian-tarball b/tests/tests/baredebian-tarball
new file mode 100755 (executable)
index 0000000..00b2ad2
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies quilt
+
+t-setup-import baredebian
+t-tstunt-parsechangelog
+
+cd $p
+baredebian-test-vars
+baredebian-tarball-mode
+
+t-expect-fail 'Could not determine appropriate upstream commitish' \
+t-dgit -wn --dgit-view-save=split.g --baredebian quilt-fixup
+
+baredebian-test-minimum
+baredebian-test-core
+
+t-ok
index 83c996dc0232c428e9d035e906c72d6c3743957c..b85efdba9b18172e552850a628e152360e882a0c 100755 (executable)
@@ -2,6 +2,8 @@
 set -e
 . tests/lib
 
+t-setup-import http-git-check
+
 t-archive pari-extra 3-1
 t-git-none
 cp -a $tmp/git/_template $dgitrepo
index e99dac31939f9181f7a3ee8265915ce45869b4e1..f36a7b636cf5b6ce293f2b012c3de8bae745791f 100755 (executable)
@@ -2,6 +2,8 @@
 set -e
 . tests/lib
 
+t-setup-import http-git-check
+
 t-archive pari-extra 3-1
 t-git-none
 
diff --git a/tests/tests/clone-skew b/tests/tests/clone-skew
new file mode 100755 (executable)
index 0000000..dd51acd
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies libhttp-server-simple-static-perl
+
+$troot/http-static-server >$tmp/must-clean/mirror.port $tmp/mirror
+read <$tmp/must-clean/mirror.port mirror_port
+
+t-git-config --global dgit-distro.test-dummy.mirror \
+       http://127.0.0.1:$mirror_port/
+
+t_archive_ln_s=cp
+
+t-archive example 1.0-1
+t-git-none
+
+perl -i -ne '
+       print or die $!;
+       s/1.0-1/1.0-1+0.1/g;
+       s/ \w/ sprintf " %x", $& ^ 1 /e;
+       print or die $!;
+' $tmp/aq/package.sid.$p
+t-aq-archive-updated sid $p
+
+LC_MESSAGES=C \
+t-dgit clone $p 2>&1 |tee got.message
+
+grep 'Warning: archive skew detected.'       got.message
+egrep 'We were able to obtain only  *1.0-1$' got.message
+
+cd $p
+t-cloned-fetched-good
+
+t-ok
index 1fa6751782df0adc8b5d996d6701da8f76ea9e65..af02ac147d29b26405bed855ec8d31293cd8b5fd 100755 (executable)
@@ -57,7 +57,8 @@ t-git-dir-check enoent
 
 vanished=$v
 
-t-dgit push --new --deliberately-include-questionable-history
+t-dgit push --new --deliberately-include-questionable-history \
+       --force-reusing-version
 t-git-dir-check secret
 
 t-policy-periodic
@@ -81,7 +82,7 @@ t-expect-push-fail \
     "Package is in NEW and has not been accepted or rejected yet" \
 t-dgit --deliberately-TEST-dgit-only-not-fast-forward push
 
-t-dgit --deliberately-not-fast-forward push
+t-dgit --deliberately-not-fast-forward --force-reusing-version push
 
 cd $dgitrepo
 t-expect-push-fail "Not a valid object name" \
@@ -94,7 +95,8 @@ t-expect-push-fail \
     "Package is in NEW and has not been accepted or rejected yet" \
 t-dgit push
 
-t-dgit push --deliberately-include-questionable-history
+t-dgit push --deliberately-include-questionable-history \
+       --force-reusing-version
 
 t-archive-process-incoming sid
 
@@ -116,6 +118,6 @@ t-dgit pull
 t-dgit build
 t-expect-push-fail \
     'Reason: rewound suite sid; --deliberately-not-fast-forward specified' \
-t-dgit push
+t-dgit --force-reusing-version push
 
 t-ok
diff --git a/tests/tests/debpolicy-taintrm b/tests/tests/debpolicy-taintrm
new file mode 100755 (executable)
index 0000000..a9e54da
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-tstunt-parsechangelog
+
+t-debpolicy
+t-prep-newpackage example 1.0
+
+cd $p
+revision=1
+git tag start
+t-dgit setup-mergechangelogs
+
+
+: upload
+
+t-dgit push-source --new
+
+: cut
+
+rm $tmp/incoming/*
+t-archive-none example
+
+touch -d 'now -1 day' $tmp/git/example*
+
+t-policy-periodic # xxx maybe want test both with and without this
+
+: edit
+t-commit 'edit after cut'
+
+: push, needs --deliberately
+
+t-expect-push-fail \
+ 'all previously pushed versions were found to have been removed from NEW' \
+t-dgit push-source --new
+
+t-dgit push-source --new --deliberately-include-questionable-history \
+       --force-reusing-version
+
+t-archive-process-incoming new
+
+# : t-policy-periodic # maybe want test with this
+
+: accept
+
+mv -f $tmp/aq/package.{new,sid}.$p
+t-aq-archive-updated sid $p
+
+# : t-policy-periodic # maybe want test with this
+
+t-git-dir-time-passes
+
+: 3rd push, no deliberately
+
+t-commit 'edit after accept'
+t-dgit push-source
+
+t-ok
index afaed4cf248cb0c76f4f2bd6166379159655d089..f102d9537efc1b84d1191a827e826eb5a90c35c7 100755 (executable)
@@ -110,7 +110,7 @@ mustfail 'push is missing tag ref update' $push_spec1
 mustfail 'push is missing head ref update' +$push_spec2
 mustfail 'pushing unexpected ref' $push_spec HEAD:refs/wombat
 mustfail 'pushing multiple heads' $push_spec HEAD:refs/dgit/wombat
-mustfail E:'pushing multiple tags|pushing too many similar tags' \
+mustfail E:'pushing multiple tags|pushing too many similar tags|need exactly one archive' \
        $push_spec HEAD:refs/tags/$tagpfx/wombat
 
 prep unstable sid
@@ -162,7 +162,6 @@ git commit --allow-empty -m 'Dummy update'
 mktag
 mustfail 'not replacing previously-pushed version' +$push_spec1 +$push_spec2
 
-t-newtag
 re-prep
 mktag
 mustfail 'not replacing previously-pushed version' +$push_spec1 +$push_spec2
index 63abe8ad91b717f782e6698de75c5451feb26949..4e42aa3923eadda25cda133fd172d06498d8dddf 100755 (executable)
@@ -10,6 +10,6 @@ t-dgit clone $p
 cd $p
 
 t-cloned-fetched-good
-t-has-ancestor debian/3-1
+t-has-ancestor test-dummy/3-1
 
 t-ok
diff --git a/tests/tests/forcesplit-linear b/tests/tests/forcesplit-linear
new file mode 100755 (executable)
index 0000000..4856d6a
--- /dev/null
@@ -0,0 +1,45 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-tstunt-parsechangelog
+t-buildproductsdir-config
+
+t-archive example 1.0-1
+t-select-package example
+t-git-none
+
+t-dgit clone $p
+cd $p
+
+echo '/* More patch */' >>src.c
+git add src.c
+
+t-commit 'More patch' 1.0-2
+
+t-refs-same-start
+t-ref-head
+t-dgit --split-view push-source
+t-ref-head
+
+
+t-commit 'More more patch' 1.0-3
+
+t-dgit --split-view --save-dgit-view=split.b quilt-fixup
+
+git reflog expire --expire=all refs/dgit-intern/quilt-cache
+test "x$(git reflog refs/dgit-intern/quilt-cache)" = x
+
+t-refs-same-start
+t-ref-head
+t-dgit --split-view --save-dgit-view=split.p push-source
+t-ref-head
+
+suite=sid
+
+t-splitbrain-pushed-good-start
+t-splitbrain-pushed-good--unpack
+t-splitbrain-rm-1-patch more-patch.patch
+t-splitbrain-pushed-good-end-made-dep14
+
+t-ok
diff --git a/tests/tests/forcesplit-overwrite b/tests/tests/forcesplit-overwrite
new file mode 100755 (executable)
index 0000000..5826287
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+# This tests a native package with split view, including that the
+# pseudomerges end up in the right place.
+
+t-setup-import examplegit
+
+cd $p
+
+suite=stable
+
+t-commit 'No changes, just send to stable' '' stable
+
+t-refs-same-start
+t-ref-head
+
+try () {
+       t-dgit -wgf --split-view "$@" --dgit-view-save=split.p \
+               push-source stable
+}
+
+t-expect-fail E:'maintainer view tag.*not fast forward' \
+try
+
+t-expect-fail F:'debian/changelog does not mention 1.2' \
+try --overwrite
+
+try --overwrite=1.2
+git branch -f split.b split.p
+
+t-ref-head
+t-split-unchanged-pushed-good $suite
+
+t-ok
diff --git a/tests/tests/ftpmasterapi-http b/tests/tests/ftpmasterapi-http
new file mode 100755 (executable)
index 0000000..818a974
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-archive-none example
+
+t-dependencies libhttp-server-simple-static-perl
+
+$troot/http-static-server >$tmp/must-clean/api.port $tmp/aq
+
+read <$tmp/must-clean/api.port api_port
+
+t-git-config --global dgit-distro.test-dummy.archive-query ftpmasterapi:
+t-git-config --global dgit-distro.test-dummy.archive-query-url \
+   http://127.0.0.1:$api_port/
+
+t-dgit archive-api-query suites
+
+t-ok
index 9a4937cb1e6f0fc91a9fd6a17d8152d45a13c709..c8436630e880a03711f5681bbf16708302b16eb6 100755 (executable)
@@ -2,49 +2,17 @@
 set -e
 . tests/lib
 
-t-tstunt-parsechangelog
-t-tstunt-debuild
-t-tstunt-lintian
-
-t-archive-none example
-t-git-none
-t-worktree 1.0
+t-setup-import gbp
 
 cd $p
 
-: '----- construct an unpatched branch with patches -----'
-
-git checkout patch-queue/quilt-tip
-gbp pq export
-: 'now on quilt-tip'
-git add debian/patches
-git commit -m 'Commit patch queue'
-
-: '----- construct an upstream branch -----'
-
-git checkout --orphan upstream
-git reset --hard
-git clean -xdf
-
-tar --strip-components=1 -xf $troot/pkg-srcs/${p}_1.0.orig.tar.gz
-
-mkdir docs
-cd docs
-tar --strip-components=1 -xf $troot/pkg-srcs/${p}_1.0.orig-docs.tar.gz
-cd ..
-
-git add -Af .
-git commit -m 'Import 1.0'
-git tag upstream/1.0
-
-git checkout quilt-tip
-t-git-pseudo-merge -m 'gbp-orig pseudomerge' upstream
-
-v=1.0-1
+t-tstunt-parsechangelog
+t-tstunt-debuild
+t-tstunt-lintian
 
 : '----- let gbp build a .orig for comparison -----'
 
-gbp buildpackage --git-ignore-branch --git-no-sign-tags -us -uc
+gbp buildpackage --git-no-sign-tags -us -uc
 
 mkdir ../gbp-output
 mv ../*1.0* ../gbp-output/.
index 0bdf15fd98d472dce037618a04a723d4485b7dce..a8b519c7b8b4c3350bbeee61d8fc637e286f95a1 100755 (executable)
@@ -27,6 +27,9 @@ t-gdr-good laundered
 t-dgit push-source
 t-gdr-good pushed-interop
 
+t-expect-fail E:'add a new changelog stanza.*and try again' \
+t-dgit push-source
+
 git branch before-noop
 
 t-git-next-date
index e58ff324371e67096e39698ab31bc9f5db6da353..1050f72607b1fa1e85ecb0abb1913529ebfa41cf 100755 (executable)
@@ -6,6 +6,7 @@ t-dependencies GDR
 
 t-tstunt-parsechangelog
 t-setup-import gdr-convert-gbp
+t-setup-import http-git-check
 
 cd $p
 
index 4a8d876693af72c7bf548ee4ae2274e4dee5830a..768bd8c3bc8fae0b3aa883d41a1f02b12bdeddb4 100755 (executable)
@@ -64,6 +64,10 @@ t-dgit import-dsc $dsc2 ..$branch
 t-dgit import-dsc $dsc2 +$branch
 check-imported $dsc2
 
+dsc3=$troot/pkg-srcs/example_1.0-1+brokenmeta.dsc
+t-dgit import-dsc $dsc3 +$branch
+check-imported $dsc3
+
 cd ..
 mkdir $p.2
 cd $p.2
index e58da5147ae4b7c9e7353dc2e8efa07a9d27c232..2649a313490d22a1aa941c262e0a68742c983576 100755 (executable)
@@ -3,7 +3,7 @@ set -e
 autoimport=
 . tests/lib
 
-t-dependencies man-db make groff git-debrebase
+t-dependencies man-db make groff git-debrebase git-debpush
 
 cd $root
 
@@ -22,14 +22,18 @@ run_man () {
        eval "$cmd 2>&1 >/dev/null |tee $errs"
 }
 
+cat >$tmp/always-expected <<'END'
+ERROR.*
+END
+
 for roff in $manpages; do
        for fmt in txt ps; do
-               >$tmp/$roff.$fmt-expected
+               cat $tmp/always-expected >$tmp/$roff.$fmt-expected
        done
 done
 
 expected () {
-       cat >$tmp/$2.$1-expected
+       cat >>$tmp/$2.$1-expected
 }
 
 not_egrep_vxPf () {
index 49476880aa2d446b282f330af9855ee896469b81..4aa756b0f2879dd1be870f0afd43f65be795935f 100755 (executable)
@@ -31,7 +31,9 @@ set -ex
 : $sentinel
 cat >&2 $sentinel
 shift # eat HOST
-sh -c "\$*"
+export SSH_ORIGINAL_COMMAND="\$*"
+exec \${DGIT_MIRROR_SSH_WRAP_TEST-dgit-mirror-ssh-wrap} \
+       '$tmp/git-mirror/' .git --
 END
 chmod +x $tmp/stunt-ssh
 
diff --git a/tests/tests/newtag-clone-nogit b/tests/tests/newtag-clone-nogit
deleted file mode 100755 (executable)
index 915f9d3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-set -e
-. tests/lib
-t-alt-test
diff --git a/tests/tests/oldnewtagalt b/tests/tests/oldnewtagalt
deleted file mode 100755 (executable)
index 6730918..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/bin/bash
-set -e
-. tests/lib
-
-t-setup-import examplegit
-t-tstunt-parsechangelog
-
-cd $p
-
-test-push () {
-       t-commit "$1"
-       t-dgit -wgf build-source
-       t-dgit push
-}
-
-for count in 1 2; do
-       t-oldtag
-       test-push "oldtag $count"
-
-       t-newtag
-       test-push "newtag $count"
-done
-
-t-ok
-
diff --git a/tests/tests/oldtag-clone-nogit b/tests/tests/oldtag-clone-nogit
deleted file mode 100755 (executable)
index 915f9d3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-set -e
-. tests/lib
-t-alt-test
index 06d1a987159dded6c3df000c1e1f197ff7164679..815c207bf999ae19e29c5cf85b2509a75790c13d 100755 (executable)
@@ -5,7 +5,6 @@ set -e
 t-tstunt-parsechangelog
 
 t-gbp-example-prep-no-ff
-t-newtag
 
 t-dgit --quilt=gbp --dgit-view-save=split.b build-source
 
index 87fcb35695b6f910b73be5d42268f7d98d319d40..048dfd207c49ecd0fce987935cc97ec32c051c2d 100755 (executable)
@@ -16,6 +16,6 @@ t-expect-fail E:'Push failed, while updating the remote git repository' \
 t-dgit -cdgit-distro.test-dummy.git-url=file:///dev/enoent/fail \
        push --new
 
-t-dgit push --new
+t-dgit push --new --force-reusing-version
 
 t-ok
index cf148f613ee6f3b6ac150828cefa86154f579e69..e502f6b2b21897efe4532233a6947a9f1402e0e0 100755 (executable)
@@ -25,11 +25,6 @@ t-gbp-example-prep
 t-expect-fail 'quilt fixup cannot be linear' \
   t-dgit build-source
 
-t-git-config dgit-distro.test-dummy.dgit-tag-format new
-t-expect-fail 'requires split view so server needs to support' \
-t-dgit -wgf --quilt=gbp build-source
-t-newtag
-
 t-dgit --quilt=gbp --dgit-view-save=split.b1 build-source
 git rev-parse split.b1
 
index 320a31c37b44521f7b4f7ca04fcbb0001021f76a..9c0359527e961daccd8223e3662bb7b19e2c7954 100755 (executable)
@@ -40,6 +40,6 @@ git apply --reverse debian/patches/debian-changes
 git commit -a -m 'go back to plain upstream'
 
 t-dgit -wgf build-source
-t-dgit --damp-run push
+t-dgit --damp-run --force-reusing-version push
 
 t-ok
index 6886cf89652d6a222b0eb3b38aa36df58581af3d..f8d8091f38504324a7e57fe1cc81a389185afebe 100755 (executable)
@@ -12,8 +12,6 @@ suitespecs+=' stable'
 
 t-tstunt-parsechangelog
 
-t-newtag
-
 # Easiest way to make a patches-unapplied but not-gbp tree is
 # to take the patches-unapplied tree and by-hand commit the .gitignore
 # changes as a debian patch.
@@ -29,7 +27,7 @@ want-success () {
        t-dgit "$@" --quilt=$qmode --dgit-view-save=split.b build-source
 
        t-dgit "$@" --quilt=$qmode --dgit-view-save=split.p push
-       t-$qmode-pushed-good
+       t-$qmode-pushed-good $suite
 }
 
 
diff --git a/tests/tests/rpush-quilt b/tests/tests/rpush-quilt
new file mode 100755 (executable)
index 0000000..bb49fc6
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-tstunt-parsechangelog
+
+t-gbp-example-prep
+
+t-dgit -wgf --quilt=gbp --dgit-view-save=split.b build-source
+
+mkdir $tmp/empty
+cd $tmp/empty
+t-dgit --quilt=gbp --dgit-view-save=split.p \
+       --ssh=$troot/ssh rpush somehost:$tmp/$p
+
+cd $tmp/$p
+t-gbp-pushed-good
+
+t-ok
diff --git a/tests/tests/tagupl b/tests/tests/tagupl
new file mode 100755 (executable)
index 0000000..9d3e45a
--- /dev/null
@@ -0,0 +1,187 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies DEBORIG git-debpush
+
+t-debpolicy
+
+t-archive-none example
+t-git-none
+t-worktree 1.0
+
+v=1.0-1
+
+cd $p
+git checkout -b native 
+
+git checkout --orphan upstream quilt-tip-2
+git rm -rf debian
+git commit -m 'pseudo-upstream'
+upstreamtag=UPSTREAM/RELEASE/1.0
+git tag $upstreamtag
+
+git checkout -B master quilt-tip-2
+
+echo foo >bar
+git add bar
+git commit -m"corrupt the upstream source to test upstream-nonidentical check"
+
+t-tagupl-settings
+
+tagname=test-dummy/$v
+
+t-expect-fail "the upstream source in tag $upstreamtag is not identical to the upstream source in refs/heads/master" \
+t-tagupl-test --quilt=gbp --upstream=$upstreamtag
+
+git reset --hard HEAD~1
+
+t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
+t-tagupl-test --quilt=gbp --upstream=$upstreamtag
+
+t-expect-fail "upstream tag $upstreamtag is not an ancestor of refs/heads/master" \
+t-tagupl-test --quilt=gbp --force=suite --force=no-such-force-option --upstream=$upstreamtag
+
+t-tagupl-test --quilt=gbp --force=suite --force=no-such-force-option-1 \
+              --force=upstream-nonancestor,no-such-force-option-2 \
+              --upstream=$upstreamtag
+t-pushed-good master
+
+# todo: test each miss/rejection
+
+ident=ok
+
+git cat-file tag $tagname >../basetag
+v=1.0-2
+tagname=test-dummy/$v
+
+perl -i -ne '
+       next if $.==1../^$/;
+       next if m/^----/..0;
+       s/\b1\.0-1\b/1.0-2/g;
+       print or die $!;
+' ../basetag
+
+mv-ident () {
+       local f=$tmp/$1
+       if test -e $f; then
+               mv $f $f--$ident
+       fi
+}
+
+next-mangle () {
+       mv-ident tagupl/overall.log
+       mv-ident sendmail.log
+       ident=$1
+}
+
+with-mangled () {
+       local perl=$1
+       perl <../basetag >../badtag-$ident -pe "$perl"
+       git tag -u Senatus -f -s -m "$(cat ../badtag-$ident)" "$tagname"
+
+       LC_MESSAGES=C \
+       t-tagupl-run-drs $tmp/$p
+}
+
+expect-quit () {
+       next-mangle "$1"
+       local perl=$2
+       local mregexp=$3
+       with-mangled "$perl"
+       egrep ": $mregexp" ../tagupl/overall.log
+}
+
+expect-email () {
+       next-mangle "$1"
+       local perl=$2
+       local mregexp=$3
+       with-mangled "$perl"
+       egrep 'Was not successful' ../sendmail.log
+       egrep "$mregexp" ../sendmail.log
+       egrep ": failed, emailed" ../tagupl/overall.log
+}
+
+raw-mangled () {
+       git update-ref refs/tags/$tagname \
+               $(git hash-object -w -t tag ../tagobj-$ident)
+       t-tagupl-run-drs $tmp/$p
+}
+
+tagname=test-dummy/1.2
+t-expect-fail E:'failed command: git fetch' \
+t-tagupl-run-drs $tmp/$p
+
+tagname=splorf/$v     ; expect-quit baddistro '' 'tag name not for us'
+tagname=test-dummy/1,2; expect-quit badver    '' 'tag name not for us'
+tagname=test-dummy/$v
+
+expect-quit noplease s/please-upload/plunk/ 'tag missing please-upload'
+
+expect-email vermatch 's/^example release /$&3/' 'reject: version mismatch'
+
+expect-email unkinfo 's/^\[dgit please-upload/$& Rejectme/' \
+       'unknown dgit info in tag'
+
+expect-quit unkdistro 's/test-dummy/ubuntu/ if m/^\[dgit/' \
+       'not for this distro'
+
+expect-email notsplit 's/ split / no-split /' 'reject: missing "split"'
+
+expect-email upsnot1 's/ upstream=/ uxstream=/' \
+       'reject: upstream tag and not commitish'
+
+expect-email upsnot2 's/ upstream-tag=/ uxstream-tag=/' \
+       'reject: upstream tag and not commitish'
+
+expect-email bupstag1 's/ upstream-tag=/$&:/' \
+       "failed command: git check-ref-format"
+
+expect-email bupstag2 's/ upstream-tag=/$&x/' \
+       "[Cc]ouldn't find remote ref refs/tags/xUPSTREAM"
+
+expect-email wrongver '' 'mismatch: changelog Version'
+
+v=1.0-2
+
+t-dch-commit -v $v -m bump
+
+expect-email upsmism 's/ upstream=/$&3/' \
+       "but tag refers to"
+
+expect-email wrongpkg 's/^example /explosive /' 'mismatch: changelog Source'
+
+# we are going to trash $p because it will contain corrupted objects
+# which makes our end-of-test fsck fail
+cp -al ../$p ../$p.save
+cd ../$p
+
+git cat-file tag $tagname >../raw-base
+
+next-mangle sigfail
+perl -pe <../raw-base >../tagobj-$ident 's/ split / split ignoreme /'
+raw-mangled
+grep 'gpgv: BAD signature' ../sendmail.log
+
+next-mangle nosig
+perl -ne <../raw-base >../tagobj-$ident 'print unless m/^-----/..0'
+raw-mangled
+grep 'missing signature' ../sendmail.log
+
+git cat-file tag test-dummy/1.0-1 >../raw-base
+
+next-mangle badtagger
+perl -pe <../raw-base '
+       s/\+\d+$/xyz/ if m/^tagger /;
+       exit 0 if m/^$/;
+' >../tagobj-$ident
+echo >>../tagobj-$ident
+cat ../basetag >>../tagobj-$ident
+raw-mangled
+grep 'failed to fish tagger out of tag' ../tagupl/overall.log
+
+cd ..
+rm -rf $p
+mv $p.save $p
+
+t-ok
diff --git a/tests/tests/tagupl-baredebian b/tests/tests/tagupl-baredebian
new file mode 100755 (executable)
index 0000000..b485abb
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies quilt git-debpush
+
+t-debpolicy
+
+t-setup-import baredebian
+
+cd $p
+
+baredebian-test-vars
+t-tagupl-settings
+
+baredebian-test-minimum
+baredebian-test-core-prepush
+
+
+sed -i '15icorruption' debian/patches/0002-Edit-the-.c-file.patch
+git add debian/patches/0002-Edit-the-.c-file.patch
+git commit -m"corrupt a quilt patch to test the patches-applicable check"
+
+tagname=test-dummy/$v
+
+t-expect-fail "'git apply' failed to apply patch 0002-Edit-the-.c-file.patch ('patches-applicable' check)" \
+t-tagupl-test --baredebian
+
+git reset --hard HEAD~1
+
+t-tagupl-test --baredebian
+
+git branch split.p dgit/dgit/sid # we didn't generate this here
+
+baredebian-test-core-postpush
+
+t-ok
diff --git a/tests/tests/tagupl-gbp b/tests/tests/tagupl-gbp
new file mode 100755 (executable)
index 0000000..a4ecb09
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash
+set -e
+. tests/lib
+. $troot/lib-baredebian
+
+t-dependencies git-debpush DEBORIG
+
+t-setup-import gbp
+
+t-debpolicy
+
+cd $p
+
+git deborig
+
+t-dgit -wgf --quilt=gbp --dgit-view-save=split.b quilt-fixup
+
+t-tagupl-settings
+
+tagname=test-dummy/$v
+
+t-tagupl-test --gbp
+
+git branch split.p dgit/dgit/sid # we didn't generate this here
+
+t-gbp-pushed-good sid
+
+t-ok
diff --git a/tests/tests/tagupl-native b/tests/tests/tagupl-native
new file mode 100755 (executable)
index 0000000..e8a25c7
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash
+set -e
+. tests/lib
+
+t-dependencies git-debpush
+
+t-debpolicy
+
+t-archive-none example
+t-git-none
+t-worktree 1.1
+
+v=1.0-1
+
+cd $p
+git checkout -B master
+
+t-tagupl-settings
+
+printf '%s\n' -sn >debian/source/options
+git add debian/source/options
+git rm -f debian/source/format
+git commit -m 'convert to 1.0 native'
+
+tagname=test-dummy/$v
+
+t-tagupl-test
+t-pushed-good master
+
+t-ok
index 2a1012b69ef68366cd62dd910776e9604c55d3d3..a2d280d229d40741731a168619b8093b7d365a61 100755 (executable)
@@ -27,7 +27,7 @@ t-dgit push
 
 git checkout $tagpfx/1.0
 t-dgit build
-t-dgit push --deliberately-fresh-repo
+t-dgit push --deliberately-fresh-repo --force-reusing-version
 
 remote="`git config dgit-distro.test-dummy.git-url`/$p.git"
 
diff --git a/tests/tstunt/dgit b/tests/tstunt/dgit
new file mode 100755 (executable)
index 0000000..3a9751d
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+# NB This requires use of t-chain-test-somehow.
+set -ex
+oldpwd=$(pwd)
+cd "$DGIT_TEST_TROOT/.."
+. tests/lib
+cd "$oldpwd"
+trap '' EXIT # preserves our exit status
+t-dgit "$@"
diff --git a/tests/tstunt/sendmail b/tests/tstunt/sendmail
new file mode 100755 (executable)
index 0000000..6df9747
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+set -e
+exec >>"$DGIT_TEST_TMP/sendmail.log"
+echo '----------------------------------------------------------------'
+date
+printf "sendmail %s\n" "$*"
+cat
+echo