aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2007-10-10 13:43:04 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2007-10-10 13:43:04 +0000
commit315183f194881591480d9acd1eef685d6b64d7f8 (patch)
tree542c4e374774f0f2d2de56f520160c728ef53ab0 /src
parenta8629de827e4d5a67372614727ce6fcc26423f8c (diff)
* nix-store --optimise: flag "--dry-run" to just query what the disk
savings would be.
Diffstat (limited to 'src')
-rw-r--r--src/libstore/local-store.cc37
-rw-r--r--src/nix-store/nix-store.cc7
2 files changed, 26 insertions, 18 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index c77ab3c6c..9a85c48d9 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1016,25 +1016,30 @@ static void hashAndLink(bool dryRun, HashToPath & hashToPath,
return;
}
- printMsg(lvlTalkative, format("linking `%1%' to `%2%'") % path % prevPath.first);
+ if (!dryRun) {
+
+ printMsg(lvlTalkative, format("linking `%1%' to `%2%'") % path % prevPath.first);
- Path tempLink = (format("%1%.tmp-%2%-%3%")
- % path % getpid() % rand()).str();
+ Path tempLink = (format("%1%.tmp-%2%-%3%")
+ % path % getpid() % rand()).str();
- toggleWritable(dirOf(path), true);
+ toggleWritable(dirOf(path), true);
- if (link(prevPath.first.c_str(), tempLink.c_str()) == -1)
- throw SysError(format("cannot link `%1%' to `%2%'")
- % tempLink % prevPath.first);
-
- /* Atomically replace the old file with the new hard link. */
- if (rename(tempLink.c_str(), path.c_str()) == -1)
- throw SysError(format("cannot rename `%1%' to `%2%'")
- % tempLink % path);
-
- /* Make the directory read-only again and reset its timestamp
- back to 0. */
- _canonicalisePathMetaData(dirOf(path), false);
+ if (link(prevPath.first.c_str(), tempLink.c_str()) == -1)
+ throw SysError(format("cannot link `%1%' to `%2%'")
+ % tempLink % prevPath.first);
+
+ /* Atomically replace the old file with the new hard link. */
+ if (rename(tempLink.c_str(), path.c_str()) == -1)
+ throw SysError(format("cannot rename `%1%' to `%2%'")
+ % tempLink % path);
+
+ /* Make the directory read-only again and reset its
+ timestamp back to 0. */
+ _canonicalisePathMetaData(dirOf(path), false);
+
+ } else
+ printMsg(lvlTalkative, format("would link `%1%' to `%2%'") % path % prevPath.first);
stats.filesLinked++;
stats.bytesFreed += st.st_size;
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index 678ce2ae9..0d474946b 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -640,16 +640,19 @@ static void opOptimise(Strings opFlags, Strings opArgs)
if (!opArgs.empty())
throw UsageError("no arguments expected");
+ bool dryRun = false;
+
for (Strings::iterator i = opFlags.begin();
i != opFlags.end(); ++i)
- throw UsageError(format("unknown flag `%1%'") % *i);
+ if (*i == "--dry-run") dryRun = true;
+ else throw UsageError(format("unknown flag `%1%'") % *i);
LocalStore * store2(dynamic_cast<LocalStore *>(store.get()));
if (!store2) throw Error("you don't have sufficient rights to use --optimise");
OptimiseStats stats;
try {
- store2->optimiseStore(true, stats);
+ store2->optimiseStore(dryRun, stats);
} catch (...) {
showOptimiseStats(stats);
throw;