Rev 15: Try out rio stanzas as part of the api. in lp:~jameinel/+junk/file_locking
John Arbash Meinel
john at arbash-meinel.com
Mon Sep 21 18:14:12 BST 2009
At lp:~jameinel/+junk/file_locking
------------------------------------------------------------
revno: 15
revision-id: john at arbash-meinel.com-20090921171402-552ryvpccp0dj5qc
parent: john at arbash-meinel.com-20090921163059-wiyn43m8e060b413
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: file_locking
timestamp: Mon 2009-09-21 12:14:02 -0500
message:
Try out rio stanzas as part of the api.
-------------- next part --------------
=== added file '.bzrignore'
--- a/.bzrignore 1970-01-01 00:00:00 +0000
+++ b/.bzrignore 2009-09-21 17:14:02 +0000
@@ -0,0 +1,1 @@
+./tags
=== modified file 'file_lock.py'
--- a/file_lock.py 2009-09-21 15:43:46 +0000
+++ b/file_lock.py 2009-09-21 17:14:02 +0000
@@ -16,6 +16,8 @@
"""Functionality for cooperative file locking."""
+import cStringIO
+
from bzrlib import (
errors,
lockdir,
@@ -136,14 +138,22 @@
raise ValueError('Content has invalid header.\n'
'Expected: %s'
'Found: %s' % (expected_header, bytes))
- lines = bytes.splitlines()
- return FileLockingInfo(lines[1:])
+ as_file = cStringIO.StringIO(bytes)
+ header = as_file.readline()
+ stanza = rio.read_stanza(as_file)
+ if stanza is None:
+ # Just a blank 'tracked_ids' section
+ tracked_ids = []
+ else:
+ tracked_ids = stanza.get_all('t')
+ return FileLockingInfo(tracked_ids)
def to_bytes(self, locking_info):
content = [self._HEADER, '\n']
+ stanza = rio.Stanza()
for tracked_id in sorted(locking_info._tracked_ids):
- content.append(tracked_id)
- content.append('\n')
+ stanza.add('t', tracked_id)
+ content.extend(stanza.to_lines())
return ''.join(content)
@@ -242,6 +252,9 @@
finally:
self._wt.unlock()
+ def track(self, path):
+ """Start tracking the given path."""
+
def is_tracked(self, path):
"""For the given path, is it considered 'tracked'?"""
=== modified file 'tests/test_file_lock.py'
--- a/tests/test_file_lock.py 2009-09-21 16:30:59 +0000
+++ b/tests/test_file_lock.py 2009-09-21 17:14:02 +0000
@@ -42,25 +42,30 @@
def test_from_bytes_with_ids(self):
s = file_lock.FileLockingInfoSerializer()
li = s.from_bytes('%s\n'
- 'file-id-1\n'
- 'dir-id-2\n'
+ 't: file-id-1\n'
+ 't: dir-id-2\n'
% s._HEADER)
self.assertEqual(set(['file-id-1', 'dir-id-2']), li._tracked_ids)
+ def test_to_bytes_trivial(self):
+ li = file_lock.FileLockingInfo([])
+ s = file_lock.FileLockingInfoSerializer()
+ self.assertEqualDiff('%s\n'
+ '\n' % s._HEADER, s.to_bytes(li))
def test_to_bytes(self):
li = file_lock.FileLockingInfo(['file-id-1', 'file-id-2'])
s = file_lock.FileLockingInfoSerializer()
self.assertEqualDiff('%s\n'
- 'file-id-1\n'
- 'file-id-2\n' % s._HEADER, s.to_bytes(li))
+ 't: file-id-1\n'
+ 't: file-id-2\n' % s._HEADER, s.to_bytes(li))
def test_to_bytes_is_sorted(self):
li = file_lock.FileLockingInfo(['file-id-1', 'file-id-2', 'dir-id-3'])
s = file_lock.FileLockingInfoSerializer()
self.assertEqualDiff('%s\n'
- 'dir-id-3\n'
- 'file-id-1\n'
- 'file-id-2\n' % s._HEADER, s.to_bytes(li))
+ 't: dir-id-3\n'
+ 't: file-id-1\n'
+ 't: file-id-2\n' % s._HEADER, s.to_bytes(li))
class TestHeldLockSerializer(tests.TestCase):
More information about the bazaar-commits
mailing list