annotate hgsubversion/svnmeta.py @ 1284:6d6345604772

svnmeta: call self.getmessage instead of util
author Sean Farley <sean.michael.farley@gmail.com>
date Mon, 24 Mar 2014 11:20:52 -0500
parents dde1f536d820
children d29a3f988b74
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5dc8fee7fc96 Less import *
Augie Fackler <durin42@gmail.com>
parents: 316
diff changeset
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
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
15
363
ccef78b91ac9 Move exception classes in hg_delta_editor up top.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 362
diff changeset
16
414
343da842dbe6 split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 413
diff changeset
17 class SVNMeta(object):
33
a9c15cae50e5 Faster append-only revmap implementation.
Andreas Hartmetz <ahartmetz@gmail.com>
parents: 23
diff changeset
18
1154
24edef55e61b svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
19 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
20 """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
21
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
22 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
23 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
24 """
1259
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
25 # simple and public variables
405
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 400
diff changeset
26 self.ui = repo.ui
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 400
diff changeset
27 self.repo = repo
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 400
diff changeset
28 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
29 self.firstpulled = 0
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
30 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
31 self.addedtags = {}
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
32 self.deletedtags = {}
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
33
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
34 # private variables
1154
24edef55e61b svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
35 self._skiperror = skiperrorcheck
1259
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
36 self._tags = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
37 self._layoutobj = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
38 self._revmap = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
39 self._authors = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
40 self._branchmap = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
41 self._tagmap = None
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
42 self._filemap = None
405
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 400
diff changeset
43
1259
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
44 # 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
45 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
46 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
47
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
48 # 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
49 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
50 self.subdir = subdir
405
a98b8d424221 editor: simplify HgChangeReceiver constructor signature
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 400
diff changeset
51
1259
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
52 # 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
53 self._gen_cachedconfig('lastpulled', 0, configname=False)
1189
0ef719f4c371 svnmeta: add defaultauthors property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1187
diff changeset
54 self._gen_cachedconfig('defaultauthors', True)
1190
5df842451d7e svnmeta: add caseignoreauthors property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1189
diff changeset
55 self._gen_cachedconfig('caseignoreauthors', False)
1191
f0d5c03a71b9 svnmeta: add defaulthost property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1190
diff changeset
56 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
57 self._gen_cachedconfig('usebranchnames', True)
1282
5aecb986a5a0 svnmeta: generate cached defaultmessage property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1281
diff changeset
58 self._gen_cachedconfig('defaultmessage', '')
1184
43384d2782dc svnmeta: move revmap.youngest to meta.lastpulled
Sean Farley <sean.michael.farley@gmail.com>
parents: 1183
diff changeset
59
1259
b7b0ed1e1455 svnmeta: reorder code in __init__ for easier reading
Sean Farley <sean.michael.farley@gmail.com>
parents: 1228
diff changeset
60 # misc
1130
ed4804ee68c4 svnmeta: use util.load instead of bare pickle
Sean Farley <sean.michael.farley@gmail.com>
parents: 1127
diff changeset
61 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
62 self.prevbranches = dict(self.branches)
1265
4744b7bfa476 layouts: change constructor to take a meta object
Sean Farley <sean.michael.farley@gmail.com>
parents: 1263
diff changeset
63 self._layout = layouts.detect.layout_from_file(self)
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
64
1267
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
65 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
66 """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
67 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
68 commandline.
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
69 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
70 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
71 configname: commandline option name
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
72 default: default value
1267
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
73 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
74 """
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
75 varname = '_' + name
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
76 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
77 # 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
78 # filename
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
79 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
80
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
81 # 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
82 c = None
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
83 if configname:
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
84 # 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
85 # 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
86 # 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
87 c = None
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
88 if isinstance(default, bool):
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
89 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
90 elif isinstance(default, int):
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
91 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
92 elif isinstance(default, list):
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
93 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
94 else:
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
95 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
96
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
97 # 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
98 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
99
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
100 # 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
101 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
102 val = c
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
103
1267
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
104 # apply transformation if necessary
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
105 if pre:
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
106 val = pre(val)
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
107
1181
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
108 # 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
109 setattr(self, varname, val)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
110
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
111 # 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
112 setattr(self, name, 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 return getattr(self, varname)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
115
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
116 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
117 varname = '_' + name
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
118 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
119 setattr(self, varname, value)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
120 util.dump(value, f)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
121
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
122 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
123 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
124 """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
125
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
126 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
127 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
128 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
129 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
130 """
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
131 setattr(SVNMeta, '_' + name, None)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
132 if filename is None:
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
133 filename = name
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
134 if configname is None:
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
135 configname = name
1267
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
136 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
137 filename,
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
138 configname,
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
139 default,
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
140 pre=pre),
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
141 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
142 name,
5f86e2ac7659 svnmeta: add pre-transformation parameter to cached generator
Sean Farley <sean.michael.farley@gmail.com>
parents: 1265
diff changeset
143 filename))
1181
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
144 setattr(SVNMeta, name, prop)
eb4c7bc23f9e svnmeta: add generator for cached svn configuration properties
Sean Farley <sean.michael.farley@gmail.com>
parents: 1161
diff changeset
145
1261
51f88d3aa4dd svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1259
diff changeset
146 @property
51f88d3aa4dd svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1259
diff changeset
147 def layout_file(self):
51f88d3aa4dd svnmeta: add a layout_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1259
diff changeset
148 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
149
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
150 @property
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
151 def layout(self):
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
152 # this method can't determine the layout, but it needs to be
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
153 # resolved into something other than auto before this ever
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
154 # gets called
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
155 if not self._layout or self._layout == 'auto':
1265
4744b7bfa476 layouts: change constructor to take a meta object
Sean Farley <sean.michael.farley@gmail.com>
parents: 1263
diff changeset
156 self._layout = layouts.detect.layout_from_config(self)
1263
54cf64e9ef49 svnmeta: use util.dump instead of layout_to_file
Sean Farley <sean.michael.farley@gmail.com>
parents: 1261
diff changeset
157 util.dump(self._layout, self.layout_file)
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
158 return self._layout
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
159
1012
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents: 1006
diff changeset
160 @property
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents: 1006
diff changeset
161 def layoutobj(self):
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents: 1006
diff changeset
162 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
163 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
164 return self._layoutobj
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents: 1006
diff changeset
165
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
166 @property
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
167 def editor(self):
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
168 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
169 self._editor = editor.HgEditor(self)
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
170 return self._editor
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
171
748
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
172 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
173 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
174
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
175 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
176 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
177 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
178
1154
24edef55e61b svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
179 self.__subdir = None
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
180 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
181
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
182 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
183 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
184 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
185 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
186 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
187 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
188 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
189 'repository')
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
190 else:
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
191 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
192 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
193 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
194 self.__subdir = subdir
1154
24edef55e61b svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
195 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
196 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
197 "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
198
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
199 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
200 '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
201 'repository.')
e1e2af66953d svnmeta: store subdir in a file, and verify it when loading.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 747
diff changeset
202
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
203 def _get_uuid(self):
747
34b25f6bc4ef svnmeta: slight refactor of the UUID property.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 746
diff changeset
204 return self.__uuid
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
205
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
206 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
207 self.__uuid = None
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
208 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
209 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
210 stored_uuid = util.load(uuidfile)
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
211 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
212 if uuid and uuid != stored_uuid:
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
213 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
214 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
215 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
216 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
217 self.__uuid = uuid
1154
24edef55e61b svnmeta: relax error checking with a parameter
Sean Farley <sean.michael.farley@gmail.com>
parents: 1153
diff changeset
218 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
219 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
220 "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
221
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
222 uuid = property(_get_uuid, _set_uuid, None,
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
223 'Error-checked UUID of source Subversion repository.')
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
224
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
225 @property
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
226 def metapath(self):
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
227 return os.path.join(self.path, '.hg', 'svn')
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
228
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
229 @property
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
230 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
231 return os.path.join(self.metapath, 'branch_info')
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
232
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
233 @property
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
234 def authors_file(self):
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
235 return os.path.join(self.metapath, 'authors')
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
236
1207
9fc3557ce85e svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1199
diff changeset
237 @property
9fc3557ce85e svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1199
diff changeset
238 def authors(self):
9fc3557ce85e svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1199
diff changeset
239 if self._authors is None:
9fc3557ce85e svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1199
diff changeset
240 self._authors = maps.AuthorMap(self)
9fc3557ce85e svnmeta: turn authors into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1199
diff changeset
241 return self._authors
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
242
846
7ca3d1b08d67 Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents: 837
diff changeset
243 @property
7ca3d1b08d67 Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents: 837
diff changeset
244 def filemap_file(self):
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
245 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
246
1216
572417ad0313 svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1214
diff changeset
247 @property
572417ad0313 svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1214
diff changeset
248 def filemap(self):
572417ad0313 svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1214
diff changeset
249 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
250 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
251 return self._filemap
572417ad0313 svnmeta: turn filemap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1214
diff changeset
252
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
253 @property
1161
8693c9558f1a svnmeta: unify variable names cleanup
Sean Farley <sean.michael.farley@gmail.com>
parents: 1160
diff changeset
254 def branchmap_file(self):
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
255 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
256
1212
0ca7f80d0ab6 svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1211
diff changeset
257 @property
0ca7f80d0ab6 svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1211
diff changeset
258 def branchmap(self):
0ca7f80d0ab6 svnmeta: turn branchmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1211
diff changeset
259 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
260 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
261 return self._branchmap
846
7ca3d1b08d67 Save filemap into .hg/svn/filemap just like other maps
Vitaliy Filippov <vitalif@yourcmc.ru>
parents: 837
diff changeset
262
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
263 @property
1158
770ac6de58c5 svnmeta: add tagfile property for use with the Tags object
Sean Farley <sean.michael.farley@gmail.com>
parents: 1157
diff changeset
264 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
265 # 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
266 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
267
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
268 @property
1160
f06bb42bd2b2 svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1158
diff changeset
269 def tags(self):
f06bb42bd2b2 svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1158
diff changeset
270 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
271 self._tags = maps.Tags(self)
1160
f06bb42bd2b2 svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1158
diff changeset
272 return self._tags
f06bb42bd2b2 svnmeta: turn tags into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1158
diff changeset
273
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
274 @property
1161
8693c9558f1a svnmeta: unify variable names cleanup
Sean Farley <sean.michael.farley@gmail.com>
parents: 1160
diff changeset
275 def tagmap_file(self):
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
276 # 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
277 return os.path.join(self.metapath, 'tag-renames')
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
278
1209
20c28c511551 svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1208
diff changeset
279 @property
20c28c511551 svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1208
diff changeset
280 def tagmap(self):
20c28c511551 svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1208
diff changeset
281 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
282 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
283 return self._tagmap
20c28c511551 svnmeta: turn tagmap into a lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1208
diff changeset
284
1156
0b40caaaa0ee svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1154
diff changeset
285 @property
0b40caaaa0ee svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1154
diff changeset
286 def revmap_file(self):
0b40caaaa0ee svnmeta: add revmap_file property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1154
diff changeset
287 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
288
1157
c2b72618645a svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1156
diff changeset
289 @property
c2b72618645a svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1156
diff changeset
290 def revmap(self):
c2b72618645a svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1156
diff changeset
291 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
292 self._revmap = maps.RevMap(self)
1157
c2b72618645a svnmeta: turn revmap into lazy property
Sean Farley <sean.michael.farley@gmail.com>
parents: 1156
diff changeset
293 return self._revmap
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
294
237
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
295 def fixdate(self, date):
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
296 if date is not None:
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
297 date = date.replace('T', ' ').replace('Z', '').split('.')[0]
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
298 date += ' -0000'
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
299 self.lastdate = date
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
300 else:
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
301 date = self.lastdate
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
302 return date
c90cfa665b81 Cope with date-less revisions.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 232
diff changeset
303
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
304 def save(self):
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
305 '''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
306 every revision is created.
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
307 '''
1127
eaefb3413b87 util: rename pickle_atomic to dump
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
308 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
309
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
310 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
311 """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
312 """
1012
e8cd211684c4 layouts: refactor out svn path to mercurial branch logic
David Schleimer <dschleimer@fb.com>
parents: 1006
diff changeset
313 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
314
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
315 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
316 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
317
422
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
318 def genextra(self, revnum, branch):
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
319 extra = {}
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
320 subdir = self.subdir
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
321 if subdir and subdir[-1] == '/':
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
322 subdir = subdir[:-1]
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
323 if subdir and subdir[0] != '/':
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
324 subdir = '/' + subdir
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
325
1014
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
326 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
327
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
328 if branch:
0ed7cf23e801 layouts: refactor path component of convinfo generation into layouts lib
David Schleimer <dschleimer@fb.com>
parents: 1013
diff changeset
329 extra['branch'] = branch
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
330
422
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
331 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
332 'uuid': self.uuid,
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
333 'path': path,
422
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
334 'rev': revnum,
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
335 }
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
336 return extra
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
337
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
338 def mapbranch(self, extra, close=False):
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
339 if close:
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
340 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
341 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
342 if not self.usebranchnames or mapped == 'default':
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
343 extra.pop('branch', None)
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
344 elif mapped:
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
345 extra['branch'] = mapped
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
346
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
347 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
348 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
349
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
350 def normalize(self, path):
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
351 '''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
352 have one.
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
353 '''
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
354 if self.subdir and path == self.subdir[:-1]:
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
355 return ''
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
356 if path and path[0] == '/':
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
357 path = path[1:]
888
c6388ed0ec0a svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 878
diff changeset
358 if path == self.subdir:
c6388ed0ec0a svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 878
diff changeset
359 return ''
c6388ed0ec0a svnmeta: only remove directory components in normalize()
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 878
diff changeset
360 if path and path.startswith(self.subdir + '/'):
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
361 path = path[len(self.subdir):]
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
362 if path and path[0] == '/':
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
363 path = path[1:]
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
364 return path
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
365
1079
c1077b223648 svnmeta: factor out a property for obtaining the tag locations
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1045
diff changeset
366 @property
c1077b223648 svnmeta: factor out a property for obtaining the tag locations
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1045
diff changeset
367 def taglocations(self):
1153
c3c4518e00aa svnmeta: rename meta_data_dir to metapath
Sean Farley <sean.michael.farley@gmail.com>
parents: 1152
diff changeset
368 return self.layoutobj.taglocations(self.metapath)
1079
c1077b223648 svnmeta: factor out a property for obtaining the tag locations
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1045
diff changeset
369
1281
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
370 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
371 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
372
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
373 if msg:
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
374 try:
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
375 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
376 return msg
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
377
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
378 except UnicodeDecodeError:
e74fad41077b svnmeta: copy util.getmessage to here so we can refactor
Sean Farley <sean.michael.farley@gmail.com>
parents: 1267
diff changeset
379 # 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
380 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
381 else:
1283
dde1f536d820 svnmeta: use self.defaultmessage instead of ui.config call
Sean Farley <sean.michael.farley@gmail.com>
parents: 1282
diff changeset
382 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
383
517
ef288fb7f2fe svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents: 499
diff changeset
384 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
385 """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
386 potential (non-empty) tag name. Otherwise, returns None
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
387
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
388 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
389 (or tag) we have, for our purposes.
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
390 """
1027
16045f6f3fef layouts: pull svn path -> potential tag name mapping into layouts
David Schleimer <dschleimer@fb.com>
parents: 1026
diff changeset
391 path = self.normalize(path)
1079
c1077b223648 svnmeta: factor out a property for obtaining the tag locations
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1045
diff changeset
392 return self.layoutobj.get_path_tag(path, self.taglocations)
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
393
540
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
394 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
395 """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
396 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
397
724
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
398 Returns a tuple of (path within branch, local branch name, server-side
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
399 branch path).
203
907c160c6289 Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents: 198
diff changeset
400
540
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
401 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
402 is a tag then:
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
403 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
404 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
405 tags/tag-1.2 => (None, None, None)
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
406
724
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
407 If existing=True, will return None, None, None if the file isn't on
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
408 some known branch. If existing=False, then it will guess what the
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
409 branch would be if it were known. Server-side branch path should be
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
410 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
411 """
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
412 path = self.normalize(path)
517
ef288fb7f2fe svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents: 499
diff changeset
413 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
414 if tag:
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 520
diff changeset
415 # 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
416 matched = []
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 520
diff changeset
417 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
418 matched += [t for t in tags
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
419 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
420 if not matched:
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
421 return None, None, None
521
839734dfb5c7 Handle tag subdirectory as tag in replay mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 520
diff changeset
422 matched.sort(key=len, reverse=True)
536
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
423 if tag == matched[0]:
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
424 brpath = ''
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
425 svrpath = path
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
426 else:
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
427 brpath = tag[len(matched[0])+1:]
460eb781d840 Handle subdirectory tags in stupid mode (issue119)
Patrick Mezard <pmezard@gmail.com>
parents: 534
diff changeset
428 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
429 ln = self.localname(svrpath)
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
430 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
431
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
432 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
433 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
434 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
435
513f2b607b06 layouts: pull out logic for splitting svn paths into branch and local parts
David Schleimer <dschleimer@fb.com>
parents: 1027
diff changeset
436 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
437 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
438 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
439 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
440 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
441 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
442
414
343da842dbe6 split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 413
diff changeset
443 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
444 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
445 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
446 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
447 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
448 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
449 self.branches)
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1079
diff changeset
450 # 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
451 # 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
452 # 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
453 # 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
454 # our root
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1079
diff changeset
455 if fpath == '':
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1079
diff changeset
456 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
457 else:
9a7e3dbd0f6e layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents: 1079
diff changeset
458 ln = self.localname(p)
519
247110c633f7 maps: TagMap tags are non-empty strings
Patrick Mezard <pmezard@gmail.com>
parents: 517
diff changeset
459 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
460 changeid = self.tags[src_tag]
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
461 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
462 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
463 return {}
343da842dbe6 split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 413
diff changeset
464
950
a80b01ceb1fc editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents: 888
diff changeset
465 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
466 if path is None:
6eb691a163cd hg_delta_editor: stop using foobaz as a bogus filename.
Augie Fackler <durin42@gmail.com>
parents: 214
diff changeset
467 return False
950
a80b01ceb1fc editor: relax copyfrom dir checks to avoid extra missing entries
Patrick Mezard <patrick@mezard.eu>
parents: 888
diff changeset
468 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
469 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
470 return False
409
d4615986e1db extract the filemap support into a separate class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 408
diff changeset
471 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
472
584
d000b9a361e4 svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents: 575
diff changeset
473 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
474 """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
475 (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
476
d000b9a361e4 svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents: 575
diff changeset
477 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
478 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
479 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
480 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
481 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
482 """
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
483 if (number, branch) in self.revmap:
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
484 return number, branch
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
485 real_num = 0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
486 for num, br in self.revmap.iterkeys():
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
487 if br != branch:
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
488 continue
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
489 if num <= number and num > real_num:
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
490 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
491 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
492 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
493 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
494 # 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
495 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
496 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
497 # 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
498 # 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
499 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
500 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
501 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
502 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
503 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
504 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
505 # 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
506 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
507 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
508 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
509 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
510 parent_branch_rev, parent_branch)
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
511 if real_num != 0:
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
512 return real_num, branch
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
513 return None, None
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
514
584
d000b9a361e4 svnmeta: add exact arg to get_parent_revision() to handle 'R'
Patrick Mezard <pmezard@gmail.com>
parents: 575
diff changeset
515 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
516 '''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
517 '''
517
ef288fb7f2fe svnmeta: is_path_tag() is really get_path_tag()
Patrick Mezard <pmezard@gmail.com>
parents: 499
diff changeset
518 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
519 if tag:
537
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
520 # Reference a tag being created
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
521 if tag in self.addedtags:
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
522 tbranch, trev = self.addedtags[tag]
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
523 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
524 if not fromtag:
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
525 # 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
526 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
527 return node.hex(self.revmap[tagged])
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
528 tag = fromtag
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
529 # 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
530 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
531 if tag in limitedtags:
537
3c8b86949072 svnmeta: make get_parent_revision() handle added tags
Patrick Mezard <pmezard@gmail.com>
parents: 536
diff changeset
532 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
533 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
534 if r is not None:
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
535 return self.revmap[r, br]
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
536 return revlog.nullid
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
537
534
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
538 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
539 """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
540 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
541 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
542
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
543 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
544 """
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
545 if ctx is None:
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
546 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
547 extra = ctx.extra()
eea224fa1156 svnmeta: improve error message in get_source_rev()
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 594
diff changeset
548 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
549 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
550 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
551 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
552 if branchpath and branchpath[0] == '/':
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
553 branchpath = branchpath[1:]
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
554 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
555
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
556 def update_branch_tag_map_for_rev(self, revision):
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
557 """Given a revision object, determine changes to branches.
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
558
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
559 Returns: a dict of {
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
560 'branches': (added_branches, self.closebranches),
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
561 } 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
562 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
563 sets of the deleted branches.
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 474
diff changeset
564 """
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
565 paths = revision.paths
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
566 added_branches = {}
538
93bb37e38675 svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents: 537
diff changeset
567 # 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
568 # 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
569 # use them.
93bb37e38675 svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents: 537
diff changeset
570 self.addedtags, self.deletedtags = {}, {}
93bb37e38675 svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents: 537
diff changeset
571 addedtags, deletedtags = {}, {}
414
343da842dbe6 split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 413
diff changeset
572 self.closebranches = set()
131
4d42dbbb5127 hg_delta_editor: fix parent revision detection on branch copy
Patrick Mezard <pmezard@gmail.com>
parents: 124
diff changeset
573 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
574 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
575 if t_name:
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
576 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
577 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
578 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
579 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
580 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
581 continue
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
582 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
583 # Ignore copies from unknown tags
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
584 continue
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
585 if not file:
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
586 # Direct branch or tag copy
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
587 if from_tag:
534
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
588 changeid = self.tags[from_tag]
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
589 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
590 if t_name not in addedtags:
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
591 addedtags[t_name] = branch, src_rev
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
592 else:
36eb608b831b svnmeta: make tag detection code more explicity
Patrick Mezard <pmezard@gmail.com>
parents: 538
diff changeset
593 # Subbranch or subtag copy
381
a441ba143ac8 tags: fix handling for certain nonstandard tag layouts.
Augie Fackler <durin42@gmail.com>
parents: 380
diff changeset
594 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
595 found = t_name in addedtags
93bb37e38675 svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents: 537
diff changeset
596 if found and src_rev > addedtags[t_name][1]:
545
ebd8fb1a05e4 clean up trailing whitespace
Augie Fackler <durin42@gmail.com>
parents: 540
diff changeset
597 addedtags[t_name] = branch, src_rev
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
598 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
599 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
600 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
601 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
602 continue
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
603
312
4dc197f533c1 hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents: 290
diff changeset
604 # 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
605 # 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
606 # 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
607 # checks:
4dc197f533c1 hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents: 290
diff changeset
608 # 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
609 # 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
610 # interesting.
952
9c3b4f59e7e6 stupid: do not close branch upon branch-wide revert
Patrick Mezard <patrick@mezard.eu>
parents: 950
diff changeset
611 # 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
612 # 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
613 # 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
614 # 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
615 # 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
616 # 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
617 # 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
618 # 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
619 # (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
620 # 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
621 # we do nothing here.
4dc197f533c1 hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents: 290
diff changeset
622 # 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
623 # 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
624 # 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
625 # 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
626 # 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
627 # directory - the action will be 'R'.
540
8dc759dc9ca9 svnmeta: remove split_branch_tag() exacttag argument
Patrick Mezard <pmezard@gmail.com>
parents: 539
diff changeset
628 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
629 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
630 if fi == '':
907c160c6289 Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents: 198
diff changeset
631 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
632 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
633 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
634 # 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
635 # 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
636 # 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
637 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
638 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
639 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
640 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
641 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
642 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
643 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
644 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
645 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
646 continue
312
4dc197f533c1 hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents: 290
diff changeset
647 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
648 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
649 revision.revnum)
4dc197f533c1 hg_delta_editor: reformat huge comment, rename __determine_parent_branch()
Patrick Mezard <pmezard@gmail.com>
parents: 290
diff changeset
650 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
651 continue # case 1
907c160c6289 Refactor branch handling to be much more dynamic (and hopefully robust).
Augie Fackler <durin42@gmail.com>
parents: 198
diff changeset
652 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
653 for known in self.branches:
417
8630d1ebcdb9 svnmeta: deprivatize a bunch of member functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
654 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
655 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
656 parent = self._determine_parent_branch(
724
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
657 p, paths[p].copyfrom_path, paths[p].copyfrom_rev,
cacaf69912ac fix some line lengths
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 701
diff changeset
658 revision.revnum)
313
942f198b8ff5 hg_delta_editor: detect new branches issued from non-branch directories
Patrick Mezard <pmezard@gmail.com>
parents: 312
diff changeset
659 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
660 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
661 if (bpath is not None
cc7a10efddc9 Fix a bug in branch ancestry calculation.
Augie Fackler <durin42@gmail.com>
parents: 350
diff changeset
662 and branch not in self.branches
cc7a10efddc9 Fix a bug in branch ancestry calculation.
Augie Fackler <durin42@gmail.com>
parents: 350
diff changeset
663 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
664 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
665 elif bpath is None:
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
666 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
667 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
668 parent = {}
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
669 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
670 rn = self.remotename(br)
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
671 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
672 bname = posixpath.basename(rn)
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
673 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
674 parent.update(
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
675 self._determine_parent_branch(
d17cec76e769 replay: correctly handle renaming the parent dir of a branch
Augie Fackler <durin42@gmail.com>
parents: 547
diff changeset
676 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
677 added_branches.update(parent)
538
93bb37e38675 svnmeta: do not change added/deletedtags while detecting them
Patrick Mezard <pmezard@gmail.com>
parents: 537
diff changeset
678 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
679 return {
414
343da842dbe6 split parts of HgChangeReceiver out into an SVNMeta class
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 413
diff changeset
680 '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
681 }
ce64d57172a3 Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 365
diff changeset
682
ce64d57172a3 Generate separate data structure containing revision's tags/branches changes.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 365
diff changeset
683 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
684 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
685 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
686 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
687 self.branches.update(tbdelta['branches'][0])
0
f2636cfed115 Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
688
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
689 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
690 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
691 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
692
a400f3bf5611 replay/stupid: fix tagging on a branch renamed using a branch map
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 632
diff changeset
693 # 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
694 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
695 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
696 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
697 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
698
832
e9af7eba88db globally: clean up whitespace around operators and commas to conform with PEP8
Yonggang Luo <luoyonggang@gmail.com>
parents: 831
diff changeset
699 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
700 if '.hgtags' in parentctx:
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
701 tagdata = parentctx.filectx('.hgtags').data()
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
702 else:
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
703 tagdata = ''
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
704 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
705 def hgtagsfn(repo, memctx, path):
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
706 assert path == '.hgtags'
1219
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
707 return compathacks.makememfilectx(repo,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
708 path=path,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
709 data=tagdata,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
710 islink=False,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
711 isexec=False,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
712 copied=False)
534
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
713 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
714 newparent = None
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
715 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
716 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
717 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
718 newparent = child
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
719 if newparent:
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
720 parentctx = newparent
534
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
721 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
722 ctx = context.memctx(self.repo,
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
723 (parentctx.node(), node.nullid),
1284
6d6345604772 svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents: 1283
diff changeset
724 self.getmessage(rev),
447
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
725 ['.hgtags', ],
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
726 hgtagsfn,
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
727 self.authors[rev.author],
0d3b5acb1d51 tags: handle edits to tags as gracefully as possible
Augie Fackler <durin42@gmail.com>
parents: 423
diff changeset
728 date,
534
e38f110e7088 svnmeta: make it easier to get converted revision info
Patrick Mezard <pmezard@gmail.com>
parents: 533
diff changeset
729 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
730 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
731 if not newparent:
ae35c389cdef tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents: 451
diff changeset
732 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
733 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
734 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
735 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
736
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
737 def committags(self, rev, endbranches):
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
738 if not self.addedtags and not self.deletedtags:
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
739 return
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
740 date = self.fixdate(rev.date)
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
741 # determine additions/deletions per branch
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
742 branches = {}
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
743 for tags in (self.addedtags, self.deletedtags):
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
744 for tag, (branch, srcrev) in tags.iteritems():
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
745 op = srcrev is None and 'rm' or 'add'
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 519
diff changeset
746 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
747
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
748 for b, tags in branches.iteritems():
726
8d36054b04ed keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 724
diff changeset
749
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
750 # modify parent's .hgtags source
726
8d36054b04ed keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 724
diff changeset
751
389
a8811c84e3ee tags: Fix an improper parent calculation.
Augie Fackler <durin42@gmail.com>
parents: 386
diff changeset
752 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
753 if '.hgtags' not in parent:
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
754 src = ''
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
755 else:
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
756 src = parent['.hgtags'].data()
726
8d36054b04ed keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 724
diff changeset
757
8d36054b04ed keep variables more local, add some whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 724
diff changeset
758 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
759 for op, tag, r in sorted(tags, reverse=True):
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
760
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
761 if tag in self.tagmap and not self.tagmap[tag]:
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
762 continue
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
763
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
764 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
765 if op == 'add':
451
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
766 if fromtag:
455
54e57da61c1a This patch fixes, partially, an issue with tagpaths.
Michael J. Pedersen <mpedersen@datapipe.com>
parents: 452
diff changeset
767 if fromtag in self.tags:
54e57da61c1a This patch fixes, partially, an issue with tagpaths.
Michael J. Pedersen <mpedersen@datapipe.com>
parents: 452
diff changeset
768 tagged = node.hex(self.tags[fromtag])
451
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
769 else:
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
770 tagged = node.hex(self.revmap[
575
c278a225b750 svnmeta: reverse parameter calculation to lessen complexity
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 574
diff changeset
771 self.get_parent_svn_branch_and_rev(r, b)])
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
772
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 728
diff changeset
773 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
774 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
775
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
776 # add new changeset containing updated .hgtags
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
777 def fctxfun(repo, memctx, path):
1219
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
778 return compathacks.makememfilectx(repo,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
779 path='.hgtags',
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
780 data=src,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
781 islink=False,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
782 isexec=False,
656718fdd3be svnmeta: call makememfilectx
Sean Farley <sean.michael.farley@gmail.com>
parents: 1099
diff changeset
783 copied=None)
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
784
422
6086363e8230 svnmeta: move util.build_extra() to SVNMeta.genextra()
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 421
diff changeset
785 extra = self.genextra(rev.revnum, b)
451
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
786 if fromtag:
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
787 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
788 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
789
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
790 ctx = context.memctx(self.repo,
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
791 (parent.node(), node.nullid),
1284
6d6345604772 svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents: 1283
diff changeset
792 self.getmessage(rev),
376
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
793 ['.hgtags'],
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
794 fctxfun,
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
795 self.authors[rev.author],
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
796 date,
9327e9325645 Use tbdelta to push added tags into .hgtags.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 375
diff changeset
797 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
798 new = self.repo.svn_commitctx(ctx)
451
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
799
e533e78f1b2f tags: handle tags from edited tags.
Augie Fackler <durin42@gmail.com>
parents: 450
diff changeset
800 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
801 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
802 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
803 endbranches.pop(b)
94f7e8c53c36 tags: end branch while tagging instead of creating extra changeset
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 398
diff changeset
804 bname = b or 'default'
94f7e8c53c36 tags: end branch while tagging instead of creating extra changeset
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 398
diff changeset
805 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
806
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
807 def delbranch(self, branch, node, rev):
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
808 pctx = self.repo[node]
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
809 files = pctx.manifest().keys()
423
021bdbf391bb put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 422
diff changeset
810 extra = self.genextra(rev.revnum, branch)
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 551
diff changeset
811 self.mapbranch(extra, True)
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
812 ctx = context.memctx(self.repo,
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
813 (node, revlog.nullid),
1284
6d6345604772 svnmeta: call self.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents: 1283
diff changeset
814 self.getmessage(rev),
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
815 [],
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
816 lambda x, y, z: None,
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
817 self.authors[rev.author],
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
818 self.fixdate(rev.date),
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
819 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
820 new = self.repo.svn_commitctx(ctx)
413
ac0cc3c9ea63 sort HgChangeReceiver methods and properties
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 411
diff changeset
821 self.ui.status('Marked branch %s as closed.\n' % (branch or 'default'))