##// END OF EJS Templates
schemes: add Kiln On Demand to default schemes
Benjamin Pollack -
r10777:bdc3256a stable
parent child Browse files
Show More
@@ -1,82 +1,84 b''
1 1 # Copyright 2009, Alexander Solovyov <piranha@piranha.org.ua>
2 2 #
3 3 # This software may be used and distributed according to the terms of the
4 4 # GNU General Public License version 2 or any later version.
5 5
6 6 """extend schemes with shortcuts to repository swarms
7 7
8 8 This extension allows you to specify shortcuts for parent URLs with a
9 9 lot of repositories to act like a scheme, for example::
10 10
11 11 [schemes]
12 12 py = http://code.python.org/hg/
13 13
14 14 After that you can use it like::
15 15
16 16 hg clone py://trunk/
17 17
18 18 Additionally there is support for some more complex schemas, for
19 19 example used by Google Code::
20 20
21 21 [schemes]
22 22 gcode = http://{1}.googlecode.com/hg/
23 23
24 24 The syntax is taken from Mercurial templates, and you have unlimited
25 25 number of variables, starting with ``{1}`` and continuing with
26 26 ``{2}``, ``{3}`` and so on. This variables will receive parts of URL
27 27 supplied, split by ``/``. Anything not specified as ``{part}`` will be
28 28 just appended to an URL.
29 29
30 30 For convenience, the extension adds these schemes by default::
31 31
32 32 [schemes]
33 33 py = http://hg.python.org/
34 34 bb = https://bitbucket.org/
35 35 bb+ssh = ssh://hg@bitbucket.org/
36 36 gcode = https://{1}.googlecode.com/hg/
37 kiln = https://{1}.kilnhg.com/Repo/
37 38
38 39 You can override a predefined scheme by defining a new scheme with the
39 40 same name.
40 41 """
41 42
42 43 import re
43 44 from mercurial import hg, templater
44 45
45 46
46 47 class ShortRepository(object):
47 48 def __init__(self, url, scheme, templater):
48 49 self.scheme = scheme
49 50 self.templater = templater
50 51 self.url = url
51 52 try:
52 53 self.parts = max(map(int, re.findall(r'\{(\d+)\}', self.url)))
53 54 except ValueError:
54 55 self.parts = 0
55 56
56 57 def __repr__(self):
57 58 return '<ShortRepository: %s>' % self.scheme
58 59
59 60 def instance(self, ui, url, create):
60 61 url = url.split('://', 1)[1]
61 62 parts = url.split('/', self.parts)
62 63 if len(parts) > self.parts:
63 64 tail = parts[-1]
64 65 parts = parts[:-1]
65 66 else:
66 67 tail = ''
67 68 context = dict((str(i + 1), v) for i, v in enumerate(parts))
68 69 url = ''.join(self.templater.process(self.url, context)) + tail
69 70 return hg._lookup(url).instance(ui, url, create)
70 71
71 72 schemes = {
72 73 'py': 'http://hg.python.org/',
73 74 'bb': 'https://bitbucket.org/',
74 75 'bb+ssh': 'ssh://hg@bitbucket.org/',
75 'gcode': 'https://{1}.googlecode.com/hg/'
76 'gcode': 'https://{1}.googlecode.com/hg/',
77 'kiln': 'https://{1}.kilnhg.com/Repo/'
76 78 }
77 79
78 80 def extsetup(ui):
79 81 schemes.update(dict(ui.configitems('schemes')))
80 82 t = templater.engine(lambda x: x)
81 83 for scheme, url in schemes.items():
82 84 hg.schemes[scheme] = ShortRepository(url, scheme, t)
General Comments 0
You need to be logged in to leave comments. Login now