This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
|
|
@ -0,0 +1,63 @@
|
|||
Test deduplication of build artifacts when using Dune cache with hard links.
|
||||
|
||||
$ export DUNE_CACHE=enabled
|
||||
$ export DUNE_CACHE_ROOT=$PWD/.cache
|
||||
|
||||
$ cat > dune-project <<EOF
|
||||
> (lang dune 2.1)
|
||||
> EOF
|
||||
$ cat > dune <<EOF
|
||||
> (rule
|
||||
> (deps source)
|
||||
> (targets target)
|
||||
> (action (copy source target)))
|
||||
> EOF
|
||||
$ cat > source <<EOF
|
||||
> \_o< COIN
|
||||
> EOF
|
||||
|
||||
Here we build [target], which is a copy of [source]. After the build, the same
|
||||
file will appear in the build directory twice: (i) as [_build/default/source],
|
||||
because all sources are first copied to the build directory, and (ii) as
|
||||
[_build/default/target], as the build result. Furthermore, the same file will
|
||||
also be stored to the build cache, somewhere in the [files/v4] directory. Dune
|
||||
cache will recognise that all three files are identical and will use hard links
|
||||
to share them on disk, hence the hard link counts of 3.
|
||||
|
||||
$ dune build target
|
||||
$ cat _build/default/target
|
||||
\_o< COIN
|
||||
$ dune_cmd stat hardlinks _build/default/source
|
||||
3
|
||||
$ dune_cmd stat hardlinks _build/default/target
|
||||
3
|
||||
|
||||
Demonstrate that sharing of build artifacts can be abused to corrupt the cache.
|
||||
|
||||
$ chmod 777 _build/default/target
|
||||
$ echo "\_o< MEOW" > _build/default/target
|
||||
$ rm -rf _build
|
||||
$ dune build target
|
||||
$ cat _build/default/target
|
||||
\_o< MEOW
|
||||
|
||||
Test that by using the [copy] mode we can disable the sharing.
|
||||
|
||||
$ rm -rf $DUNE_CACHE_ROOT
|
||||
$ rm -rf _build
|
||||
$ dune build target --cache-storage-mode=copy
|
||||
$ cat _build/default/target
|
||||
\_o< COIN
|
||||
$ dune_cmd stat hardlinks _build/default/source
|
||||
1
|
||||
$ dune_cmd stat hardlinks _build/default/target
|
||||
1
|
||||
|
||||
In the [copy] mode, we can't corrupt the cache so easily.
|
||||
|
||||
$ chmod 777 _build/default/target
|
||||
$ echo "\_o< MEOW" > _build/default/target
|
||||
$ rm -rf _build
|
||||
$ dune build target
|
||||
$ cat _build/default/target
|
||||
\_o< COIN
|
||||
Loading…
Add table
Add a link
Reference in a new issue