Show More
@@ -685,7 +685,7 b' class queue(object):' | |||
|
685 | 685 | p1, p2 = repo.dirstate.parents() |
|
686 | 686 | repo.dirstate.setparents(p1, merge) |
|
687 | 687 | |
|
688 |
files = |
|
|
688 | files = cmdutil.updatedir(self.ui, repo, files) | |
|
689 | 689 | match = cmdutil.matchfiles(repo, files or []) |
|
690 | 690 | n = repo.commit(message, ph.user, ph.date, match=match, force=True) |
|
691 | 691 | |
@@ -2134,7 +2134,7 b' def fold(ui, repo, *files, **opts):' | |||
|
2134 | 2134 | (patchsuccess, files, fuzz) = q.patch(repo, pf) |
|
2135 | 2135 | if not patchsuccess: |
|
2136 | 2136 | raise util.Abort(_('error folding patch %s') % p) |
|
2137 |
|
|
|
2137 | cmdutil.updatedir(ui, repo, files) | |
|
2138 | 2138 | |
|
2139 | 2139 | if not message: |
|
2140 | 2140 | ph = patchheader(q.join(parent), q.plainmode) |
@@ -497,7 +497,7 b' def dorecord(ui, repo, commitfunc, *pats' | |||
|
497 | 497 | pfiles = {} |
|
498 | 498 | patch.internalpatch(fp, ui, 1, repo.root, files=pfiles, |
|
499 | 499 | eolmode=None) |
|
500 |
|
|
|
500 | cmdutil.updatedir(ui, repo, pfiles) | |
|
501 | 501 | except patch.PatchError, err: |
|
502 | 502 | s = str(err) |
|
503 | 503 | if s: |
@@ -225,7 +225,7 b' class transplanter(object):' | |||
|
225 | 225 | % revlog.hex(node)) |
|
226 | 226 | return None |
|
227 | 227 | finally: |
|
228 |
files = |
|
|
228 | files = cmdutil.updatedir(self.ui, repo, files) | |
|
229 | 229 | except Exception, inst: |
|
230 | 230 | seriespath = os.path.join(self.path, 'series') |
|
231 | 231 | if os.path.exists(seriespath): |
@@ -329,6 +329,49 b' def addremove(repo, pats=[], opts={}, dr' | |||
|
329 | 329 | finally: |
|
330 | 330 | wlock.release() |
|
331 | 331 | |
|
332 | def updatedir(ui, repo, patches, similarity=0): | |
|
333 | '''Update dirstate after patch application according to metadata''' | |
|
334 | if not patches: | |
|
335 | return | |
|
336 | copies = [] | |
|
337 | removes = set() | |
|
338 | cfiles = patches.keys() | |
|
339 | cwd = repo.getcwd() | |
|
340 | if cwd: | |
|
341 | cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()] | |
|
342 | for f in patches: | |
|
343 | gp = patches[f] | |
|
344 | if not gp: | |
|
345 | continue | |
|
346 | if gp.op == 'RENAME': | |
|
347 | copies.append((gp.oldpath, gp.path)) | |
|
348 | removes.add(gp.oldpath) | |
|
349 | elif gp.op == 'COPY': | |
|
350 | copies.append((gp.oldpath, gp.path)) | |
|
351 | elif gp.op == 'DELETE': | |
|
352 | removes.add(gp.path) | |
|
353 | ||
|
354 | wctx = repo[None] | |
|
355 | for src, dst in copies: | |
|
356 | wctx.copy(src, dst) | |
|
357 | if (not similarity) and removes: | |
|
358 | wctx.remove(sorted(removes), True) | |
|
359 | ||
|
360 | for f in patches: | |
|
361 | gp = patches[f] | |
|
362 | if gp and gp.mode: | |
|
363 | islink, isexec = gp.mode | |
|
364 | dst = repo.wjoin(gp.path) | |
|
365 | # patch won't create empty files | |
|
366 | if gp.op == 'ADD' and not os.path.exists(dst): | |
|
367 | flags = (isexec and 'x' or '') + (islink and 'l' or '') | |
|
368 | repo.wwrite(gp.path, '', flags) | |
|
369 | util.set_flags(dst, islink, isexec) | |
|
370 | addremove(repo, cfiles, similarity=similarity) | |
|
371 | files = patches.keys() | |
|
372 | files.extend([r for r in removes if r not in files]) | |
|
373 | return sorted(files) | |
|
374 | ||
|
332 | 375 | def copy(ui, repo, pats, opts, rename=False): |
|
333 | 376 | # called with the repo lock held |
|
334 | 377 | # |
@@ -2301,8 +2301,8 b' def import_(ui, repo, patch1, *patches, ' | |||
|
2301 | 2301 | patch.patch(tmpname, ui, strip=strip, cwd=repo.root, |
|
2302 | 2302 | files=files, eolmode=None) |
|
2303 | 2303 | finally: |
|
2304 |
files = |
|
|
2305 | similarity=sim / 100.0) | |
|
2304 | files = cmdutil.updatedir(ui, repo, files, | |
|
2305 | similarity=sim / 100.0) | |
|
2306 | 2306 | if not opts.get('no_commit'): |
|
2307 | 2307 | if opts.get('exact'): |
|
2308 | 2308 | m = None |
@@ -11,7 +11,7 b' import tempfile, zlib' | |||
|
11 | 11 | |
|
12 | 12 | from i18n import _ |
|
13 | 13 | from node import hex, nullid, short |
|
14 |
import base85 |
|
|
14 | import base85, mdiff, util, diffhelpers, copies, encoding | |
|
15 | 15 | |
|
16 | 16 | gitre = re.compile('diff --git a/(.*) b/(.*)') |
|
17 | 17 | |
@@ -444,8 +444,8 b' class patchfile(object):' | |||
|
444 | 444 | |
|
445 | 445 | def writelines(self, fname, lines): |
|
446 | 446 | # Ensure supplied data ends in fname, being a regular file or |
|
447 |
# a symlink. updatedir |
|
|
448 | # setting it to the proper type afterwards. | |
|
447 | # a symlink. cmdutil.updatedir will -too magically- take care | |
|
448 | # of setting it to the proper type afterwards. | |
|
449 | 449 | islink = os.path.islink(fname) |
|
450 | 450 | if islink: |
|
451 | 451 | fp = cStringIO.StringIO() |
@@ -1129,8 +1129,8 b' def applydiff(ui, fp, changed, strip=1, ' | |||
|
1129 | 1129 | read in binary mode. Otherwise, line endings are ignored when |
|
1130 | 1130 | patching then normalized according to 'eolmode'. |
|
1131 | 1131 | |
|
1132 |
Callers probably want to call 'updatedir' after this to |
|
|
1133 | certain categories of changes not done by this function. | |
|
1132 | Callers probably want to call 'cmdutil.updatedir' after this to | |
|
1133 | apply certain categories of changes not done by this function. | |
|
1134 | 1134 | """ |
|
1135 | 1135 | return _applydiff( |
|
1136 | 1136 | ui, fp, patchfile, copyfile, |
@@ -1196,49 +1196,6 b' def _applydiff(ui, fp, patcher, copyfn, ' | |||
|
1196 | 1196 | return -1 |
|
1197 | 1197 | return err |
|
1198 | 1198 | |
|
1199 | def updatedir(ui, repo, patches, similarity=0): | |
|
1200 | '''Update dirstate after patch application according to metadata''' | |
|
1201 | if not patches: | |
|
1202 | return | |
|
1203 | copies = [] | |
|
1204 | removes = set() | |
|
1205 | cfiles = patches.keys() | |
|
1206 | cwd = repo.getcwd() | |
|
1207 | if cwd: | |
|
1208 | cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()] | |
|
1209 | for f in patches: | |
|
1210 | gp = patches[f] | |
|
1211 | if not gp: | |
|
1212 | continue | |
|
1213 | if gp.op == 'RENAME': | |
|
1214 | copies.append((gp.oldpath, gp.path)) | |
|
1215 | removes.add(gp.oldpath) | |
|
1216 | elif gp.op == 'COPY': | |
|
1217 | copies.append((gp.oldpath, gp.path)) | |
|
1218 | elif gp.op == 'DELETE': | |
|
1219 | removes.add(gp.path) | |
|
1220 | ||
|
1221 | wctx = repo[None] | |
|
1222 | for src, dst in copies: | |
|
1223 | wctx.copy(src, dst) | |
|
1224 | if (not similarity) and removes: | |
|
1225 | wctx.remove(sorted(removes), True) | |
|
1226 | ||
|
1227 | for f in patches: | |
|
1228 | gp = patches[f] | |
|
1229 | if gp and gp.mode: | |
|
1230 | islink, isexec = gp.mode | |
|
1231 | dst = repo.wjoin(gp.path) | |
|
1232 | # patch won't create empty files | |
|
1233 | if gp.op == 'ADD' and not os.path.exists(dst): | |
|
1234 | flags = (isexec and 'x' or '') + (islink and 'l' or '') | |
|
1235 | repo.wwrite(gp.path, '', flags) | |
|
1236 | util.set_flags(dst, islink, isexec) | |
|
1237 | cmdutil.addremove(repo, cfiles, similarity=similarity) | |
|
1238 | files = patches.keys() | |
|
1239 | files.extend([r for r in removes if r not in files]) | |
|
1240 | return sorted(files) | |
|
1241 | ||
|
1242 | 1199 | def externalpatch(patcher, args, patchname, ui, strip, cwd, files): |
|
1243 | 1200 | """use <patcher> to apply <patchname> to the working directory. |
|
1244 | 1201 | returns whether patch was applied with fuzz factor.""" |
General Comments 0
You need to be logged in to leave comments.
Login now