mirror of
git://f0xx.org/android_cast
synced 2026-07-29 04:38:53 +03:00
vpn service sync
This commit is contained in:
110
scripts/init-third-party-submodules.sh
Executable file
110
scripts/init-third-party-submodules.sh
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env bash
|
||||
# Sync and initialize all third-party/ git submodules from .gitmodules (recursive nested).
|
||||
# Used by rebuild.sh, ci-build.sh, and deploy paths — no network except submodule fetch/update.
|
||||
set -euo pipefail
|
||||
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
ONLY_PATH=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--only)
|
||||
ONLY_PATH="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
echo "Usage: $0 [--only third-party/wireguard-android]"
|
||||
echo " Initializes every path in .gitmodules under third-party/ (recursive)."
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "error: unknown argument: $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ! -f .gitmodules ]]; then
|
||||
echo "error: .gitmodules not found in $ROOT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mapfile -t SUB_PATHS < <(git config -f .gitmodules --get-regexp '^submodule\..*\.path$' \
|
||||
| awk '{ print $2 }' | grep '^third-party/' | sort -u)
|
||||
|
||||
if [[ ${#SUB_PATHS[@]} -eq 0 ]]; then
|
||||
echo "error: no third-party paths in .gitmodules" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "$ONLY_PATH" ]]; then
|
||||
SUB_PATHS=("$ONLY_PATH")
|
||||
fi
|
||||
|
||||
ensure_gitlink() {
|
||||
local path="$1"
|
||||
local name="$path"
|
||||
if git cat-file -e "HEAD:${path}" 2>/dev/null \
|
||||
|| git ls-files --stage "$path" | grep -q '^160000'; then
|
||||
return 0
|
||||
fi
|
||||
local url
|
||||
url="$(git config -f .gitmodules --get "submodule.${name}.url" || true)"
|
||||
if [[ -z "$url" ]]; then
|
||||
echo "error: $path listed in .gitmodules but no gitlink in tree and no url" >&2
|
||||
return 1
|
||||
fi
|
||||
local sha
|
||||
sha="$(git ls-remote "$url" HEAD | awk 'NR==1 {print $1}')"
|
||||
if [[ -z "$sha" ]]; then
|
||||
echo "error: could not resolve HEAD for $url (needed to register missing gitlink)" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "WARN: registering missing gitlink for $path at $sha (commit this gitlink)" >&2
|
||||
git update-index --add --cacheinfo 160000,"$sha","$path"
|
||||
}
|
||||
|
||||
validate_path() {
|
||||
local path="$1"
|
||||
case "$path" in
|
||||
third-party/wireguard-android)
|
||||
[[ -d "$path/tunnel/src/main/java" ]] \
|
||||
&& [[ -f "$path/tunnel/tools/wireguard-tools/src/config.c" ]] \
|
||||
&& [[ -f "$path/tunnel/tools/elf-cleaner/elf-cleaner.cpp" || -f "$path/tunnel/tools/elf-cleaner/main.cpp" ]]
|
||||
;;
|
||||
third-party/libvpx)
|
||||
[[ -d "$path" ]]
|
||||
;;
|
||||
third-party/opus|third-party/speex)
|
||||
[[ -f "$path/configure" || -f "$path/CMakeLists.txt" || -d "$path/include" ]]
|
||||
;;
|
||||
*)
|
||||
[[ -d "$path" ]]
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
echo "==> third-party submodules: sync + update --init --recursive"
|
||||
for path in "${SUB_PATHS[@]}"; do
|
||||
if ! grep -q "$path" .gitmodules 2>/dev/null; then
|
||||
echo "error: $path not in .gitmodules" >&2
|
||||
exit 1
|
||||
fi
|
||||
ensure_gitlink "$path"
|
||||
git submodule sync "$path"
|
||||
git submodule update --init --recursive "$path"
|
||||
if ! validate_path "$path"; then
|
||||
echo "error: $path incomplete after submodule update (nested submodules missing?)" >&2
|
||||
exit 1
|
||||
fi
|
||||
short="$(git -C "$path" rev-parse --short HEAD 2>/dev/null || echo '?')"
|
||||
echo " $path @ $short"
|
||||
done
|
||||
|
||||
if [[ -d third-party/wireguard-android/tunnel ]]; then
|
||||
wg_tools="$(git -C third-party/wireguard-android/tunnel/tools/wireguard-tools rev-parse --short HEAD 2>/dev/null || echo '?')"
|
||||
echo " third-party/wireguard-android/tunnel/tools/wireguard-tools @ $wg_tools"
|
||||
fi
|
||||
|
||||
echo "==> third-party submodules ready"
|
||||
Reference in New Issue
Block a user