hooks--pre-commit: detect non-ASCII when renaming
PATCH 1/1 hooks--pre-commit: detect non-ASCII when renaming
From: Julian Prein <[email protected]>
Currently the diff-filter that is used to check for non-ASCII characters in filenames only checks new additions.
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.
---
hooks--pre-commit: detect non-ASCII when renaming
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1291%2Fdruckdev%2Fpre-commit-renames-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1291/druckdev/pre-commit-renames-v1
Pull-Request: https://github.com/git/git/pull/1291
templates/hooks--pre-commit.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
templates/hooks--pre-commit.sample +1 -1
@@ -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 --cached --name-only --diff-filter=ACR -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOF
base-commit: bbea4dcf42b28eb7ce64a6306cdde875ae5d09ca
Signature · 1 line
gitgitgadget
Quoted 8 lines · Julian Prein via GitGitGadget
From: Julian Prein <[email protected]>
Currently the diff-filter that is used to check for non-ASCII characters in filenames only checks new additions.
Extend the diff-filter in the pre-commit sample to include
CRas well. This way non-ASCII character in filenames are detected on a rename/copy as well.
It would probably be a better implementation to disable the rename detection, instead of adding Copies and Renames.
Quoted 26 lines
Signed-off-by Julian Prein <[email protected]>---
hooks--pre-commit: detect non-ASCII when renamingPublished-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-1291%2Fdruckdev%2Fpre-commit-renames-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-1291/druckdev/pre-commit-renames-v1
Pull-Request: https://github.com/git/git/pull/1291templates/hooks--pre-commit.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)templates/hooks--pre-commit.sample +1
-1@@ -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 --cached --name-only --diff-filter=ACR -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then cat <<\EOFbase-commit:
bbea4dcf42b28eb7ce64a6306cdde875ae5d09ca
Quoted 7 lines · Junio C Hamano
Quoted 5 lines · Julian Prein via GitGitGadget
From: Julian Prein <[email protected]>
Currently the diff-filter that is used to check for non-ASCII characters in filenames only checks new additions.
Quoted 6 lines
Quoted 3 lines
Extend the diff-filter in the pre-commit sample to include
CRas well. This way non-ASCII character in filenames are detected on a rename/copy as well.It would probably be a better implementation to disable the rename detection, instead of adding Copies and Renames.
That is ...
Quoted 1 line
templates/hooks--pre-commit.sample if [ "$allownonascii" != "true" ] && · line 31
Quoted 1 line
templates/hooks--pre-commit.sample +0
-1- test $(git diff --cached --name-only --diff-filter=A -z $against |
... instead of using the "git diff" Porcelain, we can probably use the "git diff-index" plumbing command here, which will not be affected by end-user configuration or by the fact that recent "git diff" turns on the rename detection by default.
PATCH v2 1/1 hooks--pre-commit: detect non-ASCII when renaming
In reply to Julian Prein via GitGitGadgetFrom: Julian Prein <[email protected]>
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.
---
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 Hamano
Published-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.
@@ 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 <<\EOF
templates/hooks--pre-commit.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
templates/hooks--pre-commit.sample +1 -1
@@ -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
Signature · 1 line
gitgitgadget
Quoted 8 lines · Julian Prein via GitGitGadget
From: Julian Prein <[email protected]>
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.
Makes sense.
An obvious alternative would be to pass "--no-renames" and keep using the Porcelain "git diff", but this is how the plumbing "diff-index" and friends are meant to be used. Looking good.
Will queue. Thanks.