Mercurial > hgsubversion
annotate hgsubversion/util.py @ 828:016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
author | Yonggang Luo <luoyonggang@gmail.com> |
---|---|
date | Fri, 30 Sep 2011 21:35:36 +0800 |
parents | ec074ebaa80f |
children | e9af7eba88db |
rev | line source |
---|---|
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
1 import re |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
2 import os |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
3 import urllib |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
4 |
620
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
5 from mercurial import cmdutil |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
6 from mercurial import error |
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
7 from mercurial import hg |
34
50d55c3e0d85
Some refactors of the previous change, including transparent upgrade of old-style pickled dictionaries.
Augie Fackler <durin42@gmail.com>
parents:
19
diff
changeset
|
8 from mercurial import node |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
249
diff
changeset
|
9 from mercurial import util as hgutil |
34
50d55c3e0d85
Some refactors of the previous change, including transparent upgrade of old-style pickled dictionaries.
Augie Fackler <durin42@gmail.com>
parents:
19
diff
changeset
|
10 |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
11 try: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
12 from mercurial import revset |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
13 except ImportError: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
14 pass |
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
15 |
764
bc5c176b63eb
svnexternals: support pushing subrepo based externals
Patrick Mezard <pmezard@gmail.com>
parents:
760
diff
changeset
|
16 ignoredfiles = set(['.hgtags', '.hgsvnexternals', '.hgsub', '.hgsubstate']) |
760
bf1c27a89c76
Extract files not to be pushed in util
Patrick Mezard <pmezard@gmail.com>
parents:
754
diff
changeset
|
17 |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
18 b_re = re.compile(r'^\+\+\+ b\/([^\n]*)', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
19 a_re = re.compile(r'^--- a\/([^\n]*)', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
20 devnull_re = re.compile(r'^([-+]{3}) /dev/null', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
21 header_re = re.compile(r'^diff --git .* b\/(.*)', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
22 newfile_devnull_re = re.compile(r'^--- /dev/null\n\+\+\+ b/([^\n]*)', |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
23 re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
24 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
25 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
26 def formatrev(rev): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
27 if rev == -1: |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
28 return '\t(working copy)' |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
29 return '\t(revision %d)' % rev |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
30 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
31 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
32 def filterdiff(diff, oldrev, newrev): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
33 diff = newfile_devnull_re.sub(r'--- \1\t(revision 0)' '\n' |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
34 r'+++ \1\t(working copy)', |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
35 diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
36 oldrev = formatrev(oldrev) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
37 newrev = formatrev(newrev) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
38 diff = a_re.sub(r'--- \1'+ oldrev, diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
39 diff = b_re.sub(r'+++ \1' + newrev, diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
40 diff = devnull_re.sub(r'\1 /dev/null\t(working copy)', diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
41 diff = header_re.sub(r'Index: \1' + '\n' + ('=' * 67), diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
42 return diff |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
43 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
44 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
45 def parentrev(ui, repo, meta, hashes): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
46 """Find the svn parent revision of the repo's dirstate. |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
47 """ |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
48 workingctx = repo.parents()[0] |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
49 outrev = outgoing_revisions(repo, hashes, workingctx.node()) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
50 if outrev: |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
51 workingctx = repo[outrev[-1]].parents()[0] |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
52 return workingctx |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
53 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
54 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
55 def islocalrepo(url): |
806
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
56 path = str(url) # convert once up front |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
57 if path.startswith('file:///'): |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
58 prefixlen = len('file://') |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
59 elif path.startswith('file:/'): |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
60 prefixlen = len('file:') |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
61 else: |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
62 return False |
806
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
63 if '#' in path.split('/')[-1]: # strip off #anchor |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
64 path = path[:path.rfind('#')] |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
65 path = url[prefixlen:] |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
66 path = urllib.url2pathname(path).replace(os.sep, '/') |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
67 while '/' in path: |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
68 if reduce(lambda x,y: x and y, |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
69 map(lambda p: os.path.exists(os.path.join(path, p)), |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
70 ('hooks', 'format', 'db', ))): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
71 return True |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
72 path = path.rsplit('/', 1)[0] |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
73 return False |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
74 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
75 |
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
76 def version(ui): |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
77 """Return version information if available.""" |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
78 try: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
79 import __version__ |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
80 return __version__.version |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
81 except ImportError: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
82 try: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
83 dn = os.path.dirname |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
84 repo = hg.repository(ui, dn(dn(__file__))) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
85 ver = repo.dirstate.parents()[0] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
86 return node.hex(ver)[:12] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
87 except: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
88 return 'unknown' |
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
195
diff
changeset
|
89 |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
90 |
469
5567af673f83
Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents:
465
diff
changeset
|
91 def normalize_url(url): |
754
caa527346a0f
svncommands: abort on missing metadata or Subversion URL (fixes #226)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
752
diff
changeset
|
92 if not url: |
caa527346a0f
svncommands: abort on missing metadata or Subversion URL (fixes #226)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
752
diff
changeset
|
93 return url |
475
15443c592f7a
Remove the svn+ from svn+https urls before calling the Subversion API. This was already being done for svn+http urls.
David Stanek <dstanek@dstanek.com>
parents:
469
diff
changeset
|
94 if url.startswith('svn+http://') or url.startswith('svn+https://'): |
469
5567af673f83
Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents:
465
diff
changeset
|
95 url = url[4:] |
555
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
96 url, revs, checkout = parseurl(url) |
284
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
97 url = url.rstrip('/') |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
98 if checkout: |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
99 url = '%s#%s' % (url, checkout) |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
100 return url |
140
9ffde8662967
util: Add a command to normalize svn urls and use it in a couple of places. Test that it works and prevents failed assertions.
Augie Fackler <durin42@gmail.com>
parents:
124
diff
changeset
|
101 |
828
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
102 |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
103 def load_string(file_path, default=None, limit=1024): |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
104 if not os.path.exists(file_path): |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
105 return default |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
106 try: |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
107 f = open(file_path, 'r') |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
108 ret = f.read(limit) |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
109 f.close() |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
110 except: |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
111 return default |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
112 if ret == '': |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
113 return default |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
114 return ret |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
115 |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
116 |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
117 def save_string(file_path, string): |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
118 if string is None: |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
119 string = "" |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
120 f = open(file_path, 'wb') |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
121 f.write(str(string)) |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
122 f.close() |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
123 |
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
124 |
580
35529f736fa2
util: add progress wrapper to maintain 1.3 support
Augie Fackler <durin42@gmail.com>
parents:
555
diff
changeset
|
125 # TODO remove when we drop 1.3 support |
35529f736fa2
util: add progress wrapper to maintain 1.3 support
Augie Fackler <durin42@gmail.com>
parents:
555
diff
changeset
|
126 def progress(ui, *args, **kwargs): |
35529f736fa2
util: add progress wrapper to maintain 1.3 support
Augie Fackler <durin42@gmail.com>
parents:
555
diff
changeset
|
127 if getattr(ui, 'progress', False): |
35529f736fa2
util: add progress wrapper to maintain 1.3 support
Augie Fackler <durin42@gmail.com>
parents:
555
diff
changeset
|
128 return ui.progress(*args, **kwargs) |
140
9ffde8662967
util: Add a command to normalize svn urls and use it in a couple of places. Test that it works and prevents failed assertions.
Augie Fackler <durin42@gmail.com>
parents:
124
diff
changeset
|
129 |
620
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
130 # TODO remove when we drop 1.5 support |
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
131 remoteui = getattr(cmdutil, 'remoteui', getattr(hg, 'remoteui', False)) |
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
132 if not remoteui: |
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
133 raise ImportError('Failed to import remoteui') |
8acae2416ec1
wrappers: cope with remoteui move to hg (hg cset d1908cb95a82)
Augie Fackler <durin42@gmail.com>
parents:
619
diff
changeset
|
134 |
555
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
135 def parseurl(url, heads=[]): |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
136 parsed = hg.parseurl(url, heads) |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
137 if len(parsed) == 3: |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
138 # old hg, remove when we can be 1.5-only |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
139 svn_url, heads, checkout = parsed |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
140 else: |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
141 svn_url, heads = parsed |
619
8beb5e28c23b
util: handle change to hg.parseurl from 3d6915f5a2bb
Augie Fackler <durin42@gmail.com>
parents:
582
diff
changeset
|
142 if isinstance(heads, tuple) and len(heads) == 2: |
8beb5e28c23b
util: handle change to hg.parseurl from 3d6915f5a2bb
Augie Fackler <durin42@gmail.com>
parents:
582
diff
changeset
|
143 # hg 1.6 or later |
8beb5e28c23b
util: handle change to hg.parseurl from 3d6915f5a2bb
Augie Fackler <durin42@gmail.com>
parents:
582
diff
changeset
|
144 _junk, heads = heads |
555
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
145 if heads: |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
146 checkout = heads[0] |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
147 else: |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
148 checkout = None |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
149 return svn_url, heads, checkout |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
150 |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
151 |
39
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
152 class PrefixMatch(object): |
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
153 def __init__(self, prefix): |
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
154 self.p = prefix |
140
9ffde8662967
util: Add a command to normalize svn urls and use it in a couple of places. Test that it works and prevents failed assertions.
Augie Fackler <durin42@gmail.com>
parents:
124
diff
changeset
|
155 |
39
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
156 def files(self): |
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
157 return [] |
140
9ffde8662967
util: Add a command to normalize svn urls and use it in a couple of places. Test that it works and prevents failed assertions.
Augie Fackler <durin42@gmail.com>
parents:
124
diff
changeset
|
158 |
39
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
159 def __call__(self, fn): |
b3c7b844b782
Some more fixes of cases discovered in the melange repo. If anyone knows how I can reproduce a "replaced" state in Subversion, I'd love to be able to make a real test case for this code.
Augie Fackler <durin42@gmail.com>
parents:
34
diff
changeset
|
160 return fn.startswith(self.p) |
99
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
161 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
162 def outgoing_revisions(repo, reverse_map, sourcerev): |
99
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
163 """Given a repo and an hg_editor, determines outgoing revisions for the |
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
164 current working copy state. |
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
165 """ |
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
166 outgoing_rev_hashes = [] |
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
167 if sourcerev in reverse_map: |
99
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
168 return |
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
169 sourcerev = repo[sourcerev] |
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
170 while (not sourcerev.node() in reverse_map |
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
171 and sourcerev.node() != node.nullid): |
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
172 outgoing_rev_hashes.append(sourcerev.node()) |
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
173 sourcerev = sourcerev.parents() |
221
ced45b753ba7
util: better error messages when finding svn parent of a revision.
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
174 if len(sourcerev) != 1: |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
249
diff
changeset
|
175 raise hgutil.Abort("Sorry, can't find svn parent of a merge revision.") |
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
176 sourcerev = sourcerev[0] |
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
177 if sourcerev.node() != node.nullid: |
99
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
178 return outgoing_rev_hashes |
124
291925677a9f
tag_repo: remove gentags command, extend repo.tags(), HgChangeEditor now takes either repo or repo_path
Luke Opperman <luke@loppear.com>
parents:
115
diff
changeset
|
179 |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
180 def outgoing_common_and_heads(repo, reverse_map, sourcerev): |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
181 """Given a repo and an hg_editor, determines outgoing revisions for the |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
182 current working copy state. Returns a tuple (common, heads) like |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
183 discovery.findcommonoutgoing does. |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
184 """ |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
185 if sourcerev in reverse_map: |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
186 return ([sourcerev], [sourcerev]) # nothing outgoing |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
187 sourcecx = repo[sourcerev] |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
188 while (not sourcecx.node() in reverse_map |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
189 and sourcecx.node() != node.nullid): |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
190 ps = sourcecx.parents() |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
191 if len(ps) != 1: |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
192 raise hgutil.Abort("Sorry, can't find svn parent of a merge revision.") |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
193 sourcecx = ps[0] |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
194 if sourcecx.node() != node.nullid: |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
195 return ([sourcecx.node()], [sourcerev]) |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
196 return ([sourcerev], [sourcerev]) # nothing outgoing |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
197 |
769
cc1d4aa3ba41
configurable substitution for empty commit message (fixes #195)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
764
diff
changeset
|
198 def default_commit_msg(ui): |
770
4dfc41b15d9a
make the default substition for an empty commit description the empty string
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
769
diff
changeset
|
199 return ui.config('hgsubversion', 'defaultmessage', '') |
186
6266ba36ee15
Create patch to make normal output much less verbose…
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
185
diff
changeset
|
200 |
198
df4611050286
Output consolidation; decrease the ‘Fetching...’ message to debug level.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
196
diff
changeset
|
201 def describe_commit(ui, h, b): |
df4611050286
Output consolidation; decrease the ‘Fetching...’ message to debug level.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
196
diff
changeset
|
202 ui.note(' committed to "%s" as %s\n' % ((b or 'default'), node.short(h))) |
223
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
203 |
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
204 |
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
205 def swap_out_encoding(new_encoding="UTF-8"): |
281
8ff0b3261b7f
util: drop 1.2 support in the encoding swap.
Augie Fackler <durin42@gmail.com>
parents:
275
diff
changeset
|
206 from mercurial import encoding |
8ff0b3261b7f
util: drop 1.2 support in the encoding swap.
Augie Fackler <durin42@gmail.com>
parents:
275
diff
changeset
|
207 old = encoding.encoding |
8ff0b3261b7f
util: drop 1.2 support in the encoding swap.
Augie Fackler <durin42@gmail.com>
parents:
275
diff
changeset
|
208 encoding.encoding = new_encoding |
223
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
209 return old |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
210 |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
211 |
497
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
475
diff
changeset
|
212 def issamefile(parentctx, childctx, f): |
582
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
580
diff
changeset
|
213 """Return True if f exists and is the same in childctx and parentctx""" |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
580
diff
changeset
|
214 if f not in parentctx or f not in childctx: |
44c56a7727c4
editor: fix issamefile() and copy detection in replay mode
Patrick Mezard <pmezard@gmail.com>
parents:
580
diff
changeset
|
215 return False |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
216 if parentctx == childctx: |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
217 return True |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
218 if parentctx.rev() > childctx.rev(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
219 parentctx, childctx = childctx, parentctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
220 |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
221 def selfandancestors(selfctx): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
222 yield selfctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
223 for ctx in selfctx.ancestors(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
224 yield ctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
225 |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
226 for pctx in selfandancestors(childctx): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
227 if pctx.rev() <= parentctx.rev(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
228 return True |
497
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
475
diff
changeset
|
229 if f in pctx.files(): |
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
475
diff
changeset
|
230 return False |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
231 # parentctx is not an ancestor of childctx, files are unrelated |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
232 return False |
707
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
233 |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
234 def _templatehelper(ctx, kw): |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
235 ''' |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
236 Helper function for displaying information about converted changesets. |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
237 ''' |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
238 convertinfo = ctx.extra().get('convert_revision', '') |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
239 |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
240 if not convertinfo or not convertinfo.startswith('svn:'): |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
241 return '' |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
242 |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
243 if kw == 'svnuuid': |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
244 return convertinfo[4:40] |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
245 elif kw == 'svnpath': |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
246 return convertinfo[40:].rsplit('@', 1)[0] |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
247 elif kw == 'svnrev': |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
248 return convertinfo[40:].rsplit('@', 1)[-1] |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
249 else: |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
250 raise hgutil.Abort('unrecognized hgsubversion keyword %s' % kw) |
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
251 |
794
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
252 def svnrevkw(**args): |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
253 """:svnrev: String. Converted subversion revision number.""" |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
254 return _templatehelper(args['ctx'], 'svnrev') |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
255 |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
256 def svnpathkw(**args): |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
257 """:svnpath: String. Converted subversion revision project path.""" |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
258 return _templatehelper(args['ctx'], 'svnpath') |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
259 |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
260 def svnuuidkw(**args): |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
261 """:svnuuid: String. Converted subversion revision repository identifier.""" |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
262 return _templatehelper(args['ctx'], 'svnuuid') |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
263 |
707
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
264 templatekeywords = { |
794
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
265 'svnrev': svnrevkw, |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
266 'svnpath': svnpathkw, |
c32c92fdca5b
util: use real function definitions for keywords, document them
Patrick Mezard <pmezard@gmail.com>
parents:
770
diff
changeset
|
267 'svnuuid': svnuuidkw, |
707
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
268 } |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
269 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
270 def revset_fromsvn(repo, subset, x): |
752
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
271 '''``fromsvn()`` |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
272 Select changesets that originate from Subversion. |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
273 ''' |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
274 args = revset.getargs(x, 0, 0, "fromsvn takes no arguments") |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
275 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
276 def matches(r): |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
277 convertinfo = repo[r].extra().get('convert_revision', '') |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
278 return convertinfo[:4] == 'svn:' |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
279 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
280 return [r for r in subset if matches(r)] |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
281 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
282 def revset_svnrev(repo, subset, x): |
752
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
283 '''``svnrev(number)`` |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
284 Select changesets that originate in the given Subversion revision. |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
285 ''' |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
286 args = revset.getargs(x, 1, 1, "svnrev takes one argument") |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
287 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
288 rev = revset.getstring(args[0], |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
289 "the argument to svnrev() must be a number") |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
290 try: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
291 rev = int(rev) |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
292 except ValueError: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
293 raise error.ParseError("the argument to svnrev() must be a number") |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
294 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
295 def matches(r): |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
296 convertinfo = repo[r].extra().get('convert_revision', '') |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
297 if convertinfo[:4] != 'svn:': |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
298 return False |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
299 return int(convertinfo[40:].rsplit('@', 1)[-1]) == rev |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
300 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
301 return [r for r in subset if matches(r)] |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
302 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
303 revsets = { |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
304 'fromsvn': revset_fromsvn, |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
305 'svnrev': revset_svnrev, |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
306 } |