File size: 1,981 Bytes
8d0b310
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
# sync-check.sh: enforce the "stay close to upstream" fork policy.
#
# Fetches antirez/ds4 and reports how far this fork has diverged. It fails if:
#   - upstream cannot be fetched, or
#   - this fork is behind upstream by more than FORK_BEHIND_MAX commits, or
#   - this fork is ahead by more than FORK_AHEAD_MAX commits AND FORK_NOTES.md
#     has not been modified more recently than the divergence base.
#
# Intended for CI. Override thresholds via env vars.

set -e

UPSTREAM_REMOTE="${UPSTREAM_REMOTE:-upstream}"
UPSTREAM_REF="${UPSTREAM_REF:-main}"
FORK_BEHIND_MAX="${FORK_BEHIND_MAX:-50}"
FORK_AHEAD_MAX="${FORK_AHEAD_MAX:-200}"

cd "$(dirname "$0")/.."

if ! git remote get-url "$UPSTREAM_REMOTE" >/dev/null 2>&1; then
    echo "sync-check: no '$UPSTREAM_REMOTE' remote configured; skipping."
    exit 0
fi

git fetch -q "$UPSTREAM_REMOTE" "$UPSTREAM_REF"

BASE="$(git merge-base HEAD "$UPSTREAM_REMOTE/$UPSTREAM_REF")"
BEHIND="$(git rev-list --count "$BASE".."$UPSTREAM_REMOTE/$UPSTREAM_REF")"
AHEAD="$(git rev-list --count "$BASE"..HEAD)"

echo "sync-check: behind upstream by $BEHIND commit(s), ahead by $AHEAD commit(s)."

if [ "$BEHIND" -gt "$FORK_BEHIND_MAX" ]; then
    echo "sync-check: FAIL: $BEHIND commits behind upstream (max $FORK_BEHIND_MAX)."
    echo "sync-check: merge or rebase antirez/ds4 and update FORK_NOTES.md."
    exit 1
fi

if [ "$AHEAD" -gt "$FORK_AHEAD_MAX" ]; then
    NOTES="$(git log --format=%H -1 -- FORK_NOTES.md || true)"
    if [ -z "$NOTES" ] || [ "$(git merge-base "$NOTES" "$BASE")" != "$BASE" ] && \
       [ "$(git rev-list --count "$BASE".."$NOTES")" -eq 0 ]; then
        echo "sync-check: FAIL: $AHEAD commits ahead of upstream (max $FORK_AHEAD_MAX)"
        echo "sync-check: without a recent FORK_NOTES.md update. Document the"
        echo "sync-check: divergence before merging."
        exit 1
    fi
    echo "sync-check: ahead by $AHEAD (over threshold) but FORK_NOTES.md is current."
fi

echo "sync-check: OK"