aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/input-accessor.hh
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-06 05:24:35 +0100
committereldritch horrors <pennae@lix.systems>2024-03-05 23:46:18 -0700
commit89e99d94e4ae492db09c0ebc0c35e4890ef7db25 (patch)
treeeab2defee911a6c0e39d4b073062690bd9a3a058 /src/libutil/input-accessor.hh
parente9b5929b22116cb714adfe88ba39a817e89b019c (diff)
Merge pull request #9634 from 9999years/combine-abstract-pos-and-pos
Combine `AbstractPos`, `PosAdapter`, and `Pos` (cherry picked from commit 113499d16fc87d53b73fb62fe6242154909756ed) === this is a bit cursed because originally it was based on InputAccessor code that we don't have and moved/patched features we likewise don't have (fetchToStore caching, all the individual accessors, ContentAddressMethod). the commit is adjusted accordingly to match (remove caching, ignore accessors, use FileIngestionMethod). note that `state.rootPath . CanonPath == abs` and computeStorePathForPath works relative to cwd, so the slight rewrite in the moved fetchToStore is legal. Change-Id: I05fd340c273f0bcc8ffabfebdc4a88b98083bce5
Diffstat (limited to 'src/libutil/input-accessor.hh')
-rw-r--r--src/libutil/input-accessor.hh35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libutil/input-accessor.hh b/src/libutil/input-accessor.hh
new file mode 100644
index 000000000..740175af0
--- /dev/null
+++ b/src/libutil/input-accessor.hh
@@ -0,0 +1,35 @@
+#pragma once
+///@file
+
+#include "types.hh"
+#include "archive.hh"
+
+namespace nix {
+
+struct InputAccessor
+{
+ enum Type {
+ tRegular, tSymlink, tDirectory,
+ /**
+ Any other node types that may be encountered on the file system, such as device nodes, sockets, named pipe, and possibly even more exotic things.
+
+ Responsible for `"unknown"` from `builtins.readFileType "/dev/null"`.
+
+ Unlike `DT_UNKNOWN`, this must not be used for deferring the lookup of types.
+ */
+ tMisc
+ };
+
+ struct Stat
+ {
+ Type type = tMisc;
+ //uint64_t fileSize = 0; // regular files only
+ bool isExecutable = false; // regular files only
+ };
+
+ typedef std::optional<Type> DirEntry;
+
+ typedef std::map<std::string, DirEntry> DirEntries;
+};
+
+}