diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-02-18 17:33:15 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2025-02-20 15:33:53 +0100 |
commit | 2adc4915d42547fd71e4d8983dc50e33df251b53 (patch) | |
tree | 47a5f415fd19a9236f684269a0d751d3648587f8 /test | |
parent | e749a97621d445de5e0dec89ab840dd61839d872 (diff) | |
download | justbuild-2adc4915d42547fd71e4d8983dc50e33df251b53.tar.gz |
just-lock: Support special pragma for plain imports
Marking a source repository 'as plain' means that the whole source
repository tree will get imported as a repository type
corresponding to the source type. In this case, additional pragmas
than those supported by the inndividual imports might need to be
set.
Solve this by supporting the just-mr-style 'pragma' field also in
the source description, for all sources also accepting the
'as plain' field. Currently support only the 'special' pragma.
Document change and add test for plain imports that checks this
feature.
Diffstat (limited to 'test')
-rw-r--r-- | test/end-to-end/just-lock/TARGETS | 11 | ||||
-rw-r--r-- | test/end-to-end/just-lock/plain-imports.sh | 137 |
2 files changed, 148 insertions, 0 deletions
diff --git a/test/end-to-end/just-lock/TARGETS b/test/end-to-end/just-lock/TARGETS index 38c26ad3..ab3bc758 100644 --- a/test/end-to-end/just-lock/TARGETS +++ b/test/end-to-end/just-lock/TARGETS @@ -78,6 +78,16 @@ , ["end-to-end", "lock-tool-under-test"] ] } +, "plain-imports": + { "type": ["@", "rules", "shell/test", "script"] + , "name": ["plain-imports"] + , "test": ["plain-imports.sh"] + , "deps": + [ ["", "mr-tool-under-test"] + , ["", "tool-under-test"] + , ["end-to-end", "lock-tool-under-test"] + ] + } , "TESTS": { "type": ["@", "rules", "test", "suite"] , "arguments_config": ["TEST_BOOTSTRAP_JUST_MR"] @@ -95,6 +105,7 @@ , "file-imports" , "archive-imports" , "git-tree-imports" + , "plain-imports" ] } ] diff --git a/test/end-to-end/just-lock/plain-imports.sh b/test/end-to-end/just-lock/plain-imports.sh new file mode 100644 index 00000000..7935f1df --- /dev/null +++ b/test/end-to-end/just-lock/plain-imports.sh @@ -0,0 +1,137 @@ +#!/bin/sh +# Copyright 2025 Huawei Cloud Computing Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +set -eu + +readonly JUST_LOCK="${PWD}/bin/lock-tool-under-test" +readonly JUST="${PWD}/bin/tool-under-test" +readonly JUST_MR="${PWD}/bin/mr-tool-under-test" +readonly LBR="${TEST_TMPDIR}/local-build-root" +readonly LBR_PLAIN="${TEST_TMPDIR}/local-build-root-plain" +readonly OUT="${TEST_TMPDIR}/build-output" +readonly OUT_PLAIN="${TEST_TMPDIR}/build-output-plain" +readonly REPO_DIRS="${TEST_TMPDIR}/repos" +readonly WRKDIR="${PWD}/work" + +mkdir -p "${REPO_DIRS}/foo/inner" +cd "${REPO_DIRS}/foo" +touch ROOT +cat > repos.json <<'EOF' +{ "repositories": + { "": + { "repository": + { "type": "file" + , "path": "inner" + } + } + } +} +EOF +# add resolvable linked TARGETS file +ln -s inner/linked_TARGETS TARGETS +cat > inner/linked_TARGETS <<'EOF' +{ "": {"type": "file_gen", "name": "foo.txt", "data": "LINK"}} +EOF +# add inner TARGETS file shadowed by the linked one +cat > inner/TARGETS << 'EOF' +{ "": {"type": "file_gen", "name": "foo.txt", "data": "INNER"}} +EOF + +mkdir -p "${WRKDIR}" +cd "${WRKDIR}" +touch ROOT +cat > TARGETS <<'EOF' +{ "": + { "type": "generic" + , "cmds": ["cat foo.txt > out.txt"] + , "outs": ["out.txt"] + , "deps": [["@", "foo", "", ""]] + } +} +EOF + + +echo === Check normal import === + +cat > repos.in.json <<EOF +{ "repositories": + { "": + { "repository": {"type": "file", "path": "."} + , "bindings": {"foo": "foo"} + } + } + , "imports": + [ { "source": "file" + , "repos": [{"alias": "foo", "pragma": {"to_git": true}}] + , "path": "${REPO_DIRS}/foo" + } + ] +} +EOF +cat repos.in.json + +echo +"${JUST_LOCK}" -C repos.in.json -o repos.json --local-build-root "${LBR}" 2>&1 +cat repos.json +echo +# Check pragmas: "to_git" is kept +[ $(jq -r '.repositories.foo.repository.pragma.to_git' repos.json) = true ] +# Check that the subdir is taken as expected +"${JUST_MR}" -L '["env", "PATH='"${PATH}"'"]' --norc --just "${JUST}" \ + --local-build-root "${LBR}" install -o "${OUT}" 2>&1 +echo +cat "${OUT}/out.txt" +echo +grep -q INNER "${OUT}/out.txt" + + +echo == Check plain import === + +cat > repos.in.json <<EOF +{ "repositories": + { "": + { "repository": {"type": "file", "path": "."} + , "bindings": {"foo": "foo"} + } + } + , "imports": + [ { "source": "file" + , "repos": [{"alias": "foo", "pragma": {"to_git": true}}] + , "path": "${REPO_DIRS}/foo" + , "as plain": true + , "pragma": {"special": "resolve-completely"} + } + ] +} +EOF +cat repos.in.json + +echo +"${JUST_LOCK}" -C repos.in.json -o repos.json --local-build-root "${LBR_PLAIN}" 2>&1 +cat repos.json +echo +# Check pragmas: "to_git" is kept, "special" is unconditionally set +[ $(jq -r '.repositories.foo.repository.pragma.special' repos.json) = "resolve-completely" ] +[ $(jq -r '.repositories.foo.repository.pragma.to_git' repos.json) = true ] +# Check the symlink gets resolved as expected +"${JUST_MR}" -L '["env", "PATH='"${PATH}"'"]' --norc --just "${JUST}" \ + --local-build-root "${LBR_PLAIN}" install -o "${OUT_PLAIN}" 2>&1 +echo +cat "${OUT_PLAIN}/out.txt" +echo +grep -q LINK "${OUT_PLAIN}/out.txt" + +echo "OK" |