Code

tr portability fixes
authorJeff King <peff@peff.net>
Wed, 12 Mar 2008 21:29:57 +0000 (17:29 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Mar 2008 04:10:00 +0000 (21:10 -0700)
commit40a7ce64e146c79a966a8494d3a7e85826d7f4e9
tree3349632b86ba74d796700a57a8bae16386ebbfc2
parenta6828f536119c3288b0be772e3870f1a464d017d
tr portability fixes

Specifying character ranges in tr differs between System V
and POSIX. In System V, brackets are required (e.g.,
'[A-Z]'), whereas in POSIX they are not.

We can mostly get around this by just using the bracket form
for both sets, as in:

  tr '[A-Z] '[a-z]'

in which case POSIX interpets this as "'[' becomes '['",
which is OK.

However, this doesn't work with multiple sequences, like:

  # rot13
  tr '[A-Z][a-z]' '[N-Z][A-M][n-z][a-m]'

where the POSIX version does not behave the same as the
System V version. In this case, we must simply enumerate the
sequence.

This patch fixes problematic uses of tr in git scripts and
test scripts in one of three ways:

  - if a single sequence, make sure it uses brackets
  - if multiple sequences, enumerate
  - if extra brackets (e.g., tr '[A]' 'a'), eliminate
    brackets

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-bisect.sh
git-filter-branch.sh
t/t4022-diff-rewrite.sh
t/t7003-filter-branch.sh