10 from demandload import * |
10 from demandload import * |
11 from i18n import gettext as _ |
11 from i18n import gettext as _ |
12 demandload(globals(), "localrepo bundlerepo httprepo sshrepo statichttprepo") |
12 demandload(globals(), "localrepo bundlerepo httprepo sshrepo statichttprepo") |
13 demandload(globals(), "errno lock os shutil util") |
13 demandload(globals(), "errno lock os shutil util") |
14 |
14 |
15 def bundle(ui, path): |
15 def _local(path): |
16 if path.startswith('bundle://'): |
16 return os.path.isfile(util.drop_scheme('file', path)) and bundlerepo or localrepo |
17 path = path[9:] |
|
18 else: |
|
19 path = path[7:] |
|
20 s = path.split("+", 1) |
|
21 if len(s) == 1: |
|
22 repopath, bundlename = "", s[0] |
|
23 else: |
|
24 repopath, bundlename = s |
|
25 return bundlerepo.bundlerepository(ui, repopath, bundlename) |
|
26 |
|
27 def hg(ui, path): |
|
28 ui.warn(_("hg:// syntax is deprecated, please use http:// instead\n")) |
|
29 return httprepo.httprepository(ui, path.replace("hg://", "http://")) |
|
30 |
|
31 def local_(ui, path, create=0): |
|
32 if path.startswith('file:'): |
|
33 path = path[5:] |
|
34 if not create and os.path.isfile(path): |
|
35 return bundlerepo.bundlerepository(ui, '', path) |
|
36 return localrepo.localrepository(ui, path, create) |
|
37 |
|
38 def ssh_(ui, path, create=0): |
|
39 return sshrepo.sshrepository(ui, path, create) |
|
40 |
|
41 def old_http(ui, path): |
|
42 ui.warn(_("old-http:// syntax is deprecated, " |
|
43 "please use static-http:// instead\n")) |
|
44 return statichttprepo.statichttprepository( |
|
45 ui, path.replace("old-http://", "http://")) |
|
46 |
|
47 def static_http(ui, path): |
|
48 return statichttprepo.statichttprepository( |
|
49 ui, path.replace("static-http://", "http://")) |
|
50 |
17 |
51 schemes = { |
18 schemes = { |
52 'bundle': bundle, |
19 'bundle': bundlerepo, |
53 'file': local_, |
20 'file': _local, |
54 'hg': hg, |
21 'hg': httprepo, |
55 'http': lambda ui, path: httprepo.httprepository(ui, path), |
22 'http': httprepo, |
56 'https': lambda ui, path: httprepo.httpsrepository(ui, path), |
23 'https': httprepo, |
57 'old-http': old_http, |
24 'old-http': statichttprepo, |
58 'ssh': ssh_, |
25 'ssh': sshrepo, |
59 'static-http': static_http, |
26 'static-http': statichttprepo, |
60 } |
27 } |
61 |
28 |
62 remote_schemes = [ |
29 def _lookup(path): |
63 'bundle', |
30 scheme = 'file' |
64 'hg', |
31 if path: |
65 'http', |
32 c = path.find(':') |
66 'https', |
33 if c > 0: |
67 'old-http', |
34 scheme = path[:c] |
68 'ssh', |
35 thing = schemes.get(scheme) or schemes['file'] |
69 'static-http', |
36 try: |
70 ] |
37 return thing(path) |
71 |
38 except TypeError: |
|
39 return thing |
|
40 |
72 def islocal(repo): |
41 def islocal(repo): |
73 '''return true if repo or path is local''' |
42 '''return true if repo or path is local''' |
74 if isinstance(repo, str): |
43 if isinstance(repo, str): |
75 c = repo.find(':') |
44 try: |
76 return c <= 0 or repo[:c] not in remote_schemes |
45 return _lookup(repo).islocal(repo) |
|
46 except AttributeError: |
|
47 return False |
77 return repo.local() |
48 return repo.local() |
78 |
49 |
79 def repository(ui, path=None, create=0): |
50 def repository(ui, path=None, create=False): |
80 scheme = None |
51 return _lookup(path).instance(ui, path, create) |
81 if path: |
|
82 c = path.find(':') |
|
83 if c > 0: |
|
84 scheme = schemes.get(path[:c]) |
|
85 else: |
|
86 path = '' |
|
87 ctor = scheme or schemes['file'] |
|
88 if create: |
|
89 try: |
|
90 return ctor(ui, path, create) |
|
91 except TypeError: |
|
92 raise util.Abort(_('cannot create new repository over "%s" protocol') % |
|
93 scheme) |
|
94 return ctor(ui, path) |
|
95 |
52 |
96 def defaultdest(source): |
53 def defaultdest(source): |
97 '''return default destination of clone if none is given''' |
54 '''return default destination of clone if none is given''' |
98 return os.path.basename(os.path.normpath(source)) |
55 return os.path.basename(os.path.normpath(source)) |
99 |
56 |