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

Re: [PATCH] submodule add: improve message when resolving a relative url fails

From
Marc Branchaud <marcnarc@xiplink.com>
Date
Jul 29, 2011, 20:10 UTC
Message-ID
<4E33139C.5000209@xiplink.com>
In-Reply-To
<4E306065.2010002@cisco.com>
On 11-07-27 03:00 PM, Phil Hord wrote:
Show 37 quoted lines
> On 06/01/2011 11:55 AM, Marc Branchaud wrote:
>> On 11-05-31 06:04 PM, Phil Hord wrote:
>>> On 05/31/2011 04:57 PM, Marc Branchaud wrote:
>>>>  - The current code rewrites the URL so that any relative path is either
>>>>    rejected or munged into an absolute remote URL.
>>> I don't see the URL getting munged away from being relative.  Can you
>>> point to an example?
>> I reached this conclusion because if I go into my clone of git.git and do
>>
>> 	git submodule add ../MyThing
>>
>> where ../MyThing is a regular git repo, I get
>>
>> Cloning into MyThing...
>> fatal: The remote end hung up unexpectedly
>> Clone of 'git://git.kernel.org/pub/scm/git/MyThing' into submodule path
>> 'MyThing' failed
>>
>> So it seemed the relative URL became an absolute URL.
>>
>> Looking more closely at a working example, I can see that (as you show below)
>> the URL in the super-repo's .gitmodules file retains the relative path, but
>> the submodule's remote.origin.url is an absolute path.
>>
>> In any case, "submodule add" isn't doing what I expected: make my local
>> MyThing repo a submodule of my git.git clone.
> 
> I thought I understood this workflow better than I actually did.  I
> think I understand more now, and I'm somewhat disappointed.  But I also
> failed to pick up the ball on this old discussion.
> 
> If you do this, I think it will work like you were hoping:
> 
>     :: ( mkdir MyThing && cd MyThing && git init )
>     Initialized empty Git repository in /opc/git/MyThing/.git/
>     :: git submodule add ../MyThing
>     Adding existing repo at 'MyThing' to the index

I see how that works, but I don't find that intuitive at all. For one, ../MyThing doesn't even exist, neither locally or on the origin repo. It's really ./MyThing (with one dot). The last idea that I'd come up with for adding ./MyThing as a submodule would be to use ../MyThing.

What git does in this case actually looks like a bug to me. I'd expect "git submodule add ../MyThing" to fail if there's no local ../MyThing and no remote ../MyThing.

> Furthermore, the relative path only works for URLs.  It does not work
> for local filesystems.

Well, sort of. From the current man page: "If the superproject doesn't have an origin configured the superproject is its own authoritative upstream and the current working directory is used instead."

I submitted two patches to clarify the documentation on that point:
	http://article.gmane.org/gmane.comp.version-control.git/175163
	http://article.gmane.org/gmane.comp.version-control.git/175162
They seemed to have been lost in the shuffle, though.
		M.
Previous: Phil HordNext: Junio C Hamano
Message 11 of 40 in “Tests for some submodule corner cases.”
  1. 0/2 Tests for some submodule corner cases.Marc Branchaud, May 30, 2011
  2. 1/2 Added a test for "submodule add" using a ../relative/path/to/the/submodule/repoMarc Branchaud, May 30, 2011
  3. 2/2 Added a test for "submodule status" when the submodule's working directory has deleted files.Marc Branchaud, May 30, 2011
  4. Jens LehmannMay 31, 2011
  5. submodule add: improve message when resolving a relative url failsJens Lehmann, May 31, 2011
  6. Marc BranchaudMay 31, 2011
  7. submodule add: improve message when resolving a relative url failsJens Lehmann, May 31, 2011
  8. Phil HordMay 31, 2011
  9. Marc BranchaudJun 1, 2011
  10. Phil HordJul 27, 2011
  11. Marc BranchaudJul 29, 2011
  12. Junio C HamanoMay 31, 2011
  13. Clarified how "git submodule add" handles relative paths.Marc Branchaud, Jun 1, 2011
  14. Junio C HamanoJun 1, 2011
  15. Jens LehmannJun 1, 2011
  16. Junio C HamanoJun 2, 2011
  17. Jens LehmannJun 3, 2011
  18. Junio C HamanoJun 3, 2011
  19. Mark LevedahlJun 4, 2011
  20. Jens LehmannJun 4, 2011
  21. Jens LehmannJun 4, 2011
  22. Junio C HamanoJun 5, 2011
  23. 0/3 submodule add: allow relative repository path even when no url is setJens Lehmann, Jun 6, 2011
  24. 1/3 submodule add: test failure when url is not configured in superprojectJens Lehmann, Jun 6, 2011
  25. 2/3 submodule add: allow relative repository path even when no url is setJens Lehmann, Jun 6, 2011
  26. 0/2 Improve "git submodule add" documentation.Marc Branchaud, Jun 6, 2011
  27. 1/2 More precisely described how "git submodule add" handles relative submodule URLs.Marc Branchaud, Jun 6, 2011
  28. 2/2 Moved paragraph describing the utility of relative submodule URLs.Marc Branchaud, Jun 6, 2011
  29. 3/3 submodule add: clean up duplicated codeJens Lehmann, Jun 6, 2011
  30. Junio C HamanoJun 6, 2011
  31. Marc BranchaudJun 6, 2011
  32. Jens LehmannJun 6, 2011
  33. Jens LehmannJun 7, 2011
  34. Phil HordJun 8, 2011
  35. [PATCHv2] Clarified how "git submodule add" handles relative paths.Marc Branchaud, Jun 2, 2011
  36. Marc BranchaudMay 31, 2011
  37. Jens LehmannMay 31, 2011
  38. Marc BranchaudJun 1, 2011
  39. Junio C HamanoJun 1, 2011
  40. Jens LehmannJun 1, 2011

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.