11 from revlog import * |
11 from revlog import * |
12 from repo import * |
12 from repo import * |
13 from demandload import * |
13 from demandload import * |
14 demandload(globals(), "localrepo httprepo sshrepo") |
14 demandload(globals(), "localrepo httprepo sshrepo") |
15 |
15 |
16 # used to avoid circular references so destructors work |
|
17 def opener(base): |
|
18 p = base |
|
19 def o(path, mode="r"): |
|
20 if p.startswith("http://"): |
|
21 f = os.path.join(p, urllib.quote(path)) |
|
22 return httprangereader.httprangereader(f) |
|
23 |
|
24 f = os.path.join(p, path) |
|
25 |
|
26 mode += "b" # for that other OS |
|
27 |
|
28 if mode[0] != "r": |
|
29 try: |
|
30 s = os.stat(f) |
|
31 except OSError: |
|
32 d = os.path.dirname(f) |
|
33 if not os.path.isdir(d): |
|
34 os.makedirs(d) |
|
35 else: |
|
36 if s.st_nlink > 1: |
|
37 file(f + ".tmp", "wb").write(file(f, "rb").read()) |
|
38 util.rename(f+".tmp", f) |
|
39 |
|
40 return file(f, mode) |
|
41 |
|
42 return o |
|
43 |
|
44 def repository(ui, path=None, create=0): |
16 def repository(ui, path=None, create=0): |
45 if path: |
17 if path: |
46 if path.startswith("http://"): |
18 if path.startswith("http://"): |
47 return httprepo.httprepository(ui, path) |
19 return httprepo.httprepository(ui, path) |
48 if path.startswith("https://"): |
20 if path.startswith("https://"): |
50 if path.startswith("hg://"): |
22 if path.startswith("hg://"): |
51 return httprepo.httprepository( |
23 return httprepo.httprepository( |
52 ui, path.replace("hg://", "http://")) |
24 ui, path.replace("hg://", "http://")) |
53 if path.startswith("old-http://"): |
25 if path.startswith("old-http://"): |
54 return localrepo.localrepository( |
26 return localrepo.localrepository( |
55 ui, opener, path.replace("old-http://", "http://")) |
27 ui, util.opener, path.replace("old-http://", "http://")) |
56 if path.startswith("ssh://"): |
28 if path.startswith("ssh://"): |
57 return sshrepo.sshrepository(ui, path) |
29 return sshrepo.sshrepository(ui, path) |
58 |
30 |
59 return localrepo.localrepository(ui, opener, path, create) |
31 return localrepo.localrepository(ui, util.opener, path, create) |