Patchwork [2,of,4,flagprocessor,v11] revlog: pass revlog flags to addrevision

mail settings
Submitter Remi Chaintron
Date Jan. 10, 2017, 5:16 p.m.
Message ID <f88e4cbc4f2902ca7e6e.1484068608@remi-mbp2>
Download mbox | patch
Permalink /patch/18170/
State Accepted
Headers show


Remi Chaintron - Jan. 10, 2017, 5:16 p.m.
# HG changeset patch
# User Remi Chaintron <>
# Date 1483636567 0
#      Thu Jan 05 17:16:07 2017 +0000
# Node ID f88e4cbc4f2902ca7e6e73bd6267cc40594e2610
# Parent  4bf0d79a325731f9dc7ec55c8c13f206bbe32e27
revlog: pass revlog flags to addrevision

Adding the ability to passing flags to addrevision instead of simply passing
default flags to _addrevision will allow extensions relying on flag transforms
to wrap around addrevision() in order to update revlog flags.

The first use case of this patch will be the lfs extension marking nodes as
stored externally when the contents are larger than the defined threshold.

One of the reasons leading to setting flags in addrevision() wrappers in the
flag processor design is that it allows to detect files larger than the 2GB
limit before the check is performed, which allows lfs to transform the contents
into metadata.


diff --git a/mercurial/ b/mercurial/
--- a/mercurial/
+++ b/mercurial/
@@ -1328,7 +1328,7 @@ 
     def addrevision(self, text, transaction, link, p1, p2, cachedelta=None,
-                    node=None):
+                    node=None, flags=REVIDX_DEFAULT_FLAGS):
         """add a revision to the log
         text - the revision data to add
@@ -1339,6 +1339,7 @@ 
         node - nodeid of revision; typically node is not specified, and it is
             computed by default as hash(text, p1, p2), however subclasses might
             use different hashing method (and override checkhash() in such case)
+        flags - the known flags to set on the revision
         if link == nullrev:
             raise RevlogError(_("attempted to add linkrev -1 to %s")
@@ -1359,7 +1360,7 @@ 
         ifh = self.opener(self.indexfile, "a+", checkambig=self._checkambig)
             return self._addrevision(node, text, transaction, link, p1, p2,
-                                     REVIDX_DEFAULT_FLAGS, cachedelta, ifh, dfh)
+                                     flags, cachedelta, ifh, dfh)
             if dfh: