~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/urlutils.py

  • Committer: adwi2
  • Date: 2008-07-11 23:05:17 UTC
  • mto: This revision was merged to the branch mainline in revision 3550.
  • Revision ID: adwi2@014661-xp-20080711230517-6giupapiqdpuduir
Permits Windows to serve all paths on all drives.

 1) Special case in local transport for "/" on Windows
    * This is taken to be an empty base path
 2) urlutils._win32_path_(from|to)_url changes
    * file:/// == / and vice versa

This fixes the problems detailed in #240910
 * Since the server started by use of bzr+ssh:// uses '/' as a base,
   you can now access paths that are not on the root of the drive
   Python.exe is hosted on
 * You may now voluntarily serve all paths from a single server process, 
   should you find this desirable

Show diffs side-by-side

added added

removed removed

Lines of Context:
237
237
 
238
238
def _win32_local_path_from_url(url):
239
239
    """Convert a url like file:///C:/path/to/foo into C:/path/to/foo"""
240
 
    if url == 'file://':
241
 
        return ''
242
 
 
243
240
    if not url.startswith('file://'):
244
241
        raise errors.InvalidURL(url, 'local urls must start with file:///, '
245
242
                                     'UNC path urls must start with file://')
252
249
            raise errors.InvalidURL(url, 'Win32 UNC path urls'
253
250
                ' have form file://HOST/path')
254
251
        return unescape(win32_url)
 
252
 
 
253
    # allow empty paths so we can serve all roots
 
254
    if win32_url == '///':
 
255
        return '/'
 
256
    
255
257
    # usual local path with drive letter
256
258
    if (win32_url[3] not in ('abcdefghijklmnopqrstuvwxyz'
257
259
                             'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
274
276
    #       The worst part is that under linux ntpath.abspath has different
275
277
    #       semantics, since 'nt' is not an available module.
276
278
    if path == '/':
277
 
        return 'file://'
 
279
        return 'file:///'
278
280
 
279
281
    win32_path = osutils._win32_abspath(path)
280
282
    # check for UNC path \\HOST\path