# HG changeset patch # User Alexis S. L. Carvalho # Date 1203019696 7200 # Node ID 242595e612eda1a3e67e0a436e532051188d12e1 # Parent 5086576a2152d042f12a7a28f6333a4260a9fefd revert: unify forget and remove lists This doesn't make a difference right now, but after the next revision some files in state 'a' may end up in the deleted list, and revert won't be able to just remove all files in that list. diff -r 5086576a2152 -r 242595e612ed mercurial/commands.py --- a/mercurial/commands.py Thu Feb 14 18:08:16 2008 -0200 +++ b/mercurial/commands.py Thu Feb 14 18:08:16 2008 -0200 @@ -2246,10 +2246,14 @@ removed[src] = None names[src] = (repo.pathto(src, cwd), True) + def removeforget(abs): + if repo.dirstate[abs] == 'a': + return _('forgetting %s\n') + return _('removing %s\n') + revert = ([], _('reverting %s\n')) add = ([], _('adding %s\n')) - remove = ([], _('removing %s\n')) - forget = ([], _('forgetting %s\n')) + remove = ([], removeforget) undelete = ([], _('undeleting %s\n')) disptable = ( @@ -2260,7 +2264,7 @@ # make backup if in target manifest # make backup if not in target manifest (modified, revert, remove, True, True), - (added, revert, forget, True, False), + (added, revert, remove, True, False), (removed, undelete, None, False, False), (deleted, revert, remove, False, False), ) @@ -2280,7 +2284,10 @@ if not opts.get('dry_run'): util.copyfile(target, bakname) if ui.verbose or not exact: - ui.status(xlist[1] % rel) + msg = xlist[1] + if not isinstance(msg, basestring): + msg = msg(abs) + ui.status(msg % rel) for table, hitlist, misslist, backuphit, backupmiss in disptable: if abs not in table: continue # file has changed in dirstate @@ -2319,8 +2326,17 @@ fc = ctx[f] repo.wwrite(f, fc.data(), fc.fileflags()) - for f in forget[0]: - repo.dirstate.forget(f) + audit_path = util.path_auditor(repo.root) + for f in remove[0]: + if repo.dirstate[f] == 'a': + repo.dirstate.forget(f) + continue + audit_path(f) + try: + util.unlink(repo.wjoin(f)) + except OSError: + pass + repo.dirstate.remove(f) for f in revert[0]: checkout(f) @@ -2336,14 +2352,6 @@ checkout(f) normal(f) - audit_path = util.path_auditor(repo.root) - for f in remove[0]: - audit_path(f) - try: - util.unlink(repo.wjoin(f)) - except OSError: - pass - repo.dirstate.remove(f) finally: del wlock diff -r 5086576a2152 -r 242595e612ed tests/test-revert --- a/tests/test-revert Thu Feb 14 18:08:16 2008 -0200 +++ b/tests/test-revert Thu Feb 14 18:08:16 2008 -0200 @@ -28,7 +28,16 @@ hg revert --no-backup c echo %% should show unknown: b hg status -echo %% should show a b c e +hg add b +echo %% should show b added +hg status b +rm b +echo %% should show b added +hg status b +hg revert -v b +echo %% should not find b +hg status b +echo %% should show a c e ls echo %% should verbosely save backup to e.orig echo z > e diff -r 5086576a2152 -r 242595e612ed tests/test-revert.out --- a/tests/test-revert.out Thu Feb 14 18:08:16 2008 -0200 +++ b/tests/test-revert.out Thu Feb 14 18:08:16 2008 -0200 @@ -18,9 +18,15 @@ ? b %% should show unknown: b ? b -%% should show a b c e +%% should show b added +A b +%% should show b added +A b +forgetting b +%% should not find b +b: No such file or directory +%% should show a c e a -b c e %% should verbosely save backup to e.orig @@ -33,7 +39,6 @@ %% should say file not found notfound: No such file in rev 095eacd0c0d7 A z -? b ? e.orig %% should add a, remove d, forget z adding a