revert: simplify handling of `added` files
authorPierre-Yves David <pierre-yves.david@fb.com>
Sat, 02 Aug 2014 11:32:24 -0700
changeset 22208 d3659b3795e9
parent 22207 8dda6f6ff564
child 22209 06fbd9518bc5
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.
mercurial/cmdutil.py
tests/test-revert.t
--- 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