statichttprepo.py
64 lines
| 2.0 KiB
| text/x-python
|
PythonLexer
/ mercurial / statichttprepo.py
mpm@selenic.com
|
r1101 | # statichttprepo.py - simple http repository class for mercurial | ||
# | ||||
# This provides read-only repo access to repositories exported via static http | ||||
# | ||||
Vadim Gelfer
|
r2859 | # Copyright 2005, 2006 Matt Mackall <mpm@selenic.com> | ||
mpm@selenic.com
|
r1101 | # | ||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
Vadim Gelfer
|
r2740 | from demandload import * | ||
from i18n import gettext as _ | ||||
Bryan O'Sullivan
|
r1325 | demandload(globals(), "changelog filelog httprangereader") | ||
Vadim Gelfer
|
r2740 | demandload(globals(), "localrepo manifest os urllib urllib2 util") | ||
Bryan O'Sullivan
|
r1325 | |||
class rangereader(httprangereader.httprangereader): | ||||
def read(self, size=None): | ||||
try: | ||||
return httprangereader.httprangereader.read(self, size) | ||||
Thomas Arendsen Hein
|
r1821 | except urllib2.HTTPError, inst: | ||
raise IOError(None, inst) | ||||
Bryan O'Sullivan
|
r1325 | except urllib2.URLError, inst: | ||
Thomas Arendsen Hein
|
r1821 | raise IOError(None, inst.reason[1]) | ||
mpm@selenic.com
|
r1101 | |||
def opener(base): | ||||
"""return a function that opens files over http""" | ||||
p = base | ||||
def o(path, mode="r"): | ||||
f = os.path.join(p, urllib.quote(path)) | ||||
Bryan O'Sullivan
|
r1325 | return rangereader(f) | ||
mpm@selenic.com
|
r1101 | return o | ||
class statichttprepository(localrepo.localrepository): | ||||
def __init__(self, ui, path): | ||||
Vadim Gelfer
|
r2673 | self._url = path | ||
mpm@selenic.com
|
r1101 | self.path = (path + "/.hg") | ||
self.ui = ui | ||||
mason@suse.com
|
r2072 | self.revlogversion = 0 | ||
mpm@selenic.com
|
r1101 | self.opener = opener(self.path) | ||
self.manifest = manifest.manifest(self.opener) | ||||
self.changelog = changelog.changelog(self.opener) | ||||
self.tagscache = None | ||||
self.nodetagscache = None | ||||
Benoit Boissinot
|
r1598 | self.encodepats = None | ||
self.decodepats = None | ||||
mpm@selenic.com
|
r1101 | |||
Vadim Gelfer
|
r2673 | def url(self): | ||
return 'static-' + self._url | ||||
mpm@selenic.com
|
r1101 | def dev(self): | ||
return -1 | ||||
def local(self): | ||||
return False | ||||
Vadim Gelfer
|
r2740 | |||
def instance(ui, path, create): | ||||
if create: | ||||
raise util.Abort(_('cannot create new static-http repository')) | ||||
if path.startswith('old-http:'): | ||||
ui.warn(_("old-http:// syntax is deprecated, " | ||||
"please use static-http:// instead\n")) | ||||
path = path[4:] | ||||
else: | ||||
path = path[7:] | ||||
return statichttprepository(ui, path) | ||||