Skip to content

Commit

Permalink
Use SourcePath in more places
Browse files Browse the repository at this point in the history
Now that SourcePath uses a SourceAccessor instead of an InputAccessor,
we can use it in function signatures instead of passing a
SourceAccessor and CanonPath separately.
  • Loading branch information
edolstra committed May 6, 2024
1 parent 2926ef0 commit eab2919
Show file tree
Hide file tree
Showing 25 changed files with 101 additions and 109 deletions.
4 changes: 2 additions & 2 deletions src/libfetchers/fetch-to-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ StorePath fetchToStore(
auto storePath =
mode == FetchMode::DryRun
? store.computeStorePath(
name, *path.accessor, path.path, method, HashAlgorithm::SHA256, {}, filter2).first
name, path, method, HashAlgorithm::SHA256, {}, filter2).first
: store.addToStore(
name, *path.accessor, path.path, method, HashAlgorithm::SHA256, {}, filter2, repair);
name, path, method, HashAlgorithm::SHA256, {}, filter2, repair);

if (cacheKey && mode == FetchMode::Copy)
fetchers::getCache()->add(store, *cacheKey, {}, storePath, true);
Expand Down
4 changes: 2 additions & 2 deletions src/libfetchers/unix/mercurial.cc
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ struct MercurialInputScheme : InputScheme

auto storePath = store->addToStore(
input.getName(),
*makeFSSourceAccessor(), CanonPath { actualPath },
{makeFSSourceAccessor(), CanonPath(actualPath)},
FileIngestionMethod::Recursive, HashAlgorithm::SHA256, {},
filter);

Expand Down Expand Up @@ -318,7 +318,7 @@ struct MercurialInputScheme : InputScheme

deletePath(tmpDir + "/.hg_archival.txt");

auto storePath = store->addToStore(name, *makeFSSourceAccessor(), CanonPath { tmpDir });
auto storePath = store->addToStore(name, {makeFSSourceAccessor(), CanonPath(tmpDir)});

Attrs infoAttrs({
{"rev", input.getRev()->gitRev()},
Expand Down
7 changes: 3 additions & 4 deletions src/libstore/binary-cache-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -442,8 +442,7 @@ void BinaryCacheStore::queryPathInfoUncached(const StorePath & storePath,

StorePath BinaryCacheStore::addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
Expand All @@ -454,10 +453,10 @@ StorePath BinaryCacheStore::addToStore(
non-recursive+sha256 so we can just use the default
implementation of this method in terms of addToStoreFromDump. */

auto h = hashPath(accessor, path, method.getFileIngestionMethod(), hashAlgo, filter);
auto h = hashPath(path, method.getFileIngestionMethod(), hashAlgo, filter);

auto source = sinkToSource([&](Sink & sink) {
accessor.dumpPath(path, sink, filter);
path.dumpPath(sink, filter);
});
return addToStoreCommon(*source, repair, CheckSigs, [&](HashResult nar) {
ValidPathInfo info {
Expand Down
3 changes: 1 addition & 2 deletions src/libstore/binary-cache-store.hh
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,7 @@ public:

StorePath addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & srcPath,
const SourcePath & path,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
Expand Down
3 changes: 1 addition & 2 deletions src/libstore/legacy-ssh-store.hh
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ struct LegacySSHStore : public virtual LegacySSHStoreConfig, public virtual Stor

StorePath addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & srcPath,
const SourcePath & path,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
Expand Down
20 changes: 8 additions & 12 deletions src/libstore/store-api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -167,14 +167,13 @@ StorePath StoreDirConfig::makeFixedOutputPathFromCA(std::string_view name, const

std::pair<StorePath, Hash> StoreDirConfig::computeStorePath(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
PathFilter & filter) const
{
auto h = hashPath(accessor, path, method.getFileIngestionMethod(), hashAlgo, filter);
auto h = hashPath(path, method.getFileIngestionMethod(), hashAlgo, filter);
return {
makeFixedOutputPathFromCA(
name,
Expand All @@ -192,8 +191,7 @@ std::pair<StorePath, Hash> StoreDirConfig::computeStorePath(

StorePath Store::addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
Expand All @@ -214,7 +212,7 @@ StorePath Store::addToStore(
break;
}
auto source = sinkToSource([&](Sink & sink) {
dumpPath(accessor, path, sink, fsm, filter);
dumpPath(path, sink, fsm, filter);
});
return addToStoreFromDump(*source, name, fsm, method, hashAlgo, references, repair);
}
Expand Down Expand Up @@ -343,8 +341,7 @@ digraph graphname {
*/
ValidPathInfo Store::addToStoreSlow(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & srcPath,
const SourcePath & srcPath,
ContentAddressMethod method, HashAlgorithm hashAlgo,
const StorePathSet & references,
std::optional<Hash> expectedCAHash)
Expand All @@ -366,7 +363,7 @@ ValidPathInfo Store::addToStoreSlow(
srcPath. The fact that we use scratchpadSink as a temporary buffer here
is an implementation detail. */
auto fileSource = sinkToSource([&](Sink & scratchpadSink) {
accessor.dumpPath(srcPath, scratchpadSink);
srcPath.dumpPath(scratchpadSink);
});

/* tapped provides the same data as fileSource, but we also write all the
Expand All @@ -389,13 +386,12 @@ ValidPathInfo Store::addToStoreSlow(
auto hash = method == FileIngestionMethod::Recursive && hashAlgo == HashAlgorithm::SHA256
? narHash
: method == FileIngestionMethod::Git
? git::dumpHash(hashAlgo, accessor, srcPath).hash
? git::dumpHash(hashAlgo, srcPath).hash
: caHashSink.finish().first;

if (expectedCAHash && expectedCAHash != hash)
throw Error("hash mismatch for '%s'", srcPath);


ValidPathInfo info {
*this,
name,
Expand All @@ -412,7 +408,7 @@ ValidPathInfo Store::addToStoreSlow(

if (!isValidPath(info.path)) {
auto source = sinkToSource([&](Sink & scratchpadSink) {
accessor.dumpPath(srcPath, scratchpadSink);
srcPath.dumpPath(scratchpadSink);
});
addToStore(info, *source);
}
Expand Down
6 changes: 2 additions & 4 deletions src/libstore/store-api.hh
Original file line number Diff line number Diff line change
Expand Up @@ -439,8 +439,7 @@ public:
*/
virtual StorePath addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method = FileIngestionMethod::Recursive,
HashAlgorithm hashAlgo = HashAlgorithm::SHA256,
const StorePathSet & references = StorePathSet(),
Expand All @@ -454,8 +453,7 @@ public:
*/
ValidPathInfo addToStoreSlow(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method = FileIngestionMethod::Recursive,
HashAlgorithm hashAlgo = HashAlgorithm::SHA256,
const StorePathSet & references = StorePathSet(),
Expand Down
5 changes: 3 additions & 2 deletions src/libstore/store-dir-config.hh
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

namespace nix {

struct SourcePath;

MakeError(BadStorePath, Error);

struct StoreDirConfig : public Config
Expand Down Expand Up @@ -94,8 +96,7 @@ struct StoreDirConfig : public Config
*/
std::pair<StorePath, Hash> computeStorePath(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & path,
const SourcePath & path,
ContentAddressMethod method = FileIngestionMethod::Recursive,
HashAlgorithm hashAlgo = HashAlgorithm::SHA256,
const StorePathSet & references = {},
Expand Down
16 changes: 6 additions & 10 deletions src/libstore/unix/build/local-derivation-goal.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1306,8 +1306,7 @@ struct RestrictedStore : public virtual RestrictedStoreConfig, public virtual In

StorePath addToStore(
std::string_view name,
SourceAccessor & accessor,
const CanonPath & srcPath,
const SourcePath & srcPath,
ContentAddressMethod method,
HashAlgorithm hashAlgo,
const StorePathSet & references,
Expand Down Expand Up @@ -2485,7 +2484,6 @@ SingleDrvOutputs LocalDerivationGoal::registerOutputs()
/* FIXME optimize and deduplicate with addToStore */
std::string oldHashPart { scratchPath->hashPart() };
auto got = [&]{
PosixSourceAccessor accessor;
auto fim = outputHash.method.getFileIngestionMethod();
switch (fim) {
case FileIngestionMethod::Flat:
Expand All @@ -2494,15 +2492,15 @@ SingleDrvOutputs LocalDerivationGoal::registerOutputs()
HashModuloSink caSink { outputHash.hashAlgo, oldHashPart };
auto fim = outputHash.method.getFileIngestionMethod();
dumpPath(
accessor, CanonPath { actualPath },
{makeFSSourceAccessor(), CanonPath(actualPath)},
caSink,
(FileSerialisationMethod) fim);
return caSink.finish().first;
}
case FileIngestionMethod::Git: {
return git::dumpHash(
outputHash.hashAlgo, accessor,
CanonPath { tmpDir + "/tmp" }).hash;
outputHash.hashAlgo,
{makeFSSourceAccessor(), CanonPath(tmpDir + "/tmp")}).hash;
}
}
assert(false);
Expand All @@ -2529,9 +2527,8 @@ SingleDrvOutputs LocalDerivationGoal::registerOutputs()
}

{
PosixSourceAccessor accessor;
HashResult narHashAndSize = hashPath(
accessor, CanonPath { actualPath },
{makeFSSourceAccessor(), CanonPath(actualPath)},
FileSerialisationMethod::Recursive, HashAlgorithm::SHA256);
newInfo0.narHash = narHashAndSize.first;
newInfo0.narSize = narHashAndSize.second;
Expand All @@ -2553,9 +2550,8 @@ SingleDrvOutputs LocalDerivationGoal::registerOutputs()
std::string { scratchPath->hashPart() },
std::string { requiredFinalPath.hashPart() });
rewriteOutput(outputRewrites);
PosixSourceAccessor accessor;
HashResult narHashAndSize = hashPath(
accessor, CanonPath { actualPath },
{makeFSSourceAccessor(), CanonPath(actualPath)},
FileSerialisationMethod::Recursive, HashAlgorithm::SHA256);
ValidPathInfo newInfo0 { requiredFinalPath, narHashAndSize.first };
newInfo0.narSize = narHashAndSize.second;
Expand Down
2 changes: 1 addition & 1 deletion src/libstore/unix/build/worker.cc
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ bool Worker::pathContentsGood(const StorePath & path)
res = false;
else {
Hash current = hashPath(
*store.getFSAccessor(), CanonPath { store.printStorePath(path) },
{store.getFSAccessor(), CanonPath(store.printStorePath(path))},
FileIngestionMethod::Recursive, info->narHash.algo);
Hash nullHash(HashAlgorithm::SHA256);
res = info->narHash == nullHash || info->narHash == current;
Expand Down
10 changes: 4 additions & 6 deletions src/libstore/unix/local-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1132,12 +1132,12 @@ void LocalStore::addToStore(const ValidPathInfo & info, Source & source,
specified.hash.algo,
std::string { info.path.hashPart() },
};
dumpPath(*accessor, path, caSink, (FileSerialisationMethod) fim);
dumpPath({accessor, path}, caSink, (FileSerialisationMethod) fim);
h = caSink.finish().first;
break;
}
case FileIngestionMethod::Git:
h = git::dumpHash(specified.hash.algo, *accessor, path).hash;
h = git::dumpHash(specified.hash.algo, {accessor, path}).hash;
break;
}
ContentAddress {
Expand Down Expand Up @@ -1247,14 +1247,12 @@ StorePath LocalStore::addToStoreFromDump(

auto [dumpHash, size] = hashSink->finish();

PosixSourceAccessor accessor;

auto desc = ContentAddressWithReferences::fromParts(
hashMethod,
methodsMatch
? dumpHash
: hashPath(
accessor, CanonPath { tempPath },
{makeFSSourceAccessor(), CanonPath(tempPath)},
hashMethod.getFileIngestionMethod(), hashAlgo),
{
.others = references,
Expand Down Expand Up @@ -1394,7 +1392,7 @@ bool LocalStore::verifyStore(bool checkContents, RepairFlag repair)
Path linkPath = linksDir + "/" + link.name;
PosixSourceAccessor accessor;
std::string hash = hashPath(
accessor, CanonPath { linkPath },
{makeFSSourceAccessor(), CanonPath(linkPath)},
FileIngestionMethod::Recursive, HashAlgorithm::SHA256).to_string(HashFormat::Nix32, false);
if (hash != link.name) {
printError("link '%s' was modified! expected hash '%s', got '%s'",
Expand Down
6 changes: 2 additions & 4 deletions src/libstore/unix/optimise-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,8 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
contents of the symlink (i.e. the result of readlink()), not
the contents of the target (which may not even exist). */
Hash hash = ({
PosixSourceAccessor accessor;
hashPath(
accessor, CanonPath { path },
{make_ref<PosixSourceAccessor>(), CanonPath(path)},
FileSerialisationMethod::Recursive, HashAlgorithm::SHA256).first;
});
debug("'%1%' has hash '%2%'", path, hash.to_string(HashFormat::Nix32, true));
Expand All @@ -163,9 +162,8 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
auto stLink = lstat(linkPath);
if (st.st_size != stLink.st_size
|| (repair && hash != ({
PosixSourceAccessor accessor;
hashPath(
accessor, CanonPath { linkPath },
{make_ref<PosixSourceAccessor>(), CanonPath(linkPath)},
FileSerialisationMethod::Recursive, HashAlgorithm::SHA256).first;
})))
{
Expand Down
7 changes: 4 additions & 3 deletions src/libutil/archive.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "archive.hh"
#include "config.hh"
#include "posix-source-accessor.hh"
#include "source-path.hh"
#include "file-system.hh"
#include "signals.hh"

Expand Down Expand Up @@ -110,9 +111,9 @@ void SourceAccessor::dumpPath(

time_t dumpPathAndGetMtime(const Path & path, Sink & sink, PathFilter & filter)
{
auto [accessor, canonPath] = PosixSourceAccessor::createAtRoot(path);
accessor.dumpPath(canonPath, sink, filter);
return accessor.mtime;
auto path2 = PosixSourceAccessor::createAtRoot(path);
path2.dumpPath(sink, filter);
return path2.accessor.dynamic_pointer_cast<PosixSourceAccessor>()->mtime;
}

void dumpPath(const Path & path, Sink & sink, PathFilter & filter)
Expand Down
Loading

0 comments on commit eab2919

Please sign in to comment.