Mercurial > hgsubversion
annotate hgsubversion/svnmeta.py @ 1301:9e46dfddd3a9
svnmeta: turn layout into a cached property
It turns out we don't need the fancy checks that were in the layout property
before so we use our new fancy property generator to cache this property.
author | Sean Farley <sean.michael.farley@gmail.com> |
---|---|
date | Mon, 24 Mar 2014 11:20:54 -0500 |
parents | 8b3b456afd5f |
children | 80b57ed92544 |
rev | line source |
---|---|
551
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
1 import posixpath |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
2 import os |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 import tempfile |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
4 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
5 from mercurial import context |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
6 from mercurial import util as hgutil |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
7 from mercurial import revlog |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
8 from mercurial import node |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
9 |
1219
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
10 import compathacks |
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
237
diff
changeset
|
11 import util |
317 | 12 import maps |
1005
5bba4d1becde
layouts: refactor layout loading based on config into function
David Schleimer <dschleimer@fb.com>
parents:
986
diff
changeset
|
13 import layouts |
421
8277113036f1
editor: rename hg_delta_editor.HgChangeReceiver to editor.HgEditor
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
420
diff
changeset
|
14 import editor |
1299
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
15 import svnwrap |
34
50d55c3e0d85
Some refactors of the previous change, including transparent upgrade of old-style pickled dictionaries.
Augie Fackler <durin42@gmail.com>
parents:
33
diff
changeset
|
16 |
363
ccef78b91ac9
Move exception classes in hg_delta_editor up top.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
362
diff
changeset
|
17 |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
18 class SVNMeta(object): |
33
a9c15cae50e5
Faster append-only revmap implementation.
Andreas Hartmetz <ahartmetz@gmail.com>
parents:
23
diff
changeset
|
19 |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
20 def __init__(self, repo, uuid=None, subdir=None, skiperrorcheck=False): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
21 """path is the path to the target hg repo. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
22 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
23 subdir is the subdirectory of the edits *on the svn server*. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
24 It is needed for stripping paths off in certain cases. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
25 """ |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
26 # simple and public variables |
405
a98b8d424221
editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
400
diff
changeset
|
27 self.ui = repo.ui |
a98b8d424221
editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
400
diff
changeset
|
28 self.repo = repo |
a98b8d424221
editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
400
diff
changeset
|
29 self.path = os.path.normpath(repo.join('..')) |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
30 self.firstpulled = 0 |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
31 self.lastdate = '1970-01-01 00:00:00 -0000' |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
32 self.addedtags = {} |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
33 self.deletedtags = {} |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
34 |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
35 # private variables |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
36 self._skiperror = skiperrorcheck |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
37 self._tags = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
38 self._layoutobj = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
39 self._revmap = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
40 self._authors = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
41 self._branchmap = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
42 self._tagmap = None |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
43 self._filemap = None |
1301
9e46dfddd3a9
svnmeta: turn layout into a cached property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1299
diff
changeset
|
44 self._layout = None |
405
a98b8d424221
editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
400
diff
changeset
|
45 |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
46 # create .hg/svn folder if it doesn't exist |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
47 if not os.path.isdir(self.metapath): |
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
48 os.makedirs(self.metapath) |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
49 |
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
50 # properties that need .hg/svn to exist |
745
6252f0cc7b7a
svnmeta: cache the UUID in an attribute.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
742
diff
changeset
|
51 self.uuid = uuid |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
52 self.subdir = subdir |
405
a98b8d424221
editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
400
diff
changeset
|
53 |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
54 # generated properties that have a persistent file stored on disk |
1184
43384d2782dc
svnmeta: move revmap.youngest to meta.lastpulled
Sean Farley <sean.michael.farley@gmail.com>
parents:
1183
diff
changeset
|
55 self._gen_cachedconfig('lastpulled', 0, configname=False) |
1189
0ef719f4c371
svnmeta: add defaultauthors property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1187
diff
changeset
|
56 self._gen_cachedconfig('defaultauthors', True) |
1190
5df842451d7e
svnmeta: add caseignoreauthors property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1189
diff
changeset
|
57 self._gen_cachedconfig('caseignoreauthors', False) |
1191
f0d5c03a71b9
svnmeta: add defaulthost property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1190
diff
changeset
|
58 self._gen_cachedconfig('defaulthost', self.uuid) |
1192
23a845fbfc6a
svnmeta: use generator for usebranchnames property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1191
diff
changeset
|
59 self._gen_cachedconfig('usebranchnames', True) |
1282
5aecb986a5a0
svnmeta: generate cached defaultmessage property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1281
diff
changeset
|
60 self._gen_cachedconfig('defaultmessage', '') |
1296
631a572658c2
svnmeta: add generated cached branch property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1292
diff
changeset
|
61 self._gen_cachedconfig('branch', '') |
1301
9e46dfddd3a9
svnmeta: turn layout into a cached property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1299
diff
changeset
|
62 self._gen_cachedconfig('layout', 'auto') |
1184
43384d2782dc
svnmeta: move revmap.youngest to meta.lastpulled
Sean Farley <sean.michael.farley@gmail.com>
parents:
1183
diff
changeset
|
63 |
1259
b7b0ed1e1455
svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1228
diff
changeset
|
64 # misc |
1130
ed4804ee68c4
svnmeta: use util.load instead of bare pickle
Sean Farley <sean.michael.farley@gmail.com>
parents:
1127
diff
changeset
|
65 self.branches = util.load(self.branch_info_file) or {} |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
66 self.prevbranches = dict(self.branches) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
67 |
1267
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
68 def _get_cachedconfig(self, name, filename, configname, default, pre): |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
69 """Return a cached value for a config option. If the cache is uninitialized |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
70 then try to read its value from disk. Option can be overridden by the |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
71 commandline. |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
72 name: property name, e.g. 'lastpulled' |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
73 filename: name of file in .hg/svn |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
74 configname: commandline option name |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
75 default: default value |
1267
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
76 pre: transformation to apply to a value before caching it. |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
77 """ |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
78 varname = '_' + name |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
79 if getattr(self, varname) is None: |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
80 # construct the file path from metapath (e.g. .hg/svn) plus the |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
81 # filename |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
82 f = os.path.join(self.metapath, filename) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
83 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
84 # load the config property (i.e. command-line or .hgrc) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
85 c = None |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
86 if configname: |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
87 # a little awkward but we need to convert the option from a |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
88 # string to whatever type the default value is, so we use the |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
89 # type of `default` to determine with ui.config method to call |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
90 c = None |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
91 if isinstance(default, bool): |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
92 c = self.ui.configbool('hgsubversion', configname, default) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
93 elif isinstance(default, int): |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
94 c = self.ui.configint('hgsubversion', configname, default) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
95 elif isinstance(default, list): |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
96 c = self.ui.configlist('hgsubversion', configname, default) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
97 else: |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
98 c = self.ui.config('hgsubversion', configname, default) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
99 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
100 # load the value from disk |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
101 val = util.load(f, default=default) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
102 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
103 # prefer the non-default, and the one sent from command-line |
1197
1414cdafa7af
svnmeta: explicitly test for None
Sean Farley <sean.michael.farley@gmail.com>
parents:
1194
diff
changeset
|
104 if c is not None and c != val and c != default: |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
105 val = c |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
106 |
1267
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
107 # apply transformation if necessary |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
108 if pre: |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
109 val = pre(val) |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
110 |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
111 # set the value as the one from disk (or default if not found) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
112 setattr(self, varname, val) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
113 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
114 # save the value to disk by using the setter property |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
115 setattr(self, name, val) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
116 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
117 return getattr(self, varname) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
118 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
119 def _set_cachedconfig(self, value, name, filename): |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
120 varname = '_' + name |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
121 f = os.path.join(self.metapath, filename) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
122 setattr(self, varname, value) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
123 util.dump(value, f) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
124 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
125 def _gen_cachedconfig(self, name, default=None, filename=None, |
1267
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
126 configname=None, pre=None): |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
127 """Generate an attribute for reading (and caching) config data. |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
128 |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
129 This method constructs a new attribute on self with the given name. |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
130 The actual value from the config file will be read lazily, and then |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
131 cached once that read has occurred. No cache invalidation will happen, |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
132 so within a session these values shouldn't be required to mutate. |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
133 """ |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
134 setattr(SVNMeta, '_' + name, None) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
135 if filename is None: |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
136 filename = name |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
137 if configname is None: |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
138 configname = name |
1267
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
139 prop = property(lambda x: self._get_cachedconfig(name, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
140 filename, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
141 configname, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
142 default, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
143 pre=pre), |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
144 lambda x, y: self._set_cachedconfig(y, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
145 name, |
5f86e2ac7659
svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents:
1265
diff
changeset
|
146 filename)) |
1181
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
147 setattr(SVNMeta, name, prop) |
eb4c7bc23f9e
svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents:
1161
diff
changeset
|
148 |
1299
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
149 def layout_from_subversion(self, svn, revision=None): |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
150 """ Guess what layout to use based on directories under the svn root. |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
151 |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
152 This is intended for use during bootstrapping. It guesses which |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
153 layout to use based on the presence or absence of the conventional |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
154 trunk, branches, tags dirs immediately under the path your are |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
155 cloning. |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
156 |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
157 Additionally, this will write the layout in use to the ui object |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
158 passed, if any. |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
159 |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
160 """ |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
161 |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
162 try: |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
163 rootlist = svn.list_dir('', revision=revision) |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
164 except svnwrap.SubversionException, e: |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
165 err = "%s (subversion error: %d)" % (e.args[0], e.args[1]) |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
166 raise hgutil.Abort(err) |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
167 if sum(map(lambda x: x in rootlist, ('branches', 'tags', 'trunk'))): |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
168 layout = 'standard' |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
169 else: |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
170 layout = 'single' |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
171 self.ui.setconfig('hgsubversion', 'layout', layout) |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
172 return layout |
8b3b456afd5f
svnmeta: copy layout_from_subversion from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1298
diff
changeset
|
173 |
1298
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
174 def layout_from_commit(self, subdir, revpath, branch): |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
175 """ Guess what the layout is based existing commit info |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
176 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
177 Specifically, this compares the subdir for the repository and the |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
178 revpath as extracted from the convinfo in the commit. If they |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
179 match, the layout is assumed to be single. Otherwise, it tries |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
180 the available layouts and selects the first one that would |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
181 translate the given branch to the given revpath. |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
182 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
183 """ |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
184 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
185 subdir = subdir or '/' |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
186 if subdir == revpath: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
187 return 'single' |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
188 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
189 candidates = set() |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
190 for layout in layouts.NAME_TO_CLASS: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
191 layoutobj = layouts.layout_from_name(layout, self) |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
192 try: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
193 remotepath = layoutobj.remotepath(branch, subdir) |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
194 except KeyError: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
195 continue |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
196 if remotepath == revpath: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
197 candidates.add(layout) |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
198 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
199 if len(candidates) == 1: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
200 return candidates.pop() |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
201 elif candidates: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
202 config_layout = layouts.detect.layout_from_config(self, |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
203 allow_auto=True) |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
204 if config_layout in candidates: |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
205 return config_layout |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
206 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
207 return 'standard' |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
208 |
4ba1481484e6
svnmeta: copy layout_from_commit from detect
Sean Farley <sean.michael.farley@gmail.com>
parents:
1296
diff
changeset
|
209 |
1261
51f88d3aa4dd
svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1259
diff
changeset
|
210 @property |
51f88d3aa4dd
svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1259
diff
changeset
|
211 def layout_file(self): |
51f88d3aa4dd
svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1259
diff
changeset
|
212 return os.path.join(self.metapath, 'layout') |
51f88d3aa4dd
svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1259
diff
changeset
|
213 |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
214 @property |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
215 def layoutobj(self): |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
216 if not self._layoutobj: |
1265
4744b7bfa476
layouts: change constructor to take a meta object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1263
diff
changeset
|
217 self._layoutobj = layouts.layout_from_name(self.layout, self) |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
218 return self._layoutobj |
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
219 |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
220 @property |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
221 def editor(self): |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
222 if not hasattr(self, '_editor'): |
421
8277113036f1
editor: rename hg_delta_editor.HgChangeReceiver to editor.HgEditor
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
420
diff
changeset
|
223 self._editor = editor.HgEditor(self) |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
224 return self._editor |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
225 |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
226 def _get_subdir(self): |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
227 return self.__subdir |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
228 |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
229 def _set_subdir(self, subdir): |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
230 if subdir: |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
231 subdir = '/'.join(p for p in subdir.split('/') if p) |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
232 |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
233 self.__subdir = None |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
234 subdirfile = os.path.join(self.metapath, 'subdir') |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
235 |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
236 if os.path.isfile(subdirfile): |
1152
aa98fdccaa0e
subdir: use util.dump and util.load for writing and reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1150
diff
changeset
|
237 stored_subdir = util.load(subdirfile) |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
238 assert stored_subdir is not None |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
239 if subdir is None: |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
240 self.__subdir = stored_subdir |
1152
aa98fdccaa0e
subdir: use util.dump and util.load for writing and reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1150
diff
changeset
|
241 elif subdir and subdir != stored_subdir: |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
242 raise hgutil.Abort('unable to work on a different path in the ' |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
243 'repository') |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
244 else: |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
245 self.__subdir = subdir |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
246 elif subdir is not None: |
1152
aa98fdccaa0e
subdir: use util.dump and util.load for writing and reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1150
diff
changeset
|
247 util.dump(subdir, subdirfile) |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
248 self.__subdir = subdir |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
249 elif not self._skiperror: |
748
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
250 raise hgutil.Abort("hgsubversion metadata unavailable; " |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
251 "please run 'hg svn rebuildmeta'") |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
252 |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
253 subdir = property(_get_subdir, _set_subdir, None, |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
254 'Error-checked sub-directory of source Subversion ' |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
255 'repository.') |
e1e2af66953d
svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
747
diff
changeset
|
256 |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
257 def _get_uuid(self): |
747
34b25f6bc4ef
svnmeta: slight refactor of the UUID property.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
746
diff
changeset
|
258 return self.__uuid |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
259 |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
260 def _set_uuid(self, uuid): |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
261 self.__uuid = None |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
262 uuidfile = os.path.join(self.metapath, 'uuid') |
747
34b25f6bc4ef
svnmeta: slight refactor of the UUID property.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
746
diff
changeset
|
263 if os.path.isfile(uuidfile): |
1150
510fa46caf9c
uuid: use util.dump and util.load for writing and reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1130
diff
changeset
|
264 stored_uuid = util.load(uuidfile) |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
265 assert stored_uuid |
746
174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
745
diff
changeset
|
266 if uuid and uuid != stored_uuid: |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
267 raise hgutil.Abort('unable to operate on unrelated repository') |
747
34b25f6bc4ef
svnmeta: slight refactor of the UUID property.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
746
diff
changeset
|
268 self.__uuid = uuid or stored_uuid |
746
174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
745
diff
changeset
|
269 elif uuid: |
1150
510fa46caf9c
uuid: use util.dump and util.load for writing and reading
Sean Farley <sean.michael.farley@gmail.com>
parents:
1130
diff
changeset
|
270 util.dump(uuid, uuidfile) |
746
174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
745
diff
changeset
|
271 self.__uuid = uuid |
1154
24edef55e61b
svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents:
1153
diff
changeset
|
272 elif not self._skiperror: |
746
174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
745
diff
changeset
|
273 raise hgutil.Abort("hgsubversion metadata unavailable; " |
174f03c288d4
svnmeta: abort when no UUID given and none is stored on disk.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
745
diff
changeset
|
274 "please run 'hg svn rebuildmeta'") |
745
6252f0cc7b7a
svnmeta: cache the UUID in an attribute.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
742
diff
changeset
|
275 |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
276 uuid = property(_get_uuid, _set_uuid, None, |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
277 'Error-checked UUID of source Subversion repository.') |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
278 |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
279 @property |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
280 def metapath(self): |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
281 return os.path.join(self.path, '.hg', 'svn') |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
282 |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
283 @property |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
284 def branch_info_file(self): |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
285 return os.path.join(self.metapath, 'branch_info') |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
286 |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
287 @property |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
288 def authors_file(self): |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
289 return os.path.join(self.metapath, 'authors') |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
290 |
1207
9fc3557ce85e
svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1199
diff
changeset
|
291 @property |
9fc3557ce85e
svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1199
diff
changeset
|
292 def authors(self): |
9fc3557ce85e
svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1199
diff
changeset
|
293 if self._authors is None: |
9fc3557ce85e
svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1199
diff
changeset
|
294 self._authors = maps.AuthorMap(self) |
9fc3557ce85e
svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1199
diff
changeset
|
295 return self._authors |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
296 |
846
7ca3d1b08d67
Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents:
837
diff
changeset
|
297 @property |
7ca3d1b08d67
Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents:
837
diff
changeset
|
298 def filemap_file(self): |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
299 return os.path.join(self.metapath, 'filemap') |
846
7ca3d1b08d67
Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents:
837
diff
changeset
|
300 |
1216
572417ad0313
svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1214
diff
changeset
|
301 @property |
572417ad0313
svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1214
diff
changeset
|
302 def filemap(self): |
572417ad0313
svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1214
diff
changeset
|
303 if self._filemap is None: |
1217
a10a4fc69364
maps: change filemap to initialize with an svnmeta object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1216
diff
changeset
|
304 self._filemap = maps.FileMap(self) |
1216
572417ad0313
svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1214
diff
changeset
|
305 return self._filemap |
572417ad0313
svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1214
diff
changeset
|
306 |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
307 @property |
1161
8693c9558f1a
svnmeta: unify variable names cleanup
Sean Farley <sean.michael.farley@gmail.com>
parents:
1160
diff
changeset
|
308 def branchmap_file(self): |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
309 return os.path.join(self.metapath, 'branchmap') |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
310 |
1212
0ca7f80d0ab6
svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1211
diff
changeset
|
311 @property |
0ca7f80d0ab6
svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1211
diff
changeset
|
312 def branchmap(self): |
0ca7f80d0ab6
svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1211
diff
changeset
|
313 if self._branchmap is None: |
1213
295d2f0cc275
maps: change branchmap to initialize with an svnmeta object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1212
diff
changeset
|
314 self._branchmap = maps.BranchMap(self) |
1212
0ca7f80d0ab6
svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1211
diff
changeset
|
315 return self._branchmap |
846
7ca3d1b08d67
Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents:
837
diff
changeset
|
316 |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
317 @property |
1158
770ac6de58c5
svnmeta: add tagfile property for use with the Tags object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1157
diff
changeset
|
318 def tagfile(self): |
770ac6de58c5
svnmeta: add tagfile property for use with the Tags object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1157
diff
changeset
|
319 # called tagmap for backwards compatibility |
770ac6de58c5
svnmeta: add tagfile property for use with the Tags object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1157
diff
changeset
|
320 return os.path.join(self.metapath, 'tagmap') |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
321 |
729 | 322 @property |
1160
f06bb42bd2b2
svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1158
diff
changeset
|
323 def tags(self): |
f06bb42bd2b2
svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1158
diff
changeset
|
324 if self._tags is None: |
1187
30b2139c3931
maps: change tags init to accept svnmeta not a repo
Sean Farley <sean.michael.farley@gmail.com>
parents:
1186
diff
changeset
|
325 self._tags = maps.Tags(self) |
1160
f06bb42bd2b2
svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1158
diff
changeset
|
326 return self._tags |
f06bb42bd2b2
svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1158
diff
changeset
|
327 |
729 | 328 @property |
1161
8693c9558f1a
svnmeta: unify variable names cleanup
Sean Farley <sean.michael.farley@gmail.com>
parents:
1160
diff
changeset
|
329 def tagmap_file(self): |
729 | 330 # called tag-renames for backwards compatibility |
1153
c3c4518e00aa
svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents:
1152
diff
changeset
|
331 return os.path.join(self.metapath, 'tag-renames') |
729 | 332 |
1209
20c28c511551
svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1208
diff
changeset
|
333 @property |
20c28c511551
svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1208
diff
changeset
|
334 def tagmap(self): |
20c28c511551
svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1208
diff
changeset
|
335 if self._tagmap is None: |
1210
a0c6dbd9afbb
maps: change tagmap to initialize with an svnmeta object
Sean Farley <sean.michael.farley@gmail.com>
parents:
1209
diff
changeset
|
336 self._tagmap = maps.TagMap(self) |
1209
20c28c511551
svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1208
diff
changeset
|
337 return self._tagmap |
20c28c511551
svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1208
diff
changeset
|
338 |
1156
0b40caaaa0ee
svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1154
diff
changeset
|
339 @property |
0b40caaaa0ee
svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1154
diff
changeset
|
340 def revmap_file(self): |
0b40caaaa0ee
svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1154
diff
changeset
|
341 return os.path.join(self.metapath, 'rev_map') |
0b40caaaa0ee
svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1154
diff
changeset
|
342 |
1157
c2b72618645a
svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1156
diff
changeset
|
343 @property |
c2b72618645a
svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1156
diff
changeset
|
344 def revmap(self): |
c2b72618645a
svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1156
diff
changeset
|
345 if self._revmap is None: |
1183
09b20039192c
maps: change revmap init to accept svnmeta not a repo
Sean Farley <sean.michael.farley@gmail.com>
parents:
1181
diff
changeset
|
346 self._revmap = maps.RevMap(self) |
1157
c2b72618645a
svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1156
diff
changeset
|
347 return self._revmap |
729 | 348 |
237
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
349 def fixdate(self, date): |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
350 if date is not None: |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
351 date = date.replace('T', ' ').replace('Z', '').split('.')[0] |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
352 date += ' -0000' |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
353 self.lastdate = date |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
354 else: |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
355 date = self.lastdate |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
356 return date |
c90cfa665b81
Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
232
diff
changeset
|
357 |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
358 def save(self): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
359 '''Save the Subversion metadata. This should really be called after |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
360 every revision is created. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
361 ''' |
1127
eaefb3413b87
util: rename pickle_atomic to dump
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
362 util.dump(self.branches, self.branch_info_file) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
363 |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
364 def localname(self, path): |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
365 """Compute the local name for a branch located at path. |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
366 """ |
1012
e8cd211684c4
layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents:
1006
diff
changeset
|
367 return self.layoutobj.localname(path) |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
368 |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
369 def remotename(self, branch): |
1013
d507c1a12dcb
layouts: refactor mercurial branch to svn path mapping out of svnmeta
David Schleimer <dschleimer@fb.com>
parents:
1012
diff
changeset
|
370 return self.layoutobj.remotename(branch) |
72
9ec2a12c12ae
hg_delta_editor: make branches_in_paths() return the branch svn path too
Patrick Mezard <pmezard@gmail.com>
parents:
69
diff
changeset
|
371 |
422
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
372 def genextra(self, revnum, branch): |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
373 extra = {} |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
374 subdir = self.subdir |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
375 if subdir and subdir[-1] == '/': |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
376 subdir = subdir[:-1] |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
377 if subdir and subdir[0] != '/': |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
378 subdir = '/' + subdir |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
379 |
1014
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
380 path = self.layoutobj.remotepath(branch, subdir) |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
381 |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
382 if branch: |
0ed7cf23e801
layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents:
1013
diff
changeset
|
383 extra['branch'] = branch |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
384 |
422
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
385 extra['convert_revision'] = 'svn:%(uuid)s%(path)s@%(rev)s' % { |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
386 'uuid': self.uuid, |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
387 'path': path, |
422
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
388 'rev': revnum, |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
389 } |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
390 return extra |
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
391 |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
392 def mapbranch(self, extra, close=False): |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
393 if close: |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
394 extra['close'] = 1 |
634
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
395 mapped = self.branchmap.get(extra.get('branch', 'default')) |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
396 if not self.usebranchnames or mapped == 'default': |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
397 extra.pop('branch', None) |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
398 elif mapped: |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
399 extra['branch'] = mapped |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
400 |
634
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
401 if extra.get('branch') == 'default': |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
402 extra.pop('branch', None) |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
403 |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
404 def normalize(self, path): |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
405 '''Normalize a path to strip of leading slashes and our subdir if we |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
406 have one. |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
407 ''' |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
408 if self.subdir and path == self.subdir[:-1]: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
409 return '' |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
410 if path and path[0] == '/': |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
411 path = path[1:] |
888
c6388ed0ec0a
svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
878
diff
changeset
|
412 if path == self.subdir: |
c6388ed0ec0a
svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
878
diff
changeset
|
413 return '' |
c6388ed0ec0a
svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
878
diff
changeset
|
414 if path and path.startswith(self.subdir + '/'): |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
415 path = path[len(self.subdir):] |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
416 if path and path[0] == '/': |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
417 path = path[1:] |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
418 return path |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
419 |
1281
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
420 def getmessage(self, rev): |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
421 msg = rev.message |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
422 |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
423 if msg: |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
424 try: |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
425 msg.decode('utf-8') |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
426 return msg |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
427 |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
428 except UnicodeDecodeError: |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
429 # ancient svn failed to enforce utf8 encoding |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
430 return msg.decode('iso-8859-1').encode('utf-8') |
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
431 else: |
1283
dde1f536d820
svnmeta: use self.defaultmessage instead of ui.config call
Sean Farley <sean.michael.farley@gmail.com>
parents:
1282
diff
changeset
|
432 return self.defaultmessage |
1281
e74fad41077b
svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents:
1267
diff
changeset
|
433 |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
434 def get_path_tag(self, path): |
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
435 """If path could represent the path to a tag, returns the |
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
436 potential (non-empty) tag name. Otherwise, returns None |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
437 |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
438 Note that it's only a tag if it was copied from the path '' in a branch |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
439 (or tag) we have, for our purposes. |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
440 """ |
1027
16045f6f3fef
layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents:
1026
diff
changeset
|
441 path = self.normalize(path) |
1292
7bbe120be193
layouts: turn taglocations method into a property
Sean Farley <sean.michael.farley@gmail.com>
parents:
1290
diff
changeset
|
442 return self.layoutobj.get_path_tag(path, self.layoutobj.taglocations) |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
443 |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
444 def split_branch_path(self, path, existing=True): |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
445 """Figure out which branch inside our repo this path represents, and |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
446 also figure out which path inside that branch it is. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
447 |
724 | 448 Returns a tuple of (path within branch, local branch name, server-side |
449 branch path). | |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
450 |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
451 Note that tag paths can also be matched: assuming tags/tag-1.1 |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
452 is a tag then: |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
453 tags/tag-1.1 => ('', '../tags/tag-1.1', 'tags/tag-1.1') |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
454 tags/tag-1.1/file => ('file', '../tags/tag-1.1', 'tags/tag-1.1') |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
455 tags/tag-1.2 => (None, None, None) |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
456 |
724 | 457 If existing=True, will return None, None, None if the file isn't on |
458 some known branch. If existing=False, then it will guess what the | |
459 branch would be if it were known. Server-side branch path should be | |
460 relative to our subdirectory. | |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
461 """ |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
462 path = self.normalize(path) |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
463 tag = self.get_path_tag(path) |
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
464 if tag: |
521
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
520
diff
changeset
|
465 # consider the new tags when dispatching entries |
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
520
diff
changeset
|
466 matched = [] |
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
520
diff
changeset
|
467 for tags in (self.tags, self.addedtags): |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
468 matched += [t for t in tags |
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
469 if (tag == t or tag.startswith(t + '/'))] |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
470 if not matched: |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
471 return None, None, None |
521
839734dfb5c7
Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
520
diff
changeset
|
472 matched.sort(key=len, reverse=True) |
536
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
473 if tag == matched[0]: |
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
474 brpath = '' |
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
475 svrpath = path |
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
476 else: |
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
477 brpath = tag[len(matched[0])+1:] |
460eb781d840
Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents:
534
diff
changeset
|
478 svrpath = path[:-(len(brpath)+1)] |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
479 ln = self.localname(svrpath) |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
480 return brpath, ln, svrpath |
1029
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
481 |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
482 branch_path, local_path = self.layoutobj.split_remote_name(path, |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
483 self.branches) |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
484 branch_name = self.layoutobj.localname(branch_path) |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
485 |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
486 if branch_name in self.branches: |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
487 return local_path, branch_name, branch_path |
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
488 elif existing or (branch_name and branch_name.startswith('../')): |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
489 return None, None, None |
207
b20a6c149021
fetch: Fix a bogus case where no files in the root level of trunk caused breakage in the branch detection.
Augie Fackler <durin42@gmail.com>
parents:
203
diff
changeset
|
490 else: |
1029
513f2b607b06
layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents:
1027
diff
changeset
|
491 return local_path, branch_name, branch_path |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
492 |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
493 def _determine_parent_branch(self, p, src_path, src_rev, revnum): |
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
494 if src_path is not None: |
420
59e19c73b0df
svnmeta: eliminate unneeded path_and_branch_for_path() method
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
417
diff
changeset
|
495 src_file, src_branch = self.split_branch_path(src_path)[:2] |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
496 src_tag = self.get_path_tag(src_path) |
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
497 if src_tag or src_file == '': |
1094
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
498 brpath, fpath = self.layoutobj.split_remote_name(p, |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
499 self.branches) |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
500 # we'll sometimes get a different path out of |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
501 # split_remate_name than the one we passed in, but |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
502 # only for the root of a branch, since the svn copies |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
503 # of those will sometimes be of parent directories of |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
504 # our root |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
505 if fpath == '': |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
506 ln = self.localname(brpath) |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
507 else: |
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1079
diff
changeset
|
508 ln = self.localname(p) |
519
247110c633f7
maps: TagMap tags are non-empty strings
Patrick Mezard <pmezard@gmail.com>
parents:
517
diff
changeset
|
509 if src_tag in self.tags: |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
510 changeid = self.tags[src_tag] |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
511 src_rev, src_branch = self.get_source_rev(changeid)[:2] |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
512 return {ln: (src_branch, src_rev, revnum)} |
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
513 return {} |
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
514 |
950
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
888
diff
changeset
|
515 def is_path_valid(self, path, existing=True): |
217
6eb691a163cd
hg_delta_editor: stop using foobaz as a bogus filename.
Augie Fackler <durin42@gmail.com>
parents:
214
diff
changeset
|
516 if path is None: |
6eb691a163cd
hg_delta_editor: stop using foobaz as a bogus filename.
Augie Fackler <durin42@gmail.com>
parents:
214
diff
changeset
|
517 return False |
950
a80b01ceb1fc
editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents:
888
diff
changeset
|
518 subpath = self.split_branch_path(path, existing)[0] |
179
a336e3e82648
Fetch: add a filemap argument for use in converting old repositories to
Graham Booker <gbooker@cod3r.com>
parents:
176
diff
changeset
|
519 if subpath is None: |
a336e3e82648
Fetch: add a filemap argument for use in converting old repositories to
Graham Booker <gbooker@cod3r.com>
parents:
176
diff
changeset
|
520 return False |
409
d4615986e1db
extract the filemap support into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
408
diff
changeset
|
521 return subpath in self.filemap |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
522 |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
523 def get_parent_svn_branch_and_rev(self, number, branch, exact=False): |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
524 """Return the parent revision of branch at number as a tuple |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
525 (parentnum, parentbranch) or (None, None) if undefined. |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
526 |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
527 By default, current revision copy records will be used to resolve |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
528 the parent. For instance, if branch1 is replaced by branch2 in |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
529 current revision, then the parent of current revision on branch1 |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
530 will be branch2. In this case, use exact=True to select the |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
531 existing branch before looking at the copy records. |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
532 """ |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
533 if (number, branch) in self.revmap: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
534 return number, branch |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
535 real_num = 0 |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
536 for num, br in self.revmap.iterkeys(): |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
537 if br != branch: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
538 continue |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
539 if num <= number and num > real_num: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
540 real_num = num |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
541 if branch in self.branches: |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
542 parent_branch = self.branches[branch][0] |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
543 parent_branch_rev = self.branches[branch][1] |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
544 # check to see if this branch already existed and is the same |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
545 if parent_branch_rev < real_num: |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
546 return real_num, branch |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
547 # if that wasn't true, then this is the a new branch with the |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
548 # same name as some old deleted branch |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
549 if parent_branch_rev <= 0 and real_num == 0: |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
550 return None, None |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
551 branch_created_rev = self.branches[branch][2] |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
552 if parent_branch == 'trunk': |
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
553 parent_branch = None |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
831
diff
changeset
|
554 if branch_created_rev <= number + 1 and branch != parent_branch: |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
555 # did the branch exist in previous run |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
556 if exact and branch in self.prevbranches: |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
557 if self.prevbranches[branch][1] < real_num: |
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
558 return real_num, branch |
133
2242dd1163c6
hg_delta_editor: fix bad parent revision calculation in the case of a branch
Augie Fackler <durin42@gmail.com>
parents:
131
diff
changeset
|
559 return self.get_parent_svn_branch_and_rev( |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
560 parent_branch_rev, parent_branch) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
561 if real_num != 0: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
562 return real_num, branch |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
563 return None, None |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
564 |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
565 def get_parent_revision(self, number, branch, exact=False): |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
566 '''Get the parent revision hash for a commit on a specific branch. |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
567 ''' |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
568 tag = self.get_path_tag(self.remotename(branch)) |
533
7b330c576920
svnmeta: speedup get_parent_revision() in common case
Patrick Mezard <pmezard@gmail.com>
parents:
521
diff
changeset
|
569 if tag: |
537
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
570 # Reference a tag being created |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
571 if tag in self.addedtags: |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
572 tbranch, trev = self.addedtags[tag] |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
573 fromtag = self.get_path_tag(self.remotename(tbranch)) |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
574 if not fromtag: |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
575 # Created from a regular branch, not another tag |
575
c278a225b750
svnmeta: reverse parameter calculation to lessen complexity
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
574
diff
changeset
|
576 tagged = self.get_parent_svn_branch_and_rev(trev, tbranch) |
537
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
577 return node.hex(self.revmap[tagged]) |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
578 tag = fromtag |
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
579 # Reference an existing tag |
1187
30b2139c3931
maps: change tags init to accept svnmeta not a repo
Sean Farley <sean.michael.farley@gmail.com>
parents:
1186
diff
changeset
|
580 limitedtags = maps.Tags(self, endrev=number - 1) |
533
7b330c576920
svnmeta: speedup get_parent_revision() in common case
Patrick Mezard <pmezard@gmail.com>
parents:
521
diff
changeset
|
581 if tag in limitedtags: |
537
3c8b86949072
svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents:
536
diff
changeset
|
582 return limitedtags[tag] |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
583 r, br = self.get_parent_svn_branch_and_rev(number - 1, branch, exact) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
584 if r is not None: |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
585 return self.revmap[r, br] |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
586 return revlog.nullid |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
587 |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
588 def get_source_rev(self, changeid=None, ctx=None): |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
589 """Return the source svn revision, the branch name and the svn |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
590 branch path or a converted changeset. If supplied revision |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
591 has no conversion record, raise KeyError. |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
592 |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
593 If ctx is None, build one from supplied changeid |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
594 """ |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
595 if ctx is None: |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
596 ctx = self.repo[changeid] |
632
eea224fa1156
svnmeta: improve error message in get_source_rev()
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
594
diff
changeset
|
597 extra = ctx.extra() |
eea224fa1156
svnmeta: improve error message in get_source_rev()
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
594
diff
changeset
|
598 if 'convert_revision' not in extra: |
eea224fa1156
svnmeta: improve error message in get_source_rev()
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
594
diff
changeset
|
599 raise KeyError('%s has no conversion record' % ctx) |
eea224fa1156
svnmeta: improve error message in get_source_rev()
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
594
diff
changeset
|
600 branchpath, revnum = extra['convert_revision'][40:].rsplit('@', 1) |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
601 branch = self.localname(self.normalize(branchpath)) |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
602 if branchpath and branchpath[0] == '/': |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
603 branchpath = branchpath[1:] |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
604 return int(revnum), branch, branchpath |
448
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
605 |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
606 def update_branch_tag_map_for_rev(self, revision): |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
607 """Given a revision object, determine changes to branches. |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
608 |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
609 Returns: a dict of { |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
610 'branches': (added_branches, self.closebranches), |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
611 } where adds are dicts where the keys are branch names and |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
612 values are the place the branch came from. The deletions are |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
613 sets of the deleted branches. |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
474
diff
changeset
|
614 """ |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
615 paths = revision.paths |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
616 added_branches = {} |
538
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
617 # Reset the tags delta before detecting the new one, and take |
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
618 # care not to fill them until done since split_branch_path() |
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
619 # use them. |
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
620 self.addedtags, self.deletedtags = {}, {} |
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
621 addedtags, deletedtags = {}, {} |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
622 self.closebranches = set() |
131
4d42dbbb5127
hg_delta_editor: fix parent revision detection on branch copy
Patrick Mezard <pmezard@gmail.com>
parents:
124
diff
changeset
|
623 for p in sorted(paths): |
517
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
624 t_name = self.get_path_tag(p) |
ef288fb7f2fe
svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents:
499
diff
changeset
|
625 if t_name: |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
626 src_p, src_rev = paths[p].copyfrom_path, paths[p].copyfrom_rev |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
627 if src_p is not None and src_rev is not None: |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
628 file, branch = self.split_branch_path(src_p)[:2] |
539
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
629 from_tag = self.get_path_tag(src_p) |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
630 if file is None and not from_tag: |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
631 continue |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
632 if from_tag and from_tag not in self.tags: |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
633 # Ignore copies from unknown tags |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
634 continue |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
635 if not file: |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
636 # Direct branch or tag copy |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
637 if from_tag: |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
638 changeid = self.tags[from_tag] |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
639 src_rev, branch = self.get_source_rev(changeid)[:2] |
539
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
640 if t_name not in addedtags: |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
641 addedtags[t_name] = branch, src_rev |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
642 else: |
36eb608b831b
svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents:
538
diff
changeset
|
643 # Subbranch or subtag copy |
381
a441ba143ac8
tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents:
380
diff
changeset
|
644 t_name = t_name[:-(len(file)+1)] |
538
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
645 found = t_name in addedtags |
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
646 if found and src_rev > addedtags[t_name][1]: |
545
ebd8fb1a05e4
clean up trailing whitespace
Augie Fackler <durin42@gmail.com>
parents:
540
diff
changeset
|
647 addedtags[t_name] = branch, src_rev |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
648 elif (paths[p].action == 'D' and p.endswith(t_name) |
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
649 and t_name in self.tags): |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
650 branch = self.get_source_rev(self.tags[t_name])[1] |
538
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
651 deletedtags[t_name] = branch, None |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
652 continue |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
653 |
312
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
654 # At this point we know the path is not a tag. In that |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
655 # case, we only care if it is the root of a new branch (in |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
656 # this function). This is determined by the following |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
657 # checks: |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
658 # 1. Is the file located inside any currently known |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
659 # branch? If yes, then we're done with it, this isn't |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
660 # interesting. |
952
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
661 # 2. Does the file have copyfrom information? If yes, and |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
662 # the branch is being replaced by what would be an |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
663 # ancestor, treat it as a regular revert. Otherwise, |
313
942f198b8ff5
hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents:
312
diff
changeset
|
664 # we're done: this is a new branch, and we record the |
942f198b8ff5
hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents:
312
diff
changeset
|
665 # copyfrom in added_branches if it comes from the root |
942f198b8ff5
hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents:
312
diff
changeset
|
666 # of another branch, or create it from scratch. |
312
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
667 # 3. Neither of the above. This could be a branch, but it |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
668 # might never work out for us. It's only ever a branch |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
669 # (as far as we're concerned) if it gets committed to, |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
670 # which we have to detect at file-write time anyway. So |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
671 # we do nothing here. |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
672 # 4. It's the root of an already-known branch, with an |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
673 # action of 'D'. We mark the branch as deleted. |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
674 # 5. It's the parent directory of one or more |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
675 # already-known branches, so we mark them as deleted. |
1099
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
676 # 6. It's a branch being replaced by another branch or a new |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
677 # directory - the action will be 'R'. |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
678 fi, br = self.split_branch_path(p)[:2] |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
679 if fi is not None: |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
680 if fi == '': |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
681 if paths[p].action == 'D': |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
682 self.closebranches.add(br) # case 4 |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
683 elif paths[p].action == 'R': |
952
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
684 # Check the replacing source is not an ancestor |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
685 # branch of the branch being replaced, this |
9c3b4f59e7e6
stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents:
950
diff
changeset
|
686 # would just be a revert. |
1099
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
687 if paths[p].copyfrom_path: |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
688 cfi, cbr = self.split_branch_path( |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
689 paths[p].copyfrom_path, paths[p].copyfrom_rev)[:2] |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
690 if cfi == '': |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
691 cctx = self.repo[self.get_parent_revision( |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
692 paths[p].copyfrom_rev + 1, cbr)] |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
693 ctx = self.repo[self.get_parent_revision( |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
694 revision.revnum, br)] |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
695 if cctx and util.isancestor(ctx, cctx): |
c6f7a8cfeca9
pull: correctly handle replacing the root of a branch with a non-copied directory
David Schleimer <dschleimer@fb.com>
parents:
1094
diff
changeset
|
696 continue |
312
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
697 parent = self._determine_parent_branch( |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
698 p, paths[p].copyfrom_path, paths[p].copyfrom_rev, |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
699 revision.revnum) |
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
700 added_branches.update(parent) |
203
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
701 continue # case 1 |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
702 if paths[p].action == 'D': |
907c160c6289
Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents:
198
diff
changeset
|
703 for known in self.branches: |
417
8630d1ebcdb9
svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
704 if self.remotename(known).startswith(p): |
473
45df4d9320fa
Fix 'parent dir of a branch is deleted' refactoring from 343da84.
Max Bowsher <maxb@f2s.com>
parents:
459
diff
changeset
|
705 self.closebranches.add(known) # case 5 |
312
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
706 parent = self._determine_parent_branch( |
724 | 707 p, paths[p].copyfrom_path, paths[p].copyfrom_rev, |
708 revision.revnum) | |
313
942f198b8ff5
hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents:
312
diff
changeset
|
709 if not parent and paths[p].copyfrom_path: |
540
8dc759dc9ca9
svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents:
539
diff
changeset
|
710 bpath, branch = self.split_branch_path(p, False)[:2] |
352
cc7a10efddc9
Fix a bug in branch ancestry calculation.
Augie Fackler <durin42@gmail.com>
parents:
350
diff
changeset
|
711 if (bpath is not None |
cc7a10efddc9
Fix a bug in branch ancestry calculation.
Augie Fackler <durin42@gmail.com>
parents:
350
diff
changeset
|
712 and branch not in self.branches |
cc7a10efddc9
Fix a bug in branch ancestry calculation.
Augie Fackler <durin42@gmail.com>
parents:
350
diff
changeset
|
713 and branch not in added_branches): |
313
942f198b8ff5
hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents:
312
diff
changeset
|
714 parent = {branch: (None, 0, revision.revnum)} |
551
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
715 elif bpath is None: |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
716 srcpath = paths[p].copyfrom_path |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
717 srcrev = paths[p].copyfrom_rev |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
718 parent = {} |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
719 for br in self.branches: |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
720 rn = self.remotename(br) |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
721 if rn.startswith(srcpath[1:] + '/'): |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
722 bname = posixpath.basename(rn) |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
723 newbr = posixpath.join(p, bname) |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
724 parent.update( |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
725 self._determine_parent_branch( |
d17cec76e769
replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents:
547
diff
changeset
|
726 newbr, rn, srcrev, revision.revnum)) |
312
4dc197f533c1
hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents:
290
diff
changeset
|
727 added_branches.update(parent) |
538
93bb37e38675
svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents:
537
diff
changeset
|
728 self.addedtags, self.deletedtags = addedtags, deletedtags |
367
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
729 return { |
414
343da842dbe6
split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
413
diff
changeset
|
730 'branches': (added_branches, self.closebranches), |
367
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
731 } |
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
732 |
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
733 def save_tbdelta(self, tbdelta): |
584
d000b9a361e4
svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents:
575
diff
changeset
|
734 self.prevbranches = dict(self.branches) |
367
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
735 for br in tbdelta['branches'][1]: |
59
430af23bef4a
Performance fix for branches-from-tags in real replay, which is tied up with
Augie Fackler <durin42@gmail.com>
parents:
55
diff
changeset
|
736 del self.branches[br] |
367
ce64d57172a3
Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
365
diff
changeset
|
737 self.branches.update(tbdelta['branches'][0]) |
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
738 |
634
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
739 def movetag(self, tag, hash, rev, date): |
547
9e6499c415a9
tags: fix files edited during tag creation
Augie Fackler <durin42@gmail.com>
parents:
545
diff
changeset
|
740 if tag in self.tags and self.tags[tag] == hash: |
474
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
473
diff
changeset
|
741 return |
634
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
742 |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
743 # determine branch from earliest unclosed ancestor |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
744 branchparent = self.repo[hash] |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
745 while branchparent.extra().get('close'): |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
746 branchparent = branchparent.parents()[0] |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
747 branch = self.get_source_rev(ctx=branchparent)[1] |
a400f3bf5611
replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
632
diff
changeset
|
748 |
832
e9af7eba88db
globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents:
831
diff
changeset
|
749 parentctx = self.repo[self.get_parent_revision(rev.revnum + 1, branch)] |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
750 if '.hgtags' in parentctx: |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
751 tagdata = parentctx.filectx('.hgtags').data() |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
752 else: |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
753 tagdata = '' |
729 | 754 tagdata += '%s %s\n' % (node.hex(hash), self.tagmap.get(tag, tag)) |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
755 def hgtagsfn(repo, memctx, path): |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
756 assert path == '.hgtags' |
1219
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
757 return compathacks.makememfilectx(repo, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
758 path=path, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
759 data=tagdata, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
760 islink=False, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
761 isexec=False, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
762 copied=False) |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
763 revnum, branch = self.get_source_rev(ctx=parentctx)[:2] |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
764 newparent = None |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
765 for child in parentctx.children(): |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
766 if (self.get_source_rev(ctx=child)[1] == branch |
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
767 and child.extra().get('close', False)): |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
768 newparent = child |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
769 if newparent: |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
770 parentctx = newparent |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
771 revnum, branch = self.get_source_rev(ctx=parentctx)[:2] |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
772 ctx = context.memctx(self.repo, |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
773 (parentctx.node(), node.nullid), |
1284
6d6345604772
svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents:
1283
diff
changeset
|
774 self.getmessage(rev), |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
775 ['.hgtags', ], |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
776 hgtagsfn, |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
777 self.authors[rev.author], |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
778 date, |
534
e38f110e7088
svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents:
533
diff
changeset
|
779 parentctx.extra()) |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
773
diff
changeset
|
780 new_hash = self.repo.svn_commitctx(ctx) |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
781 if not newparent: |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
782 assert self.revmap[revnum, branch] == parentctx.node() |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
451
diff
changeset
|
783 self.revmap[revnum, branch] = new_hash |
453
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
784 self.tags[tag] = hash, rev.revnum |
447
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
785 util.describe_commit(self.ui, new_hash, branch) |
0d3b5acb1d51
tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents:
423
diff
changeset
|
786 |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
787 def committags(self, rev, endbranches): |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
788 if not self.addedtags and not self.deletedtags: |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
789 return |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
790 date = self.fixdate(rev.date) |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
791 # determine additions/deletions per branch |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
792 branches = {} |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
793 for tags in (self.addedtags, self.deletedtags): |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
794 for tag, (branch, srcrev) in tags.iteritems(): |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
795 op = srcrev is None and 'rm' or 'add' |
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
519
diff
changeset
|
796 branches.setdefault(branch, []).append((op, tag, srcrev)) |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
797 |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
798 for b, tags in branches.iteritems(): |
726
8d36054b04ed
keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
724
diff
changeset
|
799 |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
800 # modify parent's .hgtags source |
726
8d36054b04ed
keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
724
diff
changeset
|
801 |
389
a8811c84e3ee
tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents:
386
diff
changeset
|
802 parent = self.repo[self.get_parent_revision(rev.revnum, b)] |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
803 if '.hgtags' not in parent: |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
804 src = '' |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
805 else: |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
806 src = parent['.hgtags'].data() |
726
8d36054b04ed
keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
724
diff
changeset
|
807 |
8d36054b04ed
keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
724
diff
changeset
|
808 fromtag = self.get_path_tag(self.remotename(b)) |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
809 for op, tag, r in sorted(tags, reverse=True): |
729 | 810 |
811 if tag in self.tagmap and not self.tagmap[tag]: | |
812 continue | |
813 | |
814 tagged = node.hex(node.nullid) # op != 'add' | |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
815 if op == 'add': |
451
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
816 if fromtag: |
455
54e57da61c1a
This patch fixes, partially, an issue with tagpaths.
Michael J. Pedersen <mpedersen@datapipe.com>
parents:
452
diff
changeset
|
817 if fromtag in self.tags: |
54e57da61c1a
This patch fixes, partially, an issue with tagpaths.
Michael J. Pedersen <mpedersen@datapipe.com>
parents:
452
diff
changeset
|
818 tagged = node.hex(self.tags[fromtag]) |
451
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
819 else: |
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
820 tagged = node.hex(self.revmap[ |
575
c278a225b750
svnmeta: reverse parameter calculation to lessen complexity
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
574
diff
changeset
|
821 self.get_parent_svn_branch_and_rev(r, b)]) |
729 | 822 |
823 src += '%s %s\n' % (tagged, self.tagmap.get(tag, tag)) | |
453
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
824 self.tags[tag] = node.bin(tagged), rev.revnum |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
825 |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
826 # add new changeset containing updated .hgtags |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
827 def fctxfun(repo, memctx, path): |
1219
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
828 return compathacks.makememfilectx(repo, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
829 path='.hgtags', |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
830 data=src, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
831 islink=False, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
832 isexec=False, |
656718fdd3be
svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents:
1099
diff
changeset
|
833 copied=None) |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
834 |
422
6086363e8230
svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
421
diff
changeset
|
835 extra = self.genextra(rev.revnum, b) |
451
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
836 if fromtag: |
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
837 extra['branch'] = parent.extra().get('branch', 'default') |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
838 self.mapbranch(extra, b in endbranches or fromtag) |
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
839 |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
840 ctx = context.memctx(self.repo, |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
841 (parent.node(), node.nullid), |
1284
6d6345604772
svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents:
1283
diff
changeset
|
842 self.getmessage(rev), |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
843 ['.hgtags'], |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
844 fctxfun, |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
845 self.authors[rev.author], |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
846 date, |
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
847 extra) |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
773
diff
changeset
|
848 new = self.repo.svn_commitctx(ctx) |
451
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
849 |
e533e78f1b2f
tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents:
450
diff
changeset
|
850 if not fromtag and (rev.revnum, b) not in self.revmap: |
408
f137231f9d30
extract the revmap support into a separate dict-like class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
407
diff
changeset
|
851 self.revmap[rev.revnum, b] = new |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
852 if b in endbranches: |
399
94f7e8c53c36
tags: end branch while tagging instead of creating extra changeset
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
398
diff
changeset
|
853 endbranches.pop(b) |
94f7e8c53c36
tags: end branch while tagging instead of creating extra changeset
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
398
diff
changeset
|
854 bname = b or 'default' |
94f7e8c53c36
tags: end branch while tagging instead of creating extra changeset
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
398
diff
changeset
|
855 self.ui.status('Marked branch %s as closed.\n' % bname) |
376
9327e9325645
Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
375
diff
changeset
|
856 |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
857 def delbranch(self, branch, node, rev): |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
858 pctx = self.repo[node] |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
859 files = pctx.manifest().keys() |
423
021bdbf391bb
put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
422
diff
changeset
|
860 extra = self.genextra(rev.revnum, branch) |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
551
diff
changeset
|
861 self.mapbranch(extra, True) |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
862 ctx = context.memctx(self.repo, |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
863 (node, revlog.nullid), |
1284
6d6345604772
svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents:
1283
diff
changeset
|
864 self.getmessage(rev), |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
865 [], |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
866 lambda x, y, z: None, |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
867 self.authors[rev.author], |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
868 self.fixdate(rev.date), |
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
869 extra) |
831
be5bbb2f2d68
svnrepo: kludge to work around hash changes between stupid and replay in hg 1.9
Augie Fackler <durin42@gmail.com>
parents:
773
diff
changeset
|
870 new = self.repo.svn_commitctx(ctx) |
413
ac0cc3c9ea63
sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
411
diff
changeset
|
871 self.ui.status('Marked branch %s as closed.\n' % (branch or 'default')) |