ci: multi-mirror GitHub clone for mingw third_party
windows-cross died cloning busybox-w32 through a global gitclone.com insteadOf (HTTP 502). Try ghfast/ghproxy/gitclone/github per repo instead of forcing one proxy for every fetch.
This commit is contained in:
@@ -22,11 +22,35 @@ need_cmd git
|
||||
need_cmd make
|
||||
need_cmd "${T}gcc"
|
||||
|
||||
# Clone a GitHub repo with CN-friendly mirrors; fall back if one proxy 502s.
|
||||
github_mirrors() { # https://github.com/org/repo[.git] -> print candidate clone URLs
|
||||
local url="$1" path
|
||||
path="${url#https://github.com/}"
|
||||
path="${path%.git}"
|
||||
printf '%s\n' \
|
||||
"https://ghfast.top/https://github.com/${path}.git" \
|
||||
"https://ghproxy.net/https://github.com/${path}.git" \
|
||||
"https://gitclone.com/github.com/${path}.git" \
|
||||
"https://github.com/${path}.git"
|
||||
}
|
||||
|
||||
checkout() { # url dir rev
|
||||
local url="$1" dir="$2" rev="$3"
|
||||
[[ -d "$dir/.git" ]] || git clone -q --filter=blob:none "$url" "$dir"
|
||||
local url="$1" dir="$2" rev="$3" m
|
||||
if [[ ! -d "$dir/.git" ]]; then
|
||||
local ok=0
|
||||
while IFS= read -r m; do
|
||||
echo " clone $m"
|
||||
rm -rf "$dir"
|
||||
if git clone -q --filter=blob:none "$m" "$dir"; then
|
||||
ok=1
|
||||
break
|
||||
fi
|
||||
done < <(github_mirrors "$url")
|
||||
[[ $ok -eq 1 ]] || { echo "clone failed: $url" >&2; exit 1; }
|
||||
fi
|
||||
if ! git -C "$dir" rev-parse -q --verify "$rev^{commit}" >/dev/null; then
|
||||
git -C "$dir" fetch -q --tags origin
|
||||
git -C "$dir" fetch -q --tags origin || true
|
||||
git -C "$dir" fetch -q origin "$rev" || true
|
||||
fi
|
||||
git -C "$dir" checkout -q --detach "$rev"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user