On Tue, Aug 26, 2014 at 1:28 AM, Heiko Voigt <hvoigt@xxxxxxxxxx> wrote: >> Hi Heiko, >> >> My last email response was in violation of your request to keep the >> two topics separate, sorry about that. I started typing it this >> weekend and completed the draft this morning, without having read this >> response from you first. > > Thats fine, no problem. > >> Here is what I think would make the feature most usable. I think you >> went over some of these ideas but I just want to clarify, to make sure >> we're on the same page. Please correct me as needed. >> >> 1. Running `git submodule update --with-remote <name>` shall fail the >> command unconditionally. > > I am not sure but I think you mean > > git submodule update --with-remote=<name> > > With the equals sign, without it you would name the submodule paths to > update. No I think that should just add the remote <name> to all > submodules that would be updated and do the normal update operation on > them (with the new remote of course). I'm not sure about Linux but at least with msysgit on Windows, typing a two-dash option (such as --with-remote) forces command line evaluation to use the next placement parameter as the parameter for it. I've seen this work the same way with argparse in python too. In my experience, command line has worked that way, I'm not sure if that is by design or not though. I never use equal signs with git commands, never had a problem for some reason. For example: git rebase --onto release/1.0 head~3 head The `--onto` option knows to use `release/1.0` as its parameter. >> 2. Using the `--with-remote` option on submodule `update` or `sync` >> will fail if it detects absolute submodule URLs in .gitmodule > > Yes, almost. Since you can have a mixture I suggest to only fail if the > submodules that would be processed have an absolute url in them. If > processed submodules are all relative it can go ahead. For example if it processes 3 submodules in the following order: 1. relative 2. absolute 3. relative Should it fail before or after processing the 3rd relative submodule? I was thinking it would fail while trying to sync/update the 2nd one (which is absolute) and stop before processing the 3rd. >> 3. Running `git submodule update --init --with-remote <name>` shall >> fail the command ONLY if a submodule is being processed that is NOT >> also being initialized. > > No since the --init flag just tells update to initialize submodules > on-demand. It should just go ahead the same way as without > --with-remote. But doesn't the on-demand initialization need to evaluate relative URLs and convert them to absolute based on the .gitmodules configuration? I thought the idea was to make `--with-remote` invalid for initialization/sync of absolute URLs. In other words if I did: git submodule init --with-remote fork my-submodule-dir and if my-submodule-dir was not relative in .gitmodules, then the `--with-remote` flag becomes useless. We could fail silently but for educational purposes to the user I thought we were failing in these scenarios. Maybe I misunderstood your original intent with the failures? Is init not doing the relative to absolute evaluation like I'm thinking? Please correct me where I'm wrong. >> 4. The behavior of git submodule's `update` or `sync` commands >> combined with `--with-remote` will REPLACE or CREATE the 'origin' >> remote in each submodule it is run in. We will not allow the user to >> configure what the submodule remote name will end up being (I think >> this is current behavior and forces good practice; I consider `origin` >> an adopted standard for git, and actually wish it was more enforced >> for super projects as well!) > > No please carefully read my email again. I specifically was describing > the opposite. --with-remote=<name> creates/replaces the remote <name> in > the submodule. I do not see a benefit in restricting the user from > creating different remote names in the submodule. I think it would be > more confusing if the remote 'origin' in the superproject does not point > to the same location as 'origin' in the submodule. Well the reason why I said it would be 'origin' is so that the submodule knows which remote to use internally during an update. I'm assuming 'update' uses 'origin' internally in the submodule to know which remote to pull from. My understanding of how `git submodule update` knows which URL to pull from is probably incorrect. I'm not familiar on the internal mechanics of how this works. Perhaps you could explain or send me to some reading material on it? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html