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