tags 179850 + patch tags 292169 + patch tags 291565 + patch thanks Dear Julien,
I have made a primary attempt to fix this bug, with the attached patch. It solves the following two problems: 1. If one gives the name of a source package to apt-build install, it works with the default source version it finds. 2. For packages such as pine (in non-free), there exist source packages but no binaries. This also handles that (seemingly) corner case. Disclaimer: - The workaround is not efficient, as it calls another round of apt-cache. - I don't know Perl. I copied stuff from your code elsewhere, and read up minimal things to get things rolling. I hope you are able to use the patch to fix these bugs. If you need me to do something more, please tell me (anything except learning Perl! ;-)). Thanks. Kumar -- Kumar Appaiah
From 19c8f9d94ee5a2613e83d0de183589b3932f0a6c Mon Sep 17 00:00:00 2001 From: Kumar Appaiah <[EMAIL PROTECTED]> Date: Thu, 23 Oct 2008 23:34:03 -0500 Subject: [PATCH] Fall back to default source package version if binary unavailable. In case a version of a binary package is not available, this commit makes apt-build fall back to the default version of the source package with the same name. This is useful in the following cases: - When apt-build is called with the name of a source package. - When apt-build is called on a package which has a source, but no binary (for example, pine has its source in non-free, but no binary for any architecture, as I write this). This commit is a basic attempt to fix bugs #179850, #291565 and #292169 on the Debian BTS. --- apt-build | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/apt-build b/apt-build index 7a4871b..74fde9f 100755 --- a/apt-build +++ b/apt-build @@ -447,6 +447,26 @@ sub get_pkg_version } close(APTCIN); + if ($pkg_version && $pkg_version !~ m/\(none\)/) { + return $pkg_version; + } + + # In case we fail to find a valid candidate, which may happen if, + # for example, the package has no binary version but a source + # version, we fall back to the source version in order to avoid + # dying. + open APTCIN, "LANGUAGE=C " . $conf->apt_cache . " showsrc $pkg_name |"; + while(<APTCIN>) + { + $pkg_version = $1 if(/^Version: (.*)$/ and $release eq "" ); + if( $release ) + { + last if ( /$release/ ); ## quit from while,but keep the version from the row before + $pkg_version = $2 if( /^\s(\*\*\*)?\s+(.*) \d/ ); + } + } + close(APTCIN); + print $pkg_version; return $pkg_version; } -- 1.5.6.5
signature.asc
Description: Digital signature