mercurial/revlog.py
changeset 112 aea6562add6c
parent 98 3dde7c87e36d
child 115 39b438eeb25a
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -16,10 +16,23 @@ def bin(node): return binascii.unhexlify
 def short(node): return hex(node[:4])
 
 def compress(text):
-    return zlib.compress(text)
+    if not text: return text
+    if len(text) < 44:
+        if text[0] == '\0': return text
+        return 'u' + text
+    bin = zlib.compress(text)
+    if len(bin) > len(text):
+        if text[0] == '\0': return text
+        return 'u' + text
+    return bin
 
 def decompress(bin):
-    return zlib.decompress(bin)
+    if not bin: return bin
+    t = bin[0]
+    if t == '\0': return bin
+    if t == 'x': return zlib.decompress(bin)
+    if t == 'u': return bin[1:]
+    raise "unknown compression type %s" % t
 
 def hash(text, p1, p2):
     l = [p1, p2]