Rev 4957: (nmb) Implement mv for shell-like scripts in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Wed Jan 13 18:11:23 GMT 2010


At file:///home/pqm/archives/thelove/bzr/%2Btrunk/

------------------------------------------------------------
revno: 4957 [merge]
revision-id: pqm at pqm.ubuntu.com-20100113181121-50zma6sk6r0bvq1n
parent: pqm at pqm.ubuntu.com-20100113161025-5qx4ky13h27x4kj3
parent: v.ladeuil+lp at free.fr-20100113172408-76aswzl24u77owue
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2010-01-13 18:11:21 +0000
message:
  (nmb) Implement mv for shell-like scripts
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/tests/script.py         script.py-20090901081155-yk3tiy1nunxg16ne-1
  bzrlib/tests/test_script.py    test_script.py-20090901081156-y90z4w2t62fv7e7b-1
=== modified file 'NEWS'
--- a/NEWS	2010-01-13 00:25:44 +0000
+++ b/NEWS	2010-01-13 17:24:08 +0000
@@ -176,6 +176,10 @@
   testtools less than 0.9.2 will cause bzr to error while loading the test
   suite. (Robert Collins)
 
+* Shell-like tests now support the command "mv" for moving files.  The
+  syntax for ``mv file1 file2``, ``mv dir1 dir2`` and ``mv file dir`` is
+  supported.  (Neil Martinsen-Burrell)
+
 * The test progress bar no longer distinguishes tests that 'errored' from
   tests that 'failed' - they're all just failures.
   (Martin Pool)

=== modified file 'bzrlib/tests/script.py'
--- a/bzrlib/tests/script.py	2009-12-11 05:29:35 +0000
+++ b/bzrlib/tests/script.py	2010-01-13 17:21:29 +0000
@@ -402,6 +402,31 @@
             retcode = 0
         return retcode, None, err
 
+    def do_mv(self, test_case, input, args):
+        err = None
+        def error(msg, src, dst):
+            return "mv: cannot move %s to %s: %s\n" % (src, dst, msg)
+
+        if not args or len(args) != 2:
+            raise SyntaxError("Usage: mv path1 path2")
+        src, dst = args
+        try:
+            real_dst = dst
+            if os.path.isdir(dst):
+                real_dst = os.path.join(dst, os.path.basename(src))
+            os.rename(src, real_dst)
+        except OSError, e:
+            if e.errno == errno.ENOENT:
+                err = error('No such file or directory', src, dst)
+            else:
+                raise
+        if err:
+            retcode = 1
+        else:
+            retcode = 0
+        return retcode, None, err
+
+
 
 class TestCaseWithMemoryTransportAndScript(tests.TestCaseWithMemoryTransport):
     """Helper class to experiment shell-like test and memory fs.

=== modified file 'bzrlib/tests/test_script.py'
--- a/bzrlib/tests/test_script.py	2009-11-08 20:28:36 +0000
+++ b/bzrlib/tests/test_script.py	2010-01-13 17:21:29 +0000
@@ -407,3 +407,43 @@
 $ rm -r dir
 """)
         self.failIfExists('dir')
+
+
+class TestMv(script.TestCaseWithTransportAndScript):
+
+    def test_usage(self):
+        self.assertRaises(SyntaxError, self.run_script, '$ mv')
+        self.assertRaises(SyntaxError, self.run_script, '$ mv f')
+        self.assertRaises(SyntaxError, self.run_script, '$ mv f1 f2 f3')
+
+    def test_move_file(self):
+        self.run_script('$ echo content >file')
+        self.failUnlessExists('file')
+        self.run_script('$ mv file new_name')
+        self.failIfExists('file')
+        self.failUnlessExists('new_name')
+
+    def test_move_unknown_file(self):
+        self.assertRaises(AssertionError,
+                          self.run_script, '$ mv unknown does-not-exist')
+
+    def test_move_dir(self):
+        self.run_script("""
+$ mkdir dir
+$ echo content >dir/file
+""")
+        self.run_script('$ mv dir new_name')
+        self.failIfExists('dir')
+        self.failUnlessExists('new_name')
+        self.failUnlessExists('new_name/file')
+
+    def test_move_file_into_dir(self):
+        self.run_script("""
+$ mkdir dir
+$ echo content > file
+""")
+        self.run_script('$ mv file dir')
+        self.failUnlessExists('dir')
+        self.failIfExists('file')
+        self.failUnlessExists('dir/file')
+




More information about the bazaar-commits mailing list