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.
		
	
			
		
			
				
	
	
		
			19 lines
		
	
	
	
		
			672 B
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			19 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
 |