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

Re: [PATCH] t7900: use pwd -P in macOS maintenance test

From
Eric Sunshine <sunshine@sunshineco.com>
Date
May 23, 2025, 20:08 UTC
Message-ID
<CAPig+cRpS=t-wNLxdV_WoKF0Wzy-S1oLUEyS18S9r-4OBQ87VQ@mail.gmail.com>
In-Reply-To
<20250523193722.68344-1-mark@chromium.org>
On Fri, May 23, 2025 at 3:37 PM Mark Mentovai <mark@chromium.org> wrote:
Show 24 quoted lines
> $pfx is the basis for the expectation that launchd plist paths formed by
> `git maintenance start` will be compared against. These paths are formed
> in `git maintenance` by builtin/gc.c launchctl_service_filename(), which
> calls path.c interpolate_path() with real_home = 1, causing abspath.c
> strbuf_realpath() to resolve a canonical absolute path. Since $pfx is
> not determined according to the same realpath semantics, when t7900 is
> run from a working directory that contains a symbolic link in its path,
> the realpath operation will produce a different path than $pfx contains,
> although both paths logically reference the same directory. The test
> fails in this case.
>
> Base $pfx on the physical working directory (pwd -P), with all symbolic
> links fully resolved, so that the path that the test expects matches
> what `git maintenance` generates, even when running from a working
> directory whose path contains a symbolic link.
>
> Signed-off-by: Mark Mentovai <mark@chromium.org>
> ---
> diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
> @@ -882,7 +882,7 @@ test_expect_success 'stop preserves surrounding schedule' '
>  test_expect_success 'start and stop macOS maintenance' '
>         # ensure $HOME can be compared against hook arguments on all platforms
> -       pfx=$(cd "$HOME" && pwd) &&
> +       pfx=$(cd "$HOME" && pwd -P) &&
Okay, this seems like the minimum fix[*], and -P is POSIX.

However, have you tested this on Windows? I ask because, despite the test's name, this and most of the tests in this script, are actually run on all platforms, and because `pwd` is overridden by a shell function for MinGW on Windows:

    # t/test-lib.sh
    ...
    # git sees Windows-style pwd
    pwd () {
        builtin pwd -W
    }
My quick testing suggests that this patch's change might be problematic:
    # on Windows
    $ pwd
    /home/me
    $ pwd -W
    C:/msys64/home/me
    $ pwd -P
    /home/me
    $ pwd -W -P
    /home/me
FOOTNOTES

[*]: In the long run, a better fix would probably be for the tests to sanitize the output of the Git command, replacing (via `sed`) the actual emitted path with some placeholder, such as "%HOME%" or something, and then have the tests look for (`grep` or whatnot) needles using that literal placeholder rather than trying to perfectly match the path emitted by Git. This approach makes sense since these tests are about overall functionality of git-maintenance, not about the specific path in which the person happens to be running the tests.

Previous: Mark MentovaiNext: Junio C Hamano
Message 2 of 19 in “t7900: use pwd -P in macOS maintenance test”
  1. t7900: use pwd -P in macOS maintenance testMark Mentovai, May 23, 2025
  2. Eric SunshineMay 23, 2025
  3. Junio C HamanoMay 23, 2025
  4. Eric SunshineMay 23, 2025
  5. Junio C HamanoMay 23, 2025
  6. Mark MentovaiMay 24, 2025
  7. Junio C HamanoMay 27, 2025
  8. Mark MentovaiMay 23, 2025
  9. Eric SunshineMay 23, 2025
  10. t: run tests from a normalized working directoryMark Mentovai, May 28, 2025
  11. Torsten BögershausenMay 28, 2025
  12. Junio C HamanoMay 30, 2025
  13. Torsten BögershausenMay 31, 2025
  14. Junio C HamanoJun 1, 2025
  15. Mark MentovaiJun 2, 2025
  16. Junio C HamanoJun 2, 2025
  17. Torsten BögershausenJun 3, 2025
  18. Mark MentovaiJun 3, 2025
  19. Junio C HamanoJun 3, 2025

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.