This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,222 @@
Demonstrate our support for pin-depends.
$ . ../git-helpers.sh
$ . ./helpers.sh
$ add_mock_repo_if_needed
$ cat >dune-project <<EOF
> (lang dune 3.13)
> EOF
$ mkrepo
$ mkpkg bar 0.0.1
$ runtest() {
> cat >foo.opam <<EOF
> opam-version: "2.0"
> depends: [ "bar" ]
> pin-depends: [ "bar.1.0.0" "$1" ]
> EOF
> dune pkg lock && {
> local pkg="dune.lock/bar.pkg";
> grep version $pkg;
> grep dev $pkg;
> print_source "bar";
> }
> }
Local pinned source.
"opam" file at the root
$ dir=_bar_file
$ mkdir $dir
$ cat >$dir/opam <<EOF
> opam-version: "2.0"
> EOF
$ runtest "file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url file://PWD/_bar_file))) (dev)
"opam" directory at the root
$ dir=_bar_file_opam_dir
$ mkdir -p $dir/opam
$ cat >$dir/opam/bar.opam <<EOF
> opam-version: "2.0"
> EOF
$ runtest "file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url file://PWD/_bar_file_opam_dir))) (dev)
"bar.opam" file at the root
$ dir=_bar_named_opam_root
$ mkdir $dir
$ cat >$dir/bar.opam <<EOF
> opam-version: "2.0"
> EOF
$ runtest "file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url file://PWD/_bar_named_opam_root))) (dev)
"bar.opam" file at opam/
$ dir=_bar_named_opam_subdir
$ mkdir -p $dir/opam
$ cat >$dir/opam/bar.opam <<EOF
> opam-version: "2.0"
> EOF
$ runtest "file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url file://PWD/_bar_named_opam_subdir))) (dev)
Git pinned source:
$ dir=_bar_git
$ mkdir $dir
$ cd $dir
$ git init --quiet
$ cat >opam <<EOF
> opam-version: "2.0"
> EOF
$ git add -A
$ git commit --quiet -m "Initial commit"
$ cd ..
$ runtest "git+file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url git+file://PWD/_bar_git))) (dev)
Git pinned source with toplevel opam file:
$ dir=_bar_opam_git
$ mkdir $dir
$ cd $dir
$ git init --quiet
$ cat >bar.opam <<EOF
> opam-version: "2.0"
> EOF
$ git add -A
$ git commit --quiet -m "Initial commit"
$ cd ..
$ runtest "git+file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url git+file://PWD/_bar_opam_git))) (dev)
Git pinned source with toplevel opam dir 1
$ dir=_bar_opam_dir_git1
$ mkdir $dir
$ cd $dir
$ git init --quiet
$ mkdir opam
$ cat >opam/opam <<EOF
> opam-version: "2.0"
> EOF
$ git add -A
$ git commit --quiet -m "Initial commit"
$ cd ..
$ runtest "git+file://$PWD/$dir"
Solution for dune.lock:
- bar.1.0.0
(version 1.0.0)
(dev)
(source (fetch (url git+file://PWD/_bar_opam_dir_git1))) (dev)
Git pinned source with toplevel opam dir 2
$ dir=_bar_opam_dir_git2
$ mkdir $dir
$ cd $dir
$ git init --quiet
$ mkdir opam
$ cat >opam/foo.opam <<EOF
> opam-version: "2.0"
> EOF
$ git add -A
$ git commit --quiet -m "Initial commit"
$ cd ..
$ runtest "git+file://$PWD/$dir"
File "foo.opam", line 1, characters 0-0:
Error: unable to discover an opam file for package bar
[1]
Pin to something that doesn't have an opam file
$ dir=_no_opam; mkdir $dir
$ runtest "file://$PWD/$dir"
File "foo.opam", line 1, characters 0-0:
Error: unable to discover an opam file for package bar
[1]
Pin to an invalid opam file
$ dir=_invalid_opam; mkdir $dir
$ touch $dir/opam
$ runtest "file://$PWD/$dir"
File "$TESTCASE_ROOT/_invalid_opam/opam", line 1, characters 0-0:
Error: unexpected version
unsupported or missing file format version; should be 2.0 or older
[1]
Pin to an HTTP archive work
$ mkdir _source/
$ cat > _source/bar.opam << EOF
> opam-version: "2.0"
> EOF
$ tar cf tarball.tar -C _source bar.opam
$ MD5_CHECKSUM=$(md5sum tarball.tar | cut -f1 -d' ')
$ echo tarball.tar > fake-curls
$ PORT=1
$ runtest "http://0.0.0.0:$PORT/tarball.tar" > output
Solution for dune.lock:
- bar.1.0.0
$ grep "md5=$MD5_CHECKSUM" output 2>&1 > /dev/null && echo "Checksum matches"
Checksum matches
Pin to an HTTP archive detects wrong hash
$ cat << EOF > dune
> (library
> (name foo)
> (libraries bar))
> EOF
$ sed -i.tmp "s/$MD5_CHECKSUM/92449184682b45b5f07e811fdd61d35f/g" dune.lock/bar.pkg
$ rm -rf already-served
$ dune build 2>&1 | grep -v "md5"
File "dune.lock/bar.pkg", line 6, characters 12-48:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error: Invalid checksum, got
Pin to an HTTP archive needs `dune pkg lock` to download and compute the hash
of the target again
$ rm tarball.tar already-served
$ echo "update checksum" > _source/random_file
$ tar cf tarball.tar -C _source bar.opam random_file
$ MD5_CHECKSUM=$(md5sum tarball.tar | cut -f1 -d' ')
$ echo tarball.tar > fake-curls
$ runtest "http://0.0.0.0:$PORT/tarball.tar" > output
Solution for dune.lock:
- bar.1.0.0
$ grep "md5=$MD5_CHECKSUM" output 2>&1 > /dev/null && echo "Checksum matches"
Checksum matches