[MERGE] [bug #111664] bzr rm refuses to delete renamed files

Marius Kruger amanic at gmail.com
Thu Jun 28 07:15:18 BST 2007


hi,

On 6/25/07, Robert Collins <robertc at robertcollins.net> wrote:
>
> On Mon, 2007-06-25 at 19:40 +0200, Marius Kruger wrote:
> > hopefully this bundle address all the comments on the list.
> > The changes I made since the last patch are:
>
> +1 Conditional on one further change:

...

> assertRemoveErrorContainsRe can now away completely I think. I propose
> the following -
> delete the asertRemoveErrorContainsRe method
> change
> +        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
> tree.remove,
> +            TestRemove.files, keep_files=False)
> +        self._assertRemoveErrorContainsRe(e, 'unknown:.*b/c.*b.*a.*d')
>
> into
>
> +        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
> tree.remove,
> +            TestRemove.files, keep_files=False)
> +        self._assertContainsRe(err.changes_as_text,
> 'unknown:.*b/c.*b.*a.*d')


done
(never mind my previous e-mail,
the pattern was a little wrong: the 'd' should have been sorted to the
front,
but because the was a 'd' in the rest of the error message, this test used
to pass.
It seems its a good thing to make this change away from str(err),
and it seems a, b, c, d are not such a good choice for file names if the
testing
is done by simple regexes... but hopefully there are not other such nasty
surprises.)

The reason for this is:
> The exception *formatting* should be tested in bzrlib/tests/test_errors.py
> The exception *throwing* should be testing what is supplied to the
> BzrRemoveChangedFilesError constructor, not the current formatting which
> could change, get internationalised etc.
>
> This reduces the number of layers involved in your tests, and thus the
> number of noise changes you may encounter.

This little piece of wisdom should probably go into the HACKING doc if it
isn't there
already (I must admit, I haven't read it in a while)


BTW if I run all the tests (on bzr.dev and my branch), this test fails:

[1292/6951 in 80s, 43 skipped]
test_permissions.TestSftpPermissions.test_new_files
/var/lib/python-support/python2.5/paramiko/message.py:226:
DeprecationWarning: integer argument expected, got float
  self.packet.write(struct.pack('>I', n))
FAIL: blackbox.test_status.TestStatus.test_status_versioned
    Unexpected return code
not equal:
a = 0
b = 3


Anyways, here are the changes since the previous patch

=== modified file 'bzrlib/tests/workingtree_implementations/test_remove.py'
--- bzrlib/tests/workingtree_implementations/test_remove.py     2007-06-23
19:45:17 +0000
+++ bzrlib/tests/workingtree_implementations/test_remove.py     2007-06-28
05:42:19 +0000
@@ -16,7 +16,6 @@

 """Tests for interface conformance of 'WorkingTree.remove'"""

-import re
 from bzrlib.tests.workingtree_implementations import
TestCaseWithWorkingTree
 from bzrlib import errors, osutils

@@ -34,11 +33,6 @@
         self.build_tree(TestRemove.files)
         return tree

-    def _assertRemoveErrorContainsRe(self, exception, file_detail_re):
-        self.assertContainsRe(str(exception),
-            '(?s)Can\'t remove changed or unknown'
-            ' files:.*' + file_detail_re)
-
     def test_remove_keep(self):
         """Check that files are unversioned but not deleted."""
         tree = self.getTree()
@@ -66,9 +60,10 @@
         tree = self.getTree()
         tree.add(TestRemove.files)
         self.assertInWorkingTree(TestRemove.files)
-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             TestRemove.files, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'added:.*a.*b.*b/c.*d')
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)added:.*a.*b/.*b/c.*d/')
         self.assertInWorkingTree(TestRemove.files)
         self.failUnlessExists(TestRemove.files)

@@ -79,9 +74,9 @@
         tree.commit("make sure a is versioned")
         self.build_tree_contents([('a', "some other new content!")])
         self.assertInWorkingTree(TestRemove.a)
-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             TestRemove.a, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'modified:.*a')
+        self.assertContainsRe(err.changes_as_text, '(?s)modified:.*a')
         self.assertInWorkingTree(TestRemove.a)
         self.failUnlessExists(TestRemove.a)

@@ -131,9 +126,10 @@
         self.assertInWorkingTree(rfilesx)
         self.failUnlessExists(rfilesx)

-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             rfilesx, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'modified:.*ax.*bx/cx')
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)modified:.*ax.*bx/cx')
         self.assertInWorkingTree(rfilesx)
         self.failUnlessExists(rfilesx)

@@ -151,9 +147,10 @@
     def test_remove_unknown_files(self):
         """Try to delete unknown files."""
         tree = self.getTree()
-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             TestRemove.files, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'unknown:.*b/c.*b.*a.*d')
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)unknown:.*d/.*b/c.*b/.*a.*')

     def test_remove_nonexisting_files(self):
         """Try to delete non-existing files."""
@@ -180,9 +177,10 @@
         self.assertInWorkingTree(TestRemove.files)
         self.failUnlessExists(TestRemove.files)
         self.build_tree(['b/my_unknown_file'])
-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             TestRemove.b, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'unknown:.*b/my_unknown_file')
+        self.assertContainsRe(err.changes_as_text,
+            '(?s)unknown:.*b/my_unknown_file')
         self.assertInWorkingTree(TestRemove.b)
         self.failUnlessExists(TestRemove.b)

@@ -203,9 +201,9 @@
         tree.commit("make sure b and c are versioned")
         self.build_tree_contents([('b/c', "some other new content!")])
         self.assertInWorkingTree(TestRemove.b_c)
-        e = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
+        err = self.assertRaises(errors.BzrRemoveChangedFilesError,
tree.remove,
             TestRemove.b, keep_files=False)
-        self._assertRemoveErrorContainsRe(e, 'modified:.*b/c')
+        self.assertContainsRe(err.changes_as_text, '(?s)modified:.*b/c')
         self.assertInWorkingTree(TestRemove.b_c)
         self.failUnlessExists(TestRemove.b_c)




regards
marius

-- 
bazaar-vcs.org
Because I don't trust Version Control Systems with less than 6350 unit
tests.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ubuntu.com/archives/bazaar/attachments/20070628/b7ea6362/attachment-0001.htm 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix_bug_111664_5.patch
Type: text/x-diff
Size: 66962 bytes
Desc: not available
Url : https://lists.ubuntu.com/archives/bazaar/attachments/20070628/b7ea6362/attachment-0001.bin 


More information about the bazaar mailing list