forked from lix-project/lix
Create new file-hash files
This commit is contained in:
parent
0cb67ecbd3
commit
0e9438b6d3
8 changed files with 64 additions and 52 deletions
|
@ -8,11 +8,6 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
std::string FileSystemHash::printMethodAlgo() const {
|
|
||||||
return makeFileIngestionPrefix(method) + printHashType(hash.type);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BasicDerivation::BasicDerivation(const BasicDerivation & other)
|
BasicDerivation::BasicDerivation(const BasicDerivation & other)
|
||||||
: platform(other.platform)
|
: platform(other.platform)
|
||||||
, builder(other.builder)
|
, builder(other.builder)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "path.hh"
|
#include "path.hh"
|
||||||
#include "types.hh"
|
#include "types.hh"
|
||||||
#include "hash.hh"
|
#include "hash.hh"
|
||||||
|
#include "file-hash.hh"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
@ -12,20 +13,6 @@ namespace nix {
|
||||||
|
|
||||||
/* Abstract syntax of derivations. */
|
/* Abstract syntax of derivations. */
|
||||||
|
|
||||||
/// Pair of a hash, and how the file system was ingested
|
|
||||||
struct FileSystemHash {
|
|
||||||
FileIngestionMethod method;
|
|
||||||
Hash hash;
|
|
||||||
FileSystemHash(FileIngestionMethod method, Hash hash)
|
|
||||||
: method(std::move(method))
|
|
||||||
, hash(std::move(hash))
|
|
||||||
{ }
|
|
||||||
FileSystemHash(const FileSystemHash &) = default;
|
|
||||||
FileSystemHash(FileSystemHash &&) = default;
|
|
||||||
FileSystemHash & operator = (const FileSystemHash &) = default;
|
|
||||||
std::string printMethodAlgo() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DerivationOutput
|
struct DerivationOutput
|
||||||
{
|
{
|
||||||
StorePath path;
|
StorePath path;
|
||||||
|
|
27
src/libstore/file-hash.cc
Normal file
27
src/libstore/file-hash.cc
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#include "file-hash.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
std::string FileSystemHash::printMethodAlgo() const {
|
||||||
|
return makeFileIngestionPrefix(method) + printHashType(hash.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string makeFileIngestionPrefix(const FileIngestionMethod m) {
|
||||||
|
switch (m) {
|
||||||
|
case FileIngestionMethod::Flat:
|
||||||
|
return "";
|
||||||
|
case FileIngestionMethod::Recursive:
|
||||||
|
return "r:";
|
||||||
|
default:
|
||||||
|
throw Error("impossible, caught both cases");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string makeFixedOutputCA(FileIngestionMethod method, const Hash & hash)
|
||||||
|
{
|
||||||
|
return "fixed:"
|
||||||
|
+ makeFileIngestionPrefix(method)
|
||||||
|
+ hash.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
34
src/libstore/file-hash.hh
Normal file
34
src/libstore/file-hash.hh
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "hash.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
enum struct FileIngestionMethod : uint8_t {
|
||||||
|
Flat = false,
|
||||||
|
Recursive = true
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Pair of a hash, and how the file system was ingested
|
||||||
|
struct FileSystemHash {
|
||||||
|
FileIngestionMethod method;
|
||||||
|
Hash hash;
|
||||||
|
FileSystemHash(FileIngestionMethod method, Hash hash)
|
||||||
|
: method(std::move(method))
|
||||||
|
, hash(std::move(hash))
|
||||||
|
{ }
|
||||||
|
FileSystemHash(const FileSystemHash &) = default;
|
||||||
|
FileSystemHash(FileSystemHash &&) = default;
|
||||||
|
FileSystemHash & operator = (const FileSystemHash &) = default;
|
||||||
|
std::string printMethodAlgo() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Compute the prefix to the hash algorithm which indicates how the files were
|
||||||
|
ingested. */
|
||||||
|
std::string makeFileIngestionPrefix(const FileIngestionMethod m);
|
||||||
|
|
||||||
|
/* Compute the content-addressability assertion (ValidPathInfo::ca)
|
||||||
|
for paths created by makeFixedOutputPath() / addToStore(). */
|
||||||
|
std::string makeFixedOutputCA(FileIngestionMethod method, const Hash & hash);
|
||||||
|
|
||||||
|
}
|
|
@ -87,11 +87,6 @@ const size_t storePathHashLen = 32; // i.e. 160 bits
|
||||||
/* Extension of derivations in the Nix store. */
|
/* Extension of derivations in the Nix store. */
|
||||||
const std::string drvExtension = ".drv";
|
const std::string drvExtension = ".drv";
|
||||||
|
|
||||||
enum struct FileIngestionMethod : uint8_t {
|
|
||||||
Flat = false,
|
|
||||||
Recursive = true
|
|
||||||
};
|
|
||||||
|
|
||||||
struct StorePathWithOutputs
|
struct StorePathWithOutputs
|
||||||
{
|
{
|
||||||
StorePath path;
|
StorePath path;
|
||||||
|
|
|
@ -814,25 +814,6 @@ Strings ValidPathInfo::shortRefs() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string makeFileIngestionPrefix(const FileIngestionMethod m) {
|
|
||||||
switch (m) {
|
|
||||||
case FileIngestionMethod::Flat:
|
|
||||||
return "";
|
|
||||||
case FileIngestionMethod::Recursive:
|
|
||||||
return "r:";
|
|
||||||
default:
|
|
||||||
throw Error("impossible, caught both cases");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string makeFixedOutputCA(FileIngestionMethod method, const Hash & hash)
|
|
||||||
{
|
|
||||||
return "fixed:"
|
|
||||||
+ makeFileIngestionPrefix(method)
|
|
||||||
+ hash.to_string();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Store::addToStore(const ValidPathInfo & info, Source & narSource,
|
void Store::addToStore(const ValidPathInfo & info, Source & narSource,
|
||||||
RepairFlag repair, CheckSigsFlag checkSigs,
|
RepairFlag repair, CheckSigsFlag checkSigs,
|
||||||
std::shared_ptr<FSAccessor> accessor)
|
std::shared_ptr<FSAccessor> accessor)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "path.hh"
|
#include "path.hh"
|
||||||
#include "hash.hh"
|
#include "hash.hh"
|
||||||
|
#include "file-hash.hh"
|
||||||
#include "serialise.hh"
|
#include "serialise.hh"
|
||||||
#include "crypto.hh"
|
#include "crypto.hh"
|
||||||
#include "lru-cache.hh"
|
#include "lru-cache.hh"
|
||||||
|
@ -846,15 +847,6 @@ std::optional<ValidPathInfo> decodeValidPathInfo(
|
||||||
std::istream & str,
|
std::istream & str,
|
||||||
bool hashGiven = false);
|
bool hashGiven = false);
|
||||||
|
|
||||||
/* Compute the prefix to the hash algorithm which indicates how the files were
|
|
||||||
ingested. */
|
|
||||||
std::string makeFileIngestionPrefix(const FileIngestionMethod m);
|
|
||||||
|
|
||||||
/* Compute the content-addressability assertion (ValidPathInfo::ca)
|
|
||||||
for paths created by makeFixedOutputPath() / addToStore(). */
|
|
||||||
std::string makeFixedOutputCA(FileIngestionMethod method, const Hash & hash);
|
|
||||||
|
|
||||||
|
|
||||||
/* Split URI into protocol+hierarchy part and its parameter set. */
|
/* Split URI into protocol+hierarchy part and its parameter set. */
|
||||||
std::pair<std::string, Store::Params> splitUriAndParams(const std::string & uri);
|
std::pair<std::string, Store::Params> splitUriAndParams(const std::string & uri);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "command.hh"
|
#include "command.hh"
|
||||||
#include "hash.hh"
|
#include "hash.hh"
|
||||||
|
#include "file-hash.hh"
|
||||||
#include "legacy.hh"
|
#include "legacy.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "references.hh"
|
#include "references.hh"
|
||||||
|
|
Loading…
Reference in a new issue