mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 11:49:28 +00:00
26 lines
1000 B
Bash
26 lines
1000 B
Bash
#!/bin/sh
|
|||
|
|
# Explicit installation only. Never edit core.hooksPath or overwrite a hook.
|
||
|
|
set -eu
|
||
|
|
repo=${1:-.}
|
||
|
|
source_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||
|
|
hook_dir=$(git -C "$repo" rev-parse --path-format=absolute --git-path hooks)
|
||
|
|
hook="$hook_dir/pre-push"
|
||
|
|
mkdir -p -- "$(dirname -- "$hook")"
|
||
|
|
# Resolve only the directory: Git canonicalizes a final hook symlink to its target.
|
||
|
|
# O_EXCL refuses every pre-existing final path, including dangling symlinks.
|
||
|
|
python3 - "$source_dir/pre-push" "$hook" <<'PY'
|
||
|
|
import os
|
||
|
|
import shutil
|
||
|
|
import sys
|
||
|
|
try:
|
||
|
|
with open(sys.argv[1], 'rb') as source:
|
||
|
|
fd = os.open(sys.argv[2], os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o755)
|
||
|
|
with os.fdopen(fd, 'wb') as target:
|
||
|
|
shutil.copyfileobj(source, target)
|
||
|
|
os.fchmod(target.fileno(), 0o755)
|
||
|
|
except OSError:
|
||
|
|
print('Installation refused: hook exists or cannot be created. See ops/README.md.', file=sys.stderr)
|
||
|
|
sys.exit(1)
|
||
|
|
PY
|
||
|
|
printf 'Installed %s\n' "$hook"
|