diff options
author | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-07-08 10:29:05 +0200 |
---|---|---|
committer | Klaus Aehlig <klaus.aehlig@huawei.com> | 2022-07-08 17:18:20 +0200 |
commit | b9880e8ecdce02f047dfb1d19de5f1ed07a82ac6 (patch) | |
tree | 15590ac7a8ac0c5fbf052e47ae80c9382f88e489 /src/buildtool/common/artifact.cpp | |
parent | bf159b19daf72627de01987cfbb12461705a5f22 (diff) | |
download | justbuild-b9880e8ecdce02f047dfb1d19de5f1ed07a82ac6.tar.gz |
In install-cas be more liberal in parsing artifact identifiers
Diffstat (limited to 'src/buildtool/common/artifact.cpp')
-rw-r--r-- | src/buildtool/common/artifact.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/buildtool/common/artifact.cpp b/src/buildtool/common/artifact.cpp new file mode 100644 index 00000000..fc3c5b6e --- /dev/null +++ b/src/buildtool/common/artifact.cpp @@ -0,0 +1,24 @@ +#include "src/buildtool/common/artifact.hpp" + +#include <string> + +auto Artifact::ObjectInfo::LiberalFromString(std::string const& s) noexcept + -> Artifact::ObjectInfo { + std::istringstream iss(s); + std::string id{}; + std::string size_str{"0"}; + std::string type{"f"}; + if (iss.peek() == '[') { + (void)iss.get(); + } + std::getline(iss, id, ':'); + if (not iss.eof()) { + std::getline(iss, size_str, ':'); + } + if (not iss.eof()) { + std::getline(iss, type, ']'); + } + auto size = static_cast<std::size_t>(std::atol(size_str.c_str())); + return Artifact::ObjectInfo{ArtifactDigest{id, size}, + FromChar(*type.c_str())}; +} |