Jeff King wrote: > On Mon, Sep 21, 2009 at 01:00:34PM +0200, Jim Meyering wrote: > >> > We have (had?) people trying to support Git on HP-UX and SunOS. >> > Do these count? >> >> I had my doubts, but have just confirmed that Solaris 10's >> /usr/bin/tr is still doing it the SYSV way: >> >> $ echo foo | LC_ALL=C /usr/bin/tr a-z A-Z >> foo >> >> There, you have to use /usr/xpg4/bin/tr to get the expected behavior: >> >> $ echo foo | LC_ALL=C /usr/xpg4/bin/tr a-z A-Z >> FOO >> >> So you're right. Thanks! > > See: > > http://article.gmane.org/gmane.comp.version-control.git/76991 > >> + # 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 | >> LC_ALL=C tr -d '[ -~]\0')" > > Does this work on non-bracket systems? Yes, since [] happen to fall in the range. > I would think that enumerating > the sequence would be the most portable thing. Enumerating is more portable, at the expense of readability and maintainability. In case you want to go that route, here's one more: (note that this, like the original range, treats TAB as nonportable) >From 40a368a7bcf0ac6524bbe36ba3bfdaa0711897b8 Mon Sep 17 00:00:00 2001 From: Jim Meyering <meyering@xxxxxxxxxx> Date: Mon, 21 Sep 2009 10:58:02 +0200 Subject: [PATCH] pre-commit.sample: use tr more portability; fix grammar Avoid tr's M-N range notation altogether. Instead, enumerate ascii bytes 32..126. Correct spelling and grammar. Signed-off-by: Jim Meyering <meyering@xxxxxxxxxx> --- templates/hooks--pre-commit.sample | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) diff --git a/templates/hooks--pre-commit.sample b/templates/hooks--pre-commit.sample index b11ad6a..896eb9e 100755 --- a/templates/hooks--pre-commit.sample +++ b/templates/hooks--pre-commit.sample @@ -10,19 +10,26 @@ # If you want to allow non-ascii filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) +printables=' !"#$%&'\''()*+,-./0123456789:;<=>?@' +printables="$printables"'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`' +printables="$printables"'abcdefghijklmnopqrstuvwxyz{|}~' + # 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. if [ "$allownonascii" != "true" ] && - test "$(git diff --cached --name-only --diff-filter=A -z | - LC_ALL=C tr -d '[ -~]\0')" + # Filter out printable ascii bytes, and NUL. + # If anything remains, you lose. + rem=$(git diff --cached --name-only --diff-filter=A -z | + LC_ALL=C tr -d "$printables"'\0') + test -n "$rem" then - echo "Error: Attempt to add a non-ascii filename." + echo "Error: Attempt to add a non-ascii file name." echo - echo "This can cause problems if you want to work together" - echo "with people on other platforms than you." + echo "This can cause problems if you want to work" + echo "with people on other platforms." echo - echo "To be portable it is adviseable to rename the file ..." + echo "To be portable it is advisable to rename the file ..." echo echo "If you know what you are doing you can disable this" echo "check using:" -- 1.6.5.rc1.214.g13c5a -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html