Rev 5415: Deprecate BzrDir.generate_backup_name and use osutils.available_backup_name. in file:///home/vila/src/bzr/bugs/323111-orphans/

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Sep 9 14:02:55 BST 2010


At file:///home/vila/src/bzr/bugs/323111-orphans/

------------------------------------------------------------
revno: 5415
revision-id: v.ladeuil+lp at free.fr-20100909130255-ppyxbb3q137skxbf
parent: v.ladeuil+lp at free.fr-20100909092733-yn70gnd11vfwyp30
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: backup-names
timestamp: Thu 2010-09-09 15:02:55 +0200
message:
  Deprecate BzrDir.generate_backup_name and use osutils.available_backup_name.
  
  * bzrlib/tests/test_bzrdir.py:
  (TestGenerateBackupName.test_deprecated_generate_backup_name): Added.
  
  * bzrlib/workingtree.py:
  (WorkingTree.remove.backup): Fix line too long in a call site
  
  * bzrlib/bzrdir.py:
  (BzrDir.generate_backup_name): Deperecated.
  (BzrDir._available_backup_name): Renamed to better hint about race
  conditions and implementation delegated to
  osutils.available_backup_name.
  (BzrDir.backup_bzrdir): Cleaned up.
-------------- next part --------------
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py	2010-08-25 02:16:31 +0000
+++ b/bzrlib/bzrdir.py	2010-09-09 13:02:55 +0000
@@ -86,6 +86,10 @@
     registry,
     symbol_versioning,
     )
+from bzrlib.symbol_versioning import (
+    deprecated_in,
+    deprecated_method,
+    )
 
 
 class BzrDir(controldir.ControlDir):
@@ -515,14 +519,13 @@
                                                format=format).bzrdir
         return bzrdir.create_workingtree()
 
+    @deprecated_method(deprecated_in((2, 3, 0)))
     def generate_backup_name(self, base):
-        """Generate a non-existing backup file name based on base."""
-        counter = 1
-        name = "%s.~%d~" % (base, counter)
-        while self.root_transport.has(name):
-            counter += 1
-            name = "%s.~%d~" % (base, counter)
-        return name
+        return self._available_backup_name(base)
+
+    def _available_backup_name(self, base):
+        """Find a non-existing backup file name based on base."""
+        return osutils.available_backup_name(base, self.root_transport.has)
 
     def backup_bzrdir(self):
         """Backup this bzr control directory.
@@ -530,16 +533,13 @@
         :return: Tuple with old path name and new path name
         """
 
-        backup_dir=self.generate_backup_name('backup.bzr')
         pb = ui.ui_factory.nested_progress_bar()
         try:
-            # FIXME: bug 300001 -- the backup fails if the backup directory
-            # already exists, but it should instead either remove it or make
-            # a new backup directory.
-            #
             old_path = self.root_transport.abspath('.bzr')
+            backup_dir = self._available_backup_name('backup.bzr')
             new_path = self.root_transport.abspath(backup_dir)
-            ui.ui_factory.note('making backup of %s\n  to %s' % (old_path, new_path,))
+            ui.ui_factory.note('making backup of %s\n  to %s'
+                               % (old_path, new_path,))
             self.root_transport.copy_tree('.bzr', backup_dir)
             return (old_path, new_path)
         finally:

=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py	2010-08-20 19:07:17 +0000
+++ b/bzrlib/tests/test_bzrdir.py	2010-09-09 13:02:55 +0000
@@ -32,6 +32,7 @@
     repository,
     osutils,
     remote,
+    symbol_versioning,
     urlutils,
     win32utils,
     workingtree,
@@ -1417,6 +1418,9 @@
 
 
 class TestGenerateBackupName(TestCaseWithMemoryTransport):
+    # FIXME: This may need to be unified with test_osutils.TestBackupNames or
+    # moved to per_bzrdir or per_transport for better coverage ?
+    # -- vila 20100909
 
     def setUp(self):
         super(TestGenerateBackupName, self).setUp()
@@ -1425,9 +1429,14 @@
             possible_transports=[self._transport])
         self._bzrdir = bzrdir.BzrDir.open_from_transport(self._transport)
 
+    def test_deprecated_generate_backup_name(self):
+        res = self.applyDeprecated(
+                symbol_versioning.deprecated_in((2, 3, 0)),
+                self._bzrdir.generate_backup_name, 'whatever')
+
     def test_new(self):
-        self.assertEqual("a.~1~", self._bzrdir.generate_backup_name("a"))
+        self.assertEqual("a.~1~", self._bzrdir._available_backup_name("a"))
 
     def test_exiting(self):
         self._transport.put_bytes("a.~1~", "some content")
-        self.assertEqual("a.~2~", self._bzrdir.generate_backup_name("a"))
+        self.assertEqual("a.~2~", self._bzrdir._available_backup_name("a"))

=== modified file 'bzrlib/workingtree.py'
--- a/bzrlib/workingtree.py	2010-08-20 19:07:17 +0000
+++ b/bzrlib/workingtree.py	2010-09-09 13:02:55 +0000
@@ -2078,9 +2078,10 @@
                     files_to_backup.append(path[1])
 
         def backup(file_to_backup):
-            backup_name = self.bzrdir.generate_backup_name(file_to_backup)
+            backup_name = self.bzrdir._available_backup_name(file_to_backup)
             osutils.rename(abs_path, self.abspath(backup_name))
-            return "removed %s (but kept a copy: %s)" % (file_to_backup, backup_name)
+            return "removed %s (but kept a copy: %s)" % (file_to_backup,
+                                                         backup_name)
 
         # Build inv_delta and delete files where applicable,
         # do this before any modifications to inventory.



More information about the bazaar-commits mailing list