Rev 2672: Change file_names allocation to be done by the user, not the FileNames class. in http://people.ubuntu.com/~robertc/baz2.0/names-collection-user-specified
Robert Collins
robertc at robertcollins.net
Mon Aug 6 06:47:35 BST 2007
At http://people.ubuntu.com/~robertc/baz2.0/names-collection-user-specified
------------------------------------------------------------
revno: 2672
revision-id: robertc at robertcollins.net-20070806054732-0w8j16bf4upvt2nu
parent: pqm at pqm.ubuntu.com-20070803043116-l7u1uypblmx1uxnr
committer: Robert Collins <robertc at robertcollins.net>
branch nick: names-collection-user-specified
timestamp: Mon 2007-08-06 15:47:32 +1000
message:
Change file_names allocation to be done by the user, not the FileNames class.
modified:
bzrlib/file_names.py file_collection.py-20070714100753-j2zz4ahtk331k5zm-1
bzrlib/tests/test_file_names.py test_file_collection-20070714093417-5gc9d821to85zo4t-1
=== modified file 'bzrlib/file_names.py'
--- a/bzrlib/file_names.py 2007-07-20 00:57:43 +0000
+++ b/bzrlib/file_names.py 2007-08-06 05:47:32 +0000
@@ -40,7 +40,11 @@
The save method must be called to cause the state to be saved to the
transport.
- Finally, load is used to obtain a previously saved set.
+ The load method is used to obtain a previously saved set.
+
+ There is a cap in the _cap method which will error if more names are
+ added than the names collection can sensibly manage. Currently this
+ cap is 10000.
"""
def __init__(self, transport, index_name):
@@ -50,12 +54,16 @@
self._names = None
self._cap = 10000
- def allocate(self):
- for number in xrange(self._cap):
- if str(number) not in self._names:
- self._names.add(str(number))
- return str(number)
- raise errors.BzrError('too many files')
+ def allocate(self, name=None):
+ """Allocate name in the names collection.
+
+ :param name: The name to allocate.
+ """
+ if name is not None:
+ if len(self._names) >= self._cap:
+ raise errors.BzrError('too many files')
+ self._names.add(name)
+ return name
def initialise(self):
"""Initialise the collection."""
=== modified file 'bzrlib/tests/test_file_names.py'
--- a/bzrlib/tests/test_file_names.py 2007-07-19 03:37:17 +0000
+++ b/bzrlib/tests/test_file_names.py 2007-08-06 05:47:32 +0000
@@ -33,32 +33,36 @@
names.save()
self.assertEqual('', t.get_bytes(name))
- def test_allocate_trivial(self):
- t = self.get_transport()
- names = FileNames(t, 'index')
- names.initialise()
- name = names.allocate()
- self.assertEqual('0', name)
- self.assertFalse(t.has('index'))
- name = names.allocate()
- self.assertEqual('1', name)
- self.assertFalse(t.has('index'))
-
- def test_allocate_overrun(self):
+ def test_allocate_name_does_not_error(self):
+ t = self.get_transport()
+ names = FileNames(t, 'index')
+ names.initialise()
+ names.allocate('0')
+ self.assertFalse(t.has('index'))
+
+ def test_allocate_two_names_succeeds(self):
+ t = self.get_transport()
+ names = FileNames(t, 'index')
+ names.initialise()
+ names.allocate('0')
+ names.allocate('1')
+ self.assertFalse(t.has('index'))
+
+ def test_exceeding_the_allocation_cap_errors(self):
t = self.get_transport()
names = FileNames(t, 'index')
names.initialise()
names._cap = 5
for number in xrange(5):
- name = names.allocate()
- self.assertRaises(errors.BzrError, names.allocate)
+ name = names.allocate(str(number))
+ self.assertRaises(errors.BzrError, names.allocate, '6')
def test_load(self):
t = self.get_transport()
names = FileNames(t, 'index')
names.initialise()
- names.allocate()
- names.allocate()
+ names.allocate('0')
+ names.allocate('1')
names.save()
names = FileNames(t, 'index')
names.load()
@@ -77,16 +81,16 @@
t = self.get_transport()
names = FileNames(t, 'index')
names.initialise()
- names.allocate()
- names.allocate()
+ names.allocate('0')
+ names.allocate('1')
self.assertEqual(set(['0', '1']), names.names())
def test_names_on_unlistable_works(self):
t = self.get_transport()
names = FileNames(t, 'index')
names.initialise()
- names.allocate()
- names.allocate()
+ names.allocate('0')
+ names.allocate('1')
names.save()
names = FileNames(
get_transport('unlistable+' + self.get_url()), 'index')
@@ -97,7 +101,19 @@
t = self.get_transport()
names = FileNames(t, 'index')
names.initialise()
- name1 = names.allocate()
- name2 = names.allocate()
- names.remove(name1)
- self.assertEqual(set([name2]), names.names())
+ names.allocate('0')
+ names.allocate('1')
+ names.remove('0')
+ self.assertEqual(set(['1']), names.names())
+
+ def test_roundtrip_hash_name(self):
+ t = self.get_transport()
+ names = FileNames(t, 'index')
+ names.initialise()
+ names.allocate('0123456789abcdef0123456789abcdef')
+ names.save()
+ names = FileNames(t, 'index')
+ names.load()
+ self.assertEqual(set(['0123456789abcdef0123456789abcdef']),
+ names.names())
+
More information about the bazaar-commits
mailing list