aboutsummaryrefslogtreecommitdiff
path: root/src/nix-store/nix-store.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2020-06-18 23:01:58 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2020-06-18 23:01:58 +0000
commit3f8dcfe3fd8372ee8fc1b3233c7e9982d1a6915d (patch)
tree5a104db035aede46168326978dd3bc387f9e49a7 /src/nix-store/nix-store.cc
parentd614166cb6864f2448b9e03f8dccccf301dc541e (diff)
parent669c3992e883414269d850bba5f00c59a1b207d0 (diff)
Merge branch 'validPathInfo-temp' into validPathInfo-ca-proper-datatype
Diffstat (limited to 'src/nix-store/nix-store.cc')
-rw-r--r--src/nix-store/nix-store.cc104
1 files changed, 57 insertions, 47 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc
index e8696277e..7d81bf54f 100644
--- a/src/nix-store/nix-store.cc
+++ b/src/nix-store/nix-store.cc
@@ -49,11 +49,11 @@ ref<LocalStore> ensureLocalStore()
static StorePath useDeriver(const StorePath & path)
{
- if (path.isDerivation()) return path.clone();
+ if (path.isDerivation()) return path;
auto info = store->queryPathInfo(path);
if (!info->deriver)
throw Error("deriver of path '%s' is not known", store->printStorePath(path));
- return info->deriver->clone();
+ return *info->deriver;
}
@@ -124,7 +124,7 @@ static void opRealise(Strings opFlags, Strings opArgs)
else if (i == "--repair") buildMode = bmRepair;
else if (i == "--check") buildMode = bmCheck;
else if (i == "--ignore-unknown") ignoreUnknown = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
std::vector<StorePathWithOutputs> paths;
for (auto & i : opArgs)
@@ -178,7 +178,7 @@ static void opAddFixed(Strings opFlags, Strings opArgs)
for (auto & i : opFlags)
if (i == "--recursive") recursive = FileIngestionMethod::Recursive;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (opArgs.empty())
throw UsageError("first argument must be hash algorithm");
@@ -198,10 +198,10 @@ static void opPrintFixedPath(Strings opFlags, Strings opArgs)
for (auto i : opFlags)
if (i == "--recursive") recursive = FileIngestionMethod::Recursive;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (opArgs.size() != 3)
- throw UsageError(format("'--print-fixed-path' requires three arguments"));
+ throw UsageError("'--print-fixed-path' requires three arguments");
Strings::iterator i = opArgs.begin();
HashType hashAlgo = parseHashType(*i++);
@@ -214,15 +214,15 @@ static void opPrintFixedPath(Strings opFlags, Strings opArgs)
static StorePathSet maybeUseOutputs(const StorePath & storePath, bool useOutput, bool forceRealise)
{
- if (forceRealise) realisePath(storePath);
+ if (forceRealise) realisePath({storePath});
if (useOutput && storePath.isDerivation()) {
auto drv = store->derivationFromPath(storePath);
StorePathSet outputs;
for (auto & i : drv.outputs)
- outputs.insert(i.second.path.clone());
+ outputs.insert(i.second.path);
return outputs;
}
- else return singleton(storePath.clone());
+ else return {storePath};
}
@@ -232,7 +232,7 @@ static StorePathSet maybeUseOutputs(const StorePath & storePath, bool useOutput,
static void printTree(const StorePath & path,
const string & firstPad, const string & tailPad, StorePathSet & done)
{
- if (!done.insert(path.clone()).second) {
+ if (!done.insert(path).second) {
cout << fmt("%s%s [...]\n", firstPad, store->printStorePath(path));
return;
}
@@ -296,9 +296,9 @@ static void opQuery(Strings opFlags, Strings opArgs)
else if (i == "--use-output" || i == "-u") useOutput = true;
else if (i == "--force-realise" || i == "--force-realize" || i == "-f") forceRealise = true;
else if (i == "--include-outputs") includeOutputs = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (prev != qDefault && prev != query)
- throw UsageError(format("query type '%1%' conflicts with earlier flag") % i);
+ throw UsageError("query type '%1%' conflicts with earlier flag", i);
}
if (query == qDefault) query = qOutputs;
@@ -310,7 +310,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
case qOutputs: {
for (auto & i : opArgs) {
auto i2 = store->followLinksToStorePath(i);
- if (forceRealise) realisePath(i2);
+ if (forceRealise) realisePath({i2});
Derivation drv = store->derivationFromPath(i2);
for (auto & j : drv.outputs)
cout << fmt("%1%\n", store->printStorePath(j.second.path));
@@ -329,13 +329,13 @@ static void opQuery(Strings opFlags, Strings opArgs)
if (query == qRequisites) store->computeFSClosure(j, paths, false, includeOutputs);
else if (query == qReferences) {
for (auto & p : store->queryPathInfo(j)->references)
- paths.insert(p.clone());
+ paths.insert(p);
}
else if (query == qReferrers) {
StorePathSet tmp;
store->queryReferrers(j, tmp);
for (auto & i : tmp)
- paths.insert(i.clone());
+ paths.insert(i);
}
else if (query == qReferrersClosure) store->computeFSClosure(j, paths, true);
}
@@ -372,8 +372,8 @@ static void opQuery(Strings opFlags, Strings opArgs)
for (auto & j : maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise)) {
auto info = store->queryPathInfo(j);
if (query == qHash) {
- assert(info->narHash.type == HashType::SHA256);
- cout << fmt("%s\n", info->narHash.to_string(Base::Base32));
+ assert(info->narHash.type == htSHA256);
+ cout << fmt("%s\n", info->narHash.to_string(Base32, true));
} else if (query == qSize)
cout << fmt("%d\n", info->narSize);
}
@@ -391,7 +391,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
StorePathSet roots;
for (auto & i : opArgs)
for (auto & j : maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise))
- roots.insert(j.clone());
+ roots.insert(j);
printDotGraph(ref<Store>(store), std::move(roots));
break;
}
@@ -400,7 +400,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
StorePathSet roots;
for (auto & i : opArgs)
for (auto & j : maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise))
- roots.insert(j.clone());
+ roots.insert(j);
printGraphML(ref<Store>(store), std::move(roots));
break;
}
@@ -415,7 +415,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
StorePathSet args;
for (auto & i : opArgs)
for (auto & p : maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise))
- args.insert(p.clone());
+ args.insert(p);
StorePathSet referrers;
store->computeFSClosure(
@@ -444,7 +444,7 @@ static void opPrintEnv(Strings opFlags, Strings opArgs)
Derivation drv = store->derivationFromPath(store->parseStorePath(drvPath));
/* Print each environment variable in the derivation in a format
- that can be sourced by the shell. */
+ * that can be sourced by the shell. */
for (auto & i : drv.env)
cout << format("export %1%; %1%=%2%\n") % i.first % shellEscape(i.second);
@@ -482,10 +482,10 @@ static void opDumpDB(Strings opFlags, Strings opArgs)
if (!opFlags.empty()) throw UsageError("unknown flag");
if (!opArgs.empty()) {
for (auto & i : opArgs)
- cout << store->makeValidityRegistration(singleton(store->followLinksToStorePath(i)), true, true);
+ cout << store->makeValidityRegistration({store->followLinksToStorePath(i)}, true, true);
} else {
for (auto & i : store->queryAllValidPaths())
- cout << store->makeValidityRegistration(singleton(i), true, true);
+ cout << store->makeValidityRegistration({i}, true, true);
}
}
@@ -502,7 +502,7 @@ static void registerValidity(bool reregister, bool hashGiven, bool canonicalise)
if (canonicalise)
canonicalisePathMetaData(store->printStorePath(info->path), -1);
if (!hashGiven) {
- HashResult hash = hashPath(HashType::SHA256, store->printStorePath(info->path));
+ HashResult hash = hashPath(htSHA256, store->printStorePath(info->path));
info->narHash = hash.first;
info->narSize = hash.second;
}
@@ -531,7 +531,7 @@ static void opRegisterValidity(Strings opFlags, Strings opArgs)
for (auto & i : opFlags)
if (i == "--reregister") reregister = true;
else if (i == "--hash-given") hashGiven = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (!opArgs.empty()) throw UsageError("no arguments expected");
@@ -545,7 +545,7 @@ static void opCheckValidity(Strings opFlags, Strings opArgs)
for (auto & i : opFlags)
if (i == "--print-invalid") printInvalid = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
for (auto & i : opArgs) {
auto path = store->followLinksToStorePath(i);
@@ -576,7 +576,7 @@ static void opGC(Strings opFlags, Strings opArgs)
long long maxFreed = getIntArg<long long>(*i, i, opFlags.end(), true);
options.maxFreed = maxFreed >= 0 ? maxFreed : 0;
}
- else throw UsageError(format("bad sub-operation '%1%' in GC") % *i);
+ else throw UsageError("bad sub-operation '%1%' in GC", *i);
if (!opArgs.empty()) throw UsageError("no arguments expected");
@@ -586,7 +586,7 @@ static void opGC(Strings opFlags, Strings opArgs)
// Transpose and sort the roots.
for (auto & [target, links] : roots)
for (auto & link : links)
- roots2.emplace(link, target.clone());
+ roots2.emplace(link, target);
for (auto & [link, target] : roots2)
std::cout << link << " -> " << store->printStorePath(target) << "\n";
}
@@ -612,7 +612,7 @@ static void opDelete(Strings opFlags, Strings opArgs)
for (auto & i : opFlags)
if (i == "--ignore-liveness") options.ignoreLiveness = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
for (auto & i : opArgs)
options.pathsToDelete.insert(store->followLinksToStorePath(i));
@@ -650,7 +650,7 @@ static void opRestore(Strings opFlags, Strings opArgs)
static void opExport(Strings opFlags, Strings opArgs)
{
for (auto & i : opFlags)
- throw UsageError(format("unknown flag '%1%'") % i);
+ throw UsageError("unknown flag '%1%'", i);
StorePathSet paths;
@@ -666,7 +666,7 @@ static void opExport(Strings opFlags, Strings opArgs)
static void opImport(Strings opFlags, Strings opArgs)
{
for (auto & i : opFlags)
- throw UsageError(format("unknown flag '%1%'") % i);
+ throw UsageError("unknown flag '%1%'", i);
if (!opArgs.empty()) throw UsageError("no arguments expected");
@@ -701,10 +701,13 @@ static void opVerify(Strings opFlags, Strings opArgs)
for (auto & i : opFlags)
if (i == "--check-contents") checkContents = true;
else if (i == "--repair") repair = Repair;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (store->verifyStore(checkContents, repair)) {
- printError("warning: not all errors were fixed");
+ logWarning({
+ .name = "Store consistency",
+ .description = "not all errors were fixed"
+ });
throw Exit(1);
}
}
@@ -720,15 +723,20 @@ static void opVerifyPath(Strings opFlags, Strings opArgs)
for (auto & i : opArgs) {
auto path = store->followLinksToStorePath(i);
- printMsg(Verbosity::Talkative, "checking path '%s'...", store->printStorePath(path));
+ printMsg(lvlTalkative, "checking path '%s'...", store->printStorePath(path));
auto info = store->queryPathInfo(path);
HashSink sink(*info->narHash.type);
store->narFromPath(path, sink);
auto current = sink.finish();
if (current.first != info->narHash) {
- printError(
- "path '%s' was modified! expected hash '%s', got '%s'",
- store->printStorePath(path), info->narHash.to_string(), current.first.to_string());
+ logError({
+ .name = "Hash mismatch",
+ .hint = hintfmt(
+ "path '%s' was modified! expected hash '%s', got '%s'",
+ store->printStorePath(path),
+ info->narHash.to_string(Base32, true),
+ current.first.to_string(Base32, true))
+ });
status = 1;
}
}
@@ -764,7 +772,7 @@ static void opServe(Strings opFlags, Strings opArgs)
bool writeAllowed = false;
for (auto & i : opFlags)
if (i == "--write") writeAllowed = true;
- else throw UsageError(format("unknown flag '%1%'") % i);
+ else throw UsageError("unknown flag '%1%'", i);
if (!opArgs.empty()) throw UsageError("no arguments expected");
@@ -781,7 +789,7 @@ static void opServe(Strings opFlags, Strings opArgs)
auto getBuildSettings = [&]() {
// FIXME: changing options here doesn't work if we're
// building through the daemon.
- verbosity = Verbosity::Error;
+ verbosity = lvlError;
settings.keepLog = false;
settings.useSubstitutes = false;
settings.maxSilentTime = readInt(in);
@@ -822,7 +830,7 @@ static void opServe(Strings opFlags, Strings opArgs)
std::vector<StorePathWithOutputs> paths2;
for (auto & path : paths)
if (!path.isDerivation())
- paths2.emplace_back(path.clone());
+ paths2.push_back({path});
unsigned long long downloadSize, narSize;
StorePathSet willBuild, willSubstitute, unknown;
store->queryMissing(paths2,
@@ -832,10 +840,10 @@ static void opServe(Strings opFlags, Strings opArgs)
if (!willSubstitute.empty())
try {
std::vector<StorePathWithOutputs> subs;
- for (auto & p : willSubstitute) subs.emplace_back(p.clone());
+ for (auto & p : willSubstitute) subs.push_back({p});
store->buildPaths(subs);
} catch (Error & e) {
- printError(format("warning: %1%") % e.msg());
+ logWarning(e.info());
}
}
@@ -856,7 +864,7 @@ static void opServe(Strings opFlags, Strings opArgs)
out << info->narSize // downloadSize
<< info->narSize;
if (GET_PROTOCOL_MINOR(clientVersion) >= 4)
- out << (info->narHash ? info->narHash.to_string() : "") << renderContentAddress(info->ca) << info->sigs;
+ out << (info->narHash ? info->narHash.to_string(Base32, true) : "") << renderContentAddress(info->ca) << info->sigs;
} catch (InvalidPath &) {
}
}
@@ -887,7 +895,7 @@ static void opServe(Strings opFlags, Strings opArgs)
std::vector<StorePathWithOutputs> paths;
for (auto & s : readStrings<Strings>(in))
- paths.emplace_back(store->parsePathWithOutputs(s));
+ paths.push_back(store->parsePathWithOutputs(s));
getBuildSettings();
@@ -940,7 +948,7 @@ static void opServe(Strings opFlags, Strings opArgs)
auto deriver = readString(in);
if (deriver != "")
info.deriver = store->parseStorePath(deriver);
- info.narHash = Hash(readString(in), HashType::SHA256);
+ info.narHash = Hash(readString(in), htSHA256);
info.references = readStorePaths<StorePathSet>(*store, in);
in >> info.registrationTime >> info.narSize >> info.ultimate;
info.sigs = readStrings<StringSet>(in);
@@ -962,7 +970,7 @@ static void opServe(Strings opFlags, Strings opArgs)
}
default:
- throw Error(format("unknown serve command %1%") % cmd);
+ throw Error("unknown serve command %1%", cmd);
}
out.flush();
@@ -973,7 +981,7 @@ static void opServe(Strings opFlags, Strings opArgs)
static void opGenerateBinaryCacheKey(Strings opFlags, Strings opArgs)
{
for (auto & i : opFlags)
- throw UsageError(format("unknown flag '%1%'") % i);
+ throw UsageError("unknown flag '%1%'", i);
if (opArgs.size() != 3) throw UsageError("three arguments expected");
auto i = opArgs.begin();
@@ -1098,6 +1106,8 @@ static int _main(int argc, char * * argv)
op(opFlags, opArgs);
+ logger->stop();
+
return 0;
}
}