forked from lix-project/lix
Further HashType renaming + using mkHashAlgoOptFlag for new conversion
https://github.com/NixOS/nix/issues/8876
This commit is contained in:
parent
5334c9c792
commit
837b889c41
|
@ -544,36 +544,36 @@ nlohmann::json Args::toJSON()
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hashTypeCompleter(AddCompletions & completions, size_t index, std::string_view prefix)
|
static void hashAlgoCompleter(AddCompletions & completions, size_t index, std::string_view prefix)
|
||||||
{
|
{
|
||||||
for (auto & type : hashAlgorithms)
|
for (auto & type : hashAlgorithms)
|
||||||
if (hasPrefix(type, prefix))
|
if (hasPrefix(type, prefix))
|
||||||
completions.add(type);
|
completions.add(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
Args::Flag Args::Flag::mkHashTypeFlag(std::string && longName, HashAlgorithm * ha)
|
Args::Flag Args::Flag::mkHashAlgoFlag(std::string && longName, HashAlgorithm * ha)
|
||||||
{
|
{
|
||||||
return Flag {
|
return Flag{
|
||||||
.longName = std::move(longName),
|
.longName = std::move(longName),
|
||||||
.description = "hash algorithm ('md5', 'sha1', 'sha256', or 'sha512')",
|
.description = "hash algorithm ('md5', 'sha1', 'sha256', or 'sha512')",
|
||||||
.labels = {"hash-algo"},
|
.labels = {"hash-algo"},
|
||||||
.handler = {[ha](std::string s) {
|
.handler = {[ha](std::string s) {
|
||||||
*ha = parseHashAlgo(s);
|
*ha = parseHashAlgo(s);
|
||||||
}},
|
}},
|
||||||
.completer = hashTypeCompleter,
|
.completer = hashAlgoCompleter,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
Args::Flag Args::Flag::mkHashTypeOptFlag(std::string && longName, std::optional<HashAlgorithm> * oha)
|
Args::Flag Args::Flag::mkHashAlgoOptFlag(std::string && longName, std::optional<HashAlgorithm> * oha)
|
||||||
{
|
{
|
||||||
return Flag {
|
return Flag{
|
||||||
.longName = std::move(longName),
|
.longName = std::move(longName),
|
||||||
.description = "hash algorithm ('md5', 'sha1', 'sha256', or 'sha512'). Optional as can also be gotten from SRI hash itself.",
|
.description = "hash algorithm ('md5', 'sha1', 'sha256', or 'sha512'). Optional as can also be gotten from SRI hash itself.",
|
||||||
.labels = {"hash-algo"},
|
.labels = {"hash-algo"},
|
||||||
.handler = {[oha](std::string s) {
|
.handler = {[oha](std::string s) {
|
||||||
*oha = std::optional<HashAlgorithm> {parseHashAlgo(s) };
|
*oha = std::optional<HashAlgorithm>{parseHashAlgo(s)};
|
||||||
}},
|
}},
|
||||||
.completer = hashTypeCompleter,
|
.completer = hashAlgoCompleter,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -175,8 +175,8 @@ protected:
|
||||||
|
|
||||||
std::optional<ExperimentalFeature> experimentalFeature;
|
std::optional<ExperimentalFeature> experimentalFeature;
|
||||||
|
|
||||||
static Flag mkHashTypeFlag(std::string && longName, HashAlgorithm * ha);
|
static Flag mkHashAlgoFlag(std::string && longName, HashAlgorithm * ha);
|
||||||
static Flag mkHashTypeOptFlag(std::string && longName, std::optional<HashAlgorithm> * oha);
|
static Flag mkHashAlgoOptFlag(std::string && longName, std::optional<HashAlgorithm> * oha);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -48,7 +48,7 @@ struct CmdHashBase : Command
|
||||||
.handler = {&hashFormat, HashFormat::Base16},
|
.handler = {&hashFormat, HashFormat::Base16},
|
||||||
});
|
});
|
||||||
|
|
||||||
addFlag(Flag::mkHashTypeFlag("type", &ha));
|
addFlag(Flag::mkHashAlgoFlag("type", &ha));
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
addFlag({
|
addFlag({
|
||||||
|
@ -112,7 +112,7 @@ struct CmdToBase : Command
|
||||||
|
|
||||||
CmdToBase(HashFormat hashFormat) : hashFormat(hashFormat)
|
CmdToBase(HashFormat hashFormat) : hashFormat(hashFormat)
|
||||||
{
|
{
|
||||||
addFlag(Flag::mkHashTypeOptFlag("type", &ht));
|
addFlag(Flag::mkHashAlgoOptFlag("type", &ht));
|
||||||
expectArgs("strings", &args);
|
expectArgs("strings", &args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ struct CmdHashConvert : Command
|
||||||
{
|
{
|
||||||
std::optional<HashFormat> from;
|
std::optional<HashFormat> from;
|
||||||
HashFormat to;
|
HashFormat to;
|
||||||
std::optional<HashAlgorithm> type;
|
std::optional<HashAlgorithm> algo;
|
||||||
std::vector<std::string> hashStrings;
|
std::vector<std::string> hashStrings;
|
||||||
|
|
||||||
CmdHashConvert(): to(HashFormat::SRI) {
|
CmdHashConvert(): to(HashFormat::SRI) {
|
||||||
|
@ -161,14 +161,7 @@ struct CmdHashConvert : Command
|
||||||
to = parseHashFormat(str);
|
to = parseHashFormat(str);
|
||||||
}},
|
}},
|
||||||
});
|
});
|
||||||
addFlag({
|
addFlag(Args::Flag::mkHashAlgoOptFlag("algo", &algo));
|
||||||
.longName = "algo",
|
|
||||||
.description = "Specify the algorithm if it can't be auto-detected.",
|
|
||||||
.labels = {"hash algorithm"},
|
|
||||||
.handler = {[this](std::string str) {
|
|
||||||
type = parseHashAlgo(str);
|
|
||||||
}},
|
|
||||||
});
|
|
||||||
expectArgs({
|
expectArgs({
|
||||||
.label = "hashes",
|
.label = "hashes",
|
||||||
.handler = {&hashStrings},
|
.handler = {&hashStrings},
|
||||||
|
@ -184,7 +177,7 @@ struct CmdHashConvert : Command
|
||||||
|
|
||||||
void run() override {
|
void run() override {
|
||||||
for (const auto& s: hashStrings) {
|
for (const auto& s: hashStrings) {
|
||||||
Hash h = Hash::parseAny(s, type);
|
Hash h = Hash::parseAny(s, algo);
|
||||||
if (from && h.to_string(*from, from == HashFormat::SRI) != s) {
|
if (from && h.to_string(*from, from == HashFormat::SRI) != s) {
|
||||||
auto from_as_string = printHashFormat(*from);
|
auto from_as_string = printHashFormat(*from);
|
||||||
throw BadHash("input hash '%s' does not have the expected format '--from %s'", s, from_as_string);
|
throw BadHash("input hash '%s' does not have the expected format '--from %s'", s, from_as_string);
|
||||||
|
|
|
@ -279,7 +279,7 @@ struct CmdStorePrefetchFile : StoreCommand, MixJSON
|
||||||
}}
|
}}
|
||||||
});
|
});
|
||||||
|
|
||||||
addFlag(Flag::mkHashTypeFlag("hash-type", &hashAlgo));
|
addFlag(Flag::mkHashAlgoFlag("hash-type", &hashAlgo));
|
||||||
|
|
||||||
addFlag({
|
addFlag({
|
||||||
.longName = "executable",
|
.longName = "executable",
|
||||||
|
|
Loading…
Reference in a new issue