forked from lix-project/lix
Cleanups to content address types
This commit is contained in:
parent
d3c125e5a8
commit
753fc1661d
|
@ -21,7 +21,8 @@ std::string makeFileIngestionPrefix(FileIngestionMethod m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ContentAddressMethod::renderPrefix() const {
|
std::string ContentAddressMethod::renderPrefix() const
|
||||||
|
{
|
||||||
return std::visit(overloaded {
|
return std::visit(overloaded {
|
||||||
[](TextIngestionMethod) -> std::string { return "text:"; },
|
[](TextIngestionMethod) -> std::string { return "text:"; },
|
||||||
[](FileIngestionMethod m2) {
|
[](FileIngestionMethod m2) {
|
||||||
|
@ -113,7 +114,8 @@ static std::pair<ContentAddressMethod, HashType> parseContentAddressMethodPrefix
|
||||||
throw UsageError("content address prefix '%s' is unrecognized. Recogonized prefixes are 'text' or 'fixed'", prefix);
|
throw UsageError("content address prefix '%s' is unrecognized. Recogonized prefixes are 'text' or 'fixed'", prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentAddress ContentAddress::parse(std::string_view rawCa) {
|
ContentAddress ContentAddress::parse(std::string_view rawCa)
|
||||||
|
{
|
||||||
auto rest = rawCa;
|
auto rest = rawCa;
|
||||||
|
|
||||||
auto [caMethod, hashType_] = parseContentAddressMethodPrefix(rest);
|
auto [caMethod, hashType_] = parseContentAddressMethodPrefix(rest);
|
||||||
|
@ -155,7 +157,7 @@ std::string renderContentAddress(std::optional<ContentAddress> ca)
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentAddress ContentAddress::fromParts(
|
ContentAddress ContentAddress::fromParts(
|
||||||
ContentAddressMethod method, Hash hash)
|
ContentAddressMethod method, Hash hash) noexcept
|
||||||
{
|
{
|
||||||
return std::visit(overloaded {
|
return std::visit(overloaded {
|
||||||
[&](TextIngestionMethod _) -> ContentAddress {
|
[&](TextIngestionMethod _) -> ContentAddress {
|
||||||
|
@ -196,7 +198,8 @@ const Hash & ContentAddress::getHash() const
|
||||||
}, raw);
|
}, raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ContentAddress::printMethodAlgo() const {
|
std::string ContentAddress::printMethodAlgo() const
|
||||||
|
{
|
||||||
return getMethod().renderPrefix()
|
return getMethod().renderPrefix()
|
||||||
+ printHashType(getHash().type);
|
+ printHashType(getHash().type);
|
||||||
}
|
}
|
||||||
|
@ -211,7 +214,8 @@ size_t StoreReferences::size() const
|
||||||
return (self ? 1 : 0) + others.size();
|
return (self ? 1 : 0) + others.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentAddressWithReferences ContentAddressWithReferences::withoutRefs(const ContentAddress & ca) {
|
ContentAddressWithReferences ContentAddressWithReferences::withoutRefs(const ContentAddress & ca) noexcept
|
||||||
|
{
|
||||||
return std::visit(overloaded {
|
return std::visit(overloaded {
|
||||||
[&](const TextHash & h) -> ContentAddressWithReferences {
|
[&](const TextHash & h) -> ContentAddressWithReferences {
|
||||||
return TextInfo {
|
return TextInfo {
|
||||||
|
|
|
@ -81,17 +81,30 @@ struct ContentAddressMethod
|
||||||
* Parse the prefix tag which indicates how the files
|
* Parse the prefix tag which indicates how the files
|
||||||
* were ingested, with the fixed output case not prefixed for back
|
* were ingested, with the fixed output case not prefixed for back
|
||||||
* compat.
|
* compat.
|
||||||
|
*
|
||||||
|
* @param [in] m A string that should begin with the prefix.
|
||||||
|
* @param [out] m The remainder of the string after the prefix.
|
||||||
*/
|
*/
|
||||||
static ContentAddressMethod parsePrefix(std::string_view & m);
|
static ContentAddressMethod parsePrefix(std::string_view & m);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the prefix tag which indicates how the files wre ingested.
|
||||||
|
*
|
||||||
|
* The rough inverse of `parsePrefix()`.
|
||||||
|
*/
|
||||||
std::string renderPrefix() const;
|
std::string renderPrefix() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse and pretty print a content addressing method and hash type in a
|
* Parse a content addressing method and hash type.
|
||||||
* nicer way, prefixing both cases.
|
|
||||||
*/
|
*/
|
||||||
static std::pair<ContentAddressMethod, HashType> parse(std::string_view rawCaMethod);
|
static std::pair<ContentAddressMethod, HashType> parse(std::string_view rawCaMethod);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render a content addressing method and hash type in a
|
||||||
|
* nicer way, prefixing both cases.
|
||||||
|
*
|
||||||
|
* The rough inverse of `parse()`.
|
||||||
|
*/
|
||||||
std::string render(HashType ht) const;
|
std::string render(HashType ht) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -178,7 +191,7 @@ struct ContentAddress
|
||||||
* @param hash Hash of ingested file system data.
|
* @param hash Hash of ingested file system data.
|
||||||
*/
|
*/
|
||||||
static ContentAddress fromParts(
|
static ContentAddress fromParts(
|
||||||
ContentAddressMethod method, Hash hash);
|
ContentAddressMethod method, Hash hash) noexcept;
|
||||||
|
|
||||||
ContentAddressMethod getMethod() const;
|
ContentAddressMethod getMethod() const;
|
||||||
|
|
||||||
|
@ -187,6 +200,10 @@ struct ContentAddress
|
||||||
std::string printMethodAlgo() const;
|
std::string printMethodAlgo() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the `ContentAddress` if it exists to a string, return empty
|
||||||
|
* string otherwise.
|
||||||
|
*/
|
||||||
std::string renderContentAddress(std::optional<ContentAddress> ca);
|
std::string renderContentAddress(std::optional<ContentAddress> ca);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue