mirror of
https://github.com/termux-pacman/termux-packages.git
synced 2025-12-23 04:00:10 +00:00
82 lines
2.9 KiB
Bash
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"
|
|
}
|