Remove FormatOrString and remaining uses of format()

This commit is contained in:
Eelco Dolstra 2023-03-02 15:44:19 +01:00
parent b9370fd7a0
commit 29abc8e764
40 changed files with 102 additions and 125 deletions

View file

@ -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";
} }

View file

@ -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) {

View file

@ -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;

View file

@ -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 {

View file

@ -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:

View file

@ -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");

View file

@ -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

View file

@ -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);

View file

@ -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);
} }
} }

View file

@ -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()
{ {

View file

@ -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();

View file

@ -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);
} }

View file

@ -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);

View file

@ -183,7 +183,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)) {
@ -207,7 +207,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")

View file

@ -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);

View file

@ -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;

View file

@ -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);

View file

@ -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();

View file

@ -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);
} }

View file

@ -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;

View file

@ -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();

View file

@ -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";

View file

@ -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

View file

@ -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,

View file

@ -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)
{ {

View file

@ -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);
} }

View file

@ -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;

View file

@ -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));

View file

@ -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;

View file

@ -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());

View file

@ -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());
} }
} }

View file

@ -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

View file

@ -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;

View file

@ -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)" : "");
} }
} }

View file

@ -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);
} }

View file

@ -457,7 +457,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. */

View file

@ -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;

View file

@ -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";
} }

View file

@ -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();

View file

@ -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);