revlog: fix resolution of revlog version 0 stable
authorYuya Nishihara <yuya@tcha.org>
Mon, 21 Jan 2019 22:14:29 +0900
branchstable
changeset 41302 c953c2a94d68
parent 41301 13c23396c7fe
child 41303 76873548b051
revlog: fix resolution of revlog version 0 This partially backs out cecf3f8bccd3, "revlog: always process opener options." My understanding is that if there's no "revlog1" nor "revlog2" in .hg/requires, the repository should stick to the v0 format. The reasoning is briefly described in 31a5973fcf96, "revlog: get rid of defversion." Maybe we can drop support for missing opener options, but I didn't do that in this patch.
mercurial/revlog.py
tests/test-clone.t
--- a/mercurial/revlog.py	Sun Jan 20 11:57:36 2019 +0900
+++ b/mercurial/revlog.py	Mon Jan 21 22:14:29 2019 +0900
@@ -396,6 +396,11 @@
             newversionflags = REVLOGV1 | FLAG_INLINE_DATA
             if 'generaldelta' in opts:
                 newversionflags |= FLAG_GENERALDELTA
+        elif getattr(self.opener, 'options', None) is not None:
+            # If options provided but no 'revlog*' found, the repository
+            # would have no 'requires' file in it, which means we have to
+            # stick to the old format.
+            newversionflags = REVLOGV0
         else:
             newversionflags = REVLOG_DEFAULT_VERSION
 
--- a/tests/test-clone.t	Sun Jan 20 11:57:36 2019 +0900
+++ b/tests/test-clone.t	Mon Jan 21 22:14:29 2019 +0900
@@ -717,6 +717,9 @@
   $ hg -R src commit -m '#0'
   $ hg -R src log -q
   0:e1bab28bca43
+  $ hg -R src debugrevlog -c | egrep 'format|flags'
+  format : 0
+  flags  : (none)
   $ hg clone -U -q src dst
   $ hg -R dst log -q
   0:e1bab28bca43