mercurial/statichttprepo.py
changeset 14091 0aa60e4e0b76
parent 14076 924c82157d46
child 14168 135e244776f0
equal deleted inserted replaced
14090:e24b5e3c2f27 14091:0aa60e4e0b76
     7 # This software may be used and distributed according to the terms of the
     7 # This software may be used and distributed according to the terms of the
     8 # GNU General Public License version 2 or any later version.
     8 # GNU General Public License version 2 or any later version.
     9 
     9 
    10 from i18n import _
    10 from i18n import _
    11 import changelog, byterange, url, error
    11 import changelog, byterange, url, error
    12 import localrepo, manifest, util, store
    12 import localrepo, manifest, util, scmutil, store
    13 import urllib, urllib2, errno
    13 import urllib, urllib2, errno
    14 
    14 
    15 class httprangereader(object):
    15 class httprangereader(object):
    16     def __init__(self, url, opener):
    16     def __init__(self, url, opener):
    17         # we assume opener has HTTPRangeHandler
    17         # we assume opener has HTTPRangeHandler
    65 def build_opener(ui, authinfo):
    65 def build_opener(ui, authinfo):
    66     # urllib cannot handle URLs with embedded user or passwd
    66     # urllib cannot handle URLs with embedded user or passwd
    67     urlopener = url.opener(ui, authinfo)
    67     urlopener = url.opener(ui, authinfo)
    68     urlopener.add_handler(byterange.HTTPRangeHandler())
    68     urlopener.add_handler(byterange.HTTPRangeHandler())
    69 
    69 
    70     def opener(base):
    70     class statichttpopener(scmutil.abstractopener):
    71         """return a function that opens files over http"""
    71         def __init__(self, base):
    72         p = base
    72             self.base = base
    73         def o(path, mode="r", atomictemp=None):
    73 
       
    74         def __call__(self, path, mode="r", atomictemp=None):
    74             if mode not in ('r', 'rb'):
    75             if mode not in ('r', 'rb'):
    75                 raise IOError('Permission denied')
    76                 raise IOError('Permission denied')
    76             f = "/".join((p, urllib.quote(path)))
    77             f = "/".join((self.base, urllib.quote(path)))
    77             return httprangereader(f, urlopener)
    78             return httprangereader(f, urlopener)
    78         return o
       
    79 
    79 
    80     return opener
    80     return statichttpopener
    81 
    81 
    82 class statichttprepository(localrepo.localrepository):
    82 class statichttprepository(localrepo.localrepository):
    83     def __init__(self, ui, path):
    83     def __init__(self, ui, path):
    84         self._url = path
    84         self._url = path
    85         self.ui = ui
    85         self.ui = ui