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

Re: git-svn show-externals and svn version

From
Andreas Stricker <astricker@futurelab.ch>
Date
Mar 7, 2012, 09:39 UTC
Message-ID
<4F572CDC.6060303@futurelab.ch>
In-Reply-To
<5B8386D7-3C01-4A58-A7AB-9AA43BB45572@nikolaus-demmel.de>
Nikolaus Demmel <nikolaus@nikolaus-demmel.de> wrote:
> I feel a bit like I am talking to myself, but I see from the high
> traffic on this list that people are busy doing great things :-). I will
> write anyway in case someone interested in git-svn listens.

Um I'm always a bit behind in reading this list. A long time ago my colleague and I implemented a parser for the new svn:externals format as a proof of concept[1]. I never took the time to finish it.

> So I've investigated the matter a bit further. Turns out in the
> subversion SWIG language bindings there is an API function that parses
> svn:externals definitions for you.

This looks like a sane approach. I ended with a bunch of complicated parsing code [2].

> How could this be used in git-svn show-externals? As layed out before, I
> believe that the current output for the svn1.5 syntax is inherently
> broken and we should not worry about backwards compatibility for
> that.

I second that. The output for the new syntax is just plain broken and can't be used in a sane way. I know that because I tried...

Show 5 quoted lines
> To maintain backwards compatibility with the output for the old
> format and to give a canonical, easy to parse, output for any external
> definition, I suggest sticking to the current format, just inserting the
> parsed definition at the appropriate place with relative URLs completely
> resolved to absolute ones.

This is exactly what my proof of concept does. The output format keeps the same as for pre subversion 1.5 format.

Show 8 quoted lines
> The pre-svn1.5 syntax for external definitions was:
> 
> LOCAL-PATH [-r REVISION] ABSOLUTE-URL
> 
> The output for show-externals was thus (note that there is no parsing of
> the external definition going on yet):
> 
> DIRECTORY-PREFIX/LOCAL-PATH [-rREVISION] ABSOLUTE-URL

Wasn't there also a line commented with a hash "#" before that? Like: # DIRECTORY-PREFIX

Show 9 quoted lines
> The DIRECTORY-PREFIX was added because show-externals shows the external
> definitions for all subdirectories recursively. With this prefix, every
> line can be processed on its own. I suggest extending this output to:
> 
> DIRECTORY-PREFIX/LOCAL-PATH [-rREVISION] ABSOLUTE-URL[@PEG-REV]
> 
> Again, as mentioned above, show-externals should parse the definitions
> and resolve relative URLs. Any lines that the svn API call cannot parse
> should be completely ommited (e.g. commented lines and empty lines).
A sane approach. What about a warning about lines skipped?
Show 6 quoted lines
> As I understand it show-externals is intended primarily for scripts for
> further processing. With this extension existing scripts for the old
> syntax should keep working also long as they don't feature
> peg-revisions. With relative URLs resolved and a standard ordering old
> and new syntax cannot be distinguished in terms of show-externals output
> (except when there are peg-revsion are there).

True. So external tools like git-svn-clone-externals will still work with this. I verified this with my proof of concept.

Regards, Andy

[1] https://github.com/AndyStricker/git [2] https://github.com/AndyStricker/git/commit/9981b3b8313fb831247a16a04d5040bd6a8660b1

Previous: Jakub Narebski
Message 5 of 5 in “git-svn show-externals and svn version”
  1. Nikolaus DemmelFeb 19, 2012
  2. Nikolaus DemmelFeb 21, 2012
  3. Nikolaus DemmelFeb 22, 2012
  4. Jakub NarebskiMar 4, 2012
  5. Andreas StrickerMar 7, 2012

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.