D7026: treemanifest: move out of experimental

pulkit (Pulkit Goyal) phabricator at mercurial-scm.org
Tue Oct 8 17:04:59 EDT 2019


pulkit created this revision.
Herald added a reviewer: durin42.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  In recent sprint, we discussed that treemanifest should be moved out of
  experimental. The feature has been used inside Google, Facebook in some forms
  and was used inside Yandex too for narrow clones.
  
  There is an issue with diffing of large treemanifests and to fix that some
  Python code needs to be rewritted in C/Rust. This I think is not a blocker for
  taking treemanifest out of experimental.
  
  This patch renames config `experimental.treemanifest` to `storage.treemanifest`.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/changegroup.py
  mercurial/configitems.py
  mercurial/localrepo.py
  tests/test-narrow-clone-stream.t
  tests/test-narrow-commit.t
  tests/test-narrow-merge.t
  tests/test-narrow-share.t
  tests/test-narrow-sparse.t
  tests/test-narrow-strip.t
  tests/test-narrow-trackedcmd.t
  tests/test-narrow-widen-no-ellipsis.t
  tests/test-narrow-widen.t
  tests/test-narrow.t
  tests/test-strip-cross.t
  tests/test-treemanifest.t
  tests/test-upgrade-repo.t

CHANGE DETAILS

diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t
--- a/tests/test-upgrade-repo.t
+++ b/tests/test-upgrade-repo.t
@@ -35,7 +35,7 @@
 
 Do not yet support upgrading treemanifest repos
 
-  $ hg --config experimental.treemanifest=true init treemanifest
+  $ hg --config storage.treemanifest=true init treemanifest
   $ hg -R treemanifest debugupgraderepo
   abort: cannot upgrade repository; unsupported source requirement: treemanifest
   [255]
@@ -43,7 +43,7 @@
 Cannot add treemanifest requirement during upgrade
 
   $ hg init disallowaddedreq
-  $ hg -R disallowaddedreq --config experimental.treemanifest=true debugupgraderepo
+  $ hg -R disallowaddedreq --config storage.treemanifest=true debugupgraderepo
   abort: cannot upgrade repository; do not support adding requirement: treemanifest
   [255]
 
diff --git a/tests/test-treemanifest.t b/tests/test-treemanifest.t
--- a/tests/test-treemanifest.t
+++ b/tests/test-treemanifest.t
@@ -5,7 +5,7 @@
 
 Set up repo
 
-  $ hg --config experimental.treemanifest=True init repo
+  $ hg --config storage.treemanifest=True init repo
   $ cd repo
 
 Requirements get set on init
@@ -222,7 +222,7 @@
 Create clone with tree manifests enabled
 
   $ cd ..
-  $ hg clone --config experimental.treemanifest=1 \
+  $ hg clone --config storage.treemanifest=1 \
   >   http://localhost:$HGPORT repo-mixed -r 1
   adding changesets
   adding manifests
@@ -305,7 +305,7 @@
        0       4 064927a0648a 000000000000 000000000000
        1       5 25ecb8cb8618 000000000000 000000000000
   $ echo 2 > dir1/a
-  $ hg --config experimental.treemanifest=False ci -qm 'modify dir1/a'
+  $ hg --config storage.treemanifest=False ci -qm 'modify dir1/a'
   $ hg debugindex --dir dir1
      rev linkrev nodeid       p1           p2
        0       4 064927a0648a 000000000000 000000000000
@@ -392,7 +392,7 @@
 
 Pushing to an empty repo works
 
-  $ hg --config experimental.treemanifest=1 init clone
+  $ hg --config storage.treemanifest=1 init clone
   $ grep treemanifest clone/.hg/requires
   treemanifest
   $ hg push -R repo clone
@@ -414,7 +414,7 @@
 
 Create deeper repo with tree manifests.
 
-  $ hg --config experimental.treemanifest=True init deeprepo
+  $ hg --config storage.treemanifest=True init deeprepo
   $ cd deeprepo
 
   $ mkdir .A
@@ -673,7 +673,7 @@
   $ cat hg.pid >> $DAEMON_PIDS
   $ cd ..
 We can clone even with the knob turned off and we'll get a treemanifest repo.
-  $ hg clone --config experimental.treemanifest=False \
+  $ hg clone --config storage.treemanifest=False \
   >   --config experimental.changegroup3=True \
   >   http://localhost:$HGPORT deepclone
   requesting all changes
@@ -850,7 +850,7 @@
 
   $ mkdir grafted-dir-repo
   $ cd grafted-dir-repo
-  $ hg --config experimental.treemanifest=1 init
+  $ hg --config storage.treemanifest=1 init
   $ mkdir dir
   $ echo a > dir/file
   $ echo a > file
@@ -868,7 +868,7 @@
   created new head
   $ cd ..
 
-  $ hg --config experimental.treemanifest=1 clone --pull -r 1 \
+  $ hg --config storage.treemanifest=1 clone --pull -r 1 \
   >   grafted-dir-repo grafted-dir-repo-clone
   adding changesets
   adding manifests
diff --git a/tests/test-strip-cross.t b/tests/test-strip-cross.t
--- a/tests/test-strip-cross.t
+++ b/tests/test-strip-cross.t
@@ -164,13 +164,13 @@
 
 Now a similar test for a non-root manifest revlog
   $ cat >> $HGRCPATH <<EOF
-  > [experimental]
+  > [storage]
   > treemanifests = yes
   > EOF
   $ mkdir treemanifests
   $ cd treemanifests
   $ 
-  $ hg --config experimental.treemanifest=True init orig
+  $ hg --config storage.treemanifest=True init orig
   $ cd orig
   $ commit 'dir/file'
   $ commit 'dir/other'
@@ -179,7 +179,7 @@
   $ commit 'otherdir dir/file'
   $ commit 'otherdir dir/other' 'otherdir dir/file'
   $ cd ..
-  $ hg --config experimental.treemanifest=True clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
+  $ hg --config storage.treemanifest=True clone -q -U -r 1 -r 2 -r 3 -r 4 orig crossed
   $ cd crossed
   $ hg debugindex --dir dir
      rev linkrev nodeid       p1           p2
@@ -190,7 +190,7 @@
 
   $ cd ..
   $ for i in 2 3; do
-  >     hg --config experimental.treemanifest=True clone -q -U --pull crossed $i
+  >     hg --config storage.treemanifest=True clone -q -U --pull crossed $i
   >     echo "% Trying to strip revision $i"
   >     hg --cwd $i strip $i
   >     echo "% Verifying"
diff --git a/tests/test-narrow.t b/tests/test-narrow.t
--- a/tests/test-narrow.t
+++ b/tests/test-narrow.t
@@ -17,7 +17,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-widen.t b/tests/test-narrow-widen.t
--- a/tests/test-narrow-widen.t
+++ b/tests/test-narrow-widen.t
@@ -3,7 +3,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-widen-no-ellipsis.t b/tests/test-narrow-widen-no-ellipsis.t
--- a/tests/test-narrow-widen-no-ellipsis.t
+++ b/tests/test-narrow-widen-no-ellipsis.t
@@ -3,7 +3,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-trackedcmd.t b/tests/test-narrow-trackedcmd.t
--- a/tests/test-narrow-trackedcmd.t
+++ b/tests/test-narrow-trackedcmd.t
@@ -3,7 +3,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-strip.t b/tests/test-narrow-strip.t
--- a/tests/test-narrow-strip.t
+++ b/tests/test-narrow-strip.t
@@ -12,7 +12,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-sparse.t b/tests/test-narrow-sparse.t
--- a/tests/test-narrow-sparse.t
+++ b/tests/test-narrow-sparse.t
@@ -10,7 +10,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-share.t b/tests/test-narrow-share.t
--- a/tests/test-narrow-share.t
+++ b/tests/test-narrow-share.t
@@ -4,7 +4,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-merge.t b/tests/test-narrow-merge.t
--- a/tests/test-narrow-merge.t
+++ b/tests/test-narrow-merge.t
@@ -4,7 +4,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-commit.t b/tests/test-narrow-commit.t
--- a/tests/test-narrow-commit.t
+++ b/tests/test-narrow-commit.t
@@ -4,7 +4,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/tests/test-narrow-clone-stream.t b/tests/test-narrow-clone-stream.t
--- a/tests/test-narrow-clone-stream.t
+++ b/tests/test-narrow-clone-stream.t
@@ -6,7 +6,7 @@
 
 #if tree
   $ cat << EOF >> $HGRCPATH
-  > [experimental]
+  > [storage]
   > treemanifest = 1
   > EOF
 #endif
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -3515,7 +3515,7 @@
     # experimental config: format.use-side-data
     if ui.configbool(b'format', b'use-side-data'):
         requirements.add(SIDEDATA_REQUIREMENT)
-    if ui.configbool(b'experimental', b'treemanifest'):
+    if ui.configbool(b'storage', b'treemanifest'):
         requirements.add(b'treemanifest')
 
     revlogv2 = ui.config(b'experimental', b'revlogv2')
diff --git a/mercurial/configitems.py b/mercurial/configitems.py
--- a/mercurial/configitems.py
+++ b/mercurial/configitems.py
@@ -679,9 +679,6 @@
     b'experimental', b'sparse-read.min-gap-size', default=b'65K',
 )
 coreconfigitem(
-    b'experimental', b'treemanifest', default=False,
-)
-coreconfigitem(
     b'experimental', b'update.atomic-file', default=False,
 )
 coreconfigitem(
@@ -1056,6 +1053,10 @@
     b'storage', b'revlog.zstd.level', default=None,
 )
 coreconfigitem(
+    b'storage', b'treemanifest', default=False,
+    alias=[(b'experimental', b'treemanifest')],
+)
+coreconfigitem(
     b'server', b'bookmarks-pushkey-compat', default=True,
 )
 coreconfigitem(
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -1468,7 +1468,7 @@
     needv03 = False
     if (
         repo.ui.configbool(b'experimental', b'changegroup3')
-        or repo.ui.configbool(b'experimental', b'treemanifest')
+        or repo.ui.configbool(b'storage', b'treemanifest')
         or b'treemanifest' in repo.requirements
     ):
         # we keep version 03 because we need to to exchange treemanifest data



To: pulkit, durin42, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list