tests: Enable rhg fallback to Python by default in tests
authorSimon Sapin <simon.sapin@octobus.net>
Tue, 02 Mar 2021 22:42:10 +0100
changeset 46736 a6553ba1c598
parent 46735 08a35cec14d4
child 46737 78e6700ab009
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
tests/run-tests.py
tests/test-rhg.t
--- 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