This is an automated email from the git hooks/post-receive script. jamessan pushed a commit to branch master in repository devscripts.
commit ed03c060a90baca7d086f916c0f6fe8b05246049 Author: James McCoy <[email protected]> Date: Sun Jul 6 23:05:16 2014 -0400 mk-build-deps: Return name of built .deb from build_equiv The previous approach of globbing the working directory for the name of the deb was prone to error when apt-cache emitted multiple source stanzas or previous .deb files had not been removed. Closes: #753657 Signed-off-by: James McCoy <[email protected]> --- debian/changelog | 2 ++ scripts/mk-build-deps.pl | 47 +++++++++++++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6518d53..2a8e468 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,8 @@ devscripts (2.14.6) UNRELEASED; urgency=medium install fails. + Read all of the output from “apt-cache showsrc” to ensure mk-build-deps doesn't get stuck waiting for apt-cache to exit. + + Pass the name of the .deb file out of build_equiv to ensure the correct + .deb is installed. (Closes: #753657) [ Christoph Berg ] * Update all qa.debian.org URLs to https://. diff --git a/scripts/mk-build-deps.pl b/scripts/mk-build-deps.pl index c1be28f..c84dc38 100755 --- a/scripts/mk-build-deps.pl +++ b/scripts/mk-build-deps.pl @@ -121,7 +121,6 @@ my $control; my $install_tool; my $root_cmd; my @packages; -my @deb_files; my @config_files = ('/etc/devscripts.conf', '~/.devscripts'); my %config_vars = ( @@ -338,27 +337,31 @@ while ($control = shift) { } if ($opt_install) { - for my $package (@packages) { - my $file = glob "${package}_*.deb"; - push @deb_files, $file; - } - my @root; if ($root_cmd) { push(@root, shellwords($root_cmd)); } + + my (@pkg_names, @deb_files, %uniq); + for my $package (@packages) { + if ($uniq{$package->{deb_file}}++ == 0) { + push @pkg_names, $package->{package}; + push @deb_files, $package->{deb_file}; + } + } + system @root, 'dpkg', '--unpack', @deb_files; - die("dpkg call failed\n") if ( ($?>>8) != 0 ); + die("$progname: dpkg --unpack failed\n") if ( ($?>>8) != 0 ); system @root, shellwords($install_tool), '-f', 'install'; if ( ($?>>8) != 0 ) { # Restore system to previous state, since apt wasn't able to resolve a # proper way to get the build-dep packages installed - system @root, 'dpkg', '--remove', @packages; - die("install call failed\n"); + system @root, 'dpkg', '--remove', @pkg_names; + die("$progname: apt-get install call failed\n"); } if ($opt_remove) { - foreach my $file (@deb_files) { + foreach my $file (map { $_->{package} } @packages) { unlink $file; } } @@ -382,14 +385,16 @@ sub build_equiv my $args = ''; my $arch = 'all'; - if ($opts->{depends} =~ /\[|\]/) { - $arch = 'any'; - - } if (defined $opt_arch) { $args = "--arch=$opt_arch "; $arch = $opt_arch; } + elsif ($opts->{depends} =~ m/\[|\]/) { + spawn(exec => ['dpkg-architecture', '-qDEB_HOST_ARCH'], + to_string => \$arch, + wait_child => 1); + chomp($arch); + } my $readme = '/usr/share/devscripts/README.mk-build-deps'; open EQUIVS, "| equivs-build $args-" @@ -406,11 +411,21 @@ sub build_equiv # Allow the file not to exist to ease testing print EQUIVS "Readme: $readme\n" if -r $readme; - print EQUIVS "Version: $opts->{version}\n" if $opts->{version}; + my $version = $opts->{version} || '1.0'; + print EQUIVS "Version: $version\n"; print EQUIVS "Description: build-dependencies for $opts->{name}\n" . " Depencency package to build the '$opts->{name}' package\n"; close EQUIVS; - return "$opts->{name}-$opts->{type}"; + + my $v = Dpkg::Version->new($version); + # The version in the .deb filename will not contain the epoch + $version = $v->as_string(omit_epoch => 1); + my $package = "$opts->{name}-$opts->{type}"; + my $deb_file = "${package}_${version}_${arch}.deb"; + return { + package => $package, + deb_file => $deb_file + }; } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/devscripts.git _______________________________________________ devscripts-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/devscripts-devel
