All of lore.kernel.org
 help / color / mirror / Atom feed
From: Karthik Nayak <karthik.188@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Eric Sunshine <sunshine@sunshineco.com>, Git List <git@vger.kernel.org>
Subject: Re: [PATCH v3 12/15] ref-filter: align: introduce long-form syntax
Date: Tue, 26 Jan 2016 15:10:44 +0530	[thread overview]
Message-ID: <CAOLa=ZSnDe=q8SpicYW6gNKmNts3K=FpCFq6q8t_pUv+8AZhnQ@mail.gmail.com> (raw)
In-Reply-To: <xmqqa8ntdxzs.fsf@gitster.mtv.corp.google.com>

On Tue, Jan 26, 2016 at 5:15 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Eric Sunshine <sunshine@sunshineco.com> writes:
>
>>> +               git for-each-ref --format="|%(align:$option)refname is %(refname)%(end)|%(refname)" >actual &&
>>
>> This is not wrong, per se, but referencing $option inside the
>> non-interpolating single-quote context of the test body makes it a bit
>> harder to understand than it need be. As it is, at the time that the
>> test body actually gets executed, $option still evaluates to the
>> desired permutation value so it works.
>
> I think I said this in one of my recent reviews to somebody else,
> but this needs repeating.
>
> My position on this has been and still is a complete opposite.  It
> is a designed behaviour that variable references made inside test
> body that is quoted with sq pair can see the values of the variables
> that are defined outside test_expect_success, and you can freely use
> the global $TRASH_DIRECTORY, $_x40, etc. inside the test body that
> is quoted with single quote.  The $option here is no different.
>
> In fact, it is more desirable to avoid double-quoting the test body.
> The problem with using double-quote around the test body and
> formulating the executable shell script using variable interpolation
> before test_expect_success even runs is that you would be tempted to
> do something silly like this:
>
>     HEAD_SHA1=$(git rev-parse --verify HEAD)
>
>     test_expect_success "check something" "
>         HEAD_SHA1=$(git rev-parse --verify HEAD) &&
>         ... do other things that should not move the HEAD ... &&
>         test '$(git rev-parse HEAD)' = '$HEAD_SHA1' &&
>         test '$SOME_VAR' = '$OTHER_VAR' &&
>     "
>
> It is not just error prone (if variable reference had a shell
> metacharacter in it, e.g. a single-quote in OTHER_VAR's value, you'd
> have a syntax error in the test body), but because two invocations
> of rev-parse in the above are both made before test_expect_success
> runs, and would yield the same value.  It is not even testing the
> right thing.  If you broke rev-parse, the invocation will not fail
> inside test_expect_success but outside when the arguments to that
> helper is being prepared.
>
> So please do not write something like this:
>
>>     test_align_permutations () {
>>         while ...
>>         do
>>             test_expect_success "align:$option" "
>>                 git for-each-ref --format='...$option...' >actual &&
>>                 ...
>>             "
>>         done
>>     }
>
> but make it more like this:
>
>         for option in ...
>         do
>                 test_expect_success "align:$option" '
>                         git for-each-ref --format="...$option..." &&
>                         ...
>                 '
>         done
>

Thanks for this descriptive explanation, I shall use the suggested format.

-- 
Regards,
Karthik Nayak

  reply	other threads:[~2016-01-26  9:41 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-05  8:02 [PATCH v3 00/15] ref-filter: use parsing functions Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 01/15] strbuf: introduce strbuf_split_str_omit_term() Karthik Nayak
2016-01-05 19:24   ` Junio C Hamano
2016-01-06  7:27     ` Karthik Nayak
2016-01-21 19:47       ` Eric Sunshine
2016-01-25  6:12         ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 02/15] ref-filter: use strbuf_split_str_omit_term() Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 03/15] ref-filter: bump 'used_atom' and related code to the top Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 04/15] ref-filter: introduce struct used_atom Karthik Nayak
2016-01-21 19:04   ` Eric Sunshine
2016-01-25  6:13     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 05/15] ref-filter: introduce parsing functions for each valid atom Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 06/15] ref-fitler: bump match_atom() name to the top Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 07/15] ref-filter: skip deref specifier in match_atom_name() Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 08/15] ref-filter: introduce color_atom_parser() Karthik Nayak
2016-01-05 20:49   ` Junio C Hamano
2016-01-06  7:52     ` Karthik Nayak
2016-01-05 21:06   ` Junio C Hamano
2016-01-06 10:16     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 09/15] ref-filter: introduce align_atom_parser() Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 10/15] ref-filter: introduce parse_align_position() Karthik Nayak
2016-01-25 21:49   ` Eric Sunshine
2016-01-26 11:34     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 11/15] ref-filter: convert variable 'width' to an unsigned int Karthik Nayak
2016-01-05 21:12   ` Junio C Hamano
2016-01-06 10:17     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 12/15] ref-filter: align: introduce long-form syntax Karthik Nayak
2016-01-25 22:58   ` Eric Sunshine
2016-01-25 23:45     ` Junio C Hamano
2016-01-26  9:40       ` Karthik Nayak [this message]
2016-01-26  9:30     ` Karthik Nayak
2016-01-26  5:16   ` Christian Couder
2016-01-26  9:39     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 13/15] ref-filter: introduce remote_ref_atom_parser() Karthik Nayak
2016-01-26  0:28   ` Eric Sunshine
2016-01-26 10:02     ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 14/15] ref-filter: introduce contents_atom_parser() Karthik Nayak
2016-01-05 21:22   ` Junio C Hamano
2016-01-06 18:22     ` Karthik Nayak
2016-01-07 18:04       ` Junio C Hamano
2016-01-07 20:03         ` Karthik Nayak
2016-01-05  8:03 ` [PATCH v3 15/15] ref-filter: introduce objectname_atom_parser() Karthik Nayak
2016-01-05 21:31   ` Junio C Hamano
2016-01-06 18:27     ` Karthik Nayak
2016-01-06 21:14 ` [PATCH v3 00/15] ref-filter: use parsing functions Eric Sunshine
2016-01-07 14:25   ` Karthik Nayak
2016-01-07 18:43     ` Junio C Hamano
2016-01-07 20:20       ` Karthik Nayak
2016-01-07 20:36       ` Eric Sunshine
2016-01-07 20:44       ` Karthik Nayak
2016-01-07 21:28         ` Junio C Hamano
2016-01-09  9:00           ` Karthik Nayak

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='CAOLa=ZSnDe=q8SpicYW6gNKmNts3K=FpCFq6q8t_pUv+8AZhnQ@mail.gmail.com' \
    --to=karthik.188@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=sunshine@sunshineco.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.
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.