forked from lix-project/lix
addPermRoot(): Remove indirect flag
This commit is contained in:
parent
00d25e8457
commit
82b77a7726
|
@ -147,7 +147,7 @@ static std::shared_ptr<Registry> getGlobalRegistry(ref<Store> store)
|
||||||
if (!hasPrefix(path, "/")) {
|
if (!hasPrefix(path, "/")) {
|
||||||
auto storePath = downloadFile(store, path, "flake-registry.json", false).storePath;
|
auto storePath = downloadFile(store, path, "flake-registry.json", false).storePath;
|
||||||
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
|
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
|
||||||
store2->addPermRoot(storePath, getCacheDir() + "/nix/flake-registry.json", true);
|
store2->addPermRoot(storePath, getCacheDir() + "/nix/flake-registry.json");
|
||||||
path = store->toRealPath(storePath);
|
path = store->toRealPath(storePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -85,8 +85,7 @@ void LocalStore::addIndirectRoot(const Path & path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Path LocalFSStore::addPermRoot(const StorePath & storePath,
|
Path LocalFSStore::addPermRoot(const StorePath & storePath, const Path & _gcRoot)
|
||||||
const Path & _gcRoot, bool indirect, bool allowOutsideRootsDir)
|
|
||||||
{
|
{
|
||||||
Path gcRoot(canonPath(_gcRoot));
|
Path gcRoot(canonPath(_gcRoot));
|
||||||
|
|
||||||
|
@ -95,31 +94,12 @@ Path LocalFSStore::addPermRoot(const StorePath & storePath,
|
||||||
"creating a garbage collector root (%1%) in the Nix store is forbidden "
|
"creating a garbage collector root (%1%) in the Nix store is forbidden "
|
||||||
"(are you running nix-build inside the store?)", gcRoot);
|
"(are you running nix-build inside the store?)", gcRoot);
|
||||||
|
|
||||||
if (indirect) {
|
/* Don't clobber the link if it already exists and doesn't
|
||||||
/* Don't clobber the link if it already exists and doesn't
|
point to the Nix store. */
|
||||||
point to the Nix store. */
|
if (pathExists(gcRoot) && (!isLink(gcRoot) || !isInStore(readLink(gcRoot))))
|
||||||
if (pathExists(gcRoot) && (!isLink(gcRoot) || !isInStore(readLink(gcRoot))))
|
throw Error("cannot create symlink '%1%'; already exists", gcRoot);
|
||||||
throw Error("cannot create symlink '%1%'; already exists", gcRoot);
|
makeSymlink(gcRoot, printStorePath(storePath));
|
||||||
makeSymlink(gcRoot, printStorePath(storePath));
|
addIndirectRoot(gcRoot);
|
||||||
addIndirectRoot(gcRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
if (!allowOutsideRootsDir) {
|
|
||||||
Path rootsDir = canonPath((format("%1%/%2%") % stateDir % gcRootsDir).str());
|
|
||||||
|
|
||||||
if (string(gcRoot, 0, rootsDir.size() + 1) != rootsDir + "/")
|
|
||||||
throw Error(
|
|
||||||
"path '%1%' is not a valid garbage collector root; "
|
|
||||||
"it's not in the directory '%2%'",
|
|
||||||
gcRoot, rootsDir);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (baseNameOf(gcRoot) == std::string(storePath.to_string()))
|
|
||||||
writeFile(gcRoot, "");
|
|
||||||
else
|
|
||||||
makeSymlink(gcRoot, printStorePath(storePath));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check that the root can be found by the garbage collector.
|
/* Check that the root can be found by the garbage collector.
|
||||||
!!! This can be very slow on machines that have many roots.
|
!!! This can be very slow on machines that have many roots.
|
||||||
|
|
|
@ -105,7 +105,7 @@ Path createGeneration(ref<LocalFSStore> store, Path profile, StorePath outPath)
|
||||||
user environment etc. we've just built. */
|
user environment etc. we've just built. */
|
||||||
Path generation;
|
Path generation;
|
||||||
makeName(profile, num + 1, generation);
|
makeName(profile, num + 1, generation);
|
||||||
store->addPermRoot(outPath, generation, true);
|
store->addPermRoot(outPath, generation);
|
||||||
|
|
||||||
return generation;
|
return generation;
|
||||||
}
|
}
|
||||||
|
|
|
@ -649,8 +649,7 @@ public:
|
||||||
ref<FSAccessor> getFSAccessor() override;
|
ref<FSAccessor> getFSAccessor() override;
|
||||||
|
|
||||||
/* Register a permanent GC root. */
|
/* Register a permanent GC root. */
|
||||||
Path addPermRoot(const StorePath & storePath,
|
Path addPermRoot(const StorePath & storePath, const Path & gcRoot);
|
||||||
const Path & gcRoot, bool indirect, bool allowOutsideRootsDir = false);
|
|
||||||
|
|
||||||
virtual Path getRealStoreDir() { return storeDir; }
|
virtual Path getRealStoreDir() { return storeDir; }
|
||||||
|
|
||||||
|
|
|
@ -525,7 +525,7 @@ static void _main(int argc, char * * argv)
|
||||||
|
|
||||||
for (auto & symlink : resultSymlinks)
|
for (auto & symlink : resultSymlinks)
|
||||||
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
|
if (auto store2 = store.dynamic_pointer_cast<LocalFSStore>())
|
||||||
store2->addPermRoot(store->parseStorePath(symlink.second), absPath(symlink.first), true);
|
store2->addPermRoot(store->parseStorePath(symlink.second), absPath(symlink.first));
|
||||||
|
|
||||||
logger->stop();
|
logger->stop();
|
||||||
|
|
||||||
|
|
|
@ -74,7 +74,7 @@ void processExpr(EvalState & state, const Strings & attrPaths,
|
||||||
if (++rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
if (++rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||||
auto store2 = state.store.dynamic_pointer_cast<LocalFSStore>();
|
auto store2 = state.store.dynamic_pointer_cast<LocalFSStore>();
|
||||||
if (store2)
|
if (store2)
|
||||||
drvPath = store2->addPermRoot(store2->parseStorePath(drvPath), rootName, true);
|
drvPath = store2->addPermRoot(store2->parseStorePath(drvPath), rootName);
|
||||||
}
|
}
|
||||||
std::cout << fmt("%s%s\n", drvPath, (outputName != "out" ? "!" + outputName : ""));
|
std::cout << fmt("%s%s\n", drvPath, (outputName != "out" ? "!" + outputName : ""));
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ static PathSet realisePath(StorePathWithOutputs path, bool build = true)
|
||||||
Path rootName = gcRoot;
|
Path rootName = gcRoot;
|
||||||
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||||
if (i->first != "out") rootName += "-" + i->first;
|
if (i->first != "out") rootName += "-" + i->first;
|
||||||
outPath = store2->addPermRoot(store->parseStorePath(outPath), rootName, true);
|
outPath = store2->addPermRoot(store->parseStorePath(outPath), rootName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
outputs.insert(outPath);
|
outputs.insert(outPath);
|
||||||
|
@ -103,7 +103,7 @@ static PathSet realisePath(StorePathWithOutputs path, bool build = true)
|
||||||
Path rootName = gcRoot;
|
Path rootName = gcRoot;
|
||||||
rootNr++;
|
rootNr++;
|
||||||
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
if (rootNr > 1) rootName += "-" + std::to_string(rootNr);
|
||||||
return {store2->addPermRoot(path.path, rootName, true)};
|
return {store2->addPermRoot(path.path, rootName)};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {store->printStorePath(path.path)};
|
return {store->printStorePath(path.path)};
|
||||||
|
|
|
@ -71,14 +71,14 @@ struct CmdBuild : InstallablesCommand, MixDryRun, MixProfile
|
||||||
[&](BuildableOpaque bo) {
|
[&](BuildableOpaque bo) {
|
||||||
std::string symlink = outLink;
|
std::string symlink = outLink;
|
||||||
if (i) symlink += fmt("-%d", i);
|
if (i) symlink += fmt("-%d", i);
|
||||||
store2->addPermRoot(bo.path, absPath(symlink), true);
|
store2->addPermRoot(bo.path, absPath(symlink));
|
||||||
},
|
},
|
||||||
[&](BuildableFromDrv bfd) {
|
[&](BuildableFromDrv bfd) {
|
||||||
for (auto & output : bfd.outputs) {
|
for (auto & output : bfd.outputs) {
|
||||||
std::string symlink = outLink;
|
std::string symlink = outLink;
|
||||||
if (i) symlink += fmt("-%d", i);
|
if (i) symlink += fmt("-%d", i);
|
||||||
if (output.first != "out") symlink += fmt("-%s", output.first);
|
if (output.first != "out") symlink += fmt("-%s", output.first);
|
||||||
store2->addPermRoot(output.second, absPath(symlink), true);
|
store2->addPermRoot(output.second, absPath(symlink));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}, buildables[i]);
|
}, buildables[i]);
|
||||||
|
|
|
@ -122,7 +122,7 @@ struct CmdBundle : InstallableCommand
|
||||||
if (!outLink)
|
if (!outLink)
|
||||||
outLink = baseNameOf(app.program);
|
outLink = baseNameOf(app.program);
|
||||||
|
|
||||||
store.dynamic_pointer_cast<LocalFSStore>()->addPermRoot(outPath, absPath(*outLink), true);
|
store.dynamic_pointer_cast<LocalFSStore>()->addPermRoot(outPath, absPath(*outLink));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue