summaryrefslogtreecommitdiff
path: root/dgit
diff options
context:
space:
mode:
Diffstat (limited to 'dgit')
-rwxr-xr-xdgit292
1 files changed, 158 insertions, 134 deletions
diff --git a/dgit b/dgit
index b6bfd56..0cdcd34 100755
--- a/dgit
+++ b/dgit
@@ -32,6 +32,7 @@ use Data::Dumper;
use LWP::UserAgent;
use Dpkg::Control::Hash;
use File::Path;
+use File::Spec;
use File::Temp qw(tempdir);
use File::Basename;
use Dpkg::Version;
@@ -164,6 +165,7 @@ our %opts_cfg_insertpos = map {
} keys %opts_opt_map;
sub parseopts_late_defaults();
+sub quiltify_trees_differ ($$;$$$);
sub setup_gitattrs(;$);
sub check_gitattrs($$);
@@ -396,7 +398,9 @@ sub branch_is_gdr ($) {
return 0;
}
if ($tip_patches eq '' and
- !defined git_cat_file "$walk:debian") {
+ !defined git_cat_file "$walk~:debian" and
+ !quiltify_trees_differ "$walk~", $walk
+ ) {
# (gdr classification of parent: BreakwaterStart
printdebug "branch_is_gdr $walk unmarked BreakwaterStart YES\n";
return 1;
@@ -520,11 +524,11 @@ sub protocol_send_file ($$) {
my $got = read PF, $d, 65536;
die "$ourfn: $!" unless defined $got;
last if !$got;
- print $fh "data-block ".length($d)."\n" or confess $!;
- print $fh $d or confess $!;
+ print $fh "data-block ".length($d)."\n" or confess "$!";
+ print $fh $d or confess "$!";
}
PF->error and die "$ourfn $!";
- print $fh "data-end\n" or confess $!;
+ print $fh "data-end\n" or confess "$!";
close PF;
}
@@ -549,9 +553,9 @@ sub protocol_receive_file ($$) {
} $fh;
last unless $y;
my $d = protocol_read_bytes $fh, $l;
- print PF $d or confess $!;
+ print PF $d or confess "$!";
}
- close PF or confess $!;
+ close PF or confess "$!";
}
#---------- remote protocol support, responder ----------
@@ -561,7 +565,7 @@ sub responder_send_command ($) {
return unless $we_are_responder;
# called even without $we_are_responder
printdebug ">> $command\n";
- print PO $command, "\n" or confess $!;
+ print PO $command, "\n" or confess "$!";
}
sub responder_send_file ($$) {
@@ -596,8 +600,8 @@ sub initiator_expect (&) {
sub progress {
if ($we_are_responder) {
my $m = join '', @_;
- responder_send_command "progress ".length($m) or confess $!;
- print PO $m or confess $!;
+ responder_send_command "progress ".length($m) or confess "$!";
+ print PO $m or confess "$!";
} else {
print @_, "\n";
}
@@ -612,7 +616,7 @@ sub url_get {
}
my $what = $_[$#_];
progress "downloading $what...";
- my $r = $ua->get(@_) or confess $!;
+ 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;
@@ -676,7 +680,7 @@ Perhaps the upload is stuck in incoming. Using the version from git.
END
sub badusage {
- print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess $!;
+ print STDERR f_ "%s: %s\n%s", $us, "@_", __ $helpmsg or confess "$!";
finish 8;
}
@@ -689,7 +693,7 @@ sub pre_help () {
not_necessarily_a_tree();
}
sub cmd_help () {
- print __ $helpmsg or confess $!;
+ print __ $helpmsg or confess "$!";
finish 0;
}
@@ -939,8 +943,8 @@ sub supplementary_message ($) {
return;
} elsif ($protovsn >= 3) {
responder_send_command "supplementary-message ".length($msg)
- or confess $!;
- print PO $msg or confess $!;
+ or confess "$!";
+ print PO $msg or confess "$!";
}
}
@@ -1077,7 +1081,7 @@ sub commit_getclogp ($) {
}
sub parse_dscdata () {
- my $dscfh = new IO::File \$dscdata, '<' or confess $!;
+ my $dscfh = new IO::File \$dscdata, '<' or confess "$!";
printdebug Dumper($dscdata) if $debuglevel>1;
$dsc = parsecontrolfh($dscfh,$dscurl,1);
printdebug Dumper($dsc) if $debuglevel>1;
@@ -1295,17 +1299,17 @@ sub aptget_prep ($) {
cfg_apply_map(\$aptsuites, 'suite map',
access_cfg('aptget-suite-map', 'RETURN-UNDEF'));
- open SRCS, ">", "$aptget_base/$sourceslist" or confess $!;
+ open SRCS, ">", "$aptget_base/$sourceslist" or confess "$!";
printf SRCS "deb-src %s %s %s\n",
access_cfg('mirror'),
$aptsuites,
access_cfg('aptget-components')
- or confess $!;
+ or confess "$!";
ensuredir "$aptget_base/cache";
ensuredir "$aptget_base/lists";
- open CONF, ">", $aptget_configpath or confess $!;
+ open CONF, ">", $aptget_configpath or confess "$!";
print CONF <<END;
Debug::NoLocking "true";
APT::Get::List-Cleanup "false";
@@ -1325,10 +1329,10 @@ END
Dir::Etc::preferencesparts
)) {
ensuredir "$aptget_base/$key";
- print CONF "$key \"$quoted_base/$key\";\n" or confess $!;
+ print CONF "$key \"$quoted_base/$key\";\n" or confess "$!";
};
- my $oldatime = (time // confess $!) - 1;
+ my $oldatime = (time // confess "$!") - 1;
foreach my $oldlist (<$aptget_base/lists/*Release>) {
next unless stat_exists $oldlist;
my ($mtime) = (stat _)[9];
@@ -1428,7 +1432,7 @@ sub dummycatapi_run_in_mirror ($@) {
my @cmd = (qw(sh -ec), 'cd "$1"; shift'."\n".$rune,
qw(x), $mirror, @$argl);
debugcmd "-|", @cmd;
- open FIA, "-|", @cmd or confess $!;
+ open FIA, "-|", @cmd or confess "$!";
my $r = $fn->();
close FIA or ($!==0 && $?==141) or die failedcmd @cmd;
return $r;
@@ -1531,7 +1535,7 @@ sub sshpsql ($$$) {
" export LC_MESSAGES=C; export LC_CTYPE=C;".
" ".shellquote qw(psql -A), $dbname, qw(-c), $sql);
debugcmd "|",@cmd;
- open P, "-|", @cmd or confess $!;
+ open P, "-|", @cmd or confess "$!";
while (<P>) {
chomp or die;
printdebug(">|$_|\n");
@@ -1832,7 +1836,7 @@ sub remove_stray_gits ($) {
my ($what) = @_;
my @gitscmd = qw(find -name .git -prune -print0);
debugcmd "|",@gitscmd;
- open GITS, "-|", @gitscmd or confess $!;
+ open GITS, "-|", @gitscmd or confess "$!";
{
local $/="\0";
while (<GITS>) {
@@ -2233,7 +2237,7 @@ sub dotdot_bpd_transfer_origs ($$$) {
"check orig file %s in ..: %s", $leaf, $!;
if (-l _) {
stat "$dotdot/$leaf" or fail f_
- "check targe of orig symlink %s in ..: %s", $leaf, $!;
+ "check target of orig symlink %s in ..: %s", $leaf, $!;
my $ltarget = readlink "$dotdot/$leaf" or
die "readlink $dotdot/$leaf: $!";
if ($ltarget !~ m{^/}) {
@@ -2360,9 +2364,9 @@ sub generate_commits_from_dsc () {
new Dpkg::Compression::Process compression => $cname;
@compr_cmd = $compr_proc->get_uncompress_cmdline();
my $compr_fh = new IO::Handle;
- my $compr_pid = open $compr_fh, "-|" // confess $!;
+ my $compr_pid = open $compr_fh, "-|" // confess "$!";
if (!$compr_pid) {
- open STDIN, "<&", $input or confess $!;
+ open STDIN, "<&", $input or confess "$!";
exec @compr_cmd;
die "dgit (child): exec $compr_cmd[0]: $!\n";
}
@@ -2370,23 +2374,23 @@ sub generate_commits_from_dsc () {
}
rmtree "_unpack-tar";
- mkdir "_unpack-tar" or confess $!;
+ mkdir "_unpack-tar" or confess "$!";
my @tarcmd = qw(tar -x -f -
--no-same-owner --no-same-permissions
--no-acls --no-xattrs --no-selinux);
- my $tar_pid = fork // confess $!;
+ my $tar_pid = fork // confess "$!";
if (!$tar_pid) {
- chdir "_unpack-tar" or confess $!;
- open STDIN, "<&", $input or confess $!;
+ chdir "_unpack-tar" or confess "$!";
+ open STDIN, "<&", $input or confess "$!";
exec @tarcmd;
die f_ "dgit (child): exec %s: %s", $tarcmd[0], $!;
}
- $!=0; (waitpid $tar_pid, 0) == $tar_pid or confess $!;
+ $!=0; (waitpid $tar_pid, 0) == $tar_pid or confess "$!";
!$? or failedcmd @tarcmd;
close $input or
(@compr_cmd ? ($?==SIGPIPE || failedcmd @compr_cmd)
- : confess $!);
+ : confess "$!");
# finally, we have the results in "tarball", but maybe
# with the wrong permissions
@@ -2543,14 +2547,14 @@ END_T
printdebug "import main commit\n";
- open C, ">../commit.tmp" or confess $!;
- print C <<END or confess $!;
+ open C, ">../commit.tmp" or confess "$!";
+ print C <<END or confess "$!";
tree $tree
END
- print C <<END or confess $! foreach @tartrees;
+ print C <<END or confess "$!" foreach @tartrees;
parent $_->{Commit}
END
- print C <<END or confess $!;
+ print C <<END or confess "$!";
author $authline
committer $authline
@@ -2559,7 +2563,7 @@ $changes
[dgit import $treeimporthow $package $cversion]
END
- close C or confess $!;
+ close C or confess "$!";
my $rawimport_hash = make_commit qw(../commit.tmp);
if (madformat $dsc->{format}) {
@@ -2604,7 +2608,7 @@ END
progress f_ "%s: trying slow absurd-git-apply...", $us;
rename "../../gbp-pq-output","../../gbp-pq-output.0"
or $!==ENOENT
- or confess $!;
+ or confess "$!";
}
eval {
die "forbid absurd git-apply\n" if $use_absurd
@@ -2670,7 +2674,7 @@ Version actually in archive: %s (older)
Last version pushed with dgit: %s (newer or same)
%s
END
- __ $later_warning_msg or confess $!;
+ __ $later_warning_msg or confess "$!";
@output = $lastpush_mergeinput;
} else {
# Same version. Use what's in the server git branch,
@@ -2700,7 +2704,7 @@ sub complete_file_from_dsc ($$;$) {
open F, "<", "$tf" or die "$tf: $!";
$fi->{Digester}->reset();
$fi->{Digester}->addfile(*F);
- F->error and confess $!;
+ F->error and confess "$!";
$got = $fi->{Digester}->hexdigest();
return $got eq $fi->{Hash};
};
@@ -2834,7 +2838,7 @@ sub git_lrfetch_sane {
debugcmd "|",@lcmd;
my %wantr;
- open GITLS, "-|", @lcmd or confess $!;
+ open GITLS, "-|", @lcmd or confess "$!";
while (<GITLS>) {
printdebug "=> ", $_;
m/^(\w+)\s+(\S+)\n/ or die "ls-remote $_ ?";
@@ -3256,7 +3260,7 @@ sub fetch_from_archive () {
printdebug "del_lrfetchrefs: $objid $fullrefname\n";
if (!$gur) {
$gur ||= new IO::Handle;
- open $gur, "|-", qw(git update-ref --stdin) or confess $!;
+ open $gur, "|-", qw(git update-ref --stdin) or confess "$!";
}
printf $gur "delete %s %s\n", $fullrefname, $objid;
}
@@ -3277,7 +3281,7 @@ Commit referred to by archive: %s
Last version pushed with dgit: %s
%s
END
- __ $later_warning_msg or confess $!;
+ __ $later_warning_msg or confess "$!";
@mergeinputs = ($lastpush_mergeinput);
} else {
# Archive has .dsc which is not a descendant of the last dgit
@@ -3312,11 +3316,11 @@ END
Package not found in the archive, but has allegedly been pushed using dgit.
%s
END
- __ $later_warning_msg or confess $!;
+ __ $later_warning_msg or confess "$!";
} else {
printdebug "nothing found!\n";
if (defined $skew_warning_vsn) {
- print STDERR f_ <<END, $skew_warning_vsn or confess $!;
+ print STDERR f_ <<END, $skew_warning_vsn or confess "$!";
Warning: relevant archive skew detected.
Archive allegedly contains %s
@@ -3382,26 +3386,26 @@ END
my $mcf = dgit_privdir()."/mergecommit";
open MC, ">", $mcf or die "$mcf $!";
- print MC <<END or confess $!;
+ print MC <<END or confess "$!";
tree $tree
END
my @parents = grep { $_->{Commit} } @mergeinputs;
@parents = reverse @parents if $compat_info->{ReverseParents};
- print MC <<END or confess $! foreach @parents;
+ print MC <<END or confess "$!" foreach @parents;
parent $_->{Commit}
END
- print MC <<END or confess $!;
+ print MC <<END or confess "$!";
author $author
committer $author
END
if (defined $compat_info->{Message}) {
- print MC $compat_info->{Message} or confess $!;
+ print MC $compat_info->{Message} or confess "$!";
} else {
- print MC f_ <<END, $package, $cversion, $csuite or confess $!;
+ print MC f_ <<END, $package, $cversion, $csuite or confess "$!";
Record %s (%s) in archive suite %s
Record that
@@ -3410,17 +3414,17 @@ END
my ($mi) = (@_);
my $mversion = mergeinfo_version $mi;
printf MC " %-20s %s\n", $mversion, $mi->{Info}
- or confess $!;
+ or confess "$!";
};
$message_add_info->($mergeinputs[0]);
- print MC __ <<END or confess $!;
+ print MC __ <<END or confess "$!";
should be treated as descended from
END
$message_add_info->($_) foreach @mergeinputs[1..$#mergeinputs];
}
- close MC or confess $!;
+ close MC or confess "$!";
$hash = make_commit $mcf;
} else {
$hash = $mergeinputs[0]{Commit};
@@ -3445,7 +3449,7 @@ END
my $got_vsn = getfield $gotclogp, 'Version';
printdebug "SKEW CHECK GOT $got_vsn\n";
if (version_compare($got_vsn, $skew_warning_vsn) < 0) {
- print STDERR f_ <<END, $skew_warning_vsn, $got_vsn or confess $!;
+ print STDERR f_ <<END, $skew_warning_vsn, $got_vsn or confess "$!";
Warning: archive skew detected. Using the available version:
Archive allegedly contains %s
@@ -3489,12 +3493,12 @@ sub setup_mergechangelogs (;$) {
while (<ATTRS>) {
chomp;
next if m{^debian/changelog\s};
- print NATTRS $_, "\n" or confess $!;
+ print NATTRS $_, "\n" or confess "$!";
}
- ATTRS->error and confess $!;
+ ATTRS->error and confess "$!";
close ATTRS;
}
- print NATTRS "debian/changelog merge=$driver\n" or confess $!;
+ print NATTRS "debian/changelog merge=$driver\n" or confess "$!";
close NATTRS;
set_local_git_config "$cb.name", __ 'debian/changelog merge driver';
@@ -3550,7 +3554,7 @@ sub is_gitattrs_setup () {
printdebug "is_gitattrs_setup: found old macro\n";
return 0;
}
- $gai->error and confess $!;
+ $gai->error and confess "$!";
printdebug "is_gitattrs_setup: found nothing\n";
return undef;
}
@@ -3571,8 +3575,8 @@ END
my $af = "$maindir_gitcommon/info/attributes";
ensuredir "$maindir_gitcommon/info";
- open GAO, "> $af.new" or confess $!;
- print GAO <<END, __ <<ENDT or confess $! unless defined $already;
+ open GAO, "> $af.new" or confess "$!";
+ print GAO <<END, __ <<ENDT or confess "$!" unless defined $already;
* dgit-defuse-attrs
$new
END
@@ -3586,11 +3590,11 @@ ENDT
$_ = $new;
}
chomp;
- print GAO $_, "\n" or confess $!;
+ print GAO $_, "\n" or confess "$!";
}
- $gai->error and confess $!;
+ $gai->error and confess "$!";
}
- close GAO or confess $!;
+ close GAO or confess "$!";
rename "$af.new", "$af" or fail f_ "install %s: %s", $af, $!;
}
@@ -3609,7 +3613,7 @@ sub check_gitattrs ($$) {
my @cmd = (@git, qw(ls-tree -lrz --), "${treeish}:");
debugcmd "|",@cmd;
my $gafl = new IO::File;
- open $gafl, "-|", @cmd or confess $!;
+ open $gafl, "-|", @cmd or confess "$!";
while (<$gafl>) {
chomp or die;
s/^\d+\s+\w+\s+\w+\s+(\d+)\t// or die;
@@ -3634,7 +3638,7 @@ sub multisuite_suite_child ($$$) {
# in child, sets things up, calls $fn->(), and returns undef
# in parent, returns canonical suite name for $tsuite
my $canonsuitefh = IO::File::new_tmpfile;
- my $pid = fork // confess $!;
+ my $pid = fork // confess "$!";
if (!$pid) {
forkcheck_setup();
$isuite = $tsuite;
@@ -3642,17 +3646,17 @@ sub multisuite_suite_child ($$$) {
$debugprefix .= " ";
progress f_ "fetching %s...", $tsuite;
canonicalise_suite();
- print $canonsuitefh $csuite, "\n" or confess $!;
- close $canonsuitefh or confess $!;
+ print $canonsuitefh $csuite, "\n" or confess "$!";
+ close $canonsuitefh or confess "$!";
$fn->();
return undef;
}
- waitpid $pid,0 == $pid or confess $!;
+ waitpid $pid,0 == $pid or confess "$!";
fail f_ "failed to obtain %s: %s", $tsuite, waitstatusmsg()
if $? && $?!=256*4;
- seek $canonsuitefh,0,0 or confess $!;
+ seek $canonsuitefh,0,0 or confess "$!";
local $csuite = <$canonsuitefh>;
- confess $! unless defined $csuite && chomp $csuite;
+ confess "$!" unless defined $csuite && chomp $csuite;
if ($? == 256*4) {
printdebug "multisuite $tsuite missing\n";
return $csuite;
@@ -3795,9 +3799,9 @@ sub fork_for_multisuite ($) {
}
sub clone_set_head () {
- open H, "> .git/HEAD" or confess $!;
- print H "ref: ".lref()."\n" or confess $!;
- close H or confess $!;
+ open H, "> .git/HEAD" or confess "$!";
+ print H "ref: ".lref()."\n" or confess "$!";
+ close H or confess "$!";
}
sub clone_finish ($) {
my ($dstdir) = @_;
@@ -3979,18 +3983,18 @@ sub get_source_format () {
$options{$_} = 1;
}
}
- F->error and confess $!;
+ F->error and confess "$!";
close F;
} else {
- confess $! unless $!==&ENOENT;
+ confess "$!" unless $!==&ENOENT;
}
if (!open F, "debian/source/format") {
- confess $! unless $!==&ENOENT;
+ confess "$!" unless $!==&ENOENT;
return '';
}
$_ = <F>;
- F->error and confess $!;
+ F->error and confess "$!";
chomp;
return ($_, \%options);
}
@@ -4127,7 +4131,7 @@ sub pseudomerge_make_commit ($$$$ $$) {
# git rev-list --first-parent DTRT.
my $pmf = dgit_privdir()."/pseudomerge";
open MC, ">", $pmf or die "$pmf $!";
- print MC <<END or confess $!;
+ print MC <<END or confess "$!";
tree $tree
parent $dgitview
parent $archive_hash
@@ -4138,7 +4142,7 @@ $msg_msg
[$msg_cmd]
END
- close MC or confess $!;
+ close MC or confess "$!";
return make_commit($pmf);
}
@@ -4318,7 +4322,7 @@ sub push_mktags ($$ $$ $) {
$dsc->{$ourdscfield[0]} = join " ",
$tagwants->[0]{Objid}, $declaredistro, $tagwants->[0]{Tag},
$reader_giturl;
- $dsc->save("$dscfn.tmp") or confess $!;
+ $dsc->save("$dscfn.tmp") or confess "$!";
my $changes = parsecontrol($changesfile,$changesfilewhat);
foreach my $field (qw(Source Distribution Version)) {
@@ -4341,8 +4345,8 @@ sub push_mktags ($$ $$ $) {
my $head = $tw->{Objid};
my $tag = $tw->{Tag};
- open TO, '>', $tfn->('.tmp') or confess $!;
- print TO <<END or confess $!;
+ open TO, '>', $tfn->('.tmp') or confess "$!";
+ print TO <<END or confess "$!";
object $head
type commit
tag $tag
@@ -4353,12 +4357,12 @@ END
print TO f_ <<ENDT, $package, $cversion, $clogsuite, $csuite
%s release %s for %s (%s) [dgit]
ENDT
- or confess $!;
- print TO <<END or confess $!;
+ or confess "$!";
+ print TO <<END or confess "$!";
[dgit distro=$declaredistro$delibs]
END
foreach my $ref (sort keys %previously) {
- print TO <<END or confess $!;
+ print TO <<END or confess "$!";
[dgit previously:$ref=$previously{$ref}]
END
}
@@ -4368,12 +4372,12 @@ END
(maintainer view tag generated by dgit --quilt=%s)
END
$quilt_mode
- or confess $!;
+ or confess "$!";
} else {
confess Dumper($tw)."?";
}
- close TO or confess $!;
+ close TO or confess "$!";
my $tagobjfn = $tfn->('.tmp');
if ($sign) {
@@ -4383,7 +4387,7 @@ END
if (!defined $keyid) {
$keyid = getfield $clogp, 'Maintainer';
}
- unlink $tfn->('.tmp.asc') or $!==&ENOENT or confess $!;
+ unlink $tfn->('.tmp.asc') or $!==&ENOENT or confess "$!";
my @sign_cmd = (@gpg, qw(--detach-sign --armor));
push @sign_cmd, qw(-u),$keyid if defined $keyid;
push @sign_cmd, $tfn->('.tmp');
@@ -4990,11 +4994,11 @@ sub pre_remote_push_build_host {
$we_are_responder = 1;
$us .= " (build host)";
- open PI, "<&STDIN" or confess $!;
- open STDIN, "/dev/null" or confess $!;
- open PO, ">&STDOUT" or confess $!;
+ open PI, "<&STDIN" or confess "$!";
+ open STDIN, "/dev/null" or confess "$!";
+ open PO, ">&STDOUT" or confess "$!";
autoflush PO 1;
- open STDOUT, ">&STDERR" or confess $!;
+ open STDOUT, ">&STDERR" or confess "$!";
autoflush STDOUT 1;
$vsnwant //= 1;
@@ -5118,7 +5122,7 @@ sub i_resp_complete {
$i_child_pid = undef; # prevents killing some other process with same pid
printdebug "waiting for build host child $pid...\n";
my $got = waitpid $pid, 0;
- confess $! unless $got == $pid;
+ confess "$!" unless $got == $pid;
fail f_ "build host child failed: %s", waitstatusmsg() if $?;
i_cleanup();
@@ -5174,7 +5178,7 @@ sub i_resp_want ($) {
foreach my $localpath (@localpaths) {
protocol_send_file \*RI, $localpath;
}
- print RI "files-end\n" or confess $!;
+ print RI "files-end\n" or confess "$!";
}
our ($i_clogp, $i_version, $i_dscfn, $i_changesfn, @i_buildinfos);
@@ -5281,13 +5285,13 @@ sub quiltify_dpkg_commit ($$$;$) {
my $descfn = ".git/dgit/quilt-description.tmp";
open O, '>', $descfn or confess "$descfn: $!";
$msg =~ s/\n+/\n\n/;
- print O <<END or confess $!;
+ print O <<END or confess "$!";
From: $author
${xinfo}Subject: $msg
---
END
- close O or confess $!;
+ close O or confess "$!";
{
local $ENV{'EDITOR'} = cmdoutput qw(realpath --), $0;
@@ -5469,12 +5473,12 @@ ENDU
close GIPATCH or die "$gipatch: $!";
runcmd shell_cmd "exec >>$gipatch", @git, qw(diff),
$unapplied, $headref, "--", sort keys %$editedignores;
- open SERIES, "+>>", "debian/patches/series" or confess $!;
- defined seek SERIES, -1, 2 or $!==EINVAL or confess $!;
+ open SERIES, "+>>", "debian/patches/series" or confess "$!";
+ defined seek SERIES, -1, 2 or $!==EINVAL or confess "$!";
my $newline;
- defined read SERIES, $newline, 1 or confess $!;
- print SERIES "\n" or confess $! unless $newline eq "\n";
- print SERIES "auto-gitignore\n" or confess $!;
+ defined read SERIES, $newline, 1 or confess "$!";
+ print SERIES "\n" or confess "$!" unless $newline eq "\n";
+ print SERIES "auto-gitignore\n" or confess "$!";
close SERIES or die $!;
runcmd @git, qw(add -f -- debian/patches/series), $gipatch;
commit_admin +(__ <<END).<<ENDU
@@ -5844,7 +5848,7 @@ END
sub unpack_playtree_mkwork ($) {
my ($headref) = @_;
- mkdir "work" or confess $!;
+ mkdir "work" or confess "$!";
changedir "work";
mktree_in_ud_here();
runcmd @git, qw(reset -q --hard), $headref;
@@ -5916,8 +5920,8 @@ sub quilt_make_fake_dsc ($) {
my $fakeversion="$upstreamversion-~~DGITFAKE";
- my $fakedsc=new IO::File 'fake.dsc', '>' or confess $!;
- print $fakedsc <<END or confess $!;
+ my $fakedsc=new IO::File 'fake.dsc', '>' or confess "$!";
+ print $fakedsc <<END or confess "$!";
Format: 3.0 (quilt)
Source: $package
Version: $fakeversion
@@ -5930,11 +5934,11 @@ END
my $md = new Digest::MD5;
my $fh = new IO::File $leaf, '<' or die "$leaf $!";
- stat $fh or confess $!;
+ stat $fh or confess "$!";
my $size = -s _;
$md->addfile($fh);
- print $fakedsc " ".$md->hexdigest." $size $leaf\n" or confess $!;
+ print $fakedsc " ".$md->hexdigest." $size $leaf\n" or confess "$!";
};
unpack_playtree_linkorigs($upstreamversion, $dscaddfile);
@@ -5951,7 +5955,7 @@ END
runcmd qw(env GZIP=-1n tar -zcf), "./$debtar", qw(-C), $maindir, @files;
$dscaddfile->($debtar);
- close $fakedsc or confess $!;
+ close $fakedsc or confess "$!";
}
sub quilt_fakedsc2unapplied ($$) {
@@ -6144,7 +6148,7 @@ END
progress __ "Tree already contains .pc - will use it then delete it.";
$mustdeletepc=1;
} else {
- rename '../fake/.pc','.pc' or confess $!;
+ rename '../fake/.pc','.pc' or confess "$!";
}
changedir '../fake';
@@ -6224,7 +6228,7 @@ END
quiltify($clogp,$headref,$oldtiptree,\@failsuggestion);
if (!open P, '>>', ".pc/applied-patches") {
- $!==&ENOENT or confess $!;
+ $!==&ENOENT or confess "$!";
} else {
close P;
}
@@ -6243,21 +6247,21 @@ sub quilt_fixup_editor () {
open I2, '<', $editing or confess "$editing: $!";
unlink $editing or confess "$editing: $!";
open O, '>', $editing or confess "$editing: $!";
- while (<I1>) { print O or confess $!; } I1->error and confess $!;
+ while (<I1>) { print O or confess "$!"; } I1->error and confess "$!";
my $copying = 0;
while (<I2>) {
$copying ||= m/^\-\-\- /;
next unless $copying;
- print O or confess $!;
+ print O or confess "$!";
}
- I2->error and confess $!;
+ I2->error and confess "$!";
close O or die $1;
finish 0;
}
sub maybe_apply_patches_dirtily () {
return unless $quilt_mode =~ m/gbp|unapplied/;
- print STDERR __ <<END or confess $!;
+ 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.
@@ -6287,7 +6291,7 @@ sub clean_tree_check_git ($$$) {
push @cmd, qw(-x) unless $honour_ignores;
my $leftovers = cmdoutput @cmd;
if (length $leftovers) {
- print STDERR $leftovers, "\n" or confess $!;
+ print STDERR $leftovers, "\n" or confess "$!";
$message .= $ignmessage if $honour_ignores;
fail $message;
}
@@ -6546,7 +6550,7 @@ END
"@changesfiles";
}
printdone f_ "build successful, results in %s\n", $result
- or confess $!;
+ or confess "$!";
}
sub midbuild_checkchanges () {
@@ -6644,7 +6648,7 @@ sub cmd_gbp_build {
if ($gbp_make_orig) {
my $priv = dgit_privdir();
my $ok = "$priv/origs-gen-ok";
- unlink $ok or $!==&ENOENT or confess $!;
+ unlink $ok or $!==&ENOENT or confess "$!";
my @origs_cmd = @cmd;
push @origs_cmd, qw(--git-cleaner=true);
push @origs_cmd, "--git-prebuild=".
@@ -6876,7 +6880,7 @@ sub cmd_print_unapplied_treeish {
my $uv = upstreamversion $version;
quilt_make_fake_dsc($uv);
my $u = quilt_fakedsc2unapplied($headref, $uv);
- print $u, "\n" or confess $!;
+ print $u, "\n" or confess "$!";
}
sub import_dsc_result {
@@ -7003,29 +7007,49 @@ END
my @dfi = dsc_files_info();
foreach my $fi (@dfi) {
my $f = $fi->{Filename};
+ # We transfer all the pieces of the dsc to the bpd, not just
+ # origs. This is by analogy with dgit fetch, which wants to
+ # keep them somewhere to avoid downloading them again.
+ # We make symlinks, though. If the user wants copies, then
+ # they can copy the parts of the dsc to the bpd using dcmd,
+ # or something.
my $here = "$buildproductsdir/$f";
if (lstat $here) {
- next if stat $here;
+ if (stat $here) {
+ next;
+ }
fail f_ "lstat %s works but stat gives %s !", $here, $!;
}
fail f_ "stat %s: %s", $here, $! unless $! == ENOENT;
+ printdebug "not in bpd, $f ...\n";
+ # $f does not exist in bpd, we need to transfer it
my $there = $dscfn;
- if ($dscfn =~ m#^(?:\./+)?\.\./+#) {
- $there = $';
- } elsif ($dscfn =~ m#^/#) {
- $there = $dscfn;
+ $there =~ s{[^/]+$}{$f} or confess "$there ?";
+ # $there is file we want, relative to user's cwd, or abs
+ printdebug "not in bpd, $f, test $there ...\n";
+ stat $there or fail f_
+ "import %s requires %s, but: %s", $dscfn, $there, $!;
+ if ($there =~ m#^(?:\./+)?\.\./+#) {
+ # $there is relative to user's cwd
+ my $there_from_parent = $';
+ if ($buildproductsdir !~ m{^/}) {
+ # abs2rel, despite its name, can take two relative paths
+ $there = File::Spec->abs2rel($there,$buildproductsdir);
+ # now $there is relative to bpd, great
+ printdebug "not in bpd, $f, abs2rel, $there ...\n";
+ } else {
+ $there = (dirname $maindir)."/$there_from_parent";
+ # now $there is absoute
+ printdebug "not in bpd, $f, rel2rel, $there ...\n";
+ }
+ } elsif ($there =~ m#^/#) {
+ # $there is absolute already
+ printdebug "not in bpd, $f, abs, $there ...\n";
} else {
fail f_
"cannot import %s which seems to be inside working tree!",
$dscfn;
}
- $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 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;
@@ -7107,7 +7131,7 @@ sub cmd_print_dgit_repos_server_source_url {
"no arguments allowed to dgit print-dgit-repos-server-source-url"
if @ARGV;
my $url = repos_server_url();
- print $url, "\n" or confess $!;
+ print $url, "\n" or confess "$!";
}
sub pre_print_dpkg_source_ignores {
@@ -7117,7 +7141,7 @@ sub cmd_print_dpkg_source_ignores {
badusage __
"no arguments allowed to dgit print-dpkg-source-ignores"
if @ARGV;
- print "@dpkg_source_ignores\n" or confess $!;
+ print "@dpkg_source_ignores\n" or confess "$!";
}
sub cmd_setup_mergechangelogs {
@@ -7148,7 +7172,7 @@ sub cmd_setup_new_tree {
#---------- argument parsing and main program ----------
sub cmd_version {
- print "dgit version $our_version\n" or confess $!;
+ print "dgit version $our_version\n" or confess "$!";
finish 0;
}
@@ -7405,7 +7429,7 @@ sub parseopts () {
sub check_env_sanity () {
my $blocked = new POSIX::SigSet;
- sigprocmask SIG_UNBLOCK, $blocked, $blocked or confess $!;
+ sigprocmask SIG_UNBLOCK, $blocked, $blocked or confess "$!";
eval {
foreach my $name (qw(PIPE CHLD)) {
@@ -7522,7 +7546,7 @@ print STDERR __ "DRY RUN ONLY\n" if $dryrun_level > 1;
print STDERR __ "DAMP RUN - WILL MAKE LOCAL (UNSIGNED) CHANGES\n"
if $dryrun_level == 1;
if (!@ARGV) {
- print STDERR __ $helpmsg or confess $!;
+ print STDERR __ $helpmsg or confess "$!";
finish 8;
}
$cmd = $subcommand = shift @ARGV;