tests: Enable rhg fallback to Python by default in tests
This premise of `run-tests.py --rhg`: fallback should make
`rhg` behave the same as `hg`, except faster in some cases.
To test run the whole test suite with installed `rhg` as `hg`
and with fallback enabled.
Differential Revision: https://phab.mercurial-scm.org/D10187
--- a/tests/run-tests.py Fri Mar 12 18:45:32 2021 +0100
+++ b/tests/run-tests.py Tue Mar 02 22:42:10 2021 +0100
@@ -967,7 +967,6 @@
slowtimeout=None,
usechg=False,
chgdebug=False,
- rhg_fallback_exe=None,
useipv6=False,
):
"""Create a test from parameters.
@@ -1025,7 +1024,6 @@
self._hgcommand = hgcommand or b'hg'
self._usechg = usechg
self._chgdebug = chgdebug
- self._rhg_fallback_exe = rhg_fallback_exe
self._useipv6 = useipv6
self._aborted = False
@@ -1508,12 +1506,6 @@
hgrc.write(b'ipv6 = %r\n' % self._useipv6)
hgrc.write(b'server-header = testing stub value\n')
- if self._rhg_fallback_exe:
- hgrc.write(b'[rhg]\n')
- hgrc.write(
- b'fallback-executable = %s\n' % self._rhg_fallback_exe
- )
-
for opt in self._extraconfigopts:
section, key = _sys2bytes(opt).split(b'.', 1)
assert b'=' in key, (
@@ -2999,7 +2991,6 @@
self._coveragefile = None
self._createdfiles = []
self._hgcommand = None
- self._rhg_fallback_exe = None
self._hgpath = None
self._portoffset = 0
self._ports = {}
@@ -3140,10 +3131,17 @@
chgbindir = os.path.dirname(os.path.realpath(self.options.with_chg))
self._hgcommand = os.path.basename(self.options.with_chg)
- # set fallback executable path, then replace "hg" command by "rhg"
+ # configure fallback and replace "hg" command by "rhg"
rhgbindir = self._bindir
if self.options.rhg or self.options.with_rhg:
- self._rhg_fallback_exe = os.path.join(self._bindir, self._hgcommand)
+ # Affects configuration. Alternatives would be setting configuration through
+ # `$HGRCPATH` but some tests override that, or changing `_hgcommand` to include
+ # `--config` but that disrupts tests that print command lines and check expected
+ # output.
+ osenvironb[b'RHG_ON_UNSUPPORTED'] = b'fallback'
+ osenvironb[b'RHG_FALLBACK_EXECUTABLE'] = os.path.join(
+ self._bindir, self._hgcommand
+ )
if self.options.rhg:
self._hgcommand = b'rhg'
elif self.options.with_rhg:
@@ -3477,7 +3475,6 @@
hgcommand=self._hgcommand,
usechg=bool(self.options.with_chg or self.options.chg),
chgdebug=self.options.chg_debug,
- rhg_fallback_exe=self._rhg_fallback_exe,
useipv6=useipv6,
**kwds
)
--- a/tests/test-rhg.t Fri Mar 12 18:45:32 2021 +0100
+++ b/tests/test-rhg.t Tue Mar 02 22:42:10 2021 +0100
@@ -11,8 +11,10 @@
> fi
> }
+ $ NO_FALLBACK="env RHG_ON_UNSUPPORTED=abort"
+
Unimplemented command
- $ rhg unimplemented-command
+ $ $NO_FALLBACK rhg unimplemented-command
unsupported feature: error: Found argument 'unimplemented-command' which wasn't expected, or isn't valid in this context
USAGE:
@@ -25,35 +27,35 @@
[252]
Finding root
- $ rhg root
+ $ $NO_FALLBACK rhg root
abort: no repository found in '$TESTTMP' (.hg not found)!
[255]
$ hg init repository
$ cd repository
- $ rhg root
+ $ $NO_FALLBACK rhg root
$TESTTMP/repository
Reading and setting configuration
$ echo "[ui]" >> $HGRCPATH
$ echo "username = user1" >> $HGRCPATH
- $ rhg config ui.username
+ $ $NO_FALLBACK rhg config ui.username
user1
$ echo "[ui]" >> .hg/hgrc
$ echo "username = user2" >> .hg/hgrc
- $ rhg config ui.username
+ $ $NO_FALLBACK rhg config ui.username
user2
- $ rhg --config ui.username=user3 config ui.username
+ $ $NO_FALLBACK rhg --config ui.username=user3 config ui.username
user3
Unwritable file descriptor
- $ rhg root > /dev/full
+ $ $NO_FALLBACK rhg root > /dev/full
abort: No space left on device (os error 28)
[255]
Deleted repository
$ rm -rf `pwd`
- $ rhg root
+ $ $NO_FALLBACK rhg root
abort: $ENOENT$: current directory
[255]
@@ -68,7 +70,7 @@
> hg commit -m "commit $i" -q
Listing tracked files from root
- $ rhg files
+ $ $NO_FALLBACK rhg files
file1
file2
file3
@@ -76,13 +78,13 @@
Listing tracked files from subdirectory
$ mkdir -p path/to/directory
$ cd path/to/directory
- $ rhg files
+ $ $NO_FALLBACK rhg files
../../../file1
../../../file2
../../../file3
Listing tracked files through broken pipe
- $ rhg files | head -n 1
+ $ $NO_FALLBACK rhg files | head -n 1
../../../file1
Debuging data in inline index
@@ -95,20 +97,20 @@
> hg add file-$i
> hg commit -m "Commit $i" -q
> done
- $ rhg debugdata -c 2
+ $ $NO_FALLBACK rhg debugdata -c 2
8d0267cb034247ebfa5ee58ce59e22e57a492297
test
0 0
file-3
Commit 3 (no-eol)
- $ rhg debugdata -m 2
+ $ $NO_FALLBACK rhg debugdata -m 2
file-1\x00b8e02f6433738021a065f94175c7cd23db5f05be (esc)
file-2\x005d9299349fc01ddd25d0070d149b124d8f10411e (esc)
file-3\x002661d26c649684b482d10f91960cc3db683c38b4 (esc)
Debuging with full node id
- $ rhg debugdata -c `hg log -r 0 -T '{node}'`
+ $ $NO_FALLBACK rhg debugdata -c `hg log -r 0 -T '{node}'`
d1d1c679d3053e8926061b6f45ca52009f011e3f
test
0 0
@@ -124,16 +126,16 @@
cf8b83f14ead62b374b6e91a0e9303b85dfd9ed7
91c6f6e73e39318534dc415ea4e8a09c99cd74d6
6ae9681c6d30389694d8701faf24b583cf3ccafe
- $ rhg files -r cf8b83
+ $ $NO_FALLBACK rhg files -r cf8b83
file-1
file-2
file-3
- $ rhg cat -r cf8b83 file-2
+ $ $NO_FALLBACK rhg cat -r cf8b83 file-2
2
- $ rhg cat -r c file-2
+ $ $NO_FALLBACK rhg cat -r c file-2
abort: ambiguous revision identifier c
[255]
- $ rhg cat -r d file-2
+ $ $NO_FALLBACK rhg cat -r d file-2
2
Cat files
@@ -144,37 +146,36 @@
$ echo "original content" > original
$ hg add original
$ hg commit -m "add original" original
- $ rhg cat -r 0 original
+ $ $NO_FALLBACK rhg cat -r 0 original
original content
Cat copied file should not display copy metadata
$ hg copy original copy_of_original
$ hg commit -m "add copy of original"
- $ rhg cat -r 1 copy_of_original
+ $ $NO_FALLBACK rhg cat -r 1 copy_of_original
original content
Fallback to Python
- $ rhg cat original
+ $ $NO_FALLBACK rhg cat original
unsupported feature: `rhg cat` without `--rev` / `-r`
[252]
- $ FALLBACK="--config rhg.on-unsupported=fallback"
- $ rhg cat original $FALLBACK
+ $ rhg cat original
original content
- $ rhg cat original $FALLBACK --config rhg.fallback-executable=false
+ $ rhg cat original --config rhg.fallback-executable=false
[1]
- $ rhg cat original $FALLBACK --config rhg.fallback-executable=hg-non-existent
+ $ rhg cat original --config rhg.fallback-executable=hg-non-existent
tried to fall back to a 'hg-non-existent' sub-process but got error $ENOENT$
unsupported feature: `rhg cat` without `--rev` / `-r`
[252]
- $ rhg cat original $FALLBACK --config rhg.fallback-executable="$RHG"
+ $ rhg cat original --config rhg.fallback-executable="$RHG"
Blocking recursive fallback. The 'rhg.fallback-executable = */rust/target/release/rhg' config points to `rhg` itself. (glob)
unsupported feature: `rhg cat` without `--rev` / `-r`
[252]
Requirements
- $ rhg debugrequirements
+ $ $NO_FALLBACK rhg debugrequirements
dotencode
fncache
generaldelta
@@ -183,20 +184,20 @@
store
$ echo indoor-pool >> .hg/requires
- $ rhg files
+ $ $NO_FALLBACK rhg files
unsupported feature: repository requires feature unknown to this Mercurial: indoor-pool
[252]
- $ rhg cat -r 1 copy_of_original
+ $ $NO_FALLBACK rhg cat -r 1 copy_of_original
unsupported feature: repository requires feature unknown to this Mercurial: indoor-pool
[252]
- $ rhg debugrequirements
+ $ $NO_FALLBACK rhg debugrequirements
unsupported feature: repository requires feature unknown to this Mercurial: indoor-pool
[252]
$ echo -e '\xFF' >> .hg/requires
- $ rhg debugrequirements
+ $ $NO_FALLBACK rhg debugrequirements
abort: corrupted repository: parse error in 'requires' file
[255]
@@ -205,7 +206,7 @@
$ rm -rf repository
$ hg init repository
$ cd repository
- $ rhg debugrequirements | grep nodemap
+ $ $NO_FALLBACK rhg debugrequirements | grep nodemap
[1]
$ hg debugbuilddag .+5000 --overwritten-file --config "storage.revlog.nodemap.mode=warn"
$ hg id -r tip
@@ -213,14 +214,14 @@
$ ls .hg/store/00changelog*
.hg/store/00changelog.d
.hg/store/00changelog.i
- $ rhg files -r c3ae8dec9fad
+ $ $NO_FALLBACK rhg files -r c3ae8dec9fad
of
$ cd $TESTTMP
$ rm -rf repository
$ hg --config format.use-persistent-nodemap=True init repository
$ cd repository
- $ rhg debugrequirements | grep nodemap
+ $ $NO_FALLBACK rhg debugrequirements | grep nodemap
persistent-nodemap
$ hg debugbuilddag .+5000 --overwritten-file --config "storage.revlog.nodemap.mode=warn"
$ hg id -r tip
@@ -232,9 +233,9 @@
.hg/store/00changelog.n
Specifying revisions by changeset ID
- $ rhg files -r c3ae8dec9fad
+ $ $NO_FALLBACK rhg files -r c3ae8dec9fad
of
- $ rhg cat -r c3ae8dec9fad of
+ $ $NO_FALLBACK rhg cat -r c3ae8dec9fad of
r5000
Crate a shared repository
@@ -254,9 +255,9 @@
And check that basic rhg commands work with sharing
- $ rhg files -R repo2
+ $ $NO_FALLBACK rhg files -R repo2
repo2/a
- $ rhg -R repo2 cat -r 0 repo2/a
+ $ $NO_FALLBACK rhg -R repo2 cat -r 0 repo2/a
a
Same with relative sharing
@@ -265,9 +266,9 @@
updating working directory
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- $ rhg files -R repo3
+ $ $NO_FALLBACK rhg files -R repo3
repo3/a
- $ rhg -R repo3 cat -r 0 repo3/a
+ $ $NO_FALLBACK rhg -R repo3 cat -r 0 repo3/a
a
Same with share-safe
@@ -290,9 +291,9 @@
And check that basic rhg commands work with sharing
$ cd repo5
- $ rhg files
+ $ $NO_FALLBACK rhg files
a
- $ rhg cat -r 0 a
+ $ $NO_FALLBACK rhg cat -r 0 a
a
The blackbox extension is supported
@@ -301,7 +302,7 @@
$ echo "blackbox =" >> $HGRCPATH
$ echo "[blackbox]" >> $HGRCPATH
$ echo "maxsize = 1" >> $HGRCPATH
- $ rhg files > /dev/null
+ $ $NO_FALLBACK rhg files > /dev/null
$ cat .hg/blackbox.log
????/??/?? ??:??:??.??? * @d3873e73d99ef67873dac33fbcc66268d5d2b6f4 (*)> (rust) files exited 0 after 0.??? seconds (glob)
$ cat .hg/blackbox.log.1