forked from lix-project/lix
Merge pull request #7942 from edolstra/remove-format
Remove FormatOrString and remaining uses of format()
This commit is contained in:
commit
f0908f592c
|
@ -219,7 +219,7 @@ static int main_build_remote(int argc, char * * argv)
|
||||||
% concatStringsSep<StringSet>(", ", m.supportedFeatures)
|
% concatStringsSep<StringSet>(", ", m.supportedFeatures)
|
||||||
% concatStringsSep<StringSet>(", ", m.mandatoryFeatures);
|
% concatStringsSep<StringSet>(", ", m.mandatoryFeatures);
|
||||||
|
|
||||||
printMsg(couldBuildLocally ? lvlChatty : lvlWarn, error);
|
printMsg(couldBuildLocally ? lvlChatty : lvlWarn, error.str());
|
||||||
|
|
||||||
std::cerr << "# decline\n";
|
std::cerr << "# decline\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,7 +368,7 @@ void initGC()
|
||||||
size = (pageSize * pages) / 4; // 25% of RAM
|
size = (pageSize * pages) / 4; // 25% of RAM
|
||||||
if (size > maxSize) size = maxSize;
|
if (size > maxSize) size = maxSize;
|
||||||
#endif
|
#endif
|
||||||
debug(format("setting initial heap size to %1% bytes") % size);
|
debug("setting initial heap size to %1% bytes", size);
|
||||||
GC_expand_hp(size);
|
GC_expand_hp(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -609,7 +609,7 @@ Path EvalState::checkSourcePath(const Path & path_)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resolve symlinks. */
|
/* Resolve symlinks. */
|
||||||
debug(format("checking access to '%s'") % abspath);
|
debug("checking access to '%s'", abspath);
|
||||||
Path path = canonPath(abspath, true);
|
Path path = canonPath(abspath, true);
|
||||||
|
|
||||||
for (auto & i : *allowedPaths) {
|
for (auto & i : *allowedPaths) {
|
||||||
|
|
|
@ -732,7 +732,7 @@ Expr * EvalState::parseExprFromString(std::string s, const Path & basePath)
|
||||||
|
|
||||||
Expr * EvalState::parseStdin()
|
Expr * EvalState::parseStdin()
|
||||||
{
|
{
|
||||||
//Activity act(*logger, lvlTalkative, format("parsing standard input"));
|
//Activity act(*logger, lvlTalkative, "parsing standard input");
|
||||||
auto buffer = drainFD(0);
|
auto buffer = drainFD(0);
|
||||||
// drainFD should have left some extra space for terminators
|
// drainFD should have left some extra space for terminators
|
||||||
buffer.append("\0\0", 2);
|
buffer.append("\0\0", 2);
|
||||||
|
@ -835,7 +835,7 @@ std::pair<bool, std::string> EvalState::resolveSearchPathElem(const SearchPathEl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(format("resolved search path element '%s' to '%s'") % elem.second % res.second);
|
debug("resolved search path element '%s' to '%s'", elem.second, res.second);
|
||||||
|
|
||||||
searchPathResolved[elem.second] = res;
|
searchPathResolved[elem.second] = res;
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -15,8 +15,8 @@ namespace nix {
|
||||||
return oss.str();
|
return oss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(Verbosity lvl, const FormatOrString & fs) override {
|
void log(Verbosity lvl, std::string_view s) override {
|
||||||
oss << fs.s << std::endl;
|
oss << s << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
void logEI(const ErrorInfo & ei) override {
|
void logEI(const ErrorInfo & ei) override {
|
||||||
|
|
|
@ -26,8 +26,8 @@ static void posToXML(EvalState & state, XMLAttrs & xmlAttrs, const Pos & pos)
|
||||||
{
|
{
|
||||||
if (auto path = std::get_if<Path>(&pos.origin))
|
if (auto path = std::get_if<Path>(&pos.origin))
|
||||||
xmlAttrs["path"] = *path;
|
xmlAttrs["path"] = *path;
|
||||||
xmlAttrs["line"] = (format("%1%") % pos.line).str();
|
xmlAttrs["line"] = fmt("%1%", pos.line);
|
||||||
xmlAttrs["column"] = (format("%1%") % pos.column).str();
|
xmlAttrs["column"] = fmt("%1%", pos.column);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
|
||||||
switch (v.type()) {
|
switch (v.type()) {
|
||||||
|
|
||||||
case nInt:
|
case nInt:
|
||||||
doc.writeEmptyElement("int", singletonAttrs("value", (format("%1%") % v.integer).str()));
|
doc.writeEmptyElement("int", singletonAttrs("value", fmt("%1%", v.integer)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nBool:
|
case nBool:
|
||||||
|
@ -156,7 +156,7 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nFloat:
|
case nFloat:
|
||||||
doc.writeEmptyElement("float", singletonAttrs("value", (format("%1%") % v.fpoint).str()));
|
doc.writeEmptyElement("float", singletonAttrs("value", fmt("%1%", v.fpoint)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case nThunk:
|
case nThunk:
|
||||||
|
|
|
@ -125,11 +125,11 @@ public:
|
||||||
return printBuildLogs;
|
return printBuildLogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(Verbosity lvl, const FormatOrString & fs) override
|
void log(Verbosity lvl, std::string_view s) override
|
||||||
{
|
{
|
||||||
if (lvl > verbosity) return;
|
if (lvl > verbosity) return;
|
||||||
auto state(state_.lock());
|
auto state(state_.lock());
|
||||||
log(*state, lvl, fs.s);
|
log(*state, lvl, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void logEI(const ErrorInfo & ei) override
|
void logEI(const ErrorInfo & ei) override
|
||||||
|
@ -142,7 +142,7 @@ public:
|
||||||
log(*state, ei.level, oss.str());
|
log(*state, ei.level, oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(State & state, Verbosity lvl, const std::string & s)
|
void log(State & state, Verbosity lvl, std::string_view s)
|
||||||
{
|
{
|
||||||
if (state.active) {
|
if (state.active) {
|
||||||
writeToStderr("\r\e[K" + filterANSIEscapes(s, !isTTY) + ANSI_NORMAL "\n");
|
writeToStderr("\r\e[K" + filterANSIEscapes(s, !isTTY) + ANSI_NORMAL "\n");
|
||||||
|
|
|
@ -347,7 +347,7 @@ void parseCmdLine(const std::string & programName, const Strings & args,
|
||||||
|
|
||||||
void printVersion(const std::string & programName)
|
void printVersion(const std::string & programName)
|
||||||
{
|
{
|
||||||
std::cout << format("%1% (Nix) %2%") % programName % nixVersion << std::endl;
|
std::cout << fmt("%1% (Nix) %2%", programName, nixVersion) << std::endl;
|
||||||
if (verbosity > lvlInfo) {
|
if (verbosity > lvlInfo) {
|
||||||
Strings cfg;
|
Strings cfg;
|
||||||
#if HAVE_BOEHMGC
|
#if HAVE_BOEHMGC
|
||||||
|
|
|
@ -732,7 +732,7 @@ void replaceValidPath(const Path & storePath, const Path & tmpPath)
|
||||||
tmpPath (the replacement), so we have to move it out of the
|
tmpPath (the replacement), so we have to move it out of the
|
||||||
way first. We'd better not be interrupted here, because if
|
way first. We'd better not be interrupted here, because if
|
||||||
we're repairing (say) Glibc, we end up with a broken system. */
|
we're repairing (say) Glibc, we end up with a broken system. */
|
||||||
Path oldPath = (format("%1%.old-%2%-%3%") % storePath % getpid() % random()).str();
|
Path oldPath = fmt("%1%.old-%2%-%3%", storePath, getpid(), random());
|
||||||
if (pathExists(storePath))
|
if (pathExists(storePath))
|
||||||
movePath(storePath, oldPath);
|
movePath(storePath, oldPath);
|
||||||
|
|
||||||
|
|
|
@ -78,9 +78,9 @@ void Goal::amDone(ExitCode result, std::optional<Error> ex)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Goal::trace(const FormatOrString & fs)
|
void Goal::trace(std::string_view s)
|
||||||
{
|
{
|
||||||
debug("%1%: %2%", name, fs.s);
|
debug("%1%: %2%", name, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,7 +88,7 @@ struct Goal : public std::enable_shared_from_this<Goal>
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
void trace(const FormatOrString & fs);
|
void trace(std::string_view s);
|
||||||
|
|
||||||
std::string getName()
|
std::string getName()
|
||||||
{
|
{
|
||||||
|
|
|
@ -650,7 +650,7 @@ void LocalDerivationGoal::startBuilder()
|
||||||
/* Clean up the chroot directory automatically. */
|
/* Clean up the chroot directory automatically. */
|
||||||
autoDelChroot = std::make_shared<AutoDelete>(chrootRootDir);
|
autoDelChroot = std::make_shared<AutoDelete>(chrootRootDir);
|
||||||
|
|
||||||
printMsg(lvlChatty, format("setting up chroot environment in '%1%'") % chrootRootDir);
|
printMsg(lvlChatty, "setting up chroot environment in '%1%'", chrootRootDir);
|
||||||
|
|
||||||
// FIXME: make this 0700
|
// FIXME: make this 0700
|
||||||
if (mkdir(chrootRootDir.c_str(), buildUser && buildUser->getUIDCount() != 1 ? 0755 : 0750) == -1)
|
if (mkdir(chrootRootDir.c_str(), buildUser && buildUser->getUIDCount() != 1 ? 0755 : 0750) == -1)
|
||||||
|
@ -753,8 +753,7 @@ void LocalDerivationGoal::startBuilder()
|
||||||
throw Error("home directory '%1%' exists; please remove it to assure purity of builds without sandboxing", homeDir);
|
throw Error("home directory '%1%' exists; please remove it to assure purity of builds without sandboxing", homeDir);
|
||||||
|
|
||||||
if (useChroot && settings.preBuildHook != "" && dynamic_cast<Derivation *>(drv.get())) {
|
if (useChroot && settings.preBuildHook != "" && dynamic_cast<Derivation *>(drv.get())) {
|
||||||
printMsg(lvlChatty, format("executing pre-build hook '%1%'")
|
printMsg(lvlChatty, "executing pre-build hook '%1%'", settings.preBuildHook);
|
||||||
% settings.preBuildHook);
|
|
||||||
auto args = useChroot ? Strings({worker.store.printStorePath(drvPath), chrootRootDir}) :
|
auto args = useChroot ? Strings({worker.store.printStorePath(drvPath), chrootRootDir}) :
|
||||||
Strings({ worker.store.printStorePath(drvPath) });
|
Strings({ worker.store.printStorePath(drvPath) });
|
||||||
enum BuildHookState {
|
enum BuildHookState {
|
||||||
|
@ -1104,7 +1103,7 @@ void LocalDerivationGoal::initEnv()
|
||||||
env["NIX_STORE"] = worker.store.storeDir;
|
env["NIX_STORE"] = worker.store.storeDir;
|
||||||
|
|
||||||
/* The maximum number of cores to utilize for parallel building. */
|
/* The maximum number of cores to utilize for parallel building. */
|
||||||
env["NIX_BUILD_CORES"] = (format("%d") % settings.buildCores).str();
|
env["NIX_BUILD_CORES"] = fmt("%d", settings.buildCores);
|
||||||
|
|
||||||
initTmpDir();
|
initTmpDir();
|
||||||
|
|
||||||
|
|
|
@ -67,12 +67,12 @@ struct TunnelLogger : public Logger
|
||||||
state->pendingMsgs.push_back(s);
|
state->pendingMsgs.push_back(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(Verbosity lvl, const FormatOrString & fs) override
|
void log(Verbosity lvl, std::string_view s) override
|
||||||
{
|
{
|
||||||
if (lvl > verbosity) return;
|
if (lvl > verbosity) return;
|
||||||
|
|
||||||
StringSink buf;
|
StringSink buf;
|
||||||
buf << STDERR_NEXT << (fs.s + "\n");
|
buf << STDERR_NEXT << (s + "\n");
|
||||||
enqueueMsg(buf.s);
|
enqueueMsg(buf.s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ void Store::exportPaths(const StorePathSet & paths, Sink & sink)
|
||||||
//logger->incExpected(doneLabel, sorted.size());
|
//logger->incExpected(doneLabel, sorted.size());
|
||||||
|
|
||||||
for (auto & path : sorted) {
|
for (auto & path : sorted) {
|
||||||
//Activity act(*logger, lvlInfo, format("exporting path '%s'") % path);
|
//Activity act(*logger, lvlInfo, "exporting path '%s'", path);
|
||||||
sink << 1;
|
sink << 1;
|
||||||
exportPath(path, sink);
|
exportPath(path, sink);
|
||||||
//logger->incProgress(doneLabel);
|
//logger->incProgress(doneLabel);
|
||||||
|
@ -71,7 +71,7 @@ StorePaths Store::importPaths(Source & source, CheckSigsFlag checkSigs)
|
||||||
|
|
||||||
auto path = parseStorePath(readString(source));
|
auto path = parseStorePath(readString(source));
|
||||||
|
|
||||||
//Activity act(*logger, lvlInfo, format("importing path '%s'") % info.path);
|
//Activity act(*logger, lvlInfo, "importing path '%s'", info.path);
|
||||||
|
|
||||||
auto references = worker_proto::read(*this, source, Phantom<StorePathSet> {});
|
auto references = worker_proto::read(*this, source, Phantom<StorePathSet> {});
|
||||||
auto deriver = readString(source);
|
auto deriver = readString(source);
|
||||||
|
|
|
@ -185,7 +185,7 @@ struct curlFileTransfer : public FileTransfer
|
||||||
{
|
{
|
||||||
size_t realSize = size * nmemb;
|
size_t realSize = size * nmemb;
|
||||||
std::string line((char *) contents, realSize);
|
std::string line((char *) contents, realSize);
|
||||||
printMsg(lvlVomit, format("got header for '%s': %s") % request.uri % trim(line));
|
printMsg(lvlVomit, "got header for '%s': %s", request.uri, trim(line));
|
||||||
static std::regex statusLine("HTTP/[^ ]+ +[0-9]+(.*)", std::regex::extended | std::regex::icase);
|
static std::regex statusLine("HTTP/[^ ]+ +[0-9]+(.*)", std::regex::extended | std::regex::icase);
|
||||||
std::smatch match;
|
std::smatch match;
|
||||||
if (std::regex_match(line, match, statusLine)) {
|
if (std::regex_match(line, match, statusLine)) {
|
||||||
|
@ -209,7 +209,7 @@ struct curlFileTransfer : public FileTransfer
|
||||||
long httpStatus = 0;
|
long httpStatus = 0;
|
||||||
curl_easy_getinfo(req, CURLINFO_RESPONSE_CODE, &httpStatus);
|
curl_easy_getinfo(req, CURLINFO_RESPONSE_CODE, &httpStatus);
|
||||||
if (result.etag == request.expectedETag && httpStatus == 200) {
|
if (result.etag == request.expectedETag && httpStatus == 200) {
|
||||||
debug(format("shutting down on 200 HTTP response with expected ETag"));
|
debug("shutting down on 200 HTTP response with expected ETag");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else if (name == "content-encoding")
|
} else if (name == "content-encoding")
|
||||||
|
|
|
@ -34,8 +34,7 @@ static void makeSymlink(const Path & link, const Path & target)
|
||||||
createDirs(dirOf(link));
|
createDirs(dirOf(link));
|
||||||
|
|
||||||
/* Create the new symlink. */
|
/* Create the new symlink. */
|
||||||
Path tempLink = (format("%1%.tmp-%2%-%3%")
|
Path tempLink = fmt("%1%.tmp-%2%-%3%", link, getpid(), random());
|
||||||
% link % getpid() % random()).str();
|
|
||||||
createSymlink(target, tempLink);
|
createSymlink(target, tempLink);
|
||||||
|
|
||||||
/* Atomically replace the old one. */
|
/* Atomically replace the old one. */
|
||||||
|
@ -197,7 +196,7 @@ void LocalStore::findTempRoots(Roots & tempRoots, bool censor)
|
||||||
|
|
||||||
pid_t pid = std::stoi(i.name);
|
pid_t pid = std::stoi(i.name);
|
||||||
|
|
||||||
debug(format("reading temporary root file '%1%'") % path);
|
debug("reading temporary root file '%1%'", path);
|
||||||
AutoCloseFD fd(open(path.c_str(), O_CLOEXEC | O_RDWR, 0666));
|
AutoCloseFD fd(open(path.c_str(), O_CLOEXEC | O_RDWR, 0666));
|
||||||
if (!fd) {
|
if (!fd) {
|
||||||
/* It's okay if the file has disappeared. */
|
/* It's okay if the file has disappeared. */
|
||||||
|
@ -263,7 +262,7 @@ void LocalStore::findRoots(const Path & path, unsigned char type, Roots & roots)
|
||||||
target = absPath(target, dirOf(path));
|
target = absPath(target, dirOf(path));
|
||||||
if (!pathExists(target)) {
|
if (!pathExists(target)) {
|
||||||
if (isInDir(path, stateDir + "/" + gcRootsDir + "/auto")) {
|
if (isInDir(path, stateDir + "/" + gcRootsDir + "/auto")) {
|
||||||
printInfo(format("removing stale link from '%1%' to '%2%'") % path % target);
|
printInfo("removing stale link from '%1%' to '%2%'", path, target);
|
||||||
unlink(path.c_str());
|
unlink(path.c_str());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -863,7 +862,7 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
printMsg(lvlTalkative, format("deleting unused link '%1%'") % path);
|
printMsg(lvlTalkative, "deleting unused link '%1%'", path);
|
||||||
|
|
||||||
if (unlink(path.c_str()) == -1)
|
if (unlink(path.c_str()) == -1)
|
||||||
throw SysError("deleting '%1%'", path);
|
throw SysError("deleting '%1%'", path);
|
||||||
|
|
|
@ -280,7 +280,7 @@ LocalStore::LocalStore(const Params & params)
|
||||||
else if (curSchema == 0) { /* new store */
|
else if (curSchema == 0) { /* new store */
|
||||||
curSchema = nixSchemaVersion;
|
curSchema = nixSchemaVersion;
|
||||||
openDB(*state, true);
|
openDB(*state, true);
|
||||||
writeFile(schemaPath, (format("%1%") % nixSchemaVersion).str(), 0666, true);
|
writeFile(schemaPath, fmt("%1%", nixSchemaVersion), 0666, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (curSchema < nixSchemaVersion) {
|
else if (curSchema < nixSchemaVersion) {
|
||||||
|
@ -329,7 +329,7 @@ LocalStore::LocalStore(const Params & params)
|
||||||
txn.commit();
|
txn.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
writeFile(schemaPath, (format("%1%") % nixSchemaVersion).str(), 0666, true);
|
writeFile(schemaPath, fmt("%1%", nixSchemaVersion), 0666, true);
|
||||||
|
|
||||||
lockFile(globalLock.get(), ltRead, true);
|
lockFile(globalLock.get(), ltRead, true);
|
||||||
}
|
}
|
||||||
|
@ -1560,7 +1560,7 @@ void LocalStore::invalidatePathChecked(const StorePath & path)
|
||||||
|
|
||||||
bool LocalStore::verifyStore(bool checkContents, RepairFlag repair)
|
bool LocalStore::verifyStore(bool checkContents, RepairFlag repair)
|
||||||
{
|
{
|
||||||
printInfo(format("reading the Nix store..."));
|
printInfo("reading the Nix store...");
|
||||||
|
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ LocalStore::InodeHash LocalStore::loadInodeHash()
|
||||||
}
|
}
|
||||||
if (errno) throw SysError("reading directory '%1%'", linksDir);
|
if (errno) throw SysError("reading directory '%1%'", linksDir);
|
||||||
|
|
||||||
printMsg(lvlTalkative, format("loaded %1% hash inodes") % inodeHash.size());
|
printMsg(lvlTalkative, "loaded %1% hash inodes", inodeHash.size());
|
||||||
|
|
||||||
return inodeHash;
|
return inodeHash;
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ Strings LocalStore::readDirectoryIgnoringInodes(const Path & path, const InodeHa
|
||||||
checkInterrupt();
|
checkInterrupt();
|
||||||
|
|
||||||
if (inodeHash.count(dirent->d_ino)) {
|
if (inodeHash.count(dirent->d_ino)) {
|
||||||
debug(format("'%1%' is already linked") % dirent->d_name);
|
debug("'%1%' is already linked", dirent->d_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
|
||||||
|
|
||||||
if (std::regex_search(path, std::regex("\\.app/Contents/.+$")))
|
if (std::regex_search(path, std::regex("\\.app/Contents/.+$")))
|
||||||
{
|
{
|
||||||
debug(format("'%1%' is not allowed to be linked in macOS") % path);
|
debug("'%1%' is not allowed to be linked in macOS", path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -146,7 +146,7 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
|
||||||
contents of the symlink (i.e. the result of readlink()), not
|
contents of the symlink (i.e. the result of readlink()), not
|
||||||
the contents of the target (which may not even exist). */
|
the contents of the target (which may not even exist). */
|
||||||
Hash hash = hashPath(htSHA256, path).first;
|
Hash hash = hashPath(htSHA256, path).first;
|
||||||
debug(format("'%1%' has hash '%2%'") % path % hash.to_string(Base32, true));
|
debug("'%1%' has hash '%2%'", path, hash.to_string(Base32, true));
|
||||||
|
|
||||||
/* Check if this is a known hash. */
|
/* Check if this is a known hash. */
|
||||||
Path linkPath = linksDir + "/" + hash.to_string(Base32, false);
|
Path linkPath = linksDir + "/" + hash.to_string(Base32, false);
|
||||||
|
@ -196,11 +196,11 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
|
||||||
auto stLink = lstat(linkPath);
|
auto stLink = lstat(linkPath);
|
||||||
|
|
||||||
if (st.st_ino == stLink.st_ino) {
|
if (st.st_ino == stLink.st_ino) {
|
||||||
debug(format("'%1%' is already linked to '%2%'") % path % linkPath);
|
debug("'%1%' is already linked to '%2%'", path, linkPath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
printMsg(lvlTalkative, format("linking '%1%' to '%2%'") % path % linkPath);
|
printMsg(lvlTalkative, "linking '%1%' to '%2%'", path, linkPath);
|
||||||
|
|
||||||
/* Make the containing directory writable, but only if it's not
|
/* Make the containing directory writable, but only if it's not
|
||||||
the store itself (we don't want or need to mess with its
|
the store itself (we don't want or need to mess with its
|
||||||
|
@ -213,8 +213,7 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
|
||||||
its timestamp back to 0. */
|
its timestamp back to 0. */
|
||||||
MakeReadOnly makeReadOnly(mustToggle ? dirOfPath : "");
|
MakeReadOnly makeReadOnly(mustToggle ? dirOfPath : "");
|
||||||
|
|
||||||
Path tempLink = (format("%1%/.tmp-link-%2%-%3%")
|
Path tempLink = fmt("%1%/.tmp-link-%2%-%3%", realStoreDir, getpid(), random());
|
||||||
% realStoreDir % getpid() % random()).str();
|
|
||||||
|
|
||||||
if (link(linkPath.c_str(), tempLink.c_str()) == -1) {
|
if (link(linkPath.c_str(), tempLink.c_str()) == -1) {
|
||||||
if (errno == EMLINK) {
|
if (errno == EMLINK) {
|
||||||
|
@ -222,7 +221,7 @@ void LocalStore::optimisePath_(Activity * act, OptimiseStats & stats,
|
||||||
systems). This is likely to happen with empty files.
|
systems). This is likely to happen with empty files.
|
||||||
Just shrug and ignore. */
|
Just shrug and ignore. */
|
||||||
if (st.st_size)
|
if (st.st_size)
|
||||||
printInfo(format("'%1%' has maximum number of links") % linkPath);
|
printInfo("'%1%' has maximum number of links", linkPath);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw SysError("cannot link '%1%' to '%2%'", tempLink, linkPath);
|
throw SysError("cannot link '%1%' to '%2%'", tempLink, linkPath);
|
||||||
|
|
|
@ -96,7 +96,7 @@ bool PathLocks::lockPaths(const PathSet & paths,
|
||||||
checkInterrupt();
|
checkInterrupt();
|
||||||
Path lockPath = path + ".lock";
|
Path lockPath = path + ".lock";
|
||||||
|
|
||||||
debug(format("locking path '%1%'") % path);
|
debug("locking path '%1%'", path);
|
||||||
|
|
||||||
AutoCloseFD fd;
|
AutoCloseFD fd;
|
||||||
|
|
||||||
|
@ -118,7 +118,7 @@ bool PathLocks::lockPaths(const PathSet & paths,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(format("lock acquired on '%1%'") % lockPath);
|
debug("lock acquired on '%1%'", lockPath);
|
||||||
|
|
||||||
/* Check that the lock file hasn't become stale (i.e.,
|
/* Check that the lock file hasn't become stale (i.e.,
|
||||||
hasn't been unlinked). */
|
hasn't been unlinked). */
|
||||||
|
@ -130,7 +130,7 @@ bool PathLocks::lockPaths(const PathSet & paths,
|
||||||
a lock on a deleted file. This means that other
|
a lock on a deleted file. This means that other
|
||||||
processes may create and acquire a lock on
|
processes may create and acquire a lock on
|
||||||
`lockPath', and proceed. So we must retry. */
|
`lockPath', and proceed. So we must retry. */
|
||||||
debug(format("open lock file '%1%' has become stale") % lockPath);
|
debug("open lock file '%1%' has become stale", lockPath);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ void PathLocks::unlock()
|
||||||
"error (ignored): cannot close lock file on '%1%'",
|
"error (ignored): cannot close lock file on '%1%'",
|
||||||
i.second);
|
i.second);
|
||||||
|
|
||||||
debug(format("lock released on '%1%'") % i.second);
|
debug("lock released on '%1%'", i.second);
|
||||||
}
|
}
|
||||||
|
|
||||||
fds.clear();
|
fds.clear();
|
||||||
|
|
|
@ -64,7 +64,7 @@ std::pair<Generations, std::optional<GenerationNumber>> findGenerations(Path pro
|
||||||
static void makeName(const Path & profile, GenerationNumber num,
|
static void makeName(const Path & profile, GenerationNumber num,
|
||||||
Path & outLink)
|
Path & outLink)
|
||||||
{
|
{
|
||||||
Path prefix = (format("%1%-%2%") % profile % num).str();
|
Path prefix = fmt("%1%-%2%", profile, num);
|
||||||
outLink = prefix + "-link";
|
outLink = prefix + "-link";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,7 +269,7 @@ void switchGeneration(
|
||||||
|
|
||||||
void lockProfile(PathLocks & lock, const Path & profile)
|
void lockProfile(PathLocks & lock, const Path & profile)
|
||||||
{
|
{
|
||||||
lock.lockPaths({profile}, (format("waiting for lock on profile '%1%'") % profile).str());
|
lock.lockPaths({profile}, fmt("waiting for lock on profile '%1%'", profile));
|
||||||
lock.setDeletion(true);
|
lock.setDeletion(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,7 @@ static void search(
|
||||||
if (!match) continue;
|
if (!match) continue;
|
||||||
std::string ref(s.substr(i, refLength));
|
std::string ref(s.substr(i, refLength));
|
||||||
if (hashes.erase(ref)) {
|
if (hashes.erase(ref)) {
|
||||||
debug(format("found reference to '%1%' at offset '%2%'")
|
debug("found reference to '%1%' at offset '%2%'", ref, i);
|
||||||
% ref % i);
|
|
||||||
seen.insert(ref);
|
seen.insert(ref);
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
|
|
|
@ -40,12 +40,12 @@ struct S3Error : public Error
|
||||||
/* Helper: given an Outcome<R, E>, return R in case of success, or
|
/* Helper: given an Outcome<R, E>, return R in case of success, or
|
||||||
throw an exception in case of an error. */
|
throw an exception in case of an error. */
|
||||||
template<typename R, typename E>
|
template<typename R, typename E>
|
||||||
R && checkAws(const FormatOrString & fs, Aws::Utils::Outcome<R, E> && outcome)
|
R && checkAws(std::string_view s, Aws::Utils::Outcome<R, E> && outcome)
|
||||||
{
|
{
|
||||||
if (!outcome.IsSuccess())
|
if (!outcome.IsSuccess())
|
||||||
throw S3Error(
|
throw S3Error(
|
||||||
outcome.GetError().GetErrorType(),
|
outcome.GetError().GetErrorType(),
|
||||||
fs.s + ": " + outcome.GetError().GetMessage());
|
s + ": " + outcome.GetError().GetMessage());
|
||||||
return outcome.GetResultWithOwnership();
|
return outcome.GetResultWithOwnership();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,9 +430,9 @@ struct S3BinaryCacheStoreImpl : virtual S3BinaryCacheStoreConfig, public virtual
|
||||||
std::string marker;
|
std::string marker;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
debug(format("listing bucket 's3://%s' from key '%s'...") % bucketName % marker);
|
debug("listing bucket 's3://%s' from key '%s'...", bucketName, marker);
|
||||||
|
|
||||||
auto res = checkAws(format("AWS error listing bucket '%s'") % bucketName,
|
auto res = checkAws(fmt("AWS error listing bucket '%s'", bucketName),
|
||||||
s3Helper.client->ListObjects(
|
s3Helper.client->ListObjects(
|
||||||
Aws::S3::Model::ListObjectsRequest()
|
Aws::S3::Model::ListObjectsRequest()
|
||||||
.WithBucket(bucketName)
|
.WithBucket(bucketName)
|
||||||
|
@ -441,8 +441,8 @@ struct S3BinaryCacheStoreImpl : virtual S3BinaryCacheStoreConfig, public virtual
|
||||||
|
|
||||||
auto & contents = res.GetContents();
|
auto & contents = res.GetContents();
|
||||||
|
|
||||||
debug(format("got %d keys, next marker '%s'")
|
debug("got %d keys, next marker '%s'",
|
||||||
% contents.size() % res.GetNextMarker());
|
contents.size(), res.GetNextMarker());
|
||||||
|
|
||||||
for (auto object : contents) {
|
for (auto object : contents) {
|
||||||
auto & key = object.GetKey();
|
auto & key = object.GetKey();
|
||||||
|
|
|
@ -790,13 +790,13 @@ std::string Store::makeValidityRegistration(const StorePathSet & paths,
|
||||||
|
|
||||||
if (showHash) {
|
if (showHash) {
|
||||||
s += info->narHash.to_string(Base16, false) + "\n";
|
s += info->narHash.to_string(Base16, false) + "\n";
|
||||||
s += (format("%1%\n") % info->narSize).str();
|
s += fmt("%1%\n", info->narSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto deriver = showDerivers && info->deriver ? printStorePath(*info->deriver) : "";
|
auto deriver = showDerivers && info->deriver ? printStorePath(*info->deriver) : "";
|
||||||
s += deriver + "\n";
|
s += deriver + "\n";
|
||||||
|
|
||||||
s += (format("%1%\n") % info->references.size()).str();
|
s += fmt("%1%\n", info->references.size());
|
||||||
|
|
||||||
for (auto & j : info->references)
|
for (auto & j : info->references)
|
||||||
s += printStorePath(j) + "\n";
|
s += printStorePath(j) + "\n";
|
||||||
|
|
|
@ -87,7 +87,7 @@ static time_t dump(const Path & path, Sink & sink, PathFilter & filter)
|
||||||
std::string name(i.name);
|
std::string name(i.name);
|
||||||
size_t pos = i.name.find(caseHackSuffix);
|
size_t pos = i.name.find(caseHackSuffix);
|
||||||
if (pos != std::string::npos) {
|
if (pos != std::string::npos) {
|
||||||
debug(format("removing case hack suffix from '%1%'") % (path + "/" + i.name));
|
debug("removing case hack suffix from '%1%'", path + "/" + i.name);
|
||||||
name.erase(pos);
|
name.erase(pos);
|
||||||
}
|
}
|
||||||
if (!unhacked.emplace(name, i.name).second)
|
if (!unhacked.emplace(name, i.name).second)
|
||||||
|
@ -262,7 +262,7 @@ static void parse(ParseSink & sink, Source & source, const Path & path)
|
||||||
if (archiveSettings.useCaseHack) {
|
if (archiveSettings.useCaseHack) {
|
||||||
auto i = names.find(name);
|
auto i = names.find(name);
|
||||||
if (i != names.end()) {
|
if (i != names.end()) {
|
||||||
debug(format("case collision between '%1%' and '%2%'") % i->first % name);
|
debug("case collision between '%1%' and '%2%'", i->first, name);
|
||||||
name += caseHackSuffix;
|
name += caseHackSuffix;
|
||||||
name += std::to_string(++i->second);
|
name += std::to_string(++i->second);
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -15,9 +15,9 @@ static Path tempName(Path tmpRoot, const Path & prefix, bool includePid,
|
||||||
{
|
{
|
||||||
tmpRoot = canonPath(tmpRoot.empty() ? getEnv("TMPDIR").value_or("/tmp") : tmpRoot, true);
|
tmpRoot = canonPath(tmpRoot.empty() ? getEnv("TMPDIR").value_or("/tmp") : tmpRoot, true);
|
||||||
if (includePid)
|
if (includePid)
|
||||||
return (format("%1%/%2%-%3%-%4%") % tmpRoot % prefix % getpid() % counter++).str();
|
return fmt("%1%/%2%-%3%-%4%", tmpRoot, prefix, getpid(), counter++);
|
||||||
else
|
else
|
||||||
return (format("%1%/%2%-%3%") % tmpRoot % prefix % counter++).str();
|
return fmt("%1%/%2%-%3%", tmpRoot, prefix, counter++);
|
||||||
}
|
}
|
||||||
|
|
||||||
Path createTempDir(const Path & tmpRoot, const Path & prefix,
|
Path createTempDir(const Path & tmpRoot, const Path & prefix,
|
||||||
|
|
|
@ -17,16 +17,6 @@ using boost::format;
|
||||||
struct nop { template<typename... T> nop(T...) {} };
|
struct nop { template<typename... T> nop(T...) {} };
|
||||||
|
|
||||||
|
|
||||||
struct FormatOrString
|
|
||||||
{
|
|
||||||
std::string s;
|
|
||||||
FormatOrString(std::string s) : s(std::move(s)) { };
|
|
||||||
template<class F>
|
|
||||||
FormatOrString(const F & f) : s(f.str()) { };
|
|
||||||
FormatOrString(const char * s) : s(s) { };
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* A helper for formatting strings. ‘fmt(format, a_0, ..., a_n)’ is
|
/* A helper for formatting strings. ‘fmt(format, a_0, ..., a_n)’ is
|
||||||
equivalent to ‘boost::format(format) % a_0 % ... %
|
equivalent to ‘boost::format(format) % a_0 % ... %
|
||||||
... a_n’. However, ‘fmt(s)’ is equivalent to ‘s’ (so no %-expansion
|
... a_n’. However, ‘fmt(s)’ is equivalent to ‘s’ (so no %-expansion
|
||||||
|
@ -53,11 +43,6 @@ inline std::string fmt(const char * s)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string fmt(const FormatOrString & fs)
|
|
||||||
{
|
|
||||||
return fs.s;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
inline std::string fmt(const std::string & fs, const Args & ... args)
|
inline std::string fmt(const std::string & fs, const Args & ... args)
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,7 @@ public:
|
||||||
return printBuildLogs;
|
return printBuildLogs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(Verbosity lvl, const FormatOrString & fs) override
|
void log(Verbosity lvl, std::string_view s) override
|
||||||
{
|
{
|
||||||
if (lvl > verbosity) return;
|
if (lvl > verbosity) return;
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ public:
|
||||||
prefix = std::string("<") + c + ">";
|
prefix = std::string("<") + c + ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
writeToStderr(prefix + filterANSIEscapes(fs.s, !tty) + "\n");
|
writeToStderr(prefix + filterANSIEscapes(s, !tty) + "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void logEI(const ErrorInfo & ei) override
|
void logEI(const ErrorInfo & ei) override
|
||||||
|
@ -174,12 +174,12 @@ struct JSONLogger : Logger {
|
||||||
prevLogger.log(lvlError, "@nix " + json.dump(-1, ' ', false, nlohmann::json::error_handler_t::replace));
|
prevLogger.log(lvlError, "@nix " + json.dump(-1, ' ', false, nlohmann::json::error_handler_t::replace));
|
||||||
}
|
}
|
||||||
|
|
||||||
void log(Verbosity lvl, const FormatOrString & fs) override
|
void log(Verbosity lvl, std::string_view s) override
|
||||||
{
|
{
|
||||||
nlohmann::json json;
|
nlohmann::json json;
|
||||||
json["action"] = "msg";
|
json["action"] = "msg";
|
||||||
json["level"] = lvl;
|
json["level"] = lvl;
|
||||||
json["msg"] = fs.s;
|
json["msg"] = s;
|
||||||
write(json);
|
write(json);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,11 +75,11 @@ public:
|
||||||
// Whether the logger prints the whole build log
|
// Whether the logger prints the whole build log
|
||||||
virtual bool isVerbose() { return false; }
|
virtual bool isVerbose() { return false; }
|
||||||
|
|
||||||
virtual void log(Verbosity lvl, const FormatOrString & fs) = 0;
|
virtual void log(Verbosity lvl, std::string_view s) = 0;
|
||||||
|
|
||||||
void log(const FormatOrString & fs)
|
void log(std::string_view s)
|
||||||
{
|
{
|
||||||
log(lvlInfo, fs);
|
log(lvlInfo, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void logEI(const ErrorInfo & ei) = 0;
|
virtual void logEI(const ErrorInfo & ei) = 0;
|
||||||
|
|
|
@ -415,7 +415,7 @@ Error readError(Source & source)
|
||||||
auto msg = readString(source);
|
auto msg = readString(source);
|
||||||
ErrorInfo info {
|
ErrorInfo info {
|
||||||
.level = level,
|
.level = level,
|
||||||
.msg = hintformat(std::move(format("%s") % msg)),
|
.msg = hintformat(fmt("%s", msg)),
|
||||||
};
|
};
|
||||||
auto havePos = readNum<size_t>(source);
|
auto havePos = readNum<size_t>(source);
|
||||||
assert(havePos == 0);
|
assert(havePos == 0);
|
||||||
|
@ -424,7 +424,7 @@ Error readError(Source & source)
|
||||||
havePos = readNum<size_t>(source);
|
havePos = readNum<size_t>(source);
|
||||||
assert(havePos == 0);
|
assert(havePos == 0);
|
||||||
info.traces.push_back(Trace {
|
info.traces.push_back(Trace {
|
||||||
.hint = hintformat(std::move(format("%s") % readString(source)))
|
.hint = hintformat(fmt("%s", readString(source)))
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return Error(std::move(info));
|
return Error(std::move(info));
|
||||||
|
|
|
@ -523,7 +523,7 @@ void deletePath(const Path & path)
|
||||||
|
|
||||||
void deletePath(const Path & path, uint64_t & bytesFreed)
|
void deletePath(const Path & path, uint64_t & bytesFreed)
|
||||||
{
|
{
|
||||||
//Activity act(*logger, lvlDebug, format("recursively deleting path '%1%'") % path);
|
//Activity act(*logger, lvlDebug, "recursively deleting path '%1%'", path);
|
||||||
bytesFreed = 0;
|
bytesFreed = 0;
|
||||||
_deletePath(path, bytesFreed);
|
_deletePath(path, bytesFreed);
|
||||||
}
|
}
|
||||||
|
@ -1394,14 +1394,14 @@ std::string statusToString(int status)
|
||||||
{
|
{
|
||||||
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
|
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
|
||||||
if (WIFEXITED(status))
|
if (WIFEXITED(status))
|
||||||
return (format("failed with exit code %1%") % WEXITSTATUS(status)).str();
|
return fmt("failed with exit code %1%", WEXITSTATUS(status));
|
||||||
else if (WIFSIGNALED(status)) {
|
else if (WIFSIGNALED(status)) {
|
||||||
int sig = WTERMSIG(status);
|
int sig = WTERMSIG(status);
|
||||||
#if HAVE_STRSIGNAL
|
#if HAVE_STRSIGNAL
|
||||||
const char * description = strsignal(sig);
|
const char * description = strsignal(sig);
|
||||||
return (format("failed due to signal %1% (%2%)") % sig % description).str();
|
return fmt("failed due to signal %1% (%2%)", sig, description);
|
||||||
#else
|
#else
|
||||||
return (format("failed due to signal %1%") % sig).str();
|
return fmt("failed due to signal %1%", sig);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1470,7 +1470,7 @@ bool shouldANSI()
|
||||||
&& !getEnv("NO_COLOR").has_value();
|
&& !getEnv("NO_COLOR").has_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string filterANSIEscapes(const std::string & s, bool filterAll, unsigned int width)
|
std::string filterANSIEscapes(std::string_view s, bool filterAll, unsigned int width)
|
||||||
{
|
{
|
||||||
std::string t, e;
|
std::string t, e;
|
||||||
size_t w = 0;
|
size_t w = 0;
|
||||||
|
|
|
@ -569,7 +569,7 @@ bool shouldANSI();
|
||||||
some escape sequences (such as colour setting) are copied but not
|
some escape sequences (such as colour setting) are copied but not
|
||||||
included in the character count. Also, tabs are expanded to
|
included in the character count. Also, tabs are expanded to
|
||||||
spaces. */
|
spaces. */
|
||||||
std::string filterANSIEscapes(const std::string & s,
|
std::string filterANSIEscapes(std::string_view s,
|
||||||
bool filterAll = false,
|
bool filterAll = false,
|
||||||
unsigned int width = std::numeric_limits<unsigned int>::max());
|
unsigned int width = std::numeric_limits<unsigned int>::max());
|
||||||
|
|
||||||
|
|
|
@ -219,9 +219,9 @@ static void main_nix_build(int argc, char * * argv)
|
||||||
// read the shebang to understand which packages to read from. Since
|
// read the shebang to understand which packages to read from. Since
|
||||||
// this is handled via nix-shell -p, we wrap our ruby script execution
|
// this is handled via nix-shell -p, we wrap our ruby script execution
|
||||||
// in ruby -e 'load' which ignores the shebangs.
|
// in ruby -e 'load' which ignores the shebangs.
|
||||||
envCommand = (format("exec %1% %2% -e 'load(ARGV.shift)' -- %3% %4%") % execArgs % interpreter % shellEscape(script) % joined.str()).str();
|
envCommand = fmt("exec %1% %2% -e 'load(ARGV.shift)' -- %3% %4%", execArgs, interpreter, shellEscape(script), joined.str());
|
||||||
} else {
|
} else {
|
||||||
envCommand = (format("exec %1% %2% %3% %4%") % execArgs % interpreter % shellEscape(script) % joined.str()).str();
|
envCommand = fmt("exec %1% %2% %3% %4%", execArgs, interpreter, shellEscape(script), joined.str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ void removeOldGenerations(std::string dir)
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
if (link.find("link") != std::string::npos) {
|
if (link.find("link") != std::string::npos) {
|
||||||
printInfo(format("removing old generations of profile %1%") % path);
|
printInfo("removing old generations of profile %s", path);
|
||||||
if (deleteOlderThan != "")
|
if (deleteOlderThan != "")
|
||||||
deleteGenerationsOlderThan(path, deleteOlderThan, dryRun);
|
deleteGenerationsOlderThan(path, deleteOlderThan, dryRun);
|
||||||
else
|
else
|
||||||
|
|
|
@ -22,7 +22,7 @@ static int main_nix_copy_closure(int argc, char ** argv)
|
||||||
printVersion("nix-copy-closure");
|
printVersion("nix-copy-closure");
|
||||||
else if (*arg == "--gzip" || *arg == "--bzip2" || *arg == "--xz") {
|
else if (*arg == "--gzip" || *arg == "--bzip2" || *arg == "--xz") {
|
||||||
if (*arg != "--gzip")
|
if (*arg != "--gzip")
|
||||||
printMsg(lvlError, format("Warning: '%1%' is not implemented, falling back to gzip") % *arg);
|
warn("'%1%' is not implemented, falling back to gzip", *arg);
|
||||||
gzip = true;
|
gzip = true;
|
||||||
} else if (*arg == "--from")
|
} else if (*arg == "--from")
|
||||||
toMode = false;
|
toMode = false;
|
||||||
|
|
|
@ -500,7 +500,7 @@ static bool keep(DrvInfo & drv)
|
||||||
static void installDerivations(Globals & globals,
|
static void installDerivations(Globals & globals,
|
||||||
const Strings & args, const Path & profile)
|
const Strings & args, const Path & profile)
|
||||||
{
|
{
|
||||||
debug(format("installing derivations"));
|
debug("installing derivations");
|
||||||
|
|
||||||
/* Get the set of user environment elements to be installed. */
|
/* Get the set of user environment elements to be installed. */
|
||||||
DrvInfos newElems, newElemsTmp;
|
DrvInfos newElems, newElemsTmp;
|
||||||
|
@ -579,7 +579,7 @@ typedef enum { utLt, utLeq, utEq, utAlways } UpgradeType;
|
||||||
static void upgradeDerivations(Globals & globals,
|
static void upgradeDerivations(Globals & globals,
|
||||||
const Strings & args, UpgradeType upgradeType)
|
const Strings & args, UpgradeType upgradeType)
|
||||||
{
|
{
|
||||||
debug(format("upgrading derivations"));
|
debug("upgrading derivations");
|
||||||
|
|
||||||
/* Upgrade works as follows: we take all currently installed
|
/* Upgrade works as follows: we take all currently installed
|
||||||
derivations, and for any derivation matching any selector, look
|
derivations, and for any derivation matching any selector, look
|
||||||
|
@ -768,7 +768,7 @@ static void opSet(Globals & globals, Strings opFlags, Strings opArgs)
|
||||||
if (globals.dryRun) return;
|
if (globals.dryRun) return;
|
||||||
globals.state->store->buildPaths(paths, globals.state->repair ? bmRepair : bmNormal);
|
globals.state->store->buildPaths(paths, globals.state->repair ? bmRepair : bmNormal);
|
||||||
|
|
||||||
debug(format("switching to new user environment"));
|
debug("switching to new user environment");
|
||||||
Path generation = createGeneration(
|
Path generation = createGeneration(
|
||||||
ref<LocalFSStore>(store2),
|
ref<LocalFSStore>(store2),
|
||||||
globals.profile,
|
globals.profile,
|
||||||
|
@ -1093,7 +1093,7 @@ static void opQuery(Globals & globals, Strings opFlags, Strings opArgs)
|
||||||
try {
|
try {
|
||||||
if (i.hasFailed()) continue;
|
if (i.hasFailed()) continue;
|
||||||
|
|
||||||
//Activity act(*logger, lvlDebug, format("outputting query result '%1%'") % i.attrPath);
|
//Activity act(*logger, lvlDebug, "outputting query result '%1%'", i.attrPath);
|
||||||
|
|
||||||
if (globals.prebuiltOnly &&
|
if (globals.prebuiltOnly &&
|
||||||
!validPaths.count(i.queryOutPath()) &&
|
!validPaths.count(i.queryOutPath()) &&
|
||||||
|
@ -1229,11 +1229,11 @@ static void opQuery(Globals & globals, Strings opFlags, Strings opArgs)
|
||||||
xml.writeEmptyElement("meta", attrs2);
|
xml.writeEmptyElement("meta", attrs2);
|
||||||
} else if (v->type() == nInt) {
|
} else if (v->type() == nInt) {
|
||||||
attrs2["type"] = "int";
|
attrs2["type"] = "int";
|
||||||
attrs2["value"] = (format("%1%") % v->integer).str();
|
attrs2["value"] = fmt("%1%", v->integer);
|
||||||
xml.writeEmptyElement("meta", attrs2);
|
xml.writeEmptyElement("meta", attrs2);
|
||||||
} else if (v->type() == nFloat) {
|
} else if (v->type() == nFloat) {
|
||||||
attrs2["type"] = "float";
|
attrs2["type"] = "float";
|
||||||
attrs2["value"] = (format("%1%") % v->fpoint).str();
|
attrs2["value"] = fmt("%1%", v->fpoint);
|
||||||
xml.writeEmptyElement("meta", attrs2);
|
xml.writeEmptyElement("meta", attrs2);
|
||||||
} else if (v->type() == nBool) {
|
} else if (v->type() == nBool) {
|
||||||
attrs2["type"] = "bool";
|
attrs2["type"] = "bool";
|
||||||
|
@ -1337,11 +1337,11 @@ static void opListGenerations(Globals & globals, Strings opFlags, Strings opArgs
|
||||||
for (auto & i : gens) {
|
for (auto & i : gens) {
|
||||||
tm t;
|
tm t;
|
||||||
if (!localtime_r(&i.creationTime, &t)) throw Error("cannot convert time");
|
if (!localtime_r(&i.creationTime, &t)) throw Error("cannot convert time");
|
||||||
cout << format("%|4| %|4|-%|02|-%|02| %|02|:%|02|:%|02| %||\n")
|
logger->cout("%|4| %|4|-%|02|-%|02| %|02|:%|02|:%|02| %||",
|
||||||
% i.number
|
i.number,
|
||||||
% (t.tm_year + 1900) % (t.tm_mon + 1) % t.tm_mday
|
t.tm_year + 1900, t.tm_mon + 1, t.tm_mday,
|
||||||
% t.tm_hour % t.tm_min % t.tm_sec
|
t.tm_hour, t.tm_min, t.tm_sec,
|
||||||
% (i.number == curGen ? "(current)" : "");
|
i.number == curGen ? "(current)" : "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
|
||||||
if (auto drvPath = i.queryDrvPath())
|
if (auto drvPath = i.queryDrvPath())
|
||||||
drvsToBuild.push_back({*drvPath});
|
drvsToBuild.push_back({*drvPath});
|
||||||
|
|
||||||
debug(format("building user environment dependencies"));
|
debug("building user environment dependencies");
|
||||||
state.store->buildPaths(
|
state.store->buildPaths(
|
||||||
toDerivedPaths(drvsToBuild),
|
toDerivedPaths(drvsToBuild),
|
||||||
state.repair ? bmRepair : bmNormal);
|
state.repair ? bmRepair : bmNormal);
|
||||||
|
@ -159,7 +159,7 @@ bool createUserEnv(EvalState & state, DrvInfos & elems,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug(format("switching to new user environment"));
|
debug("switching to new user environment");
|
||||||
Path generation = createGeneration(ref<LocalFSStore>(store2), profile, topLevelOut);
|
Path generation = createGeneration(ref<LocalFSStore>(store2), profile, topLevelOut);
|
||||||
switchLink(profile, generation);
|
switchLink(profile, generation);
|
||||||
}
|
}
|
||||||
|
|
|
@ -460,7 +460,7 @@ static void opPrintEnv(Strings opFlags, Strings opArgs)
|
||||||
/* Print each environment variable in the derivation in a format
|
/* 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)
|
for (auto & i : drv.env)
|
||||||
cout << format("export %1%; %1%=%2%\n") % i.first % shellEscape(i.second);
|
logger->cout("export %1%; %1%=%2%\n", i.first, shellEscape(i.second));
|
||||||
|
|
||||||
/* Also output the arguments. This doesn't preserve whitespace in
|
/* Also output the arguments. This doesn't preserve whitespace in
|
||||||
arguments. */
|
arguments. */
|
||||||
|
|
|
@ -249,9 +249,9 @@ static void daemonLoop()
|
||||||
if ((!trusted && !matchUser(user, group, allowedUsers)) || group == settings.buildUsersGroup)
|
if ((!trusted && !matchUser(user, group, allowedUsers)) || group == settings.buildUsersGroup)
|
||||||
throw Error("user '%1%' is not allowed to connect to the Nix daemon", user);
|
throw Error("user '%1%' is not allowed to connect to the Nix daemon", user);
|
||||||
|
|
||||||
printInfo(format((std::string) "accepted connection from pid %1%, user %2%" + (trusted ? " (trusted)" : ""))
|
printInfo((std::string) "accepted connection from pid %1%, user %2%" + (trusted ? " (trusted)" : ""),
|
||||||
% (peer.pidKnown ? std::to_string(peer.pid) : "<unknown>")
|
peer.pidKnown ? std::to_string(peer.pid) : "<unknown>",
|
||||||
% (peer.uidKnown ? user : "<unknown>"));
|
peer.uidKnown ? user : "<unknown>");
|
||||||
|
|
||||||
// Fork a child to handle the connection.
|
// Fork a child to handle the connection.
|
||||||
ProcessOptions options;
|
ProcessOptions options;
|
||||||
|
|
|
@ -18,7 +18,7 @@ std::string formatProtocol(unsigned int proto)
|
||||||
if (proto) {
|
if (proto) {
|
||||||
auto major = GET_PROTOCOL_MAJOR(proto) >> 8;
|
auto major = GET_PROTOCOL_MAJOR(proto) >> 8;
|
||||||
auto minor = GET_PROTOCOL_MINOR(proto);
|
auto minor = GET_PROTOCOL_MINOR(proto);
|
||||||
return (format("%1%.%2%") % major % minor).str();
|
return fmt("%1%.%2%", major, minor);
|
||||||
}
|
}
|
||||||
return "unknown";
|
return "unknown";
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ struct CmdCopySigs : StorePathsCommand
|
||||||
//logger->setExpected(doneLabel, storePaths.size());
|
//logger->setExpected(doneLabel, storePaths.size());
|
||||||
|
|
||||||
auto doPath = [&](const Path & storePathS) {
|
auto doPath = [&](const Path & storePathS) {
|
||||||
//Activity act(*logger, lvlInfo, format("getting signatures for '%s'") % storePath);
|
//Activity act(*logger, lvlInfo, "getting signatures for '%s'", storePath);
|
||||||
|
|
||||||
checkInterrupt();
|
checkInterrupt();
|
||||||
|
|
||||||
|
|
|
@ -157,13 +157,9 @@ int main(int argc, char ** argv)
|
||||||
|
|
||||||
uname(&_uname);
|
uname(&_uname);
|
||||||
|
|
||||||
auto cacheParentDir = (format("%1%/dependency-maps") % settings.nixStateDir).str();
|
auto cacheParentDir = fmt("%1%/dependency-maps", settings.nixStateDir);
|
||||||
|
|
||||||
cacheDir = (format("%1%/%2%-%3%-%4%")
|
cacheDir = fmt("%1%/%2%-%3%-%4%", cacheParentDir, _uname.machine, _uname.sysname, _uname.release);
|
||||||
% cacheParentDir
|
|
||||||
% _uname.machine
|
|
||||||
% _uname.sysname
|
|
||||||
% _uname.release).str();
|
|
||||||
|
|
||||||
mkdir(cacheParentDir.c_str(), 0755);
|
mkdir(cacheParentDir.c_str(), 0755);
|
||||||
mkdir(cacheDir.c_str(), 0755);
|
mkdir(cacheDir.c_str(), 0755);
|
||||||
|
|
Loading…
Reference in a new issue