Nix 2.26.3
Nix, the purely functional package manager; unstable internal interfaces
 
Loading...
Searching...
No Matches
source-path.hh
Go to the documentation of this file.
1#pragma once
7
8#include "ref.hh"
9#include "canon-path.hh"
10#include "source-accessor.hh"
11#include "std-hash.hh"
12
13namespace nix {
14
21struct SourcePath
22{
23 ref<SourceAccessor> accessor;
24 CanonPath path;
25
26 SourcePath(ref<SourceAccessor> accessor, CanonPath path = CanonPath::root)
27 : accessor(std::move(accessor))
28 , path(std::move(path))
29 { }
30
31 std::string_view baseName() const;
32
37 SourcePath parent() const;
38
43 std::string readFile() const;
44
45 void readFile(
46 Sink & sink,
47 std::function<void(uint64_t)> sizeCallback = [](uint64_t size){}) const
48 { return accessor->readFile(path, sink, sizeCallback); }
49
54 bool pathExists() const;
55
61
66 std::optional<SourceAccessor::Stat> maybeLstat() const;
67
72 SourceAccessor::DirEntries readDirectory() const;
73
78 std::string readLink() const;
79
83 void dumpPath(
84 Sink & sink,
85 PathFilter & filter = defaultPathFilter) const;
86
91 std::optional<std::filesystem::path> getPhysicalPath() const;
92
93 std::string to_string() const;
94
98 SourcePath operator / (const CanonPath & x) const;
99
105 SourcePath operator / (std::string_view c) const;
106
107 bool operator==(const SourcePath & x) const noexcept;
108 std::strong_ordering operator<=>(const SourcePath & x) const noexcept;
109
113 SourcePath resolveSymlinks(
114 SymlinkResolution mode = SymlinkResolution::Full) const
115 {
116 return {accessor, accessor->resolveSymlinks(path, mode)};
117 }
118
119 friend class std::hash<nix::SourcePath>;
120};
121
122std::ostream & operator << (std::ostream & str, const SourcePath & path);
123
124}
125
126template<>
127struct std::hash<nix::SourcePath>
128{
129 std::size_t operator()(const nix::SourcePath & s) const noexcept
130 {
131 std::size_t hash = 0;
132 hash_combine(hash, s.accessor->number, s.path);
133 return hash;
134 }
135};
Definition canon-path.hh:41
Definition ref.hh:15
std::function< bool(const Path &path)> PathFilter
Definition file-system.hh:365
T x
Definition lexer.l:2648
Definition serialise.hh:20
Definition source-accessor.hh:96
Definition source-path.hh:22
std::optional< std::filesystem::path > getPhysicalPath() const
Definition source-path.cc:38
SourceAccessor::Stat lstat() const
Definition source-path.cc:21
bool pathExists() const
Definition source-path.cc:18
void dumpPath(Sink &sink, PathFilter &filter=defaultPathFilter) const
Definition source-path.cc:33
std::string readFile() const
Definition source-path.cc:15
std::string readLink() const
Definition source-path.cc:30
SourceAccessor::DirEntries readDirectory() const
Definition source-path.cc:27
std::optional< SourceAccessor::Stat > maybeLstat() const
Definition source-path.cc:24
SourcePath resolveSymlinks(SymlinkResolution mode=SymlinkResolution::Full) const
Definition source-path.hh:113
SourcePath operator/(const CanonPath &x) const
Definition source-path.cc:44
SourcePath parent() const
Definition source-path.cc:8