Skip to content

Commit 25dbb22

Browse files
authored
Merge pull request #201 from serokell/Player205/Fix-incompatibility-with-nix-nar
[#198] Make nar implementation compatible with the original one
2 parents 72752f4 + 2f1bae8 commit 25dbb22

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

hnix-store-core/src/System/Nix/Internal/Nar/Streamer.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ streamNarIO effs basePath yield = do
7979
yield $ int fSize
8080
yieldFile path fSize
8181

82-
when isDir $ do
82+
when (isDir && not isSymLink) $ do
8383
fs <- IO.liftIO (Nar.narListDir effs path)
8484
yield $ strs ["type", "directory"]
8585
forM_ (sort fs) $ \f -> do

hnix-store-core/tests/NarFormat.hs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ spec_narEncoding = do
115115

116116
it "matches directory" $ do
117117
encEqualsNixStore (Nar sampleDirectory) sampleDirectoryBaseline
118+
it "matches symlink to directory" $ do
119+
encEqualsNixStore (Nar sampleLinkToDirectory) sampleLinkToDirectoryBaseline
118120

119121

120122
unit_nixStoreRegular :: HU.Assertion
@@ -452,6 +454,14 @@ sampleLargeDir fSize = Directory $ Map.fromList $ [
452454
)
453455
]
454456

457+
sampleLinkToDirectory :: FileSystemObject
458+
sampleLinkToDirectory = Directory $ Map.fromList [
459+
(FilePathPart "foo", Directory $ Map.fromList [
460+
(FilePathPart "file", Regular Nar.NonExecutable 8 "foo text")
461+
])
462+
, (FilePathPart "linkfoo" , SymLink "foo")
463+
]
464+
455465
--------------------------------------------------------------------------------
456466
sampleDirWithManyFiles :: Int -> FileSystemObject
457467
sampleDirWithManyFiles nFiles =
@@ -525,6 +535,21 @@ sampleDirectoryBaseline = B64.decodeLenient $ BSL.concat
525535
,"AAAAKQAAAAAAAAABAAAAAAAAACkAAAAAAAAA"
526536
]
527537

538+
sampleLinkToDirectoryBaseline :: BSL.ByteString
539+
sampleLinkToDirectoryBaseline = B64.decodeLenient $ BSL.concat
540+
["DQAAAAAAAABuaXgtYXJjaGl2ZS0xAAAAAQAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAdHlwZQAAAAAJ"
541+
,"AAAAAAAAAGRpcmVjdG9yeQAAAAAAAAAFAAAAAAAAAGVudHJ5AAAAAQAAAAAAAAAoAAAAAAAAAAQA"
542+
,"AAAAAAAAbmFtZQAAAAADAAAAAAAAAGZvbwAAAAAABAAAAAAAAABub2RlAAAAAAEAAAAAAAAAKAAA"
543+
,"AAAAAAAEAAAAAAAAAHR5cGUAAAAACQAAAAAAAABkaXJlY3RvcnkAAAAAAAAABQAAAAAAAABlbnRy"
544+
,"eQAAAAEAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAG5hbWUAAAAABAAAAAAAAABmaWxlAAAAAAQAAAAA"
545+
,"AAAAbm9kZQAAAAABAAAAAAAAACgAAAAAAAAABAAAAAAAAAB0eXBlAAAAAAcAAAAAAAAAcmVndWxh"
546+
,"cgAIAAAAAAAAAGNvbnRlbnRzCAAAAAAAAABmb28gdGV4dAEAAAAAAAAAKQAAAAAAAAABAAAAAAAA"
547+
,"ACkAAAAAAAAAAQAAAAAAAAApAAAAAAAAAAEAAAAAAAAAKQAAAAAAAAAFAAAAAAAAAGVudHJ5AAAA"
548+
,"AQAAAAAAAAAoAAAAAAAAAAQAAAAAAAAAbmFtZQAAAAAHAAAAAAAAAGxpbmtmb28ABAAAAAAAAABu"
549+
,"b2RlAAAAAAEAAAAAAAAAKAAAAAAAAAAEAAAAAAAAAHR5cGUAAAAABwAAAAAAAABzeW1saW5rAAYA"
550+
,"AAAAAAAAdGFyZ2V0AAADAAAAAAAAAGZvbwAAAAAAAQAAAAAAAAApAAAAAAAAAAEAAAAAAAAAKQAA"
551+
,"AAAAAAABAAAAAAAAACkAAAAAAAAA"
552+
]
528553

529554
-- | Control testcase sizes (bytes) by env variable
530555
getBigFileSize :: IO Int64

0 commit comments

Comments
 (0)