diff options
author | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2014-01-19 00:16:38 +0000 |
---|---|---|
committer | Ian Jackson <ijackson@chiark.greenend.org.uk> | 2014-01-19 00:16:38 +0000 |
commit | 95cce6041df774f7909b28c110417881f1d4792a (patch) | |
tree | 6e74352fc943ca7f517093a9ccc1fbdbdc260557 | |
parent | 6ac74a9d56fdc86b30c4e7940734cd95be6840c4 (diff) |
Provide --build-products-dir option (and corresponding semantics for -C) to specify where to find the files to upload. Closes:#731633.
-rw-r--r-- | debian/changelog | 2 | ||||
-rw-r--r-- | debian/tests/control | 2 | ||||
-rwxr-xr-x | dgit | 34 | ||||
-rw-r--r-- | dgit.1 | 14 | ||||
-rwxr-xr-x | tests/tests/push-buildproductsdir | 31 |
5 files changed, 71 insertions, 12 deletions
diff --git a/debian/changelog b/debian/changelog index aaf0ead..18ab786 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,8 @@ dgit (0.21~~iwj) unstable; urgency=low * Add `Testsuite: autopkgtest' to debian/control. (This will only have the right effect with recent enought dpkg, and will generate a warning with earlier versions of dpkg. + * Provide --build-products-dir option (and corresponding semantics + for -C) to specify where to find the files to upload. Closes:#731633. -- diff --git a/debian/tests/control b/debian/tests/control index 391ac11..48dbda1 100644 --- a/debian/tests/control +++ b/debian/tests/control @@ -1,3 +1,3 @@ -Tests: clone-nogit fetch-localgitonly fetch-somegit-notlast push-newpackage push-nextdgit quilt +Tests: clone-nogit fetch-localgitonly fetch-somegit-notlast push-newpackage push-nextdgit quilt push-buildproductsdir Tests-Directory: tests/tests Depends: @, devscripts @@ -40,6 +40,7 @@ our @ropts; our $sign = 1; our $dryrun_level = 0; our $changesfile; +our $buildproductsdir = '..'; our $new_package = 0; our $ignoredirty = 0; our $noquilt = 0; @@ -1319,13 +1320,14 @@ sub dopush () { my ($clogp, $cversion, $tag, $dscfn) = push_parse_changelog("$clogpfn"); - stat "../$dscfn" or + my $dscpath = "$buildproductsdir/$dscfn"; + stat $dscpath or fail "looked for .dsc $dscfn, but $!;". " maybe you forgot to build"; - responder_send_file('dsc', "../$dscfn"); + responder_send_file('dsc', $dscpath); - push_parse_dsc("../$dscfn", $dscfn, $cversion); + push_parse_dsc($dscpath, $dscfn, $cversion); my $format = getfield $dsc, 'Format'; printdebug "format $format\n"; @@ -1335,7 +1337,8 @@ sub dopush () { check_not_dirty(); changedir $ud; progress "checking that $dscfn corresponds to HEAD"; - runcmd qw(dpkg-source -x --), "../../../../$dscfn"; + runcmd qw(dpkg-source -x --), + $dscpath =~ m#^/# ? $dscpath : "../../../$dscpath"; my ($tree,$dir) = mktree_in_ud_from_only_subdir(); changedir '../../../..'; my @diffcmd = (@git, qw(diff --exit-code), $tree); @@ -1357,19 +1360,22 @@ sub dopush () { # (uploadbranch()); my $head = rev_parse('HEAD'); if (!$changesfile) { - my $multi = "../${package}_".(stripepoch $cversion)."_multi.changes"; + my $multi = "$buildproductsdir/". + "${package}_".(stripepoch $cversion)."_multi.changes"; if (stat "$multi") { $changesfile = $multi; } else { $!==&ENOENT or die "$multi: $!"; my $pat = "${package}_".(stripepoch $cversion)."_*.changes"; - my @cs = glob "../$pat"; + my @cs = glob "$buildproductsdir/$pat"; fail "failed to find unique changes file". - " (looked for $pat in .., or $multi);". + " (looked for $pat in $buildproductsdir, or $multi);". " perhaps you need to use dgit -C" unless @cs==1; ($changesfile) = @cs; } + } else { + $changesfile = "$buildproductsdir/$changesfile"; } responder_send_file('changes',$changesfile); @@ -1384,7 +1390,7 @@ sub dopush () { } else { $tagobjfn = push_mktag($head,$clogp,$tag, - "../$dscfn", + $dscpath, $changesfile,$changesfile, $tfn); } @@ -1402,16 +1408,16 @@ sub dopush () { if (!$we_are_responder) { if (act_local()) { - rename "../$dscfn.tmp","../$dscfn" or die "$dscfn $!"; + rename "$dscpath.tmp",$dscpath or die "$dscfn $!"; } else { - progress "[new .dsc left in $dscfn.tmp]"; + progress "[new .dsc left in $dscpath.tmp]"; } } if ($we_are_responder) { my $dryrunsuffix = act_local() ? "" : ".tmp"; responder_receive_files('signed-dsc-changes', - "../$dscfn$dryrunsuffix", + "$dscpath$dryrunsuffix", "$changesfile$dryrunsuffix"); } else { sign_changes $changesfile; @@ -1969,6 +1975,9 @@ sub parseopts () { } elsif (m/^--distro=(.*)/s) { push @ropts, $_; $idistro = $1; + } elsif (m/^--build-products-dir=(.*)/s) { + push @ropts, $_; + $buildproductsdir = $1; } elsif (m/^--clean=(dpkg-source|git|none)$/s) { push @ropts, $_; $cleanmode = $1; @@ -2017,6 +2026,9 @@ sub parseopts () { } elsif (s/^-C(.*)//s) { push @ropts, $&; $changesfile = $1; + if ($changesfile =~ s#^(.*)/##) { + $buildproductsdir = $1; + } } elsif (s/^-k(.*)//s) { $keyid=$1; } elsif (s/^-wn//s) { @@ -359,6 +359,20 @@ 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 - or, if there is a _multi.changes file, dgit uses that. + +If the specified +.I changesfile +pathname contains slashes, the directory part is also used as +the value for +.BR --build-products-dir ; +otherwise, the changes file is expected in that directory (by +default, in +.BR .. ). +.TP +.BI --build-products-dir= directory +Specifies where to find the built files to be uploaded. +By default, dgit looks in the parent directory +.BR .. ). .TP .BI --existing-package= package dgit push needs to canonicalise the suite name. Sometimes, dgit diff --git a/tests/tests/push-buildproductsdir b/tests/tests/push-buildproductsdir new file mode 100755 index 0000000..987c081 --- /dev/null +++ b/tests/tests/push-buildproductsdir @@ -0,0 +1,31 @@ +#!/bin/bash +set -e +. tests/lib + +t-archive pari-extra 3-1 +t-git pari-extra 3-1 + +t-dgit clone $p + +cd $p +t-cloned-fetched-good + +v=3-2~dummy1 +t-apply-diff 3-1 $v +debcommit -a + +t-refs-same-start +t-ref-head + +t-dgit --dpkg-buildpackage:-d build + +cd .. +mkdir bpd +mv $p*_* bpd/ +cd $p + +t-dgit --build-products-dir=../bpd push + +t-pushed-good dgit/sid + +echo ok. |