mirror of
https://github.com/NixOS/nix
synced 2025-06-29 23:13:14 +02:00
Use enum struct
and drop prefixes
This does a few enums; the rest will be gotten in subsequent commits.
This commit is contained in:
parent
eb1911e277
commit
87b32bab05
57 changed files with 382 additions and 354 deletions
|
@ -164,7 +164,7 @@ Args::FlagMaker & Args::FlagMaker::mkHashTypeFlag(HashType * ht)
|
|||
description("hash algorithm ('md5', 'sha1', 'sha256', or 'sha512')");
|
||||
handler([ht](std::string s) {
|
||||
*ht = parseHashType(s);
|
||||
if (*ht == htUnknown)
|
||||
if (*ht == HashType::Unknown)
|
||||
throw UsageError("unknown hash type '%1%'", s);
|
||||
});
|
||||
return *this;
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace nix {
|
|||
|
||||
MakeError(UsageError, Error);
|
||||
|
||||
enum HashType : char;
|
||||
enum struct HashType : char;
|
||||
|
||||
class Args
|
||||
{
|
||||
|
|
|
@ -314,7 +314,7 @@ struct XzCompressionSink : CompressionSink
|
|||
ret = lzma_stream_encoder_mt(&strm, &mt_options);
|
||||
done = true;
|
||||
#else
|
||||
printMsg(lvlError, "warning: parallel XZ compression requested but not supported, falling back to single-threaded compression");
|
||||
printMsg(Verbosity::Error, "warning: parallel XZ compression requested but not supported, falling back to single-threaded compression");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -18,10 +18,10 @@ namespace nix {
|
|||
|
||||
void Hash::init()
|
||||
{
|
||||
if (type == htMD5) hashSize = md5HashSize;
|
||||
else if (type == htSHA1) hashSize = sha1HashSize;
|
||||
else if (type == htSHA256) hashSize = sha256HashSize;
|
||||
else if (type == htSHA512) hashSize = sha512HashSize;
|
||||
if (type == HashType::MD5) hashSize = md5HashSize;
|
||||
else if (type == HashType::SHA1) hashSize = sha1HashSize;
|
||||
else if (type == HashType::SHA256) hashSize = sha256HashSize;
|
||||
else if (type == HashType::SHA512) hashSize = sha512HashSize;
|
||||
else abort();
|
||||
assert(hashSize <= maxHashSize);
|
||||
memset(hash, 0, maxHashSize);
|
||||
|
@ -98,26 +98,26 @@ static string printHash32(const Hash & hash)
|
|||
|
||||
string printHash16or32(const Hash & hash)
|
||||
{
|
||||
return hash.to_string(hash.type == htMD5 ? Base16 : Base32, false);
|
||||
return hash.to_string(hash.type == HashType::MD5 ? Base::Base16 : Base::Base32, false);
|
||||
}
|
||||
|
||||
|
||||
std::string Hash::to_string(Base base, bool includeType) const
|
||||
{
|
||||
std::string s;
|
||||
if (base == SRI || includeType) {
|
||||
if (base == Base::SRI || includeType) {
|
||||
s += printHashType(type);
|
||||
s += base == SRI ? '-' : ':';
|
||||
s += base == Base::SRI ? '-' : ':';
|
||||
}
|
||||
switch (base) {
|
||||
case Base16:
|
||||
case Base::Base16:
|
||||
s += printHash16(*this);
|
||||
break;
|
||||
case Base32:
|
||||
case Base::Base32:
|
||||
s += printHash32(*this);
|
||||
break;
|
||||
case Base64:
|
||||
case SRI:
|
||||
case Base::Base64:
|
||||
case Base::SRI:
|
||||
s += base64Encode(std::string((const char *) hash, hashSize));
|
||||
break;
|
||||
}
|
||||
|
@ -136,16 +136,16 @@ Hash::Hash(const std::string & s, HashType type)
|
|||
sep = s.find('-');
|
||||
if (sep != string::npos) {
|
||||
isSRI = true;
|
||||
} else if (type == htUnknown)
|
||||
} else if (type == HashType::Unknown)
|
||||
throw BadHash("hash '%s' does not include a type", s);
|
||||
}
|
||||
|
||||
if (sep != string::npos) {
|
||||
string hts = string(s, 0, sep);
|
||||
this->type = parseHashType(hts);
|
||||
if (this->type == htUnknown)
|
||||
if (this->type == HashType::Unknown)
|
||||
throw BadHash("unknown hash type '%s'", hts);
|
||||
if (type != htUnknown && type != this->type)
|
||||
if (type != HashType::Unknown && type != this->type)
|
||||
throw BadHash("hash '%s' should have type '%s'", s, printHashType(type));
|
||||
pos = sep + 1;
|
||||
}
|
||||
|
@ -217,29 +217,29 @@ union Ctx
|
|||
|
||||
static void start(HashType ht, Ctx & ctx)
|
||||
{
|
||||
if (ht == htMD5) MD5_Init(&ctx.md5);
|
||||
else if (ht == htSHA1) SHA1_Init(&ctx.sha1);
|
||||
else if (ht == htSHA256) SHA256_Init(&ctx.sha256);
|
||||
else if (ht == htSHA512) SHA512_Init(&ctx.sha512);
|
||||
if (ht == HashType::MD5) MD5_Init(&ctx.md5);
|
||||
else if (ht == HashType::SHA1) SHA1_Init(&ctx.sha1);
|
||||
else if (ht == HashType::SHA256) SHA256_Init(&ctx.sha256);
|
||||
else if (ht == HashType::SHA512) SHA512_Init(&ctx.sha512);
|
||||
}
|
||||
|
||||
|
||||
static void update(HashType ht, Ctx & ctx,
|
||||
const unsigned char * bytes, size_t len)
|
||||
{
|
||||
if (ht == htMD5) MD5_Update(&ctx.md5, bytes, len);
|
||||
else if (ht == htSHA1) SHA1_Update(&ctx.sha1, bytes, len);
|
||||
else if (ht == htSHA256) SHA256_Update(&ctx.sha256, bytes, len);
|
||||
else if (ht == htSHA512) SHA512_Update(&ctx.sha512, bytes, len);
|
||||
if (ht == HashType::MD5) MD5_Update(&ctx.md5, bytes, len);
|
||||
else if (ht == HashType::SHA1) SHA1_Update(&ctx.sha1, bytes, len);
|
||||
else if (ht == HashType::SHA256) SHA256_Update(&ctx.sha256, bytes, len);
|
||||
else if (ht == HashType::SHA512) SHA512_Update(&ctx.sha512, bytes, len);
|
||||
}
|
||||
|
||||
|
||||
static void finish(HashType ht, Ctx & ctx, unsigned char * hash)
|
||||
{
|
||||
if (ht == htMD5) MD5_Final(hash, &ctx.md5);
|
||||
else if (ht == htSHA1) SHA1_Final(hash, &ctx.sha1);
|
||||
else if (ht == htSHA256) SHA256_Final(hash, &ctx.sha256);
|
||||
else if (ht == htSHA512) SHA512_Final(hash, &ctx.sha512);
|
||||
if (ht == HashType::MD5) MD5_Final(hash, &ctx.md5);
|
||||
else if (ht == HashType::SHA1) SHA1_Final(hash, &ctx.sha1);
|
||||
else if (ht == HashType::SHA256) SHA256_Final(hash, &ctx.sha256);
|
||||
else if (ht == HashType::SHA512) SHA512_Final(hash, &ctx.sha512);
|
||||
}
|
||||
|
||||
|
||||
|
@ -320,20 +320,20 @@ Hash compressHash(const Hash & hash, unsigned int newSize)
|
|||
|
||||
HashType parseHashType(const string & s)
|
||||
{
|
||||
if (s == "md5") return htMD5;
|
||||
else if (s == "sha1") return htSHA1;
|
||||
else if (s == "sha256") return htSHA256;
|
||||
else if (s == "sha512") return htSHA512;
|
||||
else return htUnknown;
|
||||
if (s == "md5") return HashType::MD5;
|
||||
else if (s == "sha1") return HashType::SHA1;
|
||||
else if (s == "sha256") return HashType::SHA256;
|
||||
else if (s == "sha512") return HashType::SHA512;
|
||||
else return HashType::Unknown;
|
||||
}
|
||||
|
||||
|
||||
string printHashType(HashType ht)
|
||||
{
|
||||
if (ht == htMD5) return "md5";
|
||||
else if (ht == htSHA1) return "sha1";
|
||||
else if (ht == htSHA256) return "sha256";
|
||||
else if (ht == htSHA512) return "sha512";
|
||||
if (ht == HashType::MD5) return "md5";
|
||||
else if (ht == HashType::SHA1) return "sha1";
|
||||
else if (ht == HashType::SHA256) return "sha256";
|
||||
else if (ht == HashType::SHA512) return "sha512";
|
||||
else abort();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,13 @@ namespace nix {
|
|||
MakeError(BadHash, Error);
|
||||
|
||||
|
||||
enum HashType : char { htUnknown, htMD5, htSHA1, htSHA256, htSHA512 };
|
||||
enum struct HashType : char {
|
||||
Unknown,
|
||||
MD5,
|
||||
SHA1,
|
||||
SHA256,
|
||||
SHA512,
|
||||
};
|
||||
|
||||
|
||||
const int md5HashSize = 16;
|
||||
|
@ -20,7 +26,12 @@ const int sha512HashSize = 64;
|
|||
|
||||
extern const string base32Chars;
|
||||
|
||||
enum Base : int { Base64, Base32, Base16, SRI };
|
||||
enum struct Base : int {
|
||||
Base64,
|
||||
Base32,
|
||||
Base16,
|
||||
SRI,
|
||||
};
|
||||
|
||||
|
||||
struct Hash
|
||||
|
@ -29,7 +40,7 @@ struct Hash
|
|||
unsigned int hashSize = 0;
|
||||
unsigned char hash[maxHashSize] = {};
|
||||
|
||||
HashType type = htUnknown;
|
||||
HashType type = HashType::Unknown;
|
||||
|
||||
/* Create an unset hash object. */
|
||||
Hash() { };
|
||||
|
@ -40,14 +51,14 @@ struct Hash
|
|||
/* Initialize the hash from a string representation, in the format
|
||||
"[<type>:]<base16|base32|base64>" or "<type>-<base64>" (a
|
||||
Subresource Integrity hash expression). If the 'type' argument
|
||||
is htUnknown, then the hash type must be specified in the
|
||||
is HashType::Unknown, then the hash type must be specified in the
|
||||
string. */
|
||||
Hash(const std::string & s, HashType type = htUnknown);
|
||||
Hash(const std::string & s, HashType type = HashType::Unknown);
|
||||
|
||||
void init();
|
||||
|
||||
/* Check whether a hash is set. */
|
||||
operator bool () const { return type != htUnknown; }
|
||||
operator bool () const { return type != HashType::Unknown; }
|
||||
|
||||
/* Check whether two hash are equal. */
|
||||
bool operator == (const Hash & h2) const;
|
||||
|
@ -79,18 +90,18 @@ struct Hash
|
|||
/* Return a string representation of the hash, in base-16, base-32
|
||||
or base-64. By default, this is prefixed by the hash type
|
||||
(e.g. "sha256:"). */
|
||||
std::string to_string(Base base = Base32, bool includeType = true) const;
|
||||
std::string to_string(Base base = Base::Base32, bool includeType = true) const;
|
||||
|
||||
std::string gitRev() const
|
||||
{
|
||||
assert(type == htSHA1);
|
||||
return to_string(Base16, false);
|
||||
assert(type == HashType::SHA1);
|
||||
return to_string(Base::Base16, false);
|
||||
}
|
||||
|
||||
std::string gitShortRev() const
|
||||
{
|
||||
assert(type == htSHA1);
|
||||
return std::string(to_string(Base16, false), 0, 7);
|
||||
assert(type == HashType::SHA1);
|
||||
return std::string(to_string(Base::Base16, false), 0, 7);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ Logger * logger = makeDefaultLogger();
|
|||
|
||||
void Logger::warn(const std::string & msg)
|
||||
{
|
||||
log(lvlWarn, ANSI_YELLOW "warning:" ANSI_NORMAL " " + msg);
|
||||
log(Verbosity::Warn, ANSI_YELLOW "warning:" ANSI_NORMAL " " + msg);
|
||||
}
|
||||
|
||||
class SimpleLogger : public Logger
|
||||
|
@ -45,10 +45,10 @@ public:
|
|||
if (systemd) {
|
||||
char c;
|
||||
switch (lvl) {
|
||||
case lvlError: c = '3'; break;
|
||||
case lvlWarn: c = '4'; break;
|
||||
case lvlInfo: c = '5'; break;
|
||||
case lvlTalkative: case lvlChatty: c = '6'; break;
|
||||
case Verbosity::Error: c = '3'; break;
|
||||
case Verbosity::Warn: c = '4'; break;
|
||||
case Verbosity::Info: c = '5'; break;
|
||||
case Verbosity::Talkative: case Verbosity::Chatty: c = '6'; break;
|
||||
default: c = '7';
|
||||
}
|
||||
prefix = std::string("<") + c + ">";
|
||||
|
@ -66,7 +66,7 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
Verbosity verbosity = lvlInfo;
|
||||
Verbosity verbosity = Verbosity::Info;
|
||||
|
||||
void warnOnce(bool & haveWarned, const FormatOrString & fs)
|
||||
{
|
||||
|
@ -123,7 +123,7 @@ struct JSONLogger : Logger
|
|||
|
||||
void write(const nlohmann::json & json)
|
||||
{
|
||||
prevLogger.log(lvlError, "@nix " + json.dump());
|
||||
prevLogger.log(Verbosity::Error, "@nix " + json.dump());
|
||||
}
|
||||
|
||||
void log(Verbosity lvl, const FormatOrString & fs) override
|
||||
|
@ -198,7 +198,7 @@ bool handleJSONLogMessage(const std::string & msg,
|
|||
|
||||
if (action == "start") {
|
||||
auto type = (ActivityType) json["type"];
|
||||
if (trusted || type == actDownload)
|
||||
if (trusted || type == ActivityType::Download)
|
||||
activities.emplace(std::piecewise_construct,
|
||||
std::forward_as_tuple(json["id"]),
|
||||
std::forward_as_tuple(*logger, (Verbosity) json["level"], type,
|
||||
|
@ -216,7 +216,7 @@ bool handleJSONLogMessage(const std::string & msg,
|
|||
|
||||
else if (action == "setPhase") {
|
||||
std::string phase = json["phase"];
|
||||
act.result(resSetPhase, phase);
|
||||
act.result(ResultType::SetPhase, phase);
|
||||
}
|
||||
|
||||
else if (action == "msg") {
|
||||
|
|
|
@ -4,41 +4,41 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
typedef enum {
|
||||
lvlError = 0,
|
||||
lvlWarn,
|
||||
lvlInfo,
|
||||
lvlTalkative,
|
||||
lvlChatty,
|
||||
lvlDebug,
|
||||
lvlVomit
|
||||
} Verbosity;
|
||||
enum struct Verbosity : uint64_t {
|
||||
Error = 0,
|
||||
Warn,
|
||||
Info,
|
||||
Talkative,
|
||||
Chatty,
|
||||
Debug,
|
||||
Vomit,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
actUnknown = 0,
|
||||
actCopyPath = 100,
|
||||
actDownload = 101,
|
||||
actRealise = 102,
|
||||
actCopyPaths = 103,
|
||||
actBuilds = 104,
|
||||
actBuild = 105,
|
||||
actOptimiseStore = 106,
|
||||
actVerifyPaths = 107,
|
||||
actSubstitute = 108,
|
||||
actQueryPathInfo = 109,
|
||||
actPostBuildHook = 110,
|
||||
} ActivityType;
|
||||
enum struct ActivityType : uint64_t {
|
||||
Unknown = 0,
|
||||
CopyPath = 100,
|
||||
Download = 101,
|
||||
Realise = 102,
|
||||
CopyPaths = 103,
|
||||
Builds = 104,
|
||||
Build = 105,
|
||||
OptimiseStore = 106,
|
||||
VerifyPaths = 107,
|
||||
Substitute = 108,
|
||||
QueryPathInfo = 109,
|
||||
PostBuildHook = 110,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
resFileLinked = 100,
|
||||
resBuildLogLine = 101,
|
||||
resUntrustedPath = 102,
|
||||
resCorruptedPath = 103,
|
||||
resSetPhase = 104,
|
||||
resProgress = 105,
|
||||
resSetExpected = 106,
|
||||
resPostBuildLogLine = 107,
|
||||
} ResultType;
|
||||
enum struct ResultType : uint64_t {
|
||||
FileLinked = 100,
|
||||
BuildLogLine = 101,
|
||||
UntrustedPath = 102,
|
||||
CorruptedPath = 103,
|
||||
SetPhase = 104,
|
||||
Progress = 105,
|
||||
SetExpected = 106,
|
||||
PostBuildLogLine = 107,
|
||||
};
|
||||
|
||||
typedef uint64_t ActivityId;
|
||||
|
||||
|
@ -67,7 +67,7 @@ public:
|
|||
|
||||
void log(const FormatOrString & fs)
|
||||
{
|
||||
log(lvlInfo, fs);
|
||||
log(Verbosity::Info, fs);
|
||||
}
|
||||
|
||||
virtual void warn(const std::string & msg);
|
||||
|
@ -94,17 +94,17 @@ struct Activity
|
|||
|
||||
Activity(Logger & logger, ActivityType type,
|
||||
const Logger::Fields & fields = {}, ActivityId parent = getCurActivity())
|
||||
: Activity(logger, lvlError, type, "", fields, parent) { };
|
||||
: Activity(logger, Verbosity::Error, type, "", fields, parent) { };
|
||||
|
||||
Activity(const Activity & act) = delete;
|
||||
|
||||
~Activity();
|
||||
|
||||
void progress(uint64_t done = 0, uint64_t expected = 0, uint64_t running = 0, uint64_t failed = 0) const
|
||||
{ result(resProgress, done, expected, running, failed); }
|
||||
{ result(ResultType::Progress, done, expected, running, failed); }
|
||||
|
||||
void setExpected(ActivityType type2, uint64_t expected) const
|
||||
{ result(resSetExpected, type2, expected); }
|
||||
{ result(ResultType::SetExpected, (uint64_t)type2, expected); }
|
||||
|
||||
template<typename... Args>
|
||||
void result(ResultType type, const Args & ... args) const
|
||||
|
@ -151,11 +151,11 @@ extern Verbosity verbosity; /* suppress msgs > this */
|
|||
} \
|
||||
} while (0)
|
||||
|
||||
#define printError(args...) printMsg(lvlError, args)
|
||||
#define printInfo(args...) printMsg(lvlInfo, args)
|
||||
#define printTalkative(args...) printMsg(lvlTalkative, args)
|
||||
#define debug(args...) printMsg(lvlDebug, args)
|
||||
#define vomit(args...) printMsg(lvlVomit, args)
|
||||
#define printError(args...) printMsg(Verbosity::Error, args)
|
||||
#define printInfo(args...) printMsg(Verbosity::Info, args)
|
||||
#define printTalkative(args...) printMsg(Verbosity::Talkative, args)
|
||||
#define debug(args...) printMsg(Verbosity::Debug, args)
|
||||
#define vomit(args...) printMsg(Verbosity::Vomit, args)
|
||||
|
||||
template<typename... Args>
|
||||
inline void warn(const std::string & fs, const Args & ... args)
|
||||
|
|
|
@ -430,7 +430,7 @@ void deletePath(const Path & path)
|
|||
|
||||
void deletePath(const Path & path, unsigned long long & bytesFreed)
|
||||
{
|
||||
//Activity act(*logger, lvlDebug, format("recursively deleting path '%1%'") % path);
|
||||
//Activity act(*logger, Verbosity::Debug, format("recursively deleting path '%1%'") % path);
|
||||
bytesFreed = 0;
|
||||
_deletePath(path, bytesFreed);
|
||||
}
|
||||
|
@ -1410,7 +1410,7 @@ string base64Decode(const string & s)
|
|||
|
||||
char digit = decode[(unsigned char) c];
|
||||
if (digit == -1)
|
||||
throw Error("invalid character in Base64 string");
|
||||
throw Error("invalid character in Base::Base64 string");
|
||||
|
||||
bits += 6;
|
||||
d = d << 6 | digit;
|
||||
|
|
|
@ -468,7 +468,7 @@ std::string filterANSIEscapes(const std::string & s,
|
|||
unsigned int width = std::numeric_limits<unsigned int>::max());
|
||||
|
||||
|
||||
/* Base64 encoding/decoding. */
|
||||
/* Base::Base64 encoding/decoding. */
|
||||
string base64Encode(const string & s);
|
||||
string base64Decode(const string & s);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue