From 5e1d2c9fa4d4d4e48915b1414c337c0e9e5710a0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 14 Mar 2008 13:35:41 -0400 Subject: [PATCH] * Deal with rpms that relocate ie, /usr into /usr/local, and don't try to move /usr into /usr/local in this case. Closes: #470905 --- Alien/Package/Rpm.pm | 39 +++++++++++++++++++++++++++------------ debian/changelog | 7 +++++++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/Alien/Package/Rpm.pm b/Alien/Package/Rpm.pm index 9f0e93d..02e00d9 100644 --- a/Alien/Package/Rpm.pm +++ b/Alien/Package/Rpm.pm @@ -187,30 +187,45 @@ sub unpack { # # Test to see if the package contains the prefix directory already. if (defined $this->prefixes && ! -e "$workdir/".$this->prefixes) { + my $relocate=1; + # Get the files to move. my @filelist=glob("$workdir/*"); - + # Now, make the destination directory. my $collect=$workdir; foreach (split m:/:, $this->prefixes) { if ($_ ne '') { # this keeps us from using anything but relative paths. $collect.="/$_"; + if (-d $collect) { + # The package contains a parent + # directory of the relocation + # directory. Since it's impossible + # to move a parent directory into + # its child, bail out and do + # nothing. + $relocate=0; + last; + } $this->do("mkdir", $collect) || die "unable to mkdir $collect: $!"; } } - # Now move all files in the package to the directory we made. - if (@filelist) { - $this->do("mv", @filelist, "$workdir/".$this->prefixes) - or die "error moving unpacked files into the default prefix directory: $!"; - } - # Deal with relocating conffiles. - my @cf; - foreach my $cf (@{$this->conffiles}) { - $cf=$this->prefixes.$cf; - push @cf, $cf; + if ($relocate) { + # Now move all files in the package to the directory we made. + if (@filelist) { + $this->do("mv", @filelist, "$workdir/".$this->prefixes) + or die "error moving unpacked files into the default prefix directory: $!"; + } + + # Deal with relocating conffiles. + my @cf; + foreach my $cf (@{$this->conffiles}) { + $cf=$this->prefixes.$cf; + push @cf, $cf; + } + $this->conffiles([@cf]); } - $this->conffiles([@cf]); } # rpm files have two sets of permissions; the set in the cpio diff --git a/debian/changelog b/debian/changelog index 27d47fb..edad166 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +alien (8.71) unstable; urgency=low + + * Deal with rpms that relocate ie, /usr into /usr/local, and don't + try to move /usr into /usr/local in this case. Closes: #470905 + + -- Joey Hess Fri, 14 Mar 2008 13:35:33 -0400 + alien (8.70) unstable; urgency=low * Extract prefixes field before extracting scripts so that