Rev 5414: Implement osutils.available_backup_name. in file:///home/vila/src/bzr/bugs/323111-orphans/
Vincent Ladeuil
v.ladeuil+lp at free.fr
Thu Sep 9 10:27:33 BST 2010
At file:///home/vila/src/bzr/bugs/323111-orphans/
------------------------------------------------------------
revno: 5414
revision-id: v.ladeuil+lp at free.fr-20100909092733-yn70gnd11vfwyp30
parent: v.ladeuil+lp at free.fr-20100907130555-6ocpql16nzjr4808
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: backup-names
timestamp: Thu 2010-09-09 11:27:33 +0200
message:
Implement osutils.available_backup_name.
-------------- next part --------------
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py 2010-08-24 12:36:53 +0000
+++ b/bzrlib/osutils.py 2010-09-09 09:27:33 +0000
@@ -2354,3 +2354,19 @@
raise errors.BzrError("Can't decode username as %s." % \
user_encoding)
return username
+
+
+def available_backup_name(base, exists):
+ """Find a non-existing backup file name.
+
+ This will *not* create anything, this only return a 'free' entry.
+
+ :param base: The base name.
+ :param exists: A callable returning True if the passed path exists.
+ """
+ counter = 1
+ name = "%s.~%d~" % (base, counter)
+ while exists(name):
+ counter += 1
+ name = "%s.~%d~" % (base, counter)
+ return name
=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py 2010-07-08 09:11:44 +0000
+++ b/bzrlib/tests/test_osutils.py 2010-09-09 09:27:33 +0000
@@ -2078,3 +2078,32 @@
ue = osutils.get_user_encoding()
osutils.set_or_unset_env('LOGNAME', u'jrandom\xb6'.encode(ue))
self.assertEqual(u'jrandom\xb6', osutils.getuser_unicode())
+
+class TestBackupNames(tests.TestCase):
+
+ def setUp(self):
+ super(TestBackupNames, self).setUp()
+ self.backups = []
+
+ def backup_exists(self, name):
+ return name in self.backups
+
+ def available_backup_name(self, name):
+ backup_name = osutils.available_backup_name(name, self.backup_exists)
+ self.backups.append(backup_name)
+ return backup_name
+
+ def assertBackupName(self, expected, name):
+ self.assertEqual(expected, self.available_backup_name(name))
+
+ def test_empty(self):
+ self.assertBackupName('file.~1~', 'file')
+
+ def test_existing(self):
+ self.available_backup_name('file')
+ self.available_backup_name('file')
+ self.assertBackupName('file.~3~', 'file')
+ # Empty slots are found, this is not a strict requirement and may be
+ # revisited if we test against all implementations.
+ self.backups.remove('file.~2~')
+ self.assertBackupName('file.~2~', 'file')
More information about the bazaar-commits
mailing list