##// END OF EJS Templates
merge with mpm
merge with mpm

File last commit:

r6312:08800489 default
r6776:39319a45 merge default
Show More
statichttprepo.py
83 lines | 2.7 KiB | text/x-python | PythonLexer
mpm@selenic.com
Separate out old-http support...
r1101 # statichttprepo.py - simple http repository class for mercurial
#
# This provides read-only repo access to repositories exported via static http
#
Thomas Arendsen Hein
Updated copyright notices and add "and others" to "hg version"
r4635 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com>
mpm@selenic.com
Separate out old-http support...
r1101 #
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
Matt Mackall
Simplify i18n imports
r3891 from i18n import _
Joel Rosdahl
Remove unused imports
r6212 import changelog, httprangereader
Dirkjan Ochtman
make static-http work with empty repos (issue965)
r6028 import repo, localrepo, manifest, util
import urllib, urllib2, errno
Bryan O'Sullivan
Move urllib error handling from revlog into statichttprepo, where it belongs.
r1325
class rangereader(httprangereader.httprangereader):
def read(self, size=None):
try:
return httprangereader.httprangereader.read(self, size)
Thomas Arendsen Hein
Catch urllib errors for old-http in a nicer way.
r1821 except urllib2.HTTPError, inst:
Dirkjan Ochtman
make static-http work with empty repos (issue965)
r6028 num = inst.code == 404 and errno.ENOENT or None
raise IOError(num, inst)
Bryan O'Sullivan
Move urllib error handling from revlog into statichttprepo, where it belongs.
r1325 except urllib2.URLError, inst:
Thomas Arendsen Hein
Catch urllib errors for old-http in a nicer way.
r1821 raise IOError(None, inst.reason[1])
mpm@selenic.com
Separate out old-http support...
r1101
def opener(base):
"""return a function that opens files over http"""
p = base
def o(path, mode="r"):
Benoit Boissinot
use forward "/" for internal path and static http, fix issue437
r3794 f = "/".join((p, urllib.quote(path)))
Bryan O'Sullivan
Move urllib error handling from revlog into statichttprepo, where it belongs.
r1325 return rangereader(f)
mpm@selenic.com
Separate out old-http support...
r1101 return o
class statichttprepository(localrepo.localrepository):
def __init__(self, ui, path):
Vadim Gelfer
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks...
r2673 self._url = path
mpm@selenic.com
Separate out old-http support...
r1101 self.ui = ui
Benoit Boissinot
switch to the .hg/store layout, fix the tests
r3853
Paul Bx
statichttprepo: fix calls on '/' URI (issue 747)
r5315 self.path = path.rstrip('/') + "/.hg"
mpm@selenic.com
Separate out old-http support...
r1101 self.opener = opener(self.path)
Dirkjan Ochtman
make static-http work with empty repos (issue965)
r6028
Benoit Boissinot
add "requires" file to the repo, specifying the requirements
r3851 # find requirements
try:
requirements = self.opener("requires").read().splitlines()
Dirkjan Ochtman
make static-http work with empty repos (issue965)
r6028 except IOError, inst:
if inst.errno == errno.ENOENT:
msg = _("'%s' does not appear to be an hg repository") % path
raise repo.RepoError(msg)
else:
requirements = []
Benoit Boissinot
add "requires" file to the repo, specifying the requirements
r3851 # check them
for r in requirements:
if r not in self.supported:
raise repo.RepoError(_("requirement '%s' not supported") % r)
# setup store
Benoit Boissinot
switch to the .hg/store layout, fix the tests
r3853 if "store" in requirements:
self.encodefn = util.encodefilename
self.decodefn = util.decodefilename
self.spath = self.path + "/store"
else:
self.encodefn = lambda x: x
self.decodefn = lambda x: x
self.spath = self.path
self.sopener = util.encodedopener(opener(self.spath), self.encodefn)
Benoit Boissinot
add "requires" file to the repo, specifying the requirements
r3851
Benoit Boissinot
introduce localrepo.spath for the store path, sopener fixes
r3791 self.manifest = manifest.manifest(self.sopener)
self.changelog = changelog.changelog(self.sopener)
mpm@selenic.com
Separate out old-http support...
r1101 self.tagscache = None
self.nodetagscache = None
Benoit Boissinot
cleanup of revlog.group when repository is local...
r1598 self.encodepats = None
self.decodepats = None
mpm@selenic.com
Separate out old-http support...
r1101
Vadim Gelfer
hooks: add url to changegroup, incoming, prechangegroup, pretxnchangegroup hooks...
r2673 def url(self):
return 'static-' + self._url
mpm@selenic.com
Separate out old-http support...
r1101 def local(self):
return False
Vadim Gelfer
clean up hg.py: move repo constructor code into each repo module
r2740
def instance(ui, path, create):
if create:
raise util.Abort(_('cannot create new static-http repository'))
Thomas Arendsen Hein
Removed deprecated hg:// and old-http:// protocols (issue406)
r4853 return statichttprepository(ui, path[7:])