Deduplicate parsing and reading derivations
This commit is contained in:
parent
bcd0629c2e
commit
581183d4d5
1 changed files with 16 additions and 38 deletions
|
@ -139,18 +139,14 @@ static StringSet parseStrings(std::istream & str, bool arePaths)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static DerivationOutput parseDerivationOutput(const Store & store, std::istringstream & str)
|
static DerivationOutput parseDerivationOutput(const Store & store,
|
||||||
|
StorePath path, std::string_view hashAlgo, std::string_view hash)
|
||||||
{
|
{
|
||||||
expect(str, ","); auto path = store.parseStorePath(parsePath(str));
|
|
||||||
expect(str, ","); auto hashAlgo = parseString(str);
|
|
||||||
expect(str, ","); const auto hash = parseString(str);
|
|
||||||
expect(str, ")");
|
|
||||||
|
|
||||||
if (hashAlgo != "") {
|
if (hashAlgo != "") {
|
||||||
auto method = FileIngestionMethod::Flat;
|
auto method = FileIngestionMethod::Flat;
|
||||||
if (string(hashAlgo, 0, 2) == "r:") {
|
if (string(hashAlgo, 0, 2) == "r:") {
|
||||||
method = FileIngestionMethod::Recursive;
|
method = FileIngestionMethod::Recursive;
|
||||||
hashAlgo = string(hashAlgo, 2);
|
hashAlgo = hashAlgo.substr(2);
|
||||||
}
|
}
|
||||||
const HashType hashType = parseHashType(hashAlgo);
|
const HashType hashType = parseHashType(hashAlgo);
|
||||||
|
|
||||||
|
@ -178,6 +174,16 @@ static DerivationOutput parseDerivationOutput(const Store & store, std::istrings
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DerivationOutput parseDerivationOutput(const Store & store, std::istringstream & str)
|
||||||
|
{
|
||||||
|
expect(str, ","); auto path = store.parseStorePath(parsePath(str));
|
||||||
|
expect(str, ","); const auto hashAlgo = parseString(str);
|
||||||
|
expect(str, ","); const auto hash = parseString(str);
|
||||||
|
expect(str, ")");
|
||||||
|
|
||||||
|
return parseDerivationOutput(store, std::move(path), hashAlgo, hash);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Derivation parseDerivation(const Store & store, std::string && s, std::string_view name)
|
static Derivation parseDerivation(const Store & store, std::string && s, std::string_view name)
|
||||||
{
|
{
|
||||||
|
@ -541,38 +547,10 @@ StorePathSet BasicDerivation::outputPaths(const Store & store) const
|
||||||
static DerivationOutput readDerivationOutput(Source & in, const Store & store)
|
static DerivationOutput readDerivationOutput(Source & in, const Store & store)
|
||||||
{
|
{
|
||||||
auto path = store.parseStorePath(readString(in));
|
auto path = store.parseStorePath(readString(in));
|
||||||
auto hashAlgo = readString(in);
|
const auto hashAlgo = readString(in);
|
||||||
auto hash = readString(in);
|
const auto hash = readString(in);
|
||||||
|
|
||||||
if (hashAlgo != "") {
|
return parseDerivationOutput(store, std::move(path), hashAlgo, hash);
|
||||||
auto method = FileIngestionMethod::Flat;
|
|
||||||
if (string(hashAlgo, 0, 2) == "r:") {
|
|
||||||
method = FileIngestionMethod::Recursive;
|
|
||||||
hashAlgo = string(hashAlgo, 2);
|
|
||||||
}
|
|
||||||
auto hashType = parseHashType(hashAlgo);
|
|
||||||
return hash != ""
|
|
||||||
? DerivationOutput {
|
|
||||||
.output = DerivationOutputCAFixed {
|
|
||||||
.hash = FixedOutputHash {
|
|
||||||
.method = std::move(method),
|
|
||||||
.hash = Hash::parseNonSRIUnprefixed(hash, hashType),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
: (settings.requireExperimentalFeature("ca-derivations"),
|
|
||||||
DerivationOutput {
|
|
||||||
.output = DerivationOutputCAFloating {
|
|
||||||
.method = std::move(method),
|
|
||||||
.hashType = std::move(hashType),
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else
|
|
||||||
return DerivationOutput {
|
|
||||||
.output = DerivationOutputInputAddressed {
|
|
||||||
.path = std::move(path),
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
StringSet BasicDerivation::outputNames() const
|
StringSet BasicDerivation::outputNames() const
|
||||||
|
|
Loading…
Reference in a new issue