Move StorePathWithOutputs
into its own header/file
In the following commits it will become less prevalent.
This commit is contained in:
parent
f7d9f7c338
commit
7a2b566dc8
8 changed files with 55 additions and 40 deletions
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "path.hh"
|
#include "path.hh"
|
||||||
|
#include "path-with-outputs.hh"
|
||||||
#include "buildable.hh"
|
#include "buildable.hh"
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "flake/flake.hh"
|
#include "flake/flake.hh"
|
||||||
|
|
|
@ -590,14 +590,6 @@ std::map<std::string, Hash> staticOutputHashes(Store& store, const Derivation& d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string StorePathWithOutputs::to_string(const Store & store) const
|
|
||||||
{
|
|
||||||
return outputs.empty()
|
|
||||||
? store.printStorePath(path)
|
|
||||||
: store.printStorePath(path) + "!" + concatStringsSep(",", outputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool wantOutput(const string & output, const std::set<string> & wanted)
|
bool wantOutput(const string & output, const std::set<string> & wanted)
|
||||||
{
|
{
|
||||||
return wanted.empty() || wanted.find(output) != wanted.end();
|
return wanted.empty() || wanted.find(output) != wanted.end();
|
||||||
|
|
36
src/libstore/path-with-outputs.cc
Normal file
36
src/libstore/path-with-outputs.cc
Normal file
|
@ -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) };
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
17
src/libstore/path-with-outputs.hh
Normal file
17
src/libstore/path-with-outputs.hh
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "path.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
struct StorePathWithOutputs
|
||||||
|
{
|
||||||
|
StorePath path;
|
||||||
|
std::set<std::string> outputs;
|
||||||
|
|
||||||
|
std::string to_string(const Store & store) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::pair<std::string_view, StringSet> parsePathWithOutputs(std::string_view s);
|
||||||
|
|
||||||
|
}
|
|
@ -82,19 +82,4 @@ PathSet Store::printStorePathSet(const StorePathSet & paths) const
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,16 +69,6 @@ typedef std::map<StorePath, std::optional<ContentAddress>> StorePathCAMap;
|
||||||
/* Extension of derivations in the Nix store. */
|
/* Extension of derivations in the Nix store. */
|
||||||
const std::string drvExtension = ".drv";
|
const std::string drvExtension = ".drv";
|
||||||
|
|
||||||
struct StorePathWithOutputs
|
|
||||||
{
|
|
||||||
StorePath path;
|
|
||||||
std::set<std::string> outputs;
|
|
||||||
|
|
||||||
std::string to_string(const Store & store) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
std::pair<std::string_view, StringSet> parsePathWithOutputs(std::string_view s);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
|
|
|
@ -53,13 +53,6 @@ StorePath Store::followLinksToStorePath(std::string_view path) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
StorePathWithOutputs Store::followLinksToStorePathWithOutputs(std::string_view path) const
|
|
||||||
{
|
|
||||||
auto [path2, outputs] = nix::parsePathWithOutputs(path);
|
|
||||||
return StorePathWithOutputs { followLinksToStorePath(path2), std::move(outputs) };
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Store paths have the following form:
|
/* Store paths have the following form:
|
||||||
|
|
||||||
<realized-path> = <store>/<h>-<name>
|
<realized-path> = <store>/<h>-<name>
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "realisation.hh"
|
#include "realisation.hh"
|
||||||
#include "path.hh"
|
#include "path.hh"
|
||||||
|
#include "path-with-outputs.hh"
|
||||||
#include "hash.hh"
|
#include "hash.hh"
|
||||||
#include "content-address.hh"
|
#include "content-address.hh"
|
||||||
#include "serialise.hh"
|
#include "serialise.hh"
|
||||||
|
|
Loading…
Reference in a new issue