Package: dpkg-dev
Version: 1.17.25
Severity: normal

This is about "dpkg-source -x ..." for multiple upstream tarbells.

In short, if there are directories matching component names of secondary
tarballs, dpkg-source should not warn them if such directories contain
nothing.  (I checked the pertinent part of the source in the git repo,
too.  I see no recent changes on this issue.)

Here is a long story.

For example, let's think about:
 fritzing_0.9.2b+dfsg.orig.tar.gz
 fritzing_0.9.2b+dfsg.orig-parts.tar.gz
(In reality these are fritzing-app and fritzing-parts but renamed to fit
Debian source package packaging scheme V3).

The upstream uses git submodule to combine these 2 git archives.
Naturally, fritzing_0.9.2b+dfsg.orig.tar.gz contains an *EMPTY*
directory "parts" as the result... if packaged without repackaging(*)

Currently, this happens (run under -d):
| dpkg-source: info: unpacking fritzing_0.9.2b+dfsg.orig.tar.gz
| dpkg-source: info: unpacking fritzing_0.9.2b+dfsg.orig-parts.tar.gz
| dpkg-source: warning: required removal of `parts' installed by original 
tarball
|  at /usr/share/perl5/Dpkg/ErrorHandling.pm line 59.
|         Dpkg::ErrorHandling::warning("required removal of `%s' installed by 
orig
| inal tarball", "parts") called at /usr/share/perl5/Dpkg/Source/Package/V2.pm 
lin
| e 177
|         
Dpkg::Source::Package::V2::do_extract(Dpkg::Source::Package::V3::Quilt=H
| ASH(0x2607968), "fritzing-0.9.2b+dfsg") called at 
/usr/share/perl5/Dpkg/Source/P
| ackage.pm line 490
|         eval {...} called at /usr/share/perl5/Dpkg/Source/Package.pm line 490
|         
Dpkg::Source::Package::extract(Dpkg::Source::Package::V3::Quilt=HASH(0x2
| 607968), "fritzing-0.9.2b+dfsg") called at /usr/bin/dpkg-source line 489

This is not a very critical problem but this warning should only be
issued if the directory in question is non-empty.  Removal of empty
directories to put component in place should happen without warning.

As I cloned dpkg git repo, the pertinent part is the same as the one in
jessie.  dpkg/scripts/Dpkg/Source/Package/V2.pm (Quote from line 171)

|     # Extract additional orig tarballs
|     foreach my $subdir (sort keys %addonfile) {
|         my $file = $addonfile{$subdir};
|         info(g_('unpacking %s'), $file);
|         if (-e "$newdirectory/$subdir") {
|             warning(g_("required removal of '%s' installed by original 
tarball"),
|                     $subdir);
|             erasedir("$newdirectory/$subdir");
|         }
|         $tar = Dpkg::Source::Archive->new(filename => "$dscdir$file");
|         $tar->extract("$newdirectory/$subdir", no_fixperms => 1);
|     }

Here, script erases with erasedir which is defined in
dpkg/scripts/Dpkg/Source/Functions.pm essentially as:
   system 'rm', '-rf', '--', $dir

I think if $newdirectory/$subdir contains no files, subdirectories,
symlinks, ..., then it should quietly remove $newdirectory/$subdir to
cope with "git submodule ..." etc. and proceed to put the content of
fritzing_0.9.2b+dfsg.orig-parts.tar.gz while renaming the first level
directory from "fritzing-parts-0.9.2b" to "parts".

Of course, if such directories have any files, dpkg-sourc3 should warn
and do "rm -rf ...", fail, or, move newdirectory/$subdir to
newdirectory/${subdir}.orig.

So dpkg/scripts/Dpkg/Source/Package/V2.pm needs to check if
$newdirectory/$subdir contain any thing in it or not.  If nothing,
remove it with "rmdir $newdirectory/$subdir" without warning first.

Osamu

(*) NOTE: The actual fritzing packages in our sid/experimental archive
          does not use this packaging scheme yet.

-- System Information:
Debian Release: 8.1
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 
'stable'), (99, 'testing'), (98, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages dpkg-dev depends on:
ii  base-files         8+deb8u1
ii  binutils           2.25-5
ii  bzip2              1.0.6-7+b3
ii  libdpkg-perl       1.17.25
ii  make-guile [make]  4.0-8.1
ii  patch              2.7.5-1
ii  xz-utils           5.1.1alpha+20120614-2+b3

Versions of packages dpkg-dev recommends:
ii  build-essential          11.7
ii  fakeroot                 1.20.2-1
ii  gcc [c-compiler]         4:4.9.2-2
ii  gcc-4.8 [c-compiler]     4.8.4-1
ii  gcc-4.9 [c-compiler]     4.9.2-10
ii  gnupg                    1.4.18-7
ii  gnupg2                   2.0.26-6
ii  gpgv                     1.4.18-7
ii  libalgorithm-merge-perl  0.08-2

Versions of packages dpkg-dev suggests:
ii  debian-keyring  2015.04.10

-- no debconf information

Reply via email to