diff options
Diffstat (limited to 'lib/fileset/mock-splitRoot.nix')
-rw-r--r-- | lib/fileset/mock-splitRoot.nix | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/fileset/mock-splitRoot.nix b/lib/fileset/mock-splitRoot.nix new file mode 100644 index 00000000000..3c18ab1b1af --- /dev/null +++ b/lib/fileset/mock-splitRoot.nix @@ -0,0 +1,26 @@ +# This overlay implements mocking of the lib.path.splitRoot function +# It pretends that the last component named "mock-root" is the root: +# +# splitRoot /foo/mock-root/bar/mock-root/baz +# => { +# root = /foo/mock-root/bar/mock-root; +# subpath = "./baz"; +# } +self: super: { + path = super.path // { + splitRoot = path: + let + parts = super.path.splitRoot path; + components = self.path.subpath.components parts.subpath; + count = self.length components; + rootIndex = count - self.lists.findFirstIndex + (component: component == "mock-root") + (self.length components) + (self.reverseList components); + root = self.path.append parts.root (self.path.subpath.join (self.take rootIndex components)); + subpath = self.path.subpath.join (self.drop rootIndex components); + in { + inherit root subpath; + }; + }; +} |