aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/path-with-outputs.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2021-03-02 00:47:00 +0000
committerJohn Ericson <John.Ericson@Obsidian.Systems>2021-04-05 08:31:37 -0400
commit7a2b566dc8f0f94fdd6acbce90e47cd967f9f134 (patch)
treeebad2aae171ef7f10beca31e919301bb81ec2a69 /src/libstore/path-with-outputs.cc
parentf7d9f7c3381acef38e4db2bb2f9e0287c289be54 (diff)
Move `StorePathWithOutputs` into its own header/file
In the following commits it will become less prevalent.
Diffstat (limited to 'src/libstore/path-with-outputs.cc')
-rw-r--r--src/libstore/path-with-outputs.cc36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libstore/path-with-outputs.cc b/src/libstore/path-with-outputs.cc
new file mode 100644
index 000000000..ba15df0a9
--- /dev/null
+++ b/src/libstore/path-with-outputs.cc
@@ -0,0 +1,36 @@
+#include "store-api.hh"
+
+namespace nix {
+
+std::string StorePathWithOutputs::to_string(const Store & store) const
+{
+ return outputs.empty()
+ ? store.printStorePath(path)
+ : store.printStorePath(path) + "!" + concatStringsSep(",", outputs);
+}
+
+
+std::pair<std::string_view, StringSet> parsePathWithOutputs(std::string_view s)
+{
+ size_t n = s.find("!");
+ return n == s.npos
+ ? std::make_pair(s, std::set<string>())
+ : std::make_pair(((std::string_view) s).substr(0, n),
+ tokenizeString<std::set<string>>(((std::string_view) s).substr(n + 1), ","));
+}
+
+
+StorePathWithOutputs Store::parsePathWithOutputs(const std::string & s)
+{
+ auto [path, outputs] = nix::parsePathWithOutputs(s);
+ return {parseStorePath(path), std::move(outputs)};
+}
+
+
+StorePathWithOutputs Store::followLinksToStorePathWithOutputs(std::string_view path) const
+{
+ auto [path2, outputs] = nix::parsePathWithOutputs(path);
+ return StorePathWithOutputs { followLinksToStorePath(path2), std::move(outputs) };
+}
+
+}