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