Files
termux-packages/scripts/build/get_source/termux_git_clone_src.sh
termux-pacman-bot 2d36f8309b Update repo
2025-03-22 01:31:14 +00:00

82 lines
2.9 KiB
Bash

termux_git_clone_src() {
local TMP_CHECKOUT=$TERMUX_PKG_CACHEDIR/tmp-checkout
local TMP_CHECKOUT_VERSION=$TERMUX_PKG_CACHEDIR/tmp-checkout-version
local termux_pkg_srcurl="${TERMUX_PKG_SRCURL:4}"
local termux_pkg_local_srcpath=""
local termux_pkg_branch_flags=""
if [[ "$termux_pkg_srcurl" =~ ^file://(/[^/]+)+$ ]]; then
termux_pkg_local_srcpath="${termux_pkg_srcurl:7}" # Remove `file://` prefix
if [ ! -d "$termux_pkg_local_srcpath" ]; then
echo "No source directory found at path of TERMUX_PKG_SRCURL '$TERMUX_PKG_SRCURL' of package '$TERMUX_PKG_NAME'"
return 1
elif [ ! -d "$termux_pkg_local_srcpath/.git" ]; then
echo "The source directory at path of TERMUX_PKG_SRCURL '$TERMUX_PKG_SRCURL' of package '$TERMUX_PKG_NAME' does not a contain a '.git' sub directory"
return 1
fi
fi
if [ ! -f $TMP_CHECKOUT_VERSION ] || [ "$(cat $TMP_CHECKOUT_VERSION)" != "$TERMUX_PKG_VERSION" ]; then
if [[ -n "$termux_pkg_local_srcpath" ]]; then
if [ "$TERMUX_PKG_GIT_BRANCH" != "" ]; then
# The local git repository that needs to be cloned may
# not have a branch created that is tracking its remote
# branch, so we create it if it doesn't exist without
# checking it out, otherwise when we clone below,
# git will fail to find the branch in its own origin
# i.e the local git repository, as it will not look
# into the origin of the local git repository recursively.
(cd "$termux_pkg_local_srcpath" && git fetch origin $TERMUX_PKG_GIT_BRANCH:$TERMUX_PKG_GIT_BRANCH)
termux_pkg_branch_flags="--branch $TERMUX_PKG_GIT_BRANCH"
fi
else
if [ "$TERMUX_PKG_GIT_BRANCH" == "" ]; then
termux_pkg_branch_flags="--branch v${TERMUX_PKG_VERSION#*:}"
else
termux_pkg_branch_flags="--branch $TERMUX_PKG_GIT_BRANCH"
fi
fi
echo "Downloading git source $([[ "$termux_pkg_branch_flags" != "" ]] && echo "with branch '${termux_pkg_branch_flags:9}' ")from '$termux_pkg_srcurl'"
rm -rf "$TMP_CHECKOUT"
git clone \
--depth 1 \
$termux_pkg_branch_flags \
"$termux_pkg_srcurl" \
"$TMP_CHECKOUT"
pushd "$TMP_CHECKOUT"
# Workaround some bad server behaviour
# error: Server does not allow request for unadvertised object commit_no
# fatal: Fetched in submodule 'submodule_path', but it did not contain commit_no. Direct fetching of that commit failed.
if ! git submodule update --init --recursive --depth=1; then
local depth=10
local maxdepth=100
sleep 1
while :; do
echo "WARN: Retrying with max depth $depth"
if git submodule update --init --recursive --depth=$depth; then
break
fi
if [[ "$depth" -gt "$maxdepth" ]]; then
termux_error_exit "Failed to clone submodule"
fi
depth=$((depth+10))
sleep 1
done
fi
popd
echo "$TERMUX_PKG_VERSION" > "$TMP_CHECKOUT_VERSION"
else
echo "Skipped downloading of git source from '$termux_pkg_srcurl'"
fi
rm -rf "$TERMUX_PKG_SRCDIR"
cp -Rf "$TMP_CHECKOUT" "$TERMUX_PKG_SRCDIR"
}