From: Jim Meyering <jim@meyering.net>
To: Andreas Schwab <schwab@linux-m68k.org>
Cc: git list <git@vger.kernel.org>
Subject: Re: [PATCH] make the sample pre-commit hook script reject names with newlines, too
Date: Sat, 22 Oct 2011 19:44:40 +0200 [thread overview]
Message-ID: <87aa8sgbuf.fsf@rho.meyering.net> (raw)
In-Reply-To: <m262jhoro1.fsf@igel.home> (Andreas Schwab's message of "Sat, 22 Oct 2011 19:35:42 +0200")
Andreas Schwab wrote:
> Jim Meyering <jim@meyering.net> writes:
>
>> @@ -26,7 +29,7 @@ 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 |
>> - LC_ALL=C tr -d '[ -~]\0')"
>> + LC_ALL=C tr -d '[ -~]\0' | wc -c)" != 0
>
> This will fail if the output of wc contains leading spaces.
Good point. Thanks. That's a portability bug.
GNU wc outputs no leading spaces, but others certainly do.
Removing the double quotes fixes that:
-- >8 --
Subject: [PATCH] make the sample pre-commit hook script reject names with
newlines, too
The sample pre-commit hook script would fail to reject a file name
like "a\nb" because of the way newlines are handled in "$(...)".
Adjust the test to count filtered bytes and require there be 0.
Also print all diagnostics to standard error, not stdout, so they
will actually be seen.
Signed-off-by: Jim Meyering <meyering@redhat.com>
---
templates/hooks--pre-commit.sample | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/templates/hooks--pre-commit.sample b/templates/hooks--pre-commit.sample
index b187c4b..18c4829 100755
--- a/templates/hooks--pre-commit.sample
+++ b/templates/hooks--pre-commit.sample
@@ -18,6 +18,9 @@ fi
# If you want to allow non-ascii filenames set this variable to true.
allownonascii=$(git config hooks.allownonascii)
+# Redirect output to stderr.
+exec 1>&2
+
# Cross platform projects tend to avoid non-ascii filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
@@ -25,8 +28,8 @@ 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 |
- LC_ALL=C tr -d '[ -~]\0')"
+ test $(git diff --cached --name-only --diff-filter=A -z $against |
+ LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
echo "Error: Attempt to add a non-ascii file name."
echo
@@ -43,4 +46,5 @@ then
exit 1
fi
+# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --
--
1.7.7.419.g87009
prev parent reply other threads:[~2011-10-22 17:44 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-22 17:19 [PATCH] make the sample pre-commit hook script reject names with newlines, too Jim Meyering
2011-10-22 17:35 ` Andreas Schwab
2011-10-22 17:44 ` Jim Meyering [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87aa8sgbuf.fsf@rho.meyering.net \
--to=jim@meyering.net \
--cc=git@vger.kernel.org \
--cc=schwab@linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.