patches/faster2.diff

177 lines
4.9 KiB
Diff

? a
? afresh
? faster.diff
? faster2.diff
? todo
? OpenBSD/.swp
? OpenBSD/strict.diff
Index: OpenBSD/Add.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/Add.pm,v
retrieving revision 1.187
diff -u -p -r1.187 Add.pm
--- OpenBSD/Add.pm 9 Mar 2022 12:27:51 -0000 1.187
+++ OpenBSD/Add.pm 13 Mar 2022 11:58:19 -0000
@@ -466,6 +466,7 @@ sub find_safe_dir
my $fullname = $self->fullname;
my $filename = $state->{destdir}.$fullname;
my $d = dirname($filename);
+ my $orig = $d;
# we go back up until we find an existing directory.
# hopefully this will be on the same file system.
@@ -483,6 +484,12 @@ sub find_safe_dir
if (!-e _ && !$state->{not}) {
$state->make_path($d, $fullname);
}
+ if ($state->{current_set}{simple_update} &&
+ $d eq $orig &&
+ !-e $filename) {
+ $self->{avoid_temp} = $filename;
+ }
+
return $d;
}
@@ -503,6 +510,18 @@ sub create_temp
return ($fh, $tempname);
}
+sub may_create_temp
+{
+ my ($self, $d, $state) = @_;
+ if ($self->{avoid_temp}) {
+ if (open(my $fh, '>', $self->{avoid_temp})) {
+ return ($fh, $self->{avoid_temp});
+ }
+ }
+ delete $self->{avoid_temp};
+ return $self->create_temp($d, $state);
+}
+
sub tie
{
my ($self, $state) = @_;
@@ -513,6 +532,16 @@ sub tie
$self->SUPER::extract($state);
my $d = $self->find_safe_dir($state);
+ my $src = $self->{tieto}->realname($state);
+ my $dest = $self->realname($state);
+ if ($state->{current_set}{simple_update} && $src eq $dest) {
+ $state->say("No name change on tied file #1", $src)
+ if $state->verbose >= 3;
+ $self->{tieto}{dont_delete} = 1;
+ $self->{avoid_temp} = 1;
+ return;
+ }
+ delete $self->{avoid_temp};
if ($state->{not}) {
$state->say("link #1 -> #2",
$self->name, $d) if $state->verbose >= 3;
@@ -520,7 +549,6 @@ sub tie
my ($fh, $tempname) = $self->create_temp($d, $state);
return if !defined $tempname;
- my $src = $self->{tieto}->realname($state);
unlink($tempname);
$state->say("link #1 -> #2", $src, $tempname)
if $state->verbose >= 3;
@@ -528,6 +556,7 @@ sub tie
}
}
+
sub extract
{
my ($self, $state, $file) = @_;
@@ -540,13 +569,13 @@ sub extract
$self->name, $d) if $state->verbose >= 3;
$state->{archive}->skip;
} else {
- my ($fh, $tempname) = $self->create_temp($d, $state);
- if (!defined $tempname) {
+ my ($fh, $filename) = $self->may_create_temp($d, $state);
+ if (!defined $filename) {
$state->{archive}->skip;
return;
}
- $state->say("extract #1 -> #2", $self->name, $tempname)
+ $state->say("extract #1 -> #2", $self->name, $filename)
if $state->verbose >= 3;
@@ -555,7 +584,7 @@ sub extract
$self->stringize);
}
$file->extract_to_fh($fh);
- $self->may_check_digest($tempname, $state);
+ $self->may_check_digest($filename, $state);
}
}
@@ -576,17 +605,21 @@ sub install
} elsif (defined $self->{symlink}) {
symlink($self->{symlink}, $destdir.$fullname);
} else {
- if (!defined $self->{tempname}) {
- return if $state->allow_nonroot($fullname);
- $state->fatal("No tempname for #1", $fullname);
+ if (defined $self->{avoid_temp}) {
+ delete $self->{avoid_temp};
+ } else {
+ if (!defined $self->{tempname}) {
+ return if $state->allow_nonroot($fullname);
+ $state->fatal("No tempname for #1", $fullname);
+ }
+ rename($self->{tempname}, $destdir.$fullname) or
+ $state->fatal("can't move #1 to #2: #3",
+ $self->{tempname}, $fullname, $!);
+ $state->say("moving #1 -> #2",
+ $self->{tempname}, $destdir.$fullname)
+ if $state->verbose >= 5;
+ delete $self->{tempname};
}
- rename($self->{tempname}, $destdir.$fullname) or
- $state->fatal("can't move #1 to #2: #3",
- $self->{tempname}, $fullname, $!);
- $state->say("moving #1 -> #2",
- $self->{tempname}, $destdir.$fullname)
- if $state->verbose >= 5;
- delete $self->{tempname};
}
$self->set_modes($state, $destdir.$fullname);
}
Index: OpenBSD/Delete.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/Delete.pm,v
retrieving revision 1.160
diff -u -p -r1.160 Delete.pm
--- OpenBSD/Delete.pm 24 Jul 2019 18:05:26 -0000 1.160
+++ OpenBSD/Delete.pm 13 Mar 2022 11:58:19 -0000
@@ -448,6 +448,7 @@ sub is_intact
sub delete
{
my ($self, $state) = @_;
+ return if $self->{dont_delete};
my $realname = $self->realname($state);
if (defined $self->{symlink}) {
Index: OpenBSD/PkgAdd.pm
===================================================================
RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PkgAdd.pm,v
retrieving revision 1.122
diff -u -p -r1.122 PkgAdd.pm
--- OpenBSD/PkgAdd.pm 12 Oct 2021 09:06:37 -0000 1.122
+++ OpenBSD/PkgAdd.pm 13 Mar 2022 11:58:19 -0000
@@ -102,7 +102,7 @@ sub tie_files
$self->{tieto} = $tied;
$tied->{tied} = 1;
$state->say("Tying #1 to #2", $self->stringize,
- $tied->stringize) if $state->verbose >= 3;
+ $tied->realname) if $state->verbose >= 3;
}
}