mirror of
https://github.com/NixOS/nix
synced 2025-07-04 11:21:47 +02:00
optimiseStore(): Use a content-addressed file store in /nix/store/.links
optimiseStore() now creates persistent, content-addressed hard links in /nix/store/.links. For instance, if it encounters a file P with hash H, it will create a hard link P' = /nix/store/.link/<H> to P if P' doesn't already exist; if P' exist, then P is replaced by a hard link to P'. This is better than the previous in-memory map, because it had the tendency to unnecessarily replace hard links with a hard link to whatever happened to be the first file with a given hash it encountered. It also allows on-the-fly, incremental optimisation.
This commit is contained in:
parent
ed59bf7a18
commit
564fb7d9fa
3 changed files with 109 additions and 114 deletions
|
@ -746,18 +746,12 @@ static void showOptimiseStats(OptimiseStats & stats)
|
|||
files with the same contents. */
|
||||
static void opOptimise(Strings opFlags, Strings opArgs)
|
||||
{
|
||||
if (!opArgs.empty())
|
||||
if (!opArgs.empty() || !opFlags.empty())
|
||||
throw UsageError("no arguments expected");
|
||||
|
||||
bool dryRun = false;
|
||||
|
||||
foreach (Strings::iterator, i, opFlags)
|
||||
if (*i == "--dry-run") dryRun = true;
|
||||
else throw UsageError(format("unknown flag `%1%'") % *i);
|
||||
|
||||
OptimiseStats stats;
|
||||
try {
|
||||
ensureLocalStore().optimiseStore(dryRun, stats);
|
||||
ensureLocalStore().optimiseStore(stats);
|
||||
} catch (...) {
|
||||
showOptimiseStats(stats);
|
||||
throw;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue