summaryrefslogtreecommitdiff
path: root/usr.sbin/pkg_add/OpenBSD/Update.pm
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2004-11-12 21:52:02 +0000
committerMarc Espie <espie@cvs.openbsd.org>2004-11-12 21:52:02 +0000
commit197945d1c30d7875063e69c1e15bf2837930adf6 (patch)
tree1902dca3fc4044d47167b7328e98b08d7bc07c94 /usr.sbin/pkg_add/OpenBSD/Update.pm
parent90dfc606ada76d0cdc21d64f22912ca56786d84e (diff)
be saner wrt directory creation during pkg updates:
don't disturb existing objects if they're not directories, create them better if they don't exist.
Diffstat (limited to 'usr.sbin/pkg_add/OpenBSD/Update.pm')
-rw-r--r--usr.sbin/pkg_add/OpenBSD/Update.pm14
1 files changed, 11 insertions, 3 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/Update.pm b/usr.sbin/pkg_add/OpenBSD/Update.pm
index 9e2092f62de..9d230fca960 100644
--- a/usr.sbin/pkg_add/OpenBSD/Update.pm
+++ b/usr.sbin/pkg_add/OpenBSD/Update.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: Update.pm,v 1.26 2004/11/11 22:40:38 espie Exp $
+# $OpenBSD: Update.pm,v 1.27 2004/11/12 21:52:01 espie Exp $
#
# Copyright (c) 2004 Marc Espie <espie@openbsd.org>
#
@@ -74,11 +74,18 @@ sub extract
return;
}
+ my $d = dirname($file->{destdir}.$file->{name});
+ while (!-d $d && -e _) {
+ $d = dirname($d);
+ }
+ if (!-e _) {
+ File::Path::mkpath($d);
+ }
if ($state->{not}) {
- print "extracting tempfile under ", dirname($file->{destdir}.$file->{name}), "\n";
+ print "extracting tempfile under $d\n";
} else {
my ($fh, $tempname) = tempfile('pkg.XXXXXXXXXX',
- DIR => dirname($file->{destdir}.$file->{name}));
+ DIR => $d);
print "extracting $tempname\n" if $state->{very_verbose};
$file->{name} = $tempname;
@@ -94,6 +101,7 @@ sub extract
my $fullname = $self->fullname();
my $destdir = $state->{destdir};
+ return if -e $destdir.$fullname;
print "new directory ", $destdir, $fullname, "\n" if $state->{very_verbose};
return if $state->{not};
File::Path::mkpath($destdir.$fullname);