diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-12-29 19:04:21 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-12-29 19:04:21 +0000 |
commit | 2fdb27e7f21c99174d35556575e3d25bf2bdc23e (patch) | |
tree | 303a1fc8b8c6907f49441554b0b5da3076d4d931 /scripts | |
parent | e1e9c036f9313ac6bf160dba67e694b7868f1567 (diff) |
* Atomic file replacement is good.
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/generate-patches.pl | 12 | ||||
-rw-r--r-- | scripts/readmanifest.pm.in | 5 |
2 files changed, 14 insertions, 3 deletions
diff --git a/scripts/generate-patches.pl b/scripts/generate-patches.pl index e084b994d..7d957839b 100755 --- a/scripts/generate-patches.pl +++ b/scripts/generate-patches.pl @@ -198,9 +198,17 @@ foreach my $p (keys %dstOutPaths) { my $finalName = "$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"; + + rename("$patchesDir/$finalName.tmp", "$patchesDir/$finalName") + or die "cannot rename $patchesDir/$finalName.tmp"; # Add the patch to the manifest. addPatch \%dstPatches, $p, diff --git a/scripts/readmanifest.pm.in b/scripts/readmanifest.pm.in index 766aa4219..31ea5f43c 100644 --- a/scripts/readmanifest.pm.in +++ b/scripts/readmanifest.pm.in @@ -146,7 +146,7 @@ sub writeManifest my $patches = shift; my $successors = shift; - open MANIFEST, ">$manifest"; + open MANIFEST, ">$manifest.tmp"; # !!! check exclusive foreach my $storePath (keys %{$narFiles}) { my $narFileList = $$narFiles{$storePath}; @@ -184,6 +184,9 @@ sub writeManifest close MANIFEST; + + rename("$manifest.tmp", $manifest) + or die "cannot rename $manifest.tmp: $!"; } |