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

Re: [PATCH 1/1] t1403: prefer test_path_exists helper function

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 4, 2025, 17:35 UTC
Message-ID
<CAPig+cQ275qBWzaYmMXydiA_8+CTx3FhAAY+o8ro+hD03wzu0g@mail.gmail.com>
In-Reply-To
<xmqqldtlt304.fsf@gitster.g>
On Tue, Mar 4, 2025 at 7:05 AM Junio C Hamano <gitster@pobox.com> wrote:
Show 19 quoted lines
> Mahendra Dani <danimahendra0904@gmail.com> writes:
> >> >       remove_object() {
> >> >               file=$(sha1_file "$*") &&
> >> > -             test -e "$file" &&
> >> > +             test_path_exists "$file" &&
> >> >               rm -f "$file"
> >> >       } &&
> >>
> >> The refactoring is true to the original spirit of the preimage indeed.
> >> But we could also improve it even further if we verified that the path
> >> not only exists, but exists and is a file via `test_path_is_file()`. If
> >> we decide to do that we should also explain the change in the commit
> >> message.
> >
> > I will improve it further using the `test_path_is_file()` helper
> > function and change the commit message in v2 patch.
>
> You may want to think about why there is "-f" there.  If we remove
> it, do we still need to have any check there?

That's a good question to ask, but isn't the implied suggestion of dropping "-f" going in the wrong direction? If I'm reading remove_object() correctly, `test -e` is being used as control flow, *not* as an assertion that the file exists. That is, the expectation of the caller is that the file will not exist once the call completes and that remove_object() will return a success code whether the file was present before the call or not. By control flow, I mean that the function, as written, is the same as this more explicit version:

    remove_object() {
        file=$(sha1_file "$*") &&
        if test -e "$file"
        then
            rm -f "$file"
        fi
    } &&

Given this understanding, then it becomes apparent that this GSoC microproject shouldn't be applying *any* test_path_foo() to this function. As an alternative, given that `rm -f` returns a success code whether or not the file exists, the microproject could instead *remove* the `test -e "$file" &&` line entirely (and the commit message should explain why doing so is a reasonable thing to do).

Previous: Junio C HamanoNext: Junio C Hamano
Message 12 of 31 in “t1403: prefer test_path_exists helper function”
  1. Mahendra DaniMar 1, 2025
  2. 1/1 t1403: prefer test_path_exists helper functionMahendra Dani, Mar 1, 2025
  3. Patrick SteinhardtMar 3, 2025
  4. Mahendra DaniMar 4, 2025
  5. Junio C HamanoMar 4, 2025
  6. Mahendra DaniMar 4, 2025
  7. Junio C HamanoMar 4, 2025
  8. Mahendra DaniMar 4, 2025
  9. Junio C HamanoMar 4, 2025
  10. Mahendra DaniMar 4, 2025
  11. Junio C HamanoMar 4, 2025
  12. Eric SunshineMar 4, 2025
  13. Junio C HamanoMar 4, 2025
  14. Eric SunshineMar 4, 2025
  15. Eric SunshineMar 4, 2025
  16. Junio C HamanoMar 4, 2025
  17. [GSOC][PATCH v2 0/1] t1403: verify path exists and is a fileMahendra Dani, Mar 4, 2025
  18. [GSOC][PATCH v3 0/1] t1403: verify path exists and is a fileMahendra Dani, Mar 4, 2025
  19. 1/1 t1403: verify that path exists and is a fileMahendra Dani, Mar 4, 2025
  20. Junio C HamanoMar 4, 2025
  21. Junio C HamanoMar 4, 2025
  22. Mahendra DaniMar 4, 2025
  23. 0/1 t1403: verify path exists and is a fileMahendra Dani, Mar 4, 2025
  24. 0/1 t1403: verify path exists and is a fileMahendra Dani, Mar 4, 2025
  25. 1/1 t1403: verify that path exists and is a fileMahendra Dani, Mar 4, 2025
  26. Junio C HamanoMar 4, 2025
  27. Mahendra DaniMar 4, 2025
  28. Junio C HamanoMar 4, 2025
  29. 1/1 t1403: verify that path exists and is a fileMahendra Dani, Mar 4, 2025
  30. Patrick SteinhardtMar 4, 2025
  31. Mahendra DaniMar 4, 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.