Mercurial > hgsubversion
annotate hgsubversion/util.py @ 1596:04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
This is done to be compatible with treemanifest repositories.
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Tue, 20 Nov 2018 15:37:06 +0300 |
parents | d6b75cf2c27d |
children |
rev | line source |
---|---|
1140
9ec3c2e89c94
util: banish pickle to compathacks
Sean Farley <sean.michael.farley@gmail.com>
parents:
1137
diff
changeset
|
1 import compathacks |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
2 import re |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 import os |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
4 import urllib |
1135
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
5 import json |
1250
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
6 import gc |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
7 |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
8 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
|
9 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
|
10 from mercurial import node |
1040
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
11 from mercurial import repair |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
249
diff
changeset
|
12 from mercurial import util as hgutil |
1037
2316f2623dd4
Fix for missing mercurial.utils deque
Will Thames <will@thames.id.au>
parents:
1035
diff
changeset
|
13 |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
14 try: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
15 from mercurial import revset |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
16 except ImportError: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
17 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
|
18 |
1502
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
19 try: |
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
20 from mercurial import smartset |
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
21 smartset.baseset # force demandimport to load the module now |
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
22 except ImportError: |
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
23 smartset = None |
fb91566d849c
util: return baseset instead of plain list from revset
Arun Kulshreshtha <kulshrax@fb.com>
parents:
1461
diff
changeset
|
24 |
764
bc5c176b63eb
svnexternals: support pushing subrepo based externals
Patrick Mezard <pmezard@gmail.com>
parents:
760
diff
changeset
|
25 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
|
26 |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
27 b_re = re.compile(r'^\+\+\+ b\/([^\n]*)', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
28 a_re = re.compile(r'^--- a\/([^\n]*)', re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
29 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
|
30 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
|
31 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
|
32 re.MULTILINE) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
33 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
34 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
35 def formatrev(rev): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
36 if rev == -1: |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
37 return '\t(working copy)' |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
38 return '\t(revision %d)' % rev |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
39 |
973
21197f5ee9de
expand configured paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
952
diff
changeset
|
40 def configpath(ui, name): |
21197f5ee9de
expand configured paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
952
diff
changeset
|
41 path = ui.config('hgsubversion', name) |
21197f5ee9de
expand configured paths
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
952
diff
changeset
|
42 return path and hgutil.expandpath(path) |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
43 |
1454
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
44 def fileproperty(fname, pathfunc, default=None, |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
45 serializer=str, deserializer=str): |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
46 """define a property that is backed by a file""" |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
47 def fget(self): |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
48 if not hgutil.safehasattr(self, fname): |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
49 path = pathfunc(self) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
50 if os.path.exists(path): |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
51 with open(path, 'r') as f: |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
52 setattr(self, fname, deserializer(f.read())) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
53 else: |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
54 setattr(self, fname, default) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
55 return getattr(self, fname) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
56 |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
57 def fset(self, value): |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
58 setattr(self, fname, value) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
59 path = pathfunc(self) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
60 with open(path, 'w') as f: |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
61 f.write(serializer(value)) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
62 |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
63 return property(fget, fset) |
5d4888f3cd12
util: add a fileproperty helper method
Jun Wu <quark@fb.com>
parents:
1416
diff
changeset
|
64 |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
65 def filterdiff(diff, oldrev, newrev): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
66 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
|
67 r'+++ \1\t(working copy)', |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
68 diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
69 oldrev = formatrev(oldrev) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
70 newrev = formatrev(newrev) |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
828
diff
changeset
|
71 diff = a_re.sub(r'--- \1' + oldrev, diff) |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
72 diff = b_re.sub(r'+++ \1' + newrev, diff) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
73 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
|
74 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
|
75 return diff |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
76 |
1250
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
77 def gcdisable(orig): |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
78 """decorator to disable GC for a function or method""" |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
79 def wrapper(*args, **kwargs): |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
80 enabled = gc.isenabled() |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
81 if enabled: |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
82 gc.disable() |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
83 try: |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
84 orig(*args, **kwargs) |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
85 finally: |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
86 if enabled: |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
87 gc.enable() |
05aea77371a3
util: add a decorator to disable Python's garbage collector
Siddharth Agarwal <sid0@fb.com>
parents:
1182
diff
changeset
|
88 return wrapper |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
89 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
90 def parentrev(ui, repo, meta, hashes): |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
91 """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
|
92 """ |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1333
diff
changeset
|
93 workingctx = repo[None].parents()[0] |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
94 outrev = outgoing_revisions(repo, hashes, workingctx.node()) |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
95 if outrev: |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
96 workingctx = repo[outrev[-1]].parents()[0] |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
97 return workingctx |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
98 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
99 |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
100 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
|
101 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
|
102 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
|
103 prefixlen = len('file://') |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
104 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
|
105 prefixlen = len('file:') |
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
106 else: |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
107 return False |
806
ec074ebaa80f
util: make islocalrepo() a bit more tolerant with file:// urls
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
805
diff
changeset
|
108 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
|
109 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
|
110 path = url[prefixlen:] |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
111 path = urllib.url2pathname(path).replace(os.sep, '/') |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
112 while '/' in path: |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
828
diff
changeset
|
113 if reduce(lambda x, y: x and y, |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
114 map(lambda p: os.path.exists(os.path.join(path, p)), |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
828
diff
changeset
|
115 ('hooks', 'format', 'db',))): |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
116 return True |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
117 path = path.rsplit('/', 1)[0] |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
118 return False |
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
119 |
1040
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
120 def strip(ui, repo, changesets, *args , **opts): |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
121 try: |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
122 repair.strip(ui, repo, changesets, *args, **opts) |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
123 except TypeError: |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
124 # only 2.1.2 and later allow strip to take a list of nodes |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
125 for changeset in changesets: |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
126 repair.strip(ui, repo, changeset, *args, **opts) |
ada2400241c4
fixes for running under Mercurial 2.0
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1039
diff
changeset
|
127 |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
128 |
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
|
129 def version(ui): |
509
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
130 """Return version information if available.""" |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
131 try: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
132 import __version__ |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
133 return __version__.version |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
134 except ImportError: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
135 try: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
136 dn = os.path.dirname |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
137 repo = hg.repository(ui, dn(dn(__file__))) |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
138 ver = repo.dirstate.parents()[0] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
139 return node.hex(ver)[:12] |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
140 except: |
ac9c9e1a8022
setup: write out version info
Augie Fackler <durin42@gmail.com>
parents:
497
diff
changeset
|
141 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
|
142 |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
143 |
469
5567af673f83
Revive svn+http(s) URLs support (issue94)
Patrick Mezard <pmezard@gmail.com>
parents:
465
diff
changeset
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 url, revs, checkout = parseurl(url) |
284
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
150 url = url.rstrip('/') |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
151 if checkout: |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
152 url = '%s#%s' % (url, checkout) |
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
281
diff
changeset
|
153 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
|
154 |
1134
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
155 def _scrub(data): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
156 if not data and not isinstance(data, list): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
157 return '' |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
158 return data |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
159 |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
160 def _descrub(data): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
161 if isinstance(data, list): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
162 return tuple(data) |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
163 if data == '': |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
164 return None |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
165 return data |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
166 |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
167 def _convert(input, visitor): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
168 if isinstance(input, dict): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
169 scrubbed = {} |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
170 d = dict([(_convert(key, visitor), _convert(value, visitor)) |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
171 for key, value in input.iteritems()]) |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
172 for key, val in d.iteritems(): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
173 scrubbed[visitor(key)] = visitor(val) |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
174 return scrubbed |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
175 elif isinstance(input, list): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
176 return [_convert(element, visitor) for element in input] |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
177 elif isinstance(input, unicode): |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
178 return input.encode('utf-8') |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
179 return input |
a9b6e38d6dc9
util: add visitor pattern for scrubbing json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1128
diff
changeset
|
180 |
1127
eaefb3413b87
util: rename pickle_atomic to dump
Sean Farley <sean.michael.farley@gmail.com>
parents:
1124
diff
changeset
|
181 def dump(data, file_path): |
1136
6e4892b6628a
util: serialize data with json instead of pickle
Sean Farley <sean.michael.farley@gmail.com>
parents:
1135
diff
changeset
|
182 """Serialize some data to a path atomically. |
1025
2bf860f327e2
util: move pickle_atomic from svnmeta to util
David Schleimer <dschleimer@fb.com>
parents:
1010
diff
changeset
|
183 |
2bf860f327e2
util: move pickle_atomic from svnmeta to util
David Schleimer <dschleimer@fb.com>
parents:
1010
diff
changeset
|
184 This is present because I kept corrupting my revmap by managing to hit ^C |
1136
6e4892b6628a
util: serialize data with json instead of pickle
Sean Farley <sean.michael.farley@gmail.com>
parents:
1135
diff
changeset
|
185 during the serialization of that file. |
1025
2bf860f327e2
util: move pickle_atomic from svnmeta to util
David Schleimer <dschleimer@fb.com>
parents:
1010
diff
changeset
|
186 """ |
2bf860f327e2
util: move pickle_atomic from svnmeta to util
David Schleimer <dschleimer@fb.com>
parents:
1010
diff
changeset
|
187 f = hgutil.atomictempfile(file_path, 'w+b', 0644) |
1136
6e4892b6628a
util: serialize data with json instead of pickle
Sean Farley <sean.michael.farley@gmail.com>
parents:
1135
diff
changeset
|
188 json.dump(_convert(data, _scrub), f) |
1124
99c503cfcc9c
util: remove pre-1.9 mercurial code from pickle_atomic
Sean Farley <sean.michael.farley@gmail.com>
parents:
1123
diff
changeset
|
189 f.close() |
828
016f11e5f189
utils: add {save,load}_string since this is a fairly common idiom
Yonggang Luo <luoyonggang@gmail.com>
parents:
806
diff
changeset
|
190 |
1147
56f426d0261f
util: add resave bool parameter to load
Sean Farley <sean.michael.farley@gmail.com>
parents:
1145
diff
changeset
|
191 def load(file_path, default=None, resave=True): |
1135
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
192 """Deserialize some data from a path. |
1128
2922f4881a04
util: add a method to load data from a file
Sean Farley <sean.michael.farley@gmail.com>
parents:
1127
diff
changeset
|
193 """ |
1141
a4b54b19cd2e
util: add default parameter to load
Sean Farley <sean.michael.farley@gmail.com>
parents:
1140
diff
changeset
|
194 data = default |
1135
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
195 if not os.path.exists(file_path): |
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
196 return data |
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
197 |
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
198 f = open(file_path) |
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
199 try: |
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
200 data = _convert(json.load(f), _descrub) |
1137
ad4cb902593e
util: convert pickle to json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1136
diff
changeset
|
201 f.close() |
1135
5a0da3bab8a2
util: try to load data using json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1134
diff
changeset
|
202 except ValueError: |
1148
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
203 try: |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
204 # Ok, JSON couldn't be loaded, so we'll try the old way of using pickle |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
205 data = compathacks.pickle_load(f) |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
206 except: |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
207 # well, pickle didn't work either, so we reset the file pointer and |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
208 # read the string |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
209 f.seek(0) |
91d685418490
util: fallback to raw string reading if pickle fails
Sean Farley <sean.michael.farley@gmail.com>
parents:
1147
diff
changeset
|
210 data = f.read() |
1137
ad4cb902593e
util: convert pickle to json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1136
diff
changeset
|
211 |
ad4cb902593e
util: convert pickle to json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1136
diff
changeset
|
212 # convert the file to json immediately |
ad4cb902593e
util: convert pickle to json
Sean Farley <sean.michael.farley@gmail.com>
parents:
1136
diff
changeset
|
213 f.close() |
1147
56f426d0261f
util: add resave bool parameter to load
Sean Farley <sean.michael.farley@gmail.com>
parents:
1145
diff
changeset
|
214 if resave: |
56f426d0261f
util: add resave bool parameter to load
Sean Farley <sean.michael.farley@gmail.com>
parents:
1145
diff
changeset
|
215 dump(data, file_path) |
1128
2922f4881a04
util: add a method to load data from a file
Sean Farley <sean.michael.farley@gmail.com>
parents:
1127
diff
changeset
|
216 return data |
2922f4881a04
util: add a method to load data from a file
Sean Farley <sean.michael.farley@gmail.com>
parents:
1127
diff
changeset
|
217 |
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
|
218 def parseurl(url, heads=[]): |
1123
37989fbbab5c
util: remove pre-1.6 mercurial code from parseurl
Sean Farley <sean.michael.farley@gmail.com>
parents:
1045
diff
changeset
|
219 checkout = None |
37989fbbab5c
util: remove pre-1.6 mercurial code from parseurl
Sean Farley <sean.michael.farley@gmail.com>
parents:
1045
diff
changeset
|
220 svn_url, (_junk, heads) = hg.parseurl(url, heads) |
37989fbbab5c
util: remove pre-1.6 mercurial code from parseurl
Sean Farley <sean.michael.farley@gmail.com>
parents:
1045
diff
changeset
|
221 if heads: |
37989fbbab5c
util: remove pre-1.6 mercurial code from parseurl
Sean Farley <sean.michael.farley@gmail.com>
parents:
1045
diff
changeset
|
222 checkout = heads[0] |
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
|
223 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
|
224 |
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
509
diff
changeset
|
225 |
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
|
226 class PrefixMatch(object): |
1585
d6b75cf2c27d
util: add _relativeuipath attribute to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1558
diff
changeset
|
227 def __init__(self, prefix, relativeuipath=True): |
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
|
228 self.p = prefix |
1585
d6b75cf2c27d
util: add _relativeuipath attribute to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1558
diff
changeset
|
229 self._relativeuipath = relativeuipath |
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
|
230 |
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
|
231 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
|
232 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
|
233 |
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
|
234 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
|
235 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
|
236 |
1322
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
237 def bad(self, f, msg): |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
238 pass |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
239 |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
240 def always(self): |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
241 return False |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
242 |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
243 def isexact(self): |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
244 return False |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
245 |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
246 def anypats(self): |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
247 return True |
fd3461f86582
add minimum methods for matcher
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1288
diff
changeset
|
248 |
1333
7475c42671b1
util: add prefix to PrefixMatch
Durham Goode <durham@fb.com>
parents:
1322
diff
changeset
|
249 def prefix(self): |
7475c42671b1
util: add prefix to PrefixMatch
Durham Goode <durham@fb.com>
parents:
1322
diff
changeset
|
250 return False |
7475c42671b1
util: add prefix to PrefixMatch
Durham Goode <durham@fb.com>
parents:
1322
diff
changeset
|
251 |
1596
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
252 def visitdir(self, dir): |
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
253 return True |
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
254 |
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
255 def visitchildrenset(self, dir): |
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
256 return 'this' |
04a24a13960f
util: add visitdir() and visitchildrenset() to PrefixMatch
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1585
diff
changeset
|
257 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
410
diff
changeset
|
258 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
|
259 """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
|
260 current working copy state. |
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
261 """ |
1da7aafdd323
Refactored outgoing_revisions into util where it really belongs.
Augie Fackler <durin42@gmail.com>
parents:
39
diff
changeset
|
262 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
|
263 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
|
264 return |
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
140
diff
changeset
|
265 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
|
266 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
|
267 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
|
268 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
|
269 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
|
270 if len(sourcerev) != 1: |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
271 raise error.Abort( |
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
272 "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
|
273 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
|
274 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
|
275 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
|
276 |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
277 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
|
278 """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
|
279 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
|
280 discovery.findcommonoutgoing does. |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
281 """ |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
282 if sourcerev in reverse_map: |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
283 return ([sourcerev], [sourcerev]) # nothing outgoing |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
284 sourcecx = repo[sourcerev] |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
285 while (not sourcecx.node() in reverse_map |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
286 and sourcecx.node() != node.nullid): |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
287 ps = sourcecx.parents() |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
288 if len(ps) != 1: |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
289 raise error.Abort( |
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
290 "Sorry, can't find svn parent of a merge revision.") |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
291 sourcecx = ps[0] |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
292 if sourcecx.node() != node.nullid: |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
293 return ([sourcecx.node()], [sourcerev]) |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
294 return ([sourcerev], [sourcerev]) # nothing outgoing |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
794
diff
changeset
|
295 |
198
df4611050286
Output consolidation; decrease the ‘Fetching...’ message to debug level.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
196
diff
changeset
|
296 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
|
297 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
|
298 |
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
299 |
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
300 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
|
301 from mercurial import encoding |
8ff0b3261b7f
util: drop 1.2 support in the encoding swap.
Augie Fackler <durin42@gmail.com>
parents:
275
diff
changeset
|
302 old = encoding.encoding |
8ff0b3261b7f
util: drop 1.2 support in the encoding swap.
Augie Fackler <durin42@gmail.com>
parents:
275
diff
changeset
|
303 encoding.encoding = new_encoding |
223
330f0b15d417
issue67: mercurial 1.3 util incompatibility with encoding swap
Luke Opperman <luke@loppear.com>
parents:
221
diff
changeset
|
304 return old |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
305 |
952
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
306 def isancestor(ctx, ancestorctx): |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
307 """Return True if ancestorctx is equal or an ancestor of ctx.""" |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
308 if ctx == ancestorctx: |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
309 return True |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
310 for actx in ctx.ancestors(): |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
311 if actx == ancestorctx: |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
312 return True |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
951
diff
changeset
|
313 return False |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
314 |
497
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
475
diff
changeset
|
315 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
|
316 """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
|
317 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
|
318 return False |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
319 if parentctx == childctx: |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
320 return True |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
321 if parentctx.rev() > childctx.rev(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
322 parentctx, childctx = childctx, parentctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
323 |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
324 def selfandancestors(selfctx): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
325 yield selfctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
326 for ctx in selfctx.ancestors(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
327 yield ctx |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
328 |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
329 for pctx in selfandancestors(childctx): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
330 if pctx.rev() <= parentctx.rev(): |
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
331 return True |
497
cad864ed29de
util: make aresamefiles take one file and just be issamefile instead.
Augie Fackler <durin42@gmail.com>
parents:
475
diff
changeset
|
332 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
|
333 return False |
410
eb524b957345
move aresamefiles() from HgChangeReceiver to util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
334 # 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
|
335 return False |
707
cb32d90f915e
templatekw: clean up implementation & test; add help.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
620
diff
changeset
|
336 |
884
1b261e0f85aa
Abstract away the details of where svn revs are stored in a commit
Bryan O'Sullivan <bryano@fb.com>
parents:
832
diff
changeset
|
337 def getsvnrev(ctx, defval=None): |
1b261e0f85aa
Abstract away the details of where svn revs are stored in a commit
Bryan O'Sullivan <bryano@fb.com>
parents:
832
diff
changeset
|
338 '''Extract SVN revision from commit metadata''' |
1521
f73cc01a8167
util: don't assume that converted rev is an svn rev
Mateusz Kwapich <mitrandir@fb.com>
parents:
1520
diff
changeset
|
339 convertrev = ctx.extra().get('convert_revision', '') |
f73cc01a8167
util: don't assume that converted rev is an svn rev
Mateusz Kwapich <mitrandir@fb.com>
parents:
1520
diff
changeset
|
340 # if the rev doesn't start with svn prefix it came from different source |
f73cc01a8167
util: don't assume that converted rev is an svn rev
Mateusz Kwapich <mitrandir@fb.com>
parents:
1520
diff
changeset
|
341 if convertrev.startswith('svn:'): |
f73cc01a8167
util: don't assume that converted rev is an svn rev
Mateusz Kwapich <mitrandir@fb.com>
parents:
1520
diff
changeset
|
342 return convertrev |
f73cc01a8167
util: don't assume that converted rev is an svn rev
Mateusz Kwapich <mitrandir@fb.com>
parents:
1520
diff
changeset
|
343 return defval |
884
1b261e0f85aa
Abstract away the details of where svn revs are stored in a commit
Bryan O'Sullivan <bryano@fb.com>
parents:
832
diff
changeset
|
344 |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
345 def revset_fromsvn(repo, subset, x): |
752
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
346 '''``fromsvn()`` |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
347 Select changesets that originate from Subversion. |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
348 ''' |
1558
ae572c9be4e6
cleanup: remove lots of dead imports and code found by pyflakes
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
349 revset.getargs(x, 0, 0, "fromsvn takes no arguments") |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
350 |
1182
8f9619a67565
maps: change readmapfile to take a path instead of repo
Sean Farley <sean.michael.farley@gmail.com>
parents:
1148
diff
changeset
|
351 meta = repo.svnmeta(skiperrorcheck=True) |
1416 | 352 if not meta.revmapexists: |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
353 raise error.Abort("svn metadata is missing - " |
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
354 "run 'hg svn rebuildmeta' to reconstruct it") |
1547 | 355 tonode = repo.changelog.node |
356 hashes = meta.revmap.hashes() | |
357 return subset.filter(lambda r: tonode(r) in hashes) | |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
358 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
359 def revset_svnrev(repo, subset, x): |
752
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
360 '''``svnrev(number)`` |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
361 Select changesets that originate in the given Subversion revision. |
bb64ad4ce982
revsets: add docstrings.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
722
diff
changeset
|
362 ''' |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
363 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
|
364 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
365 rev = revset.getstring(args[0], |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
366 "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
|
367 try: |
889
7a98fbadcae9
revsets: huge speedups for fromsvn and svnrev
Bryan O'Sullivan <bryano@fb.com>
parents:
884
diff
changeset
|
368 revnum = int(rev) |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
369 except ValueError: |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
370 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
|
371 |
1182
8f9619a67565
maps: change readmapfile to take a path instead of repo
Sean Farley <sean.michael.farley@gmail.com>
parents:
1148
diff
changeset
|
372 meta = repo.svnmeta(skiperrorcheck=True) |
1416 | 373 if not meta.revmapexists: |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
374 raise error.Abort("svn metadata is missing - " |
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1548
diff
changeset
|
375 "run 'hg svn rebuildmeta' to reconstruct it") |
1548
7f83be82d03f
revset: fix ordering issue of "svnrev()"
Jun Wu <quark@fb.com>
parents:
1547
diff
changeset
|
376 torev = repo.changelog.rev |
7f83be82d03f
revset: fix ordering issue of "svnrev()"
Jun Wu <quark@fb.com>
parents:
1547
diff
changeset
|
377 revs = revset.baseset(torev(r) for r in meta.revmap.revhashes(revnum)) |
7f83be82d03f
revset: fix ordering issue of "svnrev()"
Jun Wu <quark@fb.com>
parents:
1547
diff
changeset
|
378 return subset & revs |
722
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
379 |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
380 revsets = { |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
381 'fromsvn': revset_fromsvn, |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
382 'svnrev': revset_svnrev, |
aa24148a7454
uisetup: add fromsvn() and svnrev() revsets.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
707
diff
changeset
|
383 } |
944
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
384 |
1520 | 385 def revset_stringset(orig, repo, subset, x, *args, **kwargs): |
1009
f0bde4bf1f78
revsets: add support for 'r123' revision labels
Matt Mackall <mpm@selenic.com>
parents:
975
diff
changeset
|
386 if x.startswith('r') and x[1:].isdigit(): |
f0bde4bf1f78
revsets: add support for 'r123' revision labels
Matt Mackall <mpm@selenic.com>
parents:
975
diff
changeset
|
387 return revset_svnrev(repo, subset, ('string', x[1:])) |
1520 | 388 return orig(repo, subset, x, *args, **kwargs) |
1009
f0bde4bf1f78
revsets: add support for 'r123' revision labels
Matt Mackall <mpm@selenic.com>
parents:
975
diff
changeset
|
389 |
944
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
390 def getfilestoresize(ui): |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
391 """Return the replay or stupid file memory store size in megabytes or -1""" |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
392 size = ui.configint('hgsubversion', 'filestoresize', 200) |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
393 if size >= 0: |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
394 size = size*(2**20) |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
395 else: |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
396 size = -1 |
d6db289f1548
pull: add hgsubversion.filestoresize to control memory consumption
Patrick Mezard <patrick@mezard.eu>
parents:
889
diff
changeset
|
397 return size |
951
bd9c292665fd
editor: add a small changectx cache
Patrick Mezard <patrick@mezard.eu>
parents:
944
diff
changeset
|
398 |
974
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
399 def parse_revnum(svnrepo, r): |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
400 try: |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
401 return int(r or 0) |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
402 except ValueError: |
975
9ffa1daf7b08
understand 'tip' as meaning Subversion 'HEAD'
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
974
diff
changeset
|
403 if isinstance(r, str) and r.lower() in ('head', 'tip'): |
974
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
404 return svnrepo.last_changed_rev |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
973
diff
changeset
|
405 else: |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1037
diff
changeset
|
406 raise error.RepoLookupError("unknown Subversion revision %r" % r) |
1461
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
407 |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
408 def get_contexts(repo, fromrev=0): |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
409 """Generator yielding contexts from the repository.""" |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
410 |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
411 for rev in xrange(fromrev, len(repo)): |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
412 try: |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
413 yield repo[rev] |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
414 except error.RepoLookupError: |
cbc48ed3b56c
rebuildmeta: extract utility function for iterating over repositories
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1454
diff
changeset
|
415 pass |
1526
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
416 |
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
417 _unitype = type(u'') |
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
418 def forceutf8(s): |
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
419 if isinstance(s, _unitype): |
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
420 return s.encode('utf-8') |
5adfb81c4680
util: add method for forcing unicode objects back to utf8 bytes
Augie Fackler <raf@durin42.com>
parents:
1521
diff
changeset
|
421 return s |