git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3 12/15] ref-filter: align: introduce long-form syntax

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Jan 25, 2016, 22:58 UTC
Message-ID
<CAPig+cT56AiO-3GNzia7UsGZFM5zu5zsEC31XPuq-by1p4+sbw@mail.gmail.com>
In-Reply-To
<1451980994-26865-13-git-send-email-Karthik.188@gmail.com>
On Tue, Jan 5, 2016 at 3:03 AM, Karthik Nayak <karthik.188@gmail.com> wrote:
Show 26 quoted lines
> Introduce optional prefixes "width=" and "position=" for the align atom
> so that the atom can be used as "%(align:width=<width>,position=<position>)".
>
> Add Documetation and tests for the same.
>
> Helped-by: Eric Sunshine <sunshine@sunshineco.com>
> Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
> ---
> diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh
> index fe4796c..0c4417f 100755
> --- a/t/t6302-for-each-ref-filter.sh
> +++ b/t/t6302-for-each-ref-filter.sh
> @@ -133,6 +133,47 @@ test_expect_success 'right alignment' '
> +cat >expect <<-\EOF
> +|       refname is refs/heads/master       |refs/heads/master
> +|        refname is refs/heads/side        |refs/heads/side
> +|         refname is refs/odd/spot         |refs/odd/spot
> +|     refname is refs/tags/double-tag      |refs/tags/double-tag
> +|        refname is refs/tags/four         |refs/tags/four
> +|         refname is refs/tags/one         |refs/tags/one
> +|     refname is refs/tags/signed-tag      |refs/tags/signed-tag
> +|        refname is refs/tags/three        |refs/tags/three
> +|         refname is refs/tags/two         |refs/tags/two
> +EOF
> +
> +test_align_permutations() {
Style: in shell scripts, add space before ()
> +       while read -r option; do
Style: drop semi-colon and place 'do' on its own line
> +               test_expect_success 'align permutations' '

This title is not as illuminating as it could be. It would be better to indicate which permutation is being tested. For instance:

    test_expect_success "align:$option" ...
Note the double-quotes. Or:
    test_expect_success "align permutation: $option" ...
or something.
> +               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. However, it would show intent more clearly and be more robust to use a double-quote context to interpolate $option into the git-for-each-ref invocation directly rather than allowing the test body to pick up the value at execution time.

Fixing this means using double- rather than single-quotes for the test body, which means you'd also want to flip the double-quotes wrapping the --format= argument over to single-quotes. Also, for style consistency, indent the test body. The end result should be something like this:

    test_align_permutations () {
        while ...
        do
            test_expect_success "align:$option" "
                git for-each-ref --format='...$option...' >actual &&
                ...
            "
        done
    }
> +               test_cmp expect actual
> +               '
> +       done;
Style: drop the semi-colon
More below...
Show 21 quoted lines
> +}
> +
> +test_align_permutations <<-\EOF
> +       middle,42
> +       42,middle
> +       position=middle,42
> +       42,position=middle
> +       middle,width=42
> +       width=42,middle
> +       position=middle,width=42
> +       width=42,position=middle
> +EOF
> +
> +# Last one wins (silently) when multiple arguments of the same type are given
> +
> +test_align_permutations <<-\EOF
> +       32,width=42,middle
> +       width=30,42,middle
> +       width=42,position=right,middle
> +       42,right,position=middle
> +EOF

Overall, this version is much nicer now that the tests are table-driven rather than each permutation being copied/pasted.

This is a tangent, but it's disappointing that this entire test script is skipped if GPG is not installed, especially since none of these tests seem to care at all about signed tags. By requiring GPG (unnecessarily), these tests likely are not getting run as widely as they ought to. Consequently, it probably would be a good idea to drop the GPG requirement from the top of the file and have the "setup" test create lightweight tags ("git tag ...") rather than signed ones ("git tag -s ...").

Previous: Karthik NayakNext: Junio C Hamano
Message 28 of 52 in “ref-filter: use parsing functions”
  1. 00/15 ref-filter: use parsing functionsKarthik Nayak, Jan 5, 2016
  2. 01/15 strbuf: introduce strbuf_split_str_omit_term()Karthik Nayak, Jan 5, 2016
  3. Junio C HamanoJan 5, 2016
  4. Karthik NayakJan 6, 2016
  5. Eric SunshineJan 21, 2016
  6. Karthik NayakJan 25, 2016
  7. 02/15 ref-filter: use strbuf_split_str_omit_term()Karthik Nayak, Jan 5, 2016
  8. 03/15 ref-filter: bump 'used_atom' and related code to the topKarthik Nayak, Jan 5, 2016
  9. 04/15 ref-filter: introduce struct used_atomKarthik Nayak, Jan 5, 2016
  10. Eric SunshineJan 21, 2016
  11. Karthik NayakJan 25, 2016
  12. 05/15 ref-filter: introduce parsing functions for each valid atomKarthik Nayak, Jan 5, 2016
  13. 06/15 ref-fitler: bump match_atom() name to the topKarthik Nayak, Jan 5, 2016
  14. 07/15 ref-filter: skip deref specifier in match_atom_name()Karthik Nayak, Jan 5, 2016
  15. 08/15 ref-filter: introduce color_atom_parser()Karthik Nayak, Jan 5, 2016
  16. Junio C HamanoJan 5, 2016
  17. Karthik NayakJan 6, 2016
  18. Junio C HamanoJan 5, 2016
  19. Karthik NayakJan 6, 2016
  20. 09/15 ref-filter: introduce align_atom_parser()Karthik Nayak, Jan 5, 2016
  21. 10/15 ref-filter: introduce parse_align_position()Karthik Nayak, Jan 5, 2016
  22. Eric SunshineJan 25, 2016
  23. Karthik NayakJan 26, 2016
  24. 11/15 ref-filter: convert variable 'width' to an unsigned intKarthik Nayak, Jan 5, 2016
  25. Junio C HamanoJan 5, 2016
  26. Karthik NayakJan 6, 2016
  27. 12/15 ref-filter: align: introduce long-form syntaxKarthik Nayak, Jan 5, 2016
  28. Eric SunshineJan 25, 2016
  29. Junio C HamanoJan 25, 2016
  30. Karthik NayakJan 26, 2016
  31. Karthik NayakJan 26, 2016
  32. Christian CouderJan 26, 2016
  33. Karthik NayakJan 26, 2016
  34. 13/15 ref-filter: introduce remote_ref_atom_parser()Karthik Nayak, Jan 5, 2016
  35. Eric SunshineJan 26, 2016
  36. Karthik NayakJan 26, 2016
  37. 14/15 ref-filter: introduce contents_atom_parser()Karthik Nayak, Jan 5, 2016
  38. Junio C HamanoJan 5, 2016
  39. Karthik NayakJan 6, 2016
  40. Junio C HamanoJan 7, 2016
  41. Karthik NayakJan 7, 2016
  42. 15/15 ref-filter: introduce objectname_atom_parser()Karthik Nayak, Jan 5, 2016
  43. Junio C HamanoJan 5, 2016
  44. Karthik NayakJan 6, 2016
  45. Eric SunshineJan 6, 2016
  46. Karthik NayakJan 7, 2016
  47. Junio C HamanoJan 7, 2016
  48. Karthik NayakJan 7, 2016
  49. Eric SunshineJan 7, 2016
  50. Karthik NayakJan 7, 2016
  51. Junio C HamanoJan 7, 2016
  52. Karthik NayakJan 9, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.