# HG changeset patch # User Alexis S. L. Carvalho # Date 1202501275 7200 # Node ID 7383384793fbff4bb0ff643f15d0717975b6f87a # Parent d0dbae32517c04f402d29591ac9898c5454d9627 revert: don't assume ignored files will be returned in the unknown list That's just an artifact of the current implementation, and I'll change that soon. Bonus points: - we don't care about the unknown list at all - we don't print an extra message if we try to revert a removed file that is not present in the target revision diff -r d0dbae32517c -r 7383384793fb mercurial/commands.py --- a/mercurial/commands.py Fri Feb 08 18:07:55 2008 -0200 +++ b/mercurial/commands.py Fri Feb 08 18:07:55 2008 -0200 @@ -215,6 +215,7 @@ revert_opts['date'] = None revert_opts['all'] = True revert_opts['rev'] = hex(parent) + revert_opts['no_backup'] = None revert(ui, repo, **revert_opts) commit_opts = opts.copy() commit_opts['addremove'] = False @@ -2327,7 +2328,6 @@ # but not other. names = {} - target_only = {} wlock = repo.wlock() try: @@ -2335,8 +2335,6 @@ for src, abs, rel, exact in cmdutil.walk(repo, pats, opts, badmatch=mf.has_key): names[abs] = (rel, exact) - if src == 'b': - target_only[abs] = True # walk target manifest. @@ -2354,10 +2352,9 @@ if abs in names or src == 'b': continue names[abs] = (rel, exact) - target_only[abs] = True - - changes = repo.status(match=names.has_key)[:5] - modified, added, removed, deleted, unknown = map(dict.fromkeys, changes) + + changes = repo.status(match=names.has_key)[:4] + modified, added, removed, deleted = map(dict.fromkeys, changes) # if f is a rename, also revert the source cwd = repo.getcwd() @@ -2385,8 +2382,6 @@ (added, revert, forget, True, False), (removed, undelete, None, False, False), (deleted, revert, remove, False, False), - (unknown, add, None, True, False), - (target_only, add, None, False, False), ) entries = names.items() @@ -2413,10 +2408,14 @@ handle(hitlist, backuphit) elif misslist is not None: handle(misslist, backupmiss) - else: - if exact: ui.warn(_('file not managed: %s\n') % rel) break else: + if abs not in repo.dirstate: + if mfentry: + handle(add, True) + elif exact: + ui.warn(_('file not managed: %s\n') % rel) + continue # file has not changed in dirstate if node == parent: if exact: ui.warn(_('no changes needed to %s\n') % rel) diff -r d0dbae32517c -r 7383384793fb tests/test-revert --- a/tests/test-revert Fri Feb 08 18:07:55 2008 -0200 +++ b/tests/test-revert Fri Feb 08 18:07:55 2008 -0200 @@ -1,6 +1,7 @@ #!/bin/sh -hg init +hg init repo +cd repo echo 123 > a echo 123 > c echo 123 > e @@ -40,19 +41,26 @@ rm q echo %% should say file not found hg revert notfound +touch d +hg add d hg rm a hg commit -m "second" -d "1000000 0" echo z > z hg add z hg st -echo %% should add a, forget z +echo %% should add a, remove d, forget z hg revert --all -r0 -echo %% should forget a +echo %% should forget a, undelete d hg revert --all -rtip rm a *.orig echo %% should silently add a hg revert -r0 a hg st a +hg rm d +hg st d +echo %% should silently keep d removed +hg revert -r0 d +hg st d hg update -C chmod +x c @@ -68,6 +76,8 @@ echo %% should print executable test -x c && echo executable +cd .. + echo %% issue 241 hg init a cd a @@ -100,3 +110,33 @@ hg revert newa hg st a newa +cd .. + +hg init ignored +cd ignored +echo '^ignored$' > .hgignore +echo '^ignoreddir$' >> .hgignore +echo '^removed$' >> .hgignore + +mkdir ignoreddir +touch ignoreddir/file +touch ignoreddir/removed +touch ignored +touch removed +echo '%% 4 ignored files (we will add/commit everything)' +hg st -A -X .hgignore +hg ci -qAm 'add files' ignored ignoreddir/file ignoreddir/removed removed + +echo >> ignored +echo >> ignoreddir/file +hg rm removed ignoreddir/removed +echo '%% should revert ignored* and undelete *removed' +hg revert -a --no-backup +hg st -mardi + +hg up -qC +echo >> ignored +hg rm removed +echo %% should silently revert the named files +hg revert --no-backup ignored removed +hg st -mardi diff -r d0dbae32517c -r 7383384793fb tests/test-revert.out --- a/tests/test-revert.out Fri Feb 08 18:07:55 2008 -0200 +++ b/tests/test-revert.out Fri Feb 08 18:07:55 2008 -0200 @@ -37,14 +37,19 @@ A z ? b ? e.orig -%% should add a, forget z +%% should add a, remove d, forget z adding a +removing d forgetting z -%% should forget a +%% should forget a, undelete d forgetting a +undeleting d %% should silently add a A a -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +R d +%% should silently keep d removed +R d +1 files updated, 0 files merged, 1 files removed, 0 files unresolved reverting c %% should print non-executable non-executable @@ -65,3 +70,14 @@ reverting b/b % reverting a rename target should revert the source ? newa +%% 4 ignored files (we will add/commit everything) +? ignoreddir/file +? ignoreddir/removed +I ignored +I removed +%% should revert ignored* and undelete *removed +reverting ignored +reverting ignoreddir/file +undeleting ignoreddir/removed +undeleting removed +%% should silently revert the named files