mte/unikernel/duniverse/dune_/test/blackbox-tests/test-cases/pkg/submodules.t
2025-11-11 02:07:51 +01:00

75 lines
2.1 KiB
Perl

We want to make sure locking works even with submodules. Submodules can
contains submodules on their own which should also work.
$ . ../git-helpers.sh
$ . ./helpers.sh
$ mkrepo
$ mkpkg foo <<EOF
> EOF
$ mkpkg bar <<EOF
> depends: [ "foo" ]
> EOF
We move `packages` into a different folder
$ mkdir remote-submodule
$ mv mock-opam-repository/packages/* remote-submodule
$ rm -r mock-opam-repository/packages
We also move `bar` to a different subrepo:
$ mv remote-submodule/bar remote-bar
And create a tree of repos with each of them referencing each other. First we
create a regular repo containing `bar`
$ cd remote-bar
$ git init --quiet
$ git add -A
$ git commit -m "Initial commit of bar package" --quiet
$ SUBMODULE_BAR_LOCATION=$(pwd)
$ cd ..
Then we add the `bar` repo as submodule of the `packages` repo:
$ cd remote-submodule
$ git init --quiet
$ git add -A
$ GIT_ALLOW_PROTOCOL=file git submodule add ${SUBMODULE_BAR_LOCATION} bar
Cloning into '$TESTCASE_ROOT/remote-submodule/bar'...
done.
$ git commit -m "Initial subrepo commit" --quiet
$ SUBMODULE_REVISION=$(git rev-parse HEAD)
$ SUBMODULE_LOCATION=$(pwd)
$ cd ..
In our mock repository, we make sure to add the package submodule as
`packages` folder:
$ cd mock-opam-repository
$ git init --quiet
$ GIT_ALLOW_PROTOCOL=file git submodule add ${SUBMODULE_LOCATION} packages
Cloning into '$TESTCASE_ROOT/mock-opam-repository/packages'...
done.
$ git commit -m "Initial opam-repo commit" --quiet
$ git submodule init
$ git ls-tree -r HEAD | grep "commit ${SUBMODULE_REVISION}" > /dev/null && echo "Submodule exists at expected revision"
Submodule exists at expected revision
$ cd ..
We'll use the mock repository as source and depend on `bar`:
$ add_mock_repo_if_needed "git+file://$(pwd)/mock-opam-repository"
$ cat > dune-project <<EOF
> (lang dune 3.10)
> (package
> (name baz)
> (depends bar))
> EOF
We should be able to successfully solve the project with `foo` and `bar`:
$ dune pkg lock
Solution for dune.lock:
- bar.0.0.1
- foo.0.0.1