##// END OF EJS Templates
Merge with crew-stable
Merge with crew-stable

File last commit:

r5321:639935f2 merge default
r5692:1127fe12 merge default
Show More
statichttprepo.py
78 lines | 2.5 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 _
Matt Mackall
Replace demandload with new demandimport
r3877 import changelog, filelog, httprangereader
import repo, localrepo, manifest, os, urllib, urllib2, util
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:
raise IOError(None, 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)
Benoit Boissinot
add "requires" file to the repo, specifying the requirements
r3851 # find requirements
try:
requirements = self.opener("requires").read().splitlines()
except IOError:
requirements = []
# 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 dev(self):
return -1
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:])