mercurial/cmdutil.py
changeset 22488 6c52ed3f888e
parent 22485 efedda4aed49
child 22489 0d57bf80c7cb
--- a/mercurial/cmdutil.py	Tue Sep 16 22:55:49 2014 -0700
+++ b/mercurial/cmdutil.py	Sat Aug 30 18:20:29 2014 +0200
@@ -2554,20 +2554,9 @@
             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.
+            # We need to wait for some post-processing to update this set
+            # before making the distinction. The dirstate will be used for
+            # that purpose.
             dsadded = added
 
         # in case of merge, files that are actually added can be reported as
@@ -2590,6 +2579,13 @@
                 dsremoved.add(src)
                 names[src] = (repo.pathto(src, cwd), True)
 
+        # distinguish between file to forget and the other
+        added = set()
+        for abs in dsadded:
+            if repo.dirstate[abs] != 'a':
+                added.add(abs)
+        dsadded -= added
+
         # For files marked as removed, we check if an unknown file is present at
         # the same path. If a such file exists it may need to be backed up.
         # Making the distinction at this stage helps have simpler backup
@@ -2644,6 +2640,8 @@
             # Modified compared to target, local change
             (dsmodified,    actions['revert'],   backup),
             # Added since target
+            (added,         actions['remove'],   discard),
+            # Added in working directory
             (dsadded,       actions['remove'],   discard),
             # Removed since  target, before working copy parent
             (removed,       actions['add'],      discard),