Rev 2838: Fix osutils_delete_any and use it in the test suite in file:///home/pqm/archives/thelove/bzr/%2Btrunk/

Canonical.com Patch Queue Manager pqm at pqm.ubuntu.com
Thu Sep 20 12:01:40 BST 2007


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

------------------------------------------------------------
revno: 2838
revision-id: pqm at pqm.ubuntu.com-20070920110135-652zsvb2su692bie
parent: pqm at pqm.ubuntu.com-20070920090026-ly0kde313r1ul2bu
parent: v.ladeuil+lp at free.fr-20070920094238-jpxvr4qiwspsftzr
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Thu 2007-09-20 12:01:35 +0100
message:
  Fix osutils_delete_any and use it in the test suite
modified:
  bzrlib/osutils.py              osutils.py-20050309040759-eeaff12fbf77ac86
  bzrlib/tests/repository_implementations/test_commit_builder.py test_commit_builder.py-20060606110838-76e3ra5slucqus81-1
    ------------------------------------------------------------
    revno: 2837.1.1
    merged: v.ladeuil+lp at free.fr-20070920094238-jpxvr4qiwspsftzr
    parent: pqm at pqm.ubuntu.com-20070920090026-ly0kde313r1ul2bu
    parent: v.ladeuil+lp at free.fr-20070920093354-72qnenn3hbprfp43
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: bzr.integration
    timestamp: Thu 2007-09-20 11:42:38 +0200
    message:
      Fix osutils_delete_any and use it in the test suite
    ------------------------------------------------------------
    revno: 2831.5.3
    merged: v.ladeuil+lp at free.fr-20070920093354-72qnenn3hbprfp43
    parent: v.ladeuil+lp at free.fr-20070920093039-xnjzgav92o44ient
    parent: pqm at pqm.ubuntu.com-20070920090026-ly0kde313r1ul2bu
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: commit.builder
    timestamp: Thu 2007-09-20 11:33:54 +0200
    message:
      Merge bzr.dev
    ------------------------------------------------------------
    revno: 2831.5.2
    merged: v.ladeuil+lp at free.fr-20070920093039-xnjzgav92o44ient
    parent: v.ladeuil+lp at free.fr-20070919013514-1gagtna1cfzbeedv
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: commit.builder
    timestamp: Thu 2007-09-20 11:30:39 +0200
    message:
      Review feedback.
      
      * bzrlib/tests/repository_implementations/test_commit_builder.py:
      (TestCommitBuilder._check_kind_change.change_kind): Use
      osutils.delete_any.
      
      * bzrlib/osutils.py:
      (delete_any): Rewritten for portability.
    ------------------------------------------------------------
    revno: 2831.5.1
    merged: v.ladeuil+lp at free.fr-20070919013514-1gagtna1cfzbeedv
    parent: pqm at pqm.ubuntu.com-20070918045733-es6jch43pxvogvhj
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: commit.builder
    timestamp: Wed 2007-09-19 03:35:14 +0200
    message:
      Portability fix in TestCommitBuilder for unlink.
      
      * bzrlib/tests/repository_implementations/test_commit_builder.py:
      Clean up import statements.
      (TestCommitBuilder._check_kind_change.change_kind): Rewritten for
      portability (now valid for OSX and win32 too).
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py	2007-09-17 22:13:29 +0000
+++ b/bzrlib/osutils.py	2007-09-20 09:30:39 +0000
@@ -786,15 +786,18 @@
             raise
         shutil.copyfile(src, dest)
 
-def delete_any(full_path):
+
+# Look Before You Leap (LBYL) is appropriate here instead of Easier to Ask for
+# Forgiveness than Permission (EAFP) because:
+# - root can damage a solaris file system by using unlink,
+# - unlink raises different exceptions on different OSes (linux: EISDIR, win32:
+#   EACCES, OSX: EPERM) when invoked on a directory.
+def delete_any(path):
     """Delete a file or directory."""
-    try:
-        os.unlink(full_path)
-    except OSError, e:
-    # We may be renaming a dangling inventory id
-        if e.errno not in (errno.EISDIR, errno.EACCES, errno.EPERM):
-            raise
-        os.rmdir(full_path)
+    if isdir(path): # Takes care of symlinks
+        os.rmdir(path)
+    else:
+        os.unlink(path)
 
 
 def has_symlinks():
@@ -802,7 +805,7 @@
         return True
     else:
         return False
-        
+
 
 def contains_whitespace(s):
     """True if there are any whitespace characters in s."""

=== modified file 'bzrlib/tests/repository_implementations/test_commit_builder.py'
--- a/bzrlib/tests/repository_implementations/test_commit_builder.py	2007-09-10 01:27:10 +0000
+++ b/bzrlib/tests/repository_implementations/test_commit_builder.py	2007-09-20 09:30:39 +0000
@@ -16,24 +16,28 @@
 
 """Tests for repository commit builder."""
 
-from errno import EISDIR
+import errno
 import os
-
-from bzrlib import inventory
-from bzrlib.errors import NonAsciiRevisionId, CannotSetRevisionId
-from bzrlib.repository import CommitBuilder
-from bzrlib import tests
-from bzrlib.tests.repository_implementations.test_repository import TestCaseWithRepository
-
-
-class TestCommitBuilder(TestCaseWithRepository):
+import sys
+
+from bzrlib import (
+    errors,
+    inventory,
+    osutils,
+    repository,
+    tests,
+    )
+from bzrlib.tests.repository_implementations import test_repository
+
+
+class TestCommitBuilder(test_repository.TestCaseWithRepository):
 
     def test_get_commit_builder(self):
         branch = self.make_branch('.')
         branch.repository.lock_write()
         builder = branch.repository.get_commit_builder(
             branch, [], branch.get_config())
-        self.assertIsInstance(builder, CommitBuilder)
+        self.assertIsInstance(builder, repository.CommitBuilder)
         self.assertTrue(builder.random_revid)
         branch.repository.commit_write_group()
         branch.repository.unlock()
@@ -95,11 +99,11 @@
                 try:
                     builder = tree.branch.get_commit_builder([],
                         revision_id=revision_id)
-                except NonAsciiRevisionId:
+                except errors.NonAsciiRevisionId:
                     revision_id = 'abc'
                     builder = tree.branch.get_commit_builder([],
                         revision_id=revision_id)
-            except CannotSetRevisionId:
+            except errors.CannotSetRevisionId:
                 # This format doesn't support supplied revision ids
                 return
             self.assertFalse(builder.random_revid)
@@ -416,14 +420,11 @@
         tree = self.make_branch_and_tree('.')
         path = 'name'
         make_before(path)
+
         def change_kind():
-            try:
-                os.unlink(path)
-            except OSError, e:
-                if e.errno != EISDIR:
-                    raise
-                os.rmdir(path)
+            osutils.delete_any(path)
             make_after(path)
+
         self._add_commit_change_check_changed(tree, path, change_kind)
 
     def test_last_modified_dir_file(self):




More information about the bazaar-commits mailing list