From patchwork Tue Oct 8 21:04:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D7026: treemanifest: move out of experimental From: phabricator X-Patchwork-Id: 42124 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Tue, 8 Oct 2019 21:04:59 +0000 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 To: pulkit, durin42, #hg-reviewers Cc: mercurial-devel 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 < [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