Skip to content

Commit

Permalink
Error out on fetch operations on CVS/Git mismatch
Browse files Browse the repository at this point in the history
Now that we support two SCMs, make sure we don't use the wrong one on
an existing copy of the src and xsrc checkouts.  This will avoid some
user errors.
  • Loading branch information
jmmv committed Jan 8, 2025
1 parent 2c032fd commit 4d3212d
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 4 deletions.
33 changes: 29 additions & 4 deletions sysbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -309,28 +309,53 @@ sysbuild_fetch() {
cvs)
local cvsroot="$(shtk_config_get CVSROOT)"

local srcdir="$(shtk_config_get SRCDIR)"
if [ -d "${srcdir}" -a -e "${srcdir}/.git" ]; then
shtk_cli_error "SCM=${scm} but ${srcdir} looks" \
"like a Git repo"
fi

shtk_cli_info "Updating base source tree"
shtk_cvs_fetch "${cvsroot}" src "$(shtk_config_get_default CVSTAG '')" \
"$(shtk_config_get SRCDIR)"
"${srcdir}"

if shtk_config_has XSRCDIR; then
local xsrcdir="$(shtk_config_get XSRCDIR)"
if [ -d "${xsrcdir}" -a -e "${xsrcdir}/.git" ]; then
shtk_cli_error "SCM=${scm} but ${xsrcdir} looks" \
"like a Git repo"
fi

shtk_cli_info "Updating X11 source tree"
shtk_cvs_fetch "${cvsroot}" xsrc \
"$(shtk_config_get_default CVSTAG '')" "$(shtk_config_get XSRCDIR)"
"$(shtk_config_get_default CVSTAG '')" "${xsrcdir}"
fi
;;

git)
local srcrepo="$(shtk_config_get GIT_SRC_REPO)"
local srcbranch="$(shtk_config_get GIT_SRC_BRANCH)"

local srcdir="$(shtk_config_get SRCDIR)"
if [ -d "${srcdir}" -a -e "${srcdir}/CVS" ]; then
shtk_cli_error "SCM=${scm} but ${srcdir} looks" \
"like a CVS checkout"
fi

shtk_cli_info "Updating base source tree"
shtk_git_fetch "${srcrepo}" "${srcbranch}" "$(shtk_config_get SRCDIR)"
shtk_git_fetch "${srcrepo}" "${srcbranch}" "${srcdir}"

if shtk_config_has XSRCDIR; then
local xsrcdir="$(shtk_config_get XSRCDIR)"
if [ -d "${xsrcdir}" -a -e "${xsrcdir}/CVS" ]; then
shtk_cli_error "SCM=${scm} but ${xsrcdir} looks" \
"like a CVS checkout"
fi

local xsrcrepo="$(shtk_config_get GIT_XSRC_REPO)"
local xsrcbranch="$(shtk_config_get GIT_XSRC_BRANCH)"
shtk_cli_info "Updating X11 source tree"
shtk_git_fetch "${xsrcrepo}" "${xsrcbranch}" "$(shtk_config_get XSRCDIR)"
shtk_git_fetch "${xsrcrepo}" "${xsrcbranch}" "${xsrcdir}"
fi
;;

Expand Down
72 changes: 72 additions & 0 deletions sysbuild_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1147,6 +1147,78 @@ EOF
}


shtk_unittest_add_test fetch__cvs__update__src_is_git
fetch__cvs__update__src_is_git_test() {
mkdir -p checkout/src/.git
cat >test.conf <<EOF
SCM=cvs
CVSROOT=irrelevant
SRCDIR="$(pwd)/checkout/src"
XSRCDIR=
EOF

cat >experr <<EOF
sysbuild: E: SCM=cvs but $(pwd)/checkout/src looks like a Git repo
EOF
assert_command -s exit:1 -o empty -e file:experr sysbuild -c test.conf fetch
}


shtk_unittest_add_test fetch__cvs__update__xsrc_is_git
fetch__cvs__update__xsrc_is_git_test() {
mock_cvsroot=":local:$(pwd)/cvsroot"
create_mock_cvsroot "${mock_cvsroot}"
mkdir -p checkout/xsrc/.git
cat >test.conf <<EOF
SCM=cvs
CVSROOT="${mock_cvsroot}"
SRCDIR="$(pwd)/checkout/src"
XSRCDIR="$(pwd)/checkout/xsrc"
EOF

assert_command -s exit:1 \
-o ignore \
-e match:"E: SCM=cvs but $(pwd)/checkout/xsrc looks like a Git repo" \
sysbuild -c test.conf fetch
}


shtk_unittest_add_test fetch__git__update__src_is_cvs
fetch__git__update__src_is_cvs_test() {
mkdir -p checkout/src/CVS
cat >test.conf <<EOF
SCM=git
GIT_SRC_REPO="$(pwd)/src.git"
SRCDIR="$(pwd)/checkout/src"
XSRCDIR=
EOF

cat >experr <<EOF
sysbuild: E: SCM=git but $(pwd)/checkout/src looks like a CVS checkout
EOF
assert_command -s exit:1 -o empty -e file:experr sysbuild -c test.conf fetch
}


shtk_unittest_add_test fetch__git__update__xsrc_is_cvs
fetch__git__update__xsrc_is_cvs_test() {
create_mock_git_src "$(pwd)/src.git" trunk
mkdir -p checkout/xsrc/CVS
cat >test.conf <<EOF
SCM=git
GIT_SRC_REPO="$(pwd)/src.git"
GIT_XSRC_REPO=irrelevant
SRCDIR="$(pwd)/checkout/src"
XSRCDIR="$(pwd)/checkout/xsrc"
EOF

assert_command -s exit:1 \
-o ignore \
-e match:"E: SCM=git but $(pwd)/checkout/xsrc looks like a CVS checkout" \
sysbuild -c test.conf fetch
}


shtk_unittest_add_test fetch__git__checkout__src_only
fetch__git__checkout__src_only_test() {
create_mock_git_src "$(pwd)/src.git" trunk
Expand Down

0 comments on commit 4d3212d

Please sign in to comment.