hg.py
59 lines
| 1.8 KiB
| text/x-python
|
PythonLexer
/ mercurial / hg.py
mpm@selenic.com
|
r0 | # hg.py - repository classes for mercurial | ||
# | ||||
# Copyright 2005 Matt Mackall <mpm@selenic.com> | ||||
# | ||||
# This software may be used and distributed according to the terms | ||||
# of the GNU General Public License, incorporated herein by reference. | ||||
mpm@selenic.com
|
r1089 | import os | ||
mpm@selenic.com
|
r419 | import util | ||
mpm@selenic.com
|
r1089 | from node import * | ||
mpm@selenic.com
|
r262 | from revlog import * | ||
mpm@selenic.com
|
r1089 | from repo import * | ||
mpm@selenic.com
|
r262 | from demandload import * | ||
mpm@selenic.com
|
r1089 | demandload(globals(), "localrepo httprepo sshrepo") | ||
mpm@selenic.com
|
r0 | |||
# used to avoid circular references so destructors work | ||||
def opener(base): | ||||
p = base | ||||
def o(path, mode="r"): | ||||
Matt Mackall
|
r686 | if p.startswith("http://"): | ||
mpm@selenic.com
|
r15 | f = os.path.join(p, urllib.quote(path)) | ||
mpm@selenic.com
|
r372 | return httprangereader.httprangereader(f) | ||
mpm@selenic.com
|
r15 | |||
mpm@selenic.com
|
r0 | f = os.path.join(p, path) | ||
mpm@selenic.com
|
r292 | mode += "b" # for that other OS | ||
if mode[0] != "r": | ||||
mpm@selenic.com
|
r110 | try: | ||
s = os.stat(f) | ||||
except OSError: | ||||
d = os.path.dirname(f) | ||||
if not os.path.isdir(d): | ||||
os.makedirs(d) | ||||
else: | ||||
if s.st_nlink > 1: | ||||
mpm@selenic.com
|
r417 | file(f + ".tmp", "wb").write(file(f, "rb").read()) | ||
mpm@selenic.com
|
r421 | util.rename(f+".tmp", f) | ||
mpm@selenic.com
|
r0 | |||
return file(f, mode) | ||||
return o | ||||
mpm@selenic.com
|
r60 | def repository(ui, path=None, create=0): | ||
Matt Mackall
|
r623 | if path: | ||
if path.startswith("http://"): | ||||
mpm@selenic.com
|
r1089 | return httprepo.httprepository(ui, path) | ||
mpm@selenic.com
|
r923 | if path.startswith("https://"): | ||
mpm@selenic.com
|
r1089 | return httprepo.httpsrepository(ui, path) | ||
Matt Mackall
|
r623 | if path.startswith("hg://"): | ||
mpm@selenic.com
|
r1089 | return httprepo.httprepository( | ||
ui, path.replace("hg://", "http://")) | ||||
Matt Mackall
|
r623 | if path.startswith("old-http://"): | ||
mpm@selenic.com
|
r1089 | return localrepo.localrepository( | ||
ui, opener, path.replace("old-http://", "http://")) | ||||
Matt Mackall
|
r624 | if path.startswith("ssh://"): | ||
mpm@selenic.com
|
r1089 | return sshrepo.sshrepository(ui, path) | ||
mpm@selenic.com
|
r60 | |||
mpm@selenic.com
|
r1089 | return localrepo.localrepository(ui, opener, path, create) | ||