From 7bcc9f2aaf87a08a7570610f45e99754fd74d3f6 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Sun, 2 Feb 2020 12:28:56 +0100 Subject: [PATCH] Add convenience overload for toRealPath() --- src/libstore/build.cc | 14 +++++++------- src/libstore/derivations.cc | 2 +- src/libstore/download.cc | 6 +++--- src/libstore/fetchers/fetchers.cc | 2 +- src/libstore/fetchers/git.cc | 4 ++-- src/libstore/local-store.cc | 2 +- src/libstore/store-api.hh | 5 +++++ 7 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 30077556d..0e3a23a4d 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1398,7 +1398,7 @@ void DerivationGoal::tryToBuild() few seconds and then retry this goal. */ PathSet lockFiles; for (auto & outPath : drv->outputPaths()) - lockFiles.insert(worker.store.toRealPath(worker.store.printStorePath(outPath))); + lockFiles.insert(worker.store.Store::toRealPath(outPath)); if (!outputLocks.lockPaths(lockFiles, "", false)) { worker.waitForAWhile(shared_from_this()); @@ -1429,7 +1429,7 @@ void DerivationGoal::tryToBuild() for (auto & i : drv->outputs) { if (worker.store.isValidPath(i.second.path)) continue; debug("removing invalid path '%s'", worker.store.printStorePath(i.second.path)); - deletePath(worker.store.toRealPath(worker.store.printStorePath(i.second.path))); + deletePath(worker.store.Store::toRealPath(i.second.path)); } /* Don't do a remote build if the derivation has the attribute @@ -1686,7 +1686,7 @@ void DerivationGoal::buildDone() /* Delete unused redirected outputs (when doing hash rewriting). */ for (auto & i : redirectedOutputs) - deletePath(worker.store.toRealPath(worker.store.printStorePath(i.second))); + deletePath(worker.store.Store::toRealPath(i.second)); /* Delete the chroot (if we were using one). */ autoDelChroot.reset(); /* this runs the destructor */ @@ -2072,7 +2072,7 @@ void DerivationGoal::startBuilder() environment using bind-mounts. We put it in the Nix store to ensure that we can create hard-links to non-directory inputs in the fake Nix store in the chroot (see below). */ - chrootRootDir = worker.store.toRealPath(worker.store.printStorePath(drvPath)) + ".chroot"; + chrootRootDir = worker.store.Store::toRealPath(drvPath) + ".chroot"; deletePath(chrootRootDir); /* Clean up the chroot directory automatically. */ @@ -2917,7 +2917,7 @@ void DerivationGoal::addDependency(const StorePath & path) #if __linux__ - Path source = worker.store.toRealPath(worker.store.printStorePath(path)); + Path source = worker.store.Store::toRealPath(path); Path target = chrootRootDir + worker.store.printStorePath(path); debug("bind-mounting %s -> %s", target, source); @@ -3579,7 +3579,7 @@ void DerivationGoal::registerOutputs() if (needsHashRewrite()) { auto r = redirectedOutputs.find(i.second.path); if (r != redirectedOutputs.end()) { - auto redirected = worker.store.toRealPath(worker.store.printStorePath(r->second)); + auto redirected = worker.store.Store::toRealPath(r->second); if (buildMode == bmRepair && redirectedBadOutputs.count(i.second.path) && pathExists(redirected)) @@ -3672,7 +3672,7 @@ void DerivationGoal::registerOutputs() BuildError("hash mismatch in fixed-output derivation '%s':\n wanted: %s\n got: %s", worker.store.printStorePath(dest), h.to_string(SRI), h2.to_string(SRI))); - Path actualDest = worker.store.toRealPath(worker.store.printStorePath(dest)); + Path actualDest = worker.store.Store::toRealPath(dest); if (worker.store.isValidPath(dest)) std::rethrow_exception(delayedException); diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc index d9da8769c..a554cb66d 100644 --- a/src/libstore/derivations.cc +++ b/src/libstore/derivations.cc @@ -354,7 +354,7 @@ Hash hashDerivationModulo(Store & store, const Derivation & drv, bool maskOutput if (h == drvHashes.end()) { assert(store.isValidPath(i.first)); h = drvHashes.insert_or_assign(i.first.clone(), hashDerivationModulo(store, - readDerivation(store, store.toRealPath(store.printStorePath(i.first))), false)).first; + readDerivation(store, store.toRealPath(i.first)), false)).first; } inputs2.insert_or_assign(h->second.to_string(Base16, false), i.second); } diff --git a/src/libstore/download.cc b/src/libstore/download.cc index 681b74240..d8c52b151 100644 --- a/src/libstore/download.cc +++ b/src/libstore/download.cc @@ -910,7 +910,7 @@ CachedDownloadResult Downloader::downloadCached( printInfo("unpacking '%s'...", url); Path tmpDir = createTempDir(); AutoDelete autoDelete(tmpDir, true); - unpackTarfile(store->toRealPath(store->printStorePath(*storePath)), tmpDir); + unpackTarfile(store->toRealPath(*storePath), tmpDir); auto members = readDirectory(tmpDir); if (members.size() != 1) throw nix::Error("tarball '%s' contains an unexpected number of top-level files", url); @@ -928,8 +928,8 @@ CachedDownloadResult Downloader::downloadCached( if (expectedStorePath && *storePath != *expectedStorePath) { unsigned int statusCode = 102; Hash gotHash = request.unpack - ? hashPath(request.expectedHash.type, store->toRealPath(store->printStorePath(*storePath))).first - : hashFile(request.expectedHash.type, store->toRealPath(store->printStorePath(*storePath))); + ? hashPath(request.expectedHash.type, store->toRealPath(*storePath)).first + : hashFile(request.expectedHash.type, store->toRealPath(*storePath)); throw nix::Error(statusCode, "hash mismatch in file downloaded from '%s':\n wanted: %s\n got: %s", url, request.expectedHash.to_string(), gotHash.to_string()); } diff --git a/src/libstore/fetchers/fetchers.cc b/src/libstore/fetchers/fetchers.cc index 256ef66f2..89cc9e774 100644 --- a/src/libstore/fetchers/fetchers.cc +++ b/src/libstore/fetchers/fetchers.cc @@ -81,7 +81,7 @@ std::pair> Input::fetchTree(ref store) auto [tree, input] = fetchTreeInternal(store); if (tree.actualPath == "") - tree.actualPath = store->toRealPath(store->printStorePath(tree.storePath)); + tree.actualPath = store->toRealPath(tree.storePath); if (!tree.info.narHash) tree.info.narHash = store->queryPathInfo(tree.storePath)->narHash; diff --git a/src/libstore/fetchers/git.cc b/src/libstore/fetchers/git.cc index 4f302cd0f..67cb5a9e0 100644 --- a/src/libstore/fetchers/git.cc +++ b/src/libstore/fetchers/git.cc @@ -55,7 +55,7 @@ static std::optional> lookupGitInfo( if (store->isValidPath(storePath)) { return {{rev, Tree{ - .actualPath = store->toRealPath(store->printStorePath(storePath)), + .actualPath = store->toRealPath(storePath), .storePath = std::move(storePath), .info = TreeInfo { .revCount = json["revCount"], @@ -357,7 +357,7 @@ struct GitInput : Input auto lastModified = std::stoull(runProgram("git", true, { "-C", repoDir, "log", "-1", "--format=%ct", input->rev->gitRev() })); auto tree = Tree { - .actualPath = store->toRealPath(store->printStorePath(storePath)), + .actualPath = store->toRealPath(storePath), .storePath = std::move(storePath), .info = TreeInfo { .revCount = revCount, diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index e214f0659..a337ad0cc 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1263,7 +1263,7 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair) else hashSink = std::make_unique(info->narHash.type, storePathToHash(printStorePath(info->path))); - dumpPath(toRealPath(printStorePath(i)), *hashSink); + dumpPath(Store::toRealPath(i), *hashSink); auto current = hashSink->finish(); if (info->narHash != nullHash && info->narHash != current.first) { diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh index 284e201de..902d00216 100644 --- a/src/libstore/store-api.hh +++ b/src/libstore/store-api.hh @@ -656,6 +656,11 @@ public: return storePath; } + Path toRealPath(const StorePath & storePath) + { + return toRealPath(printStorePath(storePath)); + } + virtual void createUser(const std::string & userName, uid_t userId) { }