summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2018-10-10 08:40:06 -0700
committerSean Whitton <spwhitton@spwhitton.name>2018-10-10 08:40:06 -0700
commitbd5ec77ecd3c3377d7473ae055b88325aef3696b (patch)
treed6281cf838da6b8c5e218a1e7615d682c1a4dc89
parent11a5cbb0e28d391324948cec33b1d40499f16d3b (diff)
parentfa303f348f6fe529cafdc5b91f9a15bddefd2b56 (diff)
Merge tag 'debian/7.0' into stretch-bpo
dgit release 7.0 for unstable (sid) [dgit] [dgit distro=debian] # gpg: Signature made Thu 04 Oct 2018 12:36:14 PM MST # gpg: using RSA key 559AE46C2D6B6D3265E7CBA1E3E3392348B50D39 # gpg: Can't check signature: No public key
-rw-r--r--.gitignore3
-rw-r--r--Debian/Dgit.pm152
-rw-r--r--Debian/Dgit/I18n.pm28
-rw-r--r--Makefile12
-rw-r--r--debian/changelog51
-rw-r--r--debian/control7
-rw-r--r--debian/copyright28
-rw-r--r--debian/dgit.install4
-rw-r--r--debian/git-debrebase.install4
-rwxr-xr-xdebian/rules10
-rw-r--r--debian/tests/control10
-rwxr-xr-xdgit1430
-rwxr-xr-xgit-debrebase469
-rw-r--r--git-debrebase.1.pod13
-rw-r--r--i18n-common.make23
-rwxr-xr-xi18n-diff-auditor532
-rw-r--r--po/.gitignore6
-rw-r--r--po/Makefile125
-rw-r--r--po/README123
-rw-r--r--po/en_US.po2079
-rw-r--r--po/messages.pot2079
-rw-r--r--po/part.make16
-rwxr-xr-xpo/remove-potcdate11
-rw-r--r--po4a/.gitignore5
-rw-r--r--po4a/Makefile127
l---------po4a/README1
-rw-r--r--po4a/dgit-downstream-dsc_7.pot624
-rw-r--r--po4a/dgit-maint-debrebase_7.pot1287
-rw-r--r--po4a/dgit-maint-gbp_7.pot295
-rw-r--r--po4a/dgit-maint-merge_7.pot860
-rw-r--r--po4a/dgit-maint-native_7.pot221
-rw-r--r--po4a/dgit-nmu-simple_7.pot249
-rw-r--r--po4a/dgit-sponsorship_7.pot527
-rw-r--r--po4a/dgit-user_7.pot707
-rw-r--r--po4a/dgit_1.pot2645
-rw-r--r--po4a/dgit_7.pot874
-rw-r--r--po4a/git-debrebase_1.pot1022
-rw-r--r--po4a/git-debrebase_5.pot1127
-rwxr-xr-xpo4a/install-documents27
-rwxr-xr-xpo4a/list-documents45
-rw-r--r--po4a/po4a.cfg18
-rwxr-xr-xtests/enumerate-tests1
-rw-r--r--tests/lib8
-rw-r--r--tests/lib-restricts6
-rwxr-xr-xtests/tests/gdr-makepatches78
-rwxr-xr-xtests/tests/i18n-messages41
-rwxr-xr-xtests/tests/i18n-po4a-uptodate11
-rwxr-xr-xtests/tests/package-build14
48 files changed, 17003 insertions, 962 deletions
diff --git a/.gitignore b/.gitignore
index a635e97..b8b1af6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
*~
tests/tmp
+debian/tmp
debian/dgit
debian/git-debrebase
debian/dgit-infrastructure
@@ -7,6 +8,7 @@ debian/files
debian/*.substvars
debian/*.log
debian/debhelper-build-stamp
+debian/.debhelper
dgit-user.7
dgit-nmu-simple.7
dgit-maint-native.7
@@ -18,3 +20,4 @@ dgit-downstream-dsc.7
git-debrebase.1
git-debrebase.5
substituted
+.po4a.translated-only
diff --git a/Debian/Dgit.pm b/Debian/Dgit.pm
index 91d4c71..39c4598 100644
--- a/Debian/Dgit.pm
+++ b/Debian/Dgit.pm
@@ -33,6 +33,7 @@ use File::Path;
use File::Basename;
use Dpkg::Control::Hash;
use Debian::Dgit::ExitStatus;
+use Debian::Dgit::I18n;
BEGIN {
use Exporter ();
@@ -147,18 +148,18 @@ sub setup_sigwarn () {
sub initdebug ($) {
($debugprefix) = @_;
- open DEBUG, ">/dev/null" or die $!;
+ open DEBUG, ">/dev/null" or confess $!;
}
sub enabledebug () {
- open DEBUG, ">&STDERR" or die $!;
+ open DEBUG, ">&STDERR" or confess $!;
DEBUG->autoflush(1);
$debuglevel ||= 1;
}
sub enabledebuglevel ($) {
my ($newlevel) = @_; # may be undef (eg from env var)
- die if $debuglevel;
+ confess if $debuglevel;
$newlevel //= 0;
$newlevel += 0;
return unless $newlevel;
@@ -180,7 +181,7 @@ sub printdebug {
print DEBUG $debugprefix unless $printdebug_noprefix;
pop @_ while @_ and !length $_[-1];
return unless @_;
- print DEBUG @_ or die $!;
+ print DEBUG @_ or confess $!;
$printdebug_noprefix = $_[-1] !~ m{\n$};
}
@@ -197,7 +198,7 @@ sub messagequote ($) {
sub shellquote {
my @out;
local $_;
- defined or confess 'internal error' foreach @_;
+ defined or confess __ 'internal error' foreach @_;
foreach my $a (@_) {
$_ = $a;
if (!length || m{[^-=_./:0-9a-z]}i) {
@@ -213,9 +214,9 @@ sub shellquote {
sub printcmd {
my $fh = shift @_;
my $intro = shift @_;
- print $fh $intro," " or die $!;
- print $fh shellquote @_ or die $!;
- print $fh "\n" or die $!;
+ print $fh $intro," " or confess $!;
+ print $fh shellquote @_ or confess $!;
+ print $fh "\n" or confess $!;
}
sub debugcmd {
@@ -283,7 +284,7 @@ sub stat_exists ($) {
my ($f) = @_;
return 1 if stat $f;
return 0 if $!==&ENOENT;
- die "stat $f: $!";
+ confess "stat $f: $!";
}
sub _us () {
@@ -291,7 +292,7 @@ sub _us () {
}
sub failmsg {
- my $s = "error: @_\n";
+ my $s = f_ "error: %s\n", "@_";
$s =~ s/\n\n$/\n/g;
my $prefix = _us().": ";
$s =~ s/^/$prefix/gm;
@@ -306,12 +307,12 @@ sub ensuredir ($) {
my ($dir) = @_; # does not create parents
return if mkdir $dir;
return if $! == EEXIST;
- die "mkdir $dir: $!";
+ confess "mkdir $dir: $!";
}
sub must_getcwd () {
my $d = getcwd();
- defined $d or fail "getcwd failed: $!";
+ defined $d or fail f_ "getcwd failed: %s\n", $!;
return $d;
}
@@ -330,32 +331,32 @@ our @signames = split / /, $Config{sig_name};
sub waitstatusmsg () {
if (!$?) {
- return "terminated, reporting successful completion";
+ return __ "terminated, reporting successful completion";
} elsif (!($? & 255)) {
- return "failed with error exit status ".WEXITSTATUS($?);
+ return f_ "failed with error exit status %s", WEXITSTATUS($?);
} elsif (WIFSIGNALED($?)) {
my $signum=WTERMSIG($?);
- return "died due to fatal signal ".
+ return f_ "died due to fatal signal %s",
($signames[$signum] // "number $signum").
($? & 128 ? " (core dumped)" : ""); # POSIX(3pm) has no WCOREDUMP
} else {
- return "failed with unknown wait status ".$?;
+ return f_ "failed with unknown wait status %s", $?;
}
}
sub failedcmd_report_cmd {
my $intro = shift @_;
- $intro //= "failed command";
- { local ($!); printcmd \*STDERR, _us().": $intro:", @_ or die $!; };
+ $intro //= __ "failed command";
+ { local ($!); printcmd \*STDERR, _us().": $intro:", @_ or confess $!; };
}
sub failedcmd_waitstatus {
if ($? < 0) {
- return "failed to fork/exec: $!";
+ return f_ "failed to fork/exec: %s", $!;
} elsif ($?) {
- return "subprocess ".waitstatusmsg();
+ return f_ "subprocess %s", waitstatusmsg();
} else {
- return "subprocess produced invalid output";
+ return __ "subprocess produced invalid output";
}
}
@@ -390,11 +391,11 @@ sub cmdoutput_errok {
confess Dumper(\@_)." ?" if grep { !defined } @_;
local $printdebug_when_debuglevel = $debugcmd_when_debuglevel;
debugcmd "|",@_;
- open P, "-|", @_ or die "$_[0] $!";
+ open P, "-|", @_ or confess "$_[0] $!";
my $d;
$!=0; $?=0;
{ local $/ = undef; $d = <P>; }
- die $! if P->error;
+ confess $! if P->error;
if (!close P) { printdebug "=>!$?\n"; return undef; }
chomp $d;
if ($debuglevel > 0) {
@@ -421,7 +422,7 @@ sub link_ltarget ($$) {
}
my $r = link $old, $new;
$r = symlink $old, $new if !$r && $!==EXDEV;
- $r or die "(sym)link $old $new: $!";
+ $r or fail "(sym)link $old $new: $!\n";
}
sub hashfile ($) {
@@ -454,18 +455,18 @@ 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 die $!;
+ $gcf_pid = open2 $gcf_o, $gcf_i, @cmd or confess $!;
}
printdebug "GCF>| ", $objname, "\n";
- print $gcf_i $objname, "\n" or die $!;
+ print $gcf_i $objname, "\n" or confess $!;
my $x = <$gcf_o>;
printdebug "GCF<| ", $x;
if ($x =~ m/ (missing)$/) { return $chk->($1, undef); }
- my ($type, $size) = $x =~ m/^.* (\w+) (\d+)\n/ or die "$objname ?";
+ my ($type, $size) = $x =~ m/^.* (\w+) (\d+)\n/ or confess "$objname ?";
my $data;
- (read $gcf_o, $data, $size) == $size or die "$objname $!";
+ (read $gcf_o, $data, $size) == $size or confess "$objname $!";
$x = <$gcf_o>;
- $x eq "\n" or die "$objname ($_) $!";
+ $x eq "\n" or confess "$objname ($_) $!";
return $chk->($type, $data);
}
@@ -493,22 +494,22 @@ sub git_for_each_ref ($$;$) {
if (defined $gitdir) {
@cmd = ('sh','-ec','cd "$1"; shift; exec "$@"','x', $gitdir, @cmd);
}
- open GFER, "-|", @cmd or die $!;
+ open GFER, "-|", @cmd or confess $!;
debugcmd "|", @cmd;
while (<GFER>) {
- chomp or die "$_ ?";
+ chomp or confess "$_ ?";
printdebug "|> ", $_, "\n";
- m#^(\w+)\s+(\w+)\s+(refs/[^/]+/(\S+))$# or die "$_ ?";
+ m#^(\w+)\s+(\w+)\s+(refs/[^/]+/(\S+))$# or confess "$_ ?";
$func->($1,$2,$3,$4);
}
- $!=0; $?=0; close GFER or die "$pattern $? $!";
+ $!=0; $?=0; close GFER or confess "$pattern $? $!";
}
sub git_get_ref ($) {
# => '' if no such ref
my ($refname) = @_;
local $_ = $refname;
- s{^refs/}{[r]efs/} or die "$refname $_ ?";
+ s{^refs/}{[r]efs/} or confess "$refname $_ ?";
return cmdoutput qw(git for-each-ref --format=%(objectname)), $_;
}
@@ -540,8 +541,8 @@ sub git_check_unmodified () {
if ($?==256) {
fail
$cached
- ? "git index contains changes (does not match HEAD)"
- : "working tree is dirty (does not match HEAD)";
+ ? __ "git index contains changes (does not match HEAD)"
+ : __ "working tree is dirty (does not match HEAD)";
} else {
failedcmd @cmd;
}
@@ -591,11 +592,11 @@ sub git_slurp_config_src ($) {
local $/="\0";
my $r = { };
- open GITS, "-|", @cmd or die $!;
+ open GITS, "-|", @cmd or confess $!;
while (<GITS>) {
- chomp or die;
+ chomp or confess;
printdebug "=> ", (messagequote $_), "\n";
- m/\n/ or die "$_ ?";
+ m/\n/ or confess "$_ ?";
push @{ $r->{$`} }, $'; #';
}
$!=0; $?=0;
@@ -612,8 +613,8 @@ sub gdr_ffq_prev_branchinfo ($) {
# branch message is undef
# weird-symref } no $symref,
# notbranch } no $ffq_prev
- return ('detached', 'detached HEAD') unless defined $symref;
- return ('weird-symref', 'HEAD symref is not to refs/')
+ return ('detached', __ 'detached HEAD') unless defined $symref;
+ return ('weird-symref', __ 'HEAD symref is not to refs/')
unless $symref =~ m{^refs/};
my $ffq_prev = "refs/$ffq_refprefix/$'";
my $gdrlast = "refs/$gdrlast_refprefix/$'";
@@ -629,17 +630,19 @@ sub parsecontrolfh ($$;$) {
my %opts = ('name' => $desc);
$opts{allow_pgp}= $allowsigned || !$dpkgcontrolhash_noissigned;
$c = Dpkg::Control::Hash->new(%opts);
- $c->parse($fh,$desc) or die "parsing of $desc failed";
+ $c->parse($fh,$desc) or fail f_ "parsing of %s failed", $desc;
last if $allowsigned;
last if $dpkgcontrolhash_noissigned;
my $issigned= $c->get_option('is_pgp_signed');
if (!defined $issigned) {
$dpkgcontrolhash_noissigned= 1;
- seek $fh, 0,0 or die "seek $desc: $!";
+ seek $fh, 0,0 or confess "seek $desc: $!";
} elsif ($issigned) {
- fail "control file $desc is (already) PGP-signed. ".
+ fail f_
+ "control file %s is (already) PGP-signed. ".
" Note that dgit push needs to modify the .dsc and then".
- " do the signature itself";
+ " do the signature itself",
+ $desc;
} else {
last;
}
@@ -650,9 +653,9 @@ sub parsecontrolfh ($$;$) {
sub parsecontrol {
my ($file, $desc, $allowsigned) = @_;
my $fh = new IO::Handle;
- open $fh, '<', $file or die "$file: $!";
+ open $fh, '<', $file or fail f_ "open %s (%s): %s", $file, $desc, $!;
my $c = parsecontrolfh($fh,$desc,$allowsigned);
- $fh->error and die $!;
+ $fh->error and confess $!;
close $fh;
return $c;
}
@@ -661,7 +664,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 die $!;
+ open $p, '-|', @cmd or confess $!;
$c->parse($p);
$?=0; $!=0; close $p or failedcmd @cmd;
return $c;
@@ -671,7 +674,7 @@ sub getfield ($$) {
my ($dctrl,$field) = @_;
my $v = $dctrl->{$field};
return $v if defined $v;
- fail "missing field $field in ".$dctrl->get_option('name');
+ fail f_ "missing field %s in %s", $field, $dctrl->get_option('name');
}
sub parsechangelog_loop ($$$) {
@@ -679,19 +682,19 @@ sub parsechangelog_loop ($$$) {
# @$clogcmd is qw(dpkg-parsechangelog ...some...options...)
# calls $fn->($thisstanza, $desc);
debugcmd "|",@$clogcmd;
- open CLOGS, "-|", @$clogcmd or die $!;
+ open CLOGS, "-|", @$clogcmd or confess $!;
for (;;) {
my $stanzatext = do { local $/=""; <CLOGS>; };
printdebug "clogp stanza ".Dumper($stanzatext) if $debuglevel>1;
last if !defined $stanzatext;
my $desc = "$descbase, entry no.$.";
- open my $stanzafh, "<", \$stanzatext or die;
+ open my $stanzafh, "<", \$stanzatext or confess;
my $thisstanza = parsecontrolfh $stanzafh, $desc, 1;
$fn->($thisstanza, $desc);
}
- die $! if CLOGS->error;
+ confess $! if CLOGS->error;
close CLOGS or $?==SIGPIPE or failedcmd @$clogcmd;
}
@@ -701,18 +704,18 @@ sub make_commit_text ($) {
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 die $!;
+ my $child = open2($out, $in, @cmd) or confess $!;
my $h;
eval {
- print $in $text or die $!;
- close $in or die $!;
+ print $in $text or confess $!;
+ close $in or confess $!;
$h = <$out>;
- $h =~ m/^\w+$/ or die;
+ $h =~ m/^\w+$/ or confess;
$h = $&;
printdebug "=> $h\n";
};
close $out;
- waitpid $child, 0 == $child or die "$child $!";
+ waitpid $child, 0 == $child or confess "$child $!";
$? and failedcmd @cmd;
return $h;
}
@@ -727,7 +730,7 @@ sub reflog_cache_insert ($$$) {
my $parent = $ref; $parent =~ s{/[^/]+$}{};
ensuredir "$maindir_gitcommon/logs/$parent";
my $makelogfh = new IO::File "$maindir_gitcommon/logs/$ref", '>>'
- or die $!;
+ or confess $!;
my $oldcache = git_get_ref $ref;
@@ -736,12 +739,13 @@ 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 <<END;
+ my $dummy = make_commit_text <<ENDU.(__ <<END);
tree $tree
parent $value
author $authline
committer $authline
+ENDU
Dummy commit - do not use
END
runcmd qw(git update-ref -m), _us()." - dummy", $ref, $dummy;
@@ -755,15 +759,15 @@ 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 die $!;
+ my $child = open GC, "-|"; defined $child or confess $!;
if (!$child) {
- chdir $maindir or die $!;
+ chdir $maindir or confess $!;
if (!stat "$maindir_gitcommon/logs/$ref") {
- $! == ENOENT or die $!;
+ $! == ENOENT or confess $!;
printdebug ">(no reflog)\n";
finish 0;
}
- exec @cmd; die $!;
+ exec @cmd; die f_ "exec %s: %s\n", $cmd[0], $!;
}
while (<GC>) {
chomp;
@@ -772,7 +776,7 @@ sub reflog_cache_lookup ($$) {
close GC;
return $1;
}
- die $! if GC->error;
+ confess $! if GC->error;
failedcmd unless close GC;
return undef;
}
@@ -831,7 +835,7 @@ sub record_maindir () {
if (!defined $maindir) {
$maindir = must_getcwd();
if (!stat "$maindir/.git") {
- fail "cannot stat $maindir/.git: $!";
+ fail f_ "cannot stat %s/.git: %s", $maindir, $!;
}
if (-d _) {
# we fall back to this in case we have a pre-worktree
@@ -853,15 +857,16 @@ sub ensure_a_playground_parent ($) {
record_maindir();
$spc = "$maindir_gitdir/$spc";
my $parent = dirname $spc;
- mkdir $parent or $!==EEXIST
- or fail "failed to mkdir playground parent $parent: $!";
+ mkdir $parent or $!==EEXIST or fail f_
+ "failed to mkdir playground parent %s: %s", $parent, $!;
return $spc;
}
sub ensure_a_playground ($) {
my ($spc) = @_;
$spc = ensure_a_playground_parent $spc;
- mkdir $spc or $!==EEXIST or fail "failed to mkdir a playground $spc: $!";
+ mkdir $spc or $!==EEXIST or fail f_
+ "failed to mkdir a playground %s: %s", $spc, $!;
return $spc;
}
@@ -869,7 +874,8 @@ sub fresh_playground ($) {
my ($spc) = @_;
$spc = ensure_a_playground_parent $spc;
rmtree $spc;
- mkdir $spc or fail "failed to mkdir the playground $spc: $!";
+ mkdir $spc or fail f_
+ "failed to mkdir the playground %s: %s", $spc, $!;
return $spc;
}
@@ -896,11 +902,11 @@ sub playtree_setup (;$) {
# $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 die $!;
+ symlink "$maindir_gitcommon/objects",'.git/objects' or confess $!;
ensuredir '.git/info';
- open GA, "> .git/info/attributes" or die $!;
- print GA "* $negate_harmful_gitattrs\n" or die $!;
- close GA or die $!;
+ open GA, "> .git/info/attributes" or confess $!;
+ print GA "* $negate_harmful_gitattrs\n" or confess $!;
+ close GA or confess $!;
}
1;
diff --git a/Debian/Dgit/I18n.pm b/Debian/Dgit/I18n.pm
new file mode 100644
index 0000000..e8068ff
--- /dev/null
+++ b/Debian/Dgit/I18n.pm
@@ -0,0 +1,28 @@
+# -*- perl -*-
+
+package Debian::Dgit::I18n;
+
+# This module provides
+# __ a function which is an alias for gettext
+# f_ sprintf wrapper that gettexts the format
+# i_ identify function, but marks string for translation
+#
+# In perl the sub `_' is a `superglobal', which means there
+# is only one of it in the whole program and every reference
+# is to the same one. So it's not really useable in modules.
+# Hence __.
+
+use Locale::gettext;
+
+BEGIN {
+ use Exporter;
+ @ISA = qw(Exporter);
+ @EXPORT = qw(__ f_ i_);
+}
+
+
+sub __ ($) { gettext @_; }
+sub i_ ($) { $_[0]; }
+sub f_ ($$;@) { my $f = shift @_; sprintf +(gettext $f), @_; }
+
+1;
diff --git a/Makefile b/Makefile
index 934ead1..a0854a1 100644
--- a/Makefile
+++ b/Makefile
@@ -45,14 +45,18 @@ MAN7PAGES=dgit.7 \
dgit-sponsorship.7
TXTDOCS=README.dsc-import
-PERLMODULES=Debian/Dgit.pm Debian/Dgit/ExitStatus.pm
+PERLMODULES= \
+ Debian/Dgit.pm \
+ Debian/Dgit/ExitStatus.pm \
+ Debian/Dgit/I18n.pm
ABSURDITIES=git
GDR_PROGRAMS=git-debrebase
GDR_PERLMODULES= \
Debian/Dgit.pm \
Debian/Dgit/GDR.pm \
- Debian/Dgit/ExitStatus.pm
+ Debian/Dgit/ExitStatus.pm \
+ Debian/Dgit/I18n.pm
GDR_MAN1PAGES=git-debrebase.1
GDR_MAN5PAGES=git-debrebase.5
@@ -123,6 +127,10 @@ installdirs-infra:
list-manpages:
@echo $(MANPAGES)
+i18n i18n-update:
+ $(MAKE) -C po update
+ $(MAKE) -C po4a update
+
check installcheck:
clean distclean mostlyclean maintainer-clean:
diff --git a/debian/changelog b/debian/changelog
index 84c0d51..c2ddaef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,54 @@
+dgit (7.0) unstable; urgency=medium
+
+ Bugfixes:
+ * dgit: Do not sometimes crash in quilt-fixup if git-debrebase
+ is not installed. Closes:#910221.
+ * git-debrebase: new-upstream: Drop `sleep 2' (!)
+ * git-debrebase: anchor: Print the anchor, not the breakwater tip (!)
+ * Get rid of perl warning "Statement unlikely to be reached"
+ (introduced in 7.0~pre1).
+ * git-debrebase: merges: Make warnings of lossage less overblown
+
+ i18n (translation):
+ * Support message translation for git-debrebase. (Re #904883.)
+ * Support document translation. Closes:#904883.
+ * po: Rename `all-po' target to `pofiles'
+
+ Error message improvements (prompted by i18n work)
+ * Replaced `die' with `confess' in many unexpected syscall errors
+ and internal error cases.
+ * git-debrebase; Print a proper message for failure to opendir
+ the bpd and for failure to chdir to the toplevel.
+
+ Internal changes:
+ * Minor refactoring to support translation.
+ * i18n-diff-auditor: New script to support translation markup.
+
+ Packaging:
+ * Use dh_missing --fail-missing
+ * Add missing build-dependency on xgettext
+
+ Test suite:
+ * gdr-makepatches7: Fixes to dgit/git-debrebase interaction
+ * gdr-makepatches7: Test dgit with missing git-debrebase
+ * Test that the binary packages can be built
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk> Thu, 04 Oct 2018 20:33:12 +0100
+
+dgit (7.0~pre1) experimental; urgency=medium
+
+ * i18n: Support messgae translation for the program dgit.
+ (Working towards #904883.)
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk> Tue, 02 Oct 2018 13:20:24 +0100
+
+dgit (6.12) unstable; urgency=medium
+
+ * test suite: t-check-only-bpd: Check $tmp/.. not .. . Fixes bogus
+ failure in Ubuntu CI. Thanks to Mattia Rizzolo for the report.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk> Fri, 28 Sep 2018 18:17:36 +0100
+
dgit (6.11~bpo9+1) stretch-backports; urgency=medium
* Rebuild for stretch-backports.
diff --git a/debian/control b/debian/control
index 5bc2a65..62a4a11 100644
--- a/debian/control
+++ b/debian/control
@@ -3,7 +3,7 @@ Section: devel
Priority: optional
Maintainer: Ian Jackson <ijackson@chiark.greenend.org.uk>
Standards-Version: 3.9.4.0
-Build-Depends: debhelper (>= 9)
+Build-Depends: debhelper (>= 9), gettext, po4a
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/
@@ -11,6 +11,7 @@ Vcs-Browser: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git/dgit.git/
Package: dgit
Depends: perl, libwww-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,
@@ -28,6 +29,7 @@ Description: git interoperability with the Debian archive
Package: git-debrebase
Depends: perl, git-core, libdpkg-perl, libfile-fnmatch-perl, devscripts,
+ liblocale-gettext-perl,
${misc:Depends}
Recommends: dgit, git-buildpackage
Architecture: all
@@ -38,7 +40,8 @@ Description: rebasing git workflow tool for Debian packaging
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
+ libwww-perl, libdpkg-perl,
+ liblocale-gettext-perl
Recommends: dgit
Architecture: all
Priority: extra
diff --git a/debian/copyright b/debian/copyright
index c5b10a1..f5c879d 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -3,6 +3,9 @@ Integration between git and Debian-style archives
Copyright (C)2013-2018 Ian Jackson
Copyright (C)2016-2018 Sean Whitton
+Copyright (C)1999-2010 Joey Hess
+Copyright (C)2004-2010 Colin Watson
+
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
@@ -24,6 +27,31 @@ Debian metadata, by Bill Alombert, with a licence statement saying
it's GPL (implicitly GPLv3 compatible).
+Some of the i18n build system was copied from the Debian debconf
+package, which has the BSD-2-clause (GPLv3-compatible) licence:
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ .
+ THIS SOFTWARE IS PROVIDED BY AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+
+
Contributions are accepted upstram under the same terms; please sign
off your patches (by writing an approprite Signed-Off-By tag in your
commit message or patch submission) to indicate your attestation that
diff --git a/debian/dgit.install b/debian/dgit.install
new file mode 100644
index 0000000..622e876
--- /dev/null
+++ b/debian/dgit.install
@@ -0,0 +1,4 @@
+usr/share/locale/*/LC_MESSAGES/dgit.mo
+
+# usr/share/man/*/man*/dgit*.[1-9]
+# ^ translated manpages. This has to be un-commented when they appear.
diff --git a/debian/git-debrebase.install b/debian/git-debrebase.install
new file mode 100644
index 0000000..c4db761
--- /dev/null
+++ b/debian/git-debrebase.install
@@ -0,0 +1,4 @@
+usr/share/locale/*/LC_MESSAGES/git-debrebase.mo
+
+# usr/share/man/*/man*/git-debrebase.[1-9]
+# ^ translated manpages. This has to be un-commented when they appear.
diff --git a/debian/rules b/debian/rules
index baff8f8..da482ed 100755
--- a/debian/rules
+++ b/debian/rules
@@ -30,10 +30,20 @@ override_dh_gencontrol:
v=$$(perl -ne 'print if s/^version:\s+//i' DEBIAN/control); \
perl -i -pe "s/UNRELEASED/$$v/g if m/###substituted###/" usr/bin/dgit
+override_dh_auto_clean:
+ dh_auto_clean
+ make -C po clean
+
globalperl=/usr/share/perl5
override_dh_auto_install: 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=''
+ make -C po4a install DESTDIR=../debian/tmp S=''
+
+override_dh_missing:
+ dh_missing --fail-missing
specpkg_install_gdr: p=git-debrebase
specpkg_install_gdr: pm=GDR
diff --git a/debian/tests/control b/debian/tests/control
index 1d29b2f..6559071 100644
--- a/debian/tests/control
+++ b/debian/tests/control
@@ -24,10 +24,6 @@ Tests: gdr-diverge-nmu gdr-diverge-nmu-dgit gdr-edits gdr-fresh gdr-import-dgit
Tests-Directory: tests/tests
Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, git-debrebase, git-buildpackage
-Tests: gdr-newupstream gdr-viagit
-Tests-Directory: tests/tests
-Depends: chiark-utils-bin, faketime, 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
@@ -37,6 +33,10 @@ Tests-Directory: tests/tests
Depends: gnupg, patch, diffutils
Restrictions: hint-testsuite-triggers
+Tests: gdr-newupstream gdr-viagit i18n-messages
+Tests-Directory: tests/tests
+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
@@ -55,7 +55,7 @@ Tests-Directory: tests/tests
Depends: dgit, dgit-infrastructure, devscripts, debhelper (>=8), fakeroot, build-essential, chiark-utils-bin, bc, faketime, sbuild, man-db
Restrictions: x-dgit-schroot-build
-Tests: spelling
+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
Restrictions: x-dgit-git-only
diff --git a/dgit b/dgit
index ea74cad..4cc5684 100755
--- a/dgit
+++ b/dgit
@@ -20,6 +20,7 @@
END { $? = $Debian::Dgit::ExitStatus::desired // -1; };
use Debian::Dgit::ExitStatus;
+use Debian::Dgit::I18n;
use strict;
@@ -37,6 +38,7 @@ use Dpkg::Version;
use Dpkg::Compression;
use Dpkg::Compression::Process;
use POSIX;
+use Locale::gettext;
use IPC::Open2;
use Digest::SHA;
use Digest::MD5;
@@ -230,24 +232,29 @@ END {
}
};
-sub badcfg { print STDERR "$us: invalid configuration: @_\n"; finish 12; }
+sub badcfg {
+ print STDERR f_ "%s: invalid configuration: %s\n", $us, "@_";
+ finish 12;
+}
sub forceable_fail ($$) {
my ($forceoptsl, $msg) = @_;
fail $msg unless grep { $forceopts{$_} } @$forceoptsl;
- print STDERR "warning: overriding problem due to --force:\n". $msg;
+ print STDERR +(__ "warning: overriding problem due to --force:\n"). $msg;
}
sub forceing ($) {
my ($forceoptsl) = @_;
my @got = grep { $forceopts{$_} } @$forceoptsl;
return 0 unless @got;
- print STDERR
- "warning: skipping checks or functionality due to --force-$got[0]\n";
+ print STDERR f_
+ "warning: skipping checks or functionality due to --force-%s\n",
+ $got[0];
}
sub no_such_package () {
- print STDERR "$us: package $package does not exist in suite $isuite\n";
+ print STDERR f_ "%s: package %s does not exist in suite %s\n",
+ $us, $package, $isuite;
finish 4;
}
@@ -465,28 +472,28 @@ sub i_child_report () {
die unless $got == $i_child_pid;
$i_child_pid = undef;
return undef unless $?;
- return "build host child ".waitstatusmsg();
+ return f_ "build host child %s", waitstatusmsg();
}
sub badproto ($$) {
my ($fh, $m) = @_;
- fail "connection lost: $!" if $fh->error;
- fail "protocol violation; $m not expected";
+ fail f_ "connection lost: %s", $! if $fh->error;
+ fail f_ "protocol violation; %s not expected", $m;
}
sub badproto_badread ($$) {
my ($fh, $wh) = @_;
- fail "connection lost: $!" if $!;
+ fail f_ "connection lost: %s", $! if $!;
my $report = i_child_report();
fail $report if defined $report;
- badproto $fh, "eof (reading $wh)";
+ badproto $fh, f_ "eof (reading %s)", $wh;
}
sub protocol_expect (&$) {
my ($match, $fh) = @_;
local $_;
$_ = <$fh>;
- defined && chomp or badproto_badread $fh, "protocol message";
+ defined && chomp or badproto_badread $fh, __ "protocol message";
if (wantarray) {
my @r = &$match;
return @r if @r;
@@ -494,7 +501,7 @@ sub protocol_expect (&$) {
my $r = &$match;
return $r if $r;
}
- badproto $fh, "\`$_'";
+ badproto $fh, f_ "\`%s'", $_;
}
sub protocol_send_file ($$) {
@@ -505,20 +512,20 @@ 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 die $!;
- print $fh $d or die $!;
+ 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 die $!;
+ print $fh "data-end\n" or confess $!;
close PF;
}
sub protocol_read_bytes ($$) {
my ($fh, $nbytes) = @_;
- $nbytes =~ m/^[1-9]\d{0,5}$|^0$/ or badproto \*RO, "bad byte count";
+ $nbytes =~ m/^[1-9]\d{0,5}$|^0$/ or badproto \*RO, __ "bad byte count";
my $d;
my $got = read $fh, $d, $nbytes;
- $got==$nbytes or badproto_badread $fh, "data block";
+ $got==$nbytes or badproto_badread $fh, __ "data block";
return $d;
}
@@ -534,9 +541,9 @@ sub protocol_receive_file ($$) {
} $fh;
last unless $y;
my $d = protocol_read_bytes $fh, $l;
- print PF $d or die $!;
+ print PF $d or confess $!;
}
- close PF or die $!;
+ close PF or confess $!;
}
#---------- remote protocol support, responder ----------
@@ -546,7 +553,7 @@ sub responder_send_command ($) {
return unless $we_are_responder;
# called even without $we_are_responder
printdebug ">> $command\n";
- print PO $command, "\n" or die $!;
+ print PO $command, "\n" or confess $!;
}
sub responder_send_file ($$) {
@@ -581,8 +588,8 @@ sub initiator_expect (&) {
sub progress {
if ($we_are_responder) {
my $m = join '', @_;
- responder_send_command "progress ".length($m) or die $!;
- print PO $m or die $!;
+ responder_send_command "progress ".length($m) or confess $!;
+ print PO $m or confess $!;
} else {
print @_, "\n";
}
@@ -597,9 +604,10 @@ sub url_get {
}
my $what = $_[$#_];
progress "downloading $what...";
- my $r = $ua->get(@_) or die $!;
+ my $r = $ua->get(@_) or confess $!;
return undef if $r->code == 404;
- $r->is_success or fail "failed to fetch $what: ".$r->status_line;
+ $r->is_success or fail f_ "failed to fetch %s: %s",
+ $what, $r->status_line;
return $r->decoded_content(charset => 'none');
}
@@ -610,9 +618,9 @@ sub act_scary () { return !$dryrun_level; }
sub printdone {
if (!$dryrun_level) {
- progress "$us ok: @_";
+ progress f_ "%s ok: %s", $us, "@_";
} else {
- progress "would be ok: @_ (but dry run only)";
+ progress f_ "would be ok: %s (but dry run only)", "@_";
}
}
@@ -636,7 +644,7 @@ sub runcmd_ordryrun_local {
}
}
-our $helpmsg = <<END;
+our $helpmsg = i_ <<END;
main usages:
dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]
dgit [dgit-opts] fetch|pull [dgit-opts] [suite]
@@ -655,17 +663,17 @@ important dgit options:
-c<name>=<value> set git config option (used directly by dgit too)
END
-our $later_warning_msg = <<END;
+our $later_warning_msg = i_ <<END;
Perhaps the upload is stuck in incoming. Using the version from git.
END
sub badusage {
- print STDERR "$us: @_\n", $helpmsg or die $!;
+ print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess $!;
finish 8;
}
sub nextarg {
- @ARGV or badusage "too few arguments";
+ @ARGV or badusage __ "too few arguments";
return scalar shift @ARGV;
}
@@ -673,7 +681,7 @@ sub pre_help () {
not_necessarily_a_tree();
}
sub cmd_help () {
- print $helpmsg or die $!;
+ print __ $helpmsg or confess $!;
finish 0;
}
@@ -775,8 +783,9 @@ sub git_get_config ($) {
"undef")."\n"
if $debuglevel >= 4;
$l or next;
- @$l==1 or badcfg "multiple values for $c".
- " (in $src git config)" if @$l > 1;
+ @$l==1 or badcfg
+ f_ "multiple values for %s (in %s git config)", $c, $src
+ if @$l > 1;
return $l->[0];
}
return undef;
@@ -794,8 +803,10 @@ sub cfg {
return $dv;
}
}
- badcfg "need value for one of: @_\n".
- "$us: distro or suite appears not to be (properly) supported";
+ badcfg f_
+ "need value for one of: %s\n".
+ "%s: distro or suite appears not to be (properly) supported",
+ "@_", $us;
}
sub not_necessarily_a_tree () {
@@ -834,7 +845,8 @@ sub access_nomdistro () {
my $base = access_basedistro();
my $r = cfg("dgit-distro.$base.nominal-distro",'RETURN-UNDEF') // $base;
$r =~ m/^$distro_re$/ or badcfg
- "bad syntax for (nominal) distro \`$r' (does not match /^$distro_re$/)";
+ f_ "bad syntax for (nominal) distro \`%s' (does not match %s)",
+ $r, "/^$distro_re$/";
return $r;
}
@@ -848,7 +860,7 @@ sub access_quirk () {
$re =~ s/[^-0-9a-z_\%*()]/\\$&/ig;
$re =~ s/\*/.*/g;
$re =~ s/\%/([-0-9a-z_]+)/
- or $re =~ m/[()]/ or badcfg "backports-quirk needs \% or ( )";
+ or $re =~ m/[()]/ or badcfg __ "backports-quirk needs \% or ( )";
if ($isuite =~ m/^$re$/) {
return ('backports',"$basedistro-backports",$1);
}
@@ -864,7 +876,8 @@ sub parse_cfg_bool ($$$) {
return
$v =~ m/^[ty1]/ ? 1 :
$v =~ m/^[fn0]/ ? 0 :
- badcfg "$what needs t (true, y, 1) or f (false, n, 0) not \`$v'";
+ badcfg f_ "%s needs t (true, y, 1) or f (false, n, 0) not \`%s'",
+ $what, $v;
}
sub access_forpush_config () {
@@ -882,7 +895,8 @@ sub access_forpush_config () {
$v =~ m/^[ty1]/ ? 0 : # force readonly, forpush = 0
$v =~ m/^[fn0]/ ? 1 : # force nonreadonly, forpush = 1
$v =~ m/^[a]/ ? '' : # auto, forpush = ''
- badcfg "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)";
+ badcfg __
+ "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)";
}
sub access_forpush () {
@@ -891,12 +905,12 @@ sub access_forpush () {
}
sub pushing () {
- confess 'internal error '.Dumper($access_forpush)," ?" if
+ confess +(__ 'internal error').' '.Dumper($access_forpush)," ?" if
defined $access_forpush and !$access_forpush;
- badcfg "pushing but distro is configured readonly"
+ badcfg __ "pushing but distro is configured readonly"
if access_forpush_config() eq '0';
$access_forpush = 1;
- $supplementary_message = <<'END' unless $we_are_responder;
+ $supplementary_message = __ <<'END' unless $we_are_responder;
Push failed, before we got started.
You can retry the push, after fixing the problem, if you like.
END
@@ -914,8 +928,8 @@ sub supplementary_message ($) {
return;
} elsif ($protovsn >= 3) {
responder_send_command "supplementary-message ".length($msg)
- or die $!;
- print PO $msg or die $!;
+ or confess $!;
+ print PO $msg or confess $!;
}
}
@@ -1052,7 +1066,7 @@ sub commit_getclogp ($) {
}
sub parse_dscdata () {
- my $dscfh = new IO::File \$dscdata, '<' or die $!;
+ 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;
@@ -1062,7 +1076,7 @@ our %rmad;
sub archive_query ($;@) {
my ($method) = shift @_;
- fail "this operation does not support multiple comma-separated suites"
+ fail __ "this operation does not support multiple comma-separated suites"
if $isuite =~ m/,/;
my $query = access_cfg('archive-query','RETURN-UNDEF');
$query =~ s/^(\w+):// or badcfg "invalid archive-query method \`$query'";
@@ -1108,8 +1122,9 @@ sub archive_api_query_cmd ($) {
fail "for $url: stat $key: $!" unless $!==ENOENT;
next;
}
- fail "config requested specific TLS key but do not know".
- " how to get curl to use exactly that EE key ($key)";
+ 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
@@ -1128,7 +1143,7 @@ sub archive_api_query_cmd ($) {
sub api_query ($$;$) {
use JSON;
my ($data, $subpath, $ok404) = @_;
- badcfg "ftpmasterapi archive query method takes no data part"
+ badcfg __ "ftpmasterapi archive query method takes no data part"
if length $data;
my @cmd = archive_api_query_cmd($subpath);
my $url = $cmd[$#cmd];
@@ -1136,11 +1151,11 @@ sub api_query ($$;$) {
my $json = cmdoutput @cmd;
unless ($json =~ s/\d+\d+\d$//) {
failedcmd_report_cmd undef, @cmd;
- fail "curl failed to print 3-digit HTTP code";
+ fail __ "curl failed to print 3-digit HTTP code";
}
my $code = $&;
return undef if $code eq '404' && $ok404;
- fail "fetch of $url gave HTTP code $code"
+ fail f_ "fetch of %s gave HTTP code %s", $url, $code
unless $url =~ m#^file://# or $code =~ m/^2/;
return decode_json($json);
}
@@ -1156,15 +1171,17 @@ sub canonicalise_suite_ftpmasterapi {
} qw(codename name);
push @matched, $entry;
}
- fail "unknown suite $isuite, maybe -d would help" unless @matched;
+ fail f_ "unknown suite %s, maybe -d would help", $isuite
+ unless @matched;
my $cn;
eval {
- @matched==1 or die "multiple matches for suite $isuite\n";
+ @matched==1 or die f_ "multiple matches for suite %s\n", $isuite;
$cn = "$matched[0]{codename}";
- defined $cn or die "suite $isuite info has no codename\n";
- $cn =~ m/^$suite_re$/ or die "suite $isuite maps to bad codename\n";
+ defined $cn or die f_ "suite %s info has no codename\n", $isuite;
+ $cn =~ m/^$suite_re$/
+ or die f_ "suite %s maps to bad codename\n", $isuite;
};
- die "bad ftpmaster api response: $@\n".Dumper(\@matched)
+ die +(__ "bad ftpmaster api response: ")."$@\n".Dumper(\@matched)
if length $@;
return $cn;
}
@@ -1178,18 +1195,18 @@ sub archive_query_ftpmasterapi {
eval {
my $vsn = "$entry->{version}";
my ($ok,$msg) = version_check $vsn;
- die "bad version: $msg\n" unless $ok;
+ die f_ "bad version: %s\n", $msg unless $ok;
my $component = "$entry->{component}";
- $component =~ m/^$component_re$/ or die "bad component";
+ $component =~ m/^$component_re$/ or die __ "bad component";
my $filename = "$entry->{filename}";
$filename && $filename !~ m#[^-+:._~0-9a-zA-Z/]|^[/.]|/[/.]#
- or die "bad filename";
+ or die __ "bad filename";
my $sha256sum = "$entry->{sha256sum}";
- $sha256sum =~ m/^[0-9a-f]+$/ or die "bad sha256sum";
+ $sha256sum =~ m/^[0-9a-f]+$/ or die __ "bad sha256sum";
push @rows, [ $vsn, "/pool/$component/$filename",
$digester, $sha256sum ];
};
- die "bad ftpmaster api response: $@\n".Dumper($entry)
+ die +(__ "bad ftpmaster api response: ")."$@\n".Dumper($entry)
if length $@;
}
@rows = sort { -version_compare($a->[0],$b->[0]) } @rows;
@@ -1228,15 +1245,15 @@ sub aptget_cache_clean {
sub aptget_lock_acquire () {
my $lockfile = "$aptget_base/lock";
- open APTGET_LOCK, '>', $lockfile or die "open $lockfile: $!";
- flock APTGET_LOCK, LOCK_EX or die "lock $lockfile: $!";
+ open APTGET_LOCK, '>', $lockfile or confess "open $lockfile: $!";
+ flock APTGET_LOCK, LOCK_EX or confess "lock $lockfile: $!";
}
sub aptget_prep ($) {
my ($data) = @_;
return if defined $aptget_base;
- badcfg "aptget archive query method takes no data part"
+ badcfg __ "aptget archive query method takes no data part"
if length $data;
my $cache = $ENV{XDG_CACHE_DIR} // "$ENV{HOME}/.cache";
@@ -1251,7 +1268,7 @@ sub aptget_prep ($) {
ensuredir $aptget_base;
my $quoted_base = $aptget_base;
- die "$quoted_base contains bad chars, cannot continue"
+ confess "$quoted_base contains bad chars, cannot continue"
if $quoted_base =~ m/["\\]/; # apt.conf(5) says no escaping :-/
ensuredir $aptget_base;
@@ -1267,17 +1284,17 @@ sub aptget_prep ($) {
cfg_apply_map(\$aptsuites, 'suite map',
access_cfg('aptget-suite-map', 'RETURN-UNDEF'));
- open SRCS, ">", "$aptget_base/$sourceslist" or die $!;
+ open SRCS, ">", "$aptget_base/$sourceslist" or confess $!;
printf SRCS "deb-src %s %s %s\n",
access_cfg('mirror'),
$aptsuites,
access_cfg('aptget-components')
- or die $!;
+ or confess $!;
ensuredir "$aptget_base/cache";
ensuredir "$aptget_base/lists";
- open CONF, ">", $aptget_configpath or die $!;
+ open CONF, ">", $aptget_configpath or confess $!;
print CONF <<END;
Debug::NoLocking "true";
APT::Get::List-Cleanup "false";
@@ -1297,10 +1314,10 @@ END
Dir::Etc::preferencesparts
)) {
ensuredir "$aptget_base/$key";
- print CONF "$key \"$quoted_base/$key\";\n" or die $!;
+ print CONF "$key \"$quoted_base/$key\";\n" or confess $!;
};
- my $oldatime = (time // die $!) - 1;
+ my $oldatime = (time // confess $!) - 1;
foreach my $oldlist (<$aptget_base/lists/*Release>) {
next unless stat_exists $oldlist;
my ($mtime) = (stat _)[9];
@@ -1319,13 +1336,13 @@ END
my @inreleasefiles = grep { m#/InRelease$# } @releasefiles;
@releasefiles = @inreleasefiles if @inreleasefiles;
if (!@releasefiles) {
- fail <<END;
-apt seemed to not to update dgit's cached Release files for $isuite.
-(Perhaps $cache
+ fail f_ <<END, $isuite, $cache;
+apt seemed to not to update dgit's cached Release files for %s.
+(Perhaps %s
is on a filesystem mounted `noatime'; if so, please use `relatime'.)
END
}
- die "apt updated too many Release files (@releasefiles), erk"
+ confess "apt updated too many Release files (@releasefiles), erk"
unless @releasefiles == 1;
($aptget_releasefile) = @releasefiles;
@@ -1341,8 +1358,9 @@ sub canonicalise_suite_aptget {
my $val = $release->{$name};
if (defined $val) {
printdebug "release file $name: $val\n";
- $val =~ m/^$suite_re$/o or fail
- "Release file ($aptget_releasefile) specifies intolerable $name";
+ $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
@@ -1369,8 +1387,9 @@ sub archive_query_aptget {
aptget_aptget(), qw(--download-only --only-source source), $package;
my @dscs = <$aptget_base/source/*.dsc>;
- fail "apt-get source did not produce a .dsc" unless @dscs;
- fail "apt-get source produced several .dscs (@dscs)" unless @dscs==1;
+ fail __ "apt-get source did not produce a .dsc" unless @dscs;
+ fail f_ "apt-get source produced several .dscs (%s)", "@dscs"
+ unless @dscs==1;
my $pre_dsc = parsecontrol $dscs[0], $dscs[0], 1;
@@ -1384,6 +1403,7 @@ sub file_in_archive_aptget () { return undef; }
sub package_not_wholly_new_aptget () { return undef; }
#---------- `dummyapicat' archive query method ----------
+# (untranslated, because this is for testing purposes etc.)
sub archive_query_dummycatapi { archive_query_ftpmasterapi @_; }
sub canonicalise_suite_dummycatapi { canonicalise_suite_ftpmasterapi @_; }
@@ -1397,7 +1417,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 die $!;
+ open FIA, "-|", @cmd or confess $!;
my $r = $fn->();
close FIA or ($!==0 && $?==141) or die failedcmd @cmd;
return $r;
@@ -1472,10 +1492,11 @@ sub madison_get_parse {
sub canonicalise_suite_madison {
# madison canonicalises for us
my @r = madison_get_parse(@_);
- @r or fail
- "unable to canonicalise suite using package $package".
- " which does not appear to exist in suite $isuite;".
- " --existing-package may help";
+ @r or fail f_
+ "unable to canonicalise suite using package %s".
+ " which does not appear to exist in suite %s;".
+ " --existing-package may help",
+ $package, $isuite;
return $r[0][2];
}
@@ -1483,6 +1504,7 @@ sub file_in_archive_madison { return undef; }
sub package_not_wholly_new_madison { return undef; }
#---------- `sshpsql' archive query method ----------
+# (untranslated, because this is obsolete)
sub sshpsql ($$$) {
my ($data,$runeinfo,$sql) = @_;
@@ -1498,7 +1520,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 die $!;
+ open P, "-|", @cmd or confess $!;
while (<P>) {
chomp or die;
printdebug(">|$_|\n");
@@ -1561,6 +1583,7 @@ sub file_in_archive_sshpsql ($$$) { return undef; }
sub package_not_wholly_new_sshpsql ($$$) { return undef; }
#---------- `dummycat' archive query method ----------
+# (untranslated, because this is for testing purposes etc.)
sub canonicalise_suite_dummycat ($$) {
my ($proto,$data) = @_;
@@ -1606,6 +1629,7 @@ 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');
@@ -1660,12 +1684,12 @@ sub select_tagformat () {
sub canonicalise_suite () {
return if defined $csuite;
- fail "cannot operate on $isuite suite" if $isuite eq 'UNRELEASED';
+ fail f_ "cannot operate on %s suite", $isuite if $isuite eq 'UNRELEASED';
$csuite = archive_query('canonicalise_suite');
if ($isuite ne $csuite) {
- progress "canonical suite name for $isuite is $csuite";
+ progress f_ "canonical suite name for %s is %s", $isuite, $csuite;
} else {
- progress "canonical suite name is $csuite";
+ progress f_ "canonical suite name is %s", $csuite;
}
}
@@ -1685,13 +1709,13 @@ sub get_archive_dsc () {
$digester->add($dscdata);
my $got = $digester->hexdigest();
$got eq $digest or
- fail "$dscurl has hash $got but".
- " archive told us to expect $digest";
+ fail f_ "%s has hash %s but archive told us to expect %s",
+ $dscurl, $got, $digest;
}
parse_dscdata();
my $fmt = getfield $dsc, 'Format';
$format_ok{$fmt} or forceable_fail [qw(unsupported-source-format)],
- "unsupported source format $fmt, sorry";
+ f_ "unsupported source format %s, sorry", $fmt;
$dsc_checked = !!$digester;
printdebug "get_archive_dsc: Version ".(getfield $dsc, 'Version')."\n";
@@ -1718,7 +1742,8 @@ sub check_for_git () {
# NB that if we are pushing, $usedistro will be $distro/push
$instead_distro= cfg("dgit-distro.$usedistro.diverts.$divert");
$instead_distro =~ s{^/}{ access_basedistro()."/" }e;
- progress "diverting to $divert (using config for $instead_distro)";
+ progress f_ "diverting to %s (using config for %s)",
+ $divert, $instead_distro;
return check_for_git();
}
failedcmd @cmd unless defined $r and $r =~ m/^[01]$/;
@@ -1734,7 +1759,7 @@ sub check_for_git () {
# 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 - ".
+ fail +(__ "unexpected results from git check query - ").
Dumper($prefix, $result);
my $code = $1;
if ($code eq '404') {
@@ -1749,7 +1774,7 @@ sub check_for_git () {
} elsif ($how eq 'false') {
return 0;
} else {
- badcfg "unknown git-check \`$how'";
+ badcfg f_ "unknown git-check \`%s'", $how;
}
}
@@ -1764,7 +1789,7 @@ sub create_remote_git_repo () {
} elsif ($how eq 'true') {
# nothing to do
} else {
- badcfg "unknown git-create \`$how'";
+ badcfg f_ "unknown git-create \`%s'", $how;
}
}
@@ -1796,13 +1821,13 @@ sub remove_stray_gits ($) {
my ($what) = @_;
my @gitscmd = qw(find -name .git -prune -print0);
debugcmd "|",@gitscmd;
- open GITS, "-|", @gitscmd or die $!;
+ open GITS, "-|", @gitscmd or confess $!;
{
local $/="\0";
while (<GITS>) {
chomp or die;
- print STDERR "$us: warning: removing from $what: ",
- (messagequote $_), "\n";
+ print STDERR f_ "%s: warning: removing from %s: %s\n",
+ $us, $what, (messagequote $_);
rmtree $_;
}
}
@@ -1814,7 +1839,7 @@ sub mktree_in_ud_from_only_subdir ($;$) {
# changes into the subdir
my (@dirs) = <*/.>;
- die "expected one subdir but found @dirs ?" unless @dirs==1;
+ confess "expected one subdir but found @dirs ?" unless @dirs==1;
$dirs[0] =~ m#^([^/]+)/\.$# or die;
my $dir = $1;
changedir $dir;
@@ -1847,7 +1872,7 @@ sub dsc_files_info () {
foreach (split /\n/, $field) {
next unless m/\S/;
m/^(\w+) (\d+) (\S+)$/ or
- fail "could not parse .dsc $fname line \`$_'";
+ fail f_ "could not parse .dsc %s line \`%s'", $fname, $_;
my $digester = eval "$module"."->$method;" or die $@;
push @out, {
Hash => $1,
@@ -1858,8 +1883,8 @@ sub dsc_files_info () {
}
return @out;
}
- fail "missing any supported Checksums-* or Files field in ".
- $dsc->get_option('name');
+ fail f_ "missing any supported Checksums-* or Files field in %s",
+ $dsc->get_option('name');
}
sub dsc_files () {
@@ -1903,8 +1928,9 @@ sub files_compare_inputs (@) {
if (defined $$re) {
$fchecked{$f}{$in_name} = 1;
$$re eq $info or
- fail "hash or size of $f varies in $fname fields".
- " (between: ".$showinputs->().")";
+ fail f_
+ "hash or size of %s varies in %s fields (between: %s)",
+ $f, $fname, $showinputs->();
} else {
$$re = $info;
}
@@ -1912,17 +1938,18 @@ sub files_compare_inputs (@) {
@files = sort @files;
$expected_files //= \@files;
"@$expected_files" eq "@files" or
- fail "file list in $in_name varies between hash fields!";
+ fail f_ "file list in %s varies between hash fields!",
+ $in_name;
}
$expected_files or
- fail "$in_name has no files list field(s)";
+ fail f_ "%s has no files list field(s)", $in_name;
}
printdebug "files_compare_inputs ".Dumper(\%fchecked, \%record)
if $debuglevel>=2;
grep { keys %$_ == @$inputs-1 } values %fchecked
- or fail "no file appears in all file lists".
- " (looked in: ".$showinputs->().")";
+ or fail f_ "no file appears in all file lists (looked in: %s)",
+ $showinputs->();
}
sub is_orig_file_in_dsc ($$) {
@@ -1961,7 +1988,7 @@ sub test_source_only_changes ($) {
$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)$/) {
- print "purportedly source-only changes polluted by $&\n";
+ print f_ "purportedly source-only changes polluted by %s\n", $&;
return 0;
}
}
@@ -1974,7 +2001,7 @@ sub changes_update_origs_from_dsc ($$$$) {
printdebug "checking origs needed ($upstreamvsn)...\n";
$_ = getfield $changes, 'Files';
m/^\w+ \d+ (\S+ \S+) \S+$/m or
- fail "cannot find section/priority from .changes Files field";
+ fail __ "cannot find section/priority from .changes Files field";
my $placementinfo = $1;
my %changed;
printdebug "checking origs needed placement '$placementinfo'...\n";
@@ -1986,7 +2013,7 @@ sub changes_update_origs_from_dsc ($$$$) {
printdebug "origs $file is_orig\n";
my $have = archive_query('file_in_archive', $file);
if (!defined $have) {
- print STDERR <<END;
+ print STDERR __ <<END;
archive does not support .orig check; hope you used --ch:--sa/-sd if needed
END
return;
@@ -2003,25 +2030,27 @@ END
$_ = $dsc->{$fname};
next unless defined;
m/^(\w+) .* \Q$file\E$/m or
- fail ".dsc $fname missing entry for $file";
+ fail f_ ".dsc %s missing entry for %s", $fname, $file;
if ($h->{$archivefield} eq $1) {
$same++;
} else {
- push @differ,
- "$archivefield: $h->{$archivefield} (archive) != $1 (local .dsc)";
+ push @differ, f_
+ "%s: %s (archive) != %s (local .dsc)",
+ $archivefield, $h->{$archivefield}, $1;
}
}
- die "$file ".Dumper($h)." ?!" if $same && @differ;
+ confess "$file ".Dumper($h)." ?!" if $same && @differ;
$found_same++
if $same;
- push @found_differ, "archive $h->{filename}: ".join "; ", @differ
+ push @found_differ,
+ f_ "archive %s: %s", $h->{filename}, join "; ", @differ
if @differ;
}
printdebug "origs $file f.same=$found_same".
" #f._differ=$#found_differ\n";
if (@found_differ && !$found_same) {
fail join "\n",
- "archive contains $file with different checksum",
+ (f_ "archive contains %s with different checksum", $file),
@found_differ;
}
# Now we edit the changes file to add or remove it
@@ -2039,7 +2068,7 @@ END
$dsc_data =~ m/^(.* \Q$file\E$)$/m or die "$dsc_data $file ?";
my $extra = $1;
$extra =~ s/ \d+ /$&$placementinfo /
- or die "$fname $extra >$dsc_data< ?"
+ or confess "$fname $extra >$dsc_data< ?"
if $fname eq 'Files';
$changes->{$fname} .= "\n". $extra;
$changed{$file} = "added";
@@ -2048,7 +2077,7 @@ END
}
if (%changed) {
foreach my $file (keys %changed) {
- progress sprintf
+ progress f_
"edited .changes for archive .orig contents: %s %s",
$changed{$file}, $file;
}
@@ -2057,10 +2086,11 @@ END
if (act_local()) {
rename $chtmp,$changesfile or die "$changesfile $!";
} else {
- progress "[new .changes left in $changesfile]";
+ progress f_ "[new .changes left in %s]", $changesfile;
}
} else {
- progress "$changesfile already has appropriate .orig(s) (if any)";
+ progress f_ "%s already has appropriate .orig(s) (if any)",
+ $changesfile;
}
}
@@ -2083,8 +2113,9 @@ sub clogp_authline ($) {
my $date = cmdoutput qw(date), '+%s %z', qw(-d), getfield($clogp,'Date');
my $authline = "$author $date";
$authline =~ m/$git_authline_re/o or
- fail "unexpected commit author line format \`$authline'".
- " (was generated from changelog Maintainer field)";
+ fail f_ "unexpected commit author line format \`%s'".
+ " (was generated from changelog Maintainer field)",
+ $authline;
return ($1,$2,$3) if wantarray;
return $authline;
}
@@ -2097,14 +2128,14 @@ sub vendor_patches_distro ($$) {
printdebug "checking for vendor-specific $series ($what)\n";
if (!open SERIES, "<", $series) {
- die "$series $!" unless $!==ENOENT;
+ confess "$series $!" unless $!==ENOENT;
return;
}
while (<SERIES>) {
next unless m/\S/;
next if m/^\s+\#/;
- print STDERR <<END;
+ print STDERR __ <<END;
Unfortunately, this source package uses a feature of dpkg-source where
the same source package unpacks to different source code on different
@@ -2117,8 +2148,9 @@ different packages, if different distros are supposed to have
different code).
END
- fail "Found active distro-specific series file for".
- " $checkdistro ($what): $series, cannot continue";
+ fail f_ "Found active distro-specific series file for".
+ " %s (%s): %s, cannot continue",
+ $checkdistro, $what, $series;
}
die "$series $!" if SERIES->error;
close SERIES;
@@ -2147,11 +2179,11 @@ sub check_for_vendor_patches () {
use Dpkg::Vendor;
vendor_patches_distro($ENV{DEB_VENDOR}, "DEB_VENDOR");
vendor_patches_distro(Dpkg::Vendor::get_current_vendor(),
- "Dpkg::Vendor \`current vendor'");
+ __ "Dpkg::Vendor \`current vendor'");
vendor_patches_distro(access_basedistro(),
- "(base) distro being accessed");
+ __ "(base) distro being accessed");
vendor_patches_distro(access_nomdistro(),
- "(nominal) distro being accessed");
+ __ "(nominal) distro being accessed");
}
sub generate_commits_from_dsc () {
@@ -2172,12 +2204,12 @@ sub generate_commits_from_dsc () {
printdebug "linked (using ...,fetch).\n";
} elsif ((printdebug "($!) "),
$! != ENOENT) {
- fail "accessing $buildproductsdir/$f,fetch: $!";
+ fail f_ "accessing %s: %s", "$buildproductsdir/$f,fetch", $!;
} elsif (link_ltarget $upper_f, $f) {
printdebug "linked.\n";
} elsif ((printdebug "($!) "),
$! != ENOENT) {
- fail "accessing $buildproductsdir/$f: $!";
+ fail f_ "accessing %s: %s", "$buildproductsdir/$f", $!;
} else {
printdebug "absent.\n";
}
@@ -2192,14 +2224,14 @@ sub generate_commits_from_dsc () {
printdebug "linked.\n";
} elsif ((printdebug "($!) "),
$! != EEXIST) {
- fail "saving $buildproductsdir/$f: $!";
+ fail f_ "saving %s: %s", "$buildproductsdir/$f", $!;
} elsif (!$refetched) {
printdebug "no need.\n";
} elsif (link $f, "$upper_f,fetch") {
printdebug "linked (using ...,fetch).\n";
} elsif ((printdebug "($!) "),
$! != EEXIST) {
- fail "saving $buildproductsdir/$f,fetch: $!";
+ fail f_ "saving %s: %s", "$buildproductsdir/$f,fetch", $!;
} else {
printdebug "cannot.\n";
}
@@ -2246,9 +2278,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, "-|" // die $!;
+ my $compr_pid = open $compr_fh, "-|" // confess $!;
if (!$compr_pid) {
- open STDIN, "<&", $input or die $!;
+ open STDIN, "<&", $input or confess $!;
exec @compr_cmd;
die "dgit (child): exec $compr_cmd[0]: $!\n";
}
@@ -2256,23 +2288,23 @@ sub generate_commits_from_dsc () {
}
rmtree "_unpack-tar";
- mkdir "_unpack-tar" or die $!;
+ 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 // die $!;
+ my $tar_pid = fork // confess $!;
if (!$tar_pid) {
- chdir "_unpack-tar" or die $!;
- open STDIN, "<&", $input or die $!;
+ chdir "_unpack-tar" or confess $!;
+ open STDIN, "<&", $input or confess $!;
exec @tarcmd;
- die "dgit (child): exec $tarcmd[0]: $!";
+ die f_ "dgit (child): exec %s: %s", $tarcmd[0], $!;
}
- $!=0; (waitpid $tar_pid, 0) == $tar_pid or die $!;
+ $!=0; (waitpid $tar_pid, 0) == $tar_pid or confess $!;
!$? or failedcmd @tarcmd;
close $input or
(@compr_cmd ? ($?==SIGPIPE || failedcmd @compr_cmd)
- : die $!);
+ : confess $!);
# finally, we have the results in "tarball", but maybe
# with the wrong permissions
@@ -2329,7 +2361,7 @@ sub generate_commits_from_dsc () {
push @cmd, qw(-x --), $dscfn;
runcmd @cmd;
- my ($tree,$dir) = mktree_in_ud_from_only_subdir("source package");
+ my ($tree,$dir) = mktree_in_ud_from_only_subdir(__ "source package");
if (madformat $dsc->{format}) {
check_for_vendor_patches();
}
@@ -2347,7 +2379,7 @@ sub generate_commits_from_dsc () {
my $r1clogp;
printdebug "import clog search...\n";
- parsechangelog_loop \@clogcmd, "package changelog", sub {
+ parsechangelog_loop \@clogcmd, (__ "package changelog"), sub {
my ($thisstanza, $desc) = @_;
no warnings qw(exiting);
@@ -2387,7 +2419,7 @@ sub generate_commits_from_dsc () {
printdebug "import clog $r1clogp->{version} becomes r1\n";
};
- $clogp or fail "package changelog has no entries!";
+ $clogp or fail __ "package changelog has no entries!";
my $authline = clogp_authline $clogp;
my $changes = getfield $clogp, 'Changes';
@@ -2406,12 +2438,13 @@ sub generate_commits_from_dsc () {
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);
tree $tt->{Tree}
author $r1authline
committer $r1authline
-Import $tt->{F}
+$mbody
[dgit import orig $tt->{F}]
END_O
@@ -2419,7 +2452,7 @@ tree $tt->{Tree}
author $authline
committer $authline
-Import $tt->{F}
+$mbody
[dgit import tarball $package $cversion $tt->{F}]
END_T
@@ -2428,14 +2461,14 @@ END_T
printdebug "import main commit\n";
- open C, ">../commit.tmp" or die $!;
- print C <<END or die $!;
+ open C, ">../commit.tmp" or confess $!;
+ print C <<END or confess $!;
tree $tree
END
- print C <<END or die $! foreach @tartrees;
+ print C <<END or confess $! foreach @tartrees;
parent $_->{Commit}
END
- print C <<END or die $!;
+ print C <<END or confess $!;
author $authline
committer $authline
@@ -2444,7 +2477,7 @@ $changes
[dgit import $treeimporthow $package $cversion]
END
- close C or die $!;
+ close C or confess $!;
my $rawimport_hash = make_commit qw(../commit.tmp);
if (madformat $dsc->{format}) {
@@ -2486,10 +2519,10 @@ END
chomp $@;
progress "warning: $@";
$path = "$absurdity:$path";
- progress "$us: trying slow absurd-git-apply...";
+ progress f_ "%s: trying slow absurd-git-apply...", $us;
rename "../../gbp-pq-output","../../gbp-pq-output.0"
or $!==ENOENT
- or die $!;
+ or confess $!;
}
eval {
die "forbid absurd git-apply\n" if $use_absurd
@@ -2505,19 +2538,19 @@ END
'exec >/dev/null 2>>../../gbp-pq-output', @showcmd;
debugcmd "+",@realcmd;
if (system @realcmd) {
- die +(shellquote @showcmd).
- " failed: ".
- failedcmd_waitstatus()."\n";
+ die f_ "%s failed: %s\n",
+ +(shellquote @showcmd),
+ failedcmd_waitstatus();
}
my $gapplied = git_rev_parse('HEAD');
my $gappliedtree = cmdoutput @git, qw(rev-parse HEAD:);
$gappliedtree eq $dappliedtree or
- fail <<END;
+ fail f_ <<END, $gapplied, $gappliedtree, $dappliedtree;
gbp-pq import and dpkg-source disagree!
- gbp-pq import gave commit $gapplied
- gbp-pq import gave tree $gappliedtree
- dpkg-source --before-build gave tree $dappliedtree
+ gbp-pq import gave commit %s
+ gbp-pq import gave tree %s
+ dpkg-source --before-build gave tree %s
END
$rawimport_hash = $gapplied;
};
@@ -2529,11 +2562,11 @@ END
}
}
- progress "synthesised git commit from .dsc $cversion";
+ progress f_ "synthesised git commit from .dsc %s", $cversion;
my $rawimport_mergeinput = {
Commit => $rawimport_hash,
- Info => "Import of source package",
+ Info => __ "Import of source package",
};
my @output = ($rawimport_mergeinput);
@@ -2544,16 +2577,18 @@ END
version_compare($oversion, $cversion);
if ($vcmp < 0) {
@output = ($rawimport_mergeinput, $lastpush_mergeinput,
- { Message => <<END, ReverseParents => 1 });
-Record $package ($cversion) in archive suite $csuite
+ { ReverseParents => 1,
+ Message => (f_ <<END, $package, $cversion, $csuite) });
+Record %s (%s) in archive suite %s
END
} elsif ($vcmp > 0) {
- print STDERR <<END or die $!;
+ print STDERR f_ <<END, $cversion, $oversion,
-Version actually in archive: $cversion (older)
-Last version pushed with dgit: $oversion (newer or same)
-$later_warning_msg
+Version actually in archive: %s (older)
+Last version pushed with dgit: %s (newer or same)
+%s
END
+ __ $later_warning_msg or confess $!;
@output = $lastpush_mergeinput;
} else {
# Same version. Use what's in the server git branch,
@@ -2583,22 +2618,22 @@ sub complete_file_from_dsc ($$;$) {
open F, "<", "$tf" or die "$tf: $!";
$fi->{Digester}->reset();
$fi->{Digester}->addfile(*F);
- F->error and die $!;
+ F->error and confess $!;
$got = $fi->{Digester}->hexdigest();
return $got eq $fi->{Hash};
};
if (stat_exists $tf) {
if ($checkhash->()) {
- progress "using existing $f";
+ progress f_ "using existing %s", $f;
return 1;
}
if (!$refetched) {
- fail "file $f has hash $got but .dsc".
- " demands hash $fi->{Hash} ".
- "(perhaps you should delete this file?)";
+ fail f_ "file %s has hash %s but .dsc demands hash %s".
+ " (perhaps you should delete this file?)",
+ $f, $got, $fi->{Hash};
}
- progress "need to fetch correct version of $f";
+ progress f_ "need to fetch correct version of %s", $f;
unlink $tf or die "$tf $!";
$$refetched = 1;
} else {
@@ -2614,9 +2649,9 @@ sub complete_file_from_dsc ($$;$) {
return 0 if !act_local();
$checkhash->() or
- fail "file $f has hash $got but .dsc".
- " demands hash $fi->{Hash} ".
- "(got wrong file from archive!)";
+ fail f_ "file %s has hash %s but .dsc demands hash %s".
+ " (got wrong file from archive!)",
+ $f, $got, $fi->{Hash};
return 1;
}
@@ -2709,7 +2744,7 @@ sub git_lrfetch_sane {
for (;;) {
printdebug "git_lrfetch_sane iteration $fetch_iteration\n";
if (++$fetch_iteration > 10) {
- fail "too many iterations trying to get sane fetch!";
+ fail __ "too many iterations trying to get sane fetch!";
}
my @look = map { "refs/$_" } @specs;
@@ -2717,14 +2752,14 @@ sub git_lrfetch_sane {
debugcmd "|",@lcmd;
my %wantr;
- open GITLS, "-|", @lcmd or die $!;
+ open GITLS, "-|", @lcmd or confess $!;
while (<GITLS>) {
printdebug "=> ", $_;
m/^(\w+)\s+(\S+)\n/ or die "ls-remote $_ ?";
my ($objid,$rrefname) = ($1,$2);
if (!$wanted_rref->($rrefname)) {
- print STDERR <<END;
-warning: git ls-remote @look reported $rrefname; this is silly, ignoring it.
+ print STDERR f_ <<END, "@look", $rrefname;
+warning: git ls-remote %s reported %s; this is silly, ignoring it.
END
next;
}
@@ -2767,8 +2802,8 @@ END
git-fetch @fspecs created $lrefname which git ls-remote @look didn't list.
END
} else {
- print STDERR <<END
-warning: git fetch @fspecs created $lrefname; this is silly, deleting it.
+ print STDERR f_ <<END, "@fspecs", $lrefname
+warning: git fetch %s created %s; this is silly, deleting it.
END
}
runcmd_ordryrun_local @git, qw(update-ref -d), $lrefname;
@@ -2782,14 +2817,14 @@ END
my $want = $wantr{$rrefname};
next if $got eq $want;
if (!defined $objgot{$want}) {
- fail <<END unless act_local();
+ fail __ <<END unless act_local();
--dry-run specified but we actually wanted the results of git fetch,
so this is not going to work. Try running dgit fetch first,
or using --damp-run instead of --dry-run.
END
- print STDERR <<END;
-warning: git ls-remote suggests we want $lrefname
-warning: and it should refer to $want
+ print STDERR f_ <<END, $lrefname, $want;
+warning: git ls-remote suggests we want %s
+warning: and it should refer to %s
warning: but git fetch didn't fetch that object to any relevant ref.
warning: This may be due to a race with someone updating the server.
warning: Will try again...
@@ -2855,8 +2890,8 @@ sub git_fetch_us () {
} elsif ($here{$lref} eq $objid) {
lrfetchref_used $fullrefname;
} else {
- print STDERR
- "Not updating $lref from $here{$lref} to $objid.\n";
+ print STDERR f_ "Not updating %s from %s to %s.\n",
+ $lref, $here{$lref}, $objid;
}
});
}
@@ -2904,20 +2939,20 @@ sub parse_dsc_field ($$) {
}
if (!defined $f) {
- progress "$what: NO git hash";
+ progress f_ "%s: NO git hash", $what;
parse_dsc_field_def_dsc_distro();
} elsif (($dsc_hash, $dsc_distro, $dsc_hint_tag, $dsc_hint_url)
= $f =~ m/^(\w+)\s+($distro_re)\s+($versiontag_re)\s+(\S+)(?:\s|$)/) {
- progress "$what: specified git info ($dsc_distro)";
+ progress f_ "%s: specified git info (%s)", $what, $dsc_distro;
$dsc_hint_tag = [ $dsc_hint_tag ];
} elsif ($f =~ m/^\w+\s*$/) {
$dsc_hash = $&;
parse_dsc_field_def_dsc_distro();
$dsc_hint_tag = [ debiantags +(getfield $dsc, 'Version'),
$dsc_distro ];
- progress "$what: specified git hash";
+ progress f_ "%s: specified git hash", $what;
} else {
- fail "$what: invalid Dgit info";
+ fail f_ "%s: invalid Dgit info", $what;
}
}
@@ -2939,18 +2974,17 @@ sub resolve_dsc_field_commit ($$) {
my $lrf = lrfetchrefs;
if (!$chase_dsc_distro) {
- progress
- "not chasing .dsc distro $dsc_distro: not fetching $what";
+ progress f_ "not chasing .dsc distro %s: not fetching %s",
+ $dsc_distro, $what;
return 0;
}
- progress
- ".dsc names distro $dsc_distro: fetching $what";
+ progress f_ ".dsc names distro %s: fetching %s", $dsc_distro, $what;
my $url = access_giturl();
if (!defined $url) {
- defined $dsc_hint_url or fail <<END;
-.dsc Dgit metadata is in context of distro $dsc_distro
+ defined $dsc_hint_url or fail f_ <<END, $dsc_distro;
+.dsc Dgit metadata is in context of distro %s
for which we have no configured url and .dsc provides no hint
END
my $proto =
@@ -2959,10 +2993,10 @@ END
parse_cfg_bool "dsc-url-proto-ok", 'false',
cfg("dgit.dsc-url-proto-ok.$proto",
"dgit.default.dsc-url-proto-ok")
- or fail <<END;
-.dsc Dgit metadata is in context of distro $dsc_distro
+ or fail f_ <<END, $dsc_distro, $proto;
+.dsc Dgit metadata is in context of distro %s
for which we have no configured url;
-.dsc provides hinted url with protocol $proto which is unsafe.
+.dsc provides hinted url with protocol %s which is unsafe.
(can be overridden by config - consult documentation)
END
$url = $dsc_hint_url;
@@ -2980,30 +3014,30 @@ END
if (parse_cfg_bool 'rewrite-map-enable', 'true', $rewrite_enable) {
if (!defined $mapref) {
- my $lrf = $do_fetch->("rewrite map", $rewritemap) or return;
+ my $lrf = $do_fetch->((__ "rewrite map"), $rewritemap) or return;
$mapref = $lrf.'/'.$rewritemap;
}
my $rewritemapdata = git_cat_file $mapref.':map';
if (defined $rewritemapdata
&& $rewritemapdata =~ m/^$dsc_hash(?:[ \t](\w+))/m) {
- progress
+ progress __
"server's git history rewrite map contains a relevant entry!";
$dsc_hash = $1;
if (defined $dsc_hash) {
- progress "using rewritten git hash in place of .dsc value";
+ progress __ "using rewritten git hash in place of .dsc value";
} else {
- progress "server data says .dsc hash is to be disregarded";
+ progress __ "server data says .dsc hash is to be disregarded";
}
}
}
if (!defined git_cat_file $dsc_hash) {
my @tags = map { "tags/".$_ } @$dsc_hint_tag;
- my $lrf = $do_fetch->("additional commits", @tags) &&
+ my $lrf = $do_fetch->((__ "additional commits"), @tags) &&
defined git_cat_file $dsc_hash
- or fail <<END;
-.dsc Dgit metadata requires commit $dsc_hash
+ or fail f_ <<END, $dsc_hash;
+.dsc Dgit metadata requires commit %s
but we could not obtain that object anywhere.
END
foreach my $t (@tags) {
@@ -3027,11 +3061,11 @@ sub fetch_from_archive () {
get_archive_dsc();
if ($dsc) {
- parse_dsc_field($dsc, 'last upload to archive');
+ parse_dsc_field($dsc, __ 'last upload to archive');
resolve_dsc_field_commit access_basedistro,
lrfetchrefs."/".$rewritemap
} else {
- progress "no version available from the archive";
+ progress __ "no version available from the archive";
}
# If the archive's .dsc has a Dgit field, there are three
@@ -3114,19 +3148,19 @@ sub fetch_from_archive () {
printdebug "previous reference hash=$lastpush_hash\n";
$lastpush_mergeinput = $lastpush_hash && {
Commit => $lastpush_hash,
- Info => "dgit suite branch on dgit git server",
+ Info => (__ "dgit suite branch on dgit git server"),
};
my $lastfetch_hash = git_get_ref(lrref());
printdebug "fetch_from_archive: lastfetch=$lastfetch_hash\n";
my $lastfetch_mergeinput = $lastfetch_hash && {
Commit => $lastfetch_hash,
- Info => "dgit client's archive history view",
+ Info => (__ "dgit client's archive history view"),
};
my $dsc_mergeinput = $dsc_hash && {
Commit => $dsc_hash,
- Info => "Dgit field in .dsc from archive",
+ Info => (__ "Dgit field in .dsc from archive"),
};
my $cwd = getcwd();
@@ -3139,7 +3173,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 die $!;
+ open $gur, "|-", qw(git update-ref --stdin) or confess $!;
}
printf $gur "delete %s %s\n", $fullrefname, $objid;
}
@@ -3153,23 +3187,24 @@ sub fetch_from_archive () {
if (!$lastpush_hash || $dsc_hash eq $lastpush_hash) {
@mergeinputs = $dsc_mergeinput
} elsif (is_fast_fwd($dsc_hash,$lastpush_hash)) {
- print STDERR <<END or die $!;
+ print STDERR f_ <<END, $dsc_hash, $lastpush_hash,
Git commit in archive is behind the last version allegedly pushed/uploaded.
-Commit referred to by archive: $dsc_hash
-Last version pushed with dgit: $lastpush_hash
-$later_warning_msg
+Commit referred to by archive: %s
+Last version pushed with dgit: %s
+%s
END
+ __ $later_warning_msg or confess $!;
@mergeinputs = ($lastpush_mergeinput);
} else {
# Archive has .dsc which is not a descendant of the last dgit
# push. This can happen if the archive moves .dscs about.
# Just follow its lead.
if (is_fast_fwd($lastpush_hash,$dsc_hash)) {
- progress "archive .dsc names newer git commit";
+ progress __ "archive .dsc names newer git commit";
@mergeinputs = ($dsc_mergeinput);
} else {
- progress "archive .dsc names other git commit, fixing up";
+ progress __ "archive .dsc names other git commit, fixing up";
@mergeinputs = ($dsc_mergeinput, $lastpush_mergeinput);
}
}
@@ -3189,18 +3224,19 @@ END
} elsif ($lastpush_hash) {
# only in git, not in the archive yet
@mergeinputs = ($lastpush_mergeinput);
- print STDERR <<END or die $!;
+ print STDERR f_ <<END,
Package not found in the archive, but has allegedly been pushed using dgit.
-$later_warning_msg
+%s
END
+ __ $later_warning_msg or confess $!;
} else {
printdebug "nothing found!\n";
if (defined $skew_warning_vsn) {
- print STDERR <<END or die $!;
+ print STDERR f_ <<END, $skew_warning_vsn or confess $!;
Warning: relevant archive skew detected.
-Archive allegedly contains $skew_warning_vsn
+Archive allegedly contains %s
But we were not able to obtain any version from the archive or git.
END
@@ -3263,27 +3299,27 @@ END
my $mcf = dgit_privdir()."/mergecommit";
open MC, ">", $mcf or die "$mcf $!";
- print MC <<END or die $!;
+ print MC <<END or confess $!;
tree $tree
END
my @parents = grep { $_->{Commit} } @mergeinputs;
@parents = reverse @parents if $compat_info->{ReverseParents};
- print MC <<END or die $! foreach @parents;
+ print MC <<END or confess $! foreach @parents;
parent $_->{Commit}
END
- print MC <<END or die $!;
+ print MC <<END or confess $!;
author $author
committer $author
END
if (defined $compat_info->{Message}) {
- print MC $compat_info->{Message} or die $!;
+ print MC $compat_info->{Message} or confess $!;
} else {
- print MC <<END or die $!;
-Record $package ($cversion) in archive suite $csuite
+ print MC f_ <<END, $package, $cversion, $csuite or confess $!;
+Record %s (%s) in archive suite %s
Record that
END
@@ -3291,17 +3327,17 @@ END
my ($mi) = (@_);
my $mversion = mergeinfo_version $mi;
printf MC " %-20s %s\n", $mversion, $mi->{Info}
- or die $!;
+ or confess $!;
};
$message_add_info->($mergeinputs[0]);
- print MC <<END or die $!;
+ print MC __ <<END or confess $!;
should be treated as descended from
END
$message_add_info->($_) foreach @mergeinputs[1..$#mergeinputs];
}
- close MC or die $!;
+ close MC or confess $!;
$hash = make_commit $mcf;
} else {
$hash = $mergeinputs[0]{Commit};
@@ -3311,12 +3347,12 @@ END
my $chkff = sub {
my ($lasth, $what) = @_;
return unless $lasth;
- die "$lasth $hash $what ?" unless is_fast_fwd($lasth, $hash);
+ confess "$lasth $hash $what ?" unless is_fast_fwd($lasth, $hash);
};
- $chkff->($lastpush_hash, 'dgit repo server tip (last push)')
+ $chkff->($lastpush_hash, __ 'dgit repo server tip (last push)')
if $lastpush_hash;
- $chkff->($lastfetch_hash, 'local tracking tip (last fetch)');
+ $chkff->($lastfetch_hash, __ 'local tracking tip (last fetch)');
fetch_from_archive_record_1($hash);
@@ -3326,11 +3362,11 @@ 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 <<END or die $!;
+ print STDERR f_ <<END, $skew_warning_vsn, $got_vsn or confess $!;
Warning: archive skew detected. Using the available version:
-Archive allegedly contains $skew_warning_vsn
-We were able to obtain only $got_vsn
+Archive allegedly contains %s
+We were able to obtain only %s
END
}
@@ -3342,7 +3378,7 @@ END
lrfetchref_used lrfetchref();
- check_gitattrs($hash, "fetched source tree");
+ check_gitattrs($hash, __ "fetched source tree");
unshift @end, $del_lrfetchrefs;
return $hash;
@@ -3370,15 +3406,15 @@ sub setup_mergechangelogs (;$) {
while (<ATTRS>) {
chomp;
next if m{^debian/changelog\s};
- print NATTRS $_, "\n" or die $!;
+ print NATTRS $_, "\n" or confess $!;
}
- ATTRS->error and die $!;
+ ATTRS->error and confess $!;
close ATTRS;
}
- print NATTRS "debian/changelog merge=$driver\n" or die $!;
+ print NATTRS "debian/changelog merge=$driver\n" or confess $!;
close NATTRS;
- set_local_git_config "$cb.name", 'debian/changelog merge driver';
+ set_local_git_config "$cb.name", __ 'debian/changelog merge driver';
set_local_git_config "$cb.driver", 'dpkg-mergechangelogs -m %O %A %B %A';
rename "$attrs.new", "$attrs" or die "$attrs: $!";
@@ -3431,7 +3467,7 @@ sub is_gitattrs_setup () {
printdebug "is_gitattrs_setup: found old macro\n";
return 0;
}
- $gai->error and die $!;
+ $gai->error and confess $!;
printdebug "is_gitattrs_setup: found nothing\n";
return undef;
}
@@ -3442,7 +3478,7 @@ sub setup_gitattrs (;$) {
my $already = is_gitattrs_setup();
if ($already) {
- progress <<END;
+ progress __ <<END;
[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes
not doing further gitattributes setup
END
@@ -3452,12 +3488,13 @@ END
my $af = "$maindir_gitcommon/info/attributes";
ensuredir "$maindir_gitcommon/info";
- open GAO, "> $af.new" or die $!;
- print GAO <<END or die $! unless defined $already;
+ open GAO, "> $af.new" or confess $!;
+ print GAO <<END, __ <<ENDT or confess $! unless defined $already;
* dgit-defuse-attrs
$new
-# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
END
+# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)
+ENDT
my $gai = open_main_gitattrs();
if ($gai) {
while (<$gai>) {
@@ -3466,12 +3503,12 @@ END
$_ = $new;
}
chomp;
- print GAO $_, "\n" or die $!;
+ print GAO $_, "\n" or confess $!;
}
- $gai->error and die $!;
+ $gai->error and confess $!;
}
- close GAO or die $!;
- rename "$af.new", "$af" or die "install $af: $!";
+ close GAO or confess $!;
+ rename "$af.new", "$af" or fail f_ "install %s: %s", $af, $!;
}
sub setup_new_tree () {
@@ -3489,7 +3526,7 @@ sub check_gitattrs ($$) {
my @cmd = (@git, qw(ls-tree -lrz --), "${treeish}:");
debugcmd "|",@cmd;
my $gafl = new IO::File;
- open $gafl, "-|", @cmd or die $!;
+ open $gafl, "-|", @cmd or confess $!;
while (<$gafl>) {
chomp or die;
s/^\d+\s+\w+\s+\w+\s+(\d+)\t// or die;
@@ -3497,8 +3534,8 @@ sub check_gitattrs ($$) {
next unless m{(?:^|/)\.gitattributes$};
# oh dear, found one
- print STDERR <<END;
-dgit: warning: $what contains .gitattributes
+ print STDERR f_ <<END, $what;
+dgit: warning: %s contains .gitattributes
dgit: .gitattributes not (fully) defused. Recommended: dgit setup-new-tree.
END
close $gafl;
@@ -3514,24 +3551,25 @@ 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 // die $!;
+ my $pid = fork // confess $!;
if (!$pid) {
forkcheck_setup();
$isuite = $tsuite;
$us .= " [$isuite]";
$debugprefix .= " ";
- progress "fetching $tsuite...";
+ progress f_ "fetching %s...", $tsuite;
canonicalise_suite();
- print $canonsuitefh $csuite, "\n" or die $!;
- close $canonsuitefh or die $!;
+ print $canonsuitefh $csuite, "\n" or confess $!;
+ close $canonsuitefh or confess $!;
$fn->();
return undef;
}
- waitpid $pid,0 == $pid or die $!;
- fail "failed to obtain $tsuite: ".waitstatusmsg() if $? && $?!=256*4;
- seek $canonsuitefh,0,0 or die $!;
+ waitpid $pid,0 == $pid or confess $!;
+ fail f_ "failed to obtain %s: %s", $tsuite, waitstatusmsg()
+ if $? && $?!=256*4;
+ seek $canonsuitefh,0,0 or confess $!;
local $csuite = <$canonsuitefh>;
- die $! unless defined $csuite && chomp $csuite;
+ confess $! unless defined $csuite && chomp $csuite;
if ($? == 256*4) {
printdebug "multisuite $tsuite missing\n";
return $csuite;
@@ -3566,7 +3604,7 @@ sub fork_for_multisuite ($) {
sub { });
return 0 unless defined $cbasesuite;
- fail "package $package missing in (base suite) $cbasesuite"
+ fail f_ "package %s missing in (base suite) %s", $package, $cbasesuite
unless @mergeinputs;
my @csuites = ($cbasesuite);
@@ -3598,9 +3636,9 @@ sub fork_for_multisuite ($) {
if ($previous) {
unshift @mergeinputs, {
Commit => $previous,
- Info => "local combined tracking branch",
- Warning =>
- "archive seems to have rewound: local tracking branch is ahead!",
+ Info => (__ "local combined tracking branch"),
+ Warning => (__
+ "archive seems to have rewound: local tracking branch is ahead!"),
};
}
@@ -3639,8 +3677,9 @@ sub fork_for_multisuite ($) {
my $tree = cmdoutput qw(git rev-parse), $needed[0]{Commit}.':';
my $commit = "tree $tree\n";
- my $msg = "Combine archive branches $csuite [dgit]\n\n".
- "Input branches:\n";
+ my $msg = f_ "Combine archive branches %s [dgit]\n\n".
+ "Input branches:\n",
+ $csuite;
foreach my $mi (sort { $a->{Index} <=> $b->{Index} } @mergeinputs) {
printdebug "multisuite merge include $mi->{Info}\n";
@@ -3652,9 +3691,10 @@ sub fork_for_multisuite ($) {
$mi->{Info};
}
my $authline = clogp_authline mergeinfo_getclogp $needed[0];
- $msg .= "\nKey\n".
+ $msg .= __ "\nKey\n".
" * marks the highest version branch, which choose to use\n".
- " + marks each branch which was not already an ancestor\n\n".
+ " + marks each branch which was not already an ancestor\n\n";
+ $msg .=
"[dgit multi-suite $csuite]\n";
$commit .=
"author $authline\n".
@@ -3666,15 +3706,15 @@ sub fork_for_multisuite ($) {
fetch_from_archive_record_1($output);
fetch_from_archive_record_2($output);
- progress "calculated combined tracking suite $csuite";
+ progress f_ "calculated combined tracking suite %s", $csuite;
return 1;
}
sub clone_set_head () {
- open H, "> .git/HEAD" or die $!;
- print H "ref: ".lref()."\n" or die $!;
- close H or die $!;
+ open H, "> .git/HEAD" or confess $!;
+ print H "ref: ".lref()."\n" or confess $!;
+ close H or confess $!;
}
sub clone_finish ($) {
my ($dstdir) = @_;
@@ -3684,7 +3724,7 @@ sub clone_finish ($) {
git ls-tree -r --name-only -z HEAD | \
xargs -0r touch -h -r . --
END
- printdone "ready for work in $dstdir";
+ printdone f_ "ready for work in %s", $dstdir;
}
sub clone ($) {
@@ -3692,7 +3732,7 @@ sub clone ($) {
# once in parent after first suite fetched,
# and then again in child after everything is finished
my ($dstdir) = @_;
- badusage "dry run makes no sense with clone" unless act_local();
+ badusage __ "dry run makes no sense with clone" unless act_local();
my $multi_fetched = fork_for_multisuite(sub {
printdebug "multi clone before fetch merge\n";
@@ -3709,7 +3749,7 @@ sub clone ($) {
canonicalise_suite();
my $hasgit = check_for_git();
- mkdir $dstdir or fail "create \`$dstdir': $!";
+ mkdir $dstdir or fail f_ "create \`%s': %s", $dstdir, $!;
changedir $dstdir;
runcmd @git, qw(init -q);
record_maindir();
@@ -3720,11 +3760,11 @@ sub clone ($) {
runcmd @git, qw(remote add), 'origin', $giturl;
}
if ($hasgit) {
- progress "fetching existing git history";
+ progress __ "fetching existing git history";
git_fetch_us();
runcmd_ordryrun_local @git, qw(fetch origin);
} else {
- progress "starting new git history";
+ progress __ "starting new git history";
}
fetch_from_archive() or no_such_package;
my $vcsgiturl = $dsc->{'Vcs-Git'};
@@ -3749,13 +3789,13 @@ sub fetch_one () {
cfg 'dgit.vcs-git.suites')) {
my $current = cfg 'remote.vcs-git.url', 'RETURN-UNDEF';
if (defined $current && $current ne $vcsgiturl) {
- print STDERR <<END;
-FYI: Vcs-Git in $csuite has different url to your vcs-git remote.
+ print STDERR f_ <<END, $csuite;
+FYI: Vcs-Git in %s has different url to your vcs-git remote.
Your vcs-git remote url may be out of date. Use dgit update-vcs-git ?
END
}
}
- printdone "fetched into ".lrref();
+ printdone f_ "fetched into %s", lrref();
}
sub dofetch () {
@@ -3766,15 +3806,16 @@ sub dofetch () {
sub pull () {
dofetch();
- runcmd_ordryrun_local @git, qw(merge -m),"Merge from $csuite [dgit]",
+ runcmd_ordryrun_local @git, qw(merge -m),
+ (f_ "Merge from %s [dgit]", $csuite),
lrref();
- printdone "fetched to ".lrref()." and merged into HEAD";
+ printdone f_ "fetched to %s and merged into HEAD", lrref();
}
sub check_not_dirty () {
foreach my $f (qw(local-options local-patch-header)) {
if (stat_exists "debian/source/$f") {
- fail "git tree contains debian/source/$f";
+ fail f_ "git tree contains debian/source/%s", $f;
}
}
@@ -3792,9 +3833,10 @@ sub commit_admin ($) {
sub quiltify_nofix_bail ($$) {
my ($headinfo, $xinfo) = @_;
if ($quilt_mode eq 'nofix') {
- fail "quilt fixup required but quilt mode is \`nofix'\n".
- "HEAD commit".$headinfo." differs from tree implied by ".
- " debian/patches".$xinfo;
+ fail f_
+ "quilt fixup required but quilt mode is \`nofix'\n".
+ "HEAD commit%s differs from tree implied by debian/patches%s",
+ $headinfo, $xinfo;
}
}
@@ -3809,15 +3851,16 @@ sub commit_quilty_patch () {
}
delete $adds{'.pc'}; # if there wasn't one before, don't add it
if (!%adds) {
- progress "nothing quilty to commit, ok.";
+ progress __ "nothing quilty to commit, ok.";
return;
}
- quiltify_nofix_bail "", " (wanted to commit patch update)";
+ quiltify_nofix_bail "", __ " (wanted to commit patch update)";
my @adds = map { s/[][*?\\]/\\$&/g; $_; } sort keys %adds;
runcmd_ordryrun_local @git, qw(add -f), @adds;
- commit_admin <<END
+ commit_admin +(__ <<ENDT).<<END
Commit Debian 3.0 (quilt) metadata
+ENDT
[dgit ($our_version) quilt-fixup]
END
}
@@ -3837,18 +3880,18 @@ sub get_source_format () {
$options{$_} = 1;
}
}
- F->error and die $!;
+ F->error and confess $!;
close F;
} else {
- die $! unless $!==&ENOENT;
+ confess $! unless $!==&ENOENT;
}
if (!open F, "debian/source/format") {
- die $! unless $!==&ENOENT;
+ confess $! unless $!==&ENOENT;
return '';
}
$_ = <F>;
- F->error and die $!;
+ F->error and confess $!;
chomp;
return ($_, \%options);
}
@@ -3858,12 +3901,12 @@ sub madformat_wantfixup ($) {
return 0 unless $format eq '3.0 (quilt)';
our $quilt_mode_warned;
if ($quilt_mode eq 'nocheck') {
- progress "Not doing any fixup of \`$format' due to".
- " ----no-quilt-fixup or --quilt=nocheck"
+ progress f_ "Not doing any fixup of \`%s'".
+ " due to ----no-quilt-fixup or --quilt=nocheck", $format
unless $quilt_mode_warned++;
return 0;
}
- progress "Format \`$format', need to check/update patch stack"
+ progress f_ "Format \`%s', need to check/update patch stack", $format
unless $quilt_mode_warned++;
return 1;
}
@@ -3871,14 +3914,15 @@ sub madformat_wantfixup ($) {
sub maybe_split_brain_save ($$$) {
my ($headref, $dgitview, $msg) = @_;
# => message fragment "$saved" describing disposition of $dgitview
+ # (used inside parens, in the English texts)
my $save = $internal_object_save{'dgit-view'};
- return "commit id $dgitview" unless defined $save;
+ return f_ "commit id %s", $dgitview unless defined $save;
my @cmd = (shell_cmd 'cd "$1"; shift', $maindir,
git_update_ref_cmd
"dgit --dgit-view-save $msg HEAD=$headref",
$save, $dgitview);
runcmd @cmd;
- return "and left in $save";
+ return f_ "and left in %s", $save;
}
# An "infopair" is a tuple [ $thing, $what ]
@@ -3903,17 +3947,19 @@ sub infopair_lrf_tag_lookup ($$) {
printdebug "infopair_lrfetchref_tag_lookup $tagobj $tagname $what\n";
return [ git_rev_parse($tagobj), $what ];
}
- fail @tagnames==1 ? <<END : <<END;
-Wanted tag $what (@tagnames) on dgit server, but not found
+ fail @tagnames==1 ? (f_ <<END, $what, "@tagnames")
+Wanted tag %s (%s) on dgit server, but not found
END
-Wanted tag $what (one of: @tagnames) on dgit server, but not found
+ : (f_ <<END, $what, "@tagnames");
+Wanted tag %s (one of: %s) on dgit server, but not found
END
}
sub infopair_cond_ff ($$) {
my ($anc,$desc) = @_;
- is_fast_fwd($anc->[0], $desc->[0]) or fail <<END;
-$anc->[1] ($anc->[0]) .. $desc->[1] ($desc->[0]) is not fast forward
+ is_fast_fwd($anc->[0], $desc->[0]) or
+ fail f_ <<END, $anc->[1], $anc->[0], $desc->[1], $desc->[0];
+%s (%s) .. %s (%s) is not fast forward
END
};
@@ -3922,7 +3968,7 @@ sub pseudomerge_version_check ($$) {
my $arch_clogp = commit_getclogp $archive_hash;
my $i_arch_v = [ (getfield $arch_clogp, 'Version'),
- 'version currently in archive' ];
+ __ 'version currently in archive' ];
if (defined $overwrite_version) {
if (length $overwrite_version) {
infopair_cond_equal([ $overwrite_version,
@@ -3930,7 +3976,8 @@ sub pseudomerge_version_check ($$) {
$i_arch_v);
} else {
my $v = $i_arch_v->[0];
- progress "Checking package changelog for archive version $v ...";
+ progress f_
+ "Checking package changelog for archive version %s ...", $v;
my $cd;
eval {
my @xa = ("-f$v", "-t$v");
@@ -3938,7 +3985,8 @@ sub pseudomerge_version_check ($$) {
my $gf = sub {
my ($fn) = @_;
[ (getfield $vclogp, $fn),
- "$fn field from dpkg-parsechangelog @xa" ];
+ (f_ "%s field from dpkg-parsechangelog %s",
+ $fn, "@xa") ];
};
my $cv = $gf->('Version');
infopair_cond_equal($i_arch_v, $cv);
@@ -3947,12 +3995,13 @@ sub pseudomerge_version_check ($$) {
if ($@) {
$@ =~ s/^dgit: //gm;
fail "$@".
- "Perhaps debian/changelog does not mention $v ?";
+ f_ "Perhaps debian/changelog does not mention %s ?", $v;
}
- fail <<END if $cd->[0] =~ m/UNRELEASED/;
-$cd->[1] is $cd->[0]
-Your tree seems to based on earlier (not uploaded) $v.
+ fail f_ <<END, $cd->[1], $cd->[0], $v
+%s is %s
+Your tree seems to based on earlier (not uploaded) %s.
END
+ if $cd->[0] =~ m/UNRELEASED/;
}
}
@@ -3963,7 +4012,8 @@ END
sub pseudomerge_make_commit ($$$$ $$) {
my ($clogp, $dgitview, $archive_hash, $i_arch_v,
$msg_cmd, $msg_msg) = @_;
- progress "Declaring that HEAD inciudes all changes in $i_arch_v->[0]...";
+ progress f_ "Declaring that HEAD inciudes all changes in %s...",
+ $i_arch_v->[0];
my $tree = cmdoutput qw(git rev-parse), "${dgitview}:";
my $authline = clogp_authline $clogp;
@@ -3978,7 +4028,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 die $!;
+ print MC <<END or confess $!;
tree $tree
parent $dgitview
parent $archive_hash
@@ -3989,7 +4039,7 @@ $msg_msg
[$msg_cmd]
END
- close MC or die $!;
+ close MC or confess $!;
return make_commit($pmf);
}
@@ -4018,7 +4068,7 @@ sub splitbrain_pseudomerge ($$$$) {
my $i_arch_v = pseudomerge_version_check($clogp, $archive_hash);
if (!defined $overwrite_version) {
- progress "Checking that HEAD inciudes all changes in archive...";
+ progress __ "Checking that HEAD inciudes all changes in archive...";
}
return $dgitview if is_fast_fwd $archive_hash, $dgitview;
@@ -4026,10 +4076,11 @@ sub splitbrain_pseudomerge ($$$$) {
if (defined $overwrite_version) {
} elsif (!eval {
my $t_dep14 = debiantag_maintview $i_arch_v->[0], access_nomdistro;
- my $i_dep14 = infopair_lrf_tag_lookup($t_dep14, "maintainer view tag");
+ my $i_dep14 = infopair_lrf_tag_lookup($t_dep14,
+ __ "maintainer view tag");
my $t_dgit = debiantag_new $i_arch_v->[0], access_nomdistro;
- my $i_dgit = infopair_lrf_tag_lookup($t_dgit, "dgit view tag");
- my $i_archive = [ $archive_hash, "current archive contents" ];
+ my $i_dgit = infopair_lrf_tag_lookup($t_dgit, __ "dgit view tag");
+ my $i_archive = [ $archive_hash, __ "current archive contents" ];
printdebug "splitbrain_pseudomerge i_archive @$i_archive\n";
@@ -4039,25 +4090,25 @@ sub splitbrain_pseudomerge ($$$$) {
1;
}) {
$@ =~ s/^\n//; chomp $@;
- print STDERR <<END;
+ print STDERR <<END.(__ <<ENDT);
$@
-| Not fast forward; maybe --overwrite is needed ? Please see dgit(1).
END
+| Not fast forward; maybe --overwrite is needed ? Please see dgit(1).
+ENDT
finish -1;
}
+ my $arch_v = $i_arch_v->[0];
my $r = pseudomerge_make_commit
$clogp, $dgitview, $archive_hash, $i_arch_v,
"dgit --quilt=$quilt_mode",
- (defined $overwrite_version ? <<END_OVERWR : <<END_MAKEFF);
-Declare fast forward from $i_arch_v->[0]
-END_OVERWR
-Make fast forward from $i_arch_v->[0]
-END_MAKEFF
+ (defined $overwrite_version
+ ? f_ "Declare fast forward from %s\n", $arch_v
+ : f_ "Make fast forward from %s\n", $arch_v);
maybe_split_brain_save $maintview, $r, "pseudomerge";
- progress "Made pseudo-merge of $i_arch_v->[0] into dgit view.";
+ progress f_ "Made pseudo-merge of %s into dgit view.", $arch_v;
return $r;
}
@@ -4070,7 +4121,7 @@ sub plain_overwrite_pseudomerge ($$$) {
return $head if is_fast_fwd $archive_hash, $head;
- my $m = "Declare fast forward from $i_arch_v->[0]";
+ my $m = f_ "Declare fast forward from %s", $i_arch_v->[0];
my $r = pseudomerge_make_commit
$clogp, $head, $archive_hash, $i_arch_v,
@@ -4078,7 +4129,7 @@ sub plain_overwrite_pseudomerge ($$$) {
runcmd git_update_ref_cmd $m, 'HEAD', $r, $head;
- progress "Make pseudo-merge of $i_arch_v->[0] into your HEAD.";
+ progress f_ "Make pseudo-merge of %s into your HEAD.", $i_arch_v->[0];
return $r;
}
@@ -4090,7 +4141,8 @@ sub push_parse_changelog ($) {
my $clogpackage = getfield $clogp, 'Source';
$package //= $clogpackage;
- fail "-p specified $package but changelog specified $clogpackage"
+ fail f_ "-p specified %s but changelog specified %s",
+ $package, $clogpackage
unless $package eq $clogpackage;
my $cversion = getfield $clogp, 'Version';
@@ -4111,8 +4163,9 @@ sub push_parse_dsc ($$$) {
my $dversion = getfield $dsc, 'Version';
my $dscpackage = getfield $dsc, 'Source';
($dscpackage eq $package && $dversion eq $cversion) or
- fail "$dscfn is for $dscpackage $dversion".
- " but debian/changelog is for $package $cversion";
+ fail f_ "%s is for %s %s but debian/changelog is for %s %s",
+ $dscfn, $dscpackage, $dversion,
+ $package, $cversion;
}
sub push_tagwants ($$$$) {
@@ -4166,13 +4219,13 @@ sub push_mktags ($$ $$ $) {
$dsc->{$ourdscfield[0]} = join " ",
$tagwants->[0]{Objid}, $declaredistro, $tagwants->[0]{Tag},
$reader_giturl;
- $dsc->save("$dscfn.tmp") or die $!;
+ $dsc->save("$dscfn.tmp") or confess $!;
my $changes = parsecontrol($changesfile,$changesfilewhat);
foreach my $field (qw(Source Distribution Version)) {
$changes->{$field} eq $clogp->{$field} or
- fail "changes field $field \`$changes->{$field}'".
- " does not match changelog \`$clogp->{$field}'";
+ fail f_ "changes field %s \`%s' does not match changelog \`%s'",
+ $field, $changes->{$field}, $clogp->{$field};
}
my $cversion = getfield $clogp, 'Version';
@@ -4189,8 +4242,8 @@ sub push_mktags ($$ $$ $) {
my $head = $tw->{Objid};
my $tag = $tw->{Tag};
- open TO, '>', $tfn->('.tmp') or die $!;
- print TO <<END or die $!;
+ open TO, '>', $tfn->('.tmp') or confess $!;
+ print TO <<END or confess $!;
object $head
type commit
tag $tag
@@ -4198,25 +4251,30 @@ tagger $authline
END
if ($tw->{View} eq 'dgit') {
- print TO <<END or die $!;
-$package release $cversion for $clogsuite ($csuite) [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]
END
foreach my $ref (sort keys %previously) {
- print TO <<END or die $!;
+ print TO <<END or confess $!;
[dgit previously:$ref=$previously{$ref}]
END
}
} elsif ($tw->{View} eq 'maint') {
- print TO <<END or die $!;
-$package release $cversion for $clogsuite ($csuite)
-(maintainer view tag generated by dgit --quilt=$quilt_mode)
+ print TO f_ <<END, $package, $cversion, $clogsuite, $csuite,
+%s release %s for %s (%s)
+(maintainer view tag generated by dgit --quilt=%s)
END
+ $quilt_mode
+ or confess $!;
} else {
- die Dumper($tw)."?";
+ confess Dumper($tw)."?";
}
- close TO or die $!;
+ close TO or confess $!;
my $tagobjfn = $tfn->('.tmp');
if ($sign) {
@@ -4226,7 +4284,7 @@ END
if (!defined $keyid) {
$keyid = getfield $clogp, 'Maintainer';
}
- unlink $tfn->('.tmp.asc') or $!==&ENOENT or die $!;
+ 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');
@@ -4258,7 +4316,7 @@ sub sign_changes ($) {
sub dopush () {
printdebug "actually entering push\n";
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, while checking state of the archive.
You can retry the push, after fixing the problem, if you like.
END
@@ -4268,11 +4326,11 @@ END
my $archive_hash = fetch_from_archive();
if (!$archive_hash) {
$new_package or
- fail "package appears to be new in this suite;".
- " if this is intentional, use --new";
+ fail __ "package appears to be new in this suite;".
+ " if this is intentional, use --new";
}
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, while preparing your push.
You can retry the push, after fixing the problem, if you like.
END
@@ -4296,8 +4354,8 @@ END
my $dscpath = "$buildproductsdir/$dscfn";
stat_exists $dscpath or
- fail "looked for .dsc $dscpath, but $!;".
- " maybe you forgot to build";
+ fail f_ "looked for .dsc %s, but %s; maybe you forgot to build",
+ $dscpath, $!;
responder_send_file('dsc', $dscpath);
@@ -4312,9 +4370,9 @@ END
if (branch_is_gdr_unstitched_ff($symref, $actualhead, $archive_hash)) {
if (quiltmode_splitbrain()) {
my ($ffq_prev, $gdrlast) = branch_gdr_info($symref, $actualhead);
- fail <<END;
-Branch is managed by git-debrebase ($ffq_prev
-exists), but quilt mode ($quilt_mode) implies a split view.
+ fail f_ <<END, $ffq_prev, $quilt_mode;
+Branch is managed by git-debrebase (%s
+exists), but quilt mode (%s) implies a split view.
Pass the right --quilt option or adjust your git config.
Or, maybe, run git-debrebase forget-was-ever-debrebase.
END
@@ -4336,9 +4394,10 @@ END
my $cachekey;
($dgithead, $cachekey) =
quilt_check_splitbrain_cache($actualhead, $upstreamversion);
- $dgithead or fail
- "--quilt=$quilt_mode but no cached dgit view:
- perhaps HEAD changed since dgit build[-source] ?";
+ $dgithead or fail f_
+ "--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,
@@ -4367,7 +4426,7 @@ END
} elsif (deliberately_not_fast_forward) {
$forceflag = '+';
} else {
- fail "dgit push: HEAD is not a descendant".
+ fail __ "dgit push: HEAD is not a descendant".
" of the archive's version.\n".
"To overwrite the archive's contents,".
" pass --overwrite[=VERSION].\n".
@@ -4377,7 +4436,7 @@ END
}
changedir $playground;
- progress "checking that $dscfn corresponds to HEAD";
+ progress f_ "checking that %s corresponds to HEAD", $dscfn;
runcmd qw(dpkg-source -x --),
$dscpath =~ m#^/# ? $dscpath : "$maindir/$dscpath";
my ($tree,$dir) = mktree_in_ud_from_only_subdir("source package");
@@ -4410,22 +4469,27 @@ END
}
}
if (@mode_changes) {
- fail <<END.(join '', @mode_changes).<<END;
-HEAD specifies a different tree to $dscfn:
+ fail +(f_ <<ENDT, $dscfn).<<END
+HEAD specifies a different tree to %s:
+ENDT
$diffs
END
+ .(join '', @mode_changes)
+ .(f_ <<ENDT, $tree, $referent);
There is a problem with your source tree (see dgit(7) for some hints).
-To see a full diff, run git diff $tree $referent
-END
+To see a full diff, run git diff %s %s
+ENDT
}
- fail <<END;
-HEAD specifies a different tree to $dscfn:
+ fail +(f_ <<ENDT, $dscfn).<<END.(f_ <<ENDT, $tree, $referent);
+HEAD specifies a different tree to %s:
+ENDT
$diffs
+END
Perhaps you forgot to build. Or perhaps there is a problem with your
source tree (see dgit(7) for some hints). To see a full diff, run
- git diff $tree $referent
-END
+ git diff %s %s
+ENDT
} else {
failedcmd @diffcmd;
}
@@ -4433,9 +4497,10 @@ END
if (!$changesfile) {
my $pat = changespat $cversion;
my @cs = glob "$buildproductsdir/$pat";
- fail "failed to find unique changes file".
- " (looked for $pat in $buildproductsdir);".
- " perhaps you need to use dgit -C"
+ fail f_ "failed to find unique changes file".
+ " (looked for %s in %s);".
+ " perhaps you need to use dgit -C",
+ $pat, $buildproductsdir
unless @cs==1;
($changesfile) = @cs;
} else {
@@ -4454,21 +4519,23 @@ END
if ($sourceonlypolicy eq 'ok') {
} elsif ($sourceonlypolicy eq 'always') {
forceable_fail [qw(uploading-binaries)],
- "uploading binaries, although distroy policy is source only"
+ __ "uploading binaries, although distroy policy is source only"
if $hasdebs;
} elsif ($sourceonlypolicy eq 'never') {
forceable_fail [qw(uploading-source-only)],
- "source-only upload, although distroy policy requires .debs"
+ __ "source-only upload, although distroy policy requires .debs"
if !$hasdebs;
} elsif ($sourceonlypolicy eq 'not-wholly-new') {
forceable_fail [qw(uploading-source-only)],
- "source-only upload, even though package is entirely NEW\n".
- "(this is contrary to policy in ".(access_nomdistro()).")"
+ f_ "source-only upload, even though package is entirely NEW\n".
+ "(this is contrary to policy in %s)",
+ access_nomdistro()
if !$hasdebs
&& $new_package
&& !(archive_query('package_not_wholly_new', $package) // 1);
} else {
- badcfg "unknown source-only-uploads policy \`$sourceonlypolicy'";
+ badcfg f_ "unknown source-only-uploads policy \`%s'",
+ $sourceonlypolicy;
}
# Perhaps adjust .dsc to contain right set of origs
@@ -4510,7 +4577,7 @@ END
dgit_privdir()."/tag");
my @tagobjfns;
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, while signing the tag.
You can retry the push, after fixing the problem, if you like.
END
@@ -4523,7 +4590,7 @@ END
$changesfile,$changesfile,
\@tagwants);
}
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, *after* signing the tag.
If you want to try again, you should use a new version number.
END
@@ -4540,7 +4607,7 @@ END
@git, qw(update-ref), "refs/tags/$tag", $tag_obj_hash;
}
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, while updating the remote git repository - see messages above.
If you want to try again, you should use a new version number.
END
@@ -4557,7 +4624,7 @@ END
qw(-c push.followTags=false push), access_giturl(), @pushrefs;
runcmd_ordryrun git_update_ref_cmd 'dgit push', lrref(), $dgithead;
- supplementary_message(<<'END');
+ supplementary_message(__ <<'END');
Push failed, while obtaining signatures on the .changes and .dsc.
If it was just that the signature failed, you may try again by using
debsign by hand to sign the changes file (see the command dgit tried,
@@ -4574,22 +4641,22 @@ END
if (act_local()) {
rename "$dscpath.tmp",$dscpath or die "$dscfn $!";
} else {
- progress "[new .dsc left in $dscpath.tmp]";
+ progress f_ "[new .dsc left in %s.tmp]", $dscpath;
}
sign_changes $changesfile;
}
- supplementary_message(<<END);
+ supplementary_message(f_ <<END, $changesfile);
Push failed, while uploading package(s) to the archive server.
You can retry the upload of exactly these same files with dput of:
- $changesfile
+ %s
If that .changes file is broken, you will need to use a new version
number for your next attempt at the upload.
END
my $host = access_cfg('upload-host','RETURN-UNDEF');
my @hostarg = defined($host) ? ($host,) : ();
runcmd_ordryrun @dput, @hostarg, $changesfile;
- printdone "pushed and uploaded $cversion";
+ printdone f_ "pushed and uploaded %s", $cversion;
supplementary_message('');
responder_send_command("complete");
@@ -4601,7 +4668,7 @@ sub pre_clone () {
sub cmd_clone {
parseopts();
my $dstdir;
- badusage "-p is not allowed with clone; specify as argument instead"
+ badusage __ "-p is not allowed with clone; specify as argument instead"
if defined $package;
if (@ARGV==1) {
($package) = @ARGV;
@@ -4612,13 +4679,13 @@ sub cmd_clone {
} elsif (@ARGV==3) {
($package,$isuite,$dstdir) = @ARGV;
} else {
- badusage "incorrect arguments to dgit clone";
+ badusage __ "incorrect arguments to dgit clone";
}
notpushing();
$dstdir ||= "$package";
if (stat_exists $dstdir) {
- fail "$dstdir already exists";
+ fail f_ "%s already exists", $dstdir;
}
my $cwd_remove;
@@ -4628,15 +4695,16 @@ sub cmd_clone {
return unless defined $cwd_remove;
if (!chdir "$cwd_remove") {
return if $!==&ENOENT;
- die "chdir $cwd_remove: $!";
+ confess "chdir $cwd_remove: $!";
}
printdebug "clone rmonerror removing $dstdir\n";
if (stat $dstdir) {
- rmtree($dstdir) or die "remove $dstdir: $!\n";
+ rmtree($dstdir) or fail f_ "remove %s: %s\n", $dstdir, $!;
} elsif (grep { $! == $_ }
(ENOENT, ENOTDIR, EACCES, EPERM, ELOOP)) {
} else {
- print STDERR "check whether to remove $dstdir: $!\n";
+ print STDERR f_ "check whether to remove %s: %s\n",
+ $dstdir, $!;
}
};
}
@@ -4673,7 +4741,7 @@ sub fetchpullargs () {
} elsif (@ARGV==1) {
($isuite) = @ARGV;
} else {
- badusage "incorrect arguments to dgit fetch or dgit pull";
+ badusage __ "incorrect arguments to dgit fetch or dgit pull";
}
notpushing();
}
@@ -4689,8 +4757,8 @@ sub cmd_pull {
fetchpullargs();
if (quiltmode_splitbrain()) {
my ($format, $fopts) = get_source_format();
- madformat($format) and fail <<END
-dgit pull not yet supported in split view mode (--quilt=$quilt_mode)
+ madformat($format) and fail f_ <<END, $quilt_mode
+dgit pull not yet supported in split view mode (--quilt=%s)
END
}
pull();
@@ -4699,7 +4767,7 @@ END
sub cmd_checkout {
parseopts();
package_from_d_control();
- @ARGV==1 or badusage "dgit checkout needs a suite argument";
+ @ARGV==1 or badusage __ "dgit checkout needs a suite argument";
($isuite) = @ARGV;
notpushing();
@@ -4761,17 +4829,17 @@ sub cmd_update_vcs_git () {
my @cmd;
my $orgurl = cfg 'remote.vcs-git.url', 'RETURN-UNDEF';
if (!defined $orgurl) {
- print STDERR "setting up vcs-git: $url\n";
+ print STDERR f_ "setting up vcs-git: %s\n", $url;
@cmd = (@git, qw(remote add vcs-git), $url);
} elsif ($orgurl eq $url) {
- print STDERR "vcs git already configured: $url\n";
+ print STDERR f_ "vcs git already configured: %s\n", $url;
} else {
- print STDERR "changing vcs-git url to: $url\n";
+ print STDERR f_ "changing vcs-git url to: %s\n", $url;
@cmd = (@git, qw(remote set-url vcs-git), $url);
}
runcmd_ordryrun_local @cmd;
if ($dofetch) {
- print "fetching (@ARGV)\n";
+ print f_ "fetching (%s)\n", "@ARGV";
runcmd_ordryrun_local @git, qw(fetch vcs-git), @ARGV;
}
}
@@ -4786,7 +4854,7 @@ sub prep_push () {
} elsif (@ARGV==1) {
($specsuite) = (@ARGV);
} else {
- badusage "incorrect arguments to dgit $subcommand";
+ badusage f_ "incorrect arguments to dgit %s", $subcommand;
}
if ($new_package) {
local ($package) = $existing_package; # this is a hack
@@ -4797,8 +4865,9 @@ sub prep_push () {
if (defined $specsuite &&
$specsuite ne $isuite &&
$specsuite ne $csuite) {
- fail "dgit $subcommand: changelog specifies $isuite ($csuite)".
- " but command line specifies $specsuite";
+ fail f_ "dgit %s: changelog specifies %s (%s)".
+ " but command line specifies %s",
+ $subcommand, $isuite, $csuite, $specsuite;
}
}
@@ -4822,11 +4891,11 @@ sub pre_remote_push_build_host {
$we_are_responder = 1;
$us .= " (build host)";
- open PI, "<&STDIN" or die $!;
- open STDIN, "/dev/null" or die $!;
- open PO, ">&STDOUT" or die $!;
+ open PI, "<&STDIN" or confess $!;
+ open STDIN, "/dev/null" or confess $!;
+ open PO, ">&STDOUT" or confess $!;
autoflush PO 1;
- open STDOUT, ">&STDERR" or die $!;
+ open STDOUT, ">&STDERR" or confess $!;
autoflush STDOUT 1;
$vsnwant //= 1;
@@ -4834,9 +4903,9 @@ sub pre_remote_push_build_host {
$vsnwant =~ m{^(?:.*,)?$_(?:,.*)?$}
} @rpushprotovsn_support;
- fail "build host has dgit rpush protocol versions ".
- (join ",", @rpushprotovsn_support).
- " but invocation host has $vsnwant"
+ fail f_ "build host has dgit rpush protocol versions %s".
+ " but invocation host has %s",
+ (join ",", @rpushprotovsn_support), $vsnwant
unless defined $protovsn;
changedir $dir;
@@ -4913,7 +4982,8 @@ sub cmd_rpush {
if (defined $initiator_tempdir) {
rmtree $initiator_tempdir;
- mkdir $initiator_tempdir, 0700 or die "$initiator_tempdir: $!";
+ mkdir $initiator_tempdir, 0700
+ or fail f_ "create %s: %s", $initiator_tempdir, $!;
$i_tmp = $initiator_tempdir;
} else {
$i_tmp = tempdir();
@@ -4949,11 +5019,11 @@ 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;
- die $! unless $got == $pid;
- die "build host child failed $?" if $?;
+ confess $! unless $got == $pid;
+ fail f_ "build host child failed: %s", waitstatusmsg() if $?;
i_cleanup();
- printdebug "all done\n";
+ printdebug __ "all done\n";
finish 0;
}
@@ -4962,7 +5032,7 @@ sub i_resp_file ($) {
my $localname = i_method "i_localname", $keyword;
my $localpath = "$i_tmp/$localname";
stat_exists $localpath and
- badproto \*RO, "file $keyword ($localpath) twice";
+ badproto \*RO, f_ "file %s (%s) twice", $keyword, $localpath;
protocol_receive_file \*RO, $localpath;
i_method "i_file", $keyword;
}
@@ -4970,15 +5040,15 @@ sub i_resp_file ($) {
our %i_param;
sub i_resp_param ($) {
- $_[0] =~ m/^(\S+) (.*)$/ or badproto \*RO, "bad param spec";
+ $_[0] =~ m/^(\S+) (.*)$/ or badproto \*RO, __ "bad param spec";
$i_param{$1} = $2;
}
sub i_resp_previously ($) {
$_[0] =~ m#^(refs/tags/\S+)=(\w+)$#
- or badproto \*RO, "bad previously spec";
+ or badproto \*RO, __ "bad previously spec";
my $r = system qw(git check-ref-format), $1;
- die "bad previously ref spec ($r)" if $r;
+ confess "bad previously ref spec ($r)" if $r;
$previously{$1} = $2;
}
@@ -4995,8 +5065,9 @@ sub i_resp_want ($) {
pushing();
rpush_handle_protovsn_bothends();
- fail "rpush negotiated protocol version $protovsn".
- " which does not support quilt mode $quilt_mode"
+ fail f_ "rpush negotiated protocol version %s".
+ " which does not support quilt mode %s",
+ $protovsn, $quilt_mode
if quiltmode_splitbrain;
my @localpaths = i_method "i_want", $keyword;
@@ -5004,7 +5075,7 @@ sub i_resp_want ($) {
foreach my $localpath (@localpaths) {
protocol_send_file \*RI, $localpath;
}
- print RI "files-end\n" or die $!;
+ print RI "files-end\n" or confess $!;
}
our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
@@ -5039,10 +5110,10 @@ sub i_file_buildinfo {
if (!forceing [qw(buildinfo-changes-mismatch)]) {
files_compare_inputs($bd, $ch);
(getfield $bd, $_) eq (getfield $ch, $_) or
- fail "buildinfo mismatch $_"
+ fail f_ "buildinfo mismatch in field %s", $_
foreach qw(Source Version);
!defined $bd->{$_} or
- fail "buildinfo contains $_"
+ fail f_ "buildinfo contains forbidden field %s", $_
foreach qw(Changes Changed-by Distribution);
}
push @i_buildinfos, $bi;
@@ -5083,7 +5154,7 @@ sub i_want_signed_tag {
return
push_mktags $i_clogp, $i_dscfn,
- $i_changesfn, 'remote changes',
+ $i_changesfn, (__ 'remote changes file'),
\@tagwants;
}
@@ -5109,15 +5180,15 @@ sub quiltify_dpkg_commit ($$$;$) {
mkpath '.git/dgit'; # we are in playtree
my $descfn = ".git/dgit/quilt-description.tmp";
- open O, '>', $descfn or die "$descfn: $!";
+ open O, '>', $descfn or confess "$descfn: $!";
$msg =~ s/\n+/\n\n/;
- print O <<END or die $!;
+ print O <<END or confess $!;
From: $author
${xinfo}Subject: $msg
---
END
- close O or die $!;
+ close O or confess $!;
{
local $ENV{'EDITOR'} = cmdoutput qw(realpath --), $0;
@@ -5158,21 +5229,21 @@ sub quiltify_trees_differ ($$;$$$) {
if ($unrepres) {
eval {
- die "not a plain file or symlink\n"
+ die __ "not a plain file or symlink\n"
unless $newmode =~ m/^(?:10|12)\d{4}$/ ||
$oldmode =~ m/^(?:10|12)\d{4}$/;
if ($oldmode =~ m/[^0]/ &&
$newmode =~ m/[^0]/) {
# both old and new files exist
- die "mode or type changed\n" if $oldmode ne $newmode;
- die "modified symlink\n" unless $newmode =~ m/^10/;
+ die __ "mode or type changed\n" if $oldmode ne $newmode;
+ die __ "modified symlink\n" unless $newmode =~ m/^10/;
} elsif ($oldmode =~ m/[^0]/) {
# deletion
- die "deletion of symlink\n"
+ die __ "deletion of symlink\n"
unless $oldmode =~ m/^10/;
} else {
# creation
- die "creation with non-default mode\n"
+ die __ "creation with non-default mode\n"
unless $newmode =~ m/^100644$/ or
$newmode =~ m/^120000$/;
}
@@ -5202,7 +5273,7 @@ sub quiltify_tree_sentinelfiles ($) {
sub quiltify_splitbrain_needed () {
if (!$split_brain) {
- progress "dgit view: changes are required...";
+ progress __ "dgit view: changes are required...";
runcmd @git, qw(checkout -q -b dgit-view);
$split_brain = 1;
}
@@ -5231,32 +5302,34 @@ sub quiltify_splitbrain ($$$$$$$) {
my ($x,$y) = @_;
my $cmd = "git diff $x $y -- :/ ':!debian'";
$cmd .= " ':!/.gitignore' ':!*/.gitignore'" if $gitignore_special;
- return "\nFor full diff showing the problem(s), type:\n $cmd\n";
+ return f_ "\nFor full diff showing the problem(s), type:\n %s\n",
+ $cmd;
};
if ($quilt_mode =~ m/gbp|unapplied/ &&
($diffbits->{O2H} & 01)) {
- my $msg =
- "--quilt=$quilt_mode specified, implying patches-unapplied git tree\n".
- " but git tree differs from orig in upstream files.";
+ 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") {
- $msg .=
+ $msg .= __
"\n ... debian/patches is missing; perhaps this is a patch queue branch?";
}
fail $msg;
}
if ($quilt_mode =~ m/dpm/ &&
($diffbits->{H2A} & 01)) {
- fail <<END. $fulldiffhint->($oldtiptree,'HEAD');
---quilt=$quilt_mode specified, implying patches-applied git tree
+ fail +(f_ <<END, $quilt_mode). $fulldiffhint->($oldtiptree,'HEAD');
+--quilt=%s specified, implying patches-applied git tree
but git tree differs from result of applying debian/patches to upstream
END
}
if ($quilt_mode =~ m/gbp|unapplied/ &&
($diffbits->{O2A} & 01)) { # some patches
quiltify_splitbrain_needed();
- progress "dgit view: creating patches-applied version using gbp pq";
+ 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
runcmd @git, qw(update-ref refs/heads/dgit-view HEAD);
@@ -5264,8 +5337,8 @@ END
}
if ($quilt_mode =~ m/gbp|dpm/ &&
($diffbits->{O2A} & 02)) {
- fail <<END;
---quilt=$quilt_mode specified, implying that HEAD is for use with a
+ fail f_ <<END, $quilt_mode;
+--quilt=%s specified, implying that HEAD is for use with a
tool which does not create patches for changes to upstream
.gitignores: but, such patches exist in debian/patches.
END
@@ -5273,39 +5346,44 @@ 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";
+ progress __
+ "dgit view: creating patch to represent .gitignore changes";
ensuredir "debian/patches";
my $gipatch = "debian/patches/auto-gitignore";
- open GIPATCH, ">>", "$gipatch" or die "$gipatch: $!";
- stat GIPATCH or die "$gipatch: $!";
- fail "$gipatch already exists; but want to create it".
- " to record .gitignore changes" if (stat _)[7];
- print GIPATCH <<END or die "$gipatch: $!";
+ open GIPATCH, ">>", "$gipatch" or confess "$gipatch: $!";
+ stat GIPATCH or confess "$gipatch: $!";
+ fail f_ "%s already exists; but want to create it".
+ " to record .gitignore changes",
+ $gipatch
+ if (stat _)[7];
+ print GIPATCH +(__ <<END).<<ENDU or die "$gipatch: $!";
Subject: Update .gitignore from Debian packaging branch
The Debian packaging git branch contains these updates to the upstream
.gitignore file(s). This patch is autogenerated, to provide these
updates to users of the official Debian archive view of the package.
+END
[dgit ($our_version) update-gitignore]
---
-END
+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 die $!;
- defined seek SERIES, -1, 2 or $!==EINVAL or die $!;
+ open SERIES, "+>>", "debian/patches/series" or confess $!;
+ defined seek SERIES, -1, 2 or $!==EINVAL or confess $!;
my $newline;
- defined read SERIES, $newline, 1 or die $!;
- print SERIES "\n" or die $! unless $newline eq "\n";
- print SERIES "auto-gitignore\n" or die $!;
+ 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
+ commit_admin +(__ <<END).<<ENDU
Commit patch to update .gitignore
+END
[dgit ($our_version) update-gitignore-quilt-fixup]
-END
+ENDU
}
my $dgitview = git_rev_parse 'HEAD';
@@ -5315,8 +5393,8 @@ END
changedir "$playground/work";
- my $saved = maybe_split_brain_save $headref, $dgitview, "converted";
- progress "dgit view: created ($saved)";
+ my $saved = maybe_split_brain_save $headref, $dgitview, __ "converted";
+ progress f_ "dgit view: created (%s)", $saved;
}
sub quiltify ($$$$) {
@@ -5381,7 +5459,7 @@ sub quiltify ($$$$) {
my $c = shift @todo;
next if $considered{$c->{Commit}}++;
- $not->($c, "maximum search space exceeded") if --$max_work <= 0;
+ $not->($c, __ "maximum search space exceeded") if --$max_work <= 0;
printdebug "quiltify investigate $c->{Commit}\n";
@@ -5399,7 +5477,7 @@ sub quiltify ($$$$) {
}
my $c_sentinels = quiltify_tree_sentinelfiles $c->{Commit};
- $not->($c, "has $c_sentinels not $t_sentinels")
+ $not->($c, f_ "has %s not %s", $c_sentinels, $t_sentinels)
if $c_sentinels ne $t_sentinels;
my $commitdata = cmdoutput @git, qw(cat-file commit), $c->{Commit};
@@ -5408,13 +5486,14 @@ sub quiltify ($$$$) {
my @parents = ($commitdata =~ m/^parent (\w+)$/gm);
@parents = map { { Commit => $_, Child => $c } } @parents;
- $not->($c, "root commit") if !@parents;
+ $not->($c, __ "root commit") if !@parents;
foreach my $p (@parents) {
$p->{Nontrivial}= quiltify_trees_differ $p->{Commit},$c->{Commit};
}
my $ndiffers = grep { $_->{Nontrivial} } @parents;
- $not->($c, "merge ($ndiffers nontrivial parents)") if $ndiffers > 1;
+ $not->($c, f_ "merge (%s nontrivial parents)", $ndiffers)
+ if $ndiffers > 1;
foreach my $p (@parents) {
printdebug "considering C=$c->{Commit} P=$p->{Commit}\n";
@@ -5424,7 +5503,7 @@ sub quiltify ($$$$) {
my $patchstackchange = cmdoutput @cmd;
if (length $patchstackchange) {
$patchstackchange =~ s/\n/,/g;
- $not->($p, "changed $patchstackchange");
+ $not->($p, f_ "changed %s", $patchstackchange);
}
printdebug " search queue P=$p->{Commit} ",
@@ -5441,19 +5520,17 @@ sub quiltify ($$$$) {
$x =~ s/(.*?[0-9a-z]{8})[0-9a-z]*$/$1/;
return $x;
};
- my $reportnot = sub {
- my ($notp) = @_;
- my $s = $abbrev->($notp);
- my $c = $notp->{Child};
- $s .= "..".$abbrev->($c) if $c;
- $s .= ": ".$notp->{Whynot};
- return $s;
- };
if ($quilt_mode eq 'linear') {
- print STDERR "\n$us: error: quilt fixup cannot be linear. Stopped at:\n";
+ print STDERR f_
+ "\n%s: error: quilt fixup cannot be linear. Stopped at:\n",
+ $us;
my $all_gdr = !!@nots;
foreach my $notp (@nots) {
- print STDERR "$us: ", $reportnot->($notp), "\n";
+ my $c = $notp->{Child};
+ my $cprange = $abbrev->($notp);
+ $cprange .= "..".$abbrev->($c) if $c;
+ print STDERR f_ "%s: %s: %s\n",
+ $us, $cprange, $notp->{Whynot};
$all_gdr &&= $notp->{Child} &&
(git_cat_file $notp->{Child}{Commit}, 'commit')
=~ m{^\[git-debrebase(?! split[: ]).*\]$}m;
@@ -5463,13 +5540,13 @@ sub quiltify ($$$$) {
[ grep { $_->[0] ne 'quilt-mode' } @$failsuggestion ]
if $all_gdr;
print STDERR "$us: $_->[1]\n" foreach @$failsuggestion;
- fail
+ fail __
"quilt history linearisation failed. Search \`quilt fixup' in dgit(7).\n";
} elsif ($quilt_mode eq 'smash') {
} elsif ($quilt_mode eq 'auto') {
- progress "quilt fixup cannot be linear, smashing...";
+ progress __ "quilt fixup cannot be linear, smashing...";
} else {
- die "$quilt_mode ?";
+ confess "$quilt_mode ?";
}
my $time = $ENV{'GIT_COMMITTER_DATE'} || time;
@@ -5479,12 +5556,14 @@ sub quiltify ($$$$) {
quiltify_dpkg_commit "auto-$version-$target-$time",
(getfield $clogp, 'Maintainer'),
- "Automatically generated patch ($clogp->{Version})\n".
- "Last (up to) $ncommits git changes, FYI:\n\n". $msg;
+ (f_ "Automatically generated patch (%s)\n".
+ "Last (up to) %s git changes, FYI:\n\n",
+ $clogp->{Version}, $ncommits).
+ $msg;
return;
}
- progress "quiltify linearisation planning successful, executing...";
+ progress __ "quiltify linearisation planning successful, executing...";
for (my $p = $sref_S;
my $c = $p->{Child};
@@ -5518,15 +5597,16 @@ sub quiltify ($$$$) {
my ($what) = @_;
eval {
- die "contains unexpected slashes\n" if m{//} || m{/$};
- die "contains leading punctuation\n" if m{^\W} || m{/\W};
- die "contains bad character(s)\n" if m{[^-a-z0-9_.+=~/]}i;
- die "is series file\n" if m{$series_filename_re}o;
- die "too long" if length > 200;
+ die __ "contains unexpected slashes\n" if m{//} || m{/$};
+ die __ "contains leading punctuation\n" if m{^\W} || m{/\W};
+ die __ "contains bad character(s)\n" if m{[^-a-z0-9_.+=~/]}i;
+ die __ "is series file\n" if m{$series_filename_re}o;
+ die __ "too long\n" if length > 200;
};
return $_ unless $@;
- print STDERR "quiltifying commit $cc:".
- " ignoring/dropping Gbp-Pq $what: $@";
+ print STDERR f_
+ "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s",
+ $cc, $what, $@;
return undef;
};
@@ -5554,7 +5634,7 @@ sub quiltify ($$$$) {
$patchname = $translitname;
};
print STDERR
- "dgit: patch title transliteration error: $@"
+ +(f_ "dgit: patch title transliteration error: %s", $@)
if $@;
$patchname =~ y/ A-Z/-a-z/;
$patchname =~ y/-a-z0-9_.+=~//cd;
@@ -5576,7 +5656,7 @@ sub quiltify ($$$$) {
for ($index='';
stat "debian/patches/$patchname$index";
$index++) { }
- $!==ENOENT or die "$patchname$index $!";
+ $!==ENOENT or confess "$patchname$index $!";
runcmd @git, qw(checkout -q), $cc;
@@ -5635,7 +5715,10 @@ END
if (act_local()) {
debugcmd "+",@cmd;
$!=0; $?=-1;
- failedcmd @cmd if system @cmd and $?!=7*256;
+ failedcmd @cmd
+ if system @cmd
+ and not ($? == 7*256 or
+ $? == -1 && $!==ENOENT);
} else {
dryrun_report @cmd;
}
@@ -5661,7 +5744,7 @@ END
sub unpack_playtree_mkwork ($) {
my ($headref) = @_;
- mkdir "work" or die $!;
+ mkdir "work" or confess $!;
changedir "work";
mktree_in_ud_here();
runcmd @git, qw(reset -q --hard), $headref;
@@ -5690,17 +5773,18 @@ sub unpack_playtree_linkorigs ($$) {
sub quilt_fixup_delete_pc () {
runcmd @git, qw(rm -rqf .pc);
- commit_admin <<END
+ commit_admin +(__ <<END).<<ENDU
Commit removal of .pc (quilt series tracking data)
+END
[dgit ($our_version) upgrade quilt-remove-pc]
-END
+ENDU
}
sub quilt_fixup_singlepatch ($$$) {
my ($clogp, $headref, $upstreamversion) = @_;
- progress "starting quiltify (single-debian-patch)";
+ progress __ "starting quiltify (single-debian-patch)";
# dpkg-source --commit generates new patches even if
# single-debian-patch is in debian/source/options. In order to
@@ -5727,8 +5811,8 @@ sub quilt_make_fake_dsc ($) {
my $fakeversion="$upstreamversion-~~DGITFAKE";
- my $fakedsc=new IO::File 'fake.dsc', '>' or die $!;
- print $fakedsc <<END or die $!;
+ my $fakedsc=new IO::File 'fake.dsc', '>' or confess $!;
+ print $fakedsc <<END or confess $!;
Format: 3.0 (quilt)
Source: $package
Version: $fakeversion
@@ -5741,11 +5825,11 @@ END
my $md = new Digest::MD5;
my $fh = new IO::File $b, '<' or die "$b $!";
- stat $fh or die $!;
+ stat $fh or confess $!;
my $size = -s _;
$md->addfile($fh);
- print $fakedsc " ".$md->hexdigest." $size $b\n" or die $!;
+ print $fakedsc " ".$md->hexdigest." $size $b\n" or confess $!;
};
unpack_playtree_linkorigs($upstreamversion, $dscaddfile);
@@ -5762,7 +5846,7 @@ END
runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C), $maindir, @files;
$dscaddfile->($debtar);
- close $fakedsc or die $!;
+ close $fakedsc or confess $!;
}
sub quilt_fakedsc2unapplied ($$) {
@@ -5778,7 +5862,7 @@ sub quilt_fakedsc2unapplied ($$) {
changedir 'fake';
- remove_stray_gits("source package");
+ remove_stray_gits(__ "source package");
mktree_in_ud_here();
rmtree '.pc';
@@ -5799,8 +5883,9 @@ sub quilt_check_splitbrain_cache ($$) {
my $splitbrain_cachekey;
- progress
- "dgit: split brain (separate dgit view) may be needed (--quilt=$quilt_mode).";
+ progress f_
+ "dgit: split brain (separate dgit view) may be needed (--quilt=%s).",
+ $quilt_mode;
# we look in the reflog of dgit-intern/quilt-cache
# we look for an entry whose message is the key for the cache lookup
my @cachekey = (qw(dgit), $our_version);
@@ -5830,12 +5915,12 @@ sub quilt_check_splitbrain_cache ($$) {
unpack_playtree_mkwork($headref);
my $saved = maybe_split_brain_save $headref, $cachehit, "cache-hit";
if ($cachehit ne $headref) {
- progress "dgit view: found cached ($saved)";
+ progress f_ "dgit view: found cached (%s)", $saved;
runcmd @git, qw(checkout -q -b dgit-view), $cachehit;
$split_brain = 1;
return ($cachehit, $splitbrain_cachekey);
}
- progress "dgit view: found cached, no changes required";
+ progress __ "dgit view: found cached, no changes required";
return ($headref, $splitbrain_cachekey);
}
@@ -5846,7 +5931,8 @@ sub quilt_check_splitbrain_cache ($$) {
sub quilt_fixup_multipatch ($$$) {
my ($clogp, $headref, $upstreamversion) = @_;
- progress "examining quilt state (multiple patches, $quilt_mode mode)";
+ progress f_ "examining quilt state (multiple patches, %s mode)",
+ $quilt_mode;
# Our objective is:
# - honour any existing .pc in case it has any strangeness
@@ -5935,7 +6021,7 @@ sub quilt_fixup_multipatch ($$$) {
$!=0; $?=-1;
if (system @bbcmd) {
failedcmd @bbcmd if $? < 0;
- fail <<END;
+ fail __ <<END;
failed to apply your git tree's patch stack (from debian/patches/) to
the corresponding upstream tarball(s). Your source tree and .orig
are probably too inconsistent. dgit can only fix up certain kinds of
@@ -5950,10 +6036,10 @@ END
my $mustdeletepc=0;
if (stat_exists ".pc") {
-d _ or die;
- progress "Tree already contains .pc - will use it then delete it.";
+ progress __ "Tree already contains .pc - will use it then delete it.";
$mustdeletepc=1;
} else {
- rename '../fake/.pc','.pc' or die $!;
+ rename '../fake/.pc','.pc' or confess $!;
}
changedir '../fake';
@@ -5986,39 +6072,40 @@ END
}
printdebug "differences \@dl @dl.\n";
- progress sprintf
-"$us: base trees orig=%.20s o+d/p=%.20s",
- $unapplied, $oldtiptree;
- progress sprintf
-"$us: quilt differences: src: %s orig %s gitignores: %s orig %s\n".
-"$us: quilt differences: HEAD %s o+d/p HEAD %s o+d/p",
- $dl[0], $dl[1], $dl[3], $dl[4],
- $dl[2], $dl[5];
+ progress f_
+"%s: base trees orig=%.20s o+d/p=%.20s",
+ $us, $unapplied, $oldtiptree;
+ 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",
+ $us, $dl[0], $dl[1], $dl[3], $dl[4],
+ $us, $dl[2], $dl[5];
if (@unrepres) {
- print STDERR "dgit: cannot represent change: $_->[1]: $_->[0]\n"
+ print STDERR f_ "dgit: cannot represent change: %s: %s\n",
+ $_->[1], $_->[0]
foreach @unrepres;
- forceable_fail [qw(unrepresentable)], <<END;
+ forceable_fail [qw(unrepresentable)], __ <<END;
HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'
END
}
my @failsuggestion;
if (!($diffbits->{O2H} & $diffbits->{O2A})) {
- push @failsuggestion, [ 'unapplied',
- "This might be a patches-unapplied branch." ];
+ push @failsuggestion, [ 'unapplied', __
+ "This might be a patches-unapplied branch." ];
} elsif (!($diffbits->{H2A} & $diffbits->{O2A})) {
- push @failsuggestion, [ 'applied',
- "This might be a patches-applied branch." ];
+ push @failsuggestion, [ 'applied', __
+ "This might be a patches-applied branch." ];
}
- push @failsuggestion, [ 'quilt-mode',
+ push @failsuggestion, [ 'quilt-mode', __
"Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?" ];
- push @failsuggestion, [ 'gitattrs',
+ push @failsuggestion, [ 'gitattrs', __
"Warning: Tree has .gitattributes. See GITATTRIBUTES in dgit(7)." ]
if stat_exists '.gitattributes';
- push @failsuggestion, [ 'origs',
+ push @failsuggestion, [ 'origs', __
"Maybe orig tarball(s) are not identical to git representation?" ];
if (quiltmode_splitbrain()) {
@@ -6028,11 +6115,11 @@ END
return;
}
- progress "starting quiltify (multiple patches, $quilt_mode mode)";
+ progress f_ "starting quiltify (multiple patches, %s mode)", $quilt_mode;
quiltify($clogp,$headref,$oldtiptree,\@failsuggestion);
if (!open P, '>>', ".pc/applied-patches") {
- $!==&ENOENT or die $!;
+ $!==&ENOENT or confess $!;
} else {
close P;
}
@@ -6047,25 +6134,25 @@ END
sub quilt_fixup_editor () {
my $descfn = $ENV{$fakeeditorenv};
my $editing = $ARGV[$#ARGV];
- open I1, '<', $descfn or die "$descfn: $!";
- open I2, '<', $editing or die "$editing: $!";
- unlink $editing or die "$editing: $!";
- open O, '>', $editing or die "$editing: $!";
- while (<I1>) { print O or die $!; } I1->error and die $!;
+ open I1, '<', $descfn or confess "$descfn: $!";
+ 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 $!;
my $copying = 0;
while (<I2>) {
$copying ||= m/^\-\-\- /;
next unless $copying;
- print O or die $!;
+ print O or confess $!;
}
- I2->error and die $!;
+ 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 die $!;
+ 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.
@@ -6078,7 +6165,7 @@ END
}
sub maybe_unapply_patches_again () {
- progress "dgit: Unapplying patches again to tidy up the tree."
+ progress __ "dgit: Unapplying patches again to tidy up the tree."
if $patches_applied_dirtily;
runcmd qw(dpkg-source --after-build .)
if $patches_applied_dirtily & 01;
@@ -6110,8 +6197,9 @@ sub clean_tree () {
} elsif ($cleanmode eq 'check') {
my $leftovers = cmdoutput @git, qw(clean -xdn);
if (length $leftovers) {
- print STDERR $leftovers, "\n" or die $!;
- fail "tree contains uncommitted files and --clean=check specified";
+ print STDERR $leftovers, "\n" or confess $!;
+ fail __
+ "tree contains uncommitted files and --clean=check specified";
}
} elsif ($cleanmode eq 'none') {
} else {
@@ -6120,7 +6208,7 @@ sub clean_tree () {
}
sub cmd_clean () {
- badusage "clean takes no additional arguments" if @ARGV;
+ badusage __ "clean takes no additional arguments" if @ARGV;
notpushing();
clean_tree();
maybe_unapply_patches_again();
@@ -6133,7 +6221,8 @@ 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 "-p is not allowed with dgit $subcommand" if defined $package;
+ badusage f_ "-p is not allowed with dgit %s", $subcommand
+ if defined $package;
my $clogp = parsechangelog();
$isuite = getfield $clogp, 'Distribution';
$package = getfield $clogp, 'Source';
@@ -6158,9 +6247,10 @@ sub build_prep ($) {
my $pat = changespat $version;
foreach my $f (glob "$buildproductsdir/$pat") {
if (act_local()) {
- unlink $f or fail "remove old changes file $f: $!";
+ unlink $f or
+ fail f_ "remove old changes file %s: %s", $f, $!;
} else {
- progress "would remove $f";
+ progress f_ "would remove %s", $f;
}
}
}
@@ -6185,17 +6275,17 @@ sub changesopts_version () {
1;
}) {
print STDERR $@;
- fail
+ fail __
"archive query failed (queried because --since-version not specified)";
}
if (@vsns) {
@vsns = map { $_->[0] } @vsns;
@vsns = sort { -version_compare($a, $b) } @vsns;
$changes_since_version = $vsns[0];
- progress "changelog will contain changes since $vsns[0]";
+ progress f_ "changelog will contain changes since %s", $vsns[0];
} else {
$changes_since_version = '_';
- progress "package seems new, not specifying -v<version>";
+ progress __ "package seems new, not specifying -v<version>";
}
}
if ($changes_since_version ne '_') {
@@ -6238,14 +6328,14 @@ sub massage_dbp_args ($;$) {
$r |= WANTSRC_SOURCE if grep { s/^full$/binary/ } @d;
$r |= WANTSRC_SOURCE if grep { s/^source$// } @d;
$r |= WANTSRC_BUILDER if grep { m/./ } @d;
- fail "Wanted to build nothing!" unless $r;
+ fail __ "Wanted to build nothing!" unless $r;
$dmode = '--build='. join ',', grep m/./, @d;
} else {
$r =
$dmode =~ m/[S]/ ? WANTSRC_SOURCE :
$dmode =~ y/gGF/ABb/ ? WANTSRC_SOURCE | WANTSRC_BUILDER :
$dmode =~ m/[ABb]/ ? WANTSRC_BUILDER :
- die "$dmode ?";
+ confess "$dmode ?";
}
printdebug "massage done $r $dmode.\n";
push @$cmd, $dmode;
@@ -6275,30 +6365,35 @@ sub postbuild_mergechanges ($) {
} @changesfiles;
my $result;
if (@changesfiles==1) {
- fail <<END.$msg_if_onlyone if defined $msg_if_onlyone;
-only one changes file from build (@changesfiles)
+ fail +(f_ <<END, "@changesfiles").$msg_if_onlyone
+only one changes file from build (%s)
END
+ if defined $msg_if_onlyone;
$result = $changesfiles[0];
} elsif (@changesfiles==2) {
my $binchanges = parsecontrol($changesfiles[1], "binary changes file");
foreach my $l (split /\n/, getfield $binchanges, 'Files') {
- fail "$l found in binaries changes file $binchanges"
+ fail f_ "%s found in binaries changes file %s", $l, $binchanges
if $l =~ m/\.dsc$/;
}
runcmd_ordryrun_local @mergechanges, @changesfiles;
my $multichanges = changespat $version,'multi';
if (act_local()) {
- stat_exists $multichanges or fail "$multichanges: $!";
+ stat_exists $multichanges or fail f_
+ "%s unexpectedly not created by build", $multichanges;
foreach my $cf (glob $pat) {
next if $cf eq $multichanges;
- rename "$cf", "$cf.inmulti" or fail "$cf\{,.inmulti}: $!";
+ rename "$cf", "$cf.inmulti" or fail f_
+ "install new changes %s\{,.inmulti}: %s", $cf, $!;
}
}
$result = $multichanges;
} else {
- fail "wrong number of different changes files (@changesfiles)";
+ fail f_ "wrong number of different changes files (%s)",
+ "@changesfiles";
}
- printdone "build successful, results in $result\n" or die $!;
+ printdone f_ "build successful, results in %s\n", $result
+ or confess $!;
}
sub midbuild_checkchanges () {
@@ -6309,9 +6404,9 @@ sub midbuild_checkchanges () {
$_ ne changespat $version,'source' and
$_ ne changespat $version,'multi'
} @unwanted;
- fail <<END
-changes files other than source matching $pat already present; building would result in ambiguity about the intended results.
-Suggest you delete @unwanted.
+ fail +(f_ <<END, $pat, "@unwanted")
+changes files other than source matching %s already present; building would result in ambiguity about the intended results.
+Suggest you delete %s.
END
if @unwanted;
}
@@ -6328,15 +6423,15 @@ sub postbuild_mergechanges_vanilla ($) {
postbuild_mergechanges(undef);
};
} else {
- printdone "build successful\n";
+ printdone __ "build successful\n";
}
}
sub cmd_build {
build_prep_early();
- $buildproductsdir eq '..' or print STDERR <<END;
-$us: warning: build-products-dir set, but not supported by dpkg-buildpackage
-$us: warning: build-products-dir will be ignored; files will go to ..
+ $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 ..
END
$buildproductsdir = '..';
my @dbp = (@dpkgbuildpackage, qw(-us -uc), changesopts_initial(), @ARGV);
@@ -6396,7 +6491,7 @@ sub cmd_gbp_build {
if ($gbp_make_orig) {
my $priv = dgit_privdir();
my $ok = "$priv/origs-gen-ok";
- unlink $ok or $!==&ENOENT or die $!;
+ unlink $ok or $!==&ENOENT or confess $!;
my @origs_cmd = @cmd;
push @origs_cmd, qw(--git-cleaner=true);
push @origs_cmd, "--git-prebuild=".
@@ -6447,7 +6542,7 @@ sub build_source {
$sourcechanges = changespat $version,'source';
if (act_local()) {
unlink "$buildproductsdir/$sourcechanges" or $!==ENOENT
- or fail "remove $sourcechanges: $!";
+ or fail f_ "remove %s: %s", $sourcechanges, $!;
}
my @cmd = (@dpkgsource, qw(-b --));
my $leafdir;
@@ -6484,7 +6579,7 @@ sub build_source {
my ($why, $l) = @_;
printdebug " renaming ($why) $l\n";
rename "$l", bpd_abs()."/$l"
- or fail "put in place new built file ($l): $!";
+ or fail f_ "put in place new built file (%s): %s", $l, $!;
};
foreach my $l (split /\n/, getfield $dsc, 'Files') {
$l =~ m/\S+$/ or next;
@@ -6497,28 +6592,31 @@ sub build_source {
}
sub cmd_build_source {
- badusage "build-source takes no additional arguments" if @ARGV;
+ badusage __ "build-source takes no additional arguments" if @ARGV;
build_prep(WANTSRC_SOURCE);
build_source();
maybe_unapply_patches_again();
- printdone "source built, results in $dscfn and $sourcechanges";
+ printdone f_ "source built, results in %s and %s",
+ $dscfn, $sourcechanges;
}
sub cmd_push_source {
prep_push();
- fail "dgit push-source: --include-dirty/--ignore-dirty does not make".
- "sense with push-source!" if $includedirty;
+ fail __
+ "dgit push-source: --include-dirty/--ignore-dirty does not make".
+ "sense with push-source!"
+ if $includedirty;
build_maybe_quilt_fixup();
if ($changesfile) {
my $changes = parsecontrol("$buildproductsdir/$changesfile",
- "source changes file");
+ __ "source changes file");
unless (test_source_only_changes($changes)) {
- fail "user-specified changes file is not source-only";
+ fail __ "user-specified changes file is not source-only";
}
} else {
# Building a source package is very fast, so just do it
build_source();
- die "er, patches are applied dirtily but shouldn't be.."
+ confess "er, patches are applied dirtily but shouldn't be.."
if $patches_applied_dirtily;
$changesfile = $sourcechanges;
}
@@ -6532,9 +6630,10 @@ sub binary_builder {
midbuild_checkchanges();
in_bpd {
if (act_local()) {
- stat_exists $dscfn or fail "$dscfn (in build products dir): $!";
- stat_exists $sourcechanges
- or fail "$sourcechanges (in build products dir): $!";
+ stat_exists $dscfn or fail f_
+ "%s (in build products dir): %s", $dscfn, $!;
+ stat_exists $sourcechanges or fail f_
+ "%s (in build products dir): %s", $sourcechanges, $!;
}
runcmd_ordryrun_local @$bbuilder, @args;
};
@@ -6546,7 +6645,7 @@ sub binary_builder {
sub cmd_sbuild {
build_prep_early();
- binary_builder(\@sbuild, <<END, qw(-d), $isuite, @ARGV, $dscfn);
+ 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.)
END
@@ -6558,11 +6657,13 @@ sub pbuilder ($) {
# @ARGV is allowed to contain only things that should be passed to
# pbuilder under debbuildopts; just massage those
my $wantsrc = massage_dbp_args \@ARGV;
- fail "you asked for a builder but your debbuildopts didn't ask for".
- " any binaries -- is this really what you meant?"
- unless $wantsrc & WANTSRC_BUILDER;
- fail "we must build a .dsc to pass to the builder but your debbuiltopts".
- " forbids the building of a source package; cannot continue"
+ fail __
+ "you asked for a builder but your debbuildopts didn't ask for".
+ " any binaries -- is this really what you meant?"
+ unless $wantsrc & WANTSRC_BUILDER;
+ fail __
+ "we must build a .dsc to pass to the builder but your debbuiltopts".
+ " forbids the building of a source package; cannot continue"
unless $wantsrc & WANTSRC_SOURCE;
# We do not want to include the verb "build" in @pbuilder because
# the user can customise @pbuilder and they shouldn't be required
@@ -6591,7 +6692,8 @@ sub cmd_quilt_fixup {
}
sub cmd_print_unapplied_treeish {
- badusage "incorrect arguments to dgit print-unapplied-treeish" if @ARGV;
+ badusage __ "incorrect arguments to dgit print-unapplied-treeish"
+ if @ARGV;
my $headref = git_rev_parse('HEAD');
my $clogp = commit_getclogp $headref;
$package = getfield $clogp, 'Source';
@@ -6605,16 +6707,16 @@ sub cmd_print_unapplied_treeish {
my $uv = upstreamversion $version;
quilt_make_fake_dsc($uv);
my $u = quilt_fakedsc2unapplied($headref, $uv);
- print $u, "\n" or die $!;
+ print $u, "\n" or confess $!;
}
sub import_dsc_result {
my ($dstref, $newhash, $what_log, $what_msg) = @_;
my @cmd = (git_update_ref_cmd $what_log, $dstref, $newhash);
runcmd @cmd;
- check_gitattrs($newhash, "source tree");
+ check_gitattrs($newhash, __ "source tree");
- progress "dgit: import-dsc: $what_msg";
+ progress f_ "dgit: import-dsc: %s", $what_msg;
}
sub cmd_import_dsc {
@@ -6627,14 +6729,16 @@ sub cmd_import_dsc {
if (m/^--require-valid-signature$/) {
$needsig = 1;
} else {
- badusage "unknown dgit import-dsc sub-option \`$_'";
+ badusage f_ "unknown dgit import-dsc sub-option \`%s'", $_;
}
}
- badusage "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH" unless @ARGV==2;
+ badusage __ "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
+ unless @ARGV==2;
my ($dscfn, $dstbranch) = @ARGV;
- badusage "dry run makes no sense with import-dsc" unless act_local();
+ badusage __ "dry run makes no sense with import-dsc"
+ unless act_local();
my $force = $dstbranch =~ s/^\+// ? +1 :
$dstbranch =~ s/^\.\.// ? -1 :
@@ -6650,14 +6754,14 @@ sub cmd_import_dsc {
my $chead = cmdoutput_errok @symcmd;
defined $chead or $?==256 or failedcmd @symcmd;
- fail "$dstbranch is checked out - will not update it"
+ fail f_ "%s is checked out - will not update it", $dstbranch
if defined $chead and $chead eq $dstbranch;
my $oldhash = git_get_ref $dstbranch;
- open D, "<", $dscfn or fail "open import .dsc ($dscfn): $!";
+ open D, "<", $dscfn or fail f_ "open import .dsc (%s): %s", $dscfn, $!;
$dscdata = do { local $/ = undef; <D>; };
- D->error and fail "read $dscfn: $!";
+ D->error and fail f_ "read %s: %s", $dscfn, $!;
close C;
# we don't normally need this so import it here
@@ -6668,13 +6772,13 @@ sub cmd_import_dsc {
local $SIG{__WARN__} = sub {
print STDERR $_[0];
return unless $needsig;
- fail "import-dsc signature check failed";
+ fail __ "import-dsc signature check failed";
};
if (!$dp->is_signed()) {
- warn "$us: warning: importing unsigned .dsc\n";
+ warn f_ "%s: warning: importing unsigned .dsc\n", $us;
} else {
my $r = $dp->check_signature();
- die "->check_signature => $r" if $needsig && $r;
+ confess "->check_signature => $r" if $needsig && $r;
}
}
@@ -6682,7 +6786,7 @@ sub cmd_import_dsc {
$package = getfield $dsc, 'Source';
- parse_dsc_field($dsc, "Dgit metadata in .dsc")
+ parse_dsc_field($dsc, __ "Dgit metadata in .dsc")
unless forceing [qw(import-dsc-with-dgit-field)];
parse_dsc_field_def_dsc_distro();
@@ -6692,7 +6796,8 @@ sub cmd_import_dsc {
notpushing();
if (defined $dsc_hash) {
- progress "dgit: import-dsc of .dsc with Dgit field, using git hash";
+ progress __
+ "dgit: import-dsc of .dsc with Dgit field, using git hash";
resolve_dsc_field_commit undef, undef;
}
if (defined $dsc_hash) {
@@ -6700,29 +6805,29 @@ sub cmd_import_dsc {
"echo $dsc_hash | git cat-file --batch-check");
my $objgot = cmdoutput @cmd;
if ($objgot =~ m#^\w+ missing\b#) {
- fail <<END
-.dsc contains Dgit field referring to object $dsc_hash
+ fail f_ <<END, $dsc_hash
+.dsc contains Dgit field referring to object %s
Your git tree does not have that object. Try `git fetch' from a
plausible server (browse.dgit.d.o? alioth?), and try the import-dsc again.
END
}
if ($oldhash && !is_fast_fwd $oldhash, $dsc_hash) {
if ($force > 0) {
- progress "Not fast forward, forced update.";
+ progress __ "Not fast forward, forced update.";
} else {
- fail "Not fast forward to $dsc_hash";
+ fail f_ "Not fast forward to %s", $dsc_hash;
}
}
import_dsc_result $dstbranch, $dsc_hash,
"dgit import-dsc (Dgit): $info",
- "updated git ref $dstbranch";
+ f_ "updated git ref %s", $dstbranch;
return 0;
}
- fail <<END
-Branch $dstbranch already exists
-Specify ..$specbranch for a pseudo-merge, binding in existing history
-Specify +$specbranch to overwrite, discarding existing history
+ fail f_ <<END, $dstbranch, $specbranch, $specbranch
+Branch %s already exists
+Specify ..%s for a pseudo-merge, binding in existing history
+Specify +%s to overwrite, discarding existing history
END
if $oldhash && !$force;
@@ -6732,24 +6837,29 @@ END
my $here = "$buildproductsdir/$f";
if (lstat $here) {
next if stat $here;
- fail "lstat $here works but stat gives $! !";
+ fail f_ "lstat %s works but stat gives %s !", $here, $!;
}
- fail "stat $here: $!" unless $! == ENOENT;
+ fail f_ "stat %s: %s", $here, $! unless $! == ENOENT;
my $there = $dscfn;
if ($dscfn =~ m#^(?:\./+)?\.\./+#) {
$there = $';
} elsif ($dscfn =~ m#^/#) {
$there = $dscfn;
} else {
- fail "cannot import $dscfn which seems to be inside working tree!";
+ fail f_
+ "cannot import %s which seems to be inside working tree!",
+ $dscfn;
}
- $there =~ s#/+[^/]+$## or
- fail "import $dscfn requires ../$f, but it does not exist";
+ $there =~ s#/+[^/]+$## or fail f_
+ "import %s requires .../%s, but it does not exist",
+ $dscfn, $f;
$there .= "/$f";
my $test = $there =~ m{^/} ? $there : "../$there";
- stat $test or fail "import $dscfn requires $test, but: $!";
- symlink $there, $here or fail "symlink $there to $here: $!";
- progress "made symlink $here -> $there";
+ stat $test or fail f_
+ "import %s requires %s, but: %s", $dscfn, $test, $!;
+ symlink $there, $here or fail f_
+ "symlink %s to %s: %s", $there, $here, $!;
+ progress f_ "made symlink %s -> %s", $here, $there;
# print STDERR Dumper($fi);
}
my @mergeinputs = generate_commits_from_dsc();
@@ -6759,21 +6869,24 @@ END
if ($oldhash) {
if ($force > 0) {
- progress "Import, forced update - synthetic orphan git history.";
+ progress __
+ "Import, forced update - synthetic orphan git history.";
} elsif ($force < 0) {
- progress "Import, merging.";
+ progress __ "Import, merging.";
my $tree = cmdoutput @git, qw(rev-parse), "$newhash:";
my $version = getfield $dsc, 'Version';
my $clogp = commit_getclogp $newhash;
my $authline = clogp_authline $clogp;
- $newhash = make_commit_text <<END;
+ $newhash = make_commit_text <<ENDU
tree $tree
parent $newhash
parent $oldhash
author $authline
committer $authline
-Merge $package ($version) import into $dstbranch
+ENDU
+ .(f_ <<END, $package, $version, $dstbranch);
+Merge %s (%s) import into %s
END
} else {
die; # caught earlier
@@ -6782,20 +6895,20 @@ END
import_dsc_result $dstbranch, $newhash,
"dgit import-dsc: $info",
- "results are in in git ref $dstbranch";
+ f_ "results are in in git ref %s", $dstbranch;
}
sub pre_archive_api_query () {
not_necessarily_a_tree();
}
sub cmd_archive_api_query {
- badusage "need only 1 subpath argument" unless @ARGV==1;
+ 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 "exec curl: $!\n";
+ exec @cmd or fail f_ "exec curl: %s\n", $!;
}
sub repos_server_url () {
@@ -6809,53 +6922,56 @@ sub pre_clone_dgit_repos_server () {
not_necessarily_a_tree();
}
sub cmd_clone_dgit_repos_server {
- badusage "need destination argument" unless @ARGV==1;
+ badusage __ "need destination argument" unless @ARGV==1;
my ($destdir) = @ARGV;
my $url = repos_server_url();
my @cmd = (@git, qw(clone), $url, $destdir);
debugcmd ">",@cmd;
- exec @cmd or fail "exec git clone: $!\n";
+ exec @cmd or fail f_ "exec git clone: %s\n", $!;
}
sub pre_print_dgit_repos_server_source_url () {
not_necessarily_a_tree();
}
sub cmd_print_dgit_repos_server_source_url {
- badusage "no arguments allowed to dgit print-dgit-repos-server-source-url"
+ badusage __
+ "no arguments allowed to dgit print-dgit-repos-server-source-url"
if @ARGV;
my $url = repos_server_url();
- print $url, "\n" or die $!;
+ print $url, "\n" or confess $!;
}
sub pre_print_dpkg_source_ignores {
not_necessarily_a_tree();
}
sub cmd_print_dpkg_source_ignores {
- badusage "no arguments allowed to dgit print-dpkg-source-ignores"
+ badusage __
+ "no arguments allowed to dgit print-dpkg-source-ignores"
if @ARGV;
- print "@dpkg_source_ignores\n" or die $!;
+ print "@dpkg_source_ignores\n" or confess $!;
}
sub cmd_setup_mergechangelogs {
- badusage "no arguments allowed to dgit setup-mergechangelogs" if @ARGV;
+ badusage __ "no arguments allowed to dgit setup-mergechangelogs"
+ if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';
setup_mergechangelogs(1);
}
sub cmd_setup_useremail {
- badusage "no arguments allowed to dgit setup-useremail" if @ARGV;
+ badusage __ "no arguments allowed to dgit setup-useremail" if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';
setup_useremail(1);
}
sub cmd_setup_gitattributes {
- badusage "no arguments allowed to dgit setup-useremail" if @ARGV;
+ badusage __ "no arguments allowed to dgit setup-useremail" if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';
setup_gitattrs(1);
}
sub cmd_setup_new_tree {
- badusage "no arguments allowed to dgit setup-tree" if @ARGV;
+ badusage __ "no arguments allowed to dgit setup-tree" if @ARGV;
local $isuite = 'DGIT-SETUP-TREE';
setup_new_tree();
}
@@ -6863,7 +6979,7 @@ sub cmd_setup_new_tree {
#---------- argument parsing and main program ----------
sub cmd_version {
- print "dgit version $our_version\n" or die $!;
+ print "dgit version $our_version\n" or confess $!;
finish 0;
}
@@ -6902,8 +7018,8 @@ defvalopt '', '-C', '.+', sub {
defvalopt '--initiator-tempdir','','.*', sub {
($initiator_tempdir) = (@_);
$initiator_tempdir =~ m#^/# or
- badusage "--initiator-tempdir must be used specify an".
- " absolute, not relative, directory."
+ badusage __ "--initiator-tempdir must be used specify an".
+ " absolute, not relative, directory."
};
sub defoptmodes ($@) {
@@ -6941,11 +7057,11 @@ sub parseopts () {
my ($what) = @_;
@rvalopts = ($_);
if (!defined $val) {
- badusage "$what needs a value" unless @ARGV;
+ badusage f_ "%s needs a value", $what unless @ARGV;
$val = shift @ARGV;
push @rvalopts, $val;
}
- badusage "bad value \`$val' for $what" unless
+ badusage f_ "bad value \`%s' for %s", $val, $what unless
$val =~ m/^$oi->{Re}$(?!\n)/s;
my $how = $oi->{How};
if (ref($how) eq 'SCALAR') {
@@ -7030,7 +7146,8 @@ sub parseopts () {
$_='';
} elsif (m/^--force-/) {
print STDERR
- "$us: warning: ignoring unknown force option $_\n";
+ f_ "%s: warning: ignoring unknown force option %s\n",
+ $us, $_;
$_='';
} elsif (m/^--dgit-tag-format=(old|new)$/s) {
# undocumented, for testing
@@ -7049,7 +7166,7 @@ sub parseopts () {
push @ropts, $_;
$funcopts_long{$_}();
} else {
- badusage "unknown long option \`$_'";
+ badusage f_ "unknown long option \`%s'", $_;
}
} else {
while (m/^-./s) {
@@ -7102,7 +7219,7 @@ sub parseopts () {
$valopt->($oi->{Short});
$_ = '';
} else {
- badusage "unknown short option \`$_'";
+ badusage f_ "unknown short option \`%s'", $_;
}
}
}
@@ -7111,22 +7228,23 @@ sub parseopts () {
sub check_env_sanity () {
my $blocked = new POSIX::SigSet;
- sigprocmask SIG_UNBLOCK, $blocked, $blocked or die $!;
+ sigprocmask SIG_UNBLOCK, $blocked, $blocked or confess $!;
eval {
foreach my $name (qw(PIPE CHLD)) {
my $signame = "SIG$name";
my $signum = eval "POSIX::$signame" // die;
- die "$signame is set to something other than SIG_DFL\n"
+ die f_ "%s is set to something other than SIG_DFL\n",
+ $signame
if defined $SIG{$name} and $SIG{$name} ne 'DEFAULT';
$blocked->ismember($signum) and
- die "$signame is blocked\n";
+ die f_ "%s is blocked\n", $signame;
}
};
return unless $@;
chomp $@;
- fail <<END;
-On entry to dgit, $@
+ fail f_ <<END, $@;
+On entry to dgit, %s
This is a bug produced by something in in your execution environment.
Giving up.
END
@@ -7143,7 +7261,7 @@ sub parseopts_late_defaults () {
my $v = access_cfg("cmd-$k", 'RETURN-UNDEF');
if (defined $v) {
- badcfg "cannot set command for $k"
+ badcfg f_ "cannot set command for %s", $k
unless length $om->[0];
$om->[0] = $v;
}
@@ -7156,7 +7274,7 @@ sub parseopts_late_defaults () {
printdebug "CL $c ", (join " ", map { shellquote } @vl),
"\n" if $debuglevel >= 4;
next unless @vl;
- badcfg "cannot configure options for $k"
+ badcfg f_ "cannot configure options for %s", $k
if $opts_opt_cmdonly{$k};
my $insertpos = $opts_cfg_insertpos{$k};
@$om = ( @$om[0..$insertpos-1],
@@ -7176,7 +7294,7 @@ sub parseopts_late_defaults () {
// access_cfg('quilt-mode', 'RETURN-UNDEF')
// 'linear';
$quilt_mode =~ m/^($quilt_modes_re)$/
- or badcfg "unknown quilt-mode \`$quilt_mode'";
+ or badcfg f_ "unknown quilt-mode \`%s'", $quilt_mode;
$quilt_mode = $1;
}
@@ -7186,11 +7304,12 @@ sub parseopts_late_defaults () {
next if defined $$vr;
$$vr = access_cfg($moc->{Key}, 'RETURN-UNDEF') // $moc->{Default};
my $v = $moc->{Vals}{$$vr};
- badcfg "unknown $moc->{Key} setting \`$$vr'" unless defined $v;
+ badcfg f_ "unknown %s setting \`%s'", $moc->{Key}, $$vr
+ unless defined $v;
$$vr = $v;
}
- fail "dgit: --include-dirty is not supported in split view quilt mode"
+ fail __ "dgit: --include-dirty is not supported in split view quilt mode"
if $split_brain && $includedirty;
if (!defined $cleanmode) {
@@ -7198,7 +7317,7 @@ sub parseopts_late_defaults () {
$cleanmode = access_cfg('clean-mode', 'RETURN-UNDEF');
$cleanmode //= 'dpkg-source';
- badcfg "unknown clean-mode \`$cleanmode'" unless
+ badcfg f_ "unknown clean-mode \`%s'", $cleanmode unless
$cleanmode =~ m/^($cleanmode_re)$(?!\n)/s;
}
@@ -7208,6 +7327,9 @@ sub parseopts_late_defaults () {
$bpd_glob =~ s#[][\\{}*?~]#\\$&#g;
}
+setlocale(LC_MESSAGES, "");
+textdomain("dgit");
+
if ($ENV{$fakeeditorenv}) {
git_slurp_config();
quilt_fixup_editor();
@@ -7216,11 +7338,11 @@ if ($ENV{$fakeeditorenv}) {
parseopts();
check_env_sanity();
-print STDERR "DRY RUN ONLY\n" if $dryrun_level > 1;
-print STDERR "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
+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 die $!;
+ print STDERR __ $helpmsg or confess $!;
finish 8;
}
$cmd = $subcommand = shift @ARGV;
@@ -7233,7 +7355,7 @@ record_maindir if $invoked_in_git_tree;
git_slurp_config();
my $fn = ${*::}{"cmd_$cmd"};
-$fn or badusage "unknown operation $cmd";
+$fn or badusage f_ "unknown operation %s", $cmd;
$fn->();
finish 0;
diff --git a/git-debrebase b/git-debrebase
index 3d1f2a8..79c8321 100755
--- a/git-debrebase
+++ b/git-debrebase
@@ -21,6 +21,7 @@
END { $? = $Debian::Dgit::ExitStatus::desired // -1; };
use Debian::Dgit::GDR;
use Debian::Dgit::ExitStatus;
+use Debian::Dgit::I18n;
use strict;
@@ -30,6 +31,7 @@ setup_sigwarn();
use Memoize;
use Carp;
use POSIX;
+use Locale::gettext;
use Data::Dumper;
use Getopt::Long qw(:config posix_default gnu_compat bundling);
use Dpkg::Version;
@@ -38,7 +40,7 @@ use File::Copy;
$debugcmd_when_debuglevel = 2;
-our ($usage_message) = <<'END';
+our ($usage_message) = i_ <<'END';
usages:
git-debrebase [<options>] [--|-i <git rebase options...>]
git-debrebase [<options>] status
@@ -62,7 +64,7 @@ $|=1;
sub badusage ($) {
my ($m) = @_;
- print STDERR "$us: bad usage: $m\n";
+ print STDERR f_ "%s: bad usage: %s\n", $us, $m;
finish 8;
}
@@ -73,7 +75,7 @@ sub getoptions_main {
}
sub getoptions {
my $sc = shift;
- getoptions_main "bad options follow \`git-debrebase $sc'", @_;
+ getoptions_main +(f_ "bad options follow \`git-debrebase %s'", $sc), @_;
}
sub cfg ($;$) {
@@ -84,7 +86,7 @@ sub cfg ($;$) {
push @cmd, $k;
my $out = cmdoutput_errok @cmd;
if (!defined $out) {
- fail "missing required git config $k" unless $optional;
+ fail f_ "missing required git config %s", $k unless $optional;
return ();
}
my @l = split /\0/, $out;
@@ -103,7 +105,7 @@ sub dd ($) {
sub get_commit ($) {
my ($objid) = @_;
my $data = (git_cat_file $objid, 'commit');
- $data =~ m/(?<=\n)\n/ or die "$objid ($data) ?";
+ $data =~ m/(?<=\n)\n/ or confess "$objid ($data) ?";
return ($`,$');
}
@@ -142,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 die $!;
+ open U, "|-", @upd_cmd or confess $!;
foreach (@$updates) {
printdebug ">= ", $_, "\n";
- print U $_, "\n" or die $!;
+ print U $_, "\n" or confess $!;
}
printdebug ">\$\n";
close U or failedcmd @upd_cmd;
@@ -171,7 +173,8 @@ sub all_snags_summarised () {
sub run_deferred_updates ($) {
my ($mrest) = @_;
- confess 'dangerous internal error' unless all_snags_summarised();
+ my $m = 'dangerous internal error';
+ confess $m.' - '.__ $m unless all_snags_summarised();
merge_wreckage_cleaning \@deferred_updates;
run_ref_updates_now $mrest, \@deferred_updates;
@@ -395,10 +398,10 @@ sub snag ($$;@) {
my ($tag,$msg) = @_; # ignores extra args, for benefit of keycommits
if (grep { $_ eq $tag } @snag_force_opts) {
$snags_forced++;
- print STDERR "git-debrebase: snag ignored (-f$tag): $msg\n";
+ print STDERR f_ "%s: snag ignored (-f%s): %s\n", $us, $tag, $msg;
} else {
$snags_tripped++;
- print STDERR "git-debrebase: snag detected (-f$tag): $msg\n";
+ print STDERR f_ "%s: snag detected (-f%s): %s\n", $us, $tag, $msg;
}
}
@@ -410,17 +413,17 @@ sub snag ($$;@) {
sub snags_maybe_bail () {
return if all_snags_summarised();
if ($snags_forced) {
- printf STDERR
+ print STDERR f_
"%s: snags: %d overriden by individual -f options\n",
$us, $snags_forced;
}
if ($snags_tripped) {
if ($opt_force) {
- printf STDERR
+ print STDERR f_
"%s: snags: %d overriden by global --force\n",
$us, $snags_tripped;
} else {
- fail sprintf
+ fail f_
"%s: snags: %d blocker(s) (you could -f<tag>, or --force)",
$us, $snags_tripped;
}
@@ -452,26 +455,26 @@ sub fail_unprocessable ($) {
changedir $maindir;
my ($ffqs, $ffqm, $symref, $ffq_prev, $gdrlast) = ffq_prev_branchinfo();
- my $mangled = <<END;
+ my $mangled = __ <<END;
Branch/history seems mangled - no longer in gdr format.
See ILLEGAL OPERATIONS in git-debrebase(5).
END
chomp $mangled;
if (defined $ffqm) {
- fail <<END;
-$msg
-Is this meant to be a gdr branch? $ffqm
+ fail f_ <<END, $msg, $ffqm;
+%s
+Is this meant to be a gdr branch? %s
END
} elsif (git_get_ref $ffq_prev) {
- fail <<END;
-$msg
-$mangled
+ fail f_ <<END, $msg, $mangled;
+%s
+%s
Consider git-debrebase scrap, to throw away your recent work.
END
} elsif (!git_get_ref $gdrlast) {
- fail <<END;
-$msg
+ fail f_ <<END, $msg;
+%s
Branch does not seem to be meant to be a git-debrebase branch?
Wrong branch, or maybe you needed git-debrebase convert-from-*.
END
@@ -481,8 +484,8 @@ $msg
$mangled
END
} else {
- fail <<END;
-$msg
+ fail f_ <<END, $msg;
+%s
Branch/history mangled, and diverged since last git-debrebase.
Maybe you reset to, or rebased from, somewhere inappropriate.
END
@@ -606,17 +609,17 @@ sub merge_series ($$$;@) {
my $any = gbp_pq_export "p-$s", $q->{SeriesBase}, $q->{SeriesTip};
my @earlier;
if ($any) {
- open S, $seriesfile or die "$seriesfile $!";
+ open S, $seriesfile or confess "$seriesfile $!";
while (my $patch = <S>) {
- chomp $patch or die $!;
+ chomp $patch or confess $!;
$prereq{$patch} //= {};
foreach my $earlier (@earlier) {
- $prereq{$patch}{$earlier}{$s}++ and die;
+ $prereq{$patch}{$earlier}{$s}++ and confess;
}
push @earlier, $patch;
- stat "debian/patches/$patch" or die "$patch ?";
+ stat "debian/patches/$patch" or confess "$patch ?";
}
- S->error and die "$seriesfile $!";
+ S->error and confess "$seriesfile $!";
close S;
}
read_tree_upstream $newbase, 1;
@@ -695,7 +698,7 @@ sub merge_series ($$$;@) {
my $authordate = sub {
my ($f) = @_;
$authordate{$f} //= do {
- open PF, "<", "debian/patches/$f" or die "$f $!";
+ open PF, "<", "debian/patches/$f" or confess "$f $!";
while (<PF>) {
return $nodate if m/^$/;
last if s{^Date: }{};
@@ -705,7 +708,7 @@ sub merge_series ($$$;@) {
};
};
- open NS, '>', $seriesfile or die $!;
+ open NS, '>', $seriesfile or confess $!;
while (keys %prereq) {
my $best;
@@ -720,7 +723,7 @@ sub merge_series ($$$;@) {
$best = $try;
}
printdebug "merge_series series next $best\n";
- print NS "$best\n" or die $!;
+ print NS "$best\n" or confess $!;
delete $prereq{$best};
foreach my $gp (values %prereq) {
delete $gp->{$best};
@@ -762,9 +765,9 @@ 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 die $!;
- print C $commit or die $!;
- close C or die $!;
+ open C, ">", "../mcommit" or confess $!;
+ print C $commit or confess $!;
+ close C or confess $!;
$build = cmdoutput @git, qw(hash-object -w -t commit ../mcommit);
}
$result = $build;
@@ -835,11 +838,11 @@ sub parsecommit ($;$) {
# $p_ref, if provided, must be [] and is used as a base for Parents
$p_ref //= [];
- die if @$p_ref;
+ confess if @$p_ref;
my ($h,$m) = get_commit $objid;
- my ($t) = $h =~ m/^tree (\w+)$/m or die $objid;
+ my ($t) = $h =~ m/^tree (\w+)$/m or confess $objid;
my (@ph) = $h =~ m/^parent (\w+)$/mg;
my $r = {
@@ -928,9 +931,11 @@ sub classify ($) {
# reject it here then we avoid making the pseudomerge which
# would be needed to push it.
- my $badanchor = sub { $unknown->("git-debrebase \`anchor' but @_"); };
- @p == 2 or return $badanchor->("has other than two parents");
- $haspatches and return $badanchor->("contains debian/patches");
+ my $badanchor = sub {
+ $unknown->(f_ "git-debrebase \`anchor' but %s", "@_");
+ };
+ @p == 2 or return $badanchor->(__ "has other than two parents");
+ $haspatches and return $badanchor->(__ "contains debian/patches");
# How to decide about l/r ordering of anchors ? git
# --topo-order prefers to expand 2nd parent first. There's
@@ -956,11 +961,11 @@ sub classify ($) {
# parents from left to right, in order, so it's easy to see
# which way round a pseudomerge is.
- $p[0]{IsOrigin} and $badanchor->("is an origin commit");
+ $p[0]{IsOrigin} and $badanchor->(__ "is an origin commit");
$p[1]{Differs} & ~DS_DEB and
- $badanchor->("upstream files differ from left parent");
+ $badanchor->(__ "upstream files differ from left parent");
$p[0]{Differs} & ~D_UPS and
- $badanchor->("debian/ differs from right parent");
+ $badanchor->(__ "debian/ differs from right parent");
return $classify->(qw(Anchor),
OrigParents => [ $p[1] ]);
@@ -971,7 +976,7 @@ sub classify ($) {
if ($d == D_PAT_ADD) {
return $classify->(qw(AddPatches));
} elsif ($d & (D_PAT_ADD|D_PAT_OTH)) {
- return $unknown->("edits debian/patches");
+ return $unknown->(__ "edits debian/patches");
} elsif ($d & DS_DEB and !($d & ~DS_DEB)) {
my ($ty,$dummy) = git_cat_file "$p[0]{CommitId}:debian";
if ($ty eq 'tree') {
@@ -983,20 +988,20 @@ sub classify ($) {
} elsif ($ty eq 'missing') {
return $classify->(qw(BreakwaterStart));
} else {
- return $unknown->("parent's debian is not a directory");
+ return $unknown->(__ "parent's debian is not a directory");
}
} elsif ($d == D_UPS) {
return $classify->(qw(Upstream));
} elsif ($d & DS_DEB and $d & D_UPS and !($d & ~(DS_DEB|D_UPS))) {
return $classify->(qw(Mixed));
} elsif ($d == 0) {
- return $unknown->("no changes");
+ return $unknown->(__ "no changes");
} else {
confess "internal error $objid ?";
}
}
if (!@p) {
- return $unknown->("origin commit");
+ return $unknown->(__ "origin commit");
}
if (@p == 2 && @identical == 1) {
@@ -1009,7 +1014,8 @@ sub classify ($) {
if (@p == 2 && @identical == 2) {
my $get_t = sub {
my ($ph,$pm) = get_commit $_[0]{CommitId};
- $ph =~ m/^committer .* (\d+) [-+]\d+$/m or die "$_->{CommitId} ?";
+ $ph =~ m/^committer .* (\d+) [-+]\d+$/m
+ or confess "$_->{CommitId} ?";
$1;
};
my @bytime = @p;
@@ -1046,14 +1052,14 @@ sub classify ($) {
return $classify->("MergedBreakwaters");
}
if ($r->{Msg} =~ m{^\[(git-debrebase|dgit)[: ].*\]$}m) {
- return $unknown->("unknown kind of merge from $1");
+ return $unknown->(f_ "unknown kind of merge from %s", $1);
}
if (@p > 2) {
- return $unknown->("octopus merge");
+ return $unknown->(__ "octopus merge");
}
if (!$opt_merges) {
- return $unknown->("general two-parent merge");
+ return $unknown->(__ "general two-parent merge");
}
return $classify->("VanillaMerge");
@@ -1070,7 +1076,8 @@ sub mergedbreakwaters_anchor ($) {
$best_anchor = $panchor
if !defined $best_anchor
or is_fast_fwd $best_anchor, $panchor;
- fail "inconsistent anchors in merged-breakwaters $p->{CommitId}"
+ fail f_ "inconsistent anchors in merged-breakwaters %s",
+ $p->{CommitId}
unless is_fast_fwd $panchor, $best_anchor;
}
return $best_anchor;
@@ -1109,7 +1116,7 @@ sub keycommits ($;$$$$$) {
my $x = sub {
my ($cb, $tagsfx, $mainwhy, $xwhy) = @_;
my $why = $mainwhy.$xwhy;
- my $m = "branch needs laundering (run git-debrebase): $why";
+ my $m = f_ "branch needs laundering (run git-debrebase): %s", $why;
fail $m unless defined $cb;
return unless $cb;
$cb->("unclean-$tagsfx", $why, $cl, $mainwhy);
@@ -1137,41 +1144,47 @@ sub keycommits ($;$$$$$) {
$found_anchor->($head);
} elsif ($ty eq 'Upstream') {
$x->($unclean, 'ordering',
- "packaging change ($breakwater) follows upstream change"," (eg $head)")
+ (f_ "packaging change (%s) follows upstream change", $breakwater),
+ (f_ " (eg %s)", $head))
if defined $breakwater;
$clogonly = undef;
$breakwater = undef;
} elsif ($ty eq 'Mixed') {
$x->($unclean, 'mixed',
- "found mixed upstream/packaging commit"," ($head)");
+ (__ "found mixed upstream/packaging commit"),
+ (f_ " (%s)", $head));
$clogonly = undef;
$breakwater = undef;
} elsif ($ty eq 'Pseudomerge' or
$ty eq 'AddPatches') {
my $found_pm = 1;
$x->($furniture, (lc $ty),
- "found interchange bureaucracy commit ($ty)"," ($head)");
+ (f_ "found interchange bureaucracy commit (%s)", $ty),
+ (f_ " (%s)", $head));
} elsif ($ty eq 'DgitImportUnpatched') {
if ($found_pm) {
$x->($trouble, 'dgitimport',
- "found dgit dsc import"," ($head)");
+ (__ "found dgit dsc import"),
+ (f_ " (%s)", $head));
return (undef,undef);
} else {
$x->($fatal, 'unprocessable',
- "found bare dgit dsc import with no prior history",
- " ($head)");
+ (__ "found bare dgit dsc import with no prior history"),
+ (f_ " (%s)", $head));
return (undef,undef);
}
} elsif ($ty eq 'VanillaMerge') {
$x->($trouble, 'vanillamerge',
- "found vanilla merge"," ($head)");
+ (__ "found vanilla merge"),
+ (f_ " (%s)", $head));
return (undef,undef);
} elsif ($ty eq 'MergedBreakwaters') {
$found_anchor->(mergedbreakwaters_anchor $cl);
} else {
$x->($fatal, 'unprocessable',
- "found unprocessable commit, cannot cope: $cl->{Why}",
- " ($head)");
+ (f_ "found unprocessable commit, cannot cope: %s",
+ $cl->{Why}),
+ (f_ " (%s)", $head));
return (undef,undef);
}
$head = $cl->{Parents}[0]{CommitId};
@@ -1200,6 +1213,8 @@ sub walk ($;$$$) {
my $cl;
my $xmsg = sub {
my ($prose, $info) = @_;
+ # We deliberately do not translate $prose, since this mostly
+ # appears in commits in Debian and they should be in English.
my $ms = $cl->{Msg};
chomp $ms;
confess unless defined $info;
@@ -1230,12 +1245,14 @@ sub walk ($;$$$) {
if ($nogenerate) {
return (undef,undef);
}
- fail_unprocessable "found unprocessable commit, cannot cope".
- (defined $cl->{Why} ? "; $cl->{Why}:": ':').
- " (commit $cur) (d.".
- (join ' ', map { sprintf "%#x", $_->{Differs} }
- @{ $cl->{Parents} }).
- ")";
+ my $d =
+ join ' ',
+ map { sprintf "%#x", $_->{Differs} }
+ @{ $cl->{Parents} };
+ fail_unprocessable f_ +(defined $cl->{Why}
+ ? i_ 'found unprocessable commit, cannot cope; %3$s: (commit %1$s) (d.%2$s)'
+ : i_ 'found unprocessable commit, cannot cope: (commit %1$s) (d.%2$s)'),
+ $cur, $d, $cl->{Why};
};
my $build;
@@ -1355,10 +1372,10 @@ sub walk ($;$$$) {
# patches as commits. Unfortunately it contains
# debian/patches/.
printdebug "*** WALK BOMB bare dgit import\n";
- $cl->{Why} = "bare dgit dsc import";
+ $cl->{Why} = __ "bare dgit dsc import";
return $bomb->();
}
- die "$ty ?";
+ confess "$ty ?";
} elsif ($ty eq 'MergedBreakwaters') {
$last_anchor = mergedbreakwaters_anchor $cl;
$build_start->(' MergedBreakwaters', $cur);
@@ -1566,10 +1583,10 @@ sub walk ($;$$$) {
printdebug "WALK REBUILD $build ".(scalar @processed)."\n";
- confess "internal error" unless $build eq (pop @processed)->{CommitId};
+ confess __ "internal error" unless $build eq (pop @processed)->{CommitId};
in_workarea sub {
- mkdir $rd or $!==EEXIST or die $!;
+ mkdir $rd or $!==EEXIST or confess $!;
my $current_method;
my $want_debian = $build;
my $want_upstream = $build;
@@ -1679,9 +1696,9 @@ sub walk ($;$$$) {
or confess "$ch ?";
}
my $cf = "$rd/m$rewriting";
- open CD, ">", $cf or die $!;
- print CD $ch, "\n", $cl->{Msg} or die $!;
- close CD or die $!;
+ 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;
@@ -1695,13 +1712,13 @@ sub walk ($;$$$) {
my ($n) = @_;
no warnings qw(exiting);
next if $n eq 'debian/';
- confess "mismatch @_ ?";
+ confess f_ "mismatch %s ?", "@_";
};
trees_diff_walk "$want_debian:debian", "$build:debian", sub {
- confess "mismatch @_ ?";
+ confess f_ "mismatch %s ?", "@_";
};
my @old_parents = map { $_->{CommitId} } @{ $cl->{Parents} };
- confess "mismatch @parents != @old_parents ?"
+ confess f_ "mismatch %s != %s ?", "@parents", "@old_parents"
unless "@parents" eq "@old_parents";
}
if (grep { $method eq $_ } qw(DgitImportUpstreamUpdate)) {
@@ -1711,7 +1728,7 @@ sub walk ($;$$$) {
};
my $final_check = get_differs $build, $input;
- die sprintf "internal error %#x %s %s", $final_check, $input, $build
+ confess f_ "internal error %#x %s %s", $final_check, $input, $build
if $final_check & ~D_PAT_ADD;
my @r = ($build, $breakwater, $last_anchor);
@@ -1739,7 +1756,7 @@ sub update_head_checkout ($$$) {
sub update_head_postlaunder ($$$) {
my ($old, $tip, $reflogmsg) = @_;
return if $tip eq $old && !@deferred_updates;
- print "git-debrebase: laundered (head was $old)\n";
+ print f_ "%s: laundered (head was %s)\n", $us, $old;
update_head $old, $tip, $reflogmsg;
# no tree changes except debian/patches
runcmd @git, qw(rm --quiet --ignore-unmatch -rf debian/patches);
@@ -1753,7 +1770,7 @@ sub currently_rebasing() {
}
sub bail_if_rebasing() {
- fail "you are in the middle of a git-rebase already"
+ fail __ "you are in the middle of a git-rebase already"
if currently_rebasing();
}
@@ -1779,14 +1796,14 @@ sub cmd_launder_v0 () {
sub defaultcmd_rebase () {
push @ARGV, @{ $opt_defaultcmd_interactive // [] };
- my ($tip,$breakwater) = do_launder_head 'launder for rebase';
+ my ($tip,$breakwater) = do_launder_head __ 'launder for rebase';
runcmd @git, qw(rebase), @ARGV, $breakwater if @ARGV;
}
sub cmd_analyse () {
- badusage "analyse does not support any options"
+ badusage __ "analyse does not support any options"
if @ARGV and $ARGV[0] =~ m/^-/;
- badusage "too many arguments to analyse" if @ARGV>1;
+ badusage __ "too many arguments to analyse" if @ARGV>1;
my ($old) = @ARGV;
if (defined $old) {
$old = git_rev_parse $old;
@@ -1794,7 +1811,7 @@ sub cmd_analyse () {
$old = git_rev_parse 'HEAD';
}
my ($dummy,$breakwater) = walk $old, 1,*STDOUT;
- STDOUT->error and die $!;
+ STDOUT->error and confess $!;
}
sub ffq_check ($;$$) {
@@ -1811,7 +1828,7 @@ sub ffq_check ($;$$) {
# normally $currentval should be HEAD
my ($currentval, $ff, $notff) =@_;
- $ff //= sub { print $_[0] or die $!; };
+ $ff //= sub { print $_[0] or confess $!; };
$notff //= \&snag;
my ($status, $message, $current, $ffq_prev, $gdrlast)
@@ -1819,9 +1836,9 @@ sub ffq_check ($;$$) {
return ($status, $message) unless $status eq 'branch';
my $exists = git_get_ref $ffq_prev;
- return ('exists',"$ffq_prev already exists") if $exists;
+ return ('exists', f_ "%s already exists", $ffq_prev) if $exists;
- return ('not-branch', 'HEAD symref is not to refs/heads/')
+ return ('not-branch', __ 'HEAD symref is not to refs/heads/')
unless $current =~ m{^refs/heads/};
my $branch = $';
@@ -1844,14 +1861,15 @@ sub ffq_check ($;$$) {
return unless length $lrval;
if (is_fast_fwd $lrval, $currentval) {
- $ff->("OK, you are ahead of $lrref\n");
+ $ff->(f_ "OK, you are ahead of %s\n", $lrref);
$checked{$lrref} = 1;
} elsif (is_fast_fwd $currentval, $lrval) {
$checked{$lrref} = -1;
- $notff->('behind', "you are behind $lrref, divergence risk");
+ $notff->('behind', f_ "you are behind %s, divergence risk",
+ $lrref);
} else {
$checked{$lrref} = -1;
- $notff->('diverged', "you have diverged from $lrref");
+ $notff->('diverged', f_ "you have diverged from %s", $lrref);
}
};
@@ -1872,9 +1890,11 @@ sub ffq_check ($;$$) {
'remote push branch');
}
if ($branch =~ m{^dgit/}) {
- $check->("refs/remotes/dgit/$branch", 'remote dgit branch');
+ $check->("refs/remotes/dgit/$branch",
+ __ 'remote dgit branch');
} elsif ($branch =~ m{^master$}) {
- $check->("refs/remotes/dgit/dgit/sid", 'remote dgit branch for sid');
+ $check->("refs/remotes/dgit/dgit/sid",
+ __ 'remote dgit branch for sid');
}
return (undef, undef, $ffq_prev, $gdrlast);
}
@@ -1901,7 +1921,8 @@ sub record_ffq_prev_deferred () {
push @deferred_updates, "update $ffq_prev $currentval $git_null_obj";
push @deferred_updates, "delete $gdrlast";
- push @deferred_update_messages, "Recorded previous head for preservation";
+ push @deferred_update_messages,
+ __ "Recorded previous head for preservation";
return ('deferred', undef);
}
@@ -1909,7 +1930,7 @@ sub record_ffq_auto () {
my ($status, $message) = record_ffq_prev_deferred();
if ($status eq 'deferred' || $status eq 'exists') {
} else {
- snag $status, "could not record ffq-prev: $message";
+ snag $status, f_ "could not record ffq-prev: %s", $message;
snags_maybe_bail();
}
}
@@ -1920,7 +1941,7 @@ sub ffq_prev_info () {
my ($status, $message, $current, $ffq_prev, $gdrlast)
= ffq_prev_branchinfo();
if ($status ne 'branch') {
- snag $status, "could not check ffq-prev: $message";
+ snag $status, f_ "could not check ffq-prev: %s", $message;
snags_maybe_bail();
}
my $ffq_prev_commitish = $ffq_prev && git_get_ref $ffq_prev;
@@ -1940,7 +1961,7 @@ sub stitch ($$$$$) {
# Just wind forwards rather than making a pointless pseudomerge.
record_gdrlast $gdrlast, $ffq_prev_commitish;
update_head_checkout $old_head, $ffq_prev_commitish,
- "stitch (fast forward)";
+ sprintf "stitch (%s)", __ 'fast forward';
return;
}
}
@@ -1948,7 +1969,9 @@ sub stitch ($$$$$) {
# We make pseudomerges with L as the contributing parent.
# This makes git rev-list --first-parent work properly.
my $new_head = make_commit [ $old_head, $ffq_prev ], [
- 'Declare fast forward / record previous work',
+ # we translate this against the time when this same code is
+ # used outside Debian, for downstreams and users
+ (__ 'Declare fast forward / record previous work'),
"[git-debrebase pseudomerge: $prose]",
];
record_gdrlast $gdrlast, $new_head;
@@ -1960,7 +1983,7 @@ sub do_stitch ($;$) {
my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info();
if (!$ffq_prev_commitish) {
- fail "No ffq-prev to stitch." unless $opt_noop_ok;
+ fail __ "No ffq-prev to stitch." unless $opt_noop_ok;
return;
}
my $dangling_head = get_head();
@@ -1989,9 +2012,11 @@ sub resolve_upstream_version ($$) {
my @tried;
$new_upstream = upstream_commitish_search $upstream_version, \@tried;
if (!length $new_upstream) {
- fail "Could not determine appropriate upstream commitish.\n".
- " (Tried these tags: @tried)\n".
- " Check version, and specify upstream commitish explicitly.";
+ fail f_
+ "Could not determine appropriate upstream commitish.\n".
+ " (Tried these tags: %s)\n".
+ " Check version, and specify upstream commitish explicitly.",
+ "@tried";
}
}
$new_upstream = git_rev_parse $new_upstream;
@@ -2005,12 +2030,13 @@ sub cmd_new_upstream () {
my %pieces;
- badusage "need NEW-VERSION [UPS-COMMITTISH]" unless @ARGV >= 1;
+ badusage __ "need NEW-VERSION [UPS-COMMITTISH]" unless @ARGV >= 1;
# parse args - low commitment
my $spec_version = shift @ARGV;
my $new_version = (new Dpkg::Version $spec_version, check => 1);
- fail "bad version number \`$spec_version'" unless defined $new_version;
+ fail f_ "bad version number \`%s'", $spec_version
+ unless defined $new_version;
if ($new_version->is_native()) {
$new_version = (new Dpkg::Version "$spec_version-1", check => 1);
}
@@ -2026,7 +2052,8 @@ sub cmd_new_upstream () {
my ($n, @x) = @_; # may be ''
my $pc = $pieces{$n} //= {
Name => $n,
- Desc => ($n ? "upstream piece \`$n'" : "upstream (main piece"),
+ Desc => ($n ? (f_ "upstream piece \`%s'", $n)
+ : (__ "upstream (main piece")),
};
while (my $k = shift @x) { $pc->{$k} = shift @x; }
$pc;
@@ -2046,11 +2073,11 @@ sub cmd_new_upstream () {
while (@ARGV && $ARGV[0] !~ m{^-}) {
my $n = shift @ARGV;
- badusage "for each EXTRA-UPS-NAME need EXTRA-UPS-COMMITISH"
+ badusage __ "for each EXTRA-UPS-NAME need EXTRA-UPS-COMMITISH"
unless @ARGV && $ARGV[0] !~ m{^-};
my $c = git_rev_parse shift @ARGV;
- die unless $n =~ m/^$extra_orig_namepart_re$/;
+ confess unless $n =~ m/^$extra_orig_namepart_re$/;
$newpiece->($n, New => $c);
}
@@ -2064,7 +2091,7 @@ sub cmd_new_upstream () {
my $old_upstream;
if (!$old_anchor_cl->{OrigParents}) {
snag 'anchor-treated',
- 'old anchor is recognised due to --anchor, cannot check upstream';
+ __ 'old anchor is recognised due to --anchor, cannot check upstream';
} else {
$old_upstream = parsecommit
$old_anchor_cl->{OrigParents}[0]{CommitId};
@@ -2079,7 +2106,7 @@ sub cmd_new_upstream () {
my $old_n_parents = scalar @{ $old_upstream->{Parents} };
if ($old_n_parents != @oldpieces &&
$old_n_parents != @oldpieces + 1) {
- snag 'upstream-confusing', sprintf
+ snag 'upstream-confusing', f_
"previous upstream combine %s".
" mentions %d pieces (each implying one parent)".
" but has %d parents".
@@ -2088,7 +2115,7 @@ sub cmd_new_upstream () {
(scalar @oldpieces),
$old_n_parents;
} elsif ($oldpieces[0] ne '.') {
- snag 'upstream-confusing', sprintf
+ snag 'upstream-confusing', f_
"previous upstream combine %s".
" first piece is not \`.'",
$oldpieces[0];
@@ -2101,9 +2128,10 @@ sub cmd_new_upstream () {
}
}
} else {
- snag 'upstream-confusing',
- "previous upstream $old_upstream->{CommitId} is from".
- " git-debrebase but not an \`upstream-combine' commit";
+ snag 'upstream-confusing', f_
+ "previous upstream %s is from".
+ " git-debrebase but not an \`upstream-combine' commit",
+ $old_upstream->{CommitId};
}
}
@@ -2112,13 +2140,14 @@ sub cmd_new_upstream () {
# we have complained already
} elsif (!$pc->{Old}) {
snag 'upstream-new-piece',
- "introducing upstream piece \`$pc->{Name}'";
+ f_ "introducing upstream piece \`%s'", $pc->{Name};
} elsif (!$pc->{New}) {
snag 'upstream-rm-piece',
- "dropping upstream piece \`$pc->{Name}'";
+ f_ "dropping upstream piece \`%s'", $pc->{Name};
} elsif (!is_fast_fwd $pc->{Old}, $pc->{New}) {
snag 'upstream-not-ff',
- "not fast forward: $pc->{Name} $pc->{Old}..$pc->{New}";
+ f_ "not fast forward: %s %s",
+ $pc->{Name}, "$pc->{Old}..$pc->{New}";
}
}
@@ -2188,8 +2217,6 @@ sub cmd_new_upstream () {
$usetup->('DEBEMAIL', 'user.email');
$usetup->('DEBFULLNAME', 'user.name');
-sleep 2;
-
my @dch = (qw(debchange
--allow-lower-version .*
--no-auto-nmu
@@ -2230,28 +2257,28 @@ 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 die $!;
+ print __ "Previous head already recorded\n" or confess $!;
} elsif ($status eq 'deferred') {
run_deferred_updates 'record-ffq-prev';
} else {
- fail "Could not preserve: $msg";
+ fail f_ "Could not preserve: %s", $msg;
}
}
sub cmd_anchor () {
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'), 0,0;
- print "$bw\n" or die $!;
+ print "$anchor\n" or confess $!;
}
sub cmd_breakwater () {
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'), 0,0;
- print "$bw\n" or die $!;
+ print "$bw\n" or confess $!;
}
sub cmd_status () {
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
# todo: gdr status should print divergence info
# todo: gdr status should print upstream component(s) info
@@ -2273,22 +2300,22 @@ sub cmd_status () {
$newest //= $oldest;
};
my ($anchor, $bw) = keycommits +(git_rev_parse 'HEAD'),
- sub { $note->(1, 'branch contains furniture (not laundered)', @_); },
- sub { $note->(2, 'branch is unlaundered', @_); },
- sub { $note->(3, 'branch needs laundering', @_); },
- sub { $note->(4, 'branch not in git-debrebase form', @_); };
+ sub { $note->(1, __ 'branch contains furniture (not laundered)',@_); },
+ sub { $note->(2, __ 'branch is unlaundered', @_); },
+ sub { $note->(3, __ 'branch needs laundering', @_); },
+ sub { $note->(4, __ 'branch not in git-debrebase form', @_); };
my $prcommitinfo = sub {
my ($cid) = @_;
- flush STDOUT or die $!;
+ flush STDOUT or confess $!;
runcmd @git, qw(--no-pager log -n1),
'--pretty=format: %h %s%n',
$cid;
};
- print "current branch contents, in git-debrebase terms:\n";
+ print __ "current branch contents, in git-debrebase terms:\n";
if (!$oldest->{Badness}) {
- print " branch is laundered\n";
+ print __ " branch is laundered\n";
} else {
print " $oldest->{OurMsg}\n";
my $printed = '';
@@ -2304,44 +2331,44 @@ sub cmd_status () {
my $prab = sub {
my ($cid, $what) = @_;
if (!defined $cid) {
- print " $what is not well-defined\n";
+ print f_ " %s is not well-defined\n", $what;
} else {
print " $what\n";
$prcommitinfo->($cid);
}
};
- print "key git-debrebase commits:\n";
- $prab->($anchor, 'anchor');
- $prab->($bw, 'breakwater');
+ print __ "key git-debrebase commits:\n";
+ $prab->($anchor, __ 'anchor');
+ $prab->($bw, __ 'breakwater');
my ($ffqstatus, $ffq_msg, $current, $ffq_prev, $gdrlast) =
ffq_prev_branchinfo();
- print "branch and ref status, in git-debrebase terms:\n";
+ print __ "branch and ref status, in git-debrebase terms:\n";
if ($ffq_msg) {
print " $ffq_msg\n";
} else {
$ffq_prev = git_get_ref $ffq_prev;
$gdrlast = git_get_ref $gdrlast;
if ($ffq_prev) {
- print " unstitched; previous tip was:\n";
+ print __ " unstitched; previous tip was:\n";
$prcommitinfo->($ffq_prev);
} elsif (!$gdrlast) {
- print " stitched? (no record of git-debrebase work)\n";
+ print __ " stitched? (no record of git-debrebase work)\n";
} elsif (is_fast_fwd $gdrlast, 'HEAD') {
- print " stitched\n";
+ print __ " stitched\n";
} else {
- print " not git-debrebase (diverged since last stitch)\n"
+ print __ " not git-debrebase (diverged since last stitch)\n"
}
}
- print "you are currently rebasing\n" if currently_rebasing();
+ print __ "you are currently rebasing\n" if currently_rebasing();
}
sub cmd_stitch () {
my $prose = 'stitch';
getoptions("stitch",
'prose=s', \$prose);
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
do_stitch $prose, 0;
}
sub cmd_prepush () {
@@ -2350,21 +2377,21 @@ sub cmd_prepush () {
}
sub cmd_quick () {
- badusage "no arguments allowed" if @ARGV;
- do_launder_head 'launder for git-debrebase quick';
+ badusage __ "no arguments allowed" if @ARGV;
+ do_launder_head __ 'launder for git-debrebase quick';
do_stitch 'quick';
}
sub cmd_conclude () {
my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info();
if (!$ffq_prev_commitish) {
- fail "No ongoing git-debrebase session." unless $opt_noop_ok;
+ fail __ "No ongoing git-debrebase session." unless $opt_noop_ok;
return;
}
my $dangling_head = get_head();
badusage "no arguments allowed" if @ARGV;
- do_launder_head 'launder for git-debrebase quick';
+ do_launder_head __ 'launder for git-debrebase quick';
do_stitch 'quick';
}
@@ -2374,7 +2401,7 @@ sub cmd_scrap () {
push @deferred_updates, 'verify HEAD HEAD';
# noop, but stops us complaining that scrap was a noop
}
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
my ($ffq_prev, $gdrlast, $ffq_prev_commitish) = ffq_prev_info();
my $scrapping_head;
if ($ffq_prev_commitish) {
@@ -2388,7 +2415,7 @@ sub cmd_scrap () {
"delete $merge_cache_ref";
}
if (!@deferred_updates) {
- fail "No ongoing git-debrebase session." unless $opt_noop_ok;
+ fail __ "No ongoing git-debrebase session." unless $opt_noop_ok;
finish 0;
}
snags_maybe_bail();
@@ -2427,7 +2454,7 @@ sub make_patches ($) {
rm_subdir_cached 'debian/patches';
}
$out = make_commit [$head], [
- 'Commit patch queue (exported by git-debrebase)',
+ (__ 'Commit patch queue (exported by git-debrebase)'),
'[git-debrebase make-patches: export and commit patches]',
];
};
@@ -2438,22 +2465,23 @@ sub cmd_make_patches () {
my $opt_quiet_would_amend;
getoptions("make-patches",
'quiet-would-amend!', \$opt_quiet_would_amend);
- badusage "no arguments allowed" if @ARGV;
+ badusage __ "no arguments allowed" if @ARGV;
bail_if_rebasing();
my $old_head = get_head();
my $new = make_patches $old_head;
my $d = get_differs $old_head, $new;
if ($d == 0) {
- fail "No (more) patches to export." unless $opt_noop_ok;
+ fail __ "No (more) patches to export." unless $opt_noop_ok;
return;
} elsif ($d == D_PAT_ADD) {
snags_maybe_bail();
update_head_checkout $old_head, $new, 'make-patches';
} else {
- print STDERR failmsg
+ print STDERR failmsg f_
"Patch export produced patch amendments".
- " (abandoned output commit $new).".
- " Try laundering first."
+ " (abandoned output commit %s).".
+ " Try laundering first.",
+ $new
unless $opt_quiet_would_amend;
finish 7;
}
@@ -2469,18 +2497,20 @@ sub check_series_has_all_patches ($) {
our $comments_snagged;
foreach my $f (grep /\S/, grep {!m/^\s\#/} split /\n/, $series) {
if ($f =~ m/^\s*\#/) {
- snag 'series-comments',
- "$seriesfn contains comments, which will be discarded"
+ snag 'series-comments', f_
+ "%s contains comments, which will be discarded",
+ $seriesfn
unless $comments_snagged++;
next;
}
- fail "patch $f repeated in $seriesfn !" if $series{$f}++;
+ fail f_ "patch %s repeated in %s !", $f, $seriesfn if $series{$f}++;
}
foreach my $patchfile (get_tree "$head:debian/patches", 1,1) {
my ($f,$i) = @$patchfile;
next if $series{$f};
next if $f eq 'series';
- snag 'unused-patches', "Unused patch file $f will be discarded";
+ snag 'unused-patches', f_
+ "Unused patch file %s will be discarded", $f;
}
}
@@ -2488,11 +2518,11 @@ sub begin_convert_from () {
my $head = get_head();
my ($ffqs, $ffqm, $symref, $ffq_prev, $gdrlast) = ffq_prev_branchinfo();
- fail "ffq-prev exists, this is already managed by git-debrebase!"
+ fail __ "ffq-prev exists, this is already managed by git-debrebase!"
if $ffq_prev && git_get_ref $ffq_prev;
my $gdrlast_obj = $gdrlast && git_get_ref $gdrlast;
- snag 'already-converted',
+ snag 'already-converted', __
"ahead of debrebase-last, this is already managed by git-debrebase!"
if $gdrlast_obj && is_fast_fwd $gdrlast_obj, $head;
return ($head, { LastRef => $gdrlast, LastObj => $gdrlast_obj });
@@ -2508,12 +2538,12 @@ sub complete_convert_from ($$$$) {
}
sub cmd_convert_from_gbp () {
- badusage "want only 1 optional argument, the upstream git commitish"
+ badusage __ "want only 1 optional argument, the upstream git commitish"
unless @ARGV<=1;
my $clogp = parsechangelog();
my $version = $clogp->{'Version'}
- // die "missing Version from changelog";
+ // fail __ "missing Version from changelog\n";
my ($upstream_spec) = @ARGV;
@@ -2528,30 +2558,32 @@ sub cmd_convert_from_gbp () {
runcmd @git, qw(--no-pager diff --stat),
$upstream, $old_head,
qw( -- :!/debian :/);
- fail <<END;
-upstream ($upstream_spec) and HEAD are not
+ fail f_ <<END, $upstream_spec, $upstream_spec;
+upstream (%s) and HEAD are not
identical in upstream files. See diffstat above, or run
- git diff $upstream_spec HEAD -- :!/debian :/
+ git diff %s HEAD -- :!/debian :/
END
}
if (!is_fast_fwd $upstream, $old_head) {
snag 'upstream-not-ancestor',
- "upstream ($upstream) is not an ancestor of HEAD";
+ f_ "upstream (%s) is not an ancestor of HEAD", $upstream;
} else {
my $wrong = cmdoutput
(@git, qw(rev-list --ancestry-path), "$upstream..HEAD",
qw(-- :/ :!/debian));
if (length $wrong) {
- snag 'unexpected-upstream-changes',
- "history between upstream ($upstream) and HEAD contains direct changes to upstream files - are you sure this is a gbp (patches-unapplied) branch?";
- print STDERR "list expected changes with: git log --stat --ancestry-path $upstream_spec..HEAD -- :/ ':!/debian'\n";
+ snag 'unexpected-upstream-changes', f_
+ "history between upstream (%s) and HEAD contains direct changes to upstream files - are you sure this is a gbp (patches-unapplied) branch?",
+ $upstream;
+ print STDERR f_ "list expected changes with: %s\n",
+ "git log --stat --ancestry-path $upstream_spec..HEAD -- :/ ':!/debian'";
}
}
if ((git_cat_file "$upstream:debian")[0] ne 'missing') {
snag 'upstream-has-debian',
- "upstream ($upstream) contains debian/ directory";
+ f_ "upstream (%s) contains debian/ directory", $upstream;
}
check_series_has_all_patches $old_head;
@@ -2569,29 +2601,30 @@ END
$suite = $stz->{Distribution};
last;
};
- die "neither of the first two changelog entries are released\n"
+ die __ "neither of the first two changelog entries are released\n"
unless defined $lvsn;
print "last finished-looking changelog entry: ($lvsn) $suite\n";
my $mtag_pat = debiantag_maintview $lvsn, '*';
my $mtag = cmdoutput @git, qw(describe --always --abbrev=0 --match),
$mtag_pat;
- die "could not find suitable maintainer view tag $mtag_pat\n"
+ die f_ "could not find suitable maintainer view tag %s\n", $mtag_pat
unless $mtag =~ m{/};
is_fast_fwd $mtag, 'HEAD' or
- die "HEAD is not FF from maintainer tag $mtag!";
+ die f_ "HEAD is not FF from maintainer tag %s!", $mtag;
my $dtag = "archive/$mtag";
git_get_ref "refs/tags/$dtag" or
- die "dgit view tag $dtag not found\n";
+ die f_ "dgit view tag %s not found\n", $dtag;
is_fast_fwd $mtag, $dtag or
- die "dgit view tag $dtag is not FF from maintainer tag $mtag\n";
- print "will stitch in dgit view, $dtag\n";
+ die f_ "dgit view tag %s is not FF from maintainer tag %s\n",
+ $dtag, $mtag;
+ print f_ "will stitch in dgit view, %s\n", $dtag;
git_rev_parse $dtag;
};
if (!$previous_dgit_view) {
$@ =~ s/^\n+//;
chomp $@;
- print STDERR <<END;
-Cannot confirm dgit view: $@
+ print STDERR f_ <<END, "$@";
+Cannot confirm dgit view: %s
Failed to stitch in dgit view (see messages above).
dgit --overwrite will be needed on the first dgit push after conversion.
END
@@ -2636,8 +2669,8 @@ END
};
complete_convert_from $old_head, $work, $gdrlastinfo, 'convert-from-gbp';
- print <<END or die $!;
-git-debrebase: converted from patched-unapplied (gbp) branch format, OK
+ print f_ <<END, $us or confess $!;
+%s: converted from patched-unapplied (gbp) branch format, OK
END
}
@@ -2665,10 +2698,10 @@ sub cmd_convert_to_gbp () {
}
snags_maybe_bail();
update_head_checkout $head, $out, "convert to gbp (v0)";
- print <<END or die $!;
-git-debrebase: converted to git-buildpackage branch format
-git-debrebase: WARNING: do not now run "git-debrebase" any more
-git-debrebase: WARNING: doing so would drop all upstream patches!
+ 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!
END
}
@@ -2687,7 +2720,7 @@ sub cmd_convert_from_dgit_view () {
'origs!', \$do_origs,
'tags!', \$do_tags,
'always-convert-anyway!', \$always);
- fail "takes 1 optional argument, the upstream commitish" if @ARGV>1;
+ fail __ "takes 1 optional argument, the upstream commitish" if @ARGV>1;
my @upstreams;
@@ -2695,7 +2728,7 @@ sub cmd_convert_from_dgit_view () {
my $spec = shift @ARGV;
my $commit = git_rev_parse "$spec^{commit}";
push @upstreams, { Commit => $commit,
- Source => "$ARGV[0], from command line",
+ Source => (f_ "%s, from command line", $ARGV[0]),
Only => 1,
};
}
@@ -2708,12 +2741,13 @@ sub cmd_convert_from_dgit_view () {
keycommits $head, sub{}, sub{}, $trouble, $trouble;
printdebug "troubles=$troubles\n";
if (!$troubles) {
- print STDERR <<END;
-$us: Branch already seems to be in git-debrebase format!
-$us: --always-convert-anyway would do the conversion operation anyway
-$us: but is probably a bad idea. Probably, you wanted to do nothing.
+ print STDERR f_ <<END, $us,$us,$us;
+%s: Branch already seems to be in git-debrebase format!
+%s: --always-convert-anyway would do the conversion operation anyway
+%s: but is probably a bad idea. Probably, you wanted to do nothing.
END
- fail "Branch already in git-debrebase format." unless $opt_noop_ok;
+ fail __ "Branch already in git-debrebase format."
+ unless $opt_noop_ok;
finish 0;
}
}
@@ -2723,19 +2757,20 @@ END
snags_maybe_bail_early();
my $version = upstreamversion $clogp->{Version};
- print STDERR "Considering possible commits corresponding to upstream:\n";
+ print STDERR __
+ "Considering possible commits corresponding to upstream:\n";
if (!@upstreams) {
if ($do_tags) {
my @tried;
my $ups_tag = upstream_commitish_search $version, \@tried;
if ($ups_tag) {
- my $this = "git tag $tried[-1]";
+ my $this = f_ "git tag %s", $tried[-1];
push @upstreams, { Commit => $ups_tag,
Source => $this,
};
} else {
- printf STDERR
+ print STDERR f_
" git tag: no suitable tag found (tried %s)\n",
"@tried";
}
@@ -2745,17 +2780,18 @@ END
# we do a quick check to see if there are plausible origs
my $something=0;
if (!opendir BPD, $bpd) {
- die "$bpd: opendir: $!" unless $!==ENOENT;
+ die f_ "opendir build-products-dir %s: %s", $bpd, $!
+ unless $!==ENOENT;
} else {
while ($!=0, my $f = readdir BPD) {
next unless is_orig_file_of_p_v $f, $p, $version;
- printf STDERR
+ print STDERR f_
" orig: found what looks like a .orig, %s\n",
"$bpd/$f";
$something=1;
last;
}
- die "read $bpd: $!" if $!;
+ confess "read $bpd: $!" if $!;
closedir BPD;
}
if ($something) {
@@ -2780,7 +2816,7 @@ END
};
}
} else {
- printf STDERR
+ print STDERR f_
" orig: no suitable origs found (looked for %s in %s)\n",
"${p}_".(stripeoch $version)."...", $bpd;
}
@@ -2789,7 +2825,8 @@ END
my $some_patches = stat_exists 'debian/patches/series';
- print STDERR "Evaluating possible commits corresponding to upstream:\n";
+ print STDERR __
+ "Evaluating possible commits corresponding to upstream:\n";
my $result;
foreach my $u (@upstreams) {
@@ -2825,7 +2862,7 @@ END
}
my $r = system @gbp_cmd;
if ($r) {
- printf STDERR
+ print STDERR f_
" %s: couldn't apply patches: gbp pq %s",
$u->{Source}, waitstatusmsg();
return;
@@ -2834,8 +2871,9 @@ END
my $work = git_rev_parse qw(HEAD);
my $diffout = cmdoutput @git, qw(diff-tree --stat HEAD), $work;
if (length $diffout) {
- print STDERR
- " $u->{Source}: applying patches gives different tree\n";
+ print STDERR f_
+ " %s: applying patches gives different tree\n",
+ $u->{Source};
print STDERR $diffout if $diagnose;
return;
}
@@ -2847,24 +2885,26 @@ END
}
if (!$result) {
- fail <<END;
+ fail __ <<END;
Could not find or construct a suitable upstream commit.
Rerun adding --diagnose after convert-from-dgit-view, or pass a
upstream commmit explicitly or provide suitable origs.
END
}
- printf STDERR "Yes, will base new branch on %s\n", $result->{Source};
+ print STDERR f_ "Yes, will base new branch on %s\n", $result->{Source};
complete_convert_from $head, $result->{Result}, $gdrlastinfo,
'convert-from-dgit-view';
}
sub cmd_forget_was_ever_debrebase () {
- badusage "forget-was-ever-debrebase takes no further arguments" if @ARGV;
+ badusage __ "forget-was-ever-debrebase takes no further arguments"
+ if @ARGV;
my ($ffqstatus, $ffq_msg, $current, $ffq_prev, $gdrlast) =
ffq_prev_branchinfo();
- fail "Not suitable for recording git-debrebaseness anyway: $ffq_msg"
+ fail f_ "Not suitable for recording git-debrebaseness anyway: %s",
+ $ffq_msg
if defined $ffq_msg;
push @deferred_updates, "delete $ffq_prev";
push @deferred_updates, "delete $gdrlast";
@@ -2961,8 +3001,11 @@ sub cmd_downstream_rebase_launder_v0 () {
}
}
+setlocale(LC_MESSAGES, "");
+textdomain("git-debrebase");
+
getoptions_main
- ("bad options\n",
+ (__ "bad options\n",
"D+" => \$debuglevel,
'noop-ok', => \$opt_noop_ok,
'f=s' => \@snag_force_opts,
@@ -2972,9 +3015,9 @@ getoptions_main
'experimental-merge-resolution!', \$opt_merges,
'-i:s' => sub {
my ($opt,$val) = @_;
- badusage "git-debrebase: no cuddling to -i for git-rebase"
+ badusage f_ "%s: no cuddling to -i for git-rebase", $us
if length $val;
- die if $opt_defaultcmd_interactive; # should not happen
+ confess if $opt_defaultcmd_interactive; # should not happen
$opt_defaultcmd_interactive = [ qw(-i) ];
# This access to @ARGV is excessive familiarity with
# Getopt::Long, but there isn't another sensible
@@ -2982,14 +3025,14 @@ getoptions_main
push @$opt_defaultcmd_interactive, @ARGV;
@ARGV=();
},
- 'help' => sub { print $usage_message or die $!; finish 0; },
+ 'help' => sub { print __ $usage_message or confess $!; finish 0; },
);
initdebug('git-debrebase ');
enabledebug if $debuglevel;
my $toplevel = cmdoutput @git, qw(rev-parse --show-toplevel);
-chdir $toplevel or die "chdir $toplevel: $!";
+chdir $toplevel or fail f_ "chdir toplevel %s: %s\n", $toplevel, $!;
$rd = fresh_playground "$playprefix/misc";
@@ -3003,7 +3046,7 @@ if (!@ARGV || $opt_defaultcmd_interactive || $ARGV[0] =~ m{^-}) {
$cmdfn =~ y/-/_/;
$cmdfn = ${*::}{"cmd_$cmdfn"};
- $cmdfn or badusage "unknown git-debrebase sub-operation $cmd";
+ $cmdfn or badusage f_ "unknown git-debrebase sub-operation %s", $cmd;
$cmdfn->();
}
diff --git a/git-debrebase.1.pod b/git-debrebase.1.pod
index 1156825..04a57ee 100644
--- a/git-debrebase.1.pod
+++ b/git-debrebase.1.pod
@@ -515,14 +515,11 @@ Requests (more) debugging. May be repeated.
Enable experimental code for handling general merges
(see L<git-debrebase(5)/General merges>).
-This option may generate branch structures that
-require the use of this same option by other people.
-Also you may experience lossage of various kinds,
-including false error messages,
-references to nonexistent documentation,
-being handed an incomprehensible pile of
-multidimensional merge wreckage,
-and/or possible mangling of your package's source code.
+This option may generate lossage of various kinds,
+including misleading error messages,
+references to nonexistent documentation, and
+you being handed an incomprehensible pile of
+multidimensional merge wreckage.
=back
diff --git a/i18n-common.make b/i18n-common.make
new file mode 100644
index 0000000..9067aae
--- /dev/null
+++ b/i18n-common.make
@@ -0,0 +1,23 @@
+# dgit translation common make file components
+
+# Copyright (C)2018 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+e=set -e; exec >$@.tmp
+f=mv -f $@.tmp $@
+o= >$@.tmp && $f
+
+S=@
+# Set S='' to see commands being run
diff --git a/i18n-diff-auditor b/i18n-diff-auditor
new file mode 100755
index 0000000..6868ca7
--- /dev/null
+++ b/i18n-diff-auditor
@@ -0,0 +1,532 @@
+#!/usr/bin/perl -w
+#
+# i18n-diff-auditor
+# Copyright (C)2018 Ian Jackson
+# GPLv3+, NO WARRANTY, see below.
+#
+#
+# Usage:
+# something like this
+# git-log -n1 -p | ./i18n-diff-auditor -D 2>&1 |less -j10 +/'^!.*'
+#
+# -D is for debug. Currently only one level.
+#
+# Output is the relevant diff hunks, with each line prepended with
+# space for ok lines and ! for questionable ones, and with relevant
+# diff lines prepended with lines starting !! (and lines starting #
+# for debug output), so ovrall:
+#
+# !! <message> reasoning for subsequent questionable diff line(s)
+# !+ diff line found to be questionable
+# !- diff line found to be questionable
+# @@@ etc. diff furniture
+# + diff line checked and ok
+# - diff line checked and ok
+# # <stuff> debug output (normally precedes relevant output)
+#
+# Changes are generally marked as ok if they correspond to a known
+# intended code change pattern. (That includes changing error calls
+# to different error calls.) If they don't correspond to any known
+# pattern, they are "questionable" and the first thing that doesn't
+# match the most common pattern is reported.
+#
+# Might be useful for projects other than dgit, provided it uses
+# the same gettext aliases (__ f_ i_) and similar error calls
+# (die, confess, fail).
+#
+#
+# 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/>.
+
+use strict;
+use Carp;
+use Data::Dumper;
+use Getopt::Long;
+
+our $debug = 0;
+GetOptions("debug|D+" => \$debug
+ );
+
+our @debug;
+sub debug ($$) {
+ my ($i,$s) = @_;
+ push @{ $debug[$i] }, $s if $debug;
+}
+
+my @d = <>;
+unshift @d, "# dummy line to make line 1 index 1 in \@d\n";
+
+our $i_last_l_ok = -1;
+our $count_i_last_l_ok;
+
+sub l_ok ($) {
+ my ($i) = @_;
+
+ if ($i == $i_last_l_ok) {
+ confess $i if $count_i_last_l_ok++ > 50;
+ } else {
+ $count_i_last_l_ok = 0;
+ $i_last_l_ok = $i;
+ }
+
+ return unless $i < @d;
+ $_ = $d[$i];
+ #print STDERR "L $i\n";
+ 1;
+}
+
+sub l ($) {
+ my ($i) = @_;
+ confess $i unless l_ok $i;
+};
+
+our $perlop_text = <<'END'; # c&p from man perlop
+ left terms and list operators (leftward)
+ left ->
+ nonassoc ++ --
+ right **
+ right ! ~ \ and unary + and -
+ left =~ !~
+ left * / % x
+ left + - .
+ left << >>
+ nonassoc named unary operators
+ nonassoc < > <= >= lt gt le ge
+ nonassoc == != <=> eq ne cmp ~~
+ left &
+ left | ^
+ left &&
+ left || //
+ nonassoc .. ...
+ right ?:
+ right = += -= *= etc. goto last next redo dump
+ left , =>
+ nonassoc list operators (rightward)
+ right not
+ left and
+ left or xor
+
+ **= += *= &= &.= <<= &&=
+ -= /= |= |.= >>= ||=
+ .= %= ^= ^.= //=
+ x=
+END
+
+our $perlop_re;
+
+sub prep_perlop () {
+ my @ops;
+ foreach (split /\n/, $perlop_text) {
+ next unless m{\S};
+ s{\s+$}{};
+ s{^\s+}{};
+ s{^(?: left | right | nonassoc ) \s+}{}x;
+ next if m{^terms and list operators};
+ next if m{^named unary};
+ next if m{^list operators};
+ s{ and unary.*}{};
+ s{ etc\. }{ };
+ s{\?\:}{ ? : };
+ foreach my $op (split /\s+/) {
+ next unless length $op;
+ next if $op =~ m{^\w+$};
+ $op =~ s/\W/\\$&/g;
+ push @ops, $op;
+ }
+ }
+ $perlop_re = '(?: '.(join ' | ', @ops).' )';
+ $perlop_re = qr{$perlop_re}x;
+ #print STDERR "$perlop_re\n";
+}
+
+prep_perlop();
+
+our ($ifilehead, $ifirsthunkhead);
+our ($ihunkhead, $ihunkend);
+our ($ichunkstart, $ichunkend);
+our ($before, $after);
+
+sub is_string ($) { $_[0]{T} =~ m/heredoc|string/; }
+sub is_trans ($) { grep { $_[0]{E} eq $_ } qw(__ f_ i_); }
+
+sub qp ($) {
+ my ($p) = @_;
+ $p =~ s{\\}{\\\\}g;
+ $p =~ s{\'}{\\'}g;
+ $p =~ s{\n}{\\n}g;
+ $p =~ s{\t}{\\t}g;
+ return "'$p'";
+};
+
+sub semiparse ($) {
+ ($_) = @_;
+ my @o;
+ #my $in = $_;
+ # entries contain
+ # T type
+ # E exact input text (does not contain here doc contents)
+ # P something to print in messages
+ # V value, only for: heredoc string
+ # Q quote characcter, only for: heredoc string
+ for (;;) {
+ s{^\s+}{};
+ if (s{^[\$\@\%]?[_0-9a-zA-Z]+}{}) {
+ push @o, { T => 'ident', E => $&, P => $& };
+ } elsif (s{^\<\<(['"]?)([A-Z_]+)\1}{}) {
+ my ($q,$d) = ($1,$2);
+ $q ||= '"';
+ push @o, { T => 'heredoc', Q => $q, Delim => $d,
+ E => $&, P => "<<$q$d$q" };
+ if (s{^
+ ( .* \n )
+ ( (?: (?! $d \n ) .* \n )*? )
+ $d \n
+ }{ $1 }xe) {
+ $o[$#o]{V} = $2;
+ } else {
+ m{^.*\n} or confess;
+ $_ = $&;
+ $o[$#o]{V} = $';
+ $o[$#o]{Invented} = 1;
+ }
+ } elsif (s{^ (["'])( (?: [^\\'"]
+ | \\ [^"']
+ | (?! \1 ) [^"]
+ )*
+ ) \1 }{}x) {
+ my ($q,$v) = ($1,$2);
+ push @o, { T => 'string', E => $&, P => "$q$q",
+ Q => $q, V => $v};
+ } elsif (s{^$perlop_re|^\;}{}) {
+ push @o, { T => 'op', E => $&, P => $& };
+ } elsif (s/^[[{(]//) {
+ push @o, { T => 'bra', E => $&, P => $& };
+ } elsif (s/^[]})]//) {
+ push @o, { T => 'ket', E => $&, P => $& };
+ } elsif (s/^( [\$\@\%] )( \{ )//x) {
+ push @o, { T => 'deref', E => $1, P => $1 },
+ { T => 'bra', E => $2, P => $2 };
+ } elsif (s/^ [\$\@\%] [^[^{] //x) {
+ push @o, { T => 'specvar', E => $&, P => $& };
+ } elsif (!length) {
+ last;
+ } elsif (s{^\#.*\n}{}) {
+ } else {
+ m{^.{0,10}};
+ die "cannot tokenise \`$&'";
+ }
+ }
+ for (my $i=0; $i+2 < @o; $i++) {
+ next unless $o[$i+1]{E} eq '.';
+ my @inputs = @o[$i, $i+2];
+ #print STDERR Dumper(\@inputs);
+ next if grep { !is_string($_) } @inputs;
+ my $q = $inputs[0]{Q};
+ next if grep { $_->{Q} ne $q } @inputs;
+ next if grep { $_->{Invented} } @inputs;
+ my $new = { T => 'joinedstrings',
+ E => (join '.', map { $_->{E} } @inputs),
+ P => (join '.', map { $_->{P} } @inputs),
+ V => (join '', map { $_->{V} } @inputs),
+ Q => $q,
+ };
+ @o = (@o[0..$i-1], $new, @o[$i+3..$#o]);
+ $i--; # counteracts $i++
+ }
+ debug $ichunkstart, "semiparsed: ".join ' ', map { $_->{P} } @o;
+ # debug $ichunkstart, "semiparsed V: ".join ' ', map { defined $_->{V} ? ">$_->{V}<" : '-' } @o;
+ return @o;
+}
+
+our @analysed_x;
+our @analysed_y;
+
+sub analyse_chunk_core () {
+ $before //= '';
+ die "plain deletion\n" unless defined $after;
+ my @xs = semiparse $before;
+ my @ys = semiparse $after;
+ @analysed_x = @analysed_y = ();
+ my $next_something = sub {
+ my ($ary,$anal,$var,$what) = @_;
+ die "ran out of $what\n" unless @$ary;
+ my $r = shift @$ary;
+ push @$anal, $r->{P};
+ $$var = $r;
+ };
+ my ($x,$y);
+ my $next_x = sub { $next_something->(\@xs, \@analysed_x, \$x, 'before'); };
+ my $next_y = sub { $next_something->(\@ys, \@analysed_y, \$y, 'after' ); };
+ our @y_expect_suffix = ();
+ ANALYSE:
+ for (;;) {
+ while (my $e = shift @y_expect_suffix) {
+ $next_y->();
+ $y->{E} eq $e
+ or die "suffix mismatch, expected $e got $y->{E}\n";
+ }
+ last unless @xs or @ys;
+ $next_x->();
+ $next_y->();
+ next if $x->{E} eq $y->{E};
+ next if $x->{E} eq 'sprintf' and $y->{E} eq 'f_';
+ next if $x->{E} eq 'die' and $y->{E} eq 'confess';
+ next if $x->{E} eq 'die' and $y->{E} eq 'fail';
+ foreach my $with_fh (qw(0 1)) {
+ next unless $x->{E} eq 'printf';
+ next unless $y->{E} eq 'print';
+ next unless @xs >= $with_fh;
+ next unless @ys > $with_fh;
+ if ($with_fh) {
+ next unless $xs[0]{E} eq $ys[0]{E};
+ next unless
+ $xs[0]{E} =~ m{^[A-Z]+$} or
+ $xs[0]{T} eq 'ident' && $xs[0]{E} =~ m{^\$};
+ }
+ next unless $ys[$with_fh]{E} eq 'f_';
+ # yay!
+ $next_x->() if $with_fh;
+ $next_y->() if $with_fh;
+ $next_y->(); # f_
+ next ANALYSE;
+ }
+ if ($y->{E} eq '+'
+ and @ys >= 3
+ and $ys[0]{E} eq '('
+ and is_trans($ys[1])) {
+ $next_y->(); # (
+ $next_y->(); # __ f_ i_
+ @y_expect_suffix = ')';
+ } elsif ($y->{E} eq '('
+ and @ys > 2
+ and is_trans($ys[0])
+ and @analysed_y
+ and (grep { $_ eq $analysed_y[-1] } (qw( => [ { ? : . ),
+ '(', ',') )) {
+ $next_y->(); # __ f_ i_
+ @y_expect_suffix = ')';
+ }
+ my $string_changed;
+ my $ye = $y->{E};
+ if (is_trans($y)) {
+ $next_y->();
+ die "__ on non-string $y->{P}\n" unless is_string($y);
+ die "__ on was non-string $x->{P}\n" unless is_string($x);
+ if ($y->{Q} ne "'") {
+ die "var subst in new string\n"
+ if $y->{V} =~ m{(?<!\\) [\$\@]};
+ }
+ eval {
+ die "__ string changed\n" unless $y->{V} eq $x->{V};
+ die "__ string quote changed\n" unless $y->{Q} eq $x->{Q};
+ };
+ $string_changed = $@;
+ }
+ if ($ye eq '__') {
+ $_ = $y->{V};
+ die "percent $& in __ ' string\n" if m{\%};
+ die $string_changed if length $string_changed;
+ next;
+ }
+ if ($ye eq 'i_') {
+ die $string_changed if length $string_changed;
+ next;
+ }
+ if ($ye eq 'f_') {
+ my $fmt = $y->{V};
+ die "no percent in f_ string\n" unless $fmt =~ m{\%};
+ next unless $string_changed;
+ die "f_ old string '-quoted\n" if $x->{Q} ne '"';
+ my $xs = $x->{V};
+ my $exactly = sub {
+ my ($lit, $what) = @_;
+ my $xl = substr($xs, 0, length($lit));
+ if ($xl ne $lit) {
+ debug $ichunkstart, "not exactly x: ..".qp($xs);
+ debug $ichunkstart, "not exactly y: ".qp($lit);
+ my $next = @ys ? $ys[0]{P} : '(end)';
+ die "string contents mismatch near $what before $next\n";
+ }
+ $xs = substr($xs, length($lit));
+ };
+ for (;;) {
+ #print STDERR Dumper($fmt, $xs, \@xs, @ys);
+ if ($fmt !~ m{\%[^\%]}) {
+ $exactly->($fmt, '(tail)');
+ $fmt = '';
+ die "text deleted from end of string: ".qp($xs)."\n"
+ if length $xs;
+ last;
+ }
+ $exactly->($`, '(literal)');
+ $fmt = $';
+ if ($& eq '%%') { $exactly->('%', '%%'); next; }
+ elsif ($& ne '%s') { die "unhandled %-subst $&\n"; }
+ $next_y->();
+ die "expected comma, got $y->{P}\n" unless $y->{E} eq ',';
+ if (!length $fmt and
+ !length $xs and
+ @xs and
+ $xs[0]{E} eq '.') {
+ # X has "<earlier>" . <something>
+ # Y has "<earlier>%s" [other args] , <something>
+ $next_x->(); # eat the '.'
+ next;
+ }
+ if ($xs =~ m{^\@}) {
+ $next_y->();
+ die "\@... => not string" unless is_string($y);
+ die "\@... => $y->{P}" if $y->{Q} ne '"';
+ $exactly->($y->{V}, $y->{P});
+ next;
+ }
+ my $bras = 0;
+ for (;;) {
+ if (!$bras and !@ys) {
+ last;
+ }
+ $next_y->();
+ if (!$bras and
+ (grep { $y->{E} eq $_ } qw( or xor and not ; :
+ if unless while when )
+ or $y->{E} eq ','
+ or $y->{T} eq 'ket'
+ )) {
+ # lookahead shows close of containing scope
+ # or lower precedence operator
+ unshift @ys, $y;
+ pop @analysed_y;
+ last;
+ }
+ $xs =~ s{^\s+}{} if $bras;
+ if (is_string($y) and $y->{Q} eq '"') {
+ $exactly->($y->{V}, $y->{P});
+ next;
+ }
+ $exactly->($y->{E}, $y->{P});
+ if ($y->{T} eq 'bra' or $y->{E} eq '?') {
+ $bras++;
+ } elsif ($y->{T} eq 'ket' or $y->{E} eq ':') {
+ die "too many kets at $y->{E}\n" unless $bras;
+ $bras--;
+ }
+ }
+ }
+ next;
+ }
+ die "mismatch $x->{P} => $y->{P}\n";
+ }
+}
+
+sub analyse_chunk () {
+ for (;;) {
+ eval { analyse_chunk_core(); };
+ return unless length $@;
+ if ($@ =~ m{^missing end of here doc (\S+)\n}) {
+ # fudge this
+ # (this never happens now, but in the future we might
+ # want this code again eg to try adding to the chunk)
+ $before .= "\n$1\n";
+ $after .= "\n$1\n";
+ next;
+ } else {
+ die $@;
+ }
+ }
+}
+
+our @report;
+our $last_filehead = -1;
+
+sub report_on_hunk () {
+ return unless @report;
+ if ($last_filehead != $ifilehead) {
+ foreach (my $i=$ifilehead; $i<$ifirsthunkhead; $i++) {
+ print $d[$i];
+ }
+ $last_filehead = $ifilehead;
+ }
+ my $dummy_r = { S => (scalar @d)+1, E => (scalar @d)+1 };
+ my $r;
+ for (my $i=$ihunkhead; ; $i++) {
+ for (;;) {
+ $r //= shift @report;
+ $r //= $dummy_r;
+ last if $i < $r->{E};
+ confess unless $r->{Done} == 03;
+ $r = undef;
+ }
+
+ last unless $i<$ihunkend;
+
+ foreach my $ds (@{ $debug[$i] }) {
+ print "# $ds\n";
+ }
+
+ if ($i == $r->{S}) {
+ print "!! $r->{M}";
+ $r->{Done} |= 01;
+ }
+ if ($i >= $r->{S}) {
+ print "!";
+ $r->{Done} |= 02;
+ } else {
+ print " ";
+ }
+ print $d[$i];
+ }
+ confess unless $r = $dummy_r;
+}
+
+for ($ifilehead = 0; l_ok $ifilehead; $ifilehead++) {
+ m{^diff} or next;
+ $ifirsthunkhead = $ifilehead;
+ while (l_ok $ifirsthunkhead and
+ m{^diff|^index|^---|^\Q+++\E}) {
+ $ifirsthunkhead++
+ }
+ $ihunkhead = $ifirsthunkhead;
+ while (l_ok $ihunkhead) {
+ m{^\@\@} or confess "$ihunkhead $_ ?";
+ my $i = $ihunkhead + 1;
+ for (; ; $i++) {
+ if (!l_ok $i or m{^ } or m{^\@\@}) {
+ if (defined $ichunkstart) {
+ $ichunkend = $i;
+ eval { analyse_chunk(); 1; };
+ if (length $@) {
+ debug $ichunkstart, "done x: @analysed_x";
+ debug $ichunkstart, "done y: @analysed_y";
+ push @report, { M => $@,
+ S => $ichunkstart,
+ E => $ichunkend };
+ }
+ $ichunkstart = $ichunkend = $before = $after = undef;
+ }
+ l_ok $i or last;
+ m{^\@\@} and last;
+ } elsif (m{^[-+]}) {
+ my $which = $& eq '-' ? \$before : \$after;
+ $ichunkstart //= $i;
+ $$which //= '';
+ $$which .= $';
+ } else {
+ confess "$i $_ ?";
+ }
+ }
+ $ihunkend = $i;
+ report_on_hunk();
+ $ichunkend = $i;
+ $ihunkhead = $i;
+ }
+}
diff --git a/po/.gitignore b/po/.gitignore
new file mode 100644
index 0000000..9b9048d
--- /dev/null
+++ b/po/.gitignore
@@ -0,0 +1,6 @@
+.*.make
+.*.potfiles
+.*.pot
+.*.tmp
+.*.new
+mo
diff --git a/po/Makefile b/po/Makefile
new file mode 100644
index 0000000..cc4a062
--- /dev/null
+++ b/po/Makefile
@@ -0,0 +1,125 @@
+# dgit message translation machinery
+#
+# Translators: there is no need to look at this file. It contains
+# complicated machinery which you do not need to understand :-).
+# See po/README instead.
+
+# Copyright (C)2018 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# ----- metaprogramming (translators, pleaee ignore all this) -----
+#
+# We present translators with a single file po/messages.pot containing
+# all the messages for the translated programs in dgit.deb and
+# git-debrebase.deb. This also includes the messages from the shared
+# perl modules.
+#
+# But when we make the .debs, we want to ship in each .deb the
+# messages for that .deb, only (but including the common parts).
+#
+# So we generate three intermediate .pots,
+# .{dgit,git-debrebase,common}.pot
+# and merge them to make messages.pot.
+#
+# From the translations we generate two .mo files for each output
+# language: {dgit,git-debrebase}.mo -- including the common messages.
+#
+# To avoid dirtying the tree whenever we do `make install',
+# we honour SUPPRESS_PO_UPDATE, to be used like this
+# make install prefix=$(prefix) SUPPRESS_PO_UPDATE=1
+
+all: messages.pot mofiles
+
+include ../i18n-common.make
+
+.%.potfiles:
+ $S $e; echo ../$*; $f
+
+.common.potfiles:
+ $S $e; find ../Debian -name \*.pm; $f
+
+.%.make: .%.potfiles Makefile part.make
+ $S $e; \
+ sed 's/~/$*/g' part.make; \
+ sed "s#^#.$*.pot: #" $<; \
+ $f
+
+-include .dgit.make
+-include .git-debrebase.make
+-include .common.make
+
+POFILES := $(wildcard *.po)
+LANGS := $(basename $(POFILES))
+
+MOFILES = $(foreach part,$(filter-out common,$(PARTS)), \
+ $(addprefix mo/$(part)_, $(POFILES:.po=.mo)))
+
+messages.pot: $(if $(SUPPRESS_PO_UPDATE),,$(POTS))
+ $S msgcat --to-code=UTF-8 $^ >.messages.0.tmp
+ $S ( ./remove-potcdate <$@ ||: ) >.messages.1.tmp
+ $S ./remove-potcdate <.messages.0.tmp >.messages.2.tmp
+ $S cmp -s .messages.[12].tmp || mv -v .messages.0.tmp $@
+ @echo 'Updated $@.'
+
+%.mo: %.po
+ $S msgfmt -o $@ $<
+
+XGETTEXT_OPTS += -Lperl -k__ -kf_ -ki_
+XGETTEXT_OPTS += --from-code=UTF-8
+XGETTEXT_OPTS += --package-name=dgit --package-version=ongoing
+# The --package-* avoids this error from make check's `msgfmt -c'
+# warning: header field 'Project-Id-Version' still has the initial default value
+
+%.pot:
+ $S TZ=UTC xgettext $(XGETTEXT_OPTS) $^ -o $@.tmp && $f
+
+mofiles: $(MOFILES)
+ @echo 'Generated mo/*.mo (binary translated messages) OK.'
+
+install: all
+ set -e; for file in $(MOFILES); do \
+ lang=$${file#*_}; lang=$${lang%.mo}; \
+ part=$${file#mo/}; part=$${part%%_*}; \
+ d=$(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES; \
+ install -d $$d; \
+ install -m 0644 $$file $$d/$$part.mo; \
+ done
+
+clean:
+ rm -f .*.make .*.potfiles .*.pot .*.tmp
+ rm -rf mo
+
+%.po: $(if $(SUPPRESS_PO_UPDATE),,messages.pot)
+ @echo -n "Merging messages.pot and $@ "
+ $S if test -f $@; then \
+ msgmerge --previous $@ messages.pot -o $@.new; \
+ else \
+ msgcat --lang=$* messages.pot >$@.new; \
+ fi
+ $S mv -f $@.new $@
+ $S msgfmt -o /dev/null --statistics $@
+
+.PRECIOUS: .%.potfiles
+
+pofiles: $(POFILES)
+
+update: pofiles check
+
+check: $(if $(SUPPRESS_PO_UPDATE),,pofiles)
+ $S set -e; for file in $(POFILES); do \
+ lang=`echo $$file | sed 's/\.po//'`; \
+ printf "$$lang: "; \
+ msgfmt -o /dev/null -c -v --statistics $$lang.po;\
+ done
diff --git a/po/README b/po/README
new file mode 100644
index 0000000..08959d4
--- /dev/null
+++ b/po/README
@@ -0,0 +1,123 @@
+NOTES FOR TRANSLATORS
+=====================
+
+Introduction
+------------
+
+The dgit source package contains dgit and git-debrebase.
+These are useful for a variety of different users and in different
+situations. So there are various documents aimed at various users.
+
+* dgit and git-debrebase both support message translation.
+
+* Documentation translation is handled via po4a, in the po4a
+ directory. The documeents are all manpages.
+
+* git-debrebase is currently mostly useful within the Debian project,
+ but this will change and its document translations will then be more
+ important.
+
+The en_US message translation is slightly special. It is used for
+testing the translation machinery, and since the source native
+language is en_GB, there is not much other need for the en_US
+translation.
+
+
+Translatation priorities
+------------------------
+
+ HIGH
+
+ po4a/dgit-user_1.pot How to use dgit to as a downstream or user
+
+ MEDIUM
+
+ po/messages.pot All the messages for both programs
+
+ po4a/dgit_1
+ po4a/dgit-downstream-dsc_7
+ po4a/dgit-sponshorship_7
+ po4a/dgit_7
+
+ LOW
+
+ po4a/dgit-maint-* } For work within the Debian project
+ po4a/dgit-nmu-simple_7 } (where one needs good English anyway)
+
+ po4a/git-debrebase_* Currently low priority but this will change
+
+
+Translation organisation
+------------------------
+
+ po/messages.pot all messages from both dgit and git-debrebase
+ po/LANG.po translations of those
+ po/mo output directory, do not look here
+
+ po4a/MAN_S.pot paragraphs from manpage MAN in section S
+ po4a/MAN_S.LANG.po translation of manpage MAN(S) into LANG
+ po4a/po4a.cfg config file for po4a
+ po4a/LANG.preview preview for you, see below
+ po4a/translated/ output directory, do not look here
+
+
+Note on git-debrebase
+---------------------
+
+git-debrebase has a fairly complex underlying model, which is defined
+in git-debrebase(5).
+
+It is importnt when translating both documents and messages for
+git-derebase, that consistent translations are used for the words
+defined in `TERMINOLOGY' and `BRANCH CONTENTS'.
+
+You may want to start by reading git-debrebase(5).
+
+When translating git-debrebaase(5) itself, please add the English term
+after the definining use of each word. For example
+ Your-word-for-pseudomerge (Pseudomerge)
+ translation of the definition
+This will be useful because some of these words appear in
+necessarily-untranslated but user-visible protocol elements
+(eg sometimes in annotations in autogenerated git commit messages)
+
+
+To start translating
+--------------------
+
+In po/
+
+ 1. run
+ make LANGUAGE.po
+ 2. edit LANGUAGE.po to add translations.
+
+In po4a/
+
+ 1. edit po4a.cfg to add your language to [po4a_langs]
+ 2. then run
+ po4a po4a.cfg
+ 3. edit each MANPAGE_SECTION.LANG.po to add translations.
+
+
+Important commands for translators
+----------------------------------
+
+In po/
+
+ make LANGUAGE.po Creates or updates messages.pot and LANGUAGE.po.
+
+ make pofiles Updates messages.pot from all the sources,
+ with new messages, and merges them into
+ all the language-specific .po files
+
+ make check Updates everything and then checks everything,
+ printing translation statistics.
+
+In po4a/
+
+ po4a po4a.cfg Updates all pot and po files
+
+ make preview.LANG Makes a directory preview.LANG containing
+ translated and compiled manpages which can
+ be previewed with `man -l', and prints a
+ list of appropriate `man -l' commands.
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100644
index 0000000..3adb9c9
--- /dev/null
+++ b/po/en_US.po
@@ -0,0 +1,2079 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the dgit package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: dgit ongoing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-10-02 11:23+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"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../dgit:236
+#, perl-format
+msgid "%s: invalid configuration: %s\n"
+msgstr ""
+
+#: ../dgit:243
+msgid "warning: overriding problem due to --force:\n"
+msgstr ""
+
+#: ../dgit:251
+#, perl-format
+msgid "warning: skipping checks or functionality due to --force-%s\n"
+msgstr ""
+
+#: ../dgit:256
+#, perl-format
+msgid "%s: package %s does not exist in suite %s\n"
+msgstr ""
+
+#: ../dgit:475
+#, perl-format
+msgid "build host child %s"
+msgstr ""
+
+#: ../dgit:480 ../dgit:486
+#, perl-format
+msgid "connection lost: %s"
+msgstr ""
+
+#: ../dgit:481
+#, perl-format
+msgid "protocol violation; %s not expected"
+msgstr ""
+
+#: ../dgit:489
+#, perl-format
+msgid "eof (reading %s)"
+msgstr ""
+
+#: ../dgit:496
+msgid "protocol message"
+msgstr ""
+
+#: ../dgit:504
+#, perl-format
+msgid "`%s'"
+msgstr ""
+
+#: ../dgit:525
+msgid "bad byte count"
+msgstr ""
+
+#: ../dgit:528
+msgid "data block"
+msgstr ""
+
+#: ../dgit:609
+#, perl-format
+msgid "failed to fetch %s: %s"
+msgstr ""
+
+#: ../dgit:621
+#, perl-format
+msgid "%s ok: %s"
+msgstr ""
+
+#: ../dgit:623
+#, perl-format
+msgid "would be ok: %s (but dry run only)"
+msgstr ""
+
+#: ../dgit:648
+msgid ""
+"main usages:\n"
+" dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]\n"
+" dgit [dgit-opts] fetch|pull [dgit-opts] [suite]\n"
+" dgit [dgit-opts] build [dpkg-buildpackage-opts]\n"
+" dgit [dgit-opts] sbuild [sbuild-opts]\n"
+" dgit [dgit-opts] pbuilder|cowbuilder [debbuildopts]\n"
+" dgit [dgit-opts] push [dgit-opts] [suite]\n"
+" dgit [dgit-opts] push-source [dgit-opts] [suite]\n"
+" dgit [dgit-opts] rpush build-host:build-dir ...\n"
+"important dgit options:\n"
+" -k<keyid> sign tag and package with <keyid> instead of default\n"
+" --dry-run -n do not change anything, but go through the motions\n"
+" --damp-run -L like --dry-run but make local changes, without "
+"signing\n"
+" --new -N allow introducing a new package\n"
+" --debug -D increase debug level\n"
+" -c<name>=<value> set git config option (used directly by dgit too)\n"
+msgstr ""
+
+#: ../dgit:667
+msgid "Perhaps the upload is stuck in incoming. Using the version from git.\n"
+msgstr ""
+
+#: ../dgit:671
+#, perl-format
+msgid ""
+"%s: %s\n"
+"%s"
+msgstr ""
+
+#: ../dgit:676
+msgid "too few arguments"
+msgstr ""
+
+#: ../dgit:787
+#, perl-format
+msgid "multiple values for %s (in %s git config)"
+msgstr ""
+
+#: ../dgit:807
+#, perl-format
+msgid ""
+"need value for one of: %s\n"
+"%s: distro or suite appears not to be (properly) supported"
+msgstr ""
+
+#: ../dgit:848
+#, perl-format
+msgid "bad syntax for (nominal) distro `%s' (does not match %s)"
+msgstr ""
+
+#: ../dgit:863
+#, perl-format
+msgid "backports-quirk needs % or ( )"
+msgstr ""
+
+#: ../dgit:879
+#, perl-format
+msgid "%s needs t (true, y, 1) or f (false, n, 0) not `%s'"
+msgstr ""
+
+#: ../dgit:899
+msgid "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"
+msgstr ""
+
+#: ../dgit:908 ../Debian/Dgit.pm:201
+msgid "internal error"
+msgstr ""
+
+#: ../dgit:910
+msgid "pushing but distro is configured readonly"
+msgstr ""
+
+#: ../dgit:914
+msgid ""
+"Push failed, before we got started.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:1079
+msgid "this operation does not support multiple comma-separated suites"
+msgstr ""
+
+#: ../dgit:1125
+#, perl-format
+msgid ""
+"config requested specific TLS key but do not know how to get curl to use "
+"exactly that EE key (%s)"
+msgstr ""
+
+#: ../dgit:1146
+msgid "ftpmasterapi archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1154
+msgid "curl failed to print 3-digit HTTP code"
+msgstr ""
+
+#: ../dgit:1158
+#, perl-format
+msgid "fetch of %s gave HTTP code %s"
+msgstr ""
+
+#: ../dgit:1174
+#, perl-format
+msgid "unknown suite %s, maybe -d would help"
+msgstr ""
+
+#: ../dgit:1178
+#, perl-format
+msgid "multiple matches for suite %s\n"
+msgstr ""
+
+#: ../dgit:1180
+#, perl-format
+msgid "suite %s info has no codename\n"
+msgstr ""
+
+#: ../dgit:1182
+#, perl-format
+msgid "suite %s maps to bad codename\n"
+msgstr ""
+
+#: ../dgit:1184 ../dgit:1209
+msgid "bad ftpmaster api response: "
+msgstr ""
+
+#: ../dgit:1198
+#, perl-format
+msgid "bad version: %s\n"
+msgstr ""
+
+#: ../dgit:1200
+msgid "bad component"
+msgstr ""
+
+#: ../dgit:1203
+msgid "bad filename"
+msgstr ""
+
+#: ../dgit:1205
+msgid "bad sha256sum"
+msgstr ""
+
+#: ../dgit:1256
+msgid "aptget archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1340
+#, perl-format
+msgid ""
+"apt seemed to not to update dgit's cached Release files for %s.\n"
+"(Perhaps %s\n"
+" is on a filesystem mounted `noatime'; if so, please use `relatime'.)\n"
+msgstr ""
+
+#: ../dgit:1362
+#, perl-format
+msgid "Release file (%s) specifies intolerable %s"
+msgstr ""
+
+#: ../dgit:1390
+msgid "apt-get source did not produce a .dsc"
+msgstr ""
+
+#: ../dgit:1391
+#, perl-format
+msgid "apt-get source produced several .dscs (%s)"
+msgstr ""
+
+#: ../dgit:1496
+#, 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:1687
+#, perl-format
+msgid "cannot operate on %s suite"
+msgstr ""
+
+#: ../dgit:1690
+#, perl-format
+msgid "canonical suite name for %s is %s"
+msgstr ""
+
+#: ../dgit:1692
+#, perl-format
+msgid "canonical suite name is %s"
+msgstr ""
+
+#: ../dgit:1712
+#, perl-format
+msgid "%s has hash %s but archive told us to expect %s"
+msgstr ""
+
+#: ../dgit:1718
+#, perl-format
+msgid "unsupported source format %s, sorry"
+msgstr ""
+
+#: ../dgit:1745
+#, perl-format
+msgid "diverting to %s (using config for %s)"
+msgstr ""
+
+#: ../dgit:1762
+msgid "unexpected results from git check query - "
+msgstr ""
+
+#: ../dgit:1777
+#, perl-format
+msgid "unknown git-check `%s'"
+msgstr ""
+
+#: ../dgit:1792
+#, perl-format
+msgid "unknown git-create `%s'"
+msgstr ""
+
+#: ../dgit:1829
+#, perl-format
+msgid "%s: warning: removing from %s: %s\n"
+msgstr ""
+
+#: ../dgit:1875
+#, perl-format
+msgid "could not parse .dsc %s line `%s'"
+msgstr ""
+
+#: ../dgit:1886
+#, perl-format
+msgid "missing any supported Checksums-* or Files field in %s"
+msgstr ""
+
+#: ../dgit:1932
+#, perl-format
+msgid "hash or size of %s varies in %s fields (between: %s)"
+msgstr ""
+
+#: ../dgit:1941
+#, perl-format
+msgid "file list in %s varies between hash fields!"
+msgstr ""
+
+#: ../dgit:1945
+#, perl-format
+msgid "%s has no files list field(s)"
+msgstr ""
+
+#: ../dgit:1951
+#, perl-format
+msgid "no file appears in all file lists (looked in: %s)"
+msgstr ""
+
+#: ../dgit:1991
+#, perl-format
+msgid "purportedly source-only changes polluted by %s\n"
+msgstr ""
+
+#: ../dgit:2004
+msgid "cannot find section/priority from .changes Files field"
+msgstr ""
+
+#: ../dgit:2017
+msgid ""
+"archive does not support .orig check; hope you used --ch:--sa/-sd if needed\n"
+msgstr ""
+
+#: ../dgit:2033
+#, perl-format
+msgid ".dsc %s missing entry for %s"
+msgstr ""
+
+#: ../dgit:2038
+#, perl-format
+msgid "%s: %s (archive) != %s (local .dsc)"
+msgstr ""
+
+#: ../dgit:2046
+#, perl-format
+msgid "archive %s: %s"
+msgstr ""
+
+#: ../dgit:2053
+#, perl-format
+msgid "archive contains %s with different checksum"
+msgstr ""
+
+#: ../dgit:2081
+#, perl-format
+msgid "edited .changes for archive .orig contents: %s %s"
+msgstr ""
+
+#: ../dgit:2089
+#, perl-format
+msgid "[new .changes left in %s]"
+msgstr ""
+
+#: ../dgit:2092
+#, perl-format
+msgid "%s already has appropriate .orig(s) (if any)"
+msgstr ""
+
+#: ../dgit:2116
+#, perl-format
+msgid ""
+"unexpected commit author line format `%s' (was generated from changelog "
+"Maintainer field)"
+msgstr ""
+
+#: ../dgit:2139
+msgid ""
+"\n"
+"Unfortunately, this source package uses a feature of dpkg-source where\n"
+"the same source package unpacks to different source code on different\n"
+"distros. dgit cannot safely operate on such packages on affected\n"
+"distros, because the meaning of source packages is not stable.\n"
+"\n"
+"Please ask the distro/maintainer to remove the distro-specific series\n"
+"files and use a different technique (if necessary, uploading actually\n"
+"different packages, if different distros are supposed to have\n"
+"different code).\n"
+"\n"
+msgstr ""
+
+#: ../dgit:2151
+#, perl-format
+msgid ""
+"Found active distro-specific series file for %s (%s): %s, cannot continue"
+msgstr ""
+
+#: ../dgit:2182
+msgid "Dpkg::Vendor `current vendor'"
+msgstr ""
+
+#: ../dgit:2184
+msgid "(base) distro being accessed"
+msgstr ""
+
+#: ../dgit:2186
+msgid "(nominal) distro being accessed"
+msgstr ""
+
+#: ../dgit:2207 ../dgit:2212
+#, perl-format
+msgid "accessing %s: %s"
+msgstr ""
+
+#: ../dgit:2227 ../dgit:2234
+#, perl-format
+msgid "saving %s: %s"
+msgstr ""
+
+#: ../dgit:2300
+#, perl-format
+msgid "dgit (child): exec %s: %s"
+msgstr ""
+
+#: ../dgit:2364 ../dgit:5862
+msgid "source package"
+msgstr ""
+
+#: ../dgit:2382
+msgid "package changelog"
+msgstr ""
+
+#: ../dgit:2422
+msgid "package changelog has no entries!"
+msgstr ""
+
+#: ../dgit:2441
+#, perl-format
+msgid "Import %s"
+msgstr ""
+
+#: ../dgit:2522
+#, perl-format
+msgid "%s: trying slow absurd-git-apply..."
+msgstr ""
+
+#: ../dgit:2541
+#, perl-format
+msgid "%s failed: %s\n"
+msgstr ""
+
+#: ../dgit:2550
+#, perl-format
+msgid ""
+"gbp-pq import and dpkg-source disagree!\n"
+" gbp-pq import gave commit %s\n"
+" gbp-pq import gave tree %s\n"
+" dpkg-source --before-build gave tree %s\n"
+msgstr ""
+
+#: ../dgit:2565
+#, perl-format
+msgid "synthesised git commit from .dsc %s"
+msgstr ""
+
+#: ../dgit:2569
+msgid "Import of source package"
+msgstr ""
+
+#: ../dgit:2582
+#, perl-format
+msgid "Record %s (%s) in archive suite %s\n"
+msgstr ""
+
+#: ../dgit:2586
+#, perl-format
+msgid ""
+"\n"
+"Version actually in archive: %s (older)\n"
+"Last version pushed with dgit: %s (newer or same)\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:2628
+#, perl-format
+msgid "using existing %s"
+msgstr ""
+
+#: ../dgit:2632
+#, perl-format
+msgid ""
+"file %s has hash %s but .dsc demands hash %s (perhaps you should delete this "
+"file?)"
+msgstr ""
+
+#: ../dgit:2636
+#, perl-format
+msgid "need to fetch correct version of %s"
+msgstr ""
+
+#: ../dgit:2652
+#, perl-format
+msgid ""
+"file %s has hash %s but .dsc demands hash %s (got wrong file from archive!)"
+msgstr ""
+
+#: ../dgit:2747
+msgid "too many iterations trying to get sane fetch!"
+msgstr ""
+
+#: ../dgit:2762
+#, perl-format
+msgid "warning: git ls-remote %s reported %s; this is silly, ignoring it.\n"
+msgstr ""
+
+#: ../dgit:2806
+#, perl-format
+msgid "warning: git fetch %s created %s; this is silly, deleting it.\n"
+msgstr ""
+
+#: ../dgit:2821
+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:2826
+#, perl-format
+msgid ""
+"warning: git ls-remote suggests we want %s\n"
+"warning: and it should refer to %s\n"
+"warning: but git fetch didn't fetch that object to any relevant ref.\n"
+"warning: This may be due to a race with someone updating the server.\n"
+"warning: Will try again...\n"
+msgstr ""
+
+#: ../dgit:2893
+#, perl-format
+msgid "Not updating %s from %s to %s.\n"
+msgstr ""
+
+#: ../dgit:2942
+#, perl-format
+msgid "%s: NO git hash"
+msgstr ""
+
+#: ../dgit:2946
+#, perl-format
+msgid "%s: specified git info (%s)"
+msgstr ""
+
+#: ../dgit:2953
+#, perl-format
+msgid "%s: specified git hash"
+msgstr ""
+
+#: ../dgit:2955
+#, perl-format
+msgid "%s: invalid Dgit info"
+msgstr ""
+
+#: ../dgit:2977
+#, perl-format
+msgid "not chasing .dsc distro %s: not fetching %s"
+msgstr ""
+
+#: ../dgit:2982
+#, perl-format
+msgid ".dsc names distro %s: fetching %s"
+msgstr ""
+
+#: ../dgit:2987
+#, 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:2997
+#, perl-format
+msgid ""
+".dsc Dgit metadata is in context of distro %s\n"
+"for which we have no configured url;\n"
+".dsc provides hinted url with protocol %s which is unsafe.\n"
+"(can be overridden by config - consult documentation)\n"
+msgstr ""
+
+#: ../dgit:3017
+msgid "rewrite map"
+msgstr ""
+
+#: ../dgit:3024
+msgid "server's git history rewrite map contains a relevant entry!"
+msgstr ""
+
+#: ../dgit:3028
+msgid "using rewritten git hash in place of .dsc value"
+msgstr ""
+
+#: ../dgit:3030
+msgid "server data says .dsc hash is to be disregarded"
+msgstr ""
+
+#: ../dgit:3037
+msgid "additional commits"
+msgstr ""
+
+#: ../dgit:3040
+#, perl-format
+msgid ""
+".dsc Dgit metadata requires commit %s\n"
+"but we could not obtain that object anywhere.\n"
+msgstr ""
+
+#: ../dgit:3064
+msgid "last upload to archive"
+msgstr ""
+
+#: ../dgit:3068
+msgid "no version available from the archive"
+msgstr ""
+
+#: ../dgit:3151
+msgid "dgit suite branch on dgit git server"
+msgstr ""
+
+#: ../dgit:3158
+msgid "dgit client's archive history view"
+msgstr ""
+
+#: ../dgit:3163
+msgid "Dgit field in .dsc from archive"
+msgstr ""
+
+#: ../dgit:3191
+#, perl-format
+msgid ""
+"\n"
+"Git commit in archive is behind the last version allegedly pushed/uploaded.\n"
+"Commit referred to by archive: %s\n"
+"Last version pushed with dgit: %s\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:3204
+msgid "archive .dsc names newer git commit"
+msgstr ""
+
+#: ../dgit:3207
+msgid "archive .dsc names other git commit, fixing up"
+msgstr ""
+
+#: ../dgit:3228
+#, perl-format
+msgid ""
+"\n"
+"Package not found in the archive, but has allegedly been pushed using dgit.\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:3237
+#, perl-format
+msgid ""
+"\n"
+"Warning: relevant archive skew detected.\n"
+"Archive allegedly contains %s\n"
+"But we were not able to obtain any version from the archive or git.\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3322
+#, perl-format
+msgid ""
+"Record %s (%s) in archive suite %s\n"
+"\n"
+"Record that\n"
+msgstr ""
+
+#: ../dgit:3335
+msgid "should be treated as descended from\n"
+msgstr ""
+
+#: ../dgit:3353
+msgid "dgit repo server tip (last push)"
+msgstr ""
+
+#: ../dgit:3355
+msgid "local tracking tip (last fetch)"
+msgstr ""
+
+#: ../dgit:3366
+#, perl-format
+msgid ""
+"\n"
+"Warning: archive skew detected. Using the available version:\n"
+"Archive allegedly contains %s\n"
+"We were able to obtain only %s\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3381
+msgid "fetched source tree"
+msgstr ""
+
+#: ../dgit:3417
+msgid "debian/changelog merge driver"
+msgstr ""
+
+#: ../dgit:3482
+msgid ""
+"[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes\n"
+" not doing further gitattributes setup\n"
+msgstr ""
+
+#: ../dgit:3496
+msgid "# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)\n"
+msgstr ""
+
+#: ../dgit:3511
+#, perl-format
+msgid "install %s: %s"
+msgstr ""
+
+#: ../dgit:3538
+#, perl-format
+msgid ""
+"dgit: warning: %s contains .gitattributes\n"
+"dgit: .gitattributes not (fully) defused. Recommended: dgit setup-new-"
+"tree.\n"
+msgstr ""
+
+#: ../dgit:3560
+#, perl-format
+msgid "fetching %s..."
+msgstr ""
+
+#: ../dgit:3568
+#, perl-format
+msgid "failed to obtain %s: %s"
+msgstr ""
+
+#: ../dgit:3607
+#, perl-format
+msgid "package %s missing in (base suite) %s"
+msgstr ""
+
+#: ../dgit:3639
+msgid "local combined tracking branch"
+msgstr ""
+
+#: ../dgit:3641
+msgid "archive seems to have rewound: local tracking branch is ahead!"
+msgstr ""
+
+#: ../dgit:3680
+#, perl-format
+msgid ""
+"Combine archive branches %s [dgit]\n"
+"\n"
+"Input branches:\n"
+msgstr ""
+
+#: ../dgit:3694
+msgid ""
+"\n"
+"Key\n"
+" * marks the highest version branch, which choose to use\n"
+" + marks each branch which was not already an ancestor\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3709
+#, perl-format
+msgid "calculated combined tracking suite %s"
+msgstr ""
+
+#: ../dgit:3727
+#, perl-format
+msgid "ready for work in %s"
+msgstr ""
+
+#: ../dgit:3735
+msgid "dry run makes no sense with clone"
+msgstr ""
+
+#: ../dgit:3752
+#, perl-format
+msgid "create `%s': %s"
+msgstr ""
+
+#: ../dgit:3763
+msgid "fetching existing git history"
+msgstr ""
+
+#: ../dgit:3767
+msgid "starting new git history"
+msgstr ""
+
+#: ../dgit:3793
+#, 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:3798
+#, perl-format
+msgid "fetched into %s"
+msgstr ""
+
+#: ../dgit:3810
+#, perl-format
+msgid "Merge from %s [dgit]"
+msgstr ""
+
+#: ../dgit:3812
+#, perl-format
+msgid "fetched to %s and merged into HEAD"
+msgstr ""
+
+#: ../dgit:3818
+#, perl-format
+msgid "git tree contains debian/source/%s"
+msgstr ""
+
+#: ../dgit:3837
+#, 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:3854
+msgid "nothing quilty to commit, ok."
+msgstr ""
+
+#: ../dgit:3857
+msgid " (wanted to commit patch update)"
+msgstr ""
+
+#: ../dgit:3861
+msgid ""
+"Commit Debian 3.0 (quilt) metadata\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3904
+#, perl-format
+msgid ""
+"Not doing any fixup of `%s' due to ----no-quilt-fixup or --quilt=nocheck"
+msgstr ""
+
+#: ../dgit:3909
+#, perl-format
+msgid "Format `%s', need to check/update patch stack"
+msgstr ""
+
+#: ../dgit:3919
+#, perl-format
+msgid "commit id %s"
+msgstr ""
+
+#: ../dgit:3925
+#, perl-format
+msgid "and left in %s"
+msgstr ""
+
+#: ../dgit:3951
+#, perl-format
+msgid "Wanted tag %s (%s) on dgit server, but not found\n"
+msgstr ""
+
+#: ../dgit:3954
+#, perl-format
+msgid "Wanted tag %s (one of: %s) on dgit server, but not found\n"
+msgstr ""
+
+#: ../dgit:3962
+#, perl-format
+msgid "%s (%s) .. %s (%s) is not fast forward\n"
+msgstr ""
+
+#: ../dgit:3971
+msgid "version currently in archive"
+msgstr ""
+
+#: ../dgit:3980
+#, perl-format
+msgid "Checking package changelog for archive version %s ..."
+msgstr ""
+
+#: ../dgit:3988
+#, perl-format
+msgid "%s field from dpkg-parsechangelog %s"
+msgstr ""
+
+#: ../dgit:3998
+#, perl-format
+msgid "Perhaps debian/changelog does not mention %s ?"
+msgstr ""
+
+#: ../dgit:4001
+#, perl-format
+msgid ""
+"%s is %s\n"
+"Your tree seems to based on earlier (not uploaded) %s.\n"
+msgstr ""
+
+#: ../dgit:4015
+#, perl-format
+msgid "Declaring that HEAD inciudes all changes in %s..."
+msgstr ""
+
+#: ../dgit:4071
+msgid "Checking that HEAD inciudes all changes in archive..."
+msgstr ""
+
+#: ../dgit:4080
+msgid "maintainer view tag"
+msgstr ""
+
+#: ../dgit:4082
+msgid "dgit view tag"
+msgstr ""
+
+#: ../dgit:4083
+msgid "current archive contents"
+msgstr ""
+
+#: ../dgit:4096
+msgid ""
+"| Not fast forward; maybe --overwrite is needed ? Please see dgit(1).\n"
+msgstr ""
+
+#: ../dgit:4106
+#, perl-format
+msgid "Declare fast forward from %s\n"
+msgstr ""
+
+#: ../dgit:4107
+#, perl-format
+msgid "Make fast forward from %s\n"
+msgstr ""
+
+#: ../dgit:4111
+#, perl-format
+msgid "Made pseudo-merge of %s into dgit view."
+msgstr ""
+
+#: ../dgit:4124
+#, perl-format
+msgid "Declare fast forward from %s"
+msgstr ""
+
+#: ../dgit:4132
+#, perl-format
+msgid "Make pseudo-merge of %s into your HEAD."
+msgstr ""
+
+#: ../dgit:4144
+#, perl-format
+msgid "-p specified %s but changelog specified %s"
+msgstr ""
+
+#: ../dgit:4166
+#, perl-format
+msgid "%s is for %s %s but debian/changelog is for %s %s"
+msgstr ""
+
+#: ../dgit:4227
+#, perl-format
+msgid "changes field %s `%s' does not match changelog `%s'"
+msgstr ""
+
+#: ../dgit:4255
+#, perl-format
+msgid "%s release %s for %s (%s) [dgit]\n"
+msgstr ""
+
+#: ../dgit:4268
+#, perl-format
+msgid ""
+"%s release %s for %s (%s)\n"
+"(maintainer view tag generated by dgit --quilt=%s)\n"
+msgstr ""
+
+#: ../dgit:4320
+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:4329
+msgid ""
+"package appears to be new in this suite; if this is intentional, use --new"
+msgstr ""
+
+#: ../dgit:4334
+msgid ""
+"Push failed, while preparing your push.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:4357
+#, perl-format
+msgid "looked for .dsc %s, but %s; maybe you forgot to build"
+msgstr ""
+
+#: ../dgit:4374
+#, 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:4398
+#, perl-format
+msgid ""
+"--quilt=%s but no cached dgit view:\n"
+" perhaps HEAD changed since dgit build[-source] ?"
+msgstr ""
+
+#: ../dgit:4429
+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:4439
+#, perl-format
+msgid "checking that %s corresponds to HEAD"
+msgstr ""
+
+#: ../dgit:4473 ../dgit:4485
+#, perl-format
+msgid "HEAD specifies a different tree to %s:\n"
+msgstr ""
+
+#: ../dgit:4479
+#, 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:4489
+#, 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:4500
+#, perl-format
+msgid ""
+"failed to find unique changes file (looked for %s in %s); perhaps you need "
+"to use dgit -C"
+msgstr ""
+
+#: ../dgit:4522
+msgid "uploading binaries, although distroy policy is source only"
+msgstr ""
+
+#: ../dgit:4526
+msgid "source-only upload, although distroy policy requires .debs"
+msgstr ""
+
+#: ../dgit:4530
+#, perl-format
+msgid ""
+"source-only upload, even though package is entirely NEW\n"
+"(this is contrary to policy in %s)"
+msgstr ""
+
+#: ../dgit:4537
+#, perl-format
+msgid "unknown source-only-uploads policy `%s'"
+msgstr ""
+
+#: ../dgit:4581
+msgid ""
+"Push failed, while signing the tag.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:4594
+msgid ""
+"Push failed, *after* signing the tag.\n"
+"If you want to try again, you should use a new version number.\n"
+msgstr ""
+
+#: ../dgit:4611
+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:4628
+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:4659
+#, perl-format
+msgid "pushed and uploaded %s"
+msgstr ""
+
+#: ../dgit:4671
+msgid "-p is not allowed with clone; specify as argument instead"
+msgstr ""
+
+#: ../dgit:4682
+msgid "incorrect arguments to dgit clone"
+msgstr ""
+
+#: ../dgit:4688
+#, perl-format
+msgid "%s already exists"
+msgstr ""
+
+#: ../dgit:4702
+#, perl-format
+msgid "remove %s: %s\n"
+msgstr ""
+
+#: ../dgit:4706
+#, perl-format
+msgid "check whether to remove %s: %s\n"
+msgstr ""
+
+#: ../dgit:4744
+msgid "incorrect arguments to dgit fetch or dgit pull"
+msgstr ""
+
+#: ../dgit:4761
+#, perl-format
+msgid "dgit pull not yet supported in split view mode (--quilt=%s)\n"
+msgstr ""
+
+#: ../dgit:4770
+msgid "dgit checkout needs a suite argument"
+msgstr ""
+
+#: ../dgit:4832
+#, perl-format
+msgid "setting up vcs-git: %s\n"
+msgstr ""
+
+#: ../dgit:4835
+#, perl-format
+msgid "vcs git already configured: %s\n"
+msgstr ""
+
+#: ../dgit:4837
+#, perl-format
+msgid "changing vcs-git url to: %s\n"
+msgstr ""
+
+#: ../dgit:4842
+#, perl-format
+msgid "fetching (%s)\n"
+msgstr ""
+
+#: ../dgit:4857
+#, perl-format
+msgid "incorrect arguments to dgit %s"
+msgstr ""
+
+#: ../dgit:4868
+#, perl-format
+msgid "dgit %s: changelog specifies %s (%s) but command line specifies %s"
+msgstr ""
+
+#: ../dgit:4906
+#, perl-format
+msgid ""
+"build host has dgit rpush protocol versions %s but invocation host has %s"
+msgstr ""
+
+#: ../dgit:4986
+#, perl-format
+msgid "create %s: %s"
+msgstr ""
+
+#: ../dgit:5023
+#, perl-format
+msgid "build host child failed: %s"
+msgstr ""
+
+#: ../dgit:5026
+msgid "all done\n"
+msgstr ""
+
+#: ../dgit:5035
+#, perl-format
+msgid "file %s (%s) twice"
+msgstr ""
+
+#: ../dgit:5043
+msgid "bad param spec"
+msgstr ""
+
+#: ../dgit:5049
+msgid "bad previously spec"
+msgstr ""
+
+#: ../dgit:5068
+#, perl-format
+msgid ""
+"rpush negotiated protocol version %s which does not support quilt mode %s"
+msgstr ""
+
+#: ../dgit:5113
+#, perl-format
+msgid "buildinfo mismatch in field %s"
+msgstr ""
+
+#: ../dgit:5116
+#, perl-format
+msgid "buildinfo contains forbidden field %s"
+msgstr ""
+
+#: ../dgit:5157
+msgid "remote changes file"
+msgstr ""
+
+#: ../dgit:5232
+msgid "not a plain file or symlink\n"
+msgstr ""
+
+#: ../dgit:5238
+msgid "mode or type changed\n"
+msgstr ""
+
+#: ../dgit:5239
+msgid "modified symlink\n"
+msgstr ""
+
+#: ../dgit:5242
+msgid "deletion of symlink\n"
+msgstr ""
+
+#: ../dgit:5246
+msgid "creation with non-default mode\n"
+msgstr ""
+
+#: ../dgit:5276
+msgid "dgit view: changes are required..."
+msgstr ""
+
+#: ../dgit:5305
+#, perl-format
+msgid ""
+"\n"
+"For full diff showing the problem(s), type:\n"
+" %s\n"
+msgstr ""
+
+#: ../dgit:5312
+#, perl-format
+msgid ""
+"--quilt=%s specified, implying patches-unapplied git tree\n"
+" but git tree differs from orig in upstream files."
+msgstr ""
+
+#: ../dgit:5318
+msgid ""
+"\n"
+" ... debian/patches is missing; perhaps this is a patch queue branch?"
+msgstr ""
+
+#: ../dgit:5325
+#, 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:5332
+msgid "dgit view: creating patches-applied version using gbp pq"
+msgstr ""
+
+#: ../dgit:5341
+#, 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:5350
+msgid "dgit view: creating patch to represent .gitignore changes"
+msgstr ""
+
+#: ../dgit:5355
+#, perl-format
+msgid "%s already exists; but want to create it to record .gitignore changes"
+msgstr ""
+
+#: ../dgit:5360
+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:5382
+msgid "Commit patch to update .gitignore\n"
+msgstr ""
+
+#: ../dgit:5396
+msgid "converted"
+msgstr ""
+
+#: ../dgit:5397
+#, perl-format
+msgid "dgit view: created (%s)"
+msgstr ""
+
+#: ../dgit:5462
+msgid "maximum search space exceeded"
+msgstr ""
+
+#: ../dgit:5480
+#, perl-format
+msgid "has %s not %s"
+msgstr ""
+
+#: ../dgit:5489
+msgid "root commit"
+msgstr ""
+
+#: ../dgit:5495
+#, perl-format
+msgid "merge (%s nontrivial parents)"
+msgstr ""
+
+#: ../dgit:5506
+#, perl-format
+msgid "changed %s"
+msgstr ""
+
+#: ../dgit:5525
+#, perl-format
+msgid ""
+"\n"
+"%s: error: quilt fixup cannot be linear. Stopped at:\n"
+msgstr ""
+
+#: ../dgit:5532
+#, perl-format
+msgid "%s: %s: %s\n"
+msgstr ""
+
+#: ../dgit:5544
+msgid "quilt history linearisation failed. Search `quilt fixup' in dgit(7).\n"
+msgstr ""
+
+#: ../dgit:5547
+msgid "quilt fixup cannot be linear, smashing..."
+msgstr ""
+
+#: ../dgit:5559
+#, perl-format
+msgid ""
+"Automatically generated patch (%s)\n"
+"Last (up to) %s git changes, FYI:\n"
+"\n"
+msgstr ""
+
+#: ../dgit:5566
+msgid "quiltify linearisation planning successful, executing..."
+msgstr ""
+
+#: ../dgit:5600
+msgid "contains unexpected slashes\n"
+msgstr ""
+
+#: ../dgit:5601
+msgid "contains leading punctuation\n"
+msgstr ""
+
+#: ../dgit:5602
+msgid "contains bad character(s)\n"
+msgstr ""
+
+#: ../dgit:5603
+msgid "is series file\n"
+msgstr ""
+
+#: ../dgit:5604
+msgid "too long\n"
+msgstr ""
+
+#: ../dgit:5608
+#, perl-format
+msgid "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s"
+msgstr ""
+
+#: ../dgit:5637
+#, perl-format
+msgid "dgit: patch title transliteration error: %s"
+msgstr ""
+
+#: ../dgit:5774
+msgid "Commit removal of .pc (quilt series tracking data)\n"
+msgstr ""
+
+#: ../dgit:5784
+msgid "starting quiltify (single-debian-patch)"
+msgstr ""
+
+#: ../dgit:5884
+#, perl-format
+msgid "dgit: split brain (separate dgit view) may be needed (--quilt=%s)."
+msgstr ""
+
+#: ../dgit:5915
+#, perl-format
+msgid "dgit view: found cached (%s)"
+msgstr ""
+
+#: ../dgit:5920
+msgid "dgit view: found cached, no changes required"
+msgstr ""
+
+#: ../dgit:5931
+#, perl-format
+msgid "examining quilt state (multiple patches, %s mode)"
+msgstr ""
+
+#: ../dgit:6022
+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"
+" are probably too inconsistent. dgit can only fix up certain kinds of\n"
+" anomaly (depending on the quilt mode). Please see --quilt= in dgit(1).\n"
+msgstr ""
+
+#: ../dgit:6036
+msgid "Tree already contains .pc - will use it then delete it."
+msgstr ""
+
+#: ../dgit:6073
+#, perl-format
+msgid "%s: base trees orig=%.20s o+d/p=%.20s"
+msgstr ""
+
+#: ../dgit:6076
+#, 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"
+msgstr ""
+
+#: ../dgit:6082
+#, perl-format
+msgid "dgit: cannot represent change: %s: %s\n"
+msgstr ""
+
+#: ../dgit:6086
+msgid ""
+"HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'\n"
+msgstr ""
+
+#: ../dgit:6093
+msgid "This might be a patches-unapplied branch."
+msgstr ""
+
+#: ../dgit:6096
+msgid "This might be a patches-applied branch."
+msgstr ""
+
+#: ../dgit:6099
+msgid "Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?"
+msgstr ""
+
+#: ../dgit:6102
+msgid "Warning: Tree has .gitattributes. See GITATTRIBUTES in dgit(7)."
+msgstr ""
+
+#: ../dgit:6106
+msgid "Maybe orig tarball(s) are not identical to git representation?"
+msgstr ""
+
+#: ../dgit:6115
+#, perl-format
+msgid "starting quiltify (multiple patches, %s mode)"
+msgstr ""
+
+#: ../dgit:6153
+msgid ""
+"\n"
+"dgit: Building, or cleaning with rules target, in patches-unapplied tree.\n"
+"dgit: Have to apply the patches - making the tree dirty.\n"
+"dgit: (Consider specifying --clean=git and (or) using dgit sbuild.)\n"
+"\n"
+msgstr ""
+
+#: ../dgit:6165
+msgid "dgit: Unapplying patches again to tidy up the tree."
+msgstr ""
+
+#: ../dgit:6199
+msgid "tree contains uncommitted files and --clean=check specified"
+msgstr ""
+
+#: ../dgit:6208
+msgid "clean takes no additional arguments"
+msgstr ""
+
+#: ../dgit:6221
+#, perl-format
+msgid "-p is not allowed with dgit %s"
+msgstr ""
+
+#: ../dgit:6248
+#, perl-format
+msgid "remove old changes file %s: %s"
+msgstr ""
+
+#: ../dgit:6250
+#, perl-format
+msgid "would remove %s"
+msgstr ""
+
+#: ../dgit:6276
+msgid "archive query failed (queried because --since-version not specified)"
+msgstr ""
+
+#: ../dgit:6282
+#, perl-format
+msgid "changelog will contain changes since %s"
+msgstr ""
+
+#: ../dgit:6285
+msgid "package seems new, not specifying -v<version>"
+msgstr ""
+
+#: ../dgit:6328
+msgid "Wanted to build nothing!"
+msgstr ""
+
+#: ../dgit:6366
+#, perl-format
+msgid "only one changes file from build (%s)\n"
+msgstr ""
+
+#: ../dgit:6373
+#, perl-format
+msgid "%s found in binaries changes file %s"
+msgstr ""
+
+#: ../dgit:6380
+#, perl-format
+msgid "%s unexpectedly not created by build"
+msgstr ""
+
+#: ../dgit:6384
+#, perl-format
+msgid "install new changes %s{,.inmulti}: %s"
+msgstr ""
+
+#: ../dgit:6389
+#, perl-format
+msgid "wrong number of different changes files (%s)"
+msgstr ""
+
+#: ../dgit:6392
+#, perl-format
+msgid "build successful, results in %s\n"
+msgstr ""
+
+#: ../dgit:6405
+#, perl-format
+msgid ""
+"changes files other than source matching %s already present; building would "
+"result in ambiguity about the intended results.\n"
+"Suggest you delete %s.\n"
+msgstr ""
+
+#: ../dgit:6423
+msgid "build successful\n"
+msgstr ""
+
+#: ../dgit:6430
+#, 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:6542
+#, perl-format
+msgid "remove %s: %s"
+msgstr ""
+
+#: ../dgit:6579
+#, perl-format
+msgid "put in place new built file (%s): %s"
+msgstr ""
+
+#: ../dgit:6592
+msgid "build-source takes no additional arguments"
+msgstr ""
+
+#: ../dgit:6596
+#, perl-format
+msgid "source built, results in %s and %s"
+msgstr ""
+
+#: ../dgit:6603
+msgid ""
+"dgit push-source: --include-dirty/--ignore-dirty does not makesense with "
+"push-source!"
+msgstr ""
+
+#: ../dgit:6609
+msgid "source changes file"
+msgstr ""
+
+#: ../dgit:6611
+msgid "user-specified changes file is not source-only"
+msgstr ""
+
+#: ../dgit:6631 ../dgit:6633
+#, perl-format
+msgid "%s (in build products dir): %s"
+msgstr ""
+
+#: ../dgit:6646
+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:6658
+msgid ""
+"you asked for a builder but your debbuildopts didn't ask for any binaries -- "
+"is this really what you meant?"
+msgstr ""
+
+#: ../dgit:6662
+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:6692
+msgid "incorrect arguments to dgit print-unapplied-treeish"
+msgstr ""
+
+#: ../dgit:6714
+msgid "source tree"
+msgstr ""
+
+#: ../dgit:6716
+#, perl-format
+msgid "dgit: import-dsc: %s"
+msgstr ""
+
+#: ../dgit:6729
+#, perl-format
+msgid "unknown dgit import-dsc sub-option `%s'"
+msgstr ""
+
+#: ../dgit:6733
+msgid "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
+msgstr ""
+
+#: ../dgit:6737
+msgid "dry run makes no sense with import-dsc"
+msgstr ""
+
+#: ../dgit:6754
+#, perl-format
+msgid "%s is checked out - will not update it"
+msgstr ""
+
+#: ../dgit:6759
+#, perl-format
+msgid "open import .dsc (%s): %s"
+msgstr ""
+
+#: ../dgit:6761
+#, perl-format
+msgid "read %s: %s"
+msgstr ""
+
+#: ../dgit:6772
+msgid "import-dsc signature check failed"
+msgstr ""
+
+#: ../dgit:6775
+#, perl-format
+msgid "%s: warning: importing unsigned .dsc\n"
+msgstr ""
+
+#: ../dgit:6786
+msgid "Dgit metadata in .dsc"
+msgstr ""
+
+#: ../dgit:6797
+msgid "dgit: import-dsc of .dsc with Dgit field, using git hash"
+msgstr ""
+
+#: ../dgit:6806
+#, perl-format
+msgid ""
+".dsc contains Dgit field referring to object %s\n"
+"Your git tree does not have that object. Try `git fetch' from a\n"
+"plausible server (browse.dgit.d.o? alioth?), and try the import-dsc again.\n"
+msgstr ""
+
+#: ../dgit:6813
+msgid "Not fast forward, forced update."
+msgstr ""
+
+#: ../dgit:6815
+#, perl-format
+msgid "Not fast forward to %s"
+msgstr ""
+
+#: ../dgit:6820
+#, perl-format
+msgid "updated git ref %s"
+msgstr ""
+
+#: ../dgit:6825
+#, perl-format
+msgid ""
+"Branch %s already exists\n"
+"Specify ..%s for a pseudo-merge, binding in existing history\n"
+"Specify +%s to overwrite, discarding existing history\n"
+msgstr ""
+
+#: ../dgit:6837
+#, perl-format
+msgid "lstat %s works but stat gives %s !"
+msgstr ""
+
+#: ../dgit:6839
+#, perl-format
+msgid "stat %s: %s"
+msgstr ""
+
+#: ../dgit:6847
+#, perl-format
+msgid "cannot import %s which seems to be inside working tree!"
+msgstr ""
+
+#: ../dgit:6851
+#, perl-format
+msgid "import %s requires .../%s, but it does not exist"
+msgstr ""
+
+#: ../dgit:6856
+#, perl-format
+msgid "import %s requires %s, but: %s"
+msgstr ""
+
+#: ../dgit:6858
+#, perl-format
+msgid "symlink %s to %s: %s"
+msgstr ""
+
+#: ../dgit:6859
+#, perl-format
+msgid "made symlink %s -> %s"
+msgstr ""
+
+#: ../dgit:6870
+msgid "Import, forced update - synthetic orphan git history."
+msgstr ""
+
+#: ../dgit:6872
+msgid "Import, merging."
+msgstr ""
+
+#: ../dgit:6886
+#, perl-format
+msgid "Merge %s (%s) import into %s\n"
+msgstr ""
+
+#: ../dgit:6895
+#, perl-format
+msgid "results are in in git ref %s"
+msgstr ""
+
+#: ../dgit:6902
+msgid "need only 1 subpath argument"
+msgstr ""
+
+#: ../dgit:6908
+#, perl-format
+msgid "exec curl: %s\n"
+msgstr ""
+
+#: ../dgit:6922
+msgid "need destination argument"
+msgstr ""
+
+#: ../dgit:6927
+#, perl-format
+msgid "exec git clone: %s\n"
+msgstr ""
+
+#: ../dgit:6935
+msgid "no arguments allowed to dgit print-dgit-repos-server-source-url"
+msgstr ""
+
+#: ../dgit:6946
+msgid "no arguments allowed to dgit print-dpkg-source-ignores"
+msgstr ""
+
+#: ../dgit:6952
+msgid "no arguments allowed to dgit setup-mergechangelogs"
+msgstr ""
+
+#: ../dgit:6959 ../dgit:6965
+msgid "no arguments allowed to dgit setup-useremail"
+msgstr ""
+
+#: ../dgit:6971
+msgid "no arguments allowed to dgit setup-tree"
+msgstr ""
+
+#: ../dgit:7018
+msgid ""
+"--initiator-tempdir must be used specify an absolute, not relative, "
+"directory."
+msgstr ""
+
+#: ../dgit:7057
+#, perl-format
+msgid "%s needs a value"
+msgstr ""
+
+#: ../dgit:7061
+#, perl-format
+msgid "bad value `%s' for %s"
+msgstr ""
+
+#: ../dgit:7146
+#, perl-format
+msgid "%s: warning: ignoring unknown force option %s\n"
+msgstr ""
+
+#: ../dgit:7166
+#, perl-format
+msgid "unknown long option `%s'"
+msgstr ""
+
+#: ../dgit:7219
+#, perl-format
+msgid "unknown short option `%s'"
+msgstr ""
+
+#: ../dgit:7234
+#, perl-format
+msgid "%s is set to something other than SIG_DFL\n"
+msgstr ""
+
+#: ../dgit:7238
+#, perl-format
+msgid "%s is blocked\n"
+msgstr ""
+
+#: ../dgit:7244
+#, perl-format
+msgid ""
+"On entry to dgit, %s\n"
+"This is a bug produced by something in in your execution environment.\n"
+"Giving up.\n"
+msgstr ""
+
+#: ../dgit:7261
+#, perl-format
+msgid "cannot set command for %s"
+msgstr ""
+
+#: ../dgit:7274
+#, perl-format
+msgid "cannot configure options for %s"
+msgstr ""
+
+#: ../dgit:7294
+#, perl-format
+msgid "unknown quilt-mode `%s'"
+msgstr ""
+
+#: ../dgit:7304
+#, perl-format
+msgid "unknown %s setting `%s'"
+msgstr ""
+
+#: ../dgit:7309
+msgid "dgit: --include-dirty is not supported in split view quilt mode"
+msgstr ""
+
+#: ../dgit:7317
+#, perl-format
+msgid "unknown clean-mode `%s'"
+msgstr ""
+
+#: ../dgit:7338
+msgid "DRY RUN ONLY\n"
+msgstr ""
+
+#: ../dgit:7339
+msgid "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
+msgstr ""
+
+#: ../dgit:7355
+#, perl-format
+msgid "unknown operation %s"
+msgstr ""
+
+#: ../git-debrebase:2069
+msgid "old anchor is recognised due to --anchor, cannot check upstream"
+msgstr "old anchor is recognized due to --anchor, cannot check upstream"
+
+#: ../git-debrebase:2980
+msgid "git-debrebase: no cuddling to -i for git-rebase"
+msgstr ""
+
+#: ../git-debrebase:3011
+#, perl-format
+msgid "unknown git-debrebase sub-operation %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:295
+#, perl-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:315
+#, perl-format
+msgid "getcwd failed: %s\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:334
+msgid "terminated, reporting successful completion"
+msgstr ""
+
+#: ../Debian/Dgit.pm:336
+#, perl-format
+msgid "failed with error exit status %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:339
+#, perl-format
+msgid "died due to fatal signal %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:343
+#, perl-format
+msgid "failed with unknown wait status %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:349
+msgid "failed command"
+msgstr ""
+
+#: ../Debian/Dgit.pm:355
+#, perl-format
+msgid "failed to fork/exec: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:357
+#, perl-format
+msgid "subprocess %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:359
+msgid "subprocess produced invalid output"
+msgstr ""
+
+#: ../Debian/Dgit.pm:544
+msgid "git index contains changes (does not match HEAD)"
+msgstr ""
+
+#: ../Debian/Dgit.pm:545
+msgid "working tree is dirty (does not match HEAD)"
+msgstr ""
+
+#: ../Debian/Dgit.pm:616
+msgid "detached HEAD"
+msgstr ""
+
+#: ../Debian/Dgit.pm:617
+msgid "HEAD symref is not to refs/"
+msgstr ""
+
+#: ../Debian/Dgit.pm:633
+#, perl-format
+msgid "parsing of %s failed"
+msgstr ""
+
+#: ../Debian/Dgit.pm:642
+#, 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:656
+#, perl-format
+msgid "open %s (%s): %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:677
+#, perl-format
+msgid "missing field %s in %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:749
+msgid "Dummy commit - do not use\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:838
+#, perl-format
+msgid "cannot stat %s/.git: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:861
+#, perl-format
+msgid "failed to mkdir playground parent %s: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:869
+#, perl-format
+msgid "failed to mkdir a playground %s: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:878
+#, perl-format
+msgid "failed to mkdir the playground %s: %s"
+msgstr ""
diff --git a/po/messages.pot b/po/messages.pot
new file mode 100644
index 0000000..9bd4618
--- /dev/null
+++ b/po/messages.pot
@@ -0,0 +1,2079 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the dgit package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: dgit ongoing\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-10-02 11:23+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"
+
+#: ../dgit:236
+#, perl-format
+msgid "%s: invalid configuration: %s\n"
+msgstr ""
+
+#: ../dgit:243
+msgid "warning: overriding problem due to --force:\n"
+msgstr ""
+
+#: ../dgit:251
+#, perl-format
+msgid "warning: skipping checks or functionality due to --force-%s\n"
+msgstr ""
+
+#: ../dgit:256
+#, perl-format
+msgid "%s: package %s does not exist in suite %s\n"
+msgstr ""
+
+#: ../dgit:475
+#, perl-format
+msgid "build host child %s"
+msgstr ""
+
+#: ../dgit:480 ../dgit:486
+#, perl-format
+msgid "connection lost: %s"
+msgstr ""
+
+#: ../dgit:481
+#, perl-format
+msgid "protocol violation; %s not expected"
+msgstr ""
+
+#: ../dgit:489
+#, perl-format
+msgid "eof (reading %s)"
+msgstr ""
+
+#: ../dgit:496
+msgid "protocol message"
+msgstr ""
+
+#: ../dgit:504
+#, perl-format
+msgid "`%s'"
+msgstr ""
+
+#: ../dgit:525
+msgid "bad byte count"
+msgstr ""
+
+#: ../dgit:528
+msgid "data block"
+msgstr ""
+
+#: ../dgit:609
+#, perl-format
+msgid "failed to fetch %s: %s"
+msgstr ""
+
+#: ../dgit:621
+#, perl-format
+msgid "%s ok: %s"
+msgstr ""
+
+#: ../dgit:623
+#, perl-format
+msgid "would be ok: %s (but dry run only)"
+msgstr ""
+
+#: ../dgit:648
+msgid ""
+"main usages:\n"
+" dgit [dgit-opts] clone [dgit-opts] package [suite] [./dir|/dir]\n"
+" dgit [dgit-opts] fetch|pull [dgit-opts] [suite]\n"
+" dgit [dgit-opts] build [dpkg-buildpackage-opts]\n"
+" dgit [dgit-opts] sbuild [sbuild-opts]\n"
+" dgit [dgit-opts] pbuilder|cowbuilder [debbuildopts]\n"
+" dgit [dgit-opts] push [dgit-opts] [suite]\n"
+" dgit [dgit-opts] push-source [dgit-opts] [suite]\n"
+" dgit [dgit-opts] rpush build-host:build-dir ...\n"
+"important dgit options:\n"
+" -k<keyid> sign tag and package with <keyid> instead of default\n"
+" --dry-run -n do not change anything, but go through the motions\n"
+" --damp-run -L like --dry-run but make local changes, without "
+"signing\n"
+" --new -N allow introducing a new package\n"
+" --debug -D increase debug level\n"
+" -c<name>=<value> set git config option (used directly by dgit too)\n"
+msgstr ""
+
+#: ../dgit:667
+msgid "Perhaps the upload is stuck in incoming. Using the version from git.\n"
+msgstr ""
+
+#: ../dgit:671
+#, perl-format
+msgid ""
+"%s: %s\n"
+"%s"
+msgstr ""
+
+#: ../dgit:676
+msgid "too few arguments"
+msgstr ""
+
+#: ../dgit:787
+#, perl-format
+msgid "multiple values for %s (in %s git config)"
+msgstr ""
+
+#: ../dgit:807
+#, perl-format
+msgid ""
+"need value for one of: %s\n"
+"%s: distro or suite appears not to be (properly) supported"
+msgstr ""
+
+#: ../dgit:848
+#, perl-format
+msgid "bad syntax for (nominal) distro `%s' (does not match %s)"
+msgstr ""
+
+#: ../dgit:863
+#, perl-format
+msgid "backports-quirk needs % or ( )"
+msgstr ""
+
+#: ../dgit:879
+#, perl-format
+msgid "%s needs t (true, y, 1) or f (false, n, 0) not `%s'"
+msgstr ""
+
+#: ../dgit:899
+msgid "readonly needs t (true, y, 1) or f (false, n, 0) or a (auto)"
+msgstr ""
+
+#: ../dgit:908 ../Debian/Dgit.pm:201
+msgid "internal error"
+msgstr ""
+
+#: ../dgit:910
+msgid "pushing but distro is configured readonly"
+msgstr ""
+
+#: ../dgit:914
+msgid ""
+"Push failed, before we got started.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:1079
+msgid "this operation does not support multiple comma-separated suites"
+msgstr ""
+
+#: ../dgit:1125
+#, perl-format
+msgid ""
+"config requested specific TLS key but do not know how to get curl to use "
+"exactly that EE key (%s)"
+msgstr ""
+
+#: ../dgit:1146
+msgid "ftpmasterapi archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1154
+msgid "curl failed to print 3-digit HTTP code"
+msgstr ""
+
+#: ../dgit:1158
+#, perl-format
+msgid "fetch of %s gave HTTP code %s"
+msgstr ""
+
+#: ../dgit:1174
+#, perl-format
+msgid "unknown suite %s, maybe -d would help"
+msgstr ""
+
+#: ../dgit:1178
+#, perl-format
+msgid "multiple matches for suite %s\n"
+msgstr ""
+
+#: ../dgit:1180
+#, perl-format
+msgid "suite %s info has no codename\n"
+msgstr ""
+
+#: ../dgit:1182
+#, perl-format
+msgid "suite %s maps to bad codename\n"
+msgstr ""
+
+#: ../dgit:1184 ../dgit:1209
+msgid "bad ftpmaster api response: "
+msgstr ""
+
+#: ../dgit:1198
+#, perl-format
+msgid "bad version: %s\n"
+msgstr ""
+
+#: ../dgit:1200
+msgid "bad component"
+msgstr ""
+
+#: ../dgit:1203
+msgid "bad filename"
+msgstr ""
+
+#: ../dgit:1205
+msgid "bad sha256sum"
+msgstr ""
+
+#: ../dgit:1256
+msgid "aptget archive query method takes no data part"
+msgstr ""
+
+#: ../dgit:1340
+#, perl-format
+msgid ""
+"apt seemed to not to update dgit's cached Release files for %s.\n"
+"(Perhaps %s\n"
+" is on a filesystem mounted `noatime'; if so, please use `relatime'.)\n"
+msgstr ""
+
+#: ../dgit:1362
+#, perl-format
+msgid "Release file (%s) specifies intolerable %s"
+msgstr ""
+
+#: ../dgit:1390
+msgid "apt-get source did not produce a .dsc"
+msgstr ""
+
+#: ../dgit:1391
+#, perl-format
+msgid "apt-get source produced several .dscs (%s)"
+msgstr ""
+
+#: ../dgit:1496
+#, 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:1687
+#, perl-format
+msgid "cannot operate on %s suite"
+msgstr ""
+
+#: ../dgit:1690
+#, perl-format
+msgid "canonical suite name for %s is %s"
+msgstr ""
+
+#: ../dgit:1692
+#, perl-format
+msgid "canonical suite name is %s"
+msgstr ""
+
+#: ../dgit:1712
+#, perl-format
+msgid "%s has hash %s but archive told us to expect %s"
+msgstr ""
+
+#: ../dgit:1718
+#, perl-format
+msgid "unsupported source format %s, sorry"
+msgstr ""
+
+#: ../dgit:1745
+#, perl-format
+msgid "diverting to %s (using config for %s)"
+msgstr ""
+
+#: ../dgit:1762
+msgid "unexpected results from git check query - "
+msgstr ""
+
+#: ../dgit:1777
+#, perl-format
+msgid "unknown git-check `%s'"
+msgstr ""
+
+#: ../dgit:1792
+#, perl-format
+msgid "unknown git-create `%s'"
+msgstr ""
+
+#: ../dgit:1829
+#, perl-format
+msgid "%s: warning: removing from %s: %s\n"
+msgstr ""
+
+#: ../dgit:1875
+#, perl-format
+msgid "could not parse .dsc %s line `%s'"
+msgstr ""
+
+#: ../dgit:1886
+#, perl-format
+msgid "missing any supported Checksums-* or Files field in %s"
+msgstr ""
+
+#: ../dgit:1932
+#, perl-format
+msgid "hash or size of %s varies in %s fields (between: %s)"
+msgstr ""
+
+#: ../dgit:1941
+#, perl-format
+msgid "file list in %s varies between hash fields!"
+msgstr ""
+
+#: ../dgit:1945
+#, perl-format
+msgid "%s has no files list field(s)"
+msgstr ""
+
+#: ../dgit:1951
+#, perl-format
+msgid "no file appears in all file lists (looked in: %s)"
+msgstr ""
+
+#: ../dgit:1991
+#, perl-format
+msgid "purportedly source-only changes polluted by %s\n"
+msgstr ""
+
+#: ../dgit:2004
+msgid "cannot find section/priority from .changes Files field"
+msgstr ""
+
+#: ../dgit:2017
+msgid ""
+"archive does not support .orig check; hope you used --ch:--sa/-sd if needed\n"
+msgstr ""
+
+#: ../dgit:2033
+#, perl-format
+msgid ".dsc %s missing entry for %s"
+msgstr ""
+
+#: ../dgit:2038
+#, perl-format
+msgid "%s: %s (archive) != %s (local .dsc)"
+msgstr ""
+
+#: ../dgit:2046
+#, perl-format
+msgid "archive %s: %s"
+msgstr ""
+
+#: ../dgit:2053
+#, perl-format
+msgid "archive contains %s with different checksum"
+msgstr ""
+
+#: ../dgit:2081
+#, perl-format
+msgid "edited .changes for archive .orig contents: %s %s"
+msgstr ""
+
+#: ../dgit:2089
+#, perl-format
+msgid "[new .changes left in %s]"
+msgstr ""
+
+#: ../dgit:2092
+#, perl-format
+msgid "%s already has appropriate .orig(s) (if any)"
+msgstr ""
+
+#: ../dgit:2116
+#, perl-format
+msgid ""
+"unexpected commit author line format `%s' (was generated from changelog "
+"Maintainer field)"
+msgstr ""
+
+#: ../dgit:2139
+msgid ""
+"\n"
+"Unfortunately, this source package uses a feature of dpkg-source where\n"
+"the same source package unpacks to different source code on different\n"
+"distros. dgit cannot safely operate on such packages on affected\n"
+"distros, because the meaning of source packages is not stable.\n"
+"\n"
+"Please ask the distro/maintainer to remove the distro-specific series\n"
+"files and use a different technique (if necessary, uploading actually\n"
+"different packages, if different distros are supposed to have\n"
+"different code).\n"
+"\n"
+msgstr ""
+
+#: ../dgit:2151
+#, perl-format
+msgid ""
+"Found active distro-specific series file for %s (%s): %s, cannot continue"
+msgstr ""
+
+#: ../dgit:2182
+msgid "Dpkg::Vendor `current vendor'"
+msgstr ""
+
+#: ../dgit:2184
+msgid "(base) distro being accessed"
+msgstr ""
+
+#: ../dgit:2186
+msgid "(nominal) distro being accessed"
+msgstr ""
+
+#: ../dgit:2207 ../dgit:2212
+#, perl-format
+msgid "accessing %s: %s"
+msgstr ""
+
+#: ../dgit:2227 ../dgit:2234
+#, perl-format
+msgid "saving %s: %s"
+msgstr ""
+
+#: ../dgit:2300
+#, perl-format
+msgid "dgit (child): exec %s: %s"
+msgstr ""
+
+#: ../dgit:2364 ../dgit:5862
+msgid "source package"
+msgstr ""
+
+#: ../dgit:2382
+msgid "package changelog"
+msgstr ""
+
+#: ../dgit:2422
+msgid "package changelog has no entries!"
+msgstr ""
+
+#: ../dgit:2441
+#, perl-format
+msgid "Import %s"
+msgstr ""
+
+#: ../dgit:2522
+#, perl-format
+msgid "%s: trying slow absurd-git-apply..."
+msgstr ""
+
+#: ../dgit:2541
+#, perl-format
+msgid "%s failed: %s\n"
+msgstr ""
+
+#: ../dgit:2550
+#, perl-format
+msgid ""
+"gbp-pq import and dpkg-source disagree!\n"
+" gbp-pq import gave commit %s\n"
+" gbp-pq import gave tree %s\n"
+" dpkg-source --before-build gave tree %s\n"
+msgstr ""
+
+#: ../dgit:2565
+#, perl-format
+msgid "synthesised git commit from .dsc %s"
+msgstr ""
+
+#: ../dgit:2569
+msgid "Import of source package"
+msgstr ""
+
+#: ../dgit:2582
+#, perl-format
+msgid "Record %s (%s) in archive suite %s\n"
+msgstr ""
+
+#: ../dgit:2586
+#, perl-format
+msgid ""
+"\n"
+"Version actually in archive: %s (older)\n"
+"Last version pushed with dgit: %s (newer or same)\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:2628
+#, perl-format
+msgid "using existing %s"
+msgstr ""
+
+#: ../dgit:2632
+#, perl-format
+msgid ""
+"file %s has hash %s but .dsc demands hash %s (perhaps you should delete this "
+"file?)"
+msgstr ""
+
+#: ../dgit:2636
+#, perl-format
+msgid "need to fetch correct version of %s"
+msgstr ""
+
+#: ../dgit:2652
+#, perl-format
+msgid ""
+"file %s has hash %s but .dsc demands hash %s (got wrong file from archive!)"
+msgstr ""
+
+#: ../dgit:2747
+msgid "too many iterations trying to get sane fetch!"
+msgstr ""
+
+#: ../dgit:2762
+#, perl-format
+msgid "warning: git ls-remote %s reported %s; this is silly, ignoring it.\n"
+msgstr ""
+
+#: ../dgit:2806
+#, perl-format
+msgid "warning: git fetch %s created %s; this is silly, deleting it.\n"
+msgstr ""
+
+#: ../dgit:2821
+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:2826
+#, perl-format
+msgid ""
+"warning: git ls-remote suggests we want %s\n"
+"warning: and it should refer to %s\n"
+"warning: but git fetch didn't fetch that object to any relevant ref.\n"
+"warning: This may be due to a race with someone updating the server.\n"
+"warning: Will try again...\n"
+msgstr ""
+
+#: ../dgit:2893
+#, perl-format
+msgid "Not updating %s from %s to %s.\n"
+msgstr ""
+
+#: ../dgit:2942
+#, perl-format
+msgid "%s: NO git hash"
+msgstr ""
+
+#: ../dgit:2946
+#, perl-format
+msgid "%s: specified git info (%s)"
+msgstr ""
+
+#: ../dgit:2953
+#, perl-format
+msgid "%s: specified git hash"
+msgstr ""
+
+#: ../dgit:2955
+#, perl-format
+msgid "%s: invalid Dgit info"
+msgstr ""
+
+#: ../dgit:2977
+#, perl-format
+msgid "not chasing .dsc distro %s: not fetching %s"
+msgstr ""
+
+#: ../dgit:2982
+#, perl-format
+msgid ".dsc names distro %s: fetching %s"
+msgstr ""
+
+#: ../dgit:2987
+#, 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:2997
+#, perl-format
+msgid ""
+".dsc Dgit metadata is in context of distro %s\n"
+"for which we have no configured url;\n"
+".dsc provides hinted url with protocol %s which is unsafe.\n"
+"(can be overridden by config - consult documentation)\n"
+msgstr ""
+
+#: ../dgit:3017
+msgid "rewrite map"
+msgstr ""
+
+#: ../dgit:3024
+msgid "server's git history rewrite map contains a relevant entry!"
+msgstr ""
+
+#: ../dgit:3028
+msgid "using rewritten git hash in place of .dsc value"
+msgstr ""
+
+#: ../dgit:3030
+msgid "server data says .dsc hash is to be disregarded"
+msgstr ""
+
+#: ../dgit:3037
+msgid "additional commits"
+msgstr ""
+
+#: ../dgit:3040
+#, perl-format
+msgid ""
+".dsc Dgit metadata requires commit %s\n"
+"but we could not obtain that object anywhere.\n"
+msgstr ""
+
+#: ../dgit:3064
+msgid "last upload to archive"
+msgstr ""
+
+#: ../dgit:3068
+msgid "no version available from the archive"
+msgstr ""
+
+#: ../dgit:3151
+msgid "dgit suite branch on dgit git server"
+msgstr ""
+
+#: ../dgit:3158
+msgid "dgit client's archive history view"
+msgstr ""
+
+#: ../dgit:3163
+msgid "Dgit field in .dsc from archive"
+msgstr ""
+
+#: ../dgit:3191
+#, perl-format
+msgid ""
+"\n"
+"Git commit in archive is behind the last version allegedly pushed/uploaded.\n"
+"Commit referred to by archive: %s\n"
+"Last version pushed with dgit: %s\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:3204
+msgid "archive .dsc names newer git commit"
+msgstr ""
+
+#: ../dgit:3207
+msgid "archive .dsc names other git commit, fixing up"
+msgstr ""
+
+#: ../dgit:3228
+#, perl-format
+msgid ""
+"\n"
+"Package not found in the archive, but has allegedly been pushed using dgit.\n"
+"%s\n"
+msgstr ""
+
+#: ../dgit:3237
+#, perl-format
+msgid ""
+"\n"
+"Warning: relevant archive skew detected.\n"
+"Archive allegedly contains %s\n"
+"But we were not able to obtain any version from the archive or git.\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3322
+#, perl-format
+msgid ""
+"Record %s (%s) in archive suite %s\n"
+"\n"
+"Record that\n"
+msgstr ""
+
+#: ../dgit:3335
+msgid "should be treated as descended from\n"
+msgstr ""
+
+#: ../dgit:3353
+msgid "dgit repo server tip (last push)"
+msgstr ""
+
+#: ../dgit:3355
+msgid "local tracking tip (last fetch)"
+msgstr ""
+
+#: ../dgit:3366
+#, perl-format
+msgid ""
+"\n"
+"Warning: archive skew detected. Using the available version:\n"
+"Archive allegedly contains %s\n"
+"We were able to obtain only %s\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3381
+msgid "fetched source tree"
+msgstr ""
+
+#: ../dgit:3417
+msgid "debian/changelog merge driver"
+msgstr ""
+
+#: ../dgit:3482
+msgid ""
+"[attr]dgit-defuse-attrs already found, and proper, in .git/info/attributes\n"
+" not doing further gitattributes setup\n"
+msgstr ""
+
+#: ../dgit:3496
+msgid "# ^ see GITATTRIBUTES in dgit(7) and dgit setup-new-tree in dgit(1)\n"
+msgstr ""
+
+#: ../dgit:3511
+#, perl-format
+msgid "install %s: %s"
+msgstr ""
+
+#: ../dgit:3538
+#, perl-format
+msgid ""
+"dgit: warning: %s contains .gitattributes\n"
+"dgit: .gitattributes not (fully) defused. Recommended: dgit setup-new-"
+"tree.\n"
+msgstr ""
+
+#: ../dgit:3560
+#, perl-format
+msgid "fetching %s..."
+msgstr ""
+
+#: ../dgit:3568
+#, perl-format
+msgid "failed to obtain %s: %s"
+msgstr ""
+
+#: ../dgit:3607
+#, perl-format
+msgid "package %s missing in (base suite) %s"
+msgstr ""
+
+#: ../dgit:3639
+msgid "local combined tracking branch"
+msgstr ""
+
+#: ../dgit:3641
+msgid "archive seems to have rewound: local tracking branch is ahead!"
+msgstr ""
+
+#: ../dgit:3680
+#, perl-format
+msgid ""
+"Combine archive branches %s [dgit]\n"
+"\n"
+"Input branches:\n"
+msgstr ""
+
+#: ../dgit:3694
+msgid ""
+"\n"
+"Key\n"
+" * marks the highest version branch, which choose to use\n"
+" + marks each branch which was not already an ancestor\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3709
+#, perl-format
+msgid "calculated combined tracking suite %s"
+msgstr ""
+
+#: ../dgit:3727
+#, perl-format
+msgid "ready for work in %s"
+msgstr ""
+
+#: ../dgit:3735
+msgid "dry run makes no sense with clone"
+msgstr ""
+
+#: ../dgit:3752
+#, perl-format
+msgid "create `%s': %s"
+msgstr ""
+
+#: ../dgit:3763
+msgid "fetching existing git history"
+msgstr ""
+
+#: ../dgit:3767
+msgid "starting new git history"
+msgstr ""
+
+#: ../dgit:3793
+#, 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:3798
+#, perl-format
+msgid "fetched into %s"
+msgstr ""
+
+#: ../dgit:3810
+#, perl-format
+msgid "Merge from %s [dgit]"
+msgstr ""
+
+#: ../dgit:3812
+#, perl-format
+msgid "fetched to %s and merged into HEAD"
+msgstr ""
+
+#: ../dgit:3818
+#, perl-format
+msgid "git tree contains debian/source/%s"
+msgstr ""
+
+#: ../dgit:3837
+#, 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:3854
+msgid "nothing quilty to commit, ok."
+msgstr ""
+
+#: ../dgit:3857
+msgid " (wanted to commit patch update)"
+msgstr ""
+
+#: ../dgit:3861
+msgid ""
+"Commit Debian 3.0 (quilt) metadata\n"
+"\n"
+msgstr ""
+
+#: ../dgit:3904
+#, perl-format
+msgid ""
+"Not doing any fixup of `%s' due to ----no-quilt-fixup or --quilt=nocheck"
+msgstr ""
+
+#: ../dgit:3909
+#, perl-format
+msgid "Format `%s', need to check/update patch stack"
+msgstr ""
+
+#: ../dgit:3919
+#, perl-format
+msgid "commit id %s"
+msgstr ""
+
+#: ../dgit:3925
+#, perl-format
+msgid "and left in %s"
+msgstr ""
+
+#: ../dgit:3951
+#, perl-format
+msgid "Wanted tag %s (%s) on dgit server, but not found\n"
+msgstr ""
+
+#: ../dgit:3954
+#, perl-format
+msgid "Wanted tag %s (one of: %s) on dgit server, but not found\n"
+msgstr ""
+
+#: ../dgit:3962
+#, perl-format
+msgid "%s (%s) .. %s (%s) is not fast forward\n"
+msgstr ""
+
+#: ../dgit:3971
+msgid "version currently in archive"
+msgstr ""
+
+#: ../dgit:3980
+#, perl-format
+msgid "Checking package changelog for archive version %s ..."
+msgstr ""
+
+#: ../dgit:3988
+#, perl-format
+msgid "%s field from dpkg-parsechangelog %s"
+msgstr ""
+
+#: ../dgit:3998
+#, perl-format
+msgid "Perhaps debian/changelog does not mention %s ?"
+msgstr ""
+
+#: ../dgit:4001
+#, perl-format
+msgid ""
+"%s is %s\n"
+"Your tree seems to based on earlier (not uploaded) %s.\n"
+msgstr ""
+
+#: ../dgit:4015
+#, perl-format
+msgid "Declaring that HEAD inciudes all changes in %s..."
+msgstr ""
+
+#: ../dgit:4071
+msgid "Checking that HEAD inciudes all changes in archive..."
+msgstr ""
+
+#: ../dgit:4080
+msgid "maintainer view tag"
+msgstr ""
+
+#: ../dgit:4082
+msgid "dgit view tag"
+msgstr ""
+
+#: ../dgit:4083
+msgid "current archive contents"
+msgstr ""
+
+#: ../dgit:4096
+msgid ""
+"| Not fast forward; maybe --overwrite is needed ? Please see dgit(1).\n"
+msgstr ""
+
+#: ../dgit:4106
+#, perl-format
+msgid "Declare fast forward from %s\n"
+msgstr ""
+
+#: ../dgit:4107
+#, perl-format
+msgid "Make fast forward from %s\n"
+msgstr ""
+
+#: ../dgit:4111
+#, perl-format
+msgid "Made pseudo-merge of %s into dgit view."
+msgstr ""
+
+#: ../dgit:4124
+#, perl-format
+msgid "Declare fast forward from %s"
+msgstr ""
+
+#: ../dgit:4132
+#, perl-format
+msgid "Make pseudo-merge of %s into your HEAD."
+msgstr ""
+
+#: ../dgit:4144
+#, perl-format
+msgid "-p specified %s but changelog specified %s"
+msgstr ""
+
+#: ../dgit:4166
+#, perl-format
+msgid "%s is for %s %s but debian/changelog is for %s %s"
+msgstr ""
+
+#: ../dgit:4227
+#, perl-format
+msgid "changes field %s `%s' does not match changelog `%s'"
+msgstr ""
+
+#: ../dgit:4255
+#, perl-format
+msgid "%s release %s for %s (%s) [dgit]\n"
+msgstr ""
+
+#: ../dgit:4268
+#, perl-format
+msgid ""
+"%s release %s for %s (%s)\n"
+"(maintainer view tag generated by dgit --quilt=%s)\n"
+msgstr ""
+
+#: ../dgit:4320
+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:4329
+msgid ""
+"package appears to be new in this suite; if this is intentional, use --new"
+msgstr ""
+
+#: ../dgit:4334
+msgid ""
+"Push failed, while preparing your push.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:4357
+#, perl-format
+msgid "looked for .dsc %s, but %s; maybe you forgot to build"
+msgstr ""
+
+#: ../dgit:4374
+#, 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:4398
+#, perl-format
+msgid ""
+"--quilt=%s but no cached dgit view:\n"
+" perhaps HEAD changed since dgit build[-source] ?"
+msgstr ""
+
+#: ../dgit:4429
+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:4439
+#, perl-format
+msgid "checking that %s corresponds to HEAD"
+msgstr ""
+
+#: ../dgit:4473 ../dgit:4485
+#, perl-format
+msgid "HEAD specifies a different tree to %s:\n"
+msgstr ""
+
+#: ../dgit:4479
+#, 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:4489
+#, 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:4500
+#, perl-format
+msgid ""
+"failed to find unique changes file (looked for %s in %s); perhaps you need "
+"to use dgit -C"
+msgstr ""
+
+#: ../dgit:4522
+msgid "uploading binaries, although distroy policy is source only"
+msgstr ""
+
+#: ../dgit:4526
+msgid "source-only upload, although distroy policy requires .debs"
+msgstr ""
+
+#: ../dgit:4530
+#, perl-format
+msgid ""
+"source-only upload, even though package is entirely NEW\n"
+"(this is contrary to policy in %s)"
+msgstr ""
+
+#: ../dgit:4537
+#, perl-format
+msgid "unknown source-only-uploads policy `%s'"
+msgstr ""
+
+#: ../dgit:4581
+msgid ""
+"Push failed, while signing the tag.\n"
+"You can retry the push, after fixing the problem, if you like.\n"
+msgstr ""
+
+#: ../dgit:4594
+msgid ""
+"Push failed, *after* signing the tag.\n"
+"If you want to try again, you should use a new version number.\n"
+msgstr ""
+
+#: ../dgit:4611
+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:4628
+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:4659
+#, perl-format
+msgid "pushed and uploaded %s"
+msgstr ""
+
+#: ../dgit:4671
+msgid "-p is not allowed with clone; specify as argument instead"
+msgstr ""
+
+#: ../dgit:4682
+msgid "incorrect arguments to dgit clone"
+msgstr ""
+
+#: ../dgit:4688
+#, perl-format
+msgid "%s already exists"
+msgstr ""
+
+#: ../dgit:4702
+#, perl-format
+msgid "remove %s: %s\n"
+msgstr ""
+
+#: ../dgit:4706
+#, perl-format
+msgid "check whether to remove %s: %s\n"
+msgstr ""
+
+#: ../dgit:4744
+msgid "incorrect arguments to dgit fetch or dgit pull"
+msgstr ""
+
+#: ../dgit:4761
+#, perl-format
+msgid "dgit pull not yet supported in split view mode (--quilt=%s)\n"
+msgstr ""
+
+#: ../dgit:4770
+msgid "dgit checkout needs a suite argument"
+msgstr ""
+
+#: ../dgit:4832
+#, perl-format
+msgid "setting up vcs-git: %s\n"
+msgstr ""
+
+#: ../dgit:4835
+#, perl-format
+msgid "vcs git already configured: %s\n"
+msgstr ""
+
+#: ../dgit:4837
+#, perl-format
+msgid "changing vcs-git url to: %s\n"
+msgstr ""
+
+#: ../dgit:4842
+#, perl-format
+msgid "fetching (%s)\n"
+msgstr ""
+
+#: ../dgit:4857
+#, perl-format
+msgid "incorrect arguments to dgit %s"
+msgstr ""
+
+#: ../dgit:4868
+#, perl-format
+msgid "dgit %s: changelog specifies %s (%s) but command line specifies %s"
+msgstr ""
+
+#: ../dgit:4906
+#, perl-format
+msgid ""
+"build host has dgit rpush protocol versions %s but invocation host has %s"
+msgstr ""
+
+#: ../dgit:4986
+#, perl-format
+msgid "create %s: %s"
+msgstr ""
+
+#: ../dgit:5023
+#, perl-format
+msgid "build host child failed: %s"
+msgstr ""
+
+#: ../dgit:5026
+msgid "all done\n"
+msgstr ""
+
+#: ../dgit:5035
+#, perl-format
+msgid "file %s (%s) twice"
+msgstr ""
+
+#: ../dgit:5043
+msgid "bad param spec"
+msgstr ""
+
+#: ../dgit:5049
+msgid "bad previously spec"
+msgstr ""
+
+#: ../dgit:5068
+#, perl-format
+msgid ""
+"rpush negotiated protocol version %s which does not support quilt mode %s"
+msgstr ""
+
+#: ../dgit:5113
+#, perl-format
+msgid "buildinfo mismatch in field %s"
+msgstr ""
+
+#: ../dgit:5116
+#, perl-format
+msgid "buildinfo contains forbidden field %s"
+msgstr ""
+
+#: ../dgit:5157
+msgid "remote changes file"
+msgstr ""
+
+#: ../dgit:5232
+msgid "not a plain file or symlink\n"
+msgstr ""
+
+#: ../dgit:5238
+msgid "mode or type changed\n"
+msgstr ""
+
+#: ../dgit:5239
+msgid "modified symlink\n"
+msgstr ""
+
+#: ../dgit:5242
+msgid "deletion of symlink\n"
+msgstr ""
+
+#: ../dgit:5246
+msgid "creation with non-default mode\n"
+msgstr ""
+
+#: ../dgit:5276
+msgid "dgit view: changes are required..."
+msgstr ""
+
+#: ../dgit:5305
+#, perl-format
+msgid ""
+"\n"
+"For full diff showing the problem(s), type:\n"
+" %s\n"
+msgstr ""
+
+#: ../dgit:5312
+#, perl-format
+msgid ""
+"--quilt=%s specified, implying patches-unapplied git tree\n"
+" but git tree differs from orig in upstream files."
+msgstr ""
+
+#: ../dgit:5318
+msgid ""
+"\n"
+" ... debian/patches is missing; perhaps this is a patch queue branch?"
+msgstr ""
+
+#: ../dgit:5325
+#, 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:5332
+msgid "dgit view: creating patches-applied version using gbp pq"
+msgstr ""
+
+#: ../dgit:5341
+#, 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:5350
+msgid "dgit view: creating patch to represent .gitignore changes"
+msgstr ""
+
+#: ../dgit:5355
+#, perl-format
+msgid "%s already exists; but want to create it to record .gitignore changes"
+msgstr ""
+
+#: ../dgit:5360
+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:5382
+msgid "Commit patch to update .gitignore\n"
+msgstr ""
+
+#: ../dgit:5396
+msgid "converted"
+msgstr ""
+
+#: ../dgit:5397
+#, perl-format
+msgid "dgit view: created (%s)"
+msgstr ""
+
+#: ../dgit:5462
+msgid "maximum search space exceeded"
+msgstr ""
+
+#: ../dgit:5480
+#, perl-format
+msgid "has %s not %s"
+msgstr ""
+
+#: ../dgit:5489
+msgid "root commit"
+msgstr ""
+
+#: ../dgit:5495
+#, perl-format
+msgid "merge (%s nontrivial parents)"
+msgstr ""
+
+#: ../dgit:5506
+#, perl-format
+msgid "changed %s"
+msgstr ""
+
+#: ../dgit:5525
+#, perl-format
+msgid ""
+"\n"
+"%s: error: quilt fixup cannot be linear. Stopped at:\n"
+msgstr ""
+
+#: ../dgit:5532
+#, perl-format
+msgid "%s: %s: %s\n"
+msgstr ""
+
+#: ../dgit:5544
+msgid "quilt history linearisation failed. Search `quilt fixup' in dgit(7).\n"
+msgstr ""
+
+#: ../dgit:5547
+msgid "quilt fixup cannot be linear, smashing..."
+msgstr ""
+
+#: ../dgit:5559
+#, perl-format
+msgid ""
+"Automatically generated patch (%s)\n"
+"Last (up to) %s git changes, FYI:\n"
+"\n"
+msgstr ""
+
+#: ../dgit:5566
+msgid "quiltify linearisation planning successful, executing..."
+msgstr ""
+
+#: ../dgit:5600
+msgid "contains unexpected slashes\n"
+msgstr ""
+
+#: ../dgit:5601
+msgid "contains leading punctuation\n"
+msgstr ""
+
+#: ../dgit:5602
+msgid "contains bad character(s)\n"
+msgstr ""
+
+#: ../dgit:5603
+msgid "is series file\n"
+msgstr ""
+
+#: ../dgit:5604
+msgid "too long\n"
+msgstr ""
+
+#: ../dgit:5608
+#, perl-format
+msgid "quiltifying commit %s: ignoring/dropping Gbp-Pq %s: %s"
+msgstr ""
+
+#: ../dgit:5637
+#, perl-format
+msgid "dgit: patch title transliteration error: %s"
+msgstr ""
+
+#: ../dgit:5774
+msgid "Commit removal of .pc (quilt series tracking data)\n"
+msgstr ""
+
+#: ../dgit:5784
+msgid "starting quiltify (single-debian-patch)"
+msgstr ""
+
+#: ../dgit:5884
+#, perl-format
+msgid "dgit: split brain (separate dgit view) may be needed (--quilt=%s)."
+msgstr ""
+
+#: ../dgit:5915
+#, perl-format
+msgid "dgit view: found cached (%s)"
+msgstr ""
+
+#: ../dgit:5920
+msgid "dgit view: found cached, no changes required"
+msgstr ""
+
+#: ../dgit:5931
+#, perl-format
+msgid "examining quilt state (multiple patches, %s mode)"
+msgstr ""
+
+#: ../dgit:6022
+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"
+" are probably too inconsistent. dgit can only fix up certain kinds of\n"
+" anomaly (depending on the quilt mode). Please see --quilt= in dgit(1).\n"
+msgstr ""
+
+#: ../dgit:6036
+msgid "Tree already contains .pc - will use it then delete it."
+msgstr ""
+
+#: ../dgit:6073
+#, perl-format
+msgid "%s: base trees orig=%.20s o+d/p=%.20s"
+msgstr ""
+
+#: ../dgit:6076
+#, 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"
+msgstr ""
+
+#: ../dgit:6082
+#, perl-format
+msgid "dgit: cannot represent change: %s: %s\n"
+msgstr ""
+
+#: ../dgit:6086
+msgid ""
+"HEAD has changes to .orig[s] which are not representable by `3.0 (quilt)'\n"
+msgstr ""
+
+#: ../dgit:6093
+msgid "This might be a patches-unapplied branch."
+msgstr ""
+
+#: ../dgit:6096
+msgid "This might be a patches-applied branch."
+msgstr ""
+
+#: ../dgit:6099
+msgid "Maybe you need one of --[quilt=]gbp --[quilt=]dpm --quilt=unapplied ?"
+msgstr ""
+
+#: ../dgit:6102
+msgid "Warning: Tree has .gitattributes. See GITATTRIBUTES in dgit(7)."
+msgstr ""
+
+#: ../dgit:6106
+msgid "Maybe orig tarball(s) are not identical to git representation?"
+msgstr ""
+
+#: ../dgit:6115
+#, perl-format
+msgid "starting quiltify (multiple patches, %s mode)"
+msgstr ""
+
+#: ../dgit:6153
+msgid ""
+"\n"
+"dgit: Building, or cleaning with rules target, in patches-unapplied tree.\n"
+"dgit: Have to apply the patches - making the tree dirty.\n"
+"dgit: (Consider specifying --clean=git and (or) using dgit sbuild.)\n"
+"\n"
+msgstr ""
+
+#: ../dgit:6165
+msgid "dgit: Unapplying patches again to tidy up the tree."
+msgstr ""
+
+#: ../dgit:6199
+msgid "tree contains uncommitted files and --clean=check specified"
+msgstr ""
+
+#: ../dgit:6208
+msgid "clean takes no additional arguments"
+msgstr ""
+
+#: ../dgit:6221
+#, perl-format
+msgid "-p is not allowed with dgit %s"
+msgstr ""
+
+#: ../dgit:6248
+#, perl-format
+msgid "remove old changes file %s: %s"
+msgstr ""
+
+#: ../dgit:6250
+#, perl-format
+msgid "would remove %s"
+msgstr ""
+
+#: ../dgit:6276
+msgid "archive query failed (queried because --since-version not specified)"
+msgstr ""
+
+#: ../dgit:6282
+#, perl-format
+msgid "changelog will contain changes since %s"
+msgstr ""
+
+#: ../dgit:6285
+msgid "package seems new, not specifying -v<version>"
+msgstr ""
+
+#: ../dgit:6328
+msgid "Wanted to build nothing!"
+msgstr ""
+
+#: ../dgit:6366
+#, perl-format
+msgid "only one changes file from build (%s)\n"
+msgstr ""
+
+#: ../dgit:6373
+#, perl-format
+msgid "%s found in binaries changes file %s"
+msgstr ""
+
+#: ../dgit:6380
+#, perl-format
+msgid "%s unexpectedly not created by build"
+msgstr ""
+
+#: ../dgit:6384
+#, perl-format
+msgid "install new changes %s{,.inmulti}: %s"
+msgstr ""
+
+#: ../dgit:6389
+#, perl-format
+msgid "wrong number of different changes files (%s)"
+msgstr ""
+
+#: ../dgit:6392
+#, perl-format
+msgid "build successful, results in %s\n"
+msgstr ""
+
+#: ../dgit:6405
+#, perl-format
+msgid ""
+"changes files other than source matching %s already present; building would "
+"result in ambiguity about the intended results.\n"
+"Suggest you delete %s.\n"
+msgstr ""
+
+#: ../dgit:6423
+msgid "build successful\n"
+msgstr ""
+
+#: ../dgit:6430
+#, 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:6542
+#, perl-format
+msgid "remove %s: %s"
+msgstr ""
+
+#: ../dgit:6579
+#, perl-format
+msgid "put in place new built file (%s): %s"
+msgstr ""
+
+#: ../dgit:6592
+msgid "build-source takes no additional arguments"
+msgstr ""
+
+#: ../dgit:6596
+#, perl-format
+msgid "source built, results in %s and %s"
+msgstr ""
+
+#: ../dgit:6603
+msgid ""
+"dgit push-source: --include-dirty/--ignore-dirty does not makesense with "
+"push-source!"
+msgstr ""
+
+#: ../dgit:6609
+msgid "source changes file"
+msgstr ""
+
+#: ../dgit:6611
+msgid "user-specified changes file is not source-only"
+msgstr ""
+
+#: ../dgit:6631 ../dgit:6633
+#, perl-format
+msgid "%s (in build products dir): %s"
+msgstr ""
+
+#: ../dgit:6646
+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:6658
+msgid ""
+"you asked for a builder but your debbuildopts didn't ask for any binaries -- "
+"is this really what you meant?"
+msgstr ""
+
+#: ../dgit:6662
+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:6692
+msgid "incorrect arguments to dgit print-unapplied-treeish"
+msgstr ""
+
+#: ../dgit:6714
+msgid "source tree"
+msgstr ""
+
+#: ../dgit:6716
+#, perl-format
+msgid "dgit: import-dsc: %s"
+msgstr ""
+
+#: ../dgit:6729
+#, perl-format
+msgid "unknown dgit import-dsc sub-option `%s'"
+msgstr ""
+
+#: ../dgit:6733
+msgid "usage: dgit import-dsc .../PATH/TO/.DSC BRANCH"
+msgstr ""
+
+#: ../dgit:6737
+msgid "dry run makes no sense with import-dsc"
+msgstr ""
+
+#: ../dgit:6754
+#, perl-format
+msgid "%s is checked out - will not update it"
+msgstr ""
+
+#: ../dgit:6759
+#, perl-format
+msgid "open import .dsc (%s): %s"
+msgstr ""
+
+#: ../dgit:6761
+#, perl-format
+msgid "read %s: %s"
+msgstr ""
+
+#: ../dgit:6772
+msgid "import-dsc signature check failed"
+msgstr ""
+
+#: ../dgit:6775
+#, perl-format
+msgid "%s: warning: importing unsigned .dsc\n"
+msgstr ""
+
+#: ../dgit:6786
+msgid "Dgit metadata in .dsc"
+msgstr ""
+
+#: ../dgit:6797
+msgid "dgit: import-dsc of .dsc with Dgit field, using git hash"
+msgstr ""
+
+#: ../dgit:6806
+#, perl-format
+msgid ""
+".dsc contains Dgit field referring to object %s\n"
+"Your git tree does not have that object. Try `git fetch' from a\n"
+"plausible server (browse.dgit.d.o? alioth?), and try the import-dsc again.\n"
+msgstr ""
+
+#: ../dgit:6813
+msgid "Not fast forward, forced update."
+msgstr ""
+
+#: ../dgit:6815
+#, perl-format
+msgid "Not fast forward to %s"
+msgstr ""
+
+#: ../dgit:6820
+#, perl-format
+msgid "updated git ref %s"
+msgstr ""
+
+#: ../dgit:6825
+#, perl-format
+msgid ""
+"Branch %s already exists\n"
+"Specify ..%s for a pseudo-merge, binding in existing history\n"
+"Specify +%s to overwrite, discarding existing history\n"
+msgstr ""
+
+#: ../dgit:6837
+#, perl-format
+msgid "lstat %s works but stat gives %s !"
+msgstr ""
+
+#: ../dgit:6839
+#, perl-format
+msgid "stat %s: %s"
+msgstr ""
+
+#: ../dgit:6847
+#, perl-format
+msgid "cannot import %s which seems to be inside working tree!"
+msgstr ""
+
+#: ../dgit:6851
+#, perl-format
+msgid "import %s requires .../%s, but it does not exist"
+msgstr ""
+
+#: ../dgit:6856
+#, perl-format
+msgid "import %s requires %s, but: %s"
+msgstr ""
+
+#: ../dgit:6858
+#, perl-format
+msgid "symlink %s to %s: %s"
+msgstr ""
+
+#: ../dgit:6859
+#, perl-format
+msgid "made symlink %s -> %s"
+msgstr ""
+
+#: ../dgit:6870
+msgid "Import, forced update - synthetic orphan git history."
+msgstr ""
+
+#: ../dgit:6872
+msgid "Import, merging."
+msgstr ""
+
+#: ../dgit:6886
+#, perl-format
+msgid "Merge %s (%s) import into %s\n"
+msgstr ""
+
+#: ../dgit:6895
+#, perl-format
+msgid "results are in in git ref %s"
+msgstr ""
+
+#: ../dgit:6902
+msgid "need only 1 subpath argument"
+msgstr ""
+
+#: ../dgit:6908
+#, perl-format
+msgid "exec curl: %s\n"
+msgstr ""
+
+#: ../dgit:6922
+msgid "need destination argument"
+msgstr ""
+
+#: ../dgit:6927
+#, perl-format
+msgid "exec git clone: %s\n"
+msgstr ""
+
+#: ../dgit:6935
+msgid "no arguments allowed to dgit print-dgit-repos-server-source-url"
+msgstr ""
+
+#: ../dgit:6946
+msgid "no arguments allowed to dgit print-dpkg-source-ignores"
+msgstr ""
+
+#: ../dgit:6952
+msgid "no arguments allowed to dgit setup-mergechangelogs"
+msgstr ""
+
+#: ../dgit:6959 ../dgit:6965
+msgid "no arguments allowed to dgit setup-useremail"
+msgstr ""
+
+#: ../dgit:6971
+msgid "no arguments allowed to dgit setup-tree"
+msgstr ""
+
+#: ../dgit:7018
+msgid ""
+"--initiator-tempdir must be used specify an absolute, not relative, "
+"directory."
+msgstr ""
+
+#: ../dgit:7057
+#, perl-format
+msgid "%s needs a value"
+msgstr ""
+
+#: ../dgit:7061
+#, perl-format
+msgid "bad value `%s' for %s"
+msgstr ""
+
+#: ../dgit:7146
+#, perl-format
+msgid "%s: warning: ignoring unknown force option %s\n"
+msgstr ""
+
+#: ../dgit:7166
+#, perl-format
+msgid "unknown long option `%s'"
+msgstr ""
+
+#: ../dgit:7219
+#, perl-format
+msgid "unknown short option `%s'"
+msgstr ""
+
+#: ../dgit:7234
+#, perl-format
+msgid "%s is set to something other than SIG_DFL\n"
+msgstr ""
+
+#: ../dgit:7238
+#, perl-format
+msgid "%s is blocked\n"
+msgstr ""
+
+#: ../dgit:7244
+#, perl-format
+msgid ""
+"On entry to dgit, %s\n"
+"This is a bug produced by something in in your execution environment.\n"
+"Giving up.\n"
+msgstr ""
+
+#: ../dgit:7261
+#, perl-format
+msgid "cannot set command for %s"
+msgstr ""
+
+#: ../dgit:7274
+#, perl-format
+msgid "cannot configure options for %s"
+msgstr ""
+
+#: ../dgit:7294
+#, perl-format
+msgid "unknown quilt-mode `%s'"
+msgstr ""
+
+#: ../dgit:7304
+#, perl-format
+msgid "unknown %s setting `%s'"
+msgstr ""
+
+#: ../dgit:7309
+msgid "dgit: --include-dirty is not supported in split view quilt mode"
+msgstr ""
+
+#: ../dgit:7317
+#, perl-format
+msgid "unknown clean-mode `%s'"
+msgstr ""
+
+#: ../dgit:7338
+msgid "DRY RUN ONLY\n"
+msgstr ""
+
+#: ../dgit:7339
+msgid "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
+msgstr ""
+
+#: ../dgit:7355
+#, perl-format
+msgid "unknown operation %s"
+msgstr ""
+
+#: ../git-debrebase:2069
+msgid "old anchor is recognised due to --anchor, cannot check upstream"
+msgstr ""
+
+#: ../git-debrebase:2980
+msgid "git-debrebase: no cuddling to -i for git-rebase"
+msgstr ""
+
+#: ../git-debrebase:3011
+#, perl-format
+msgid "unknown git-debrebase sub-operation %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:295
+#, perl-format
+msgid "error: %s\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:315
+#, perl-format
+msgid "getcwd failed: %s\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:334
+msgid "terminated, reporting successful completion"
+msgstr ""
+
+#: ../Debian/Dgit.pm:336
+#, perl-format
+msgid "failed with error exit status %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:339
+#, perl-format
+msgid "died due to fatal signal %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:343
+#, perl-format
+msgid "failed with unknown wait status %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:349
+msgid "failed command"
+msgstr ""
+
+#: ../Debian/Dgit.pm:355
+#, perl-format
+msgid "failed to fork/exec: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:357
+#, perl-format
+msgid "subprocess %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:359
+msgid "subprocess produced invalid output"
+msgstr ""
+
+#: ../Debian/Dgit.pm:544
+msgid "git index contains changes (does not match HEAD)"
+msgstr ""
+
+#: ../Debian/Dgit.pm:545
+msgid "working tree is dirty (does not match HEAD)"
+msgstr ""
+
+#: ../Debian/Dgit.pm:616
+msgid "detached HEAD"
+msgstr ""
+
+#: ../Debian/Dgit.pm:617
+msgid "HEAD symref is not to refs/"
+msgstr ""
+
+#: ../Debian/Dgit.pm:633
+#, perl-format
+msgid "parsing of %s failed"
+msgstr ""
+
+#: ../Debian/Dgit.pm:642
+#, 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:656
+#, perl-format
+msgid "open %s (%s): %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:677
+#, perl-format
+msgid "missing field %s in %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:749
+msgid "Dummy commit - do not use\n"
+msgstr ""
+
+#: ../Debian/Dgit.pm:838
+#, perl-format
+msgid "cannot stat %s/.git: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:861
+#, perl-format
+msgid "failed to mkdir playground parent %s: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:869
+#, perl-format
+msgid "failed to mkdir a playground %s: %s"
+msgstr ""
+
+#: ../Debian/Dgit.pm:878
+#, perl-format
+msgid "failed to mkdir the playground %s: %s"
+msgstr ""
diff --git a/po/part.make b/po/part.make
new file mode 100644
index 0000000..551c454
--- /dev/null
+++ b/po/part.make
@@ -0,0 +1,16 @@
+PARTS += ~
+POTS += .~.pot
+
+mo/~.pot: .~.pot .common.pot
+ $S mkdir -p mo
+ $S msgcat $^ $o
+
+mo/~_%.po: %.po mo/~.pot
+ $S cp $*.po $@.tmp
+ $S msgmerge --quiet --previous $@.tmp mo/~.pot -o $@.tmp
+ $S $f
+
+.PRECIOUS: mo/~.pot mo/~_%.po
+
+# (end of part.make)
+# dependencies of .~.pot will follow (from sed)
diff --git a/po/remove-potcdate b/po/remove-potcdate
new file mode 100755
index 0000000..069a1de
--- /dev/null
+++ b/po/remove-potcdate
@@ -0,0 +1,11 @@
+#! /usr/bin/perl -n
+
+BEGIN {
+ $seen_potcdate = 0;
+}
+
+if (not $seen_potcdate and /^"POT-Creation-Date: .*"/) {
+ $seen_potcdate = 1;
+ next;
+}
+print;
diff --git a/po4a/.gitignore b/po4a/.gitignore
new file mode 100644
index 0000000..e640b7e
--- /dev/null
+++ b/po4a/.gitignore
@@ -0,0 +1,5 @@
+translated
+preview.*
+.*.po4a.cfg
+.*.translated
+*.tmp
diff --git a/po4a/Makefile b/po4a/Makefile
new file mode 100644
index 0000000..c759ce8
--- /dev/null
+++ b/po4a/Makefile
@@ -0,0 +1,127 @@
+# dgit document translation machinery
+#
+# Translators: there is no need to look at this file. It contains
+# complicated machinery which you do not need to understand :-).
+# See po/README instead.
+
+# Copyright (C)2018 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# ----- devel docs (translators, pleaee ignore all this) -----
+#
+# We use po4a for everything.
+#
+# po4a is nicely automatic for all the po handling, and the config
+# file makes nice documentation, but it really really likes to dirty
+# the tree. And we want to automatically list the documents and the
+# translation languages which it doesn't make easy.
+#
+# The approach I have chosen is as follows:
+#
+# po4a.cfg
+#
+# This is autogenerated. But also, we invite translators to add
+# their own language to it. The resulting merge
+# conflict/discrepancy will be just an alphabetical ordering
+# discrepancy, since our generation script scans the available po
+# files.
+#
+# Generation is done by a shell script, ./list-documents.
+#
+# make targets: po4a.cfg # many others imply this
+# po4a.cfg.check # fails if out of date
+#
+# *.pot, *.po
+#
+# As far as translators are concerned, generated and maintained by
+# po4a and committed to git. As for the developers, we update this
+# occasionally just by running po4a.
+#
+# make targets: default } mean
+# pofiles } the same
+#
+# Translations for translators:
+#
+# make targets: preview.LANG
+# translated
+#
+# Translated document source-language files (eg, translated pod):
+#
+# Like with normal po things, the tools don't like to generate
+# output without updating (dirtying) the .po files. But with po4a
+# this is really hard to avoid. So we use a linkfarming technique.
+#
+# make targets: translated-only
+#
+# Translated output files (roff format, from pod2man):
+#
+# We have sort of lost the usual make rule information by now
+# about targets and what to build. Only po4a knows which
+# translated files are supposed to exist. So we have a shell
+# script which reuses the top-level Makefile to run pod2man
+# where appropriate, and generate a further even-more-output-ish
+# tree.
+#
+# make targets: install
+
+
+default: pofiles
+
+include ../i18n-common.make
+PO4A ?= po4a
+
+all update: translated
+
+pofiles: po4a.cfg
+ $(PO4A) --no-translations $<
+
+translated: po4a.cfg
+ $(PO4A) $<
+
+po4a.cfg: list-documents
+ ./$< $o
+
+po4a.cfg.check: list-documents
+ ./$< >$@.tmp
+ diff po4a.cfg $@.tmp
+
+t = ../.po4a.translated-only
+p = ../po4a
+
+translated-only: po4a.cfg
+ rm -rf $t && mkdir $t
+ cd $t && ln -s $p/*.po $p/*.pot $p/po4a.cfg .
+ cd $t && $(PO4A) po4a.cfg
+ ! test -d $t/translated || \
+ cp -al --remove-destination $t/translated .
+
+.po4a.%.cfg: po4a.cfg Makefile
+ $S perl -p -e 's{^(\[po4a_langs\]).*}{$$1 $*};' \
+ -e 's{:translated/man}{:.$*.translated/man}' \
+ $< $o
+
+.PRECIOUS: .po4a.%.cfg
+
+preview.%: .po4a.%.cfg
+ $S $(PO4A) $<
+ $S ./install-documents >/dev/null .$*.translated $@
+ @ echo '# runes to preview the various final tranlated manpages:'
+ $S find $@ -type f -printf 'man -l %p\n'
+
+# We can't really use timestamps to drive po4a
+.PHONY: preview.% translated
+
+install: translated-only
+ ./install-documents translated $(DESTDIR)
diff --git a/po4a/README b/po4a/README
new file mode 120000
index 0000000..e8bb469
--- /dev/null
+++ b/po4a/README
@@ -0,0 +1 @@
+../po/README \ No newline at end of file
diff --git a/po4a/dgit-downstream-dsc_7.pot b/po4a/dgit-downstream-dsc_7.pot
new file mode 100644
index 0000000..3bf1687
--- /dev/null
+++ b/po4a/dgit-downstream-dsc_7.pot
@@ -0,0 +1,624 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1184 ../dgit-downstream-dsc.7.pod:150
+#, no-wrap
+msgid "CONFIGURATION"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:1198 ../dgit-downstream-dsc.7.pod:286
+#, no-wrap
+msgid "B<dgit-suite.>I<suite>B<.distro> I<distro>"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:1245 ../dgit-downstream-dsc.7.pod:242
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.upload-host>"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, 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
+#: ../dgit-downstream-dsc.7.pod:3
+msgid "dgit-downstream-dsc - setting up dgit push for a new distro"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:7
+msgid ""
+"This document is aimed at downstreams of Debian. It explains how you can "
+"publish your packages' source code both as traditional Debian source "
+"packages, and as git branches, using B<dgit push>. Your users will be able "
+"to get the source with B<dgit clone>, or with traditional tools such as "
+"B<apt-get source>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:16
+msgid ""
+"Note that often it is unnecessary to publish traditional source packages. "
+"Debian-format source packages can be complex, idiosyncratic and difficult to "
+"work with. You should avoid them if you can. If you do not need to publish "
+"source packages, you can work as a Debian downstream purely using git "
+"branches, (using dgit to get the source from Debian in git form). You can "
+"build binaries directly from git, and push package source code as a git "
+"branch to an ordinary git server. See L<dgit-user(7)>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:28
+msgid ""
+"Not every option is covered here. L<dgit(1)> has a mostly-complete list of "
+"config options, although not always with useful descriptions."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-downstream-dsc.7.pod:32
+msgid "NAMES"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:34
+msgid "You need to choose some names."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:38
+msgid "I<distro> name"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:40
+msgid ""
+"dgit understands each thing it interacts with as a B<distro>. So in dgit "
+"terms, you are setting up a distro."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:43
+msgid ""
+"You need a name for yourself (ie for your distro). The name will appear in "
+"the git tags made by your tools, and in configuration settings. It must be "
+"globally unique across all people and institutions who use dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:49
+msgid ""
+"You could choose your organisation's domain name, or a part of it if you "
+"think that is going to be very unique."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:52
+msgid ""
+"The distro name may contain ascii alphanumerics and B<. + ->, although B<-> "
+"may be confusing and is probably best avoided. Try to avoid uppercase "
+"letters (and underscore): you will be typing this name a lot."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:57
+msgid ""
+"For example, if you were the Free Software Foundation Europe (fsfe.org) you "
+"might call your distro fsfe or fsfe.org. In the rest of this document we "
+"will write I<distro> for your distro name."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:63
+msgid "I<suite> names"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:65
+msgid ""
+"In dgit and Debian archive terminology, a B<suite> is a line of development, "
+"and/or a Debian release. For example, at the time of writing, Debian has "
+"suites like B<sid> aka B<unstable>, B<buster> aka B<testing>, and B<stretch> "
+"aka B<stable>. There are also ancillary suites like B<stretch-security>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:72
+msgid ""
+"If your releases align with Debian's releases, then your suites should "
+"contain the Debian suite names. B<Do not> use just the Debian names. That "
+"will cause confusion. Instead, prepend your organisation's name and a "
+"hyphen. For example, FSFE might end up with suites like fsfe-stretch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:79
+msgid ""
+"Suite names end up in git ref and branch names, and on dgit command lines. "
+"Suite names can contain alphanumerics and C<->. Other characters may work "
+"but are not recommended."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-downstream-dsc.7.pod:86
+msgid "SERVICES"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:88
+msgid "You will need to run two parallel services:"
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:92
+msgid "git server"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:94
+msgid "This will hold the git branches accessed by dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:96
+msgid ""
+"Everyone who will use dgit push needs to be able to update B<refs/dgit/"
+">I<suite> (note, not B<refs/heads/dgit/>I<suite>) on that server, and to "
+"make tags I<distro>B</>I<version> and B<archive/>I<distro>B</>I<version>. "
+"Normally this would be done over ssh."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:103
+msgid ""
+"The server may host other branches and tags too. So this might be your "
+"ordinary git server, or an instance of a git hosting system."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:107
+msgid ""
+"Everyone who obtains one of your source packages, or who will run B<dgit "
+"clone> and B<dgit fetch>, needs to have at least read access to the git "
+"server. Ideally everything would be published via the git smart https "
+"protocol."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:113
+msgid ""
+"The git server name, and public git url structure, should be chosen so they "
+"will not need to change in the future. Best is to give the git server a DNS "
+"name of its own."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:117
+msgid ""
+"Debian's dgit git server has special access control rules, implemented in "
+"B<dgit-repos-server> and B<dgit-repos-policy-debian> in the package B<dgit-"
+"infrastructure>. but in most installations this is not needed. If there is "
+"no or little distinction between (i) developers who are entitled to upload "
+"(push) and (ii) repository administrators, then a it is sufficient to "
+"provide a git server with a unix account for each user who will pushing, "
+"perhaps using ssh restricted commands."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:128
+msgid "Debian-format archive (repository)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:130
+msgid ""
+"This holds the source packages. You will probably use the same archive to "
+"host your binaries, and point your B<apt> at it."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:134
+msgid "dgit uses the term B<archive> for this."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:136
+msgid ""
+"There are a variety of tools for creating and managing a Debian-format "
+"archive. In this document we will assume you are using B<reprepro>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:140
+msgid ""
+"Setting up reprepro is not covered in this tutorial. Instead, we assume you "
+"already have reprepro working."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:143
+msgid ""
+"You should also write appropriate dput configuration, since dgit uses dput "
+"to upload packages to the archive. This will involve choosing a dput host "
+"name. That's probably your distro name, I<distro>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:152
+msgid ""
+"When you have all of the above set up, you are ready to explain to dgit how "
+"to access your systems."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:155
+msgid ""
+"dgit is configured via git's configuration system, so this is done with git "
+"configuration. See L<git-config(1)>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:159
+msgid ""
+"Below, each heading is one or more git config keys. B<bold> is literal text "
+"and I<italics> is things that vary. In the descriptions of the effects of "
+"config settings, we refer to the config values C<like this>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:167
+msgid "B<dgit-distro.>I<distro>B<.git-url>, B<.git-url-suffix>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:169
+msgid ""
+"Specify the publicly accessible git URLs for your dgit git server. The urls "
+"generated are C<git-url>B</>I<package>C<git-url-suffix>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:173
+msgid ""
+"The url should be stable, and publicly accessible, because its name is "
+"published in .dsc files. (Note that if you make modified versions of "
+"packages from Debian, the copyleft licences used for Free Software often "
+"require you to permit your users, employees, and downstreams to further "
+"distribute your modified source code.)"
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:181
+msgid "B<dgit-distro.>I<distro>B</push.git-host>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:183
+msgid "The domain name of your git server's ssh interface."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:185
+msgid ""
+"B<dgit-distro.>I<distro>B</push.git-user-force> B<dgit-distro.>I<distro>B</"
+"push.username>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:187
+msgid ""
+"Some git hosting systems expect everyone to connect over ssh as the same "
+"user, often B<git>. If this is the case, set C<git-user-force> to that user."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:191
+msgid ""
+"If you have a normal git over ssh arrangement, where people ssh as "
+"themselves, leave C<git-user-force> unset. If a user wishes to override the "
+"username (for example, if their local username is not the same as on the "
+"server) they can set C<username>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:198
+msgid "B<dgit-distro.>I<distro>B</push.git-url>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:200
+msgid ""
+"Set this to the empty string. This will arrange that push accesses to the "
+"ssh server will use C</push.git-host>, etc."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:204
+msgid "B<dgit-distro.>I<distro>B</push.git-proto> B<git+ssh://>"
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:206
+msgid "C<dgit-distro.>I<distro>B</push.git-path>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:208
+msgid ""
+"The path to your repositories. dgit push will try to push to C<git-"
+"proto>[C<git-user-force>|C<username>B<@>]C<git-path>B</>I<package>B<.git>"
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:212
+msgid "B<dgit-distro.>I<distro>B<.git-check>, B<.git-check-suffix>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:214
+msgid ""
+"dgit clone needs to be able to tell whether there is yet a git repository "
+"for a particular package."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:217
+msgid ""
+"If you always have a git repository for every package in your archive, "
+"perhaps because you never use dput/dupload, and always dgit push, Set C<git-"
+"check> to B<true>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:221
+msgid ""
+"Otherwise, set C<git-check> to a url prefix - ideally, https. dgit clone "
+"will try to fetch C<git-check>B</>I<package>C<git-check-suffix> and expect "
+"to get either some successful fetch (it doesn't matter what) or a file not "
+"found error (http 404 status code). Other outcomes are fatal errors."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:228
+msgid ""
+"If your git server runs cgit, then you can set C<git-check> to the same as "
+"C<git-url>, and C<git-check-suffix> to B</info/refs>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:232
+msgid "B<dgit-distro.>I<distro>B</push.git-check>, B</push.git-create>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:234
+msgid "dgit push also needs to be able to check whether the repo exists."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:236
+msgid ""
+"You can set both of these to B<ssh-cmd>, which will use an ssh shell command "
+"to test repository existence. Or leave them unset, and dgit push will use "
+"the readonly details. If repositories are created automatically on push, "
+"somehow, you can set C<git-create> to B<true>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:244
+msgid "What I<host> value to pass to dput, to upload."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:246
+msgid ""
+"This is a nickname, not the real host name. You need to provide everyone "
+"who will push with an appropriate dput configuration. See L<dput.cf(5)>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:251
+msgid "A good nickname for your upload host is your distro name I<distro>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:253
+msgid "B<dgit-distro.>I<distro>B<.mirror>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:255
+msgid ""
+"Set this to the url of your source package archive. This is the same string "
+"as appears in the 2nd field of each B<sources.list> entry."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:259
+msgid "B<dgit-distro.>I<distro>B<.archive-query>, B<.archive-query-url>"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:261
+msgid ""
+"If you have a smallish distro, set C<archive-query> to B<aptget:> (with a "
+"colon)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:264
+msgid ""
+"If your distro is large (eg, if it contains a substantial fraction of "
+"Debian) then this will not be very efficient: with this setting, dgit often "
+"needs to download and update Sources files."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:270
+msgid ""
+"For large distros, it is better to implement the Debian archive ftpmaster "
+"API. See L<https://api.ftp-master.debian.org/>, and set C<archive-query> to "
+"B<ftpmasterapi:> (with a colon) and C<archive-query-url> to your API base "
+"URL. dgit uses these queries: B<suites>, B<dsc_in_suite/>I<isuite>B</"
+">I<package> and B<file_in_archive/>I<pat> (so you need not implement "
+"anything else)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:281
+msgid ""
+"Alternatively, if your system supports the rmadison protocol, you can set "
+"C<archive-query> to B<madison:>[I<madison-distro>]. dgit will invoke "
+"B<rmadison> -uI<madison-distro>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:288
+msgid ""
+"Set this for every one of your suites. You will have to update this when "
+"new suites are created. If you forget, your users can explicitly specify B<-"
+"d> I<distro> to dgit."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-downstream-dsc.7.pod:295
+msgid "TEMPLATE GIT REPOSITORY"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:297
+msgid ""
+"When dgit push is used for I<package> for the first time, it must create a "
+"git repository on the git server."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:300
+msgid ""
+"If C<git-create> is set to B<ssh-cmd>, dgit will use the user's shell access "
+"to the server to B<cp -a _template.git> I<package>B<.git>. So you should "
+"create B<_template.git> with suitable contents."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:305
+msgid ""
+"Note that the ssh rune invoked by dgit does not do any locking. So if two "
+"people dgit push the same package at the same time, there will be lossage. "
+"Either don't do that, or set up B<dgit-repos-server>."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-downstream-dsc.7.pod:310
+msgid "SSH COMMANDS"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:312
+msgid ""
+"When a user who can push runs dgit, dgit uses ssh to access the git server."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:315
+msgid ""
+"To make ssh restricted command easier, and for the benefit of dgit-repos-"
+"server, dgit's ssh commands each start with a parseable commentish rune."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:320
+msgid "The ssh commands used by dgit are these:"
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:324
+msgid "B<: dgit> I<distro> B<git-check> I<package> B<;>..."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:326
+msgid ""
+"Test whether I<package> has a git repo on the server already. Should print "
+"B<0> or B<1> and a newline, and exit status zero in either case. The rest "
+"of the command, after B<;>, is a shell implementation of this test. Used "
+"when C<git-check> is set to B<ssh-cmd>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:333
+msgid "B<: dgit> I<distro> B<git-create> I<package> B<;>..."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:335
+msgid ""
+"Create the git repository for I<package> on the server. See L</TEMPLATE GIT "
+"REPOSITORY>, above. The rest of the command is an appropriate invocation of "
+"cd and cp. Used when C<git-create> is set to B<ssh-cmd>."
+msgstr ""
+
+#. type: =item
+#: ../dgit-downstream-dsc.7.pod:340
+msgid "B<git-receive-pack>..., B<git-upload-pack>..."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:342
+msgid ""
+"dgit invokes git to access the repository; git then runs these commands. "
+"Note that dgit push will first do a git fetch over ssh, so you must provide "
+"upload-pack as well as receive-pack."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:349
+msgid "(There are also other ssh commands which are historical or obscure.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-downstream-dsc.7.pod:354
+msgid "dgit(1)"
+msgstr ""
diff --git a/po4a/dgit-maint-debrebase_7.pot b/po4a/dgit-maint-debrebase_7.pot
new file mode 100644
index 0000000..5161500
--- /dev/null
+++ b/po4a/dgit-maint-debrebase_7.pot
@@ -0,0 +1,1287 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, 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
+#: ../dgit-maint-native.7.pod:37 ../dgit-maint-gbp.7.pod:16
+#: ../dgit-maint-debrebase.7.pod:38
+msgid ""
+"Benefit from dgit's safety catches. In particular, ensure that your upload "
+"always matches exactly your git HEAD."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:47 ../dgit-maint-debrebase.7.pod:61
+msgid "INITIAL DEBIANISATION"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:49 ../dgit-maint-debrebase.7.pod:63
+msgid ""
+"This section explains how to start using this workflow with a new package. "
+"It should be skipped when converting an existing package to this workflow."
+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
+msgid "When upstream tags releases in git"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:55 ../dgit-maint-debrebase.7.pod:69
+msgid ""
+"Suppose that the latest stable upstream release is 1.2.2, and this has been "
+"tagged '1.2.2' by upstream."
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:60 ../dgit-maint-debrebase.7.pod:74
+#, no-wrap
+msgid ""
+" % git clone -oupstream https://some.upstream/foo.git\n"
+" % cd foo\n"
+" % git verify-tag 1.2.2\n"
+" % git reset --hard 1.2.2\n"
+" % git branch --unset-upstream\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:76 ../dgit-maint-debrebase.7.pod:90
+#, no-wrap
+msgid ""
+" % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
+" % git push --follow-tags -u origin master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:93 ../dgit-maint-debrebase.7.pod:102
+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
+#, no-wrap
+msgid ""
+" % git deborig\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:101 ../dgit-maint-debrebase.7.pod:110
+msgid "See git-deborig(1) if this fails."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:103 ../dgit-maint-debrebase.7.pod:112
+msgid ""
+"This tarball is ephemeral and easily regenerated, so we don't commit it "
+"anywhere (e.g. with tools like pristine-tar(1))."
+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
+msgid "When upstream releases only tarballs"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:130 ../dgit-maint-debrebase.7.pod:145
+#, no-wrap
+msgid ""
+" % mkdir foo\n"
+" % cd foo\n"
+" % git init\n"
+"\n"
+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
+msgid ""
+" [DEFAULT]\n"
+" upstream-branch = upstream\n"
+" debian-branch = master\n"
+" upstream-tag = %(version)s\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:160
+#, no-wrap
+msgid ""
+" sign-tags = True\n"
+" pristine-tar = False\n"
+" pristine-tar-commit = False\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"
+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:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:158 ../dgit-maint-debrebase.7.pod:173
+#, 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"
+"\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
+#, no-wrap
+msgid ""
+" % gbp import-orig --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
+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
+#, no-wrap
+msgid ""
+" % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
+" % git push --follow-tags -u origin master upstream\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:188 ../dgit-maint-debrebase.7.pod:207
+msgid "CONVERTING AN EXISTING PACKAGE"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:190 ../dgit-maint-debrebase.7.pod:209
+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
+#, no-wrap
+msgid ""
+" % git remote add -f upstream https://some.upstream/foo.git\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:242 ../dgit-maint-debrebase.7.pod:289
+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:436
+msgid "BUILDING AND UPLOADING"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-merge.7.pod:333 ../dgit-maint-debrebase.7.pod:319
+msgid "Obtaining the release"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:325
+#, no-wrap
+msgid ""
+" % git remote update\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:345 ../dgit-maint-debrebase.7.pod:331
+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 "
+"pushed this to B<salsa.debian.org>. You will need to clone or fetch from "
+"there, instead of relying on B<dgit clone>/B<dgit fetch> alone."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:350 ../dgit-maint-debrebase.7.pod:336
+msgid "Then, either"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:354 ../dgit-maint-debrebase.7.pod:340
+#, no-wrap
+msgid ""
+" % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:358 ../dgit-maint-debrebase.7.pod:344
+msgid "or if you have a working watch file"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:362 ../dgit-maint-debrebase.7.pod:348
+#, no-wrap
+msgid ""
+" % gbp import-orig --no-merge --uscan\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:396 ../dgit-maint-debrebase.7.pod:377
+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 "
+"tarball:"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:406 ../dgit-maint-debrebase.7.pod:461
+msgid "HANDLING DFSG-NON-FREE MATERIAL"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:435 ../dgit-maint-debrebase.7.pod:521
+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>. "
+"See uscan(1). Alternatively, see the I<--filter> option detailed in gbp-"
+"import-orig(1)."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:480 ../dgit-maint-gbp.7.pod:130
+#: ../dgit-maint-debrebase.7.pod:526
+msgid "INCORPORATING NMUS"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:495 ../dgit-maint-gbp.7.pod:140
+#: ../dgit-maint-debrebase.7.pod:726
+msgid "AUTHOR"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:497 ../dgit-maint-debrebase.7.pod:728
+msgid ""
+"This tutorial was written and is maintained by Sean Whitton "
+"<spwhitton@spwhitton.name>. It contains contributions from other dgit "
+"contributors too - see the dgit copyright file."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-gbp.7.pod:32 ../dgit-maint-debrebase.7.pod:293
+msgid "GIT CONFIGURATION"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:3
+msgid ""
+"dgit - tutorial for package maintainers, using a workflow centered around "
+"git-debrebase(1)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:7
+msgid ""
+"This document describes elements of a workflow for maintaining a non-native "
+"Debian package using B<dgit>. We maintain the Debian delta as a series of "
+"git commits on our master branch. We use git-debrebase(1) to shuffle our "
+"branch such that this series of git commits appears at the end of the "
+"branch. All the public git history is fast-forwarding, i.e., we do not "
+"rewrite and force-push."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:14
+msgid "Some advantages of this workflow:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:20
+msgid ""
+"Manipulate the delta queue using the full power of git-rebase(1), instead of "
+"relying on quilt(1), and without having to switch back and forth between "
+"patches-applied and patches-unapplied branches when committing changes and "
+"trying to build, as with gbp-pq(1)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:27
+msgid ""
+"If you are using 3.0 (quilt), provide your delta queue as a properly "
+"separated series of quilt patches in the source package that you upload to "
+"the archive (unlike with dgit-maint-merge(7))."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:33
+msgid ""
+"Avoid the git tree being dirtied by the application or unapplication of "
+"patches, as they are always applied."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:43
+msgid ""
+"Provide your full git history in a standard format on B<dgit-repos>, where "
+"it can benefit downstream dgit users, such as people using dgit to do an NMU "
+"(see dgit-nmu-simple(7) and dgit-user(7))."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:49
+msgid ""
+"Minimise the amount you need to know about 3.0 (quilt) in order to maintain "
+"Debian source packages which use that format."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:54
+msgid ""
+"This workflow is appropriate for packages where the Debian delta contains "
+"multiple pieces which interact, or which you don't expect to be able to "
+"upstream soon. For packages with simple and/or short-lived Debian deltas, "
+"use of git-debrebase(1) introduces unneeded complexity. For such packages, "
+"consider the workflow described in dgit-maint-merge(7)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:82
+msgid ""
+"The final command detaches your master branch from the upstream remote, so "
+"that git doesn't try to push anything there, or merge unreleased upstream "
+"commits. To maintain a copy of your packaging branch on B<salsa.debian.org> "
+"in addition to B<dgit-repos>, you can do something like this:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:95
+msgid ""
+"Now go ahead and Debianise your package. Make commits on the master branch, "
+"adding things in the I<debian/> directory, or patching the upstream source. "
+"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."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-maint-debrebase.7.pod:115
+msgid "Comparing upstream's tarball releases"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:119
+msgid ""
+"The above assumes that you know how to build the package from git and that "
+"doing so is straightforward."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:122
+msgid ""
+"If, as a user of the upstream source, you usually build from upstream "
+"tarball releases, rather than upstream git tags, you will sometimes find "
+"that the git tree doesn't contain everything that is in the tarball."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:127
+msgid ""
+"Additional build steps may be needed. For example, you may need your "
+"I<debian/rules> to run autotools."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:130
+msgid ""
+"You can compare the upstream tarball release, and upstream git tag, within "
+"git, by importing the tarball into git as described in the next section, "
+"using a different value for 'upstream-tag', and then using git-diff(1) to "
+"compare the imported tarball to the release tag."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:139
+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: textblock
+#: ../dgit-maint-debrebase.7.pod:200
+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 "
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:212
+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 "
+"have it locally, you'll need to clone it, and obtain the corresponding orig."
+"tar from the archive:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:219
+#, no-wrap
+msgid ""
+" % git clone salsa.debian.org:Debian/foo\n"
+" % cd foo\n"
+" % dgit setup-new-tree\n"
+" % origtargz\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:226
+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
+#, no-wrap
+msgid ""
+" % dgit clone foo\n"
+" % cd foo\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:236
+msgid "Then we make new upstream tags available:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:244
+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 "
+"should use depends on some facts about your repository:"
+msgstr ""
+
+#. type: =item
+#: ../dgit-maint-debrebase.7.pod:250
+msgid "(A) There is no delta queue."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:252
+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
+#, no-wrap
+msgid ""
+" % git debrebase convert-from-gbp\n"
+"\n"
+msgstr ""
+
+#. type: =item
+#: ../dgit-maint-debrebase.7.pod:260
+msgid "(B) There is a delta queue, and patches are unapplied."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:262
+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. "
+"Use"
+msgstr ""
+
+#. type: =item
+#: ../dgit-maint-debrebase.7.pod:272
+msgid "(C) There is a delta queue, and patches are applied."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:274
+msgid "Use"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:278
+#, no-wrap
+msgid ""
+" % git debrebase convert-from-dgit-view\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:284
+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-"
+"buildpackage -S>, and then unpacked the resultant source package."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:295
+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 "
+"should configure git such that B<git pull> does not try to merge:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:302
+#, no-wrap
+msgid ""
+" % git config --local pull.rebase true\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:306
+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:309
+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 "
+"the B<branch.autoSetupRebase> and B<branch.E<lt>nameE<gt>.rebase> settings "
+"in git-config(5)."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-debrebase.7.pod:314
+msgid "IMPORTING NEW UPSTREAM RELEASES"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:316
+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:352
+msgid "Importing the release"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:356
+#, no-wrap
+msgid ""
+" % git debrebase new-upstream 1.2.3\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:360
+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 "
+"new upstream source."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:364
+msgid ""
+"If all went well, you can now review the merge of the new upstream release:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:369
+#, no-wrap
+msgid ""
+" git diff debian/1.2.2-1..HEAD -- . ':!debian'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:373
+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 to may need accounting "
+"for in your copyright file."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-debrebase.7.pod:387
+msgid "EDITING THE DEBIAN PACKAGING"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:389
+msgid "Just make commits on master that change the contents of I<debian/>."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-debrebase.7.pod:391
+msgid "EDITING THE DELTA QUEUE"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:393
+msgid "Adding new patches"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:395
+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-"
+"revert(1), git-am(1) and git-cherry-pick(1)."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:399
+msgid "Editing patches: starting a debrebase"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:401
+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:406 ../dgit-maint-debrebase.7.pod:689
+#, no-wrap
+msgid ""
+" % git debrebase -i\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:410
+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:413
+msgid "Editing patches: finishing a debrebase"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:415
+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 "
+"branch anywhere. If you are ready to upload, B<dgit push> or B<dgit push-"
+"source> will take care of fixing this up for you."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:421
+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:426
+#, no-wrap
+msgid ""
+" % git debrebase conclude\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:430
+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 "
+"the editing of the delta queue that you think will be needed for this "
+"editing session in a single debrebase, so that there is a single debrebase "
+"stitch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:438
+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 "
+"cowbuilder>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:442
+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:445
+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 "
+"appears right at the tip of the branch you will push:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:451
+#, no-wrap
+msgid ""
+" % git debrebase\n"
+" % dgit push-source\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:456
+msgid "Note that this will introduce a new pseudomerge."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:458
+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:463
+msgid "Illegal material"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:465
+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 "
+"illegal) cannot be handled this way."
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:469
+#, no-wrap
+msgid ""
+"If you encounter possibly-legally-dangerous material in the upstream\n"
+"source code you should seek advice. It is often best not to make a\n"
+"fuss on a public mailing list (at least, not at first). Instead,\n"
+"email your archive administrators. For Debian that is\n"
+" To: dgit-owner@debian.org, ftpmaster@ftp-master.debian.org\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:475
+msgid "DFSG-non-free: When upstream tags releases in git"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:477
+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 "
+"tags per \"Importing the release\", above."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:481
+msgid "For the first upstream release that requires DFSG filtering:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:485
+#, no-wrap
+msgid ""
+" % git checkout -b upstream-dfsg 1.2.3\n"
+" % git rm evil.bin\n"
+" % git commit -m \"upstream version 1.2.3 DFSG-cleaned\"\n"
+" % git tag -s 1.2.3+dfsg\n"
+" % git checkout master\n"
+" % # proceed with \"Importing the release\" on 1.2.3+dfsg tag\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:494
+msgid "And for subsequent releases (whether or not they require filtering):"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:498
+#, no-wrap
+msgid ""
+" % git checkout upstream-dfsg\n"
+" % git merge 1.2.4\n"
+" % git rm further-evil.bin # if needed\n"
+" % git commit -m \"upstream version 1.2.4 DFSG-cleaned\" # if needed\n"
+" % git tag -s 1.2.4+dfsg\n"
+" % git checkout master\n"
+" % # proceed with \"Importing the release\" on 1.2.4+dfsg tag\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:508
+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 "
+"somewhere. Assuming that you have already set up an origin remote per the "
+"above,"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:515
+#, no-wrap
+msgid ""
+" % git push --follow-tags -u origin master upstream-dfsg\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:519
+msgid "DFSG-non-free: When upstream releases only tarballs"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:528
+msgid "In the simplest case,"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:532
+#, no-wrap
+msgid ""
+" % dgit fetch\n"
+" % git merge --ff-only dgit/dgit/sid\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:537
+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 "
+"two simplest."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:541
+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 "
+"overwritten by git-debrebase(1)."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:545
+msgid "Rebasing your work onto the NMU"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:549
+#, no-wrap
+msgid ""
+" % git rebase dgit/dgit/sid\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:553
+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:556
+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 "
+"from the delta queue."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:560
+msgid "Manually applying the debdiff"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:562
+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 "
+"B<dgit push> will require I<--overwrite>."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-debrebase.7.pod:567
+msgid "HINTS AND TIPS"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:569
+msgid "Minimising pseudomerges"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:571
+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:574
+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."
+"debian.org>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:578
+msgid ""
+"It is possible, though much less convenient, to reduce the number of "
+"pseudomerges yet further. We debrebase only (i) when importing a new "
+"release, and (ii) right before uploading. Instead of editing the existing "
+"delta queue, you append fixup commits (and reversions of commits) that alter "
+"the upstream source to the required state. You can push and pull to and "
+"from B<salsa.debian.org> during this. Just before uploading, you debrebase, "
+"once, to tidy everything up."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:586
+msgid "The debian/patches directory"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:588
+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 "
+"trouble, or be ignored and overwritten by git-debrebase(1)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:593
+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 "
+"information in that directory. When preparing patches to forward upstream, "
+"you should use git-format-patch(1) on git commits, rather than sending files "
+"from I<debian/patches>."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:599
+msgid "Upstream branches"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:601
+msgid "In this workflow, we specify upstream tags rather than any branches."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:603
+msgid ""
+"Except when (i) upstream releases only tarballs, (ii) we require DFSG "
+"filtering, or (iii) you also happen to be involved in upstream development, "
+"we do not maintain any local branch corresponding to upstream, except "
+"temporary branches used to prepare patches for forwarding, and the like."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:609
+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 "
+"Debian package on a properly identified upstream version, rather than some "
+"arbitrary commit on some branch. Tags are more useful for this."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:615
+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:618
+msgid "The first ever dgit push"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:620
+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 "
+"introducing a new origin commit into your git 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.)"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:626
+msgid "Inspecting the history"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:628
+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 "
+"for other tools like tig(1), git-log(1), magit, etc."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:632
+msgid "History of package in Debian, disregarding history from upstream:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:636
+#, no-wrap
+msgid ""
+" % gitk --first-parent\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:638
+msgid "In a laundered branch, the delta queue is at the top."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:642
+msgid "History of the packaging, excluding the delta queue:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:644
+#, no-wrap
+msgid ""
+" % gitk :/debian :!/debian/patches\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:646
+msgid "Just the delta queue (i.e. Debian's changes to upstream):"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:648
+#, no-wrap
+msgid ""
+" % gitk --first-parent -- :/ :!/debian\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:650
+msgid "Full history including old versions of the delta queue:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:654
+#, no-wrap
+msgid ""
+" % gitk --date-order\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:656
+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. --"
+"date-order makes gitk show the delta queues in the right order."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:663
+msgid "Complete diff since the last upload:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:667
+#, no-wrap
+msgid ""
+" % git diff dgit/dgit/sid..HEAD -- :/ :!/debian/patches\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:669
+msgid "This includes changes to upstream files."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:673
+msgid "Interdiff of delta queue since last upload, if you really want it:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:675
+#, no-wrap
+msgid ""
+" % git debrebase make-patches\n"
+" % git diff dgit/dgit/sid..HEAD -- debian/patches\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:678
+msgid "And of course there is:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:680
+#, no-wrap
+msgid ""
+" % git debrebase status\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-debrebase.7.pod:682
+msgid "Alternative ways to start a debrebase"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:684
+msgid ""
+"Above we started an interactive debrebase by invoking git-debrebase(1) like "
+"this:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:693
+msgid "It is also possible to perform a non-interactive rebase, like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:697
+#, no-wrap
+msgid ""
+" % git debrebase -- [git-rebase options...]\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:702
+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 "
+"git-rebase(1) directly. For example,"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-debrebase.7.pod:708
+#, no-wrap
+msgid ""
+" % git debrebase\n"
+" % git rebase -i HEAD~5 # there are 4 Debian patches\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:713
+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 "
+"without a base argument will often start the rebase too early, and should be "
+"avoided. Run git-debrebase instead. See also \"ILLEGAL OPERATIONS\" in git-"
+"debrebase(5)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-debrebase.7.pod:724
+msgid "dgit(1), dgit(7), git-debrebase(1), git-debrebase(5)"
+msgstr ""
diff --git a/po4a/dgit-maint-gbp_7.pot b/po4a/dgit-maint-gbp_7.pot
new file mode 100644
index 0000000..d1daa27
--- /dev/null
+++ b/po4a/dgit-maint-gbp_7.pot
@@ -0,0 +1,295 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, 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: =head1
+#: ../dgit-user.7.pod:222 ../dgit-maint-gbp.7.pod:56
+msgid "BUILDING"
+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
+msgid "dgit(1), dgit(7)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:37 ../dgit-maint-gbp.7.pod:16
+#: ../dgit-maint-debrebase.7.pod:38
+msgid ""
+"Benefit from dgit's safety catches. In particular, ensure that your upload "
+"always matches exactly your git HEAD."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:480 ../dgit-maint-gbp.7.pod:130
+#: ../dgit-maint-debrebase.7.pod:526
+msgid "INCORPORATING NMUS"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:495 ../dgit-maint-gbp.7.pod:140
+#: ../dgit-maint-debrebase.7.pod:726
+msgid "AUTHOR"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:3
+msgid ""
+"dgit - tutorial for package maintainers already using git-buildpackage(1)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:7
+msgid ""
+"This document explains how B<dgit> can be incorporated into a git-"
+"buildpackage(1) package-maintenance workflow. This should be read jointly "
+"with git-buildpackage(1)'s documentation. Some reasons why you might want "
+"to incorporate B<dgit> into your existing workflow:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:21
+msgid ""
+"Provide a better, more detailed git history to downstream dgit users, such "
+"as people using dgit to do an NMU (see dgit-nmu-simple(7) and dgit-user(7))."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:27
+msgid ""
+"Note that we assume a patches-unapplied repository: the upstream source "
+"committed to the git repository is unpatched. git-buildpackage(1) can work "
+"with patched-applied repositories, but is normally used with patches-"
+"unapplied."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-gbp.7.pod:32 ../dgit-maint-debrebase.7.pod:293
+msgid "GIT CONFIGURATION"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:34
+msgid ""
+"If you have configured an I<export-dir> in your gbp.conf, you should tell "
+"dgit about it:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:39
+#, no-wrap
+msgid ""
+" % git config --global dgit.default.build-products-dir /home/spwhitton/build-area\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:43
+msgid "If you run"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:47
+#, no-wrap
+msgid ""
+" % git config dgit.default.quilt-mode gbp\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:51
+msgid "in your repository, you can omit I<--gbp> wherever it occurs below."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:53
+msgid ""
+"Note that this does require that you always work from your gbp master "
+"branch, never the dgit patches-applied branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:58
+msgid "You can perform test builds like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:62
+#, no-wrap
+msgid ""
+" % dgit [--include-dirty] gbp-build [OPTIONS]\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:66
+msgid ""
+"where I<--include-dirty> is needed for testing uncommitted changes, and "
+"I<OPTIONS> are any further options to be passed on to gbp-buildpackage(1)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:70
+msgid ""
+"If you are doing a source-only upload, you do not need to prepare a "
+"I<_source.changes>, as B<dgit push-source> will take of that on your behalf."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:74
+msgid ""
+"If you need to include binaries with your upload, you will probably want to "
+"use sbuild(1), pbuilder(1) or cowbuilder(1):"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:79
+#, no-wrap
+msgid ""
+" % dgit --rm-old-changes --gbp sbuild\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:83
+msgid "replacing 'sbuild' with 'pbuilder' or 'cowbuilder' if appropriate."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:85
+msgid ""
+"We use I<--rm-old-changes> to ensure that there is exactly one changes file "
+"corresponding to this package, so we can be confident we're uploading what "
+"we intend (though B<dgit push> will do some safety checks)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:90
+msgid ""
+"Note that none of the commands in this section are required to upload with "
+"dgit. You can invoke gbp-buildpackage(1), pbuilder(1), cowbuilder(1) and "
+"sbuild(1) directly. However, the defaults for these tools may leave you "
+"with something that dgit will refuse to upload because it doesn't match your "
+"git HEAD."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:96
+msgid "As a general rule, leave all signing and tagging to dgit."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-gbp.7.pod:98
+msgid "UPLOADING"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:100
+msgid ""
+"Don't use I<--git-tag>: B<dgit push> will do this for you. To do a source-"
+"only upload:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:105
+#, no-wrap
+msgid ""
+" % dgit --gbp push-source\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:109
+msgid "or if you need to include binaries,"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:113 ../dgit-sponsorship.7.pod:173
+#, no-wrap
+msgid ""
+" % dgit --gbp push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:117
+msgid ""
+"This will push your git history to the dgit-repos, but you probably want to "
+"follow it up with a push to salsa."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:120
+msgid ""
+"You will need to pass I<--overwrite> if the previous upload was not "
+"performed with dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:123
+msgid ""
+"If this is first ever dgit push of the package, consider passing I<--"
+"deliberately-not-fast-forward> instead of I<--overwrite>. This avoids "
+"introducing a new origin commit into the dgit view of your git 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.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:132
+msgid ""
+"B<dgit pull> can't yet incorporate NMUs into patches-unapplied gbp "
+"branches. You can just apply the NMU diff the traditional way. The next "
+"upload will require I<--overwrite>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-gbp.7.pod:142
+msgid ""
+"This tutorial was written and is maintained by Sean Whitton "
+"<spwhitton@spwhitton.name>."
+msgstr ""
diff --git a/po4a/dgit-maint-merge_7.pot b/po4a/dgit-maint-merge_7.pot
new file mode 100644
index 0000000..1dbb682
--- /dev/null
+++ b/po4a/dgit-maint-merge_7.pot
@@ -0,0 +1,860 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:286 ../dgit-maint-merge.7.pod:446
+#, no-wrap
+msgid "1."
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:287 ../dgit-maint-merge.7.pod:450
+#, no-wrap
+msgid "2."
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:288 ../dgit-maint-merge.7.pod:455
+#, no-wrap
+msgid "3."
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, 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
+#: ../dgit-user.7.pod:449 ../dgit-maint-native.7.pod:128
+#: ../dgit-maint-merge.7.pod:493 ../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
+#, no-wrap
+msgid ""
+" % dgit pull\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:3
+msgid ""
+"dgit - tutorial for package maintainers, using a workflow centered around "
+"git-merge(1)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:7
+msgid ""
+"This document describes elements of a workflow for maintaining a non-native "
+"Debian package using B<dgit>. The workflow makes the following opinionated "
+"assumptions:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:15
+msgid ""
+"Git histories should be the non-linear histories produced by git-merge(1), "
+"preserving all information about divergent development that was later "
+"brought together."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:21
+msgid ""
+"Maintaining convenient and powerful git workflows takes priority over the "
+"usefulness of the raw Debian source package. The Debian archive is thought "
+"of as an output format."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:25
+msgid ""
+"For example, we don't spend time curating a series of quilt patches. "
+"However, in straightforward cases, the information such a series would "
+"contain is readily available from B<dgit-repos>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:33
+msgid ""
+"It is more important to have the Debian package's git history be a "
+"descendent of upstream's git history than to use exactly the orig.tar that "
+"upstream makes available for download."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:39
+msgid ""
+"This workflow is less suitable for some packages. When the Debian delta "
+"contains multiple pieces which interact, or which you aren't going to be "
+"able to upstream soon, it might be preferable to maintain the delta as a "
+"rebasing patch series. For such a workflow see for example dgit-maint-"
+"debrebase(7) and dgit-maint-gbp(7)."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:47 ../dgit-maint-debrebase.7.pod:61
+msgid "INITIAL DEBIANISATION"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:49 ../dgit-maint-debrebase.7.pod:63
+msgid ""
+"This section explains how to start using this workflow with a new package. "
+"It should be skipped when converting an existing package to this workflow."
+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
+msgid "When upstream tags releases in git"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:55 ../dgit-maint-debrebase.7.pod:69
+msgid ""
+"Suppose that the latest stable upstream release is 1.2.2, and this has been "
+"tagged '1.2.2' by upstream."
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:60 ../dgit-maint-debrebase.7.pod:74
+#, no-wrap
+msgid ""
+" % git clone -oupstream https://some.upstream/foo.git\n"
+" % cd foo\n"
+" % git verify-tag 1.2.2\n"
+" % git reset --hard 1.2.2\n"
+" % git branch --unset-upstream\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:68
+msgid ""
+"The final command detaches your master branch from the upstream remote, so "
+"that git doesn't try to push anything there, or merge unreleased upstream "
+"commits. If you want to maintain a copy of your packaging branch on B<salsa."
+"debian.org> in addition to B<dgit-repos>, you can do something like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:76 ../dgit-maint-debrebase.7.pod:90
+#, no-wrap
+msgid ""
+" % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
+" % git push --follow-tags -u origin master\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:81
+msgid ""
+"Now go ahead and Debianise your package. Just make commits on the master "
+"branch, adding things in the I<debian/> directory. If you need to patch the "
+"upstream source, just make commits that change files outside of the I<debian/"
+"> directory. It is best to separate commits that touch I<debian/> from "
+"commits that touch upstream source, so that the latter can be cherry-picked "
+"by upstream."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:88
+msgid ""
+"Note that there is no need to maintain a separate 'upstream' branch, unless "
+"you also happen to be involved in upstream development. We work with "
+"upstream tags rather than any branches, except when forwarding patches (see "
+"FORWARDING PATCHES UPSTREAM, below)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:93 ../dgit-maint-debrebase.7.pod:102
+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
+#, no-wrap
+msgid ""
+" % git deborig\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:101 ../dgit-maint-debrebase.7.pod:110
+msgid "See git-deborig(1) if this fails."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:103 ../dgit-maint-debrebase.7.pod:112
+msgid ""
+"This tarball is ephemeral and easily regenerated, so we don't commit it "
+"anywhere (e.g. with tools like pristine-tar(1))."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-maint-merge.7.pod:106
+msgid "Verifying upstream's tarball releases"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:110
+msgid ""
+"It can be a good idea to compare upstream's released tarballs with the "
+"release tags, at least for the first upload of the package. If they are "
+"different, you might need to add some additional steps to your I<debian/"
+"rules>, such as running autotools."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:115
+msgid ""
+"A convenient way to perform this check is to import the tarball as described "
+"in the following section, using a different value for 'upstream-tag', and "
+"then use git-diff(1) to compare the imported tarball to the release tag. If "
+"they are the same, you can use upstream's tarball instead of running git-"
+"deborig(1)."
+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
+msgid "When upstream releases only tarballs"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:125
+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
+#, no-wrap
+msgid ""
+" % mkdir foo\n"
+" % cd foo\n"
+" % git init\n"
+"\n"
+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
+msgid ""
+" [DEFAULT]\n"
+" upstream-branch = upstream\n"
+" debian-branch = master\n"
+" upstream-tag = %(version)s\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:145 ../dgit-maint-debrebase.7.pod:160
+#, no-wrap
+msgid ""
+" sign-tags = True\n"
+" pristine-tar = False\n"
+" pristine-tar-commit = False\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"
+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:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:158 ../dgit-maint-debrebase.7.pod:173
+#, 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"
+"\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
+#, no-wrap
+msgid ""
+" % gbp import-orig --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
+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
+#, no-wrap
+msgid ""
+" % git remote add -f origin salsa.debian.org:Debian/foo.git\n"
+" % git push --follow-tags -u origin master upstream\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:185
+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
+msgid "CONVERTING AN EXISTING PACKAGE"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:190 ../dgit-maint-debrebase.7.pod:209
+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
+msgid "No existing git history"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:197
+#, no-wrap
+msgid ""
+" % dgit clone foo\n"
+" % cd foo\n"
+" % git remote add -f upstream https://some.upstream/foo.git\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-merge.7.pod:203
+msgid "Existing git history using another workflow"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:205
+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
+#, no-wrap
+msgid ""
+" % git clone git.debian.org:collab-maint/foo\n"
+" % cd foo\n"
+" % origtargz\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:216
+msgid "Now dump any existing patch queue:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:220
+#, no-wrap
+msgid ""
+" % git rm -rf debian/patches\n"
+" % git commit -m \"drop existing quilt patch queue\"\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:225
+msgid "Then make new upstream tags available:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:229 ../dgit-maint-debrebase.7.pod:240
+#, no-wrap
+msgid ""
+" % git remote add -f upstream https://some.upstream/foo.git\n"
+"\n"
+msgstr ""
+
+#. type: =for
+#: ../dgit-maint-merge.7.pod:233
+msgid "dgit-test dpkg-source-ignores begin"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:235
+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'(?:^|/)\\."
+"git(?:/|$)' -I.git -S> and then unpacked the resultant source package."
+msgstr ""
+
+#. type: =for
+#: ../dgit-maint-merge.7.pod:240
+msgid "dgit-test dpkg-source-ignores end"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:242 ../dgit-maint-debrebase.7.pod:289
+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
+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-"
+"forward> instead of I<--overwrite>. This avoids introducing a new origin "
+"commit into your git 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.)"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:253
+msgid "SOURCE PACKAGE CONFIGURATION"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-merge.7.pod:255
+msgid "debian/source/options"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:257
+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
+#, no-wrap
+msgid ""
+" single-debian-patch\n"
+" auto-commit\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:268
+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
+msgid "Sample text for debian/source/patch-header"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:273
+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
+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 "
+"represented as a quilt series."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:282
+msgid ""
+"A detailed breakdown of the changes is available from their canonical "
+"representation - git commits in the packaging repository. For example, to "
+"see the changes made by the Debian maintainer in the first upload of "
+"upstream version 1.2.3, you could use:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:290
+#, no-wrap
+msgid ""
+" % git clone https://git.dgit.debian.org/foo\n"
+" % cd foo\n"
+" % git log --oneline 1.2.3..debian/1.2.3-1 -- . ':!debian'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:296
+msgid ""
+"(If you have dgit, use `dgit clone foo`, rather than plain `git clone`.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:299
+msgid "A single combined diff, containing all the changes, follows."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:303
+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 "
+"ignores debian/source/patch-header."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:307
+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 "
+"might distract from more important information present in README.source."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:312 ../dgit-maint-debrebase.7.pod:436
+msgid "BUILDING AND UPLOADING"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:314
+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 "
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:320
+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 "
+"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."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:327
+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), "
+"you can just run dpkg-buildpackage(1) or debuild(1) instead."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:331
+msgid "NEW UPSTREAM RELEASES"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-merge.7.pod:333 ../dgit-maint-debrebase.7.pod:319
+msgid "Obtaining the release"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:339 ../dgit-maint-debrebase.7.pod:325
+#, no-wrap
+msgid ""
+" % git remote update\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:345 ../dgit-maint-debrebase.7.pod:331
+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 "
+"pushed this to B<salsa.debian.org>. You will need to clone or fetch from "
+"there, instead of relying on B<dgit clone>/B<dgit fetch> alone."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:350 ../dgit-maint-debrebase.7.pod:336
+msgid "Then, either"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:354 ../dgit-maint-debrebase.7.pod:340
+#, no-wrap
+msgid ""
+" % gbp import-orig --no-merge ../foo_1.2.3.orig.tar.xz\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:358 ../dgit-maint-debrebase.7.pod:344
+msgid "or if you have a working watch file"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:362 ../dgit-maint-debrebase.7.pod:348
+#, no-wrap
+msgid ""
+" % gbp import-orig --no-merge --uscan\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-merge.7.pod:366
+msgid "Reviewing & merging the release"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:368
+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 "
+"copyright file:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:374
+#, no-wrap
+msgid ""
+" % git diff --stat master..1.2.3 -- . ':!debian'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:378
+msgid "You can then review the full merge diff:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:382
+#, no-wrap
+msgid ""
+" % git merge-tree `git merge-base master 1.2.3` master 1.2.3 | $PAGER\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:386
+msgid "Once you're satisfied with what will be merged, update your package:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:390
+#, no-wrap
+msgid ""
+" % git merge 1.2.3\n"
+" % dch -v1.2.3-1 New upstream release.\n"
+" % git add debian/changelog && git commit -m changelog\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:396 ../dgit-maint-debrebase.7.pod:377
+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 "
+"tarball:"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:406 ../dgit-maint-debrebase.7.pod:461
+msgid "HANDLING DFSG-NON-FREE MATERIAL"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:410
+msgid "We create a DFSG-clean tag to merge to master:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:414
+#, no-wrap
+msgid ""
+" % git checkout -b pre-dfsg 1.2.3\n"
+" % git rm evil.bin\n"
+" % git commit -m \"upstream version 1.2.3 DFSG-cleaned\"\n"
+" % git tag -s 1.2.3+dfsg\n"
+" % git checkout master\n"
+" % git branch -D pre-dfsg\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:423
+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 "
+"publicly accessible in the git history on B<dgit-repos>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:428
+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 "
+"administrator dgit-owner@debian.org and the ftpmasters ftpmaster@ftp-master."
+"debian.org)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:435 ../dgit-maint-debrebase.7.pod:521
+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>. "
+"See uscan(1). Alternatively, see the I<--filter> option detailed in gbp-"
+"import-orig(1)."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:440
+msgid "FORWARDING PATCHES UPSTREAM"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:442
+msgid "The basic steps are:"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:448
+msgid "Create a new branch based off upstream's master branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:452
+msgid ""
+"git-cherry-pick(1) commits from your master branch onto your new branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:457
+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
+msgid "For example (and it is only an example):"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-merge.7.pod:466
+#, no-wrap
+msgid ""
+" % # fork foo.git on GitHub\n"
+" % git remote add -f fork git@github.com:spwhitton/foo.git\n"
+" % git checkout -b fix-error upstream/master\n"
+" % git config branch.fix-error.pushRemote fork\n"
+" % git cherry-pick master^2\n"
+" % git push\n"
+" % # submit pull request on GitHub\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:476
+msgid ""
+"Note that when you merge an upstream release containing your forwarded "
+"patches, git and dgit will transparently handle \"dropping\" the patches "
+"that have been forwarded, \"retaining\" the ones that haven't."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-merge.7.pod:480 ../dgit-maint-gbp.7.pod:130
+#: ../dgit-maint-debrebase.7.pod:526
+msgid "INCORPORATING NMUS"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:488
+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
+msgid "AUTHOR"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-merge.7.pod:497 ../dgit-maint-debrebase.7.pod:728
+msgid ""
+"This tutorial was written and is maintained by Sean Whitton "
+"<spwhitton@spwhitton.name>. It contains contributions from other dgit "
+"contributors too - see the dgit copyright file."
+msgstr ""
diff --git a/po4a/dgit-maint-native_7.pot b/po4a/dgit-maint-native_7.pot
new file mode 100644
index 0000000..da22681
--- /dev/null
+++ b/po4a/dgit-maint-native_7.pot
@@ -0,0 +1,221 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, 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
+#: ../dgit-user.7.pod:449 ../dgit-maint-native.7.pod:128
+#: ../dgit-maint-merge.7.pod:493 ../dgit-maint-gbp.7.pod:138
+msgid "dgit(1), dgit(7)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:3
+msgid "dgit - tutorial for package maintainers of Debian-native packages"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:7
+msgid ""
+"This document describes elements of a workflow for using B<dgit> to maintain "
+"a Debian package that uses one of the native source formats (\"1.0\" & \"3.0 "
+"(native)\")."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:15
+msgid "We expect that your git history is fast-forwarding."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:19
+msgid ""
+"You should be prepared to tolerate a small amount of ugliness in your git "
+"history in the form of merges which stitch the dgit-generated archive view "
+"into your maintainer history."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:25
+msgid ""
+"This is to handle uploads that were not made with dgit, such as the uploads "
+"you made before switching to this workflow, or NMUs."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-maint-native.7.pod:31
+msgid "Benefits"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:37 ../dgit-maint-gbp.7.pod:16
+#: ../dgit-maint-debrebase.7.pod:38
+msgid ""
+"Benefit from dgit's safety catches. In particular, ensure that your upload "
+"always matches exactly your git HEAD."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:42
+msgid "Provide a better, more detailed history to downstream dgit users."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:48
+msgid "Incorporate an NMU with one command."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-native.7.pod:52
+msgid "FIRST PUSH WITH DGIT"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:54
+msgid "You do not need to do anything special to your tree to push with dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:57
+msgid "Simply prepare your git tree in the usual way, and then:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-native.7.pod:61
+#, no-wrap
+msgid ""
+" % dgit -wgf sbuild -A -c sid\n"
+" % dgit -wgf --overwrite push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:66
+msgid "(Do not make any tags yourself: dgit push will do that.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:68
+msgid ""
+"You may use B<dgit pbuilder> or B<dgit cowbuilder> instead of B<dgit "
+"sbuild>; see dgit(1) for the syntax of those subcommands."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:72
+msgid ""
+"The --overwrite option tells dgit that you are expecting that your git "
+"history is not a descendant of the history which dgit synthesised from the "
+"previous non-dgit uploads."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:77
+msgid ""
+"dgit will make a merge commit on your branch but without making any code "
+"changes (ie, a pseudo-merge) so that your history, which will be pushed to "
+"the dgit git server, is fast forward from the dgit archive view."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:85
+msgid ""
+"Alternatively, if this was the first ever dgit push of the package, you can "
+"avoid this merge commit by passing C<--deliberately-not-fast-forward>. "
+"instead of C<--overwrite>. This avoids introducing a new origin commit into "
+"your git history."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-native.7.pod:93
+msgid "SUBSEQUENT PUSHES"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-native.7.pod:97
+#, no-wrap
+msgid ""
+" % dgit -wgf push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:101 ../dgit-maint-native.7.pod:111
+msgid "That's it."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-maint-native.7.pod:103
+msgid "INCORPORATING AN NMU"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-native.7.pod:107 ../dgit-maint-merge.7.pod:484
+#, no-wrap
+msgid ""
+" % dgit pull\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:113
+msgid "Or, if you would prefer to review the changes, you can do this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-native.7.pod:118
+#, no-wrap
+msgid ""
+" % dgit fetch\n"
+" % dgit diff HEAD..dgit/dgit/sid\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-maint-native.7.pod:123
+msgid ""
+"If you do not merge the NMU into your own git history, the next push will "
+"then require I<--overwrite>."
+msgstr ""
diff --git a/po4a/dgit-nmu-simple_7.pot b/po4a/dgit-nmu-simple_7.pot
new file mode 100644
index 0000000..691d136
--- /dev/null
+++ b/po4a/dgit-nmu-simple_7.pot
@@ -0,0 +1,249 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.7:4 ../dgit-user.7.pod:27 ../dgit-nmu-simple.7.pod:35
+#, no-wrap
+msgid "SUMMARY"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:3
+msgid "dgit-nmu-simple - tutorial for DDs wanting to NMU with git"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:5 ../dgit-sponsorship.7.pod:5
+msgid "INTRODUCTION AND SCOPE"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:7
+msgid ""
+"This tutorial describes how a Debian Developer can do a straightforward NMU "
+"of a package in Debian, using dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:11
+msgid ""
+"This document won't help you decide whether an NMU is a good idea or whether "
+"it be well received. The Debian Developers' Reference has some (sometimes "
+"questionable) guidance on this."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:17
+msgid ""
+"Conversely, you do not need to know anything about the usual maintainer's "
+"git workflow. If appropriate, you can work on many different packages, "
+"making similar changes, without worrying about the individual maintainers' "
+"git practices."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:23
+msgid ""
+"This tutorial only covers changes which can sensibly be expressed as a "
+"reasonably small number of linear commits (whether to Debian packaging or to "
+"upstream files or both)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:28
+msgid ""
+"If you want to do a new upstream version, you probably want to do as the "
+"maintainer would have done. You'll need to find out what the maintainer's "
+"git practices are and consult the appropriate C<dgit-maint-*(7)> workflow "
+"tutorial,"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-nmu-simple.7.pod:39
+#, no-wrap
+msgid ""
+" % dgit clone glibc jessie\n"
+" % cd glibc\n"
+" % git am ~/glibc-security-fix.diff\n"
+" % dch --nmu \"Apply upstream's fix for foo bug.\"\n"
+" % git add debian/changelog && git commit -m\"NMU changelog entry\"\n"
+" % dpkg-buildpackage -uc -b\n"
+" [ run your tests ]\n"
+" % dch -r && git add debian/changelog && git commit -m\"Finalise NMU\"\n"
+" % dgit -wgf sbuild -A -c jessie\n"
+" [ final tests on generated .debs ]\n"
+" % dgit -wgf [--delayed=5] push jessie\n"
+" [ enter your gnupg passphrase as prompted ]\n"
+" [ see that push and upload are successful ]\n"
+" [ prepare and email NMU diff (git-diff, git-format-patch) ]\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:56
+msgid "WHAT KIND OF CHANGES AND COMMITS TO MAKE"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:58
+msgid ""
+"When preparing an NMU, the git commits you make on the dgit branch should be "
+"simple linear series of commits with good commit messages. The commit "
+"messages will be published in various ways, including perhaps being used as "
+"the cover messages for generated quilt patches."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:64
+msgid ""
+"Do not make merge commits. Do not try to rebase to drop patches - if you "
+"need to revert a change which is actually a Debian patch, use git-revert."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:69
+msgid ""
+"If you need to modify a Debian patch, make a new commit which fixes what "
+"needs fixing, and explain in the commit message which patch it should be "
+"squashed with (perhaps by use of a commit message in C<git rebase --"
+"autosquash -i> format)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:76
+msgid ""
+"(Of course if you have specific instructions from the maintainer, you can "
+"follow those instead. But the procedure in this tutorial is legitimate for "
+"any maintainer, in the sense that it should generate an upload to which the "
+"maintainer cannot reasonably object.)"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:82
+msgid "RELEVANT BRANCHES"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:84
+msgid ""
+"dgit clone will put you on a branch like C<dgit/sid>. There is a pseudo-"
+"remote called C<dgit> which also contains a branch like C<dgit/sid>, so you "
+"do things like C<git diff dgit/dgit/sid> to see what changes you have made."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:90
+msgid "KEEPING YOUR WORKING TREE TIDY"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:92
+msgid ""
+"Don't forget to C<git add> any new files you create. Otherwise git clean "
+"(which is requested with the C<-wgf> option in the recipe above) will "
+"delete them."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:97
+msgid ""
+"Many package builds leave dirty git trees. So, commit before building. "
+"That way you can use C<git reset --hard>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:101
+msgid ""
+"If you follow this approach you don't need to care about the build dirtying "
+"the tree. It also means you don't care about the package clean target, "
+"which is just as well because many package clean targets are broken."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:107
+msgid "OTHER GIT BRANCHES"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:109
+msgid ""
+"The dgit git history (visible in gitk and git log) is not necessarily "
+"related to the maintainer's or upstream's git history (if any)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:114
+msgid ""
+"If the maintainer has advertised a git repo with Vcs-Git dgit will set up a "
+"remote for it, so you can do"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-nmu-simple.7.pod:121
+#, no-wrap
+msgid ""
+" % git fetch vcs-git\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:125
+msgid ""
+"You can cherry pick changes from there, for example. Note that the "
+"maintainer's git history may not be suitable for use with dgit. For "
+"example, it might be a patches-unapplied branch or even contain only a "
+"debian/ directory."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:131
+msgid "UPLOADING TO DELAYED"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:133
+msgid ""
+"You can use dgit's I<--delayed> option to upload to the DELAYED queue. "
+"However, you should read the warning about this option in dgit(1)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-nmu-simple.7.pod:139
+msgid "dgit(1), dgit(7), dgit-maint-*(7)"
+msgstr ""
diff --git a/po4a/dgit-sponsorship_7.pot b/po4a/dgit-sponsorship_7.pot
new file mode 100644
index 0000000..fb45886
--- /dev/null
+++ b/po4a/dgit-sponsorship_7.pot
@@ -0,0 +1,527 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-nmu-simple.7.pod:5 ../dgit-sponsorship.7.pod:5
+msgid "INTRODUCTION AND SCOPE"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-maint-gbp.7.pod:113 ../dgit-sponsorship.7.pod:173
+#, no-wrap
+msgid ""
+" % dgit --gbp push\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:3
+msgid "dgit-sponsorship - tutorial for Debian upload sponsorship, using git"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:7
+msgid ""
+"This tutorial describes how a Debian sponsored contributor and a sponsoring "
+"DD (or DM) can collaborate and publish using git."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:12
+msgid ""
+"The sponsor must to be intending to use dgit for the upload. (If the "
+"sponsor does not use dgit, it is not possible to properly publish a "
+"sponsee's git branch.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:17
+msgid ""
+"It is best if the sponsee also uses dgit; but also covered (later on) is the "
+"case where the sponsee provides a proposed upload in source package form, "
+"but the sponsor would like to work in git."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:22
+msgid ""
+"This tutorial does not provide a checklist for the sponsor's review. Both "
+"contributors are expected to be familiar with Debian packaging and Debian's "
+"processes, and with git."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-sponsorship.7.pod:26
+msgid "SPONSEE WORKFLOW"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:28
+msgid "This section is addressed to the sponsee:"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:30
+msgid "General"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:32
+msgid ""
+"You should prepare the package as if you were going to upload it with C<dgit "
+"push-source> or C<dgit push> yourself."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:35
+msgid "For a straightforward NMU, consult L<dgit-nmu-simple(7)>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:37
+msgid ""
+"If you are the (prospective) maintainer, you can adopt any suitable (dgit-"
+"compatible) git workflow. The L<dgit-maint-*(7)> tutorials describe some "
+"of the possibilities."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:42
+msgid "Upload preparation"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:44
+msgid ""
+"You should go through all of the steps a self-uploading maintainer would do, "
+"including building for ad hoc tests, and checking via a formal build (eg "
+"using C<dgit sbuild>) that the package builds on sid (or the target "
+"release)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:50
+msgid ""
+"At the point where you would, if you were a DD, do the actual upload by "
+"running dgit push, you hand off to your sponsor."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:56
+msgid ""
+"If you were going to use one of the C<--quilt=> options to dgit, or C<dgit --"
+"gbp> or C<dgit --dpm>, you must specify that in your handoff email - see "
+"below."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:62
+msgid "git+origs based handoff"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:64
+msgid "The elements of the handoff consists of:"
+msgstr ""
+
+#. type: =item
+#: ../dgit-sponsorship.7.pod:68 ../dgit-sponsorship.7.pod:72
+#: ../dgit-sponsorship.7.pod:79 ../dgit-sponsorship.7.pod:84
+msgid "*"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:70
+msgid "The git branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:74
+msgid ""
+"Any .orig tarballs which will be needed, or sample git-archive(1) or gbp-"
+"buildpackage(1) command(s) to generate them."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:81
+msgid ""
+"A sample dgit push command, containing any dgit --quilt=, --gbp or --dpm "
+"option needed"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:86
+msgid ""
+"Plus of course all the usual information about the state of the package, any "
+"caveats or areas you would like the sponsor to focus their review, "
+"constraints about upload timing, etc."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:93
+msgid ""
+"If the handoff is done by email, the elements above should be a in a single, "
+"signed, message. This could be an RFS submission against the sponsorship-"
+"requests pseudo-package."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-sponsorship.7.pod:98
+msgid "git branch"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:102
+msgid ""
+"The sponsee should push their HEAD as a git branch to any suitable git "
+"server. They can use their own git server; salsa is another possibility."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:107
+msgid ""
+"The branch names used by the sponsee on their local machine, and on the "
+"server, do not matter."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:110
+msgid ""
+"Instead, the sponsee should include the git commit id of their HEAD in their "
+"handover email."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-sponsorship.7.pod:116
+msgid "orig tarballs"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:120
+msgid ""
+"If there are any .origs that are not in the archive already, the sponsor "
+"will need them as part of the upload."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:123
+msgid ""
+"If the sponsee generated these tarballs with git-archive(1) or gbp-"
+"buildpackage(1), they can simply include a sample invocation of git-"
+"archive(1) or ensure that a suitable gbp.conf is present in the source "
+"package to generate the tarball."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:130
+msgid ""
+"Otherwise, the simplest approach is to commit the orig tarballs with "
+"pristine-tar(1), e.g."
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-sponsorship.7.pod:136
+#, no-wrap
+msgid ""
+" % pristine-tar commit ../foo_1.2.3.orig.tar.xz upstream/1.2.3\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:140
+msgid ""
+"and be sure to push the pristine-tar branch. If you are using git-"
+"buildpackage(1), just pass I<--git-pristine-tar> and I<--git-pristine-tar-"
+"commit>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:144
+msgid ""
+"Alternatively, the sponsee can put them on a suitable webserver, or attach "
+"to the e-mail, if they are small."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:149
+msgid ""
+"The sponsee should quote sha256sums of the .origs in their handoff email, "
+"unless they supplied commands to generate them."
+msgstr ""
+
+#. type: =head3
+#: ../dgit-sponsorship.7.pod:155
+msgid "quilt options"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:159
+msgid ""
+"Some workflows involve git branches which are not natively dgit-compatible. "
+"Normally dgit will convert them as needed, during push."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:163
+msgid ""
+"Supply a sample \"dgit push\" command including any C<--gbp> (aka C<--"
+"quilt=gbp>), C<--dpm> (aka C<--quilt=dpm>), or other C<--quilt=> option they "
+"need to use. e.g."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-sponsorship.7.pod:179
+msgid "SPONSOR WORKFLOW"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:181 ../dgit-sponsorship.7.pod:273
+msgid "This part is addressed to the sponsor:"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:183
+msgid "Receiving and validating the sponsorship request"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:185
+msgid "You should check the signature on the email."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:187
+msgid ""
+"Use C<git fetch> or C<git clone> to obtain the git branch prepared by your "
+"sponsee, and obtain any .origs mentioned by the sponsee (to extract .origs "
+"committed with pristine-tar, you can use origtargz(1), or use \"gbp clone --"
+"pristine-tar\".)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:194
+msgid ""
+"Check the git commit ID of the sponsee's branch tip, and the sha256sums of "
+"the .origs, against the handoff email."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:198
+msgid "Now you can check out the branch tip, and do your substantive review."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:201
+msgid "Dealing with branches that want --quilt="
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:203
+msgid ""
+"If your sponsee mentioned a C<--quilt> option, and you don't want to grapple "
+"with their preferred tree format, you can convert their tree into the "
+"standard dgit view:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-sponsorship.7.pod:209
+#, no-wrap
+msgid ""
+" % dgit -wgf --quilt=foo --dgit-view-save=unquilted quilt-fixup\n"
+" % git checkout unquilted\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:214
+msgid ""
+"You should check that what you're looking at is a descendant of the "
+"sponsee's branch."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:217
+msgid "Some hints which may help the review"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:219
+msgid ""
+"C<dgit fetch sid> will get you an up-to-date C<refs/remotes/dgit/dgit/sid> "
+"showing what's in the archive already."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:223
+msgid ""
+"C<dgit -wgf --damp-run push-source> will check that dgit can build an "
+"appropriate source package."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:226
+msgid ""
+"There is no need to run debdiff. dgit will not upload anything that doesn't "
+"unpack to exactly the git commit you are pushing, so you can rely on what "
+"you see in C<git diff>."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-sponsorship.7.pod:231
+msgid "Doing the upload"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:233
+msgid ""
+"When you have completed your source review, and use C<dgit -wgf [--"
+"quilt=...] sbuild -A -C> or similar, to to the build, and then C<dgit -wgf "
+"[--quilt=...] push-source> or C<dgit -wgf [--quilt=...] push> to do the "
+"upload."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:242
+msgid ""
+"Check whether the sponsee made a debian/I<version> tag. If they did, ensure "
+"you have their tag in the repository you are pushing from, or pass C<--no-"
+"dep14tag>. This avoids identically named, non-identical tags, which can be "
+"confusing."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:249
+msgid ""
+"(It is possible to upload from the quilt-cache dgit view. If you want to do "
+"this, B<do not> pass the C<--quilt> or C<--gbp> or C<--dpm> options again, "
+"and B<do> pass C<--no-dep14tag>, since the debian/I<version> tag should go "
+"on the sponsee's branch.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:257
+msgid ""
+"If this was the first upload done with dgit, you may need to pass C<--"
+"overwrite> to dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:262
+msgid ""
+"Alternatively, if this was the first ever dgit push of the package, you can "
+"pass C<--deliberately-not-fast-forward> instead of C<--overwrite>. This "
+"avoids introducing a new origin commit into the dgit view of the sponsee's "
+"git history which is unnecessary and could be confusing."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-sponsorship.7.pod:271
+msgid "SPONSORING A NON-GIT-USING SPONSEE"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:275
+msgid ""
+"If your sponsee does not use git, you can still do your review with git, and "
+"use dgit for the upload."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:279
+msgid ""
+"Your sponsee will provide you with a source package: that is, a .dsc and the "
+"files it refers to. Obtain these files, and check signatures as "
+"appropriate. Then:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-sponsorship.7.pod:286
+#, no-wrap
+msgid ""
+" % dgit clone PACKAGE\n"
+" % cd PACKAGE\n"
+" % dgit import-dsc /path/to/sponsee's.dsc +sponsee\n"
+" % git checkout sponsee\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:293
+msgid "Or for an entirely new package:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-sponsorship.7.pod:297
+#, no-wrap
+msgid ""
+" % mkdir PACKAGE\n"
+" % cd PACKAGE\n"
+" % git init\n"
+" % dgit -pPACKAGE import-dsc /path/to/sponsee's.dsc +sponsee\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:304
+msgid ""
+"This will leave you looking at the sponsee's package, formatted as a dgit "
+"branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:307
+msgid ""
+"When you have finished your review and your tests, you can do the dgit "
+"sbuild and dgit push directly from the \"sponsee\" branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:312
+msgid ""
+"You will need to pass C<--overwrite> to dgit push for every successive "
+"upload. This disables a safety catch which would normally spot situations "
+"where changes are accidentally lost. When your sponsee is sending you "
+"source packages - perhaps multiple source pacakges with the same version "
+"number - these safety catches are inevitably ineffective."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-sponsorship.7.pod:323
+msgid "dgit(1), dgit(7), dgit-nmu-simple(7), dgit-maint-*(7)"
+msgstr ""
diff --git a/po4a/dgit-user_7.pot b/po4a/dgit-user_7.pot
new file mode 100644
index 0000000..7ef68ed
--- /dev/null
+++ b/po4a/dgit-user_7.pot
@@ -0,0 +1,707 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.7:4 ../dgit-user.7.pod:27 ../dgit-nmu-simple.7.pod:35
+#, no-wrap
+msgid "SUMMARY"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:3
+msgid "dgit-user - making and sharing changes to Debian packages, with git"
+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
+#: ../dgit-user.7.pod:7
+msgid ""
+"dgit lets you fetch the source code to every package on your system as if "
+"your distro used git to maintain all of it."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:11
+msgid ""
+"You can then edit it, build updated binary packages (.debs) and install and "
+"run them. You can also share your work with others."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:16
+msgid ""
+"This tutorial gives some recipes and hints for this. It assumes you have "
+"basic familiarity with git. It does not assume any initial familiarity with "
+"Debian's packaging processes."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:21
+msgid ""
+"If you are a package maintainer within Debian; a DM or DD; and/or a sponsee: "
+"this tutorial is not for you. Try L<dgit-nmu-simple(7)>, L<dgit-maint-"
+"*(7)>, or L<dgit(1)> and L<dgit(7)>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:29
+msgid "(These runes will be discussed later.)"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:33
+#, no-wrap
+msgid ""
+" % dgit clone glibc jessie,-security\n"
+" % cd glibc\n"
+" % curl 'https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=28250;mbox=yes;msg=89' | patch -p1 -u\n"
+" % git commit -a -m 'Fix libc lost output bug'\n"
+" % gbp dch -S --since=dgit/dgit/sid --ignore-branch --commit\n"
+" % mk-build-deps --root-cmd=sudo --install\n"
+" % dpkg-buildpackage -uc -b\n"
+" % sudo dpkg -i ../libc6_*.deb\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:44
+msgid "Occasionally:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:48 ../dgit-user.7.pod:242
+#, no-wrap
+msgid ""
+" % git clean -xdf\n"
+" % git reset --hard\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:53
+msgid "Later:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:57
+#, no-wrap
+msgid ""
+" % cd glibc\n"
+" % dgit pull jessie,-security\n"
+" % gbp dch -S --since=dgit/dgit/sid --ignore-branch --commit\n"
+" % dpkg-buildpackage -uc -b\n"
+" % sudo dpkg -i ../libc6_*.deb\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:65
+msgid "FINDING THE RIGHT SOURCE CODE - DGIT CLONE"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:69
+#, no-wrap
+msgid ""
+" % dgit clone glibc jessie,-security\n"
+" % cd glibc\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:74
+msgid ""
+"dgit clone needs to be told the source package name (which might be "
+"different to the binary package name, which was the name you passed to \"apt-"
+"get install\") and the codename or alias of the Debian release (this is "
+"called the \"suite\")."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:80
+msgid "Finding the source package name"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:82
+msgid ""
+"For many packages, the source package name is obvious. Otherwise, if you "
+"know a file that's in the package, you can look it up with dpkg:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:88
+#, no-wrap
+msgid ""
+" % dpkg -S /lib/i386-linux-gnu/libc.so.6 \n"
+" libc6:i386: /lib/i386-linux-gnu/libc.so.6\n"
+" % dpkg -s libc6:i386\n"
+" Package: libc6\n"
+" Status: install ok installed\n"
+" ...\n"
+" Source: glibc\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:98
+#, no-wrap
+msgid ""
+"(In this example,\n"
+"libc6 is a \"multi-arch: allowed\" package,\n"
+" which means that it exists in several different builds\n"
+" for different architectures.\n"
+"That's where C<:i386> comes from.)\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:104
+msgid "Finding the Debian release (the \"suite\")"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:106
+msgid ""
+"Internally, Debian (and derived) distros normally refer to their releases by "
+"codenames. Debian also has aliases which refer to the current stable "
+"release etc. So for example, at the time of writing Debian C<jessie> "
+"(Debian 8) is Debian C<stable>; and the current version of Ubuntu is "
+"C<yakkety> (Yakkety Yak, 16.10). You can specify either the codename "
+"C<jessie> or the alias C<stable>. If you don't say, you get C<sid>, which "
+"is Debian C<unstable> - the main work-in progress branch."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:117
+msgid "If you don't know what you're running, try this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:121
+#, no-wrap
+msgid ""
+" % grep '^deb' /etc/apt/sources.list\n"
+" deb http://the.earth.li/debian/ jessie main non-free contrib\n"
+" ...\n"
+" %\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:128
+msgid ""
+"For Debian, you should add C<,-security> to the end of the suite name, "
+"unless you're on unstable or testing. Hence, in our example C<jessie> "
+"becomes C<jessie,-security>. (Yes, with a comma.)"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:135
+msgid "WHAT DGIT CLONE PRODUCES"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:137
+msgid "What branches are there"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:139
+msgid ""
+"dgit clone will give you a new working tree, and arrange for you to be on a "
+"branch named like C<dgit/jessie,-security> (yes, with a comma in the branch "
+"name)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:143
+msgid ""
+"For each release (like C<jessie>) there is a tracking branch for the "
+"contents of the archive, called C<remotes/dgit/dgit/jessie> (and similarly "
+"for other suites). This can be updated with C<dgit fetch jessie>. This, "
+"the I<remote suite branch>, is synthesized by your local copy of dgit. It "
+"is fast forwarding."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:152
+msgid ""
+"Debian separates out the security updates, into C<*-security>. Telling dgit "
+"C<jessie,-security> means that it should include any updates available in "
+"C<jessie-security>. The comma notation is a request to dgit to track "
+"jessie, or jessie-security if there is an update for the package there."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:158
+msgid ""
+"(You can also dgit fetch in a tree that wasn't made by dgit clone. If "
+"there's no C<debian/changelog> you'll have to supply a C<-p>I<package> "
+"option to dgit fetch.)"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:162
+msgid "What kind of source tree do you get"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:164
+msgid ""
+"If the Debian package is based on some upstream release, the code layout "
+"should be like the upstream version. You should find C<git grep> helpful to "
+"find where to edit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:168
+msgid ""
+"The package's Debian metadata and the scripts for building binary packages "
+"are under C<debian/>. C<debian/control>, C<debian/changelog> and C<debian/"
+"rules> are the starting points. The Debian Policy Manual has most of the in-"
+"depth technical details."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:175
+msgid ""
+"For many Debian packages, there will also be some things in C<debian/patches/"
+">. It is best to ignore these. Insofar as they are relevant the changes "
+"there will have been applied to the actual files, probably by means of "
+"actual comments in the git history. The contents of debian/patches are "
+"ignored when building binaries from dgitish git branches."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:185
+msgid ""
+"(For Debian afficionados: the git trees that come out of dgit are \"patches-"
+"applied packaging branches without a .pc directory\".)"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:190
+msgid "What kind of history you get"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:192
+msgid ""
+"If you're lucky, the history will be a version of, or based on, the Debian "
+"maintainer's own git history, or upstream's git history."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:197
+msgid ""
+"But for many packages the real git history does not exist, or has not been "
+"published in a dgitish form. So you may find that the history is a rather "
+"short history invented by dgit."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:203
+msgid ""
+"dgit histories often contain automatically-generated commits, including "
+"commits which make no changes but just serve to make a rebasing branch fast-"
+"forward. This is particularly true of combining branches like C<jessie,-"
+"security>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:210
+msgid ""
+"If the package maintainer is using git then after dgit clone you may find "
+"that there is a useful C<vcs-git> remote referring to the Debian package "
+"maintainer's repository for the package. You can see what's there with "
+"C<git fetch vcs-git>. But use what you find there with care: Debian "
+"maintainers' git repositories often have contents which are very confusing "
+"and idiosyncratic. In particular, you may need to manually apply the "
+"patches that are in debian/patches before you do anything else!"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:222 ../dgit-maint-gbp.7.pod:56
+msgid "BUILDING"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:224
+msgid "Always commit before building"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:228
+#, no-wrap
+msgid ""
+" % wget 'https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=28250;mbox=yes;msg=89' | patch -p1 -u\n"
+" % git commit -a -m 'Fix libc lost output bug'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:233
+msgid ""
+"Debian package builds are often quite messy: they may modify files which are "
+"also committed to git, or leave outputs and temporary files not covered by "
+"C<.gitignore>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:237
+msgid "If you always commit, you can use"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:247
+msgid ""
+"to tidy up after a build. (If you forgot to commit, don't use those "
+"commands; instead, you may find that you can use C<git add -p> to help "
+"commit what you actually wanted to keep.)"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:252
+msgid ""
+"These are destructive commands which delete all new files (so you B<must> "
+"remember to say C<git add>) and throw away edits to every file (so you "
+"B<must> remember to commit)."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:257
+msgid "Update the changelog (at least once) before building"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:261
+#, no-wrap
+msgid ""
+" % gbp dch -S --since=dgit/dgit/sid --ignore-branch --commit\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:265
+msgid ""
+"The binaries you build will have a version number which ultimately comes "
+"from the C<debian/changelog>. You want to be able to tell your binaries "
+"apart from your distro's."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:270
+msgid ""
+"So you should update C<debian/changelog> to add a new stanza at the top, for "
+"your build."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:274
+msgid ""
+"This rune provides an easy way to do this. It adds a new changelog entry "
+"with an uninformative message and a plausible version number (containing a "
+"bit of your git commit id)."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:279
+msgid ""
+"If you want to be more sophisticated, the package C<dpkg-dev-el> has a good "
+"Emacs mode for editing changelogs. Alternatively, you could edit the "
+"changelog with another text editor, or run C<dch> or C<gbp dch> with "
+"different options. Choosing a good version number is slightly tricky and a "
+"complete treatment is beyond the scope of this tutorial."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:287
+msgid "Actually building"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:291
+#, no-wrap
+msgid ""
+" % mk-build-deps --root-cmd=sudo --install\n"
+" % dpkg-buildpackage -uc -b\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:296
+msgid ""
+"dpkg-buildpackage is the primary tool for building a Debian source package. "
+"C<-uc> means not to pgp-sign the results. C<-b> means build all binary "
+"packages, but not to build a source package."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:302
+msgid "Using sbuild"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:304
+msgid ""
+"You can build in an schroot chroot, with sbuild, instead of in your main "
+"environment. (sbuild is used by the Debian build daemons.)"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:309
+#, no-wrap
+msgid ""
+" % git clean -xdf\n"
+" % sbuild -c jessie -A --no-clean-source \\\n"
+" --dpkg-source-opts='-Zgzip -z1 --format=1.0 -sn'\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:315
+msgid ""
+"Note that this will seem to leave a \"source package\" (.dsc and .tar.gz) "
+"in the parent directory, but that source package should not be used. It is "
+"likely to be broken. For more information see Debian bug #868527."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:322
+msgid "INSTALLING"
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:324
+msgid "Debian Jessie or older"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:328
+#, no-wrap
+msgid ""
+" % sudo dpkg -i ../libc6_*.deb\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:332
+msgid ""
+"You can use C<dpkg -i> to install the .debs that came out of your package."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:335
+msgid ""
+"If the dependencies aren't installed, you will get an error, which can "
+"usually be fixed with C<apt-get -f install>."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:339
+msgid "Debian Stretch or newer"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:343
+#, no-wrap
+msgid ""
+" % sudo apt install ../libc6_*.deb\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:347
+msgid "Multiarch"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:349
+msgid ""
+"If you're working on a library package and your system has multiple "
+"architectures enabled, you may see something like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:355
+#, no-wrap
+msgid ""
+" dpkg: error processing package libpcre3-dev:amd64 (--configure):\n"
+" package libpcre3-dev:amd64 2:8.39-3~3.gbp8f25f5 cannot be configured because libpcre3-dev:i386 is at a different version (2:8.39-2)\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:360
+msgid ""
+"The multiarch system used by Debian requires each package which is present "
+"for multiple architectures to be exactly the same across all the "
+"architectures for which it is installed."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:364
+msgid ""
+"The proper solution is to build the package for all the architectures you "
+"have enabled. You'll need a chroot for each of the secondary "
+"architectures. This is somewhat tiresome, even though Debian has excellent "
+"tools for managing chroots. C<sbuild-debian-developer-setup> from the "
+"package of the same name and C<sbuild-createchroot> from the C<sbuild> "
+"package are good starting points."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:374
+msgid ""
+"Otherwise you could deinstall the packages of interest for those other "
+"architectures with something like C<dpkg --remove libpcre3:i386>."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:378
+msgid ""
+"If neither of those are an option, your desperate last resort is to try "
+"using the same version number as the official package for your own package. "
+"(The version is controlled by C<debian/changelog> - see above). This is not "
+"ideal because it makes it hard to tell what is installed, and because it "
+"will mislead and confuse apt."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:386
+msgid "With the \"same number\" approach you may still get errors like"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:390
+msgid ""
+"trying to overwrite shared '/usr/include/pcreposix.h', which is different "
+"from other instances of package libpcre3-dev"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:394
+msgid ""
+"but passing C<--force-overwrite> to dpkg will help - assuming you know what "
+"you're doing."
+msgstr ""
+
+#. type: =head1
+#: ../dgit-user.7.pod:397
+msgid "SHARING YOUR WORK"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:399
+msgid ""
+"The C<dgit/jessie,-security> branch (or whatever) is a normal git branch. "
+"You can use C<git push> to publish it on any suitable git server."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:402
+msgid ""
+"Anyone who gets that git branch from you will be able to build binary "
+"packages (.deb) just as you did."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:406
+msgid ""
+"If you want to contribute your changes back to Debian, you should probably "
+"send them as attachments to an email to the L<Debian Bug System|https://bugs."
+"debian.org/> (either a followup to an existing bug, or a new bug). Patches "
+"in C<git-format-patch> format are usually very welcome."
+msgstr ""
+
+#. type: =head2
+#: ../dgit-user.7.pod:413
+msgid "Source packages"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:415
+msgid ""
+"The git branch is not sufficient to build a source package the way Debian "
+"does. Source packages are somewhat awkward to work with. Indeed many "
+"plausible git histories or git trees cannot be converted into a suitable "
+"source package. So I recommend you share your git branch instead."
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:423
+msgid ""
+"If a git branch is not enough, and you need to provide a source package but "
+"don't care about its format/layout (for example because some software you "
+"have consumes source packages, not git histories) you can use this recipe "
+"to generate a C<3.0 (native)> source package, which is just a tarball with "
+"accompanying .dsc metadata file:"
+msgstr ""
+
+#. type: verbatim
+#: ../dgit-user.7.pod:434
+#, no-wrap
+msgid ""
+" % echo '3.0 (native)' >debian/source/format\n"
+" % git commit -m 'switch to native source format' debian/source/format\n"
+" % dgit -wgf build-source\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../dgit-user.7.pod:440
+msgid ""
+"If you need to provide a good-looking source package, be prepared for a lot "
+"more work. You will need to read much more, perhaps starting with L<dgit-"
+"nmu-simple(7)>, L<dgit-sponsorship(7)> or L<dgit-maint-*(7)>"
+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
+msgid "dgit(1), dgit(7)"
+msgstr ""
diff --git a/po4a/dgit_1.pot b/po4a/dgit_1.pot
new file mode 100644
index 0000000..8a7fd86
--- /dev/null
+++ b/po4a/dgit_1.pot
@@ -0,0 +1,2645 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: ../dgit.1:2 ../dgit.7:1
+#, no-wrap
+msgid "dgit"
+msgstr ""
+
+#. type: TH
+#: ../dgit.1:2 ../dgit.7:1
+#, no-wrap
+msgid "Debian Project"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:5
+msgid "dgit - git integration with the Debian archive"
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:6
+#, no-wrap
+msgid "SYNOPSIS"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:10
+msgid ""
+"B<dgit> [I<dgit-opts>] B<clone> [I<dgit-opts>] I<package> [I<suite>] [B<./"
+">I<dir|>B</>I<dir>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:14
+msgid "B<dgit> [I<dgit-opts>] B<fetch>|B<pull> [I<dgit-opts>] [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:18
+msgid ""
+"B<dgit> [I<dgit-opts>] B<build>|B<sbuild>|B<build-source> [I<build-opts>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:22
+msgid "B<dgit> [I<dgit-opts>] B<pbuilder>|B<cowbuilder> [I<debbuildopts>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:26
+msgid "B<dgit> [I<dgit-opts>] B<push>|B<push-source> [I<dgit-opts>] [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:30
+msgid ""
+"B<dgit> [I<dgit-opts>] B<rpush> I<build-host>B<:>I<build-dir> [I<push args..."
+">]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:33
+msgid "B<dgit> [I<dgit-opts>] I<action> ..."
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:33
+#, no-wrap
+msgid "DESCRIPTION"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:41
+msgid ""
+"B<dgit> allows you to treat the Debian archive as if it were a git "
+"repository. Conversely, it allows Debian to publish the source of its "
+"packages as git branches, in a format which is directly useable by ordinary "
+"people."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:44
+msgid "This is the command line reference. Please read the tutorial(s):"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:46
+#, no-wrap
+msgid "dgit-user(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:46
+#, no-wrap
+msgid "for users: edit, build and share packages"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:47
+#, no-wrap
+msgid "dgit-nmu-simple(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:47
+#, no-wrap
+msgid "for DDs: do a straightforward NMU"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:48
+#, no-wrap
+msgid "dgit-maint-native(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:48
+#, no-wrap
+msgid "for maintainers of Debian-native packages"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:49
+#, no-wrap
+msgid "dgit-maint-debrebase(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:49
+#, no-wrap
+msgid "for maintainers: a pure-git rebasish workflow"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:50
+#, no-wrap
+msgid "dgit-maint-merge(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:50
+#, no-wrap
+msgid "for maintainers: a pure-git merging workflow"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:51
+#, no-wrap
+msgid "dgit-maint-gbp(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:51
+#, no-wrap
+msgid "for maintainers already using git-buildpackage"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:52
+#, no-wrap
+msgid "dgit-sponsorship(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:52
+#, no-wrap
+msgid "for sponsors and sponsored contributors"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:53
+#, no-wrap
+msgid "dgit-downstream-dsc(7)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:53
+#, no-wrap
+msgid "setting up dgit push for a new distro"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:60
+msgid ""
+"See B<dgit(7)> for detailed information about the data model, common "
+"problems likely to arise with certain kinds of package, etc."
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:60
+#, no-wrap
+msgid "OPERATIONS"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:61
+#, no-wrap
+msgid "B<dgit clone> I<package> [I<suite>] [B<./>I<dir|>B</>I<dir>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:74
+msgid ""
+"Consults the archive and dgit-repos to construct the git view of history for "
+"I<package> in I<suite> (B<sid> by default) in a new directory (named B<./"
+">I<package> by default); also, downloads any necessary orig tarballs."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:85
+msgid ""
+"The suite's git tip is left on the local branch B<dgit/>I<suite> ready for "
+"work, and on the corresponding dgit remote tracking branch. The B<origin> "
+"remote will be set up to point to the package's dgit-repos tree for the "
+"distro to which I<suite> belongs."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:90
+msgid ""
+"I<suite> may be a combination of several underlying suites in the form "
+"I<mainsuite>B<,>I<subsuite>...; see COMBINED SUITES in dgit(7)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:97
+msgid ""
+"For your convenience, the B<vcs-git> remote will be set up from the "
+"package's Vcs-Git field, if there is one - but note that in the general case "
+"the history found there may be different to or even disjoint from dgit's "
+"view. (See also dgit update-vcs-git.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:97
+#, no-wrap
+msgid "B<dgit fetch> [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:110
+msgid ""
+"Consults the archive and git-repos to update the git view of history for a "
+"specific suite (and downloads any necessary orig tarballs), and updates the "
+"remote tracking branch B<remotes/dgit/dgit/>I<suite>. If the current branch "
+"is B<dgit/>I<suite> then dgit fetch defaults to I<suite>; otherwise it "
+"parses debian/changelog and uses the suite specified there. suite may be a "
+"combined suite, as for clone."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:110
+#, no-wrap
+msgid "B<dgit pull> [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:116
+msgid ""
+"Does dgit fetch, and then merges the new head of the remote tracking branch "
+"B<remotes/dgit/dgit/>I<suite> into the current branch."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:116
+#, no-wrap
+msgid "B<dgit checkout> I<suite>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:120
+msgid "Checks out the local branch B<dgit/>I<suite>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:127
+msgid ""
+"If the branch does not exist, dgit checkout creates it, and sets it up the "
+"same way as dgit clone would. In that case, if the archive remote tracking "
+"branch does not exist, dgit checkout will do a dgit fetch first."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:132
+msgid ""
+"NB: dgit checkout will only do a fetch if it has to. If you already have "
+"the suite branch, and want to merge your branch with updates from the "
+"archive, use dgit pull."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:137
+msgid ""
+"dgit checkout will normally need to aceess the archive server, to "
+"canonicalise the provided suite name. The exception is if you specify the "
+"canonical name, and the branch (or tracking branch) already exists."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:137
+#, no-wrap
+msgid "B<dgit build> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:146
+msgid ""
+"Runs B<dpkg-buildpackage> with some suitable options. Options and arguments "
+"after build will be passed on to dpkg-buildpackage. It is not necessary to "
+"use dgit build when using dgit; it is OK to use any approach which ensures "
+"that the generated source package corresponds to the relevant git commit."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:148 ../dgit.1:200 ../dgit.1:240
+msgid "Tagging, signing and actually uploading should be left to dgit push."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:152
+msgid ""
+"dgit's build operations access the the network, to get the -v option right. "
+"See -v, below."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:152
+#, no-wrap
+msgid "B<dgit build-source> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:161
+msgid ""
+"Builds the source package, and a changes file for a prospective source-only "
+"upload, using B<dpkg-source>. The output is left in "
+"I<package>B<_>I<version>B<.dsc> and I<package>B<_>I<version>B<_source."
+"changes>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:164
+msgid ""
+"Tagging, signing and actually uploading should be left to dgit push-source, "
+"or dgit push."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:164
+#, no-wrap
+msgid "B<dgit clean>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:168
+msgid ""
+"Cleans the current working tree (according to the --clean= option in force)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:168
+#, no-wrap
+msgid "B<dgit update-vcs-git> [I<suite>|B<.>] [B<-->] [I<git fetch options>]"
+msgstr ""
+
+#. type: TQ
+#: ../dgit.1:170
+#, no-wrap
+msgid "B<dgit update-vcs-git> [I<suite|>B<.>] B<->"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:175
+msgid ""
+"Sets up, or updates the url of, the vcs-git remote, and (unless B<-> was "
+"specified) runs git fetch on it."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:182
+msgid ""
+"By default, the Vcs-Git field of the .dsc from Debian sid is used, as that "
+"is probably most up to date. Another suite may be specified, or B<.> to "
+"indicate that the Vcs-Git of the cwd's debian/control should be used instead."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:182
+#, no-wrap
+msgid "B<dgit help>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:185 ../dgit.1:1123
+msgid "Print a usage summary."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:185
+#, no-wrap
+msgid "B<dgit sbuild> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:194
+msgid ""
+"Constructs the source package, uses B<sbuild> to do a binary build, and uses "
+"mergechanges to merge the source and binary changes files. Options and "
+"arguments after sbuild will be passed on to sbuild. The output is left in "
+"I<package>B<_>I<version>B<_multi.changes>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:198
+msgid ""
+"Note that by default sbuild does not build arch-independent packages. You "
+"probably want to pass -A, to request those."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:200
+#, no-wrap
+msgid "B<dgit pbuilder> [I<debbuildopts>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:208
+msgid ""
+"Constructs the source package, uses B<pbuilder> to do a binary build, and "
+"uses mergechanges to merge the source and binary changes files. The output "
+"is left in I<package>B<_>I<version>B<_multi.changes>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:211
+msgid ""
+"You should ensure that your dgit --build-products-dir setting matches your "
+"pbuilder --buildresult."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:217
+msgid ""
+"The I<debbuildopts> are passed to pbuilder using its --debbuildopts option. "
+"If you want to pass other options to pbuilder, use the B<--pbuilder:> dgit "
+"option as described below (remember that dgit options should appear between "
+"B<dgit> and B<pbuilder>)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:223
+msgid ""
+"You should ensure that in your pbuilderrc you do B<not> have the setting "
+"B<SOURCE_ONLY_CHANGES=yes> as this may cause trouble."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:223
+#, no-wrap
+msgid "B<dgit cowbuilder> [I<debbuildopts>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:229
+msgid "Like B<dgit pbuilder>, but uses B<cowbuilder> instead of B<pbuilder.>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:229
+#, no-wrap
+msgid "B<dgit gbp-build> ..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:235
+msgid ""
+"Runs B<git-buildpackage> with some suitable options. Options and arguments "
+"after gbp-build will be passed on to git-buildpackage."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:238
+msgid ""
+"By default this uses --quilt=gbp, so HEAD should be a git-buildpackage style "
+"branch, not a patches-applied branch."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:240
+#, no-wrap
+msgid "B<dgit push> [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:249
+msgid ""
+"Does an `upload', pushing the current HEAD to the archive (as a source "
+"package) and to dgit-repos (as git commits). The package must already have "
+"been built ready for upload, with the .dsc and .changes left in the parent "
+"directory. It is normally best to do the build with dgit too (eg with dgit "
+"sbuild): some existing build tools pass unhelpful options to dpkg-source et "
+"al by default, which can result in the built source package not being "
+"identical to the git tree."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:259
+msgid ""
+"In more detail: dgit push checks that the current HEAD corresponds to the ."
+"dsc. It then pushes the HEAD to the suite's dgit-repos branch, adjusts the ."
+"changes to include any .origs which the archive lacks and exclude .origs "
+"which the archive has (so -sa and -sd are not needed when building for dgit "
+"push), makes a signed git tag, edits the .dsc to contain the dgit metadata "
+"field, runs debsign to sign the upload (.dsc and .changes), pushes the "
+"signed tag, and finally uses dput to upload the .changes to the archive."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:263
+msgid ""
+"dgit push always uses the package, suite and version specified in the debian/"
+"changelog and the .dsc, which must agree. If the command line specifies a "
+"suite then that must match too."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:268
+msgid ""
+"When used on a git-debrebase branch, dgit calls git-debrebase to prepare the "
+"branch for source package upload and push."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:268
+#, no-wrap
+msgid "B<dgit push-source> [I<suite>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:273
+msgid ""
+"Without B<-C>, builds a source package and dgit pushes it. Saying B<dgit "
+"push-source> is like saying \"update the source code in the archive to match "
+"my git HEAD, and let the autobuilders do the rest.\""
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:276
+msgid ""
+"With B<-C>, performs a dgit push, additionally ensuring that no binary "
+"packages are uploaded."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:276
+#, no-wrap
+msgid "B<dgit rpush> I<build-host>B<:>I<build-dir> [I<push args...>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:283
+msgid ""
+"Pushes the contents of the specified directory on a remote machine. This is "
+"like running dgit push on build-host with build-dir as the current "
+"directory; however, signing operations are done on the invoking host. This "
+"allows you to do a push when the system which has the source code and the "
+"build outputs has no access to the key:"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:286 ../dgit-maint-merge.7.pod:446
+#, no-wrap
+msgid "1."
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:286
+#, no-wrap
+msgid "Clone on build host (dgit clone)"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:287 ../dgit-maint-merge.7.pod:450
+#, no-wrap
+msgid "2."
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:287
+#, no-wrap
+msgid "Edit code on build host (edit, git commit)"
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:288 ../dgit-maint-merge.7.pod:455
+#, no-wrap
+msgid "3."
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:288
+#, no-wrap
+msgid "Build package on build host (dgit build)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:289
+#, no-wrap
+msgid "4."
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:289
+#, no-wrap
+msgid "Test package on build host or elsewhere (dpkg -i, test)"
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:290
+#, no-wrap
+msgid "5."
+msgstr ""
+
+#. type: tbl table
+#: ../dgit.1:290
+#, no-wrap
+msgid "Upload by invoking dgit rpush on host with your GPG key."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:296
+msgid ""
+"However, the build-host must be able to ssh to the dgit repos. If this is "
+"not already the case, you must organise it separately, for example by the "
+"use of ssh agent forwarding."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:299
+msgid ""
+"The remaining arguments are treated just as dgit push would handle them."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:304
+msgid ""
+"build-host and build-dir can be passed as separate arguments; this is "
+"assumed to be the case if the first argument contains no : (except perhaps "
+"one in [ ], to support IPv6 address literals)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:308
+msgid ""
+"You will need similar enough versions of dgit on the build-host and the "
+"invocation host. The build-host needs gnupg installed, with your public key "
+"in its keyring (but not your private key, obviously)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:308
+#, no-wrap
+msgid "B<dgit setup-new-tree>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:324
+msgid ""
+"Configure the current working tree the way that dgit clone would have set it "
+"up. Like running B<dgit setup-useremail>, B<setup-mergechangelogs> and "
+"B<setup-gitattributes> (but only does each thing if dgit is configured to do "
+"it automatically). You can use these in any git repository, not just ones "
+"used with the other dgit operations. Does B<not> run B<update-vcs-git> (as "
+"that requires Debian packaging information)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:324
+#, no-wrap
+msgid "B<dgit setup-useremail>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:330
+msgid ""
+"Set the working tree's user.name and user.email from the distro-specific "
+"dgit configuration (B<dgit-distro.>I<distro>B<.user-name> and B<.user-"
+"email>), or DEBFULLNAME or DEBEMAIL."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:330
+#, no-wrap
+msgid "B<dgit setup-mergechangelogs>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:336
+msgid ""
+"Configures a git merge helper for the file B<debian/changelog> which uses "
+"B<dpkg-mergechangelogs>."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:336
+#, no-wrap
+msgid "B<dgit setup-gitattributes>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:351
+msgid ""
+"Set up the working tree's B<.git/info/attributes> to disable all "
+"transforming attributes for all files. This is done by defining a macro "
+"attribute B<dgit-defuse-attrs> and applying it to B<*>. For why, see "
+"B<GITATTRIBUTES> in B<dgit(7)>. Note that only attributes affecting the "
+"working tree are suppressed. git-archive may remain exciting."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:359
+msgid ""
+"If there is an existing macro attribute line B<[attr]dgit-defuse-attrs> in ."
+"git/info/attributes, but it is insufficient, because it was made by an "
+"earlier version of dgit and git has since introduced new transforming "
+"attributes, modifies the macro to disable the newer transformations."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:370
+msgid ""
+"(If there is already a macro attribute line B<[attr]dgit-defuse-attrs> in ."
+"git/info/attributes which does what dgit requires (whatever files it "
+"effects), this operation does nothing further. This fact can be used to "
+"defeat or partially defeat dgit setup-gitattributes and hence dgit setup-new-"
+"tree.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:370
+#, no-wrap
+msgid "B<dgit quilt-fixup>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:377
+msgid ""
+"`3.0 (quilt)' format source packages need changes representing not only in-"
+"tree but also as patches in debian/patches. dgit quilt-fixup checks whether "
+"this has been done; if not, dgit will make appropriate patches in debian/"
+"patches and also commit the resulting changes to git."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:379
+msgid "This is normally done automatically by dgit build and dgit push."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:385
+msgid ""
+"dgit will try to turn each relevant commit in your git history into a new "
+"quilt patch. dgit cannot convert nontrivial merges, or certain other kinds "
+"of more exotic history. If dgit can't find a suitable linearisation of your "
+"history, by default it will fail, but you can ask it to generate a single "
+"squashed patch instead."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:394
+msgid ""
+"When used with a git-debrebase branch, dgit will ask git-debrebase to "
+"prepare patches. However, dgit can make patches in some situations where "
+"git-debrebase fails, so dgit quilt-fixup can be useful in its own right. To "
+"always use dgit's own patch generator instead of git-debrebase make-patches, "
+"pass --git-debrebase=true to dgit."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:399
+msgid "See B<FORMAT 3.0 (QUILT)> in B<dgit(7)>."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:399
+#, no-wrap
+msgid "B<dgit import-dsc> [I<sub-options>] I<../path/to/.dsc> [B<+>|B<..>]branch"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:405
+msgid ""
+"Import a Debian-format source package, specified by its .dsc, into git, the "
+"way dgit fetch would do."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:416
+msgid ""
+"This does about half the work of dgit fetch: it will convert the .dsc into a "
+"new, orphan git branch. Since dgit has no access to a corresponding source "
+"package archive or knowledge of the history it does not consider whether "
+"this version is newer than any previous import or corresponding git "
+"branches; and it therefore does not make a pseudomerge to bind the import "
+"into any existing git history."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:426
+msgid ""
+"Because a .dsc can contain a Dgit field naming a git commit (which you might "
+"not have), and specifying where to find that commit (and any history rewrite "
+"table), import-dsc might need online access. If this is a problem (or "
+"dgit's efforts to find the commit fail), consider --no-chase-dsc-distro or --"
+"force-import-dsc-with-dgit-field."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:428
+msgid "There is only only sub-option:"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:434
+msgid ""
+"B<--require-valid-signature> causes dgit to insist that the signature on "
+"the .dsc is valid (using the same criteria as dpkg-source -x). Otherwise, "
+"dgit tries to verify the signature but the outcome is reported only as "
+"messages to stderr."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:453
+msgid ""
+"If I<branch> is prefixed with B<+> then if it already exists, it will be "
+"simply ovewritten, no matter its existing contents. If I<branch> is "
+"prefixed with B<..> then if it already exists and dgit actually imports the "
+"dsc (rather than simply reading the git commit out of the Dgit field), dgit "
+"will make a pseudomerge so that the result is necessarily fast forward from "
+"the existing branch. Otherwise, if branch already exists, dgit will stop "
+"with an error message."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:457
+msgid "If I<branch> does not start with refs/, refs/heads/ is prepended."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:457
+#, no-wrap
+msgid "B<dgit version>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:460
+msgid "Prints version information and exits."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:460
+#, no-wrap
+msgid "B<dgit clone-dgit-repos-server>I< destdir>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:464
+msgid ""
+"Tries to fetch a copy of the source code for the dgit-repos-server, as "
+"actually being used on the dgit git server, as a git tree."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:464
+#, no-wrap
+msgid "B<dgit print-dgit-repos-server-source-url>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:469
+msgid ""
+"Prints the url used by dgit clone-dgit-repos-server. This is hopefully "
+"suitable for use as a git remote url. It may not be useable in a browser."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:469
+#, no-wrap
+msgid "B<dgit print-dpkg-source-ignores>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:476
+msgid ""
+"Prints the -i and -I arguments which must be passed to dpkg-souce to cause "
+"it to exclude exactly the .git diredcory and nothing else. The separate "
+"arguments are unquoted, separated by spaces, and do not contain spaces."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:476
+#, no-wrap
+msgid "B<dgit print-unapplied-treeish>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:487
+msgid ""
+"Constructs a tree-ish approximating the patches-unapplied state of your 3.0 "
+"(quilt) package, and prints the git object name to stdout. This requires "
+"appropriate .orig tarballs. This tree object is identical to your .origs as "
+"regards upstream files. The contents of the debian subdirectory is not "
+"interesting and should not be inspected; except that debian/patches will be "
+"identical to your HEAD."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:494
+msgid ""
+"To make this operate off-line, the access configuration key which is used to "
+"determine the build-products-dir is the uncanonicalised version of the suite "
+"name from the changelog, or (of course) dgit.default.build-products-dir. "
+"See ACCESS CONFIGURATION, below."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:496
+msgid "This function is primarily provided for the benefit of git-debrebase."
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:496 ../git-debrebase.1.pod:441
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:497
+#, no-wrap
+msgid "B<--dry-run> | B<-n>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:503
+msgid ""
+"Go through the motions, fetching all information needed, but do not actually "
+"update the output(s). For push, dgit does the required checks and leaves "
+"the new .dsc in a temporary file, but does not sign, tag, push or upload."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:503
+#, no-wrap
+msgid "B<--damp-run> | B<-L>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:508
+msgid ""
+"Go through many more of the motions: do everything that doesn't involve "
+"either signing things, or making changes on the public servers."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:508
+#, no-wrap
+msgid "B<-k>I<keyid>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:517
+msgid ""
+"Use I<keyid> for signing the tag and the upload. The default comes from the "
+"distro's B<keyid> config setting (see CONFIGURATION, below), or failing "
+"that, the uploader trailer line in debian/changelog."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:517
+#, no-wrap
+msgid "B<--no-sign>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:520
+msgid "does not sign tags or uploads (meaningful only with push)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:521
+#, no-wrap
+msgid "B<-p>I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:527
+msgid ""
+"Specifies that we should process source package I<package> rather than "
+"looking in debian/control or debian/changelog. Valid with dgit fetch and "
+"dgit pull, only."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:527
+#, no-wrap
+msgid "B<--clean=git> | B<-wg>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:533
+msgid ""
+"Use B<git clean -xdf> to clean the working tree, rather than running the "
+"package's rules clean target."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:536
+msgid ""
+"This will delete all files which are not tracked by git. (Including any "
+"files you forgot to git add.)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:541
+msgid ""
+"B<--clean=>I<...> options other than dpkg-source are useful when the "
+"package's clean target is troublesome, or to avoid needing the build-"
+"dependencies."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:541
+#, no-wrap
+msgid "B<--clean=git-ff> | B<-wgf>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:550
+msgid ""
+"Use B<git clean -xdff> to clean the working tree. Like git clean -xdf but "
+"it also removes any subdirectories containing different git trees (which "
+"only unusual packages are likely to create)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:550
+#, no-wrap
+msgid "B<--clean=check> | B<-wc>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:556
+msgid ""
+"Merely check that the tree is clean (does not contain uncommitted files). "
+"Avoids running rules clean, and can avoid needing the build-dependencies."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:556
+#, no-wrap
+msgid "B<--clean=none> | B<-wn>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:564
+msgid ""
+"Do not clean the tree, nor check that it is clean. Avoids running rules "
+"clean, and can avoid needing the build-dependencies. If there are files "
+"which are not in git, or if the build creates such files, a subsequent dgit "
+"push will fail."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:564
+#, no-wrap
+msgid "B<--clean=dpkg-source> | B<-wd>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:570
+msgid ""
+"Use dpkg-buildpackage to do the clean, so that the source package is cleaned "
+"by dpkg-source running the package's clean target. This is the default. "
+"Requires the package's build dependencies."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:570
+#, no-wrap
+msgid "B<--clean=dpkg-source-d> | B<-wdd>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:580
+msgid ""
+"Use B<dpkg-buildpackage -d> to do the clean, so that the source package is "
+"cleaned by dpkg-source running the package's clean target. The build-"
+"dependencies are not checked (due to B<-d>), which violates policy, but may "
+"work in practice."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:580
+#, no-wrap
+msgid "B<-N> | B<--new>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:586
+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 "
+"any packages which have been newly pushed and have not yet been published."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:586
+#, no-wrap
+msgid "B<--include-dirty>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:594
+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 "
+"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.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:594
+#, no-wrap
+msgid "B<--ignore-dirty>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:597
+msgid "Deprecated alias for --include-dirty."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:597
+#, no-wrap
+msgid "B<--overwrite>[=I<previous-version>]"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:608
+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-"
+"version>. This promise is needed when your git branch is not a descendant "
+"of the version in the archive according to the git revision history."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:615
+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:619
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:625
+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:639
+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 "
+"changes, even with B<--overwrite>, unless someone committed to git a "
+"finalised changelog entry, and then made later changes to that version.) If "
+"I<previous-version> is specified, it ought to be the version currently in "
+"the archive."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:645
+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 "
+"archive's version into your own git history, so that your push is a fast "
+"forward from the archive."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:650
+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.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:650
+#, no-wrap
+msgid "B<--delayed>=I<days>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:653
+msgid "Upload to a DELAYED queue."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:663
+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 "
+"git branch on the dgit git server. Other dgit users will then see your push "
+"(with a warning message from dgit) even though the maintainer wanted to "
+"abolish it. Such users might unwittingly reintroduce your changes."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:668
+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:668
+#, no-wrap
+msgid "B<--no-chase-dsc-distro>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:674
+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:684
+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 "
+"with, even if the .dsc was copied verbatim from another distro. For import-"
+"dsc, disabling chasing means dgit will work completely offline."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:692
+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 "
+"that rewrite from being effective. Also, it can mean that dgit fails to "
+"find necessary git commits."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:692
+#, no-wrap
+msgid "B<--save-dgit-view=>I<branch>|I<ref>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:702
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:709
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:713
+msgid ""
+"If ref does not start with refs/ it is taken to to be a branch - i.e. refs/"
+"heads/ is prepended."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:717
+msgid "B<--dgit-view-save> is a deprecated alias for --save-dgit-view."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:717
+#, no-wrap
+msgid "B<--deliberately->I<something>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:731
+msgid ""
+"Declare that you are deliberately doing I<something>. This can be used to "
+"override safety catches, including safety catches which relate to distro-"
+"specific policies. The use of --deliberately is declared and published in "
+"the signed tags generated for you by dgit, so that the archive software can "
+"give effect to your intent, and for the benefit humans looking at the "
+"history. The meanings of I<something>s understood in the context of Debian "
+"are discussed below:"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:731
+#, no-wrap
+msgid "B<--deliberately-not-fast-forward>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:737
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:748
+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."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:748
+#, no-wrap
+msgid "B<--deliberately-include-questionable-history>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:757
+msgid ""
+"Declare that you are deliberately including, in the git history of your "
+"current push, history which contains a previously-submitted version of this "
+"package which was not approved (or has not yet been approved) by the "
+"ftpmasters. When pushing to Debian, only use this option after verifying "
+"that: none of the rejected-from-NEW (or never-accepted) versions in the git "
+"history of your current push, were rejected by ftpmaster for copyright or "
+"redistributability reasons."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:757
+#, no-wrap
+msgid "B<--deliberately-fresh-repo>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:762
+msgid ""
+"Declare that you are deliberately rewinding 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:762
+#, no-wrap
+msgid "B<--quilt=linear>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:769
+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 "
+"cannot be generated, fail. This is the default for Debian."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:774
+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:774
+#, no-wrap
+msgid "B<--quilt=auto>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:783
+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 "
+"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:783
+#, no-wrap
+msgid "B<--quilt=smash>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:788
+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 "
+"for an NMU in Debian."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:794
+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 "
+"not change the upstream version nor make changes in debian/patches, it will "
+"remain true.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:794
+#, no-wrap
+msgid "B<--quilt=nofix>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:802
+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 "
+"before pushing. (NB that dpkg-source --commit will not work because the "
+"dgit git tree does not have a B<.pc> directory.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:802
+#, no-wrap
+msgid "B<--quilt=nocheck> | B<--no-quilt-fixup>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:807
+msgid ""
+"Do not check whether up 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."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:807
+#, no-wrap
+msgid "B<-->[B<quilt=>]B<gbp> | B<-->[B<quilt=>]B<dpm> | B<--quilt=unapplied>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:814
+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:822
+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 "
+"contain changes to upstream .gitignore files. This is the default for dgit "
+"gbp-build."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:830
+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 "
+"changes to upstream .gitignore files."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:835
+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 "
+"patches in debian/patches)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:853
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:862
+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 "
+"patches-unapplied git branch of a package with one patch, for example, looks "
+"very like a patches-applied branch where the user has used git revert to "
+"undo the patch, expecting to actually revert it. However, if you fail to "
+"specify the right --quilt option, and you aren't too lucky, dgit will notice "
+"the problem and stop, with a useful hint."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:862
+#, no-wrap
+msgid "B<-d>I<distro> | B<--distro=>I<distro>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:871
+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-"
+"suite.>I<suite>B<.distro>. The only effect is that other configuration "
+"variables (used for accessing the archive and dgit-repos) used are B<dgit-"
+"distro.>I<distro>B<.*>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:877
+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 "
+"suite. For example, specifying B<-ddebian> will work when the suite is an "
+"unknown suite in the Debian archive."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:882
+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 "
+"archive and in dgit-repos. How to set this up is not yet documented."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:882
+#, no-wrap
+msgid "B<-C>I<changesfile>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:887
+msgid ""
+"Specifies the .changes file which is to be uploaded. By default dgit push "
+"looks for single .changes file in the parent directory whose filename "
+"suggests it is for the right package and version."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:896
+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 "
+"changes file is expected in that directory (by default, in B<..>)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:896
+#, no-wrap
+msgid "B<--rm-old-changes>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:908
+msgid ""
+"When doing a build, delete any changes files matching "
+"I<package>B<_>I<version>B<_*.changes> before starting. This ensures that "
+"dgit push (and dgit sbuild) will be able to unambigously identify the "
+"relevant changes files from the most recent build, even if there have been "
+"previous builds with different tools or options. The default is not to "
+"remove, but B<--no-rm-old-changes> can be used to override a previous --rm-"
+"old-changes or the .rm-old-changes configuration setting."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:911
+msgid ""
+"Note that B<dgit push-source> will always find the right .changes, "
+"regardless of this option."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:911
+#, no-wrap
+msgid "B<--build-products-dir=>I<directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:915
+msgid ""
+"Specifies where to find and create tarballs, binry packages, source "
+"packages, .changes files, and so on."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:918
+msgid "By default, dgit uses the parent directory (B<..>)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:927
+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-"
+"dir> configuration setting (see CONFIGURATION, below) which this command "
+"line option overrides)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:927
+#, no-wrap
+msgid "B<--no-rm-on-error>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:930
+msgid "Do not delete the destination directory if clone fails."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:930
+#, no-wrap
+msgid "B<--dep14tag>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:937
+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."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:937
+#, no-wrap
+msgid "B<--no-dep14tag>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:943
+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.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:943
+#, no-wrap
+msgid "B<--dep14tag-always>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:948
+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."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:948
+#, no-wrap
+msgid "B<-D>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:952
+msgid ""
+"Prints debugging information to stderr. Repeating the option produces more "
+"output (currently, up to -DDDD is meaningfully different)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:952
+#, no-wrap
+msgid "B<-c>I<name>B<=>I<value>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:956
+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:956
+#, no-wrap
+msgid "B<-v>I<version>|B<_> | B<--since-version=>versionI<|>B<_>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:965
+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 "
+"in the built changes file, and hence in the upload. If this option is not "
+"specified, dgit will query the archive and use the latest version uploaded "
+"to the intended suite."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:971
+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 "
+"be used for the build and upload)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:971
+#, no-wrap
+msgid "B<-m>I<maintaineraddress>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:974
+msgid "Passed to dpkg-genchanges (eventually)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:974
+#, no-wrap
+msgid "B<--ch:>I<option>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:978
+msgid ""
+"Specifies a single additional option to pass, eventually, to dpkg-genchanges."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:985
+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 "
+"automatically calculates whether .origs need to be uploaded.)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:987
+msgid "For other options the caveat below applies."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:987
+#, no-wrap
+msgid "B<--curl:>I<option> | B<--dput:>I<option> |..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1009
+msgid ""
+"Specifies a single additional option to pass to B<curl>, B<dput>, "
+"B<debsign>, B<dpkg-source>, B<dpkg-buildpackage>, B<dpkg-genchanges>, "
+"B<sbuild>, B<pbuilder>, B<cowbuilder>, B<ssh>, B<dgit>, B<git-debrebase>, "
+"B<apt-get>, B<apt-cache>, B<gbp-pq>, B<gbp-build>, or B<mergechanges>. Can "
+"be repeated as necessary."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1017
+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, "
+"you may violate dgit's assumptions about the behaviour of its subprograms "
+"and cause lossage."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1022
+msgid ""
+"For dpkg-buildpackage, dpkg-genchanges, mergechanges and sbuild, the option "
+"applies only when the program is invoked directly by dgit. Usually, for "
+"passing options to dpkg-genchanges, you should use B<--ch:>I<option>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1026
+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 "
+"program run by dgit."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1028
+msgid "See notes below regarding ssh and dgit."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1036
+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:1036
+#, no-wrap
+msgid "B<--curl=>I<program> | B<--dput=>I<program> |..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1059
+msgid ""
+"Specifies alternative programs to use instead of B<curl>, B<dput>, "
+"B<debsign>, B<dpkg-source>, B<dpkg-buildpackage>, B<dpkg-genchanges>, "
+"B<sbuild>, B<pbuilder>, B<cowbuilder>, B<gpg>, B<ssh>, B<dgit>, B<git-"
+"debrebase>, B<apt-get>, B<apt-cache>, B<git>, B<gbp-pq>, B<gbp-build>, or "
+"B<mergechanges>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1067
+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:1074
+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 "
+"EDITOR for dpkg-source --commit; this is done using argv[0], and is not "
+"affected by --dgit=)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1085
+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 "
+"is used instead of gbp pq. In both cases, unusually, the specified value is "
+"split on whitespace to produce a command and possibly some options and/or "
+"arguments."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1093
+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 "
+"value is split on whitespace."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1110
+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 "
+"archive and dgit-repos, this command line setting is overridden by the git "
+"config variables B<dgit-distro.>I<distro>B<.ssh> and B<.dgit.default.ssh> "
+"(which can in turn be overridden with -c). Also, when dgit is using git to "
+"access dgit-repos, only git's idea of what ssh to use (eg, B<GIT_SSH>) is "
+"relevant."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1110
+#, no-wrap
+msgid "B<--existing-package=>I<package>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1120
+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 "
+"package. Without --new we can just use the package we are trying to push. "
+"But with --new that will not work, so we guess B<dpkg> or use the value of "
+"this option. This option is not needed with the default mechanisms for "
+"accessing the archive."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1120
+#, no-wrap
+msgid "B<-h>|B<--help>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1123
+#, no-wrap
+msgid "B<--initiator-tempdir=>I<directory>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1132
+msgid ""
+"dgit rpush uses a temporary directory on the invoking (signing) host. This "
+"option causes dgit to use I<directory> instead. Furthermore, the specified "
+"directory will be emptied, removed and recreated before dgit starts, rather "
+"than removed after dgit finishes. The directory specified must be an "
+"absolute pathname."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1132
+#, no-wrap
+msgid "B<--force->I<something>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1140
+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 "
+"are provided as an escape hatch, in case dgit is confused. (They might also "
+"be useful for testing error cases.)"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1140
+#, no-wrap
+msgid "B<--force-import-dsc-with-dgit-field>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1147
+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 "
+"pushed that .dsc was working with."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1147
+#, no-wrap
+msgid "B<--force-uploading-binaries>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1152
+msgid ""
+"Carry on and upload binaries even though dgit thinks your distro does not "
+"permit that."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1152
+#, no-wrap
+msgid "B<--force-uploading-source-only>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1158
+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 "
+"situation."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1158
+#, no-wrap
+msgid "B<--force-unrepresentable>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1165
+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 "
+"build or push will probably fail later."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1165
+#, no-wrap
+msgid "B<--force-changes-origs-exactly>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1170
+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:1170
+#, no-wrap
+msgid "B<--force-unsupported-source-format>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1174
+msgid ""
+"Carry on despite dgit not understanding your source package format. dgit "
+"will probably mishandle it."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1174
+#, no-wrap
+msgid "B<--force-dsc-changes-mismatch>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1178
+msgid ""
+"Do not check whether .dsc and .changes match. The archive will probably "
+"reject your upload."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1178
+#, no-wrap
+msgid "B<--force-import-gitapply-absurd> | B<--force-import-gitapply-no-absurd>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1184
+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: =head1
+#: ../dgit.1:1184 ../dgit-downstream-dsc.7.pod:150
+#, no-wrap
+msgid "CONFIGURATION"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1190
+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<-"
+"c>I<key>B<=>I<value> on the dgit command line."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1192
+msgid "Settings likely to be useful for an end user include:"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1192
+#, no-wrap
+msgid "B<dgit.default.build-products-dir>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1198
+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:1198 ../dgit-downstream-dsc.7.pod:286
+#, no-wrap
+msgid "B<dgit-suite.>I<suite>B<.distro> I<distro>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1203
+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 "
+"involved. The config used is thereafter that for the distro."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1206
+msgid "I<suite> may be a glob pattern."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1206
+#, no-wrap
+msgid "B<dgit.default.distro>I< distro>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1209
+msgid "The default distro for an unknown suite."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1209
+#, no-wrap
+msgid "B<dgit.default.default-suite>I< suite>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1212
+msgid "The default suite (eg for clone)."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1212
+#, no-wrap
+msgid "B<dgit.default.>*"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1217
+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:1217
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.clean-mode>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1221
+msgid ""
+"One of the values for the command line --clean= option; used if --clean is "
+"not specified."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1221
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.quilt-mode>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1225
+msgid ""
+"One of the values for the command line --quilt= option; used if --quilt is "
+"not specified."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1225
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.rm-old-changes>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1229
+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:1229
+#, 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:1236
+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, "
+"setting this to false will avoid relying on the mirror of the dgit git "
+"repository server."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1236
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.keyid>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1240
+msgid "See also B<-k>."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1240
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.mirror>I< url>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1242
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.username>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1245
+msgid "Not relevant for Debian."
+msgstr ""
+
+#. type: =item
+#: ../dgit.1:1245 ../dgit-downstream-dsc.7.pod:242
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.upload-host>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1248
+msgid "Might be useful if you have an intermediate queue server."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1248
+#, 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:1253
+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, "
+"respectively. Only used if .setup-usermail is not disabled."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1253
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.setup-useremail>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1257
+msgid ""
+"Whether to set user.name and user.email in new git trees. True by default. "
+"Ignored for dgit setup-setup-useremail, which does it anyway."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1257
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.setup-mergechangelogs>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1262
+msgid ""
+"Whether to setup a merge driver which uses dpkg-mergechangelogs for debian/"
+"changelog. True by default. Ignored for dgit setup-mergechangelogs, which "
+"does it anyway."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1262
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.setup-gitattributes>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1268
+msgid ""
+"Whether to configure .git/info/attributes to suppress checkin/checkout file "
+"content transformations in new git trees. True by default. Ignored for "
+"dgit setup-gitattributes, which does it anyway."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1268
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.cmd->I<cmd>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1274
+msgid "Program to use instead of I<cmd>. Works like B<-->I<cmd>B<=>... ."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1274
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.opts->I<cmd>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1285
+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 --"
+"add). The options for B<dgit.default.opts->I<cmd> B<dgit-distro."
+">I<distro>B</push.opts->I<cmd> and are all used, followed by options from "
+"dgit's command line."
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:1285
+#, no-wrap
+msgid "ACCESS CONFIGURATION"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1290
+msgid ""
+"There are many other settings which specify how a particular distro's "
+"services (archive and git) are provided. These should not normally be "
+"adjusted, but are documented for the benefit of distros who wish to adopt "
+"dgit."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1290
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.nominal-distro>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1293
+msgid "Shown in git tags, Dgit fields, and so on."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1293
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.alias-canon>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1296
+msgid "Used for all access configuration lookup."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1296
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B</push.>*"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1302
+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:1302
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-url>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1304
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-url>[B<-suffix>]"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1306
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-proto>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1308
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-path>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1310
+#, 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:1312
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-check-suffix>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1314
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.diverts.divert> B<new-distro>|B</>I<distro-suffix>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1316
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.git-create>I< >B<ssh-cmd>I<|>B<true>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1318
+#, 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>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1320
+#, 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:1322
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.madison-distro>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1324
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.archive-query-default-component>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1326
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.dgit-tag-format>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1328
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.dep14tag> B<want>|B<no>|B<always>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1330
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.ssh>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1332
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.sshpsql-dbname>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1334
+#, 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:1336
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.backports-quirk>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1338
+#, no-wrap
+msgid "B<dgit-distro.>I<distro>B<.rewrite-map-enable>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1340
+#, 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:1342
+#, no-wrap
+msgid "B<dgit.default.old-dsc-distro>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1344
+#, no-wrap
+msgid "B<dgit.dsc-url-proto-ok.>I<protocol>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1346
+#, no-wrap
+msgid "B<dgit.dsc-url-proto-ok.bad-syntax>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1348
+#, no-wrap
+msgid "B<dgit.default.dsc-url-proto-ok>"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1350
+#, no-wrap
+msgid "B<dgit.vcs-git.suites> I<suite>[B<;>...]"
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:1352
+#, no-wrap
+msgid "ENVIRONMENT VARIABLES"
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1353
+#, no-wrap
+msgid "B<DGIT_SSH>, B<GIT_SSH>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1362
+msgid ""
+"specify an alternative default program (and perhaps arguments) to use "
+"instead of ssh. DGIT_SSH is consulted first and may contain arguments; if "
+"it contains any whitespace will be passed to the shell. GIT_SSH specifies "
+"just the program; no arguments can be specified, so dgit interprets it the "
+"same way as git does. See also the --ssh= and --ssh: options."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1362
+#, no-wrap
+msgid "B<DEBEMAIL>, B<DEBFULLNAME>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1366
+msgid ""
+"Default git user.email and user.name for new trees. See B<dgit setup-new-"
+"tree>."
+msgstr ""
+
+#. type: TP
+#: ../dgit.1:1366
+#, no-wrap
+msgid "B<gpg>, B<dpkg->..., B<debsign>, B<git>, B<curl>, B<dput>, B<LWP::UserAgent>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1371
+msgid ""
+"and other subprograms and modules used by dgit are affected by various "
+"environment variables. Consult the documentaton for those programs for "
+"details."
+msgstr ""
+
+#. type: SH
+#: ../dgit.1:1371
+#, no-wrap
+msgid "BUGS"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1378
+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 "
+"stack. It might have to leave a note for a future dgit push."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1384
+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 "
+"available before starting work."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1389
+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 "
+"format. This is ultimately due to what I consider design problems in quilt "
+"and dpkg-source."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1394
+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-"
+"run dgit fetch first will help. --damp-run is likely to work much better."
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.1:1403
+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:1404
+msgid "https://browse.dgit.debian.org/"
+msgstr ""
diff --git a/po4a/dgit_7.pot b/po4a/dgit_7.pot
new file mode 100644
index 0000000..cd5145e
--- /dev/null
+++ b/po4a/dgit_7.pot
@@ -0,0 +1,874 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 01:04+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: TH
+#: ../dgit.1:2 ../dgit.7:1
+#, no-wrap
+msgid "dgit"
+msgstr ""
+
+#. type: TH
+#: ../dgit.1:2 ../dgit.7:1
+#, no-wrap
+msgid "Debian Project"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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
+#, no-wrap
+msgid "SEE ALSO"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:4
+msgid "dgit - principles of operation"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.7:4 ../dgit-user.7.pod:27 ../dgit-nmu-simple.7.pod:35
+#, no-wrap
+msgid "SUMMARY"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:14
+msgid ""
+"B<dgit> treats the Debian archive as a version control system, and "
+"bidirectionally gateways between the archive and git. The git view of the "
+"package can contain the usual upstream git history, and will be augmented by "
+"commits representing uploads done by other developers not using dgit. This "
+"git history is stored in a canonical location known as B<dgit-repos> which "
+"lives on a dedicated git server."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:23
+msgid ""
+"git branches suitable for use with dgit can be edited directly in git, and "
+"used directly for building binary packages. They can be shared using all "
+"conventional means for sharing git branches. It is not necessary to use "
+"dgit to work with dgitish git branches. However, dgit is (usually) needed "
+"in order to convert to or from Debian-format source packages."
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:24
+#, no-wrap
+msgid "B<dgit>(1)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:27
+msgid "Reference manual and documentation catalogue."
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:27
+#, no-wrap
+msgid "B<dgit-*(7)>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:30
+msgid "Tutorials and workflow guides. See dgit(1) for a list."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:30
+#, no-wrap
+msgid "MODEL"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:33
+msgid ""
+"You may use any suitable git workflow with dgit, provided you satisfy dgit's "
+"requirements:"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:38
+msgid ""
+"dgit maintains a pseudo-remote called B<dgit>, with one branch per suite. "
+"This remote cannot be used with plain git."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:45
+msgid ""
+"The B<dgit-repos> repository for each package contains one ref per suite "
+"named B<refs/dgit/>I<suite>. These should be pushed to only by dgit. They "
+"are fast forwarding. Each push on this branch corresponds to an upload (or "
+"attempted upload)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:49
+msgid ""
+"However, it is perfectly fine to have other branches in dgit-repos; normally "
+"the dgit-repos repo for the package will be accessible via the remote name "
+"`origin'."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:55
+msgid ""
+"dgit push will also make signed tags called B<archive/debian/>I<version> "
+"(with version encoded a la DEP-14) and push them to dgit-repos. These are "
+"used at the server to authenticate pushes."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:65
+msgid ""
+"Uploads made by dgit contain an additional field B<Dgit> in the source "
+"package .dsc. (This is added by dgit push.) This specifies: a commit (an "
+"ancestor of the dgit/suite branch) whose tree is identical to the unpacked "
+"source upload; the distro to which the upload was made; a tag name which can "
+"be used to fetch the git commits; and a url to use as a hint for the dgit "
+"git server for that distro."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:77
+msgid ""
+"Uploads not made by dgit are represented in git by commits which are "
+"synthesised by dgit. The tree of each such commit corresponds to the "
+"unpacked source; there is a commit with the contents, and a pseudo-merge "
+"from last known upload - that is, from the contents of the dgit/suite "
+"branch. Depending on the source package format, the contents commit may "
+"have a more complex structure, but ultimately it will be a convergence of "
+"stubby branches from origin commits representing the components of the "
+"source package."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:82
+msgid ""
+"dgit expects trees that it works with to have a B<dgit> (pseudo) remote. "
+"This refers to the dgit-created git view of the corresponding archive."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:91
+msgid ""
+"The dgit archive tracking view is synthesised locally, on demand, by each "
+"copy of dgit. The tracking view is always a descendant of the dgit-repos "
+"suite branch (if one exists), but may be ahead of it if uploads have been "
+"done without dgit. The archive tracking view is always fast forwarding "
+"within each suite."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:94
+msgid ""
+"dgit push can operate on any commit which is a descendant of the suite "
+"tracking branch."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:105
+msgid ""
+"dgit does not make a systematic record of its imports of orig tarball(s). "
+"So it does not work by finding git tags or branches referring to orig "
+"tarball(s). The orig tarballs are downloaded (by dgit clone) into the "
+"parent directory, as with a traditional (non-gitish) dpkg-source workflow. "
+"You need to retain these tarballs in the parent directory for dgit build and "
+"dgit push. (They are not needed for purely-git-based workflows.)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:112
+msgid ""
+"dgit repositories could be cloned with standard (git) methods. However, the "
+"dgit repositories do not contain uploads not made with dgit. And for "
+"sourceful builds / uploads the orig tarball(s) will need to be present in "
+"the parent directory."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:119
+msgid ""
+"To a user looking at the archive, changes pushed in a simple NMU using dgit "
+"look like reasonable changes made in an NMU: in a `3.0 (quilt)' package the "
+"delta from the previous upload is recorded in new patch(es) constructed by "
+"dpkg-source."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:119
+#, no-wrap
+msgid "COMBINED SUITES"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:124
+msgid ""
+"dgit can synthesize a combined view of several underlying suites. This is "
+"requested by specifying, for I<suite,> a comma-separated list:"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:126
+msgid "I<mainsuite>B<,>I<subsuite>..."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:128
+msgid "This facility is available with dgit clone, fetch and pull, only."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:138
+msgid ""
+"dgit will fetch the same package from each specified underlying suite, "
+"separately (as if with dgit fetch). dgit will then generate a pseudomerge "
+"commit on the tracking branch B<remotes/dgit/dgit/>I<suite> which has the "
+"tip of each of the underlying suites as an ancestor, and which contains the "
+"same as the suite which has the highest version of the package."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:141
+msgid ""
+"The package must exist in mainsuite, but need not exist in the subsuites."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:145
+msgid "If a specified subsuite starts with B<-> then mainsuite is prepended."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:153
+msgid ""
+"So, for example, B<stable,-security> means to look for the package in "
+"stable, and stable-security, taking whichever is newer. If stable is "
+"currently jessie, dgit clone would leave you on the branch B<dgit/jessie,-"
+"security>."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:161
+msgid ""
+"Combined suites are not supported by the dgit build operations. This is "
+"because those options are intended for building for uploading source "
+"packages, and look in the changelog to find the relevant suite. It does not "
+"make sense to name a dgit-synthesised combined suite in a changelog, or to "
+"try to upload to it."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:166
+msgid ""
+"When using this facility, it is important to always specify the same suites "
+"in the same order: dgit will not be make a coherent fast-forwarding history "
+"view otherwise."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:170
+msgid ""
+"The history generated by this feature is not normally suitable for merging "
+"back into upstreams, as it necessarily contains unattractive pseudomerges."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:170
+#, no-wrap
+msgid "LIMITATIONS"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:183
+msgid ""
+"Because the synthesis of the suite tracking branches is done locally based "
+"only on the current archive state, it will not necessarily see every upload "
+"not done with dgit. Also, different versions of dgit (or the software it "
+"calls) might import the same .dscs differently (although we try to minimise "
+"this). As a consequence, the dgit tracking views of the same suite, made by "
+"different instances of dgit, may vary. They will have the same contents, "
+"but may have different history."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:192
+msgid ""
+"There is no uniform linkage between the tracking branches for different "
+"suites. The Debian infrastructure does not do any automatic import of "
+"uploads made without dgit. It would be possible for a distro's "
+"infrastructure to do this; in that case, different dgit client instances "
+"would see exactly the same history."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:200
+msgid ""
+"There has been no bulk import of historical uploads into Debian's dgit "
+"infrastructure. To do this it would be necessary to decide whether to "
+"import existing vcs history (which might not be faithful to dgit's "
+"invariants) or previous non-Dgit uploads (which would not provide a very "
+"rich history)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:211
+msgid ""
+"git represents only file executability. git does not represent empty "
+"directories, or any leaf objects other than plain files and symlinks. The "
+"behaviour of Debian source package formats on objects with unusual "
+"permissions is complicated. Some pathological Debian source packages will "
+"no longer build if empty directories are pruned (or if other things not "
+"reproduced by git are changed). Such sources cannot be worked with properly "
+"in git, and therefore not with dgit either."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:211
+#, no-wrap
+msgid "READ-ONLY DISTROS"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:215
+msgid ""
+"Distros which do not maintain a set of dgit history git repositories can "
+"still be used in a read-only mode with dgit. Currently Ubuntu is configured "
+"this way."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:215
+#, no-wrap
+msgid "GITATTRIBUTES"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:223
+msgid ""
+"git has features which can automatically transform files as they are being "
+"copied between the working tree and the git history. The attributes can be "
+"specified in the source tree itself, in B<.gitattributes>. See "
+"B<gitattributes>(5)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:232
+msgid ""
+"These transformations are context-sensitive and not, in general, reversible, "
+"so dgit operates on the principle that the dgit git history contains the "
+"actual contents of the package. (When dgit is manipulating a .dsc, it does "
+"so in a private area, where the transforming gitattributes are defused, to "
+"achieve this.)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:241
+msgid ""
+"If transforming gitattributes are used, they can cause trouble, because the "
+"working tree files can differ from the git revision history (and therefore "
+"from the source packages). dgit warns if it finds a .gitattributes file (in "
+"a package being fetched or imported), unless the transforming gitattributes "
+"have been defused."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:252
+msgid ""
+"dgit clone and dgit setup-new-tree disable transforming gitattributes by "
+"default, by creating a suitable .git/info/attributes. See B<dgit setup-new-"
+"tree> and B<dgit setup-gitattributes> in dgit(1)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:262
+msgid ""
+"Note that dgit does not disable gitattributes unless they would actually "
+"interfere with your work on dgit branches. In particular, gitattributes "
+"which affect B<git archive> are not disabled, so .origs you generate by hand "
+"can be wrong. You should consider using B<git-deborig (1)> which gets this "
+"right, suppressing the attributes."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:262
+#, no-wrap
+msgid "PACKAGE SOURCE FORMATS"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:267
+msgid ""
+"If you are not the maintainer, you do not need to worry about the source "
+"format of the package. You can just make changes as you like in git. If "
+"the package is a `3.0 (quilt)' package, the patch stack will usually not be "
+"represented in the git history."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:267
+#, no-wrap
+msgid "FILE EXECUTABILITY"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:274
+msgid ""
+"Debian source package formats do not always faithfully reproduce changes to "
+"executability. But dgit insists that the result of dgit clone is identical "
+"(as far as git can represent - see Limitations, above) to the result of "
+"dpkg-source -x."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:280
+msgid ""
+"So files that are executable in your git tree must be executable in the "
+"result of dpkg-source -x (but often aren't). If a package has such "
+"troublesome files, they have to be non-executable in dgit-compatible git "
+"branches."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:280
+#, no-wrap
+msgid "FORMAT 3.0 (QUILT)"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:284
+msgid ""
+"For a format `3.0 (quilt)' source package, dgit may have to make a commit on "
+"your current branch to contain metadata used by quilt and dpkg-source."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:291
+msgid ""
+"This is because `3.0 (quilt)' source format represents the patch stack as "
+"files in debian/patches/ actually inside the source tree. This means that, "
+"taking the whole tree (as seen by git or ls) (i) dpkg-source cannot "
+"represent certain trees, and (ii) packing up a tree in `3.0 (quilt)' and "
+"then unpacking it does not always yield the same tree."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:296
+msgid ""
+"dgit will automatically work around this for you when building and pushing. "
+"The only thing you need to know is that dgit build, sbuild, etc., may make "
+"new commits on your HEAD. If you're not a quilt user this commit won't "
+"contain any changes to files you care about."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:303
+msgid ""
+"Simply commiting to source files (whether in debian/ or not, but not to "
+"patches) will result in a branch that dgit quilt-fixup can linearise. "
+"Other kinds of changes, including editing patches or merging, cannot be "
+"handled this way."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:306
+msgid ""
+"You can explicitly request that dgit do just this fixup, by running dgit "
+"quilt-fixup."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:313
+msgid ""
+"If you are a quilt user you need to know that dgit's git trees are `patches "
+"applied packaging branches' and do not contain the .pc directory (which is "
+"used by quilt to record which patches are applied). If you want to "
+"manipulate the patch stack you probably want to be looking at tools like git-"
+"debrebase, gbp pq, or git-dpm."
+msgstr ""
+
+#. type: SS
+#: ../dgit.7:314
+#, no-wrap
+msgid "quilt fixup error messages"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:316
+msgid "When dgit's quilt fixup fails, it prints messages like this:"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:322
+#, no-wrap
+msgid ""
+"dgit: base trees orig=5531f03d8456b702eab6 o+d/p=135338e9cc253cc85f84\n"
+"dgit: quilt differences: src: == orig ## gitignores: == orig ##\n"
+"dgit: quilt differences: HEAD ## o+d/p HEAD ## o+d/p\n"
+"starting quiltify (multiple patches, linear mode)\n"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:325
+#, no-wrap
+msgid ""
+"dgit: error: quilt fixup cannot be linear. Stopped at:\n"
+"dgit: 696c9bd5..84ae8f96: changed debian/patches/test-gitignore\n"
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:327
+#, no-wrap
+msgid "B<orig>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:333
+msgid ""
+"is an import of the .orig tarballs dgit found, with the debian/ directory "
+"from your HEAD substituted. This is a git tree object, not a commit: you "
+"can pass its hash to git-diff but not git-log."
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:334
+#, no-wrap
+msgid "B<o+d/p>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:339
+msgid ""
+"is another tree object, which is the same as orig but with the patches from "
+"debian/patches applied."
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:340
+#, no-wrap
+msgid "B<HEAD>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:343
+msgid "is of course your own git HEAD."
+msgstr ""
+
+#. type: TP
+#: ../dgit.7:344
+#, no-wrap
+msgid "B<quilt differences>"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:353
+msgid ""
+"shows whether each of the these trees differs from the others (i) in "
+"upstream files excluding .gitignore files; (ii) in upstream .gitignore "
+"files. B<==> indicates equality; B<##> indicates inequality."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:360
+msgid ""
+"dgit quilt-fixup --quilt=linear walks commits backwards from your HEAD "
+"trying to construct a linear set of additional patches, starting at the "
+"end. It hopes to eventually find an ancestor whose tree is identical to o+d/"
+"p in all upstream files."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:371
+msgid ""
+"In the error message, 696c9bd5..84ae8f96 is the first commit child-parent "
+"edge which cannot be sensibly be either ignored, or turned into a patch in "
+"debian/patches. In this example, this is because it itself changes files in "
+"debian/patches, indicating that something unusual is going on and that "
+"continuing is not safe. But you might also see other kinds of troublesome "
+"commit or edge."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:390
+msgid ""
+"Your appropriate response depends on the cause and the context. If you have "
+"been freely merging your git branch and do not need need a pretty linear "
+"patch queue, you can use B<--quilt=smash> (or use the B<1.0> or B<single-"
+"debian-patch> source formats; see B<dpkg-source(1)>.) If you want a pretty "
+"linear series, and this message is unexpected, it can mean that you have "
+"unwittingly committed changes that are not representable by dpkg-source "
+"(such as some mode changes). Or maybe you just forgot a necessary B<--"
+"quilt=> option."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:396
+msgid ""
+"Finally, 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)."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:396
+#, no-wrap
+msgid "SPLIT VIEW QUILT MODE"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:403
+msgid ""
+"When working with git branches intended for use with the `3.0 (quilt)' "
+"source format dgit can automatically convert a suitable maintainer-provided "
+"git branch (in one of a variety of formats) into a dgit branch."
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:417
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:425
+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."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:429
+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
+#, no-wrap
+msgid "FILES IN THE ORIG TARBALL BUT NOT IN GIT - AUTOTOOLS ETC."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:432
+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
+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 "
+"packages. For example, it is conventional to ship ./configure in the source "
+"tarball, but some people prefer not to have it present in the git view of "
+"their project."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:443
+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 "
+"dgit push directly from one of these extra-clean git branches, it will fail."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:445
+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
+#, no-wrap
+msgid "\\(bu"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:456
+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 "
+"means represeting the deletions as patches. You may need to pass --include-"
+"removal to dpkg-source --commit, or pass corresponding options to other "
+"tools.) This can make the Debian source package less useful for people "
+"without Debian build infrastructure."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:462
+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 "
+"files from the tarball may make the tarball hard for people to use."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:468
+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 "
+"advantage that someone who clones the git repository finds the program just "
+"as easy to build as someone who uses the tarball."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:473
+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 "
+"notice this and complain. You may have to fix these bugs before you can "
+"unify your existing git history with dgit's."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:474
+#, no-wrap
+msgid "FILES IN THE SOURCE PACKAGE BUT NOT IN GIT - DOCS, BINARIES ETC."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:478
+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 "
+"in Debian we always rebuild."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:488
+msgid ""
+"Examples sometimes include crossbuild firmware binaries and documentation. "
+"To avoid problems when building updated source packages (in particular, to "
+"avoid trying to represent as changes in the source package uninteresting or "
+"perhaps unrepresentable changes to such files) many maintainers arrange for "
+"the package clean target to delete these files."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:496
+msgid ""
+"dpkg-source does not (with any of the commonly used source formats) "
+"represent deletion of binaries (outside debian/) present in upstream. Thus "
+"deleting such files in a dpkg-source working tree does not actually result "
+"in them being deleted from the source package. Thus deleting the files in "
+"rules clean sweeps this problem under the rug."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:502
+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 "
+"means that a dgit-compatible git tree always contains these files."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:505
+msgid ""
+"For the non-maintainer, this can be observed in the following suboptimal "
+"occurrences:"
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:513
+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 "
+"B<dgit -wg> aka B<--clean=git>, so that the package clean target is never "
+"run."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:520
+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 "
+"build (or at least before each commit or push)."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:530
+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. "
+"The maintainer has a few additional options for mitigation: for example, it "
+"may be possible for the rules file to arrange to do the build in a temporary "
+"area, which avoids updating the troublesome files; they can then be left in "
+"the git tree without seeing trouble."
+msgstr ""
+
+#. type: SH
+#: ../dgit.7:530
+#, no-wrap
+msgid "PROBLEMS WITH PACKAGE CLEAN TARGETS ETC."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:538
+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 "
+"package, or simply forget to remove certain files, dgit will complain that "
+"the tree is dirty."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:546
+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 "
+"with perhaps B<git reset --hard> before each build."
+msgstr ""
+
+#. type: Plain text
+#: ../dgit.7:550
+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 "
+"be lost."
+msgstr ""
diff --git a/po4a/git-debrebase_1.pot b/po4a/git-debrebase_1.pot
new file mode 100644
index 0000000..72f8b5a
--- /dev/null
+++ b/po4a/git-debrebase_1.pot
@@ -0,0 +1,1022 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2018-10-04 12:36+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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. type: =head1
+#: ../dgit.1:3 ../dgit.7:2 ../dgit-user.7.pod:1 ../dgit-nmu-simple.7.pod:1
+#: ../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
+#, no-wrap
+msgid "NAME"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:496 ../git-debrebase.1.pod:441
+#, no-wrap
+msgid "OPTIONS"
+msgstr ""
+
+#. type: =head1
+#: ../dgit.1:1394 ../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:598
+#: ../git-debrebase.5.pod:678
+#, 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"
+msgstr ""
+
+#. type: =head1
+#: ../git-debrebase.1.pod:5
+msgid "SYNOPSYS"
+msgstr ""
+
+#. type: verbatim
+#: ../git-debrebase.1.pod:7
+#, no-wrap
+msgid ""
+" git-debrebase [<options...>] [-- <git-rebase options...>]\n"
+" git-debrebase [<options...>] <operation> [<operation options...>\n"
+"\n"
+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."
+msgstr ""
+
+#. type: textblock
+#: ../git-debrebase.1.pod:16
+msgid ""
+"This is the command line reference. Please read the tutorial L<dgit-maint-"
+"debrebase(7)>. For background, theory of operation, and definitions see "
+"L<git-debrebase(5)>."
+msgstr ""
+
+#. type: textblock
+#: ../git-debrebase.1.pod:22
+msgid ""
+"You should read this manpage in cojnunction with L<git-debrebase(5)/"
+"TERMINOLOGY>, which defines many important terms used here."
+msgstr ""
+
+#. type: =head1
+#: ../git-debrebase.1.pod:26
+msgid "PRINCIPAL OPERATIONS"
+msgstr ""
+
+#. type: =item
+#: ../git-debrebase.1.pod:30
+msgid "git-debrebase [-- <git-rebase options...>]"
+msgstr ""
+
+#. type: =item
+#: ../git-debrebase.1.pod:32
+msgid "git-debrebase [-i <further git-rebase options...>]"
+msgstr ""
+
+#. type: textblock
+#: ../git-debrebase.1.pod:34
+msgid ""