update: use context manager for config override (API)
Note that update wasn't resetting the value before, so any extensions
that called commands.update() and relied on ui.forcemerge being set
after it returned would now have to set it themselves.
(There technically a small API change in all of the patches in this
series, I believe: If extensions relied on the methods to *clear*
ui.forcemerge, then they would have to do that themselves now, because
ui.configoverride() actually restores the previous config, it doesn't
just clear it like these functions did before.)
Differential Revision: https://phab.mercurial-scm.org/D3741
In this test, we want to test LFS bundle application on both LFS and non-LFS
repos.
To make it more interesting, the file revisions will contain hg filelog
metadata ('\1\n'). The bundle will have 1 file revision overlapping with the
destination repo.
# rev 1 2 3
# repo: yes yes no
# bundle: no (base) yes yes (deltabase: 2 if possible)
It is interesting because rev 2 could have been stored as LFS in the repo, and
non-LFS in the bundle; or vice-versa.
Init
$ cat >> $HGRCPATH << EOF
> [extensions]
> lfs=
> drawdag=$TESTDIR/drawdag.py
> [lfs]
> url=file:$TESTTMP/lfs-remote
> EOF
Helper functions
$ commitxy() {
> hg debugdrawdag "$@" <<'EOS'
> Y # Y/X=\1\nAAAA\nE\nF
> | # Y/Y=\1\nAAAA\nG\nH
> X # X/X=\1\nAAAA\nC\n
> # X/Y=\1\nAAAA\nD\n
> EOS
> }
$ commitz() {
> hg debugdrawdag "$@" <<'EOS'
> Z # Z/X=\1\nAAAA\nI\n
> | # Z/Y=\1\nAAAA\nJ\n
> | # Z/Z=\1\nZ
> Y
> EOS
> }
$ enablelfs() {
> cat >> .hg/hgrc <<EOF
> [lfs]
> track=all()
> EOF
> }
Generate bundles
$ for i in normal lfs; do
> NAME=src-$i
> hg init $TESTTMP/$NAME
> cd $TESTTMP/$NAME
> [ $i = lfs ] && enablelfs
> commitxy
> commitz
> hg bundle -q --base X -r Y+Z $TESTTMP/$NAME.bundle
> SRCNAMES="$SRCNAMES $NAME"
> done
Prepare destination repos
$ for i in normal lfs; do
> NAME=dst-$i
> hg init $TESTTMP/$NAME
> cd $TESTTMP/$NAME
> [ $i = lfs ] && enablelfs
> commitxy
> DSTNAMES="$DSTNAMES $NAME"
> done
Apply bundles
$ for i in $SRCNAMES; do
> for j in $DSTNAMES; do
> echo ---- Applying $i.bundle to $j ----
> cp -R $TESTTMP/$j $TESTTMP/tmp-$i-$j
> cd $TESTTMP/tmp-$i-$j
> if hg unbundle $TESTTMP/$i.bundle -q 2>/dev/null; then
> hg verify -q && echo OK
> else
> echo CRASHED
> fi
> done
> done
---- Applying src-normal.bundle to dst-normal ----
OK
---- Applying src-normal.bundle to dst-lfs ----
OK
---- Applying src-lfs.bundle to dst-normal ----
OK
---- Applying src-lfs.bundle to dst-lfs ----
OK