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

Re: [RFC] extending pathspec support to submodules

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 15, 2016, 22:08 UTC
Message-ID
<xmqqr38klst6.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<CAKoko1rtEydwbWoEq9MBW41qqa10Bm+x0d6zS+Bptk51RjMOMA@mail.gmail.com>
Brandon Williams <bmwill@google.com> writes:
Show 9 quoted lines
> You're right that seems like the best course of action and it already falls
> inline with what I did with a first patch to ls-files to support submodules.
> In that patch I did exactly as you suggest and pass in the prefix to the
> submodule and make the child responsible for prepending the prefix to all of
> its output.  This way we can simply pass through the whole pathspec (as apposed
> to my original idea of stripping the prefix off the pathspec prior to passing
> it to the child...which can get complicated with wild characters) to the
> childprocess and when checking if a file matches the pathspec we can check if
> the prefix + file path matches.
That's brilliant.  A few observations.
 * With that change to tell the command that is spawned in a
   submodule directory where the submodule repository is in the
   context of the top-level superproject _and_ require it to take a
   pathspec as relative to the top-level superproject, you no longer
   worry about having to find where to cut the pathspec given at the
   top-level to adjust it for the submodule's context.  That may
   simplify things.
 * Your program that runs in the top-level superproject still needs
   to be able to say "this pathspec from the top cannot possibly
   match anything in the submodule, so let's not even bother
   descending into it".
 * Earlier while reviewing "ls-files" recursion, I suggested (and
   you took) --output-path-prefix as the option name, because it was
   meant to be "when you output any path, prefix this string".  But
   the suggested name is suboptimal, as it is no longer an option
   that is only about "output".  A command that runs in a submodule
   would:
   - enumerate paths in the context of the submodule repository,
   - prepend the "prefix" to these paths,
   - filter by applying the full-tree pathspec, and
   - work on the surviving paths after filtering.
   When the last step, "work on", involves just "printing", the
   whole path (with "prefix") is sent to the output.  If it involves
   some operation relative to the submodule repository (e.g. seeing
   if it is in the index), the "prefix" may have to be stripped
   while the operation is carried out.
   So we may have to rethink what this option name should be.  "You
   are running in a repository that is used as a submodule in a
   larger context, which has the submodule at this path" is what the
   option tells the command; if any existing command already has
   such an option, we should use it.  If we are inventing one,
   perhaps "--submodule-path" (I didn't check if there are existing
   options that sound similar to it and mean completely different
   things, in which case that name is not usable)?
Thanks.
   
Previous: Brandon WilliamsNext: Stefan Beller
Message 4 of 25 in “[RFC] extending pathspec support to submodules”
  1. Brandon WilliamsSep 14, 2016
  2. Heiko VoigtSep 15, 2016
  3. Brandon WilliamsSep 15, 2016
  4. Junio C HamanoSep 15, 2016
  5. Stefan BellerSep 15, 2016
  6. Heiko VoigtSep 16, 2016
  7. Brandon WilliamsSep 16, 2016
  8. ls-files: add pathspec matching for submodulesBrandon Williams, Sep 17, 2016
  9. Junio C HamanoSep 17, 2016
  10. Brandon WilliamsSep 18, 2016
  11. Junio C HamanoSep 19, 2016
  12. Brandon WilliamsSep 19, 2016
  13. Junio C HamanoSep 19, 2016
  14. Brandon WilliamsSep 19, 2016
  15. Junio C HamanoSep 19, 2016
  16. Brandon WilliamsSep 19, 2016
  17. Junio C HamanoSep 19, 2016
  18. Brandon WilliamsSep 19, 2016
  19. ls-files: add pathspec matching for submodulesBrandon Williams, Sep 19, 2016
  20. Junio C HamanoSep 19, 2016
  21. Brandon WilliamsSep 20, 2016
  22. Brandon WilliamsSep 20, 2016
  23. Junio C HamanoSep 21, 2016
  24. Junio C HamanoSep 21, 2016
  25. Junio C HamanoSep 19, 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.