Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 14398:ae1f7a5373e8
applyupdates: audit unlinking of renamed files and directories
author | Adrian Buehlmann <adrian@cadifra.com> |
---|---|
date | Sat, 21 May 2011 02:05:00 +0200 |
parents | df2399663392 |
children | f2295a829f47 |
comparison
equal
deleted
inserted
replaced
14397:0368ad7963be | 14398:ae1f7a5373e8 |
---|---|
294 fca = repo.filectx(f, fileid=nullrev) | 294 fca = repo.filectx(f, fileid=nullrev) |
295 ms.add(fcl, fco, fca, fd, flags) | 295 ms.add(fcl, fco, fca, fd, flags) |
296 if f != fd and move: | 296 if f != fd and move: |
297 moves.append(f) | 297 moves.append(f) |
298 | 298 |
299 audit = scmutil.pathauditor(repo.root) | |
300 | |
299 # remove renamed files after safely stored | 301 # remove renamed files after safely stored |
300 for f in moves: | 302 for f in moves: |
301 if os.path.lexists(repo.wjoin(f)): | 303 if os.path.lexists(repo.wjoin(f)): |
302 repo.ui.debug("removing %s\n" % f) | 304 repo.ui.debug("removing %s\n" % f) |
305 audit(f) | |
303 os.unlink(repo.wjoin(f)) | 306 os.unlink(repo.wjoin(f)) |
304 | |
305 audit_path = scmutil.pathauditor(repo.root) | |
306 | 307 |
307 numupdates = len(action) | 308 numupdates = len(action) |
308 for i, a in enumerate(action): | 309 for i, a in enumerate(action): |
309 f, m = a[:2] | 310 f, m = a[:2] |
310 u.progress(_('updating'), i + 1, item=f, total=numupdates, | 311 u.progress(_('updating'), i + 1, item=f, total=numupdates, |
311 unit=_('files')) | 312 unit=_('files')) |
312 if f and f[0] == "/": | 313 if f and f[0] == "/": |
313 continue | 314 continue |
314 if m == "r": # remove | 315 if m == "r": # remove |
315 repo.ui.note(_("removing %s\n") % f) | 316 repo.ui.note(_("removing %s\n") % f) |
316 audit_path(f) | 317 audit(f) |
317 if f == '.hgsubstate': # subrepo states need updating | 318 if f == '.hgsubstate': # subrepo states need updating |
318 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) | 319 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) |
319 try: | 320 try: |
320 util.unlinkpath(repo.wjoin(f)) | 321 util.unlinkpath(repo.wjoin(f)) |
321 except OSError, inst: | 322 except OSError, inst: |
338 merged += 1 | 339 merged += 1 |
339 util.setflags(repo.wjoin(fd), 'l' in flags, 'x' in flags) | 340 util.setflags(repo.wjoin(fd), 'l' in flags, 'x' in flags) |
340 if (move and repo.dirstate.normalize(fd) != f | 341 if (move and repo.dirstate.normalize(fd) != f |
341 and os.path.lexists(repo.wjoin(f))): | 342 and os.path.lexists(repo.wjoin(f))): |
342 repo.ui.debug("removing %s\n" % f) | 343 repo.ui.debug("removing %s\n" % f) |
344 audit(f) | |
343 os.unlink(repo.wjoin(f)) | 345 os.unlink(repo.wjoin(f)) |
344 elif m == "g": # get | 346 elif m == "g": # get |
345 flags = a[2] | 347 flags = a[2] |
346 repo.ui.note(_("getting %s\n") % f) | 348 repo.ui.note(_("getting %s\n") % f) |
347 t = mctx.filectx(f).data() | 349 t = mctx.filectx(f).data() |
352 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) | 354 subrepo.submerge(repo, wctx, mctx, wctx, overwrite) |
353 elif m == "d": # directory rename | 355 elif m == "d": # directory rename |
354 f2, fd, flags = a[2:] | 356 f2, fd, flags = a[2:] |
355 if f: | 357 if f: |
356 repo.ui.note(_("moving %s to %s\n") % (f, fd)) | 358 repo.ui.note(_("moving %s to %s\n") % (f, fd)) |
359 audit(f) | |
357 t = wctx.filectx(f).data() | 360 t = wctx.filectx(f).data() |
358 repo.wwrite(fd, t, flags) | 361 repo.wwrite(fd, t, flags) |
359 util.unlinkpath(repo.wjoin(f)) | 362 util.unlinkpath(repo.wjoin(f)) |
360 if f2: | 363 if f2: |
361 repo.ui.note(_("getting %s to %s\n") % (f2, fd)) | 364 repo.ui.note(_("getting %s to %s\n") % (f2, fd)) |