annotate mercurial/hg.py @ 2595:edb66cb05ded

parse url schemes more strictly. previous code mistook repo named "hg" for scheme named "hg".
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Tue, 11 Jul 2006 15:52:36 -0700
parents 0875cda033fd
children 5ba8be56fa8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
1 # hg.py - repository classes for mercurial
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
2 #
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
3 # Copyright 2005 Matt Mackall <mpm@selenic.com>
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
4 #
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
5 # This software may be used and distributed according to the terms
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
6 # of the GNU General Public License, incorporated herein by reference.
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
7
1089
142b5d5ec9cc Break apart hg.py
mpm@selenic.com
parents: 1072
diff changeset
8 from node import *
142b5d5ec9cc Break apart hg.py
mpm@selenic.com
parents: 1072
diff changeset
9 from repo import *
262
3db700146536 implement demand loading hack
mpm@selenic.com
parents: 256
diff changeset
10 from demandload import *
2431
d90a9d7c7d4d replace old-http:// syntax by static-http:// and deprecate the redundant hg://
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1945
diff changeset
11 from i18n import gettext as _
1945
dec6d3c13dbf new type of repo: bundle://path/to/repo+/path/to/bundlename
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 1102
diff changeset
12 demandload(globals(), "localrepo bundlerepo httprepo sshrepo statichttprepo")
2472
e6ec81a8feea make repo scheme table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
13 demandload(globals(), "os util")
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
14
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
15 def bundle(ui, path):
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
16 if path.startswith('bundle://'):
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
17 path = path[9:]
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
18 else:
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
19 path = path[7:]
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
20 s = path.split("+", 1)
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
21 if len(s) == 1:
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
22 repopath, bundlename = "", s[0]
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
23 else:
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
24 repopath, bundlename = s
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
25 return bundlerepo.bundlerepository(ui, repopath, bundlename)
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
26
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
27 def hg(ui, path):
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
28 ui.warn(_("hg:// syntax is deprecated, please use http:// instead\n"))
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
29 return httprepo.httprepository(ui, path.replace("hg://", "http://"))
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
30
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
31 def local_(ui, path, create=0):
2472
e6ec81a8feea make repo scheme table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
32 if path.startswith('file:'):
e6ec81a8feea make repo scheme table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
33 path = path[5:]
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
34 return localrepo.localrepository(ui, path, create)
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
35
2549
e1831f06eef1 Added ability to clone from a local repository to a (new) remote one.
Sean Meiners <sean.meiners@linspire.com>
parents: 2479
diff changeset
36 def ssh_(ui, path, create=0):
e1831f06eef1 Added ability to clone from a local repository to a (new) remote one.
Sean Meiners <sean.meiners@linspire.com>
parents: 2479
diff changeset
37 return sshrepo.sshrepository(ui, path, create)
e1831f06eef1 Added ability to clone from a local repository to a (new) remote one.
Sean Meiners <sean.meiners@linspire.com>
parents: 2479
diff changeset
38
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
39 def old_http(ui, path):
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
40 ui.warn(_("old-http:// syntax is deprecated, "
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
41 "please use static-http:// instead\n"))
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
42 return statichttprepo.statichttprepository(
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
43 ui, path.replace("old-http://", "http://"))
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
44
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
45 def static_http(ui, path):
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
46 return statichttprepo.statichttprepository(
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
47 ui, path.replace("static-http://", "http://"))
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
48
2472
e6ec81a8feea make repo scheme table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
49 schemes = {
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
50 'bundle': bundle,
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
51 'file': local_,
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
52 'hg': hg,
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
53 'http': lambda ui, path: httprepo.httprepository(ui, path),
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
54 'https': lambda ui, path: httprepo.httpsrepository(ui, path),
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
55 'old-http': old_http,
2549
e1831f06eef1 Added ability to clone from a local repository to a (new) remote one.
Sean Meiners <sean.meiners@linspire.com>
parents: 2479
diff changeset
56 'ssh': ssh_,
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
57 'static-http': static_http,
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
58 }
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
59
60
e32fdbd97839 Add hg:// protocol
mpm@selenic.com
parents: 56
diff changeset
60 def repository(ui, path=None, create=0):
2595
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
61 scheme = None
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
62 if path:
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
63 c = path.find(':')
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
64 if c > 0:
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
65 scheme = schemes.get(path[:c])
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
66 else:
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
67 path = ''
edb66cb05ded parse url schemes more strictly.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2579
diff changeset
68 ctor = scheme or schemes['file']
2555
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
69 if create:
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
70 try:
2469
2e91ba371c4c hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2431
diff changeset
71 return ctor(ui, path, create)
2555
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
72 except TypeError:
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
73 raise util.Abort(_('cannot create new repository over "%s" protocol') %
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
74 scheme)
d6605381c6df hg.py: move exception handling code to try to avoid hiding errors
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2549
diff changeset
75 return ctor(ui, path)