[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

svn:externals parser API

From: Nikolaus Demmel <nikolaus_at_nikolaus-demmel.de>
Date: Tue, 21 Feb 2012 22:26:34 +0100

Hi,

this is my first post to this list and I'm not subscribed, so please CC
me when answering.

I'm investigating how to improve using git-svn with svn-externals,
either with an additional script or directly in within git. In any case
I would need git-svn to display the externals. There is "git svn
propget", but there is no "recursive" parameter yet. A long time ago
"git svn show-externals" was written, which gets the svn:externals
property recursively and does some very crude processing. Unfortunetly
it can only deal with the pre 1.5 format for svn:externals.

Since external definitions are quite complex by now, with the old and
new format, with comments and empty lines, (peg) revisions, relative and
absolute URLs, it would be nice to get a parsed form of these externals
with the URLs already resolved and the order always the same
irrespective of whether the actual definitions are in the old or the new
format.

The obvious way to get those parse external definitions would be through
the language bindings. I looked at the python bindings for example, but
didn't find anything of the likes. In the case of git-svn, they use the
perl bindings, but I guess it is a similar story there.

I have the following questions:

1) Is there a way to leverage an existing svn:externals parser through
the language bindings (and I have been unable to find it)?

2) If not, would it be easy to add this to the language bindings?

A quick look at hgsubversion indicates that their handling of
svn:externals is far more sophisticated that that of git-svn at the
moment, but even in their code they mention that they don't support
escaping of special characters in paths, like spaces for example (this
was introduced in svn 1.6, I think).

So in any case it would be hard and error prone, if every tool that
wants to deal with externals has to write a parser itsself. Also, the
documentation on the special cases and all the details is not so easy to
find. The svn book explains it from a user perspective, but doesn't give
a full specification of the exact format. The most accurate and concise
description is maybe "svn help propget", but even there some things are
missing, e.g. that empty lines and trailing/perceding white space seems
to be allowed etc.

I hope someone can give me some insight in the matter. Currently the
simplest way to get my svn repository with many externals working nicely
in git, is to first use hgsubversion to create a mercurial repo and then
export that to git using hggit. I hope thats not the end of the story...

Best,
Nikolaus Demmel
Received on 2012-02-21 22:55:36 CET

This is an archived mail posted to the Subversion Users mailing list.