Nix 2.26.3
Nix, the purely functional package manager; unstable internal interfaces
 
Loading...
Searching...
No Matches
path-info.hh
Go to the documentation of this file.
1#pragma once
3
4#include "signature/signer.hh"
5#include "path.hh"
6#include "hash.hh"
7#include "content-address.hh"
8
9#include <string>
10#include <optional>
11
12namespace nix {
13
14
15class Store;
16
17
19{
20 std::optional<StorePath> deriver;
21 StorePathSet references;
25 uint64_t downloadSize;
29 uint64_t narSize;
30};
31
32using SubstitutablePathInfos = std::map<StorePath, SubstitutablePathInfo>;
33
34
41struct UnkeyedValidPathInfo
42{
46 std::optional<StorePath> deriver;
47
52
56 StorePathSet references;
57
62 time_t registrationTime = 0;
63
67 uint64_t narSize = 0;
68
75 uint64_t id = 0;
76
81 bool ultimate = false;
82
83 StringSet sigs; // note: not necessarily verified
84
102 std::optional<ContentAddress> ca;
103
104 UnkeyedValidPathInfo(const UnkeyedValidPathInfo & other) = default;
105
106 UnkeyedValidPathInfo(Hash narHash) : narHash(narHash) { };
107
108 bool operator == (const UnkeyedValidPathInfo &) const noexcept;
109
113 std::weak_ordering operator <=> (const UnkeyedValidPathInfo &) const noexcept;
114
115 virtual ~UnkeyedValidPathInfo() { }
116
121 virtual nlohmann::json toJSON(
122 const Store & store,
123 bool includeImpureInfo,
124 HashFormat hashFormat) const;
125 static UnkeyedValidPathInfo fromJSON(
126 const Store & store,
127 const nlohmann::json & json);
128};
129
130struct ValidPathInfo : UnkeyedValidPathInfo {
131 StorePath path;
132
133 bool operator == (const ValidPathInfo &) const = default;
134 auto operator <=> (const ValidPathInfo &) const = default;
135
144 std::string fingerprint(const Store & store) const;
145
146 void sign(const Store & store, const Signer & signer);
147
153 std::optional<ContentAddressWithReferences> contentAddressWithReferences() const;
154
158 bool isContentAddressed(const Store & store) const;
159
160 static const size_t maxSigs = std::numeric_limits<size_t>::max();
161
167 size_t checkSignatures(const Store & store, const PublicKeys & publicKeys) const;
168
172 bool checkSignature(const Store & store, const PublicKeys & publicKeys, const std::string & sig) const;
173
177 Strings shortRefs() const;
178
179 ValidPathInfo(StorePath && path, UnkeyedValidPathInfo info) : UnkeyedValidPathInfo(info), path(std::move(path)) { };
180 ValidPathInfo(const StorePath & path, UnkeyedValidPathInfo info) : UnkeyedValidPathInfo(info), path(path) { };
181
182 ValidPathInfo(const Store & store,
183 std::string_view name, ContentAddressWithReferences && ca, Hash narHash);
184};
185
186static_assert(std::is_move_assignable_v<ValidPathInfo>);
187static_assert(std::is_copy_assignable_v<ValidPathInfo>);
188static_assert(std::is_copy_constructible_v<ValidPathInfo>);
189static_assert(std::is_move_constructible_v<ValidPathInfo>);
190
191using ValidPathInfos = std::map<StorePath, ValidPathInfo>;
192
193}
Definition path.hh:27
Definition store-api.hh:169
ChunkedVector< std::string, 8192 > store
Definition lexer.l:1011
std::optional< std::string > fingerprint
Definition lexer.l:4579
virtual nlohmann::json toJSON()=0
const std::string_view & name
Definition lexer.l:1709
HashFormat
Enumeration representing the hash formats.
Definition hash.hh:29
Definition content-address.hh:276
Definition hash.hh:45
Definition path-info.hh:19
uint64_t downloadSize
Definition path-info.hh:25
uint64_t narSize
Definition path-info.hh:29
Definition path-info.hh:42
std::weak_ordering operator<=>(const UnkeyedValidPathInfo &) const noexcept
std::optional< ContentAddress > ca
Definition path-info.hh:102
StorePathSet references
Definition path-info.hh:56
bool ultimate
Definition path-info.hh:81
time_t registrationTime
Definition path-info.hh:62
std::optional< StorePath > deriver
Definition path-info.hh:46
Hash narHash
Definition path-info.hh:51
uint64_t narSize
Definition path-info.hh:67
bool checkSignature(const Store &store, const PublicKeys &publicKeys, const std::string &sig) const
Definition path-info.cc:111
Strings shortRefs() const
Definition path-info.cc:117
size_t checkSignatures(const Store &store, const PublicKeys &publicKeys) const
Definition path-info.cc:99
bool isContentAddressed(const Store &store) const
Definition path-info.cc:81
std::optional< ContentAddressWithReferences > contentAddressWithReferences() const
Definition path-info.cc:43