diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2021-03-02 00:47:00 +0000 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2021-04-05 08:31:37 -0400 |
commit | 7a2b566dc8f0f94fdd6acbce90e47cd967f9f134 (patch) | |
tree | ebad2aae171ef7f10beca31e919301bb81ec2a69 /src/libstore/path-with-outputs.cc | |
parent | f7d9f7c3381acef38e4db2bb2f9e0287c289be54 (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.cc | 36 |
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) }; +} + +} |