X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=dgit;h=beabccea5a93c8ee53ea8fde46ed1accf3b1d337;hp=1fde60bba61f663b82f931aaf454f13b193bb7b1;hb=516da6ccba126635bbb3f8a0eb4d863dc250ddbe;hpb=d5a04ee68cb3ed5c2853bae83b132505b850a5e6 diff --git a/dgit b/dgit index 1fde60bb..beabccea 100755 --- a/dgit +++ b/dgit @@ -512,11 +512,11 @@ sub protocol_send_file ($$) { my $got = read PF, $d, 65536; die "$ourfn: $!" unless defined $got; last if !$got; - print $fh "data-block ".length($d)."\n" or 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; } @@ -541,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 ---------- @@ -553,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 ($$) { @@ -588,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"; } @@ -604,7 +604,7 @@ 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 f_ "failed to fetch %s: %s", $what, $r->status_line; @@ -668,7 +668,7 @@ Perhaps the upload is stuck in incoming. Using the version from git. END sub badusage { - print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or die $!; + print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess $!; finish 8; } @@ -681,7 +681,7 @@ sub pre_help () { not_necessarily_a_tree(); } sub cmd_help () { - print __ $helpmsg or die $!; + print __ $helpmsg or confess $!; finish 0; } @@ -928,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 $!; } } @@ -1066,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; @@ -1289,12 +1289,12 @@ sub aptget_prep ($) { 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 <) { next unless stat_exists $oldlist; my ($mtime) = (stat _)[9]; @@ -1417,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; @@ -1520,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 (

) { chomp or die; printdebug(">|$_|\n"); @@ -1821,7 +1821,7 @@ 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 () { @@ -2278,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"; } @@ -2288,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 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 @@ -2461,14 +2461,14 @@ END_T printdebug "import main commit\n"; - open C, ">../commit.tmp" or die $!; - print C <../commit.tmp" or confess $!; + print C <{Commit} END - print C <{format}) { @@ -2522,7 +2522,7 @@ END 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 @@ -2588,7 +2588,7 @@ Version actually in archive: %s (older) Last version pushed with dgit: %s (newer or same) %s END - __ $later_warning_msg or die $!; + __ $later_warning_msg or confess $!; @output = $lastpush_mergeinput; } else { # Same version. Use what's in the server git branch, @@ -2618,7 +2618,7 @@ 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}; }; @@ -2752,7 +2752,7 @@ sub git_lrfetch_sane { debugcmd "|",@lcmd; my %wantr; - open GITLS, "-|", @lcmd or die $!; + open GITLS, "-|", @lcmd or confess $!; while () { printdebug "=> ", $_; m/^(\w+)\s+(\S+)\n/ or die "ls-remote $_ ?"; @@ -2890,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; } }); } @@ -2939,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; } } @@ -2974,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 <("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 < $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(); @@ -3174,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; } @@ -3195,17 +3194,17 @@ Commit referred to by archive: %s Last version pushed with dgit: %s %s END - __ $later_warning_msg or die $!; + __ $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); } } @@ -3230,14 +3229,14 @@ END Package not found in the archive, but has allegedly been pushed using dgit. %s END - __ $later_warning_msg or die $!; + __ $later_warning_msg or confess $!; } else { printdebug "nothing found!\n"; if (defined $skew_warning_vsn) { - print STDERR <", $mcf or die "$mcf $!"; - print MC <{Commit} } @mergeinputs; @parents = reverse @parents if $compat_info->{ReverseParents}; - print MC <{Commit} END - print MC <{Message}) { - print MC $compat_info->{Message} or die $!; + print MC $compat_info->{Message} or confess $!; } else { - print MC <{Info} - or die $!; + or confess $!; }; $message_add_info->($mergeinputs[0]); - print MC <($_) foreach @mergeinputs[1..$#mergeinputs]; } - close MC or die $!; + close MC or confess $!; $hash = make_commit $mcf; } else { $hash = $mergeinputs[0]{Commit}; @@ -3348,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); @@ -3363,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 <) { 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: $!"; @@ -3468,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; } @@ -3479,7 +3478,7 @@ sub setup_gitattrs (;$) { my $already = is_gitattrs_setup(); if ($already) { - progress < $af.new" or die $!; - print GAO < $af.new" or confess $!; + print GAO <) { @@ -3503,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 () { @@ -3526,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; @@ -3534,8 +3534,8 @@ sub check_gitattrs ($$) { next unless m{(?:^|/)\.gitattributes$}; # oh dear, found one - print STDERR <(), 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; @@ -3603,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); @@ -3635,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!"), }; } @@ -3676,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"; @@ -3689,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". @@ -3703,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) = @_; @@ -3721,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 ($) { @@ -3729,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"; @@ -3746,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(); @@ -3757,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'}; @@ -3786,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 <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->error and die $!; + F->error and confess $!; chomp; return ($_, \%options); } @@ -3895,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; } @@ -3908,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 ] @@ -3940,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 ? <[0], $desc->[0]) or fail <[1] ($anc->[0]) .. $desc->[1] ($desc->[0]) is not fast forward + is_fast_fwd($anc->[0], $desc->[0]) or + fail f_ <[1], $anc->[0], $desc->[1], $desc->[0]; +%s (%s) .. %s (%s) is not fast forward END }; @@ -3959,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, @@ -3967,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"); @@ -3975,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); @@ -3984,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 <[0] =~ m/UNRELEASED/; -$cd->[1] is $cd->[0] -Your tree seems to based on earlier (not uploaded) $v. + fail f_ <[1], $cd->[0], $v +%s is %s +Your tree seems to based on earlier (not uploaded) %s. END + if $cd->[0] =~ m/UNRELEASED/; } } @@ -4000,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; @@ -4015,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 <[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"; @@ -4076,25 +4090,25 @@ sub splitbrain_pseudomerge ($$$$) { 1; }) { $@ =~ s/^\n//; chomp $@; - print STDERR <[0]; my $r = pseudomerge_make_commit $clogp, $dgitview, $archive_hash, $i_arch_v, "dgit --quilt=$quilt_mode", - (defined $overwrite_version ? <[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; } @@ -4107,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, @@ -4115,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; } @@ -4127,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'; @@ -4148,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 ($$$$) { @@ -4203,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'; @@ -4226,8 +4242,8 @@ sub push_mktags ($$ $$ $) { my $head = $tw->{Objid}; my $tag = $tw->{Tag}; - open TO, '>', $tfn->('.tmp') or die $!; - print TO <', $tfn->('.tmp') or confess $!; + print TO <{View} eq 'dgit') { - print TO <{View} eq 'maint') { - print TO <('.tmp'); if ($sign) { @@ -4263,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'); @@ -4295,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 @@ -4305,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 @@ -4333,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); @@ -4349,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 <&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; @@ -4871,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; @@ -4950,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(); @@ -4986,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; } @@ -4999,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; } @@ -5007,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; } @@ -5032,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; @@ -5041,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); @@ -5076,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; @@ -5120,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; } @@ -5146,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 <{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 <($oldtiptree,'HEAD'); ---quilt=$quilt_mode specified, implying patches-applied git tree + fail +(f_ <($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); @@ -5301,8 +5337,8 @@ END } if ($quilt_mode =~ m/gbp|dpm/ && ($diffbits->{O2A} & 02)) { - fail <{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 <>", "$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 +(__ <>$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 <{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"; @@ -5436,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}; @@ -5445,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"; @@ -5461,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} ", @@ -5478,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; @@ -5500,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; @@ -5516,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}; @@ -5555,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; }; @@ -5591,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; @@ -5613,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; @@ -5698,7 +5741,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; @@ -5727,17 +5770,18 @@ sub unpack_playtree_linkorigs ($$) { sub quilt_fixup_delete_pc () { runcmd @git, qw(rm -rqf .pc); - commit_admin <' or die $!; - print $fakedsc <' or confess $!; + print $fakedsc <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); @@ -5799,7 +5843,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 ($$) { @@ -5815,7 +5859,7 @@ sub quilt_fakedsc2unapplied ($$) { changedir 'fake'; - remove_stray_gits("source package"); + remove_stray_gits(__ "source package"); mktree_in_ud_here(); rmtree '.pc'; @@ -5836,8 +5880,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); @@ -5867,12 +5912,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); } @@ -5883,7 +5928,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 @@ -5972,7 +6018,7 @@ sub quilt_fixup_multipatch ($$$) { $!=0; $?=-1; if (system @bbcmd) { failedcmd @bbcmd if $? < 0; - fail <[1]: $_->[0]\n" + print STDERR f_ "dgit: cannot represent change: %s: %s\n", + $_->[1], $_->[0] foreach @unrepres; - forceable_fail [qw(unrepresentable)], <{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()) { @@ -6065,11 +6112,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; } @@ -6084,25 +6131,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 () { 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 () { print O or confess $!; } I1->error and confess $!; my $copying = 0; while () { $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 <[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"; + progress __ "package seems new, not specifying -v"; } } if ($changes_since_version ne '_') { @@ -6275,14 +6325,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; @@ -6312,30 +6362,35 @@ sub postbuild_mergechanges ($) { } @changesfiles; my $result; if (@changesfiles==1) { - fail <; }; - 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 @@ -6705,13 +6769,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; } } @@ -6719,7 +6783,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(); @@ -6729,7 +6793,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) { @@ -6737,29 +6802,29 @@ sub cmd_import_dsc { "echo $dsc_hash | git cat-file --batch-check"); my $objgot = cmdoutput @cmd; if ($objgot =~ m#^\w+ missing\b#) { - fail < 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 < $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(); @@ -6796,21 +6866,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 <",@cmd; - exec @cmd or fail "exec curl: $!\n"; + exec @cmd or fail f_ "exec curl: %s\n", $!; } sub repos_server_url () { @@ -6846,53 +6919,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(); } @@ -6900,7 +6976,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; } @@ -6939,8 +7015,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 ($@) { @@ -6978,11 +7054,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') { @@ -7067,7 +7143,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 @@ -7086,7 +7163,7 @@ sub parseopts () { push @ropts, $_; $funcopts_long{$_}(); } else { - badusage "unknown long option \`$_'"; + badusage f_ "unknown long option \`%s'", $_; } } else { while (m/^-./s) { @@ -7139,7 +7216,7 @@ sub parseopts () { $valopt->($oi->{Short}); $_ = ''; } else { - badusage "unknown short option \`$_'"; + badusage f_ "unknown short option \`%s'", $_; } } } @@ -7148,22 +7225,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 <[0]; $om->[0] = $v; } @@ -7193,7 +7271,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], @@ -7213,7 +7291,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; } @@ -7223,7 +7301,8 @@ 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; } @@ -7235,7 +7314,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; } @@ -7256,11 +7335,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; @@ -7273,7 +7352,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;