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

Re: [PATCH 06/11] t7001: change (cd <path> && git foo) to (git -C <path> foo)

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Sep 25, 2020, 18:53 UTC
Message-ID
<CAPig+cQipTK8ePVLKMeytmaePZ8yWSoFCjue=huKORjPGpTg+Q@mail.gmail.com>
In-Reply-To
<20200925170256.11490-7-shubhunic@gmail.com>
On Fri, Sep 25, 2020 at 1:03 PM shubham verma <shubhunic@gmail.com> wrote:
> t7001: change (cd <path> && git foo) to (git -C <path> foo)

This is misleading. We don't want the `git -C` form in a subshell, so it shouldn't be enclosed in parentheses. Perhaps write it like this:

    t7001 use `git -C` to avoid `cd` outside of subshells
> Let's avoid the use of `cd` outside subshells by encapsulating them
> inside subshells or by using `git -C <dir> ...`.

This is misleading in two ways. First, none of the changes made by this patch add subshell encapsulation. Second, many of the changes drop the subhsell in favor of `git -C`, so describing them as "`cd` outside of subshells" is wrong.

It's also important for the commit message to explain _why_ this change is important when `cd` is used outside of a subshell. A possible rewrite might be:

    t7001: avoid using `cd` outside of subshells
    Avoid using `cd` outside of subshells since, if the test fails,
    there is no guarantee that the current working directory is the
    expected one, which may cause subsequent tests to run in the wrong
    directory.
    While at it, make some other tests more concise by replacing
    simple subshells with `git -C`.

In fact, fixing the cases in which `cd` is used outside of a subshell is much more important than the mere mechanical conversion made to the other tests by replacing a subshell with `git -C`. As such, I'm tempted to suggest splitting this patch into two: one which fixes the cases of `cd` outside of subshell, and another which converts the simple subshell cases to use `git -C`.

Show 14 quoted lines
> Signed-off-by: shubham verma <shubhunic@gmail.com>
> ---
> diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh
> @@ -11,12 +11,11 @@ test_expect_success 'prepare reference tree' '
>  test_expect_success 'moving the file out of subdirectory' '
> -       cd path0 && git mv COPYING ../path1/COPYING
> +       git -C path0 mv COPYING ../path1/COPYING
>  '
>
> -# in path0 currently
>  test_expect_success 'commiting the change' '
> -       cd .. && git commit -m move-out -a
> +       git commit -m move-out -a
>  '

This transformation looks fine, as do the following two tests which get the same transformation.

I do have a very slight hesitation, though, that these changes go against the grain of the tests. In particular, at the top of this script, we see:

    test_description='git mv in subdirs'

which suggests that the tests really want to test the bare `git mv` command while actually running in a subdirectory. This would imply that these test should be rewritten as:

    test_expect_success 'title' '
        (
            cd path0 &&
            ...
        )
    '
However, it's such a minor misgiving that it's probably not worth considering.
Show 6 quoted lines
> @@ -364,16 +356,10 @@ test_expect_success 'git mv moves a submodule with gitfile' '
> -       (
> -               cd mod &&
> -               git mv ../sub/ .
> -       ) &&
> +       git -C mod mv ../sub/ . &&

Okay. At first glance one might expect you to strip the `../` from the argument, but indeed `../sub/` is correct since `-C mod` really does change to the new directory, so the argument is interpreted relative to `mod`.

Previous: shubham vermaNext: shubham verma
Message 13 of 27 in “Modernizing the t7001 test script”
  1. 00/11 Modernizing the t7001 test scriptshubham verma, Sep 25, 2020
  2. 01/11 t7001: convert tests from the old style to the current styleshubham verma, Sep 25, 2020
  3. Eric SunshineSep 25, 2020
  4. 02/11 t7001: use TAB instead of spacesshubham verma, Sep 25, 2020
  5. Eric SunshineSep 25, 2020
  6. 03/11 t7001: remove unnecessary blank linesshubham verma, Sep 25, 2020
  7. Eric SunshineSep 25, 2020
  8. Junio C HamanoSep 25, 2020
  9. 04/11 t7001: change the style for cd according to subshellshubham verma, Sep 25, 2020
  10. Eric SunshineSep 25, 2020
  11. 05/11 t7001: remove whitespace after redirect operatorsshubham verma, Sep 25, 2020
  12. 06/11 t7001: change (cd <path> && git foo) to (git -C <path> foo)shubham verma, Sep 25, 2020
  13. Eric SunshineSep 25, 2020
  14. 07/11 t7001: use ': >' rather than 'touch'shubham verma, Sep 25, 2020
  15. Eric SunshineSep 25, 2020
  16. Junio C HamanoSep 25, 2020
  17. 08/11 t7001: put each command on a separate lineshubham verma, Sep 25, 2020
  18. Eric SunshineSep 25, 2020
  19. 09/11 t7001: use here-docs instead of echoshubham verma, Sep 25, 2020
  20. Junio C HamanoSep 25, 2020
  21. 10/11 t7001: use `test` rather than `[`shubham verma, Sep 25, 2020
  22. 11/11 t7001: move cleanup code from outside the tests into themshubham verma, Sep 25, 2020
  23. Eric SunshineSep 25, 2020
  24. Junio C HamanoSep 25, 2020
  25. Eric SunshineSep 25, 2020
  26. Shubham VermaOct 1, 2020
  27. Junio C HamanoDec 22, 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.