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

Re: [PATCH v2 06/26] test: completion: add run_func() helper

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 11, 2020, 11:43 UTC
Message-ID
<CAMP44s0XA6QjOZTJaC5CK9Rp9ySfoH9_rJu-AoEGgprstzprfw@mail.gmail.com>
In-Reply-To
<xmqq1rh05p6f.fsf@gitster.c.googlers.com>
On Wed, Nov 11, 2020 at 1:27 AM Junio C Hamano <gitster@pobox.com> wrote:
Show 11 quoted lines
>
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
> > Pretty straightforward: runs functions.
>
> Hmph, sorry but this is not straight-forward at least to me.  Yes,
> the helper runs whatever is given on the command line, but then it
> does "print_comp", too.  And the proposed log message is not
> entirely clear on the most important thing: why?
>
> What is this "helper" meant to help?  Reduce repetition?

Well, I thought the "helper" part of the title made it obvious: the helper function does help in not having to type the same code over and over. But there's in fact multiple benefits.

1. It makes the code more consistent. Everything in the test script
either calls a test_ function, or a run_ function, except the code
that is testing the functions directly.
2. It reduces code (obvious in a helper function), as the same
__gitcomp* && print_comp is executed over and over, with zero
variation.
3. It makes the code more maintainable (I also thought this was
obvious); if we want to add something we don't have to do it dozens of
times, we just do it on the helper function.
Is this enough of a "why"?

It is in fact number 3 the one I'm after, and a line that shouldn't be part of this patch was smuggled in, so perhaps that's why future patches don't obviate the need for this one.

But even with no other reason for it, the patch stands on its own.
> > +run_func ()
> > +{
> > +     local -a COMPREPLY &&

This is the line that was smuggled in. It should be part of a separate patch, since this is behavior change.

Show 19 quoted lines
> > +     "$@" && print_comp
> > +}
> > +
> >  # Test high-level completion
> >  # Arguments are:
> >  # 1: typed text so far (cur)
> > @@ -452,8 +458,7 @@ test_expect_success '__gitcomp_direct - puts everything into COMPREPLY as-is' '
> >       EOF
> >       (
> >               cur=should_be_ignored &&
> > -             __gitcomp_direct "$(cat expected)" &&
> > -             print_comp
> > +             run_func __gitcomp_direct "$(cat expected)"
>
> This is an no-op rewrite, as we used to do the gitcomp-direct
> followed by print-comp, which is exactly what the helper does.  So
> the helper does reduce repetition, which by itself would be a good
> thing but is there other benefit we are trying to seek (there does
> not have to be any)?

It's not exactly a no-op, since I cleared COMPREPLY. That should be done in a separate patch so it's truly a no-op.

It is the clearing of COMPREPLY that I'm eventually interested in. First; that's how the testing framework is supposed to work: test #1 should not interfere with test #2, but second; once the gitcomp functions are changed to append code instead of clearing COMPREPLY by themselves and then appending, this prevents the tests from failing.

Show 7 quoted lines
> >  test_expect_success '__gitcomp - doesnt fail because of invalid variable name' '
> > -     __gitcomp "$invalid_variable_name"
> > +     run_func __gitcomp "$invalid_variable_name"
>
> This one changes the behaviour in that it starts running print_comp
> which we didn't run.  It may be a good thing and improvement, but
> then we'd better advertise it in the proposed log message.

But nothing is done with the output; the behavior doesn't change. The test still passes or fails irrespective of what print_comp does.

  test_expect_success 'test 1' 'true'
  test_expect_success 'test 2' ': echo foobar'
  test_expect_success 'test 3' 'echo foobar > /dev/null'

These three tests may do different things, but their behavior is the same, that is to say: with the same input they generate the same output.

Do you want me to add: "In two places we generate an output that didn't exist before, but nothing ever reads it." ?

Cheers.
-- 
Felipe Contreras
Previous: Junio C HamanoNext: Junio C Hamano
Message 12 of 36 in “completion: bash: a bunch of fixes, cleanups, and reorganization”
  1. 00/26 completion: bash: a bunch of fixes, cleanups, and reorganizationFelipe Contreras, Nov 10, 2020
  2. 01/26 completion: bash: fix prefix detection in branch.*Felipe Contreras, Nov 10, 2020
  3. SZEDER GáborNov 25, 2020
  4. Junio C HamanoNov 25, 2020
  5. Felipe ContrerasNov 25, 2020
  6. 02/26 completion: bash: add correct suffix in variablesFelipe Contreras, Nov 10, 2020
  7. 03/26 completion: bash: fix for suboptions with valueFelipe Contreras, Nov 10, 2020
  8. 04/26 completion: bash: do not modify COMP_WORDBREAKSFelipe Contreras, Nov 10, 2020
  9. 05/26 test: completion: fix currently typed wordsFelipe Contreras, Nov 10, 2020
  10. 06/26 test: completion: add run_func() helperFelipe Contreras, Nov 10, 2020
  11. Junio C HamanoNov 11, 2020
  12. Felipe ContrerasNov 11, 2020
  13. Junio C HamanoNov 11, 2020
  14. Felipe ContrerasNov 12, 2020
  15. 07/26 completion: bash: remove non-append functionalityFelipe Contreras, Nov 10, 2020
  16. 08/26 completion: bash: get rid of _append() functionsFelipe Contreras, Nov 10, 2020
  17. 10/26 completion: bash: factor out check in __gitcompFelipe Contreras, Nov 10, 2020
  18. 09/26 completion: bash: get rid of any non-append codeFelipe Contreras, Nov 10, 2020
  19. 11/26 completion: bash: simplify equal suffix checkFelipe Contreras, Nov 10, 2020
  20. 12/26 completion: bash: refactor __gitcompFelipe Contreras, Nov 10, 2020
  21. Junio C HamanoNov 12, 2020
  22. Felipe ContrerasNov 12, 2020
  23. 13/26 completion: bash: simplify __gitcompFelipe Contreras, Nov 10, 2020
  24. 15/26 completion: bash: improve __gitcomp suffix codeFelipe Contreras, Nov 10, 2020
  25. 14/26 completion: bash: change suffix check in __gitcompFelipe Contreras, Nov 10, 2020
  26. 16/26 completion: bash: simplify config_variable_nameFelipe Contreras, Nov 10, 2020
  27. 17/26 test: completion: switch __gitcomp_nl prefix testFelipe Contreras, Nov 10, 2020
  28. 18/26 completion: bash: simplify _get_comp_words_by_ref()Felipe Contreras, Nov 10, 2020
  29. 19/26 completion: bash: refactor _get_comp_words_by_ref()Felipe Contreras, Nov 10, 2020
  30. 20/26 completion: bash: cleanup _get_comp_words_by_ref()Felipe Contreras, Nov 10, 2020
  31. 21/26 completion: bash: trivial cleanupFelipe Contreras, Nov 10, 2020
  32. 22/26 completion: bash: rename _get_comp_words_by_ref()Felipe Contreras, Nov 10, 2020
  33. 23/26 completion: bash: improve __gitcomp descriptionFelipe Contreras, Nov 10, 2020
  34. 24/26 completion: bash: add __gitcomp_optsFelipe Contreras, Nov 10, 2020
  35. 25/26 completion: bash: cleanup __gitcomp* invocationsFelipe Contreras, Nov 10, 2020
  36. 26/26 completion: bash: shuffle __gitcomp functionsFelipe Contreras, Nov 10, 2020

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.