* Atomic file replacement is good.

This commit is contained in:
Eelco Dolstra 2004-12-29 19:04:21 +00:00
parent e1e9c036f9
commit 2fdb27e7f2
2 changed files with 14 additions and 3 deletions

View file

@ -198,9 +198,17 @@ foreach my $p (keys %dstOutPaths) {
my $finalName = my $finalName =
"$narBz2Hash-$name-$closestVersion-to-$version.nar-diff"; "$narBz2Hash-$name-$closestVersion-to-$version.nar-diff";
system("cp '$tmpdir/DIFF' '$patchesDir/$finalName'") == 0 if (-e "$patchesDir/$finalName") {
print " not copying, already exists\n";
next;
}
system("cp '$tmpdir/DIFF' '$patchesDir/$finalName.tmp'") == 0
or die "cannot copy diff"; or die "cannot copy diff";
rename("$patchesDir/$finalName.tmp", "$patchesDir/$finalName")
or die "cannot rename $patchesDir/$finalName.tmp";
# Add the patch to the manifest. # Add the patch to the manifest.
addPatch \%dstPatches, $p, addPatch \%dstPatches, $p,

View file

@ -146,7 +146,7 @@ sub writeManifest
my $patches = shift; my $patches = shift;
my $successors = shift; my $successors = shift;
open MANIFEST, ">$manifest"; open MANIFEST, ">$manifest.tmp"; # !!! check exclusive
foreach my $storePath (keys %{$narFiles}) { foreach my $storePath (keys %{$narFiles}) {
my $narFileList = $$narFiles{$storePath}; my $narFileList = $$narFiles{$storePath};
@ -184,6 +184,9 @@ sub writeManifest
close MANIFEST; close MANIFEST;
rename("$manifest.tmp", $manifest)
or die "cannot rename $manifest.tmp: $!";
} }