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 |