changeset 22208:d3659b3795e9

revert: simplify handling of `added` files There are multiple possible cases for added files. But it's all handled by magic much lower in the stack. We document them, simplify the codes and move on.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Sat, 02 Aug 2014 11:32:24 -0700
parents 8dda6f6ff564
children 06fbd9518bc5
files mercurial/cmdutil.py tests/test-revert.t
diffstat 2 files changed, 18 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Fri Aug 15 11:48:05 2014 -0500
+++ b/mercurial/cmdutil.py	Sat Aug 02 11:32:24 2014 -0700
@@ -2407,7 +2407,6 @@
             dsmodified = set(changes[0])
             dsadded    = set(changes[1])
             dsremoved  = set(changes[2])
-            dsadded |= _deletedadded
 
             # only take into account for removes between wc and target
             clean |= dsremoved - removed
@@ -2420,6 +2419,22 @@
             dsmodified |= modified & dsadded # dirstate added may needs backup
             modified -= dsmodified
 
+            # There are three categories of added files
+            #
+            # 1. addition that just happened in the dirstate
+            #    (should be forgotten)
+            # 2. file is added since target revision and has local changes
+            #    (should be backed up and removed)
+            # 3. file is added since target revision and is clean
+            #    (should be removed)
+            #
+            # However we do not need to split them yet. The current revert code
+            # will automatically recognize (1) when performing operation. And
+            # the backup system is currently unabled to handle (2).
+            #
+            # So we just put them all in the same group.
+            dsadded = added
+
         # if f is a rename, update `names` to also revert the source
         cwd = repo.getcwd()
         for f in dsadded:
@@ -2437,8 +2452,6 @@
 
         missingmodified = dsmodified - smf
         dsmodified -= missingmodified
-        missingadded = dsadded - smf
-        dsadded -= missingadded
 
         # action to be actually performed by revert
         # (<list of file>, message>) tuple
@@ -2455,8 +2468,7 @@
             (modified,         (actions['revert'],   False)),
             (dsmodified,       (actions['revert'],   True)),
             (missingmodified,  (actions['remove'],   True)),
-            (dsadded,          (actions['revert'],   True)),
-            (missingadded,     (actions['remove'],   False)),
+            (dsadded,          (actions['remove'],   True)),
             (removed,          (actions['add'],      True)),
             (dsremoved,        (actions['undelete'], True)),
             (clean,            (None,                False)),
--- a/tests/test-revert.t	Fri Aug 15 11:48:05 2014 -0500
+++ b/tests/test-revert.t	Sat Aug 02 11:32:24 2014 -0700
@@ -908,12 +908,6 @@
 
 check revert output
 
-Misbehavior:
-
-- report "reverting" when file needs no changes
-|
-| - reverting removed_revert
-
   $ hg revert --all --rev 'desc(base)'
   removing added_clean
   removing added_deleted
@@ -936,7 +930,6 @@
   adding removed_clean
   reverting removed_deleted
   adding removed_removed
-  reverting removed_revert
   adding removed_untracked-clean
   adding removed_untracked-revert
   adding removed_untracked-wc
@@ -1098,12 +1091,6 @@
 revert all files individually and check the output
 (output is expected to be different than in the --all case)
 
-Misbehavior:
-
-- fails to report no change to revert for
-|
-| - removed_revert
-
   $ for file in `python ../gen-revert-cases.py filelist`; do
   >   echo '### revert for:' $file;
   >   hg revert $file --rev 'desc(base)';
@@ -1194,6 +1181,7 @@
   ### revert for: removed_removed
   
   ### revert for: removed_revert
+  no changes needed to removed_revert
   
   ### revert for: removed_untracked-clean