Rev 3882: Hide the .basis_delta variable, and require callers to use .get_basis_delta() in http://bzr.arbash-meinel.com/branches/bzr/1.11/differ_serializer

John Arbash Meinel john at arbash-meinel.com
Fri Dec 5 16:29:10 GMT 2008


At http://bzr.arbash-meinel.com/branches/bzr/1.11/differ_serializer

------------------------------------------------------------
revno: 3882
revision-id: john at arbash-meinel.com-20081205162905-12c9k3esfetyes4a
parent: john at arbash-meinel.com-20081205160704-ti2a80z9tvqehwws
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: differ_serializer
timestamp: Fri 2008-12-05 10:29:05 -0600
message:
  Hide the .basis_delta variable, and require callers to use .get_basis_delta()
  This allows us to check that the callers were sure they would be
  generating a proper delta, by using CommitBuilder.record_delete() correctly.
-------------- next part --------------
=== modified file 'bzrlib/commit.py'
--- a/bzrlib/commit.py	2008-12-05 16:02:33 +0000
+++ b/bzrlib/commit.py	2008-12-05 16:29:05 +0000
@@ -352,9 +352,9 @@
                     entries_title="Directory")
             self.builder = self.branch.get_commit_builder(self.parents,
                 self.config, timestamp, timezone, committer, revprops, rev_id)
-            
+
             try:
-                self.builder.recording_deletes()
+                self.builder.will_record_deletes()
                 # find the location being committed to
                 if self.bound_branch:
                     master_location = self.master_branch.base
@@ -412,7 +412,7 @@
             # Make the working tree up to date with the branch
             self._set_progress_stage("Updating the working tree")
             self.work_tree.update_basis_by_delta(self.rev_id,
-                 self.builder.basis_delta)
+                 self.builder.get_basis_delta())
             self.reporter.completed(new_revno, self.rev_id)
             self._process_post_hooks(old_revno, new_revno)
         finally:

=== modified file 'bzrlib/repository.py'
--- a/bzrlib/repository.py	2008-12-05 16:07:04 +0000
+++ b/bzrlib/repository.py	2008-12-05 16:29:05 +0000
@@ -67,10 +67,10 @@
 class CommitBuilder(object):
     """Provides an interface to build up a commit.
 
-    This allows describing a tree to be committed without needing to 
+    This allows describing a tree to be committed without needing to
     know the internals of the format of the repository.
     """
-    
+
     # all clients should supply tree roots.
     record_root_entry = True
     # the default CommitBuilder does not manage trees whose root is versioned.
@@ -119,7 +119,11 @@
 
         self._generate_revision_if_needed()
         self.__heads = graph.HeadsCache(repository.get_graph()).heads
-        self.basis_delta = []
+        self._basis_delta = []
+        # API compatibility, older code that used CommitBuilder did not call
+        # .record_delete(), which means the delta that is computed would not be
+        # valid. Callers that will call record_delete() should call
+        # .will_record_deletes() to indicate that.
         self._recording_deletes = False
 
     def _validate_unicode_text(self, text, context):
@@ -233,38 +237,53 @@
         if ie.file_id not in basis_inv:
             # add
             result = (None, path, ie.file_id, ie)
-            self.basis_delta.append(result)
+            self._basis_delta.append(result)
             return result
         elif ie != basis_inv[ie.file_id]:
             # common but altered
             # TODO: avoid tis id2path call.
             result = (basis_inv.id2path(ie.file_id), path, ie.file_id, ie)
-            self.basis_delta.append(result)
+            self._basis_delta.append(result)
             return result
         else:
             # common, unaltered
             return None
 
+    def get_basis_delta(self):
+        """Return the complete inventory delta versus the basis inventory.
+
+        This has been built up with the calls to record_delete and
+        record_entry_contents. The client must have already called
+        will_record_deletes() to indicate that they will be generating a
+        complete delta.
+
+        :return: An inventory delta, suitable for use with apply_delta, or
+            Repository.add_inventory_by_delta, etc.
+        """
+        if not self._recording_deletes:
+            raise AssertionError("recording deletes not activated.")
+        return self._basis_delta
+
     def record_delete(self, path, file_id):
         """Record that a delete occured against a basis tree.
 
         This is an optional API - when used it adds items to the basis_delta
         being accumulated by the commit builder. It cannot be called unless the
-        method recording_deletes() has been called to inform the builder that a
-        delta is being supplied.
+        method will_record_deletes() has been called to inform the builder that
+        a delta is being supplied.
 
         :param path: The path of the thing deleted.
         :param file_id: The file id that was deleted.
         """
         if not self._recording_deletes:
             raise AssertionError("recording deletes not activated.")
-        self.basis_delta.append((path, None, file_id, None))
+        self._basis_delta.append((path, None, file_id, None))
 
-    def recording_deletes(self):
+    def will_record_deletes(self):
         """Tell the commit builder that deletes are being notified.
 
         This enables the accumulation of an inventory delta; for the resulting
-        commit to be valid deletes against the basis MUST be recorded via
+        commit to be valid, deletes against the basis MUST be recorded via
         builder.record_delete().
         """
         self._recording_deletes = True
@@ -338,7 +357,7 @@
                 else:
                     # add
                     delta = (None, path, ie.file_id, ie)
-                self.basis_delta.append(delta)
+                self._basis_delta.append(delta)
                 return delta, False, None
             else:
                 # we don't need to commit this, because the caller already



More information about the bazaar-commits mailing list