forked from lix-project/lix
![Eelco Dolstra](/assets/img/avatar_default.png)
When running NixOps under Mac OS X, we need to be able to import store paths built on Linux into the local Nix store. However, HFS+ is usually case-insensitive, so if there are directories with file names that differ only in case, then importing will fail. The solution is to add a suffix ("~nix~case~hack~<integer>") to colliding files. For instance, if we have a directory containing xt_CONNMARK.h and xt_connmark.h, then the latter will be renamed to "xt_connmark.h~nix~case~hack~1". If a store path is dumped as a NAR, the suffixes are removed. Thus, importing and exporting via a case-insensitive Nix store is round-tripping. So when NixOps calls nix-copy-closure to copy the path to a Linux machine, you get the original file names back. Closes #119.
20 lines
672 B
Bash
20 lines
672 B
Bash
source common.sh
|
|
|
|
clearStore
|
|
|
|
rm -rf $TEST_ROOT/case
|
|
|
|
opts="--option use-case-hack true"
|
|
|
|
# Check whether restoring and dumping a NAR that contains case
|
|
# collisions is round-tripping, even on a case-insensitive system.
|
|
nix-store $opts --restore $TEST_ROOT/case < case.nar
|
|
nix-store $opts --dump $TEST_ROOT/case > $TEST_ROOT/case.nar
|
|
cmp case.nar $TEST_ROOT/case.nar
|
|
[ "$(nix-hash $opts --type sha256 $TEST_ROOT/case)" = "$(nix-hash --flat --type sha256 case.nar)" ]
|
|
|
|
# Check whether we detect true collisions (e.g. those remaining after
|
|
# removal of the suffix).
|
|
touch "$TEST_ROOT/case/xt_CONNMARK.h~nix~case~hack~3"
|
|
! nix-store $opts --dump $TEST_ROOT/case > /dev/null
|