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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
020917cde9f5 util: get rid of RevMap.readmapfile
Jun Wu <quark@fb.com>
parents: 1403
diff changeset
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
910f56f0d09c revset: make "fromsvn()" lazy
Jun Wu <quark@fb.com>
parents: 1526
diff changeset
355 tonode = repo.changelog.node
910f56f0d09c revset: make "fromsvn()" lazy
Jun Wu <quark@fb.com>
parents: 1526
diff changeset
356 hashes = meta.revmap.hashes()
910f56f0d09c revset: make "fromsvn()" lazy
Jun Wu <quark@fb.com>
parents: 1526
diff changeset
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
020917cde9f5 util: get rid of RevMap.readmapfile
Jun Wu <quark@fb.com>
parents: 1403
diff changeset
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
fc91ba4ffa52 revset: accept additional arguments
Jun Wu <quark@fb.com>
parents: 1502
diff changeset
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
fc91ba4ffa52 revset: accept additional arguments
Jun Wu <quark@fb.com>
parents: 1502
diff changeset
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