summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. David Murray <rdmurray@bitdance.com>2010-08-01 04:11:05 +0000
committerR. David Murray <rdmurray@bitdance.com>2010-08-01 04:11:05 +0000
commit0d023db38623c7163f8264fecd4f8f881b4fccee (patch)
tree9a8e20cc95bb5374a97f76002ec2a353bb2f12cf
parent2b112a6bb3911b07b9b45404edaf99c0150124e5 (diff)
downloadcpython-git-0d023db38623c7163f8264fecd4f8f881b4fccee.tar.gz
Merged revisions 83381 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/release27-maint ................ r83381 | r.david.murray | 2010-08-01 00:04:03 -0400 (Sun, 01 Aug 2010) | 23 lines Merged revisions 83380 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r83380 | r.david.murray | 2010-07-31 23:31:09 -0400 (Sat, 31 Jul 2010) | 17 lines #8620: Cmd no longer truncates last character if stdin ends without newline Cmd used to blindly chop off the last character of every input line. If the input reached EOF and there was no final new line, it would truncate the last character of the last command. This fix instead strips trailing \r\n from the input lines. While this is a small behavior change, it should not break any working code, since feeding a '\r\n' terminated file to Cmd would previously leave the \r's on the lines, resulting in failed command execution. I wrote the unit test in preparation for a PyOhio TeachMe session run by Catherine Devlin, and we can thank Catherine and the PyOhio session attendees for the fix. I've added Catherine to the Acks file for organizing and leading the TeachMe session, out of which we will hopefully get some new contributors. ........ ................
-rw-r--r--Lib/cmd.py2
-rw-r--r--Lib/test/test_cmd.py27
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 32 insertions, 1 deletions
diff --git a/Lib/cmd.py b/Lib/cmd.py
index 3f82b48710..ec62c740eb 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -137,7 +137,7 @@ class Cmd:
if not len(line):
line = 'EOF'
else:
- line = line[:-1] # chop \n
+ line = line.rstrip('\r\n')
line = self.precmd(line)
stop = self.onecmd(line)
stop = self.postcmd(stop, line)
diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py
index 8898a32cb9..b48b0f11f3 100644
--- a/Lib/test/test_cmd.py
+++ b/Lib/test/test_cmd.py
@@ -7,6 +7,9 @@ Original by Michael Schneider
import cmd
import sys
+import re
+import unittest
+import StringIO
class samplecmdclass(cmd.Cmd):
"""
@@ -165,9 +168,33 @@ class samplecmdclass(cmd.Cmd):
def do_exit(self, arg):
return True
+
+class TestAlternateInput(unittest.TestCase):
+
+ class simplecmd(cmd.Cmd):
+
+ def do_print(self, args):
+ print >>self.stdout, args
+
+ def do_EOF(self, args):
+ return True
+
+ def test_file_with_missing_final_nl(self):
+ input = StringIO.StringIO("print test\nprint test2")
+ output = StringIO.StringIO()
+ cmd = self.simplecmd(stdin=input, stdout=output)
+ cmd.use_rawinput = False
+ cmd.cmdloop()
+ self.assertEqual(output.getvalue(),
+ ("(Cmd) test\n"
+ "(Cmd) test2\n"
+ "(Cmd) "))
+
+
def test_main(verbose=None):
from test import test_support, test_cmd
test_support.run_doctest(test_cmd, verbose)
+ test_support.run_unittest(TestAlternateInput)
def test_coverage(coverdir):
import trace
diff --git a/Misc/ACKS b/Misc/ACKS
index 96523fea6c..2f6055e583 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -170,6 +170,7 @@ Vincent Delft
Arnaud Delobelle
Erik Demaine
Roger Dev
+Catherine Devlin
Raghuram Devarakonda
Scott Dial
Toby Dickenson
diff --git a/Misc/NEWS b/Misc/NEWS
index 307c332979..56b289e29b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -84,6 +84,9 @@ C-API
Library
-------
+- Issue #8620: when a Cmd is fed input that reaches EOF without a final
+ newline, it no longer truncates the last character of the last command line.
+
- Issue #7066: archive_util.make_archive now restores the cwd if an error is
raised. Initial patch by Ezio Melotti.