[Pkg-bazaar-commits] ./bzr/unstable r207: Revfile: compress data going into datafile if that would be worthwhile

mbp at sourcefrog.net mbp at sourcefrog.net
Fri Apr 10 07:44:02 UTC 2009


------------------------------------------------------------
revno: 207
committer: mbp at sourcefrog.net
timestamp: Sat 2005-04-09 15:06:36 +1000
message:
  Revfile: compress data going into datafile if that would be worthwhile
modified:
  bzrlib/revfile.py
-------------- next part --------------
=== modified file 'bzrlib/revfile.py'
--- a/bzrlib/revfile.py	2005-04-09 04:58:33 +0000
+++ b/bzrlib/revfile.py	2005-04-09 05:06:36 +0000
@@ -88,6 +88,8 @@
 I_OFFSET = 3
 I_LEN = 4
 
+FL_GZIP = 1
+
 
 class RevfileError(Exception):
     pass
@@ -132,8 +134,6 @@
                                    % (h, self.basename))
 
 
-        
-
 
     def revision(self, rev):
         base = self.index[rev][0]
@@ -172,8 +172,20 @@
             return _NO_RECORD        
 
 
-    def _add_common(self, text_sha, data, flags, base):
-        """Add pre-processed data, can be either full text or delta."""
+    def _add_common(self, text_sha, data, base):
+        """Add pre-processed data, can be either full text or delta.
+
+        This does the compression if that makes sense."""
+
+        flags = 0
+        if len(data) > 50:
+            # don't do compression if it's too small; it's unlikely to win
+            # enough to be worthwhile
+            compr_data = zlib.compress(data)
+            if len(compr_data) < len(data):
+                data = compr_data
+                flags = FL_GZIP
+        
         idx = len(self)
         self.datafile.seek(0, 2)        # to end
         self.idxfile.seek(0, 2)
@@ -203,7 +215,7 @@
         This is not compressed against any reference version.
 
         Returns the index for that text."""
-        return self._add_common(text_sha, text, 0, _NO_RECORD)
+        return self._add_common(text_sha, text, _NO_RECORD)
 
 
     def _add_delta(self, text, text_sha, base):
@@ -211,7 +223,7 @@
         self._check_index(base)
         base_text = self.get(base)
         data = mdiff.bdiff(base_text, text)
-        return self._add_common(text_sha, data, 0, base)
+        return self._add_common(text_sha, data, base)
 
 
     def add(self, text, base=_NO_RECORD):
@@ -224,7 +236,7 @@
         if base == _NO_RECORD:
             return self._add_full_text(text, text_sha)
         else:
-            return self._add_delta(self, text, text_sha, base)
+            return self._add_delta(text, text_sha, base)
 
 
     def addrevision(self, text, changeset):
@@ -376,7 +388,7 @@
         new_idx = r.add(sys.stdin.read())
         print 'added idx %d' % new_idx
     elif cmd == 'add-delta':
-        new_idx = r._add_delta(sys.stdin.read(), int(argv[2]))
+        new_idx = r.add(sys.stdin.read(), int(argv[2]))
         print 'added idx %d' % new_idx
     elif cmd == 'dump':
         r.dump()



More information about the Pkg-bazaar-commits mailing list