Sunday, July 12, 2009

Using svn:externals with TortoiseSVN and FSFS repository


If you use Subversion and TortoiseSVN client with repository hosted on filesystem, this can be interesting for you.

Many many years ago (4,5?) when I implemented my first repository, I used filesystem (and I still like it, simple and functional with hook scripts). Only drawback was syntax – which varied between command line subversion client and tortoise client.

In general, syntax is protocol://Location. Problem is if you are hosting your repository in UNC path. Then syntax looks really strange: file:///\server\share/repo.

Notice “\” and “/” – sometimes it works, sometimes you have to fight with it.

Recently I worked with project that was using svn:externals (you can link different repositories together, it’s like symlink on filesystem – even better, you can point to same repository, but different revision ;)). Suddenly it rejected to download externals. After a while I realized they changed syntax, you can still use old syntax, however usage of new is required in case of svn:externals (probably bug). New syntax is much easier to handle and I like it a lot.

Compare for yourself :) file:///\server\share/repo compared to file://server/share/repo.



Stefan Küng said...

In svn 1.6, the syntax file:///\ for UNC paths has been deprecated (it should still work). But the recommended format now is simply file:// (note the two slashes instead of three compared to normal paths).

Martin Zugec said...

Hi Stefan,

so it is since 1.6... Perfect, I must say I love new syntax, it's much easier to use and easier to understand.

Anyway, there is a bug in svn:externals in that case - syntax is not backwards compatible, I will open bug for it.

Stefan Küng said...

No need to open a bug.
In 1.6, it's now possible to specify paths with non-ASCII chars by escaping them with the '\' char.
But that new feature of course means that the '\' char is now illegal itself unless escaped too as '\\'.

Martin Zugec said...

Hmmm, something is really strange than... I just tested that client 1.4.8 also supports file:// syntax.

Anyway, old syntax works in new clients (fine), however if you created externals using old version, new version is not capable of downloading them (file:///\)

Stefan Küng said...

Yes, older clients also support the file:// syntax. But the file:///\ syntax was deprecated (it still works for most commands, but not for externals anymore).

The reason as I mentioned is that the '\' char is now used for escaping the externals.