summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2013-08-22 13:58:02 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2013-08-22 13:58:02 +0100
commit08a4cefb989b93dec53d5357e3b40d04340884cc (patch)
treef150903ba3afc1eec97209de70b274e87d23c860
parent648c039155014bc10acdae59e0dad5aacd000967 (diff)
Provide "dgit sbuild".
-rw-r--r--debian/changelog1
-rwxr-xr-xdgit47
-rw-r--r--dgit.143
3 files changed, 74 insertions, 17 deletions
diff --git a/debian/changelog b/debian/changelog
index af327be..14b3463 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -2,6 +2,7 @@ dgit (0.4) experimental; urgency=low
* Use dgit.debian.net vhost on alioth. Closes #720172.
* Usage message. Closes #720085.
+ * Provide "dgit sbuild".
* Assorted manpage fixes and improvements.
* Fail if a required config item is missing.
* Much better error messages.
diff --git a/dgit b/dgit
index 7f13eec..e95f30c 100755
--- a/dgit
+++ b/dgit
@@ -42,14 +42,22 @@ our (@git) = qw(git);
our (@dget) = qw(dget);
our (@dput) = qw(dput);
our (@debsign) = qw(debsign);
-our $keyid;
+our (@sbuild) = qw(sbuild);
+our (@dpkgbuildpackage) = qw(dpkg-buildpackage -i\.git/ -I.git);
+our (@mergechanges) = qw(mergechanges -f);
-our $debug = 0;
-open DEBUG, ">/dev/null" or die $!;
our %opts_opt_map = ('dget' => \@dget,
'dput' => \@dput,
- 'debsign' => \@debsign);
+ 'debsign' => \@debsign,
+ 'sbuild' => \@sbuild,
+ 'dpkg-buildpackage' => \@dpkgbuildpackage;
+ 'mergechanges' => \@mergechanges);
+
+our $keyid;
+
+our $debug = 0;
+open DEBUG, ">/dev/null" or die $!;
our $remotename = 'dgit';
our $ourdscfield = 'Vcs-Dgit-Master';
@@ -63,6 +71,8 @@ sub lrref () { return "refs/remotes/$remotename/$csuite"; }
sub rrref () { return "refs/$branchprefix/$csuite"; }
sub debiantag ($) { return "debian/$_[0]"; }
+sub dscfn () { return "${package}_${cversion}.dsc"; }
+
our $us = 'dgit';
sub fail () { die "$us: @_\n"; }
@@ -719,7 +729,7 @@ sub dopush () {
my $clogp = parsechangelog();
$package = getfield $clogp 'Source';
my $cversion = getfield $clogp, 'Version';
- my $dscfn = "${package}_${cversion}.dsc";
+ my $dscfn = dscfn();
stat "../$dscfn" or
fail "looked for .dsc $dscfn, but $!;".
" maybe you forgot to build";
@@ -891,14 +901,39 @@ sub cmd_build {
$package = getfield $clogp, 'Source';
my @cmd =
(qw(git-buildpackage -us -uc --git-no-sign-tags),
- '--git-builder=dpkg-buildpackage -i\.git/ -I.git');
+ "--git-builder=@dpkgbuildpackage");
unless (grep { m/^--git-debian-branch/ } @ARGV) {
canonicalise_suite();
push @cmd, "--git-debian-branch=".lbranch();
}
runcmd_ordryrun @cmd, @ARGV;
+ print "build successful\n";
}
+sub cmd_sbuild {
+ check_not_dirty();
+ badusage "-p is not allowed with dgit sbuild" if defined $package;
+ my $clogp = parsechangelog();
+ $package = getfield $clogp, 'Source';
+ my $version = getfield $clogp, 'Version';
+ runcmd (@dpkgbuildpackage, qw(-us -uc -S));
+ chdir ".." or die $!;
+ my $sourcechanges = "${package}_${version}_source.changes";
+ my $dscfn = dscfn();
+ stat "../$dscfn" or fail "$dscfn (in parent directory): $!";
+ stat "../$sourcechanges" or fail "$sourcechanges (in parent directory): $!";
+ my $pat = "${package}_${version}_*.changes";
+ foreach my $cf (glob $pat) {
+ next if $cf eq $sourcechanges;
+ unlink $cf or fail "remove $cf: $!";
+ }
+ runcmd @sbuild, @ARGV, $sourcechanges;
+ runcmd @mergechanges, glob $pat;
+ my $multichanges = "${package}_${version}_multi.changes";
+ stat $multichanges or fail "$multichanges: $!";
+ print "build successful, results in $multichanges\n" or die $!;
+}
+
sub cmd_quilt_fixup {
badusage "incorrect arguments to dgit quilt-fixup";
my $clogp = parsechangelog();
diff --git a/dgit.1 b/dgit.1
index eb5b2c1..14b7d1e 100644
--- a/dgit.1
+++ b/dgit.1
@@ -12,8 +12,8 @@ dgit \- git integration with the Debian archive
[\fIsuite\fP]
.br
.B dgit
-[\fIdgit\-opts\fP] \fBbuild\fP
-[\fIgit\-buildpackage\-opts\fP|\fIdpkg\-buildpackage\-opts\fp]
+[\fIdgit\-opts\fP] \fBbuild\fP|\fBsbuild\fP
+[\fIbuild\-opts\fp]
.br
.B dgit
[\fIdgit\-opts\fP] \fBpush\fP [\fIdgit\-opts\fP]
@@ -78,13 +78,21 @@ into the current branch.
\fBdgit build\fR ...
Runs
.B git-buildpackage
-with some suitable options. Options and argumments after
-.B build
+with some suitable options. Options and argumments after build
will be passed on to git-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. Tagging and signing should be left to dgit push.
.TP
+\fBdgit sbuild\fR ...
+Constructs the source package, and uses sbuild to do a binary
+build, and uses mergechanges to merge the source and binary
+changes files. Options and argumments after sbuild will be passed on
+to sbuild. Changes files matching
+.IB package _ version _*.changes
+in the parent directory will be removed; the output is left in
+.IR package \fB_\fR version \fB_multi.changes\fR.
+.TP
.B dgit push
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
@@ -285,13 +293,26 @@ more output (currently, up to -DD is meaningfully different).
Specifies a git configuration option. dgit itself is also controlled
by git configuration options.
.TP
-.RI \fB--dget=\fR program |\fB--dput=\fR program |\fB--debsign=\fR program
-Specifies alternative programs to use instead of dget, dput
-or debsign.
-.TP
-.RI \fB--dget:\fR option |\fB--dput:\fR option |\fB--debsign:\fR option
-Specifies a single additional option to pass to dget, dput or
-debsign. Use repeatedly if multiple additional options are required.
+.RI \fB--dget=\fR program |\fB--dput=\fR program |...
+Specifies alternative programs to use instead of
+.BR dget ,
+.BR dput ,
+.BR debsign ,
+.BR dpkg-buildpackage
+.BR sbuild ,
+or
+.BR mergechanges .
+.TP
+.RI \fB--dget:\fR option |\fB--dput:\fR option |...
+Specifies a single additional option to pass to
+.BR dget ,
+.BR dput ,
+.BR debsign ,
+.BR dpkg-buildpackage
+.BR sbuild ,
+or
+.BR mergechanges .
+Can be repeated as necessary.
.TP
.BI -C changesfile
Specifies the .changes file which is to be uploaded. By default