Show More
@@ -117,22 +117,10 b' def lfconvert(ui, src, dest, *pats, **op' | |||||
117 |
|
117 | |||
118 | def _addchangeset(ui, rsrc, rdst, ctx, revmap): |
|
118 | def _addchangeset(ui, rsrc, rdst, ctx, revmap): | |
119 | # Convert src parents to dst parents |
|
119 | # Convert src parents to dst parents | |
120 | parents = [] |
|
120 | parents = _convertparents(ctx, revmap) | |
121 | for p in ctx.parents(): |
|
|||
122 | parents.append(revmap[p.node()]) |
|
|||
123 | while len(parents) < 2: |
|
|||
124 | parents.append(node.nullid) |
|
|||
125 |
|
121 | |||
126 | # Generate list of changed files |
|
122 | # Generate list of changed files | |
127 |
files = |
|
123 | files = _getchangedfiles(ctx, parents) | |
128 | if node.nullid not in parents: |
|
|||
129 | mc = ctx.manifest() |
|
|||
130 | mp1 = ctx.parents()[0].manifest() |
|
|||
131 | mp2 = ctx.parents()[1].manifest() |
|
|||
132 | files |= (set(mp1) | set(mp2)) - set(mc) |
|
|||
133 | for f in mc: |
|
|||
134 | if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, None): |
|
|||
135 | files.add(f) |
|
|||
136 |
|
124 | |||
137 | def getfilectx(repo, memctx, f): |
|
125 | def getfilectx(repo, memctx, f): | |
138 | if lfutil.standin(f) in files: |
|
126 | if lfutil.standin(f) in files: | |
@@ -160,23 +148,7 b' def _addchangeset(ui, rsrc, rdst, ctx, r' | |||||
160 | return context.memfilectx(f, data, 'l' in fctx.flags(), |
|
148 | return context.memfilectx(f, data, 'l' in fctx.flags(), | |
161 | 'x' in fctx.flags(), renamed) |
|
149 | 'x' in fctx.flags(), renamed) | |
162 | else: |
|
150 | else: | |
163 | try: |
|
151 | return _getnormalcontext(repo.ui, ctx, f, revmap) | |
164 | fctx = ctx.filectx(f) |
|
|||
165 | except error.LookupError: |
|
|||
166 | raise IOError() |
|
|||
167 | renamed = fctx.renamed() |
|
|||
168 | if renamed: |
|
|||
169 | renamed = renamed[0] |
|
|||
170 | data = fctx.data() |
|
|||
171 | if f == '.hgtags': |
|
|||
172 | newdata = [] |
|
|||
173 | for line in data.splitlines(): |
|
|||
174 | id, name = line.split(' ', 1) |
|
|||
175 | newdata.append('%s %s\n' % (node.hex(revmap[node.bin(id)]), |
|
|||
176 | name)) |
|
|||
177 | data = ''.join(newdata) |
|
|||
178 | return context.memfilectx(f, data, 'l' in fctx.flags(), |
|
|||
179 | 'x' in fctx.flags(), renamed) |
|
|||
180 |
|
152 | |||
181 | dstfiles = [] |
|
153 | dstfiles = [] | |
182 | for file in files: |
|
154 | for file in files: | |
@@ -185,31 +157,15 b' def _addchangeset(ui, rsrc, rdst, ctx, r' | |||||
185 | else: |
|
157 | else: | |
186 | dstfiles.append(file) |
|
158 | dstfiles.append(file) | |
187 | # Commit |
|
159 | # Commit | |
188 |
|
|
160 | _commitcontext(rdst, parents, ctx, dstfiles, getfilectx, revmap) | |
189 | getfilectx, ctx.user(), ctx.date(), ctx.extra()) |
|
|||
190 | ret = rdst.commitctx(mctx) |
|
|||
191 | rdst.dirstate.setparents(ret) |
|
|||
192 | revmap[ctx.node()] = rdst.changelog.tip() |
|
|||
193 |
|
161 | |||
194 | def _lfconvert_addchangeset(rsrc, rdst, ctx, revmap, lfiles, normalfiles, |
|
162 | def _lfconvert_addchangeset(rsrc, rdst, ctx, revmap, lfiles, normalfiles, | |
195 | matcher, size, lfiletohash): |
|
163 | matcher, size, lfiletohash): | |
196 | # Convert src parents to dst parents |
|
164 | # Convert src parents to dst parents | |
197 | parents = [] |
|
165 | parents = _convertparents(ctx, revmap) | |
198 | for p in ctx.parents(): |
|
|||
199 | parents.append(revmap[p.node()]) |
|
|||
200 | while len(parents) < 2: |
|
|||
201 | parents.append(node.nullid) |
|
|||
202 |
|
166 | |||
203 | # Generate list of changed files |
|
167 | # Generate list of changed files | |
204 |
files = |
|
168 | files = _getchangedfiles(ctx, parents) | |
205 | if node.nullid not in parents: |
|
|||
206 | mc = ctx.manifest() |
|
|||
207 | mp1 = ctx.parents()[0].manifest() |
|
|||
208 | mp2 = ctx.parents()[1].manifest() |
|
|||
209 | files |= (set(mp1) | set(mp2)) - set(mc) |
|
|||
210 | for f in mc: |
|
|||
211 | if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, None): |
|
|||
212 | files.add(f) |
|
|||
213 |
|
169 | |||
214 | dstfiles = [] |
|
170 | dstfiles = [] | |
215 | for f in files: |
|
171 | for f in files: | |
@@ -283,47 +239,80 b' def _lfconvert_addchangeset(rsrc, rdst, ' | |||||
283 | return context.memfilectx(f, lfiletohash[srcfname] + '\n', 'l' in |
|
239 | return context.memfilectx(f, lfiletohash[srcfname] + '\n', 'l' in | |
284 | fctx.flags(), 'x' in fctx.flags(), renamed) |
|
240 | fctx.flags(), 'x' in fctx.flags(), renamed) | |
285 | else: |
|
241 | else: | |
286 | try: |
|
242 | return _getnormalcontext(repo.ui, ctx, f, revmap) | |
287 | fctx = ctx.filectx(f) |
|
|||
288 | except error.LookupError: |
|
|||
289 | raise IOError() |
|
|||
290 | renamed = fctx.renamed() |
|
|||
291 | if renamed: |
|
|||
292 | renamed = renamed[0] |
|
|||
293 |
|
||||
294 | data = fctx.data() |
|
|||
295 | if f == '.hgtags': |
|
|||
296 | newdata = [] |
|
|||
297 | for line in data.splitlines(): |
|
|||
298 | try: |
|
|||
299 | id, name = line.split(' ', 1) |
|
|||
300 | except ValueError: |
|
|||
301 | repo.ui.warn(_('skipping incorrectly formatted tag %s\n' |
|
|||
302 | % line)) |
|
|||
303 | continue |
|
|||
304 | try: |
|
|||
305 | newid = node.bin(id) |
|
|||
306 | except TypeError: |
|
|||
307 | repo.ui.warn(_('skipping incorrectly formatted id %s\n' |
|
|||
308 | % id)) |
|
|||
309 | continue |
|
|||
310 | try: |
|
|||
311 | newdata.append('%s %s\n' % (node.hex(revmap[newid]), |
|
|||
312 | name)) |
|
|||
313 | except KeyError: |
|
|||
314 | repo.ui.warn(_('no mapping for id %s\n' % id)) |
|
|||
315 | continue |
|
|||
316 | data = ''.join(newdata) |
|
|||
317 | return context.memfilectx(f, data, 'l' in fctx.flags(), |
|
|||
318 | 'x' in fctx.flags(), renamed) |
|
|||
319 |
|
243 | |||
320 | # Commit |
|
244 | # Commit | |
|
245 | _commitcontext(rdst, parents, ctx, dstfiles, getfilectx, revmap) | |||
|
246 | ||||
|
247 | def _commitcontext(rdst, parents, ctx, dstfiles, getfilectx, revmap): | |||
321 | mctx = context.memctx(rdst, parents, ctx.description(), dstfiles, |
|
248 | mctx = context.memctx(rdst, parents, ctx.description(), dstfiles, | |
322 | getfilectx, ctx.user(), ctx.date(), ctx.extra()) |
|
249 | getfilectx, ctx.user(), ctx.date(), ctx.extra()) | |
323 | ret = rdst.commitctx(mctx) |
|
250 | ret = rdst.commitctx(mctx) | |
324 | rdst.dirstate.setparents(ret) |
|
251 | rdst.dirstate.setparents(ret) | |
325 | revmap[ctx.node()] = rdst.changelog.tip() |
|
252 | revmap[ctx.node()] = rdst.changelog.tip() | |
326 |
|
253 | |||
|
254 | # Generate list of changed files | |||
|
255 | def _getchangedfiles(ctx, parents): | |||
|
256 | files = set(ctx.files()) | |||
|
257 | if node.nullid not in parents: | |||
|
258 | mc = ctx.manifest() | |||
|
259 | mp1 = ctx.parents()[0].manifest() | |||
|
260 | mp2 = ctx.parents()[1].manifest() | |||
|
261 | files |= (set(mp1) | set(mp2)) - set(mc) | |||
|
262 | for f in mc: | |||
|
263 | if mc[f] != mp1.get(f, None) or mc[f] != mp2.get(f, None): | |||
|
264 | files.add(f) | |||
|
265 | return files | |||
|
266 | ||||
|
267 | # Convert src parents to dst parents | |||
|
268 | def _convertparents(ctx, revmap): | |||
|
269 | parents = [] | |||
|
270 | for p in ctx.parents(): | |||
|
271 | parents.append(revmap[p.node()]) | |||
|
272 | while len(parents) < 2: | |||
|
273 | parents.append(node.nullid) | |||
|
274 | return parents | |||
|
275 | ||||
|
276 | # Get memfilectx for a normal file | |||
|
277 | def _getnormalcontext(ui, ctx, f, revmap): | |||
|
278 | try: | |||
|
279 | fctx = ctx.filectx(f) | |||
|
280 | except error.LookupError: | |||
|
281 | raise IOError() | |||
|
282 | renamed = fctx.renamed() | |||
|
283 | if renamed: | |||
|
284 | renamed = renamed[0] | |||
|
285 | ||||
|
286 | data = fctx.data() | |||
|
287 | if f == '.hgtags': | |||
|
288 | data = _converttags (ui, revmap, data) | |||
|
289 | return context.memfilectx(f, data, 'l' in fctx.flags(), | |||
|
290 | 'x' in fctx.flags(), renamed) | |||
|
291 | ||||
|
292 | # Remap tag data using a revision map | |||
|
293 | def _converttags(ui, revmap, data): | |||
|
294 | newdata = [] | |||
|
295 | for line in data.splitlines(): | |||
|
296 | try: | |||
|
297 | id, name = line.split(' ', 1) | |||
|
298 | except ValueError: | |||
|
299 | ui.warn(_('skipping incorrectly formatted tag %s\n' | |||
|
300 | % line)) | |||
|
301 | continue | |||
|
302 | try: | |||
|
303 | newid = node.bin(id) | |||
|
304 | except TypeError: | |||
|
305 | ui.warn(_('skipping incorrectly formatted id %s\n' | |||
|
306 | % id)) | |||
|
307 | continue | |||
|
308 | try: | |||
|
309 | newdata.append('%s %s\n' % (node.hex(revmap[newid]), | |||
|
310 | name)) | |||
|
311 | except KeyError: | |||
|
312 | ui.warn(_('no mapping for id %s\n' % id)) | |||
|
313 | continue | |||
|
314 | return ''.join(newdata) | |||
|
315 | ||||
327 | def _islfile(file, ctx, matcher, size): |
|
316 | def _islfile(file, ctx, matcher, size): | |
328 | '''Return true if file should be considered a largefile, i.e. |
|
317 | '''Return true if file should be considered a largefile, i.e. | |
329 | matcher matches it or it is larger than size.''' |
|
318 | matcher matches it or it is larger than size.''' |
General Comments 0
You need to be logged in to leave comments.
Login now