marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  We already know how to serialize and de-serialize and enty. So lets just do 
that
  and modify the entry tuple directly.
  
  This avoid having to duplicated binary operation in complicated code.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D10641

AFFECTED FILES
  mercurial/pure/parsers.py

CHANGE DETAILS

diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -290,17 +290,17 @@
         if rev < 0:
             raise KeyError
         self._check_index(rev)
-        sidedata_format = b">Qi"
-        packed_size = struct.calcsize(sidedata_format)
-        if rev >= self._lgt:
-            packed = _pack(sidedata_format, sidedata_offset, sidedata_length)
-            old = self._extra[rev - self._lgt]
-            offset_flags = struct.pack(b">Q", offset_flags)
-            new = offset_flags + old[8:64] + packed + old[64 + packed_size :]
-            self._extra[rev - self._lgt] = new
-        else:
+        if rev < self._lgt:
             msg = b"cannot rewrite entries outside of this transaction"
             raise KeyError(msg)
+        else:
+            entry = list(self[rev])
+            entry[0] = offset_flags
+            entry[8] = sidedata_offset
+            entry[9] = sidedata_length
+            entry = tuple(entry)
+            new = self._pack_entry(entry)
+            self._extra[rev - self._lgt] = new
 
     def _unpack_entry(self, data):
         return self.index_format.unpack(data)



To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to