merge with crew-stable
authorThomas Arendsen Hein <thomas@intevation.de>
Thu, 27 Dec 2007 13:39:59 +0100
changeset 5696 6ba5ecc27d33
parent 5695 1ce185f3c640 (current diff)
parent 5672 8a65ea986755 (diff)
child 5697 98f45e141567
merge with crew-stable
mercurial/ui.py
--- a/mercurial/ui.py	Wed Dec 26 23:03:32 2007 +0100
+++ b/mercurial/ui.py	Thu Dec 27 13:39:59 2007 +0100
@@ -412,14 +412,15 @@
 
     def prompt(self, msg, pat=None, default="y", matchflags=0):
         if not self.interactive: return default
-        try:
-            r = self._readline(msg + ' ')
-            if not pat or re.match(pat, r, matchflags):
-                return r
-            else:
-                self.write(_("unrecognized response\n"))
-        except EOFError:
-            raise util.Abort(_('response expected'))
+        while True:
+            try:
+                r = self._readline(msg + ' ')
+                if not pat or re.match(pat, r, matchflags):
+                    return r
+                else:
+                    self.write(_("unrecognized response\n"))
+            except EOFError:
+                raise util.Abort(_('response expected'))
 
     def getpass(self, prompt=None, default=None):
         if not self.interactive: return default
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-prompt	Thu Dec 27 13:39:59 2007 +0100
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Test for b5605d88dc27
+#  Make ui.prompt repeat on "unrecognized response" again (issue897)
+# and for 840e2b315c1f
+#  Fix misleading error and prompts during update/merge (issue556)
+
+status() {
+    [ $? -ne 0 ] && echo "failed."
+    echo "status:"
+    hg st -A file1 file2
+    for file in file1 file2; do
+        if [ -f $file ]; then
+            echo "$file:"
+            cat $file
+        else
+            echo "$file does not exist"
+        fi
+    done
+}
+
+hg init repo
+cd repo
+echo 1 > file1
+echo 2 > file2
+hg ci -Am 'added file1 and file2' # rev 0
+
+hg rm file1
+echo changed >> file2
+hg ci -m 'removed file1, changed file2' # rev 1
+
+hg co 0
+echo changed >> file1
+hg rm file2
+hg ci -m 'changed file1, removed file2' # rev 2
+
+echo
+echo "# non-interactive merge"
+hg merge -y || echo "failed"
+status
+
+echo
+echo "# interactive merge"
+hg co -C
+hg merge --config ui.interactive=true <<EOF || echo "failed"
+c
+d
+EOF
+status
+
+echo
+echo "# interactive merge with bad input"
+hg co -C
+hg merge --config ui.interactive=true <<EOF || echo "failed"
+foo
+bar
+d
+baz
+c
+EOF
+status
+
+echo
+echo "# interactive merge with not enough input"
+hg co -C
+hg merge --config ui.interactive=true <<EOF || echo "failed"
+d
+EOF
+status
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-prompt.out	Thu Dec 27 13:39:59 2007 +0100
@@ -0,0 +1,64 @@
+adding file1
+adding file2
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+# non-interactive merge
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+status:
+M file2
+C file1
+file1:
+1
+changed
+file2:
+2
+changed
+
+# interactive merge
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? remote changed file2 which local deleted
+use (c)hanged version or leave (d)eleted? 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+status:
+file2: No such file or directory
+C file1
+file1:
+1
+changed
+file2 does not exist
+
+# interactive merge with bad input
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? unrecognized response
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? unrecognized response
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? remote changed file2 which local deleted
+use (c)hanged version or leave (d)eleted? unrecognized response
+remote changed file2 which local deleted
+use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+status:
+M file2
+R file1
+file1 does not exist
+file2:
+2
+changed
+
+# interactive merge with not enough input
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? remote changed file2 which local deleted
+use (c)hanged version or leave (d)eleted? abort: response expected
+failed
+status:
+file2: No such file or directory
+C file1
+file1:
+1
+changed
+file2 does not exist