{"thread":{"id":"49978","subject":"[wishlist] submodule.update config","startedAt":"2018-12-08T15:45:46Z","lastAt":"2018-12-13T16:50:37Z","messageCount":7,"participants":["Yaroslav Halchenko","Stefan Beller","Yaroslav O Halchenko"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"364803","messageId":"20181208154539.GH4633@hopa.kiewit.dartmouth.edu","threadId":"49978","inReplyTo":null,"subject":"[wishlist] submodule.update config","fromName":"Yaroslav Halchenko","fromEmail":"yoh@onerussian.com","sentAt":"2018-12-08T15:45:39Z","receivedAt":"2018-12-08T15:45:46Z","isPatch":false,"sender":{"key":"yoh@onerussian.com","avatar":"https://gravatar.com/avatar/8901b82415ae451a83aea49409708912726e53620e3ac92320bf1f86548d97e9?d=mp&s=160"},"body":"Relates (but orthogonal) to my other thread\n\n  [wishlist] git submodule update --reset-hard\n\nATM, it possible to specify per submodule update strategy via\nconfiguration variable submodule.SUBMODULE.update where SUBMODULE is the name\nof the corresponding submodule.  But I see no way to specify default update\nstrategy for all submodules.\n\nFrom our conversation in that other thread  I have discovered to myself about\nexistence of  submodule.recurse  configuration, and there seems to be a few\nmore (.fetchJobs, .active) where e.g. .active seems to complement per-submodule\nsubmodule.*.active:\n\n\tyoh@debian:~/proj/misc/git$ git grep '[^.]submodule\\.[a-z]' -- Documentation/\n\tDocumentation/RelNotes/2.14.0.txt: * Many commands learned to pay attention to submodule.recurse\n\tDocumentation/RelNotes/2.15.0.txt: * \"git -c submodule.recurse=yes pull\" did not work as if the\n\tDocumentation/config.txt:include::config/submodule.txt[]\n\tDocumentation/config/submodule.txt:     update'. If neither submodule.<name>.active or submodule.active are\n\tDocumentation/config/submodule.txt:     interact with submodules; settings like `submodule.active`\n\tDocumentation/config/submodule.txt:     submodule.active config option. See linkgit:gitsubmodules[7] for\n\tDocumentation/config/submodule.txt:     as computed via `submodule.alternateLocation`. Possible values are\n\tDocumentation/git-clone.txt:    of multiple entries.  The resulting clone has `submodule.active` set to\n\tDocumentation/git-clone.txt:    Defaults to the `submodule.fetchJobs` option.\n\tDocumentation/git-submodule.txt:If no path is specified and submodule.active has been configured, submodules\n\tDocumentation/git-submodule.txt:        Defaults to the `submodule.fetchJobs` option.\n\tDocumentation/gitsubmodules.txt:`submodule.foo.path = path/to/bar`.\n\tDocumentation/gitsubmodules.txt:The section `submodule.foo.*` in the `.gitmodules` file gives additional\n\tDocumentation/gitsubmodules.txt:hints to Git's porcelain layer. For example, the `submodule.foo.url`\n\tDocumentation/gitsubmodules.txt:  b. if the submodule's path matches the pathspec in `submodule.active`\n\tDocumentation/gitsubmodules.txt:submodule's path is excluded in the pathspec in `submodule.active`, the\n\tDocumentation/gitsubmodules.txt:  git config --global submodule.recurse true\n\tDocumentation/gitsubmodules.txt:your working tree. Alternatively you can set 'submodule.recurse' to have\n\tDocumentation/technical/api-config.txt:if (!git_configset_get_bool(gm_config, \"submodule.frotz.ignore\", &b)) {\n\tDocumentation/technical/http-protocol.txt:  $GIT_URL:     http://example.com/git/repo.git/path/submodule.git\n\tDocumentation/technical/http-protocol.txt:  URL request:  http://example.com/git/repo.git/path/submodule.git/info/refs\n\nI wondered, if you think it would be sensible to also add of\nsubmodule.update which would be considered before submodule.SUBMODULE.update\nvariable possibly defined per submodule.  That would be more inline with desire\nto use any of the --merge, --rebase (and hopefully soon --reset-hard)\nstrategies specified as an option for submodule update, where no per-submodule\nhandling  is happening.\n\nThanks in advance for the consideration!\n-- \nYaroslav O. Halchenko\nCenter for Open Neuroscience     http://centerforopenneuroscience.org\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"},{"id":"364977","messageId":"CAGZ79kY+F776YfNBrx3wk3ffv4sqqabM5iJxbQDiPE6xoio69w@mail.gmail.com","threadId":"49978","inReplyTo":"20181208154539.GH4633@hopa.kiewit.dartmouth.edu","subject":"Re: [wishlist] submodule.update config","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2018-12-10T20:40:46Z","receivedAt":"2018-12-10T20:41:00Z","isPatch":false,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"On Sat, Dec 8, 2018 at 7:45 AM Yaroslav Halchenko <yoh@onerussian.com> wrote:\n\n> I wondered, if you think it would be sensible to also add of\n> submodule.update which would be considered before submodule.SUBMODULE.update\n> variable possibly defined per submodule.  That would be more inline with desire\n> to use any of the --merge, --rebase (and hopefully soon --reset-hard)\n> strategies specified as an option for submodule update, where no per-submodule\n> handling  is happening.\n>\n> Thanks in advance for the consideration!\n\nSo you are proposing a variable like submodule.update\nwithout the .<name>. that would apply to any submodule?\n\nThe precedence in descending order of these\nconfigs that modify the behavior of \"git submodule update\"\nwould be:\n\n* the command line flag (--merge/--rebase/--checkout)\n* submodule specific instructions (submodule.<name>.update)\n* generic submodule config (the new submodule.update)\n* default as --checkout\n\nI first hesitated in thinking this would be a good addition,\nas there is no plumbing command for submodules,\nto easily modify submodules irrespective of the user\nconfig. But that is out already with the submodule\nspecific update configs.\nSo I think it may be a good addition.\n\nI wonder if we'd be better off to re-invent the UX instead\nof hiding your intentions in a config setting for a command\nthat is already long to type. What about\n\n  git submodule merge\n  git submodule rebase\n  git submodule checkout\n  git submodule reset (--hard)\n\nas aliases for\n  git submodule update (...)\n"},{"id":"364985","messageId":"20181210224901.GL4633@hopa.kiewit.dartmouth.edu","threadId":"49978","inReplyTo":"CAGZ79kY+F776YfNBrx3wk3ffv4sqqabM5iJxbQDiPE6xoio69w@mail.gmail.com","subject":"Re: [wishlist] submodule.update config","fromName":"Yaroslav Halchenko","fromEmail":"yoh@onerussian.com","sentAt":"2018-12-10T22:49:01Z","receivedAt":"2018-12-10T22:49:10Z","isPatch":false,"sender":{"key":"yoh@onerussian.com","avatar":"https://gravatar.com/avatar/8901b82415ae451a83aea49409708912726e53620e3ac92320bf1f86548d97e9?d=mp&s=160"},"body":"\nOn Mon, 10 Dec 2018, Stefan Beller wrote:\n> > I wondered, if you think it would be sensible to also add of\n> > submodule.update which would be considered before submodule.SUBMODULE.update\n> > variable possibly defined per submodule.  That would be more inline with desire\n> > to use any of the --merge, --rebase (and hopefully soon --reset-hard)\n> > strategies specified as an option for submodule update, where no per-submodule\n> > handling  is happening.\n\n> > Thanks in advance for the consideration!\n\n> So you are proposing a variable like submodule.update\n> without the .<name>. that would apply to any submodule?\n\nyes\n\n> The precedence in descending order of these\n> configs that modify the behavior of \"git submodule update\"\n> would be:\n\n> * the command line flag (--merge/--rebase/--checkout)\n> * submodule specific instructions (submodule.<name>.update)\n> * generic submodule config (the new submodule.update)\n> * default as --checkout\n\nsound great\n\n> I first hesitated in thinking this would be a good addition,\n> as there is no plumbing command for submodules,\n> to easily modify submodules irrespective of the user\n> config. But that is out already with the submodule\n> specific update configs.\n> So I think it may be a good addition.\n\nGlad to hear that. Not sure though I would know where to stick my\nnose to figure out what to change. ;-)\n\n> I wonder if we'd be better off to re-invent the UX instead\n> of hiding your intentions in a config setting for a command\n> that is already long to type. What about\n\n>   git submodule merge\n>   git submodule rebase\n>   git submodule checkout\n>   git submodule reset (--hard)\n\n> as aliases for\n>   git submodule update (...)\n\nWell, not sure... In the long run, if UX is to be tuned up, I wonder if\nit would be more worthwhile to look toward making all those git commands\n(git merge, git checkout, git rebase, ..., git revert, git cherry-pick)\nsupport --recurse-submodules with a consistent with the non-recursive\noperation by default behavior (e.g.  not introducing detached HEADs or\ncontrolling that via a set of additional options where needed).  I feel\nthat \"git-submodule\" ideally should not get its interface extended to\ncomplement everything \"git\" commands can do, although that might need to\nbe extended to provide necessary plumbing.  As for the UX, it should\nprovide only the set of additional commands, which could not be present\nin the main API (e.g. pure \"git submodule\" itself to list\nsubmodules, and \"submodule foreach\", \"init\", \"deinit\").\n\n-- \nYaroslav O. Halchenko\nCenter for Open Neuroscience     http://centerforopenneuroscience.org\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"},{"id":"364996","messageId":"20181211000859.130266-1-sbeller@google.com","threadId":"49978","inReplyTo":"20181210224901.GL4633@hopa.kiewit.dartmouth.edu","subject":"[PATCH] Re: [wishlist] submodule.update config","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2018-12-11T00:08:59Z","receivedAt":"2018-12-11T00:09:06Z","isPatch":true,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"Signed-off-by: Stefan Beller <sbeller@google.com>\n---\n\n> > So you are proposing a variable like submodule.update\n> [...]\n>\n> Glad to hear that. Not sure though I would know where to stick my\n> nose to figure out what to change. ;-)\n\nThe update_module is computed via the submodule--helpers\nupdate-module-mode command, which is a small wrapper\naround determine_submodule_update_strategy()\nwhich you already touched in the other patch that makes\n--reset-hard another mode.\n\nThis contains code and tests, but we'd need some docs as well.\nI am not sure about this patch as it allows for easier experimentation\nwith submodules (e.g. \"git config submodule.update '!git reset --hard'\"\nsounds like what you're trying to get) and using them, but as discussed\nbelow this might be too much convenience already and we'd rather want to\nhave it properly integrated into the real commands.\n\n> Well, not sure... In the long run, if UX is to be tuned up, I wonder if\n> it would be more worthwhile to look toward making all those git commands\n> (git merge, git checkout, git rebase, ..., git revert, git cherry-pick)\n> support --recurse-submodules with a consistent with the non-recursive\n> operation by default behavior\n\nThat is the end goal, very much.\n\n> (e.g.  not introducing detached HEADs or\n> controlling that via a set of additional options where needed).\n\nAs with the discussion of the submodule.repoLike option (the patch I\nreferenced in the other discussion), this is tricky to get the right\nbehavior, so it takes some more time to do.\n\nAlso what is right for a \"git merge --recursive\" might be totally different\nfrom a \"git submodule update --merge\" as the former is not centered around\nsubmodules but merging, such that a sensible default would be expected,\nwhereas the \"submodule update\" is allowed to have a rough edge.\n\nFrom what I get from this discussion is that the submodule.repoLike patch \nneeds to offer different modes of submodule operation.\n\nCurrently the submodules are handled with the \"detached HEAD, period\" mode,\nwhereas that patch proposes a \"follow the submodule branch, trust me they're\nin sync with the superproject magically\" mode, but what you'd rather want to\nsee is a \"don't mess with submodules HEAD detachments, but still have\nsuperproject powers come to be\".\n\nAs soon as we have one of these modes in place, adding another one\n\"should be easy\", famous last words.\n\nStefan\n\n builtin/submodule--helper.c |  4 ++++\n t/t7406-submodule-update.sh | 41 +++++++++++++++++++++++++++++++++++++\n 2 files changed, 45 insertions(+)\n\ndiff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c\nindex d38113a31a..e1aa3a9995 100644\n--- a/builtin/submodule--helper.c\n+++ b/builtin/submodule--helper.c\n@@ -1472,6 +1472,10 @@ static void determine_submodule_update_strategy(struct repository *r,\n \t\tif (parse_submodule_update_strategy(val, out) < 0)\n \t\t\tdie(_(\"Invalid update mode '%s' configured for submodule path '%s'\"),\n \t\t\t\tval, path);\n+\t} else if (!repo_config_get_string_const(r, \"submodule.update\", &val)) {\n+\t\tif (parse_submodule_update_strategy(val, out) < 0)\n+\t\t\tdie(_(\"Invalid update mode '%s' configured for 'submodule.update'\"),\n+\t\t\t\tval);\n \t} else if (sub->update_strategy.type != SM_UPDATE_UNSPECIFIED) {\n \t\tout->type = sub->update_strategy.type;\n \t\tout->command = sub->update_strategy.command;\ndiff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh\nindex e87164aa8f..05880fd48f 100755\n--- a/t/t7406-submodule-update.sh\n+++ b/t/t7406-submodule-update.sh\n@@ -322,6 +322,33 @@ test_expect_success 'submodule update - rebase in .git/config' '\n \t)\n '\n \n+test_expect_success 'submodule update - rebase in generic .git/config' '\n+\tgit -C super config submodule.update rebase &&\n+\tgit -C super/submodule reset --hard HEAD~1 &&\n+\t(cd super &&\n+\t (cd submodule &&\n+\t  compare_head\n+\t ) &&\n+\t git submodule update submodule &&\n+\t cd submodule &&\n+\t compare_head\n+\t)\n+'\n+\n+test_expect_success 'submodule.<name>.update overrides submodule.update' '\n+\tgit -C super config submodule.update merge &&\n+\tgit -C super config submodule.submodule.update rebase &&\n+\tgit -C super/submodule reset --hard HEAD~1 &&\n+\t(cd super &&\n+\t (cd submodule &&\n+\t  compare_head\n+\t ) &&\n+\t git submodule update submodule &&\n+\t cd submodule &&\n+\t compare_head\n+\t)\n+'\n+\n test_expect_success 'submodule update - checkout in .git/config but --rebase given' '\n \t(cd super &&\n \t git config submodule.submodule.update checkout\n@@ -339,6 +366,20 @@ test_expect_success 'submodule update - checkout in .git/config but --rebase giv\n \t)\n '\n \n+test_expect_success 'submodule update - checkout in submodule.update in .git/config but --rebase given' '\n+\ttest_when_finished \"git -C super config --unset submodule.update\" &&\n+\tgit -C super config submodule.update checkout &&\n+\tgit -C super/submodule reset --hard HEAD~1 &&\n+\t(cd super &&\n+\t (cd submodule &&\n+\t  compare_head\n+\t ) &&\n+\t git submodule update --rebase submodule &&\n+\t cd submodule &&\n+\t compare_head\n+\t)\n+'\n+\n test_expect_success 'submodule update - merge in .git/config' '\n \t(cd super &&\n \t git config submodule.submodule.update merge\n-- \n2.20.0.rc2.403.gdbc3b29805-goog\n\n"},{"id":"365026","messageId":"20181211051032.GQ4633@hopa.kiewit.dartmouth.edu","threadId":"49978","inReplyTo":"20181211000859.130266-1-sbeller@google.com","subject":"Re: [PATCH] Re: [wishlist] submodule.update config","fromName":"Yaroslav O Halchenko","fromEmail":"yoh@onerussian.com","sentAt":"2018-12-11T05:10:32Z","receivedAt":"2018-12-11T05:10:42Z","isPatch":true,"sender":{"key":"yoh@onerussian.com","avatar":"https://gravatar.com/avatar/8901b82415ae451a83aea49409708912726e53620e3ac92320bf1f86548d97e9?d=mp&s=160"},"body":"\nOn Mon, 10 Dec 2018, Stefan Beller wrote:\n\n> Signed-off-by: Stefan Beller <sbeller@google.com>\n> ---\n\n> > > So you are proposing a variable like submodule.update\n> > [...]\n\n> > Glad to hear that. Not sure though I would know where to stick my\n> > nose to figure out what to change. ;-)\n\n> The update_module is computed via the submodule--helpers\n> update-module-mode command, which is a small wrapper\n> around determine_submodule_update_strategy()\n> which you already touched in the other patch that makes\n> --reset-hard another mode.\n\n> This contains code and tests, but we'd need some docs as well.\n> I am not sure about this patch as it allows for easier experimentation\n> with submodules (e.g. \"git config submodule.update '!git reset --hard'\"\n> sounds like what you're trying to get)\n\n;-) it was indeed one of the original approaches I considered instead of\nhaving \"update --reset-hard\"...\n\n> and using them, but as discussed\n> below this might be too much convenience already and we'd rather want to\n> have it properly integrated into the real commands.\n\nindeed, having \"update --reset-hard\" provides necessary to me\nconvenience for my use cases.  Motivation behind  submodule.update  was\nprimarily to allow for heterogeneous (but still simple to define)\nstrategies, where for some subproject I could just define\nsubmodule.update to be \"reset-hard\" (I do not expect my local commits\nmatter) and in the others -- \"merge\" (I carry my changes on top).\n\nBut again, I must confess, that either I forgot or just do not see a\nclear use-case/demand for submodule.update config myself any longer,\nbesides providing a potentially useful default over\nsubmodule.MODULE.update config.\n\n> > Well, not sure... In the long run, if UX is to be tuned up, I wonder if\n> > it would be more worthwhile to look toward making all those git commands\n> > (git merge, git checkout, git rebase, ..., git revert, git cherry-pick)\n> > support --recurse-submodules with a consistent with the non-recursive\n> > operation by default behavior\n\n> That is the end goal, very much.\n\n> > (e.g.  not introducing detached HEADs or\n> > controlling that via a set of additional options where needed).\n\n> As with the discussion of the submodule.repoLike option (the patch I\n> referenced in the other discussion), this is tricky to get the right\n> behavior, so it takes some more time to do.\n\n> Also what is right for a \"git merge --recursive\" might be totally different\n> from a \"git submodule update --merge\" as the former is not centered around\n> submodules but merging, such that a sensible default would be expected,\n> whereas the \"submodule update\" is allowed to have a rough edge.\n\nProbably I need to try \"submodules update --merge\" to see what is that\nrough edge which makes it different from the potential \"merge\n--recurse-submodules\", or is it easy to describe? ;-)\n\nI wonder if may be instead of pestering you about this config one, I\nshould ask about pointers on how to accomplish \"revert\n--recurse-submodules\" or where to poke to make it possible to clone\nrecursively from  http://datasets.datalad.org/ where  we do not place\nsubmodules all under the very top /.git/modules ;-)\n\n-- \nYaroslav O. Halchenko\nCenter for Open Neuroscience     http://centerforopenneuroscience.org\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"},{"id":"365193","messageId":"CAGZ79kaka_DTUMkGdSbYW7Vam3XSWcdqxPrzFDXZJSsQC1zHYQ@mail.gmail.com","threadId":"49978","inReplyTo":"20181211051032.GQ4633@hopa.kiewit.dartmouth.edu","subject":"Re: [PATCH] Re: [wishlist] submodule.update config","fromName":"Stefan Beller","fromEmail":"sbeller@google.com","sentAt":"2018-12-12T19:31:04Z","receivedAt":"2018-12-12T19:31:19Z","isPatch":true,"sender":{"key":"stefanbeller@gmail.com","avatar":"https://avatars.githubusercontent.com/u/455868?v=4"},"body":"> But again, I must confess, that either I forgot or just do not see a\n> clear use-case/demand for submodule.update config myself any longer,\n\nok, let's drop that patch then.\n\n> Probably I need to try \"submodules update --merge\" to see what is that\n> rough edge which makes it different from the potential \"merge\n> --recurse-submodules\", or is it easy to describe? ;-)\n\nI think the branch handling would be the difference. I'd expect\n\"merge --recurse-submodules\" to be sensible about staying on\nthe branch both in the superproject and submodule, whereas\n\"submodule update --merge\" is too much plumbing, that we'd\nexpect a sensible branch handling (detached HEAD is just fine,\nright?)\n\nThe merge result would be the same, I'd think.\n\n>\n> I wonder if may be instead of pestering you about this config one, I\n> should ask about pointers on how to accomplish \"revert\n> --recurse-submodules\"\n\nWhat do you want to do in revert --recurse-submodules?\nWhen you have \"revert --recurse-submodules $COMMIT\",\nwould that revert all submodule commits introduced in\nthat commit as well as the regular superproject revert?\n\nThis would require either opening multiple editors\n(once per submodule and at last for the superproject)\nor we'd have to do fancy snip-snapping of the user input,\ne.g. providing a template like:\n\n    Revert \"$title\"\n\n    This reverts commit $COMMIT.\n\n    # The above is for the superproject commit\n    # Please enter the commit message  ...\n    #\n    # Changes to be committed:\n    #       ...\n    # --8<-- DO NOT DELETE THIS LINE\n    # Below is the commit for submodule $submodule:\n    Revert $submodule_range\n\n    This reverts commits $maybe_many\n\n    # The above is for the submodule commit\n    # Please ...\n\nI guess it may be easier to just have multiple\neditors opened sequentially to give a commit\nmessage.\n\n>  or where to poke to make it possible to clone\n> recursively from  http://datasets.datalad.org/ where  we do not place\n> submodules all under the very top /.git/modules ;-)\n\nNot sure what you mean there?\n"},{"id":"365275","messageId":"20181213165029.GB4633@hopa.kiewit.dartmouth.edu","threadId":"49978","inReplyTo":"CAGZ79kaka_DTUMkGdSbYW7Vam3XSWcdqxPrzFDXZJSsQC1zHYQ@mail.gmail.com","subject":"Re: [PATCH] Re: [wishlist] submodule.update config","fromName":"Yaroslav Halchenko","fromEmail":"yoh@onerussian.com","sentAt":"2018-12-13T16:50:29Z","receivedAt":"2018-12-13T16:50:37Z","isPatch":true,"sender":{"key":"yoh@onerussian.com","avatar":"https://gravatar.com/avatar/8901b82415ae451a83aea49409708912726e53620e3ac92320bf1f86548d97e9?d=mp&s=160"},"body":"\nOn Wed, 12 Dec 2018, Stefan Beller wrote:\n\n> > But again, I must confess, that either I forgot or just do not see a\n> > clear use-case/demand for submodule.update config myself any longer,\n\n> ok, let's drop that patch then.\n\nok, But I will cherish it in my memory so whenever the use case\ncomes back to me -- I will be back too ;)\n\n> > Probably I need to try \"submodules update --merge\" to see what is that\n> > rough edge which makes it different from the potential \"merge\n> > --recurse-submodules\", or is it easy to describe? ;-)\n\n> I think the branch handling would be the difference. I'd expect\n> \"merge --recurse-submodules\" to be sensible about staying on\n> the branch both in the superproject and submodule, whereas\n> \"submodule update --merge\" is too much plumbing, that we'd\n> expect a sensible branch handling (detached HEAD is just fine,\n> right?)\n\nre \"detached HEAD is just fine\" -- I guess \"it depends\"...  E.g.  why\nshould it get detached if it was not detached to start with?  Why not\njust to perform a regular \"git merge --recurse-submodules\" within\nthe submodule thus making it all consistent across?\n\nIf there is a need in detached HEADs handling of merges etc, get\nthem detached and then they would stay detached - no surprises.\n\n> The merge result would be the same, I'd think.\n\nit better be ;)\n\n> > I wonder if may be instead of pestering you about this config one, I\n> > should ask about pointers on how to accomplish \"revert\n> > --recurse-submodules\"\n\n> What do you want to do in revert --recurse-submodules?\n> When you have \"revert --recurse-submodules $COMMIT\",\n> would that revert all submodule commits introduced in\n> that commit as well as the regular superproject revert?\n\nThat is correct\n\n> This would require either opening multiple editors\n> (once per submodule and at last for the superproject)\n> or we'd have to do fancy snip-snapping of the user input,\n> e.g. providing a template like:\n\n>     Revert \"$title\"\n\n>     This reverts commit $COMMIT.\n\n>     # The above is for the superproject commit\n>     # Please enter the commit message  ...\n\n>     # Changes to be committed:\n>     #       ...\n>     # --8<-- DO NOT DELETE THIS LINE\n>     # Below is the commit for submodule $submodule:\n>     Revert $submodule_range\n\n>     This reverts commits $maybe_many\n\n>     # The above is for the submodule commit\n>     # Please ...\n\n> I guess it may be easier to just have multiple\n> editors opened sequentially to give a commit\n> message.\n\nyeap - that would be beautiful.  Now I just need to do that all manually\n;)\n\n> >  or where to poke to make it possible to clone\n> > recursively from  http://datasets.datalad.org/ where  we do not place\n> > submodules all under the very top /.git/modules ;-)\n\n> Not sure what you mean there?\n\nsorry I was not clear... I will start a new thread for a complete\ndescription.\n\n-- \nYaroslav O. Halchenko\nCenter for Open Neuroscience     http://centerforopenneuroscience.org\nDartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755\nPhone: +1 (603) 646-9834                       Fax: +1 (603) 646-1419\nWWW:   http://www.linkedin.com/in/yarik        \n"}]}