#!/bin/sh set -eu repo_root=$(git rev-parse --show-toplevel) branch=${1:-$(git symbolic-ref --quiet --short HEAD 2>/dev/null || true)} case "$branch" in master) ;; *) exit 0 ;; esac remote_host=${CPONE_REMOTE_HOST:-one@cpone.aplikasi.web.id} remote_root=${CPONE_REMOTE_ROOT:-/home/one/project/one/one-api} ssh_key=${CPONE_SSH_KEY:-/Users/fajrihardhitamurti/.ssh/id_rsa} tmpdir=$(mktemp -d "${TMPDIR:-/tmp}/cpone-sync.XXXXXX") trap 'rm -rf "$tmpdir"' EXIT HUP INT TERM manifest="$tmpdir/files.list" verify_list="$tmpdir/files.verify" if git rev-parse --verify HEAD^ >/dev/null 2>&1; then git diff -M --name-only -z --diff-filter=ACMR HEAD^ HEAD > "$manifest" else git ls-files -z > "$manifest" fi if [ ! -s "$manifest" ]; then exit 0 fi ssh_args="-o BatchMode=yes" if [ -f "$ssh_key" ]; then ssh_args="-i $ssh_key $ssh_args" fi ssh $ssh_args "$remote_host" "mkdir -p '$remote_root'" >/dev/null # backup file lama sebelum upload (disimpan di folder yang sama dengan suffix timestamp) ts=$(date +%Y%m%d_%H%M%S) tr '\0' '\n' < "$manifest" | while IFS= read -r relpath; do [ -n "$relpath" ] || continue ssh $ssh_args "$remote_host" " src='$remote_root/$relpath' if [ -f \"\$src\" ]; then cp \"\$src\" \"\$src.$ts\" fi " done rsync -a --relative --from0 --files-from="$manifest" -e "ssh $ssh_args" "$repo_root"/ "$remote_host:$remote_root"/ tr '\0' '\n' < "$manifest" > "$verify_list" while IFS= read -r relpath; do [ -n "$relpath" ] || continue ssh $ssh_args "$remote_host" "test -e '$remote_root/$relpath'" || { printf '%s\n' "cpone verify failed: missing $remote_root/$relpath" >&2 exit 1 } done < "$verify_list"