[PATCH v2] hooks--pre-commit: detect non-ASCII when renaming
- From
Julian Prein via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Nov 30, 2023, 16:13 UTC
- Message-ID
- <pull.1291.v2.git.git.1701360836307.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1291.git.git.1657837073372.gitgitgadget@gmail.com>
From: Julian Prein <druckdev@protonmail.com>
When diff.renames is turned on, the diff-filter will not return renamed files (or copied ones with diff.renames=copy) and potential non-ASCII characters would not be caught by this hook.
Use the plumbing command diff-index instead of the porcelain one to not be affected by diff.rename.
Signed-off-by: Julian Prein <druckdev@protonmail.com>
---
hooks--pre-commit: detect non-ASCII when renaming
A bit later than I expected, but here is v2.
Changes since v1:
* Switched to using diff-index and back to just the A filter as
suggested by Junio C HamanoPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1291%2Fdruckdev%2Fpre-commit-renames-v2 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1291/druckdev/pre-commit-renames-v2 Pull-Request: https://github.com/git/git/pull/1291
Range-diff vs v1:
1: 101f327a040 ! 1: 1f6ca0dd3eb hooks--pre-commit: detect non-ASCII when renaming
@@ Metadata
## Commit message ##
hooks--pre-commit: detect non-ASCII when renaming
- Currently the diff-filter that is used to check for non-ASCII characters
- in filenames only checks new additions.
+ When diff.renames is turned on, the diff-filter will not return renamed
+ files (or copied ones with diff.renames=copy) and potential non-ASCII
+ characters would not be caught by this hook.
- Extend the diff-filter in the pre-commit sample to include `CR` as well.
- This way non-ASCII character in filenames are detected on a rename/copy
- as well.
+ Use the plumbing command diff-index instead of the porcelain one to not
+ be affected by diff.rename.
Signed-off-by: Julian Prein <druckdev@protonmail.com>
@@ templates/hooks--pre-commit.sample: if [ "$allownonascii" != "true" ] &&
# even required, for portability to Solaris 10's /usr/bin/tr), since
# the square bracket bytes happen to fall in the designated range.
- test $(git diff --cached --name-only --diff-filter=A -z $against |
-+ test $(git diff --cached --name-only --diff-filter=ACR -z $against |
++ test $(git diff-index --cached --name-only --diff-filter=A -z $against |
LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
cat <<\EOFtemplates/hooks--pre-commit.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/hooks--pre-commit.sample b/templates/hooks--pre-commit.sample index e144712c85c..29ed5ee486a 100755 --- a/templates/hooks--pre-commit.sample +++ b/templates/hooks--pre-commit.sample @@ -28,7 +28,7 @@ if [ "$allownonascii" != "true" ] && # Note that the use of brackets around a tr range is ok here, (it's # even required, for portability to Solaris 10's /usr/bin/tr), since # the square bracket bytes happen to fall in the designated range. - test $(git diff --cached --name-only --diff-filter=A -z $against | + test $(git diff-index --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOF base-commit: 61a22ddaf0626111193a17ac12f366bd6d167dff
-- gitgitgadget