changeset 27985:79139c7a88bd

revert: makes interactive mode ask to forget added files (issue4936) Before this patch revert interactive mode unconditionally forgets added files. This patch fixes this by asking user if he wants to forget added file. If user doesn't want to forget given file, it is added to matcher_opts exclude list, to not reviewing it later with other modified files.
author liscju <piotr.listkiewicz@gmail.com>
date Fri, 05 Feb 2016 15:18:40 +0100
parents e60e13a86529
children e77ac31b64a1
files mercurial/cmdutil.py tests/test-revert-interactive.t
diffstat 2 files changed, 39 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/cmdutil.py	Thu Feb 04 15:38:04 2016 -0800
+++ b/mercurial/cmdutil.py	Fri Feb 05 15:18:40 2016 +0100
@@ -3130,13 +3130,26 @@
     """
     parent, p2 = parents
     node = ctx.node()
+    excluded_files = []
+    matcher_opts = {"exclude": excluded_files}
+
     def checkout(f):
         fc = ctx[f]
         repo.wwrite(f, fc.data(), fc.flags())
 
     audit_path = pathutil.pathauditor(repo.root)
     for f in actions['forget'][0]:
-        repo.dirstate.drop(f)
+        if interactive:
+            choice = \
+                repo.ui.promptchoice(
+                    _("forget added file %s (yn)?$$ &Yes $$ &No")
+                    % f)
+            if choice == 0:
+                repo.dirstate.drop(f)
+            else:
+                excluded_files.append(repo.wjoin(f))
+        else:
+            repo.dirstate.drop(f)
     for f in actions['remove'][0]:
         audit_path(f)
         try:
@@ -3162,7 +3175,7 @@
     if interactive:
         # Prompt the user for changes to revert
         torevert = [repo.wjoin(f) for f in actions['revert'][0]]
-        m = scmutil.match(ctx, torevert, {})
+        m = scmutil.match(ctx, torevert, matcher_opts)
         diffopts = patch.difffeatureopts(repo.ui, whitespace=True)
         diffopts.nodates = True
         diffopts.git = True
--- a/tests/test-revert-interactive.t	Thu Feb 04 15:38:04 2016 -0800
+++ b/tests/test-revert-interactive.t	Fri Feb 05 15:18:40 2016 +0100
@@ -15,6 +15,7 @@
   > interactive = true
   > [extensions]
   > record =
+  > purge = 
   > EOF
 
 
@@ -377,3 +378,26 @@
    5
    d
   +lastline
+
+  $ hg update -C .
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg purge
+  $ touch newfile
+  $ hg add newfile
+  $ hg status
+  A newfile
+  $ hg revert -i <<EOF
+  > n
+  > EOF
+  forgetting newfile
+  forget added file newfile (yn)? n
+  $ hg status
+  A newfile
+  $ hg revert -i <<EOF
+  > y
+  > EOF
+  forgetting newfile
+  forget added file newfile (yn)? y
+  $ hg status
+  ? newfile
+