summaryrefslogtreecommitdiff
path: root/src/buildtool/common/artifact.cpp
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2022-07-08 10:29:05 +0200
committerKlaus Aehlig <klaus.aehlig@huawei.com>2022-07-08 17:18:20 +0200
commitb9880e8ecdce02f047dfb1d19de5f1ed07a82ac6 (patch)
tree15590ac7a8ac0c5fbf052e47ae80c9382f88e489 /src/buildtool/common/artifact.cpp
parentbf159b19daf72627de01987cfbb12461705a5f22 (diff)
downloadjustbuild-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.cpp24
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())};
+}