82 lines
3.2 KiB
Plaintext
82 lines
3.2 KiB
Plaintext
|
URL escaping in Subversion
|
||
|
==========================
|
||
|
|
||
|
A quick document describing the rules (as far as we've found out, that is) that
|
||
|
apply to quoting of URLs and file paths in Subversion. Handling quoting
|
||
|
properly is a bit of a challenge, since different rules apply for file paths
|
||
|
and URLs, and those rules aren't entirely clear in either case.
|
||
|
|
||
|
What follows is a list of semi-random notes that need to be taken into
|
||
|
consideration when implementing proper quoting in the 'py lib'.
|
||
|
|
||
|
**DISCLAIMER**: currently the idea is just to have this document around as a
|
||
|
TODO list for implementation, not sure what will happen to it in the future...
|
||
|
Don't consider it part of the py lib documentation, and do understand it may be
|
||
|
incomplete or even incorrect...
|
||
|
|
||
|
* SVN deals with remote objects using URLs and local ones using paths
|
||
|
|
||
|
URL related notes
|
||
|
-----------------
|
||
|
|
||
|
* URLs follow (almost) normal `URL encoding rules`_
|
||
|
|
||
|
characters that aren't allowed in URL paths (such as :, @, %, etc.) should
|
||
|
be replaced with a % sign following the ASCII value of the character (two
|
||
|
digit HEX)
|
||
|
|
||
|
an exception (the only one I could find so far) is the drive letter in a file
|
||
|
URL in windows, the following path was required to get a file 'bar' from a
|
||
|
repo in 'c:\\foo'::
|
||
|
|
||
|
file:///c:/foo/bar
|
||
|
|
||
|
* URLs always have / as seperator
|
||
|
|
||
|
on Windows, the \\ characters in paths will have to be replaced with a /
|
||
|
|
||
|
also (see above) if the path contains a drive letter, a / should be prepended
|
||
|
|
||
|
* ignore casing on Windows?
|
||
|
|
||
|
since Windows is case-insensitive, it may make sense to consider ignoring
|
||
|
case on that platform(?)
|
||
|
|
||
|
* long file names
|
||
|
|
||
|
don't even want to go there... `filed an issue on this on in the tracker`_...
|
||
|
|
||
|
Path related notes
|
||
|
------------------
|
||
|
|
||
|
* all characters that are supported in paths by any operating system seem to
|
||
|
be supported by SVN
|
||
|
|
||
|
basically SVN doesn't think about platforms that aren't capable of using
|
||
|
certain characters: it will happily allow you to check a file with a name
|
||
|
containing a backslash (\\) in, resulting in a repo that isn't usable in
|
||
|
Windows anymore (you'll get a nasty message explaining how your local
|
||
|
checkout is broken on checking it out)...
|
||
|
|
||
|
I think py.path.svn* should take the approach of not allowing the characters
|
||
|
that will result in failing checkouts on Windows. These characters are (I
|
||
|
think, list taken from `some website`_)::
|
||
|
|
||
|
* | \ / : < > ?
|
||
|
|
||
|
This would mean that both svnwc and svnurl should fail on initializing when
|
||
|
the path (or the path part of the URL) contains one of these characters. Also
|
||
|
join() and other functions that take (parts of) paths as arguments should
|
||
|
check for, and fail on, these characters.
|
||
|
|
||
|
* paths don't require encoding
|
||
|
|
||
|
normally paths don't have to be encoded, however @ can confuse SVN in certain
|
||
|
cases; a workaround is to add @HEAD after the path (also works for relative
|
||
|
paths, I encountered this doing an SVN info on a file called 'bar@baz', in
|
||
|
the end the command 'svn info bar@baz@HEAD' worked)
|
||
|
|
||
|
.. _`filed an issue on this on in the tracker`: https://codespeak.net/issue/py-dev/issue38
|
||
|
.. _`URL encoding rules`: http://en.wikipedia.org/wiki/Percent-encoding
|
||
|
.. _`some website`: http://linuxboxadmin.com/articles/filefriction.php
|