aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-12-06 22:44:08 +0100
committerEelco Dolstra <edolstra@gmail.com>2017-12-07 01:07:07 +0100
commit338f29dbd4ee04f2de4c747eadb8c106a98f885c (patch)
treec862ab1c9536d72a1d4371dff3b5e53e524f3d64 /src/libstore
parentba334bd6f756fa72686b72ed5da87ddc1a7aea69 (diff)
nix ls-{nar,store}: Return offset of files in the NAR if known
E.g. $ nix ls-store --json --recursive --store https://cache.nixos.org /nix/store/b0w2hafndl09h64fhb86kw6bmhbmnpm1-blender-2.79 \ | jq .entries.bin.entries.blender.narOffset 400
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/fs-accessor.hh7
-rw-r--r--src/libstore/nar-accessor.cc10
2 files changed, 10 insertions, 7 deletions
diff --git a/src/libstore/fs-accessor.hh b/src/libstore/fs-accessor.hh
index a67e0775b..f703e1d15 100644
--- a/src/libstore/fs-accessor.hh
+++ b/src/libstore/fs-accessor.hh
@@ -13,9 +13,10 @@ public:
struct Stat
{
- Type type;
- uint64_t fileSize; // regular files only
- bool isExecutable; // regular files only
+ Type type = tMissing;
+ uint64_t fileSize = 0; // regular files only
+ bool isExecutable = false; // regular files only
+ uint64_t narOffset = 0; // regular files only
};
virtual Stat stat(const Path & path) = 0;
diff --git a/src/libstore/nar-accessor.cc b/src/libstore/nar-accessor.cc
index 839a7991c..d6e9757c2 100644
--- a/src/libstore/nar-accessor.cc
+++ b/src/libstore/nar-accessor.cc
@@ -10,13 +10,13 @@ namespace nix {
struct NarMember
{
- FSAccessor::Type type;
+ FSAccessor::Type type = FSAccessor::Type::tMissing;
- bool isExecutable;
+ bool isExecutable = false;
/* If this is a regular file, position of the contents of this
file in the NAR. */
- size_t start, size;
+ size_t start = 0, size = 0;
std::string target;
@@ -142,7 +142,7 @@ struct NarAccessor : public FSAccessor
auto i = indexer.find(path);
if (i == nullptr)
return {FSAccessor::Type::tMissing, 0, false};
- return {i->type, i->size, i->isExecutable};
+ return {i->type, i->size, i->isExecutable, i->start};
}
StringSet readDirectory(const Path & path) override
@@ -195,6 +195,8 @@ void listNar(JSONPlaceholder & res, ref<FSAccessor> accessor,
obj.attr("size", st.fileSize);
if (st.isExecutable)
obj.attr("executable", true);
+ if (st.narOffset)
+ obj.attr("narOffset", st.narOffset);
break;
case FSAccessor::Type::tDirectory:
obj.attr("type", "directory");