git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Ben Walton <bdwalton@gmail.com>
To: Junio C Hamano <gitster@pobox.com>,
	Jonathan Nieder <jrnieder@gmail.com>,
	Johannes Sixt <j6t@kdbg.org>
Cc: git <git@vger.kernel.org>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Ben Walton" <bdwalton@gmail.com>
Subject: Re: [PATCH] Avoid difference in tr semantics between System V and BSD
Date: Mon, 28 Oct 2013 21:43:57 +0000	[thread overview]
Message-ID: <CAP30j164JyuZ7TZ=LhaGWMX4VLyX_T7nS6Mn9ztrjKfJRM2mnw@mail.gmail.com> (raw)
In-Reply-To: <1382996441-18926-1-git-send-email-bdwalton@gmail.com>

Ignore this version. The immediate followup quotes PERL_PATH.

On Mon, Oct 28, 2013 at 9:40 PM, Ben Walton <bdwalton@gmail.com> wrote:
> Solaris' tr (both /usr/bin/ and /usr/xpg4/bin) uses the System V
> semantics for tr whereby string1's length is truncated to the length
> of string2 if string2 is shorter. The BSD semantics, as used by GNU tr
> see string2 padded to the length of string1 using the final character
> in string2. POSIX explicitly doesn't specify the correct behavior
> here, making both equally valid.
>
> This difference means that Solaris' native tr implementations produce
> different results for tr ":\t\n" "\0" than GNU tr. This breaks a few
> tests in t0008-ignores.sh.
>
> Possible fixes for this are to make string2 be "\0\0\0" or "[\0*]".
>
> Instead, use perl to perform these transliterations which means we
> don't need to worry about the difference at all. Since we're replacing
> tr with perl, we also use perl to replace the sed invocations used to
> transform the files.
>
> Replace four identical transforms with a function named
> broken_c_unquote. Replace the other two identical transforms with a
> fuction named broken_c_unquote_verbose.
>
> Signed-off-by: Ben Walton <bdwalton@gmail.com>
> ---
>  t/t0008-ignores.sh | 30 ++++++++++++++++++------------
>  1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
> index 181513a..45f9396 100755
> --- a/t/t0008-ignores.sh
> +++ b/t/t0008-ignores.sh
> @@ -37,6 +37,14 @@ test_stderr () {
>         test_cmp "$HOME/expected-stderr" "$HOME/stderr"
>  }
>
> +broken_c_unquote () {
> +       $PERL_PATH -pe 's/^"//; s/\\//; s/"$//; tr/\n/\0/' "$@"
> +}
> +
> +broken_c_unquote_verbose () {
> +       $PERL_PATH -pe 's/      "/      /; s/\\//; s/"$//; tr/:\t\n/\0/' "$@"
> +}
> +
>  stderr_contains () {
>         regexp="$1"
>         if grep "$regexp" "$HOME/stderr"
> @@ -606,12 +614,11 @@ cat <<-EOF >expected-verbose
>         $global_excludes:2:!globaltwo   b/globaltwo
>  EOF
>
> -sed -e 's/^"//' -e 's/\\//' -e 's/"$//' stdin | \
> -       tr "\n" "\0" >stdin0
> -sed -e 's/^"//' -e 's/\\//' -e 's/"$//' expected-default | \
> -       tr "\n" "\0" >expected-default0
> -sed -e 's/     "/      /' -e 's/\\//' -e 's/"$//' expected-verbose | \
> -       tr ":\t\n" "\0" >expected-verbose0
> +broken_c_unquote stdin >stdin0
> +
> +broken_c_unquote expected-default >expected-default0
> +
> +broken_c_unquote_verbose expected-verbose >expected-verbose0
>
>  test_expect_success '--stdin' '
>         expect_from_stdin <expected-default &&
> @@ -692,12 +699,11 @@ EOF
>  grep -v '^::   ' expected-all >expected-verbose
>  sed -e 's/.*   //' expected-verbose >expected-default
>
> -sed -e 's/^"//' -e 's/\\//' -e 's/"$//' stdin | \
> -       tr "\n" "\0" >stdin0
> -sed -e 's/^"//' -e 's/\\//' -e 's/"$//' expected-default | \
> -       tr "\n" "\0" >expected-default0
> -sed -e 's/     "/      /' -e 's/\\//' -e 's/"$//' expected-verbose | \
> -       tr ":\t\n" "\0" >expected-verbose0
> +broken_c_unquote stdin >stdin0
> +
> +broken_c_unquote expected-default >expected-default0
> +
> +broken_c_unquote_verbose expected-verbose >expected-verbose0
>
>  test_expect_success '--stdin from subdirectory' '
>         expect_from_stdin <expected-default &&
> --
> 1.8.1.2
>



-- 
---------------------------------------------------------------------------------------------------------------------------
Take the risk of thinking for yourself.  Much more happiness,
truth, beauty and wisdom will come to you that way.

-Christopher Hitchens
---------------------------------------------------------------------------------------------------------------------------

  reply	other threads:[~2013-10-28 21:44 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-18 21:17 [PATCH] Avoid broken Solaris tr Ben Walton
2013-06-18 22:31 ` Junio C Hamano
2013-10-28  9:02   ` Ben Walton
2013-10-28  9:13     ` [PATCH] Avoid difference in tr semantics between System V and BSD Ben Walton
2013-10-28 18:07       ` Johannes Sixt
2013-10-28 18:27         ` Jonathan Nieder
2013-10-28 19:08           ` Junio C Hamano
2013-10-28 19:22             ` [PATCH] t/README: tests can use perl even with NO_PERL Jonathan Nieder
2013-10-28 19:46               ` Johannes Sixt
2013-10-28 19:54               ` Jeff King
2013-10-28 21:04                 ` Jonathan Nieder
2013-10-28 21:43                   ` Ben Walton
2013-10-29  1:18                   ` [RFC/PATCH 0/3] perl Jeff King
2013-10-29  1:19                     ` [PATCH 1/3] use @@PERL@@ in built scripts Jeff King
2013-10-29 19:41                       ` Junio C Hamano
2013-10-29  1:22                     ` [PATCH 2/3] t: provide a perl() function which uses $PERL_PATH Jeff King
2013-10-29  1:23                     ` [PATCH 3/3] t: use perl instead of "$PERL_PATH" where applicable Jeff King
2013-10-28 21:04             ` [PATCH] Avoid difference in tr semantics between System V and BSD Ben Walton
2013-10-28 21:12               ` Ben Walton
2013-10-28 21:30                 ` Junio C Hamano
2013-10-28 21:40                   ` Ben Walton
2013-10-28 21:43                     ` Ben Walton [this message]
2013-10-28 21:43                   ` Ben Walton
2013-10-30 17:39                     ` Junio C Hamano

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAP30j164JyuZ7TZ=LhaGWMX4VLyX_T7nS6Mn9ztrjKfJRM2mnw@mail.gmail.com' \
    --to=bdwalton@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=jrnieder@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).