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
 |