D7026: treemanifest: move out of experimental

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed Oct 9 00:16:48 EDT 2019


the storage session is more about small configuration of the storage 
system without impact on the repository. The `format` section is more 
appropriate for things that deeply impact the repository format.

So this should probably at least lives in the `format` as 
`format.use-tree-manifest`.

However, this is also the first "scheme" change we get. repository using 
tree-manifest will never be able to push to a repository not using it. 
That make `tree-manifest` different from anything that live in the 
`format` section right now.

So maybe: `format.manifest-scheme=tree-manifest` ?

On 10/8/19 11:04 PM, pulkit (Pulkit Goyal) wrote:
> 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> 

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list