forked from lix-project/lix
Factor the prefix splitting in content-address
This commit is contained in:
parent
7ba0fae0dd
commit
77b51f4598
|
@ -1,5 +1,6 @@
|
|||
#include "args.hh"
|
||||
#include "content-address.hh"
|
||||
#include "parser.hh"
|
||||
|
||||
namespace nix {
|
||||
|
||||
|
@ -43,23 +44,19 @@ std::string renderContentAddress(ContentAddress ca) {
|
|||
ContentAddress parseContentAddress(std::string_view rawCa) {
|
||||
auto rest = rawCa;
|
||||
|
||||
// Ensure prefix
|
||||
const auto prefixSeparator = rawCa.find(':');
|
||||
if (prefixSeparator == string::npos)
|
||||
std::string_view prefix;
|
||||
{
|
||||
auto optPrefix = splitPrefix(rest, ':');
|
||||
if (!optPrefix)
|
||||
throw UsageError("not a content address because it is not in the form \"<prefix>:<rest>\": %s", rawCa);
|
||||
auto prefix = rest.substr(0, prefixSeparator);
|
||||
rest = rest.substr(prefixSeparator + 1);
|
||||
prefix = *optPrefix;
|
||||
}
|
||||
|
||||
auto parseHashType_ = [&](){
|
||||
// Parse hash type
|
||||
auto algoSeparator = rest.find(':');
|
||||
HashType hashType;
|
||||
if (algoSeparator == string::npos)
|
||||
throw UsageError("content address hash must be in form \"<algo>:<hash>\", but found: %s", rest);
|
||||
hashType = parseHashType(rest.substr(0, algoSeparator));
|
||||
|
||||
rest = rest.substr(algoSeparator + 1);
|
||||
|
||||
auto hashTypeRaw = splitPrefix(rest, ':');
|
||||
if (!hashTypeRaw)
|
||||
throw UsageError("content address hash must be in form \"<algo>:<hash>\", but found: %s", rawCa);
|
||||
HashType hashType = parseHashType(*hashTypeRaw);
|
||||
return std::move(hashType);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue