Skip to content

Commit

Permalink
LocalStore::addToStore(srcPath): Handle the flat case
Browse files Browse the repository at this point in the history
This helps nix-prefetch-url when using a local store.
  • Loading branch information
edolstra committed Jul 9, 2020
1 parent 2dd8443 commit a2c2702
Showing 1 changed file with 13 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/libstore/local-store.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1097,16 +1097,13 @@ StorePath LocalStore::addToStore(const string & name, const Path & _srcPath,
{
Path srcPath(absPath(_srcPath));

if (method != FileIngestionMethod::Recursive)
return addToStoreFromDump(readFile(srcPath), name, method, hashAlgo, repair);

/* For computing the NAR hash. */
auto sha256Sink = std::make_unique<HashSink>(htSHA256);

/* For computing the store path. In recursive SHA-256 mode, this
is the same as the NAR hash, so no need to do it again. */
std::unique_ptr<HashSink> hashSink =
hashAlgo == htSHA256
method == FileIngestionMethod::Recursive && hashAlgo == htSHA256
? nullptr
: std::make_unique<HashSink>(hashAlgo);

Expand Down Expand Up @@ -1139,7 +1136,10 @@ StorePath LocalStore::addToStore(const string & name, const Path & _srcPath,
if (!inMemory) sink(buf, len);
});

dumpPath(srcPath, sink2, filter);
if (method == FileIngestionMethod::Recursive)
dumpPath(srcPath, sink2, filter);
else
readFile(srcPath, sink2);
});

std::unique_ptr<AutoDelete> delTempDir;
Expand All @@ -1155,7 +1155,10 @@ StorePath LocalStore::addToStore(const string & name, const Path & _srcPath,
delTempDir = std::make_unique<AutoDelete>(tempDir);
tempPath = tempDir + "/x";

restorePath(tempPath, *source);
if (method == FileIngestionMethod::Recursive)
restorePath(tempPath, *source);
else
writeFile(tempPath, *source);

} catch (EndOfFile &) {
if (!inMemory) throw;
Expand Down Expand Up @@ -1188,7 +1191,10 @@ StorePath LocalStore::addToStore(const string & name, const Path & _srcPath,
if (inMemory) {
/* Restore from the NAR in memory. */
StringSource source(nar);
restorePath(realPath, source);
if (method == FileIngestionMethod::Recursive)
restorePath(realPath, source);
else
writeFile(realPath, source);
} else {
/* Move the temporary path we restored above. */
if (rename(tempPath.c_str(), realPath.c_str()))
Expand Down

0 comments on commit a2c2702

Please sign in to comment.