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

Re: [PATCH 11/15] diff: ignore submodules excluded by groups

From
Junio C Hamano <gitster@pobox.com>
Date
May 6, 2016, 06:08 UTC
Message-ID
<xmqqa8k37m6i.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<xmqqfutw85oz.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 5 quoted lines
> The set of submodules you "init" to the working tree are the ones
> that are interesting to you.  So once the tree is populated, you do
> not ever have to look at the "defaultGroup" configuration.  You just
> need to look at the working tree.
> ...

I forgot to prefix the first few paragraphs of that message with "Here is how my version of the world should work." I did not mean to say "Here is how you must make your work work, or I won't talk to you." I was just hurried as I had to tend to other topics.

I actually do not care too deeply (except for the "automatically remove" part, which I do not think we should do), as I do not think there is a big fundamental difference between the two views. To make sure we are on the same page, let me rephrase the two views I have in mind.

The difference is what should happen when the user does not give any pathspec, *label, or :name to limit the set of submodules to act on, which, traditionally meant to work on everything, and we are trying to change that to some "default".

 (1) The default set is what the configuration file says is the
     default group.  The working tree state is ignored.
 (2) The default set is what the configuration file says is the
     default group, plus those the user showed interest by doing
     "submodule init".

Suppose that the user has a mostly satisfactory default configured, i.e. the set of submodules the configuration file says is the default is both necessary and sufficient to carry out her daily task. Then there is no difference between the two.

Further suppose that the user needs to view a submodule outside the default group temporarily (imagine: for a day or two), while carrying out some specific task. Perhaps she is working on the documentation submodule, which is her primary task hence her configuration file specifies it as the default, but needs to see the submodule that houses the implementation to describe the behaviour.

So she does "init code-module/"; this has explicit pathspec, so there is no difference between the two. Now, while reading the code module, she finds a typo in a comment, and wants to fix it. We will start to see differences.

 * When she wants to get a bird's eye view of everything she cares
   about at the moment, i.e. wants to view the state of her usual
   modules plus the code-module she is visiting, (1) is more
   cumbersome.
   With (1), "diff --recursive" will not step outside of her
   configured default, so she says "diff --recursive \*default
   code-module/" to say "I want to see both my default submodule(s)
   and the one I checked out by hand".
   With (2), she does not have to do anything special, as manually
   checked out code-module/ will be acted upon, in addition to the
   configured default.
 * When she wants to see her usual modules ignoring the one-off
   checkout, (1) is easier.
   With (1), she can say "diff --recursive" and done. 
   With (2), she needs to say "diff --recursive \*default" to
   explicitly state "I may have checkouts of other submodules, but
   this time I want to view only the usual default of mine".
The difference is not that big either case.

Whichever way we choose to make the default behaviour, the user needs to type a bit extra when asking a behaviour that is different from the default behaviour.

The amount of "extra" in the first use case necessary for (1) is greater than the amount of "extra" in the second use case necessary for (2), though. In addition, in the second use case, (1) makes it easier for the user to miss important changes she made outside the area of her usual attention, while (2) forces her to make a conscious effort to exclude them. These are the reasons why I have a slight preference for (2) over (1).

Previous: Junio C HamanoNext: Stefan Beller
Message 39 of 48 in “submodule groups (once again)”
  1. 00/15 submodule groups (once again)Stefan Beller, Apr 26, 2016
  2. 01/15 string_list: add string_list_duplicateStefan Beller, Apr 26, 2016
  3. Junio C HamanoApr 26, 2016
  4. Stefan BellerApr 27, 2016
  5. Junio C HamanoApr 27, 2016
  6. Stefan BellerApr 27, 2016
  7. Junio C HamanoApr 27, 2016
  8. Stefan BellerApr 27, 2016
  9. 02/15 submodule doc: write down what we want to achieve in this seriesStefan Beller, Apr 26, 2016
  10. Junio C HamanoApr 26, 2016
  11. 03/15 submodule add: label submodules if asked toStefan Beller, Apr 26, 2016
  12. Junio C HamanoApr 26, 2016
  13. Jacob KellerApr 26, 2016
  14. Stefan BellerApr 26, 2016
  15. Jacob KellerApr 27, 2016
  16. 04/15 submodule-config: keep labels aroundStefan Beller, Apr 26, 2016
  17. 05/15 submodule-config: check if submodule a submodule is in a groupStefan Beller, Apr 26, 2016
  18. Junio C HamanoApr 26, 2016
  19. Junio C HamanoApr 26, 2016
  20. Stefan BellerApr 27, 2016
  21. 06/15 submodule init: redirect stdout to stderrStefan Beller, Apr 26, 2016
  22. Junio C HamanoApr 29, 2016
  23. Stefan BellerApr 29, 2016
  24. 07/15 submodule deinit: loose requirement for giving '.'Stefan Beller, Apr 26, 2016
  25. Junio C HamanoApr 29, 2016
  26. 08/15 submodule--helper list: respect submodule groupsStefan Beller, Apr 26, 2016
  27. Junio C HamanoApr 29, 2016
  28. 09/15 submodule--helper init: respect submodule groupsStefan Beller, Apr 26, 2016
  29. 10/15 submodule--helper update_clone: respect submodule groupsStefan Beller, Apr 26, 2016
  30. 11/15 diff: ignore submodules excluded by groupsStefan Beller, Apr 26, 2016
  31. Junio C HamanoApr 29, 2016
  32. Stefan BellerApr 29, 2016
  33. Stefan BellerMay 5, 2016
  34. Junio C HamanoMay 5, 2016
  35. Stefan BellerMay 5, 2016
  36. Junio C HamanoMay 5, 2016
  37. Stefan BellerMay 5, 2016
  38. Junio C HamanoMay 5, 2016
  39. Junio C HamanoMay 6, 2016
  40. Stefan BellerMay 6, 2016
  41. Junio C HamanoMay 6, 2016
  42. 12/15 git submodule summary respects groupsStefan Beller, Apr 26, 2016
  43. Junio C HamanoApr 29, 2016
  44. 13/15 cmd_status: respect submodule groupsStefan Beller, Apr 26, 2016
  45. 14/15 cmd_diff: respect submodule groupsStefan Beller, Apr 26, 2016
  46. 15/15 clone: allow specification of submodules to be clonedStefan Beller, Apr 26, 2016
  47. Junio C HamanoApr 26, 2016
  48. Junio C HamanoApr 26, 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.