mercurial/statichttprepo.py
branchstable
changeset 11066 26abd91d9e84
parent 10263 25e572394f5c
child 11155 245a67fe2574
equal deleted inserted replaced
11053:59d0d715fbfa 11066:26abd91d9e84
    16     def __init__(self, url, opener):
    16     def __init__(self, url, opener):
    17         # we assume opener has HTTPRangeHandler
    17         # we assume opener has HTTPRangeHandler
    18         self.url = url
    18         self.url = url
    19         self.pos = 0
    19         self.pos = 0
    20         self.opener = opener
    20         self.opener = opener
       
    21         self.name = url
    21     def seek(self, pos):
    22     def seek(self, pos):
    22         self.pos = pos
    23         self.pos = pos
    23     def read(self, bytes=None):
    24     def read(self, bytes=None):
    24         req = urllib2.Request(self.url)
    25         req = urllib2.Request(self.url)
    25         end = ''
    26         end = ''
    54                 data = data[self.pos:]
    55                 data = data[self.pos:]
    55         elif bytes:
    56         elif bytes:
    56             data = data[:bytes]
    57             data = data[:bytes]
    57         self.pos += len(data)
    58         self.pos += len(data)
    58         return data
    59         return data
       
    60     def __iter__(self):
       
    61         return iter(self.read().splitlines(1))
       
    62     def close(self):
       
    63         pass
    59 
    64 
    60 def build_opener(ui, authinfo):
    65 def build_opener(ui, authinfo):
    61     # urllib cannot handle URLs with embedded user or passwd
    66     # urllib cannot handle URLs with embedded user or passwd
    62     urlopener = url.opener(ui, authinfo)
    67     urlopener = url.opener(ui, authinfo)
    63     urlopener.add_handler(byterange.HTTPRangeHandler())
    68     urlopener.add_handler(byterange.HTTPRangeHandler())
    64 
    69 
    65     def opener(base):
    70     def opener(base):
    66         """return a function that opens files over http"""
    71         """return a function that opens files over http"""
    67         p = base
    72         p = base
    68         def o(path, mode="r"):
    73         def o(path, mode="r", atomictemp=None):
       
    74             if 'a' in mode or 'w' in mode:
       
    75                 raise IOError('Permission denied')
    69             f = "/".join((p, urllib.quote(path)))
    76             f = "/".join((p, urllib.quote(path)))
    70             return httprangereader(f, urlopener)
    77             return httprangereader(f, urlopener)
    71         return o
    78         return o
    72 
    79 
    73     return opener
    80     return opener
    75 class statichttprepository(localrepo.localrepository):
    82 class statichttprepository(localrepo.localrepository):
    76     def __init__(self, ui, path):
    83     def __init__(self, ui, path):
    77         self._url = path
    84         self._url = path
    78         self.ui = ui
    85         self.ui = ui
    79 
    86 
       
    87         self.root = path
    80         self.path, authinfo = url.getauthinfo(path.rstrip('/') + "/.hg")
    88         self.path, authinfo = url.getauthinfo(path.rstrip('/') + "/.hg")
    81 
    89 
    82         opener = build_opener(ui, authinfo)
    90         opener = build_opener(ui, authinfo)
    83         self.opener = opener(self.path)
    91         self.opener = opener(self.path)
    84 
    92 
   114 
   122 
   115         self.manifest = manifest.manifest(self.sopener)
   123         self.manifest = manifest.manifest(self.sopener)
   116         self.changelog = changelog.changelog(self.sopener)
   124         self.changelog = changelog.changelog(self.sopener)
   117         self._tags = None
   125         self._tags = None
   118         self.nodetagscache = None
   126         self.nodetagscache = None
       
   127         self._branchcache = None
       
   128         self._branchcachetip = None
   119         self.encodepats = None
   129         self.encodepats = None
   120         self.decodepats = None
   130         self.decodepats = None
   121 
   131 
   122     def url(self):
   132     def url(self):
   123         return self._url
   133         return self._url