summaryrefslogtreecommitdiff
path: root/test/end-to-end/just-lock
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-02-18 17:33:15 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2025-02-20 15:33:53 +0100
commit2adc4915d42547fd71e4d8983dc50e33df251b53 (patch)
tree47a5f415fd19a9236f684269a0d751d3648587f8 /test/end-to-end/just-lock
parente749a97621d445de5e0dec89ab840dd61839d872 (diff)
downloadjustbuild-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/end-to-end/just-lock')
-rw-r--r--test/end-to-end/just-lock/TARGETS11
-rw-r--r--test/end-to-end/just-lock/plain-imports.sh137
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"