[Buildd-tools-devel] Bug#408091: [rleigh@whinlatter.ukfsn.org: Re: Bug#400112: [PROPOSAL] forbid source/binary package name conflicts]

Lucas Nussbaum lucas at lucas-nussbaum.net
Wed Feb 21 12:20:58 CET 2007


This mail never went to 408091

----- Forwarded message from Roger Leigh <rleigh at whinlatter.ukfsn.org> -----

From: Roger Leigh <rleigh at whinlatter.ukfsn.org>
To: Goswin von Brederlow <brederlo at informatik.uni-tuebingen.de>
Cc: Kurt Roeckx <kurt at roeckx.be>, 400112 at bugs.debian.org,
	"408091 at bugs.debian.org. Lucas Nussbaum" <lucas at lucas-nussbaum.net>
Date: Sat, 10 Feb 2007 19:52:25 +0000
Subject: Re: Bug#400112: [PROPOSAL] forbid source/binary package name conflicts
User-Agent: Mutt/1.5.13 (2006-08-11)

On Fri, Jan 19, 2007 at 12:47:41PM +0100, Goswin von Brederlow wrote:
> Reading the source sbuild is prepared to parse multiple returns from
> apt-cache just fine. But it ignores the package name and only uses the
> version to keep them apart.
> 
> So a case that would screw up sbuild would have to look something like
> this:
> 
> Package: foo
> Binary: bar, foo
> Version: 1.2-3
> 
> Package: bar
> Binary: bar
> Version: 1.2-3
> 
> Too bad apt-cache doesn't have a --only-source option. Sbuild has to
> use package name and version.
> 
> Something like this (untested):

I reworked your patch, and the result is attached.  This has been
committed upstream as revision 1085.  You can get the current
sbuild with:

  svn co svn://svn.debian.org/svn/buildd-tools/trunk/sbuild

> But I don't yet see a problem here. The apt-cache check is purely
> informational. As long as it finds an entry with the right version it
> is happy and the "apt-get --only-source source" below that will always
> do the right thing. So the worst you get is that the "Can't find
> source" message is skipped and apt-get fails.
> 
> Or not?

With or without the patch applied,

  sbuild qd_2.1.200-1

succeeds and

  sbuild kfolding_1.0.0-rc2-5

fails.  I haven't yet found out why.  Thanks for the patch you proposed,
which I have applied in a modified (working and debugged) form.  If you
have any further ideas about why kfolding won't build, I'll be happy
to investigate further :)


Regards,
Roger

-- 
  .''`.  Roger Leigh
 : :' :  Debian GNU/Linux             http://people.debian.org/~rleigh/
 `. `'   Printing on GNU/Linux?       http://gutenprint.sourceforge.net/
   `-    GPG Public Key: 0x25BFB848   Please GPG sign your mail.

Index: sbuild
===================================================================
--- sbuild	(revision 1084)
+++ sbuild	(working copy)
@@ -427,20 +427,28 @@
 			}
 			{
 				local($/) = "";
+				my $package;
 				my $ver;
 				my $tfile;
 				while( <PIPE> ) {
+					$package = $1 if /^Package:\s+(\S+)\s*$/mi;
 					$ver = $1 if /^Version:\s+(\S+)\s*$/mi;
 					$tfile = $1 if /^Files:\s*\n((\s+.*\s*\n)+)/mi;
-					if (defined $ver && defined $tfile) {
-						@{$entries{$ver}} = map { (split( /\s+/, $_ ))[3] }
+					if (defined $package && defined $ver && defined $tfile) {
+						@{$entries{"$package $ver"}} = map { (split( /\s+/, $_ ))[3] }
 							split( "\n", $tfile );
-					} else {
-						print PLOG "$conf::apt_cache returned no information about $pkg source\n";
-						print PLOG "Are there any deb-src lines in your /etc/apt/sources.list?\n";
-						return ("ERROR");
+						undef($package);
+						undef($ver);
+						undef($tfile);
 					}
 				}
+
+				if (! scalar keys %entries) {
+					print PLOG "$conf::apt_cache returned no information about $pkg source\n";
+					print PLOG "Are there any deb-src lines in your /etc/apt/sources.list?\n";
+					return ("ERROR");
+
+				}
 			}
 			close(PIPE);
 			waitpid $pid, 0;
@@ -449,7 +457,7 @@
 				return ("ERROR");
 			}
 				
-			if (!defined($entries{$version})) {
+			if (!defined($entries{"$pkg $version"})) {
 				if (!$retried) {
 					# try to update apt's cache if nothing found
 					run_apt_command("$conf::apt_get", "update >/dev/null", "root", 0);
@@ -464,7 +472,7 @@
 			}
 
 			print PLOG "Fetching source files...\n";
-			@made = @{$entries{$version}};
+			@made = @{$entries{"$pkg $version"}};
 
 			my $command2 = get_apt_command("$conf::apt_get", "--only-source -q -d source $pkg=$version 2>&1 </dev/null", $main::username, 0);
 			if (!open( PIPE, "$command2 |" )) {
Index: debian/changelog
===================================================================
--- debian/changelog	(revision 1084)
+++ debian/changelog	(working copy)
@@ -10,8 +10,12 @@
       Lichtenheld for this patch (Closes: #407293).
     - When running apt-cache, divert STDOUT to the package log, so that
       warnings do not get mailed separately (Closes: #399178).
-    - fetch_source_files: Correct indentation, and error with brace
-      placement which caused apt-cache output to not be used.
+    - fetch_source_files:
+      + Correct indentation, and error with brace placement which caused
+        apt-cache output to not be used.
+      + Add package information into the key of the %entries hash, in
+        order to cope with multiple packages being returned by apt-cache.
+        Based on a patch by Goswin von Brederlow.
   * sbuild.conf.local:
     - Add pgp_options from sbuild.conf (Closes: #398128).
     - Add check_watches.




----- End forwarded message -----

-- 
| Lucas Nussbaum
| lucas at lucas-nussbaum.net   http://www.lucas-nussbaum.net/ |
| jabber: lucas at nussbaum.fr             GPG: 1024D/023B3F4F |




More information about the Buildd-tools-devel mailing list