Re: Server-side preventing some files from being overwritten
From: Junio C Hamano <hidden>
Date: 2016-07-14 18:28:01
Thorsten Glaser [off-list ref] writes:
Although I’m ordinarily loath to write GNU bash scripts, this helps avoiding temporary files. This works: -----cutting here may damage your screen surface----- #!/bin/bash export LC_ALL=C subdir=x/y while IFS=' ' read -r old new name; do test x"$name" = x"refs/heads/master" || continue if test x"0" != x"$(comm -23z \ <(git ls-tree -r -z "$old" "$subdir" | sort -z) \ <(git ls-tree -r -z "$new" "$subdir" | sort -z) | wc -c)"; then echo >&2 'Untouchable files touched, commit rejected!' exit 1 fi
Can't this become simpler, e.g. if ! git diff-tree --quiet "$old" "$new" -- "$subdir" then echo >&2 "Ooh, $subdir is touched" exit 1 fi
done exit 0 -----cutting here may damage your screen surface----- Of course, set “subdir” in line 3 correctly, and GNU coreutils are required for the NUL line termination, which is not an issue here. (BSD has “-R ''” for sort(1), for example.) bye, //mirabilos