[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#400112: [PROPOSAL] forbid source/binary package name conflicts



Kurt Roeckx <kurt@roeckx.be> writes:

> On Thu, Jan 18, 2007 at 03:12:12PM +0100, Goswin von Brederlow wrote:
>> 
>> In the initial report you mentioned that sbuild has a problem with
>> confusing names like this. Afaik sbuild solely works on source package
>> name and version and that is always unique. Where do you get a
>> conflict?
>
> It uses apt-cache to check for available versions, which as you show
> gives both results. And sbuild's behaviour depends on the order
> apt-cache returns those.
>
>
> Kurt

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):

Line 424...

                          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) {
+                          if (defined $package && defined $ver && defined $tfile) {
-                                  @{$entries{$ver}} = map { (split( /\s+/, $_ ))[3] }
+                                  @{$entries{"$package $ver"}} = map { (split( /\s+/, $_ ))[3] }
                                          split( "\n", $tfile );
                          } else {
                                  print PLOG "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 );
                        if ($?) {
                                print PLOG "$conf::apt_cache failed\n";
                                return ("ERROR");
                        }

-                        if (!defined($entries{$version})) {
+                        if (!defined($entries{"$pkg $version"})) {



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?

MfG
        Goswin




Reply to: