# HG changeset patch # User Pierre-Yves David # Date 1409415629 -7200 # Node ID 6c52ed3f888e13291356569bc5ca1285a2626235 # Parent e40bb83d09894e88b8d14d31af5521471ece9bea revert: split between newly added file and file added in other changeset These two kinds of files are handled differently. One is deleted and the other is just forgotten (the file is untracked but left in place). The distinction is done in the `_performrevert` code itself and we would like to get ride of this. diff -r e40bb83d0989 -r 6c52ed3f888e mercurial/cmdutil.py --- 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),