[PATCH 01 of 10] tests: use grep -E instead of obsolescent egrep

Raphaël Gomès raphael.gomes at octobus.net
Wed Jun 28 09:29:06 UTC 2023


Merged, thanks for the series!

On 6/28/23 02:06, Mads Kiilerich wrote:
> # HG changeset patch
> # User Mads Kiilerich <mads at kiilerich.com>
> # Date 1687782898 -7200
> #      Mon Jun 26 14:34:58 2023 +0200
> # Branch stable
> # Node ID 2790b07cd5da2be40fd5299ae114a49eb6196e55
> # Parent  42f761e97decbd95b5c3171ba83701828d60db24
> tests: use grep -E instead of obsolescent egrep
>
> Testing on Fedora 38 failed with:
>    egrep: warning: egrep is obsolescent; using grep -E
>
> The warning comes from
> https://git.savannah.gnu.org/cgit/grep.git/commit/?id=a9515624709865d480e3142fd959bccd1c9372d1
> . For further anecdotal evidence of the change, see
> https://www.phoronix.com/news/GNU-Grep-3.8-Stop-egrep-fgrep .
>
> This reverses the code check that goes back to e7d3b509af8b. grep -E is POSIX,
> but there is a risk that it doesn't work the same on all platforms - especially
> older Unix versions. It should however always be possible to put a GNU grep in
> $PATH before running the tests.
>
> diff --git a/contrib/check-code.py b/contrib/check-code.py
> --- a/contrib/check-code.py
> +++ b/contrib/check-code.py
> @@ -146,10 +146,7 @@ testpats = [
>               r'\[[^\]]+==',
>               '[ foo == bar ] is a bashism, use [ foo = bar ] instead',
>           ),
> -        (
> -            r'(^|\|\s*)grep (-\w\s+)*[^|]*[(|]\w',
> -            "use egrep for extended grep syntax",
> -        ),
> +        (r'(^|\|\s*)egrep', "use grep -E for extended grep syntax"),
>           (r'(^|\|\s*)e?grep .*\\S', "don't use \\S in regular expression"),
>           (r'(?<!!)/bin/', "don't use explicit paths for tools"),
>           (r'#!.*/bash', "don't use bash in shebang, use sh"),
> diff --git a/tests/remotefilelog-library.sh b/tests/remotefilelog-library.sh
> --- a/tests/remotefilelog-library.sh
> +++ b/tests/remotefilelog-library.sh
> @@ -69,5 +69,5 @@ ls_l() {
>   }
>   
>   identifyrflcaps() {
> -    xargs -n 1 echo | egrep '(remotefilelog|getflogheads|getfile)' | sort
> +    xargs -n 1 echo | grep -E '(remotefilelog|getflogheads|getfile)' | sort
>   }
> diff --git a/tests/test-archive.t b/tests/test-archive.t
> --- a/tests/test-archive.t
> +++ b/tests/test-archive.t
> @@ -51,12 +51,12 @@ hg subrepos are shared into existence on
>     $ hg -R clone1 update -C tip
>     cloning subrepo subrepo from $TESTTMP/test/subrepo
>     3 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ find share2 | egrep 'sharedpath|00.+\.i' | sort
> +  $ find share2 | grep -E 'sharedpath|00.+\.i' | sort
>     share2/.hg/sharedpath
>     share2/subrepo/.hg/sharedpath
>     $ hg -R share2 unshare
>     unsharing subrepo 'subrepo'
> -  $ find share2 | egrep 'sharedpath|00.+\.i' | sort
> +  $ find share2 | grep -E 'sharedpath|00.+\.i' | sort
>     share2/.hg/00changelog.i
>     share2/.hg/sharedpath.old
>     share2/.hg/store/00changelog.i
> @@ -566,7 +566,7 @@ old file -- date clamped to 1980
>     $ hg add old
>     $ hg commit -m old
>     $ hg archive ../old.zip
> -  $ unzip -l ../old.zip | grep -v -- ----- | egrep -v files$
> +  $ unzip -l ../old.zip | grep -v -- ----- | grep -E -v files$
>     Archive:  ../old.zip
>     \s*Length.* (re)
>     *172*80*00:00*old/.hg_archival.txt (glob)
> diff --git a/tests/test-bad-extension.t b/tests/test-bad-extension.t
> --- a/tests/test-bad-extension.t
> +++ b/tests/test-bad-extension.t
> @@ -57,7 +57,7 @@ another bad extension
>   
>   show traceback
>   
> -  $ hg -q help help --traceback 2>&1 | egrep ' extension|^Exception|Traceback|ImportError|ModuleNotFound'
> +  $ hg -q help help --traceback 2>&1 | grep -E ' extension|^Exception|Traceback|ImportError|ModuleNotFound'
>     *** failed to import extension "badext" from $TESTTMP/badext.py: bit bucket overflow
>     Traceback (most recent call last):
>     Exception: bit bucket overflow
> @@ -88,7 +88,7 @@ show traceback for ImportError of hgext.
>     $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \
>     > | grep -v '^ ' \
>     > | filterlog \
> -  > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound'
> +  > | grep -E 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound'
>     YYYY/MM/DD HH:MM:SS (PID)> loading extensions
>     YYYY/MM/DD HH:MM:SS (PID)> - processing 5 entries
>     YYYY/MM/DD HH:MM:SS (PID)>   - loading extension: gpg
> diff --git a/tests/test-blackbox.t b/tests/test-blackbox.t
> --- a/tests/test-blackbox.t
> +++ b/tests/test-blackbox.t
> @@ -393,7 +393,7 @@ a '*' entry in blackbox.track is interpr
>     > EOF
>   (only look for entries with specific logged sources, otherwise this test is
>   pretty brittle)
> -  $ hg blackbox | egrep '\[command(finish)?\]'
> +  $ hg blackbox | grep -E '\[command(finish)?\]'
>     1970-01-01 00:00:00.000 bob @0000000000000000000000000000000000000000 (5000) [commandfinish]> --config *blackbox.track=* --config *blackbox.logsource=True* init track_star exited 0 after * seconds (glob)
>     1970-01-01 00:00:00.000 bob @0000000000000000000000000000000000000000 (5000) [command]> blackbox
>     $ cd $TESTTMP
> diff --git a/tests/test-chg.t b/tests/test-chg.t
> --- a/tests/test-chg.t
> +++ b/tests/test-chg.t
> @@ -70,7 +70,7 @@ by default, system() should be redirecte
>   
>     $ touch foo
>     $ CHGDEBUG= HGEDITOR=cat chg ci -Am channeled --edit 2>&1 \
> -  > | egrep "HG:|run 'cat"
> +  > | grep -E "HG:|run 'cat"
>     chg: debug: * run 'cat "*"' at '$TESTTMP/editor' (glob)
>     HG: Enter commit message.  Lines beginning with 'HG:' are removed.
>     HG: Leave message empty to abort commit.
> @@ -84,7 +84,7 @@ but no redirection should be made if out
>     $ touch bar
>     $ CHGDEBUG= HGEDITOR=cat chg ci -Am bufferred --edit \
>     > --config extensions.pushbuffer="$TESTTMP/pushbuffer.py" 2>&1 \
> -  > | egrep "HG:|run 'cat"
> +  > | grep -E "HG:|run 'cat"
>     [1]
>   
>   check that commit commands succeeded:
> @@ -237,14 +237,14 @@ isolate socket directory for stable resu
>   
>   warm up server:
>   
> -  $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
> +  $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
>     chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
>   
>   new server should be started if extension modified:
>   
>     $ sleep 1
>     $ touch dummyext.py
> -  $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
> +  $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
>     chg: debug: * instruction: unlink $TESTTMP/extreload/chgsock/server-* (glob)
>     chg: debug: * instruction: reconnect (glob)
>     chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
> @@ -252,7 +252,7 @@ new server should be started if extensio
>   old server will shut down, while new server should still be reachable:
>   
>     $ sleep 2
> -  $ CHGDEBUG= chg log 2>&1 | (egrep 'instruction|start' || true)
> +  $ CHGDEBUG= chg log 2>&1 | (grep -E 'instruction|start' || true)
>   
>   socket file should never be unlinked by old server:
>   (simulates unowned socket by updating mtime, which makes sure server exits
> @@ -268,7 +268,7 @@ at polling cycle)
>   since no server is reachable from socket file, new server should be started:
>   (this test makes sure that old server shut down automatically)
>   
> -  $ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start'
> +  $ CHGDEBUG= chg log 2>&1 | grep -E 'instruction|start'
>     chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob)
>   
>   shut down servers and restore environment:
> @@ -495,7 +495,7 @@ share the same server
>     > }
>     $ newchg() {
>     >   chg --kill-chg-daemon
> -  >   filteredchg "$@" | egrep -v 'start cmdserver' || true
> +  >   filteredchg "$@" | grep -E -v 'start cmdserver' || true
>     > }
>   (--profile isn't permanently on just because it was specified when chg was
>   started)
> @@ -561,12 +561,12 @@ If CHGHG is not set, chg will set it bef
>     $ hg --kill-chg-daemon
>     $ HG=$CHGHG CHGHG= CHGDEBUG= hg debugshell -c \
>     >   'ui.write(b"CHGHG=%s\n" % ui.environ.get(b"CHGHG"))' 2>&1 \
> -  >   | egrep 'CHGHG|start'
> +  >   | grep -E 'CHGHG|start'
>     chg: debug: * start cmdserver at * (glob)
>     CHGHG=/*/install/bin/hg (glob)
>   
>   Running the same command a second time shouldn't spawn a new command server.
>     $ HG=$CHGHG CHGHG= CHGDEBUG= hg debugshell -c \
>     >   'ui.write(b"CHGHG=%s\n" % ui.environ.get(b"CHGHG"))' 2>&1 \
> -  >   | egrep 'CHGHG|start'
> +  >   | grep -E 'CHGHG|start'
>     CHGHG=/*/install/bin/hg (glob)
> diff --git a/tests/test-clone-stream-format.t b/tests/test-clone-stream-format.t
> --- a/tests/test-clone-stream-format.t
> +++ b/tests/test-clone-stream-format.t
> @@ -245,7 +245,7 @@ The resulting clone should not use share
>   
>     $ hg clone --quiet --stream -U http://localhost:$HGPORT clone-from-share
>     $ hg -R clone-from-share verify -q
> -  $ hg debugrequires -R clone-from-share | egrep 'share$'
> +  $ hg debugrequires -R clone-from-share | grep -E 'share$'
>     [1]
>   
>     $ killdaemons.py
> diff --git a/tests/test-clone.t b/tests/test-clone.t
> --- a/tests/test-clone.t
> +++ b/tests/test-clone.t
> @@ -714,7 +714,7 @@ Test clone from the repository in (emula
>     $ hg -R src commit -m '#0'
>     $ hg -R src log -q
>     0:e1bab28bca43
> -  $ hg -R src debugrevlog -c | egrep 'format|flags'
> +  $ hg -R src debugrevlog -c | grep -E 'format|flags'
>     format : 0
>     flags  : (none)
>     $ hg root -R src -T json | sed 's|\\\\|\\|g'
> diff --git a/tests/test-context-metadata.t b/tests/test-context-metadata.t
> --- a/tests/test-context-metadata.t
> +++ b/tests/test-context-metadata.t
> @@ -36,7 +36,7 @@ Tests about metadataonlyctx
>     date:        Thu Jan 01 00:00:00 1970 +0000
>     summary:     Changed
>     
> -  $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'parents=0' 2>&1 | egrep '^RuntimeError'
> +  $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'parents=0' 2>&1 | grep -E '^RuntimeError'
>     RuntimeError: can't reuse the manifest: its p1 doesn't match the new ctx p1
>   
>     $ hg --config extensions.metaedit=$TESTTMP/metaedit.py metaedit 'user=foo <foo at example.com>'
> diff --git a/tests/test-contrib-perf.t b/tests/test-contrib-perf.t
> --- a/tests/test-contrib-perf.t
> +++ b/tests/test-contrib-perf.t
> @@ -408,7 +408,7 @@ test  profile-benchmark option
>   
>   Function to check that statprof ran
>     $ statprofran () {
> -  >   egrep 'Sample count:|No samples recorded' > /dev/null
> +  >   grep -E 'Sample count:|No samples recorded' > /dev/null
>     > }
>     $ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.profile-benchmark=yes 2>&1 | statprofran
>   
> diff --git a/tests/test-convert-cvs-synthetic.t b/tests/test-convert-cvs-synthetic.t
> --- a/tests/test-convert-cvs-synthetic.t
> +++ b/tests/test-convert-cvs-synthetic.t
> @@ -108,7 +108,7 @@ merge file6 from trunk to v1_2
>   
>   cvs rlog output
>   
> -  $ cvscall -q rlog proj | egrep '^(RCS file|revision)'
> +  $ cvscall -q rlog proj | grep -E '^(RCS file|revision)'
>     RCS file: $TESTTMP/cvsrepo/proj/file1,v
>     revision 1.1
>     RCS file: $TESTTMP/cvsrepo/proj/Attic/file2,v
> diff --git a/tests/test-convert-hg-svn.t b/tests/test-convert-hg-svn.t
> --- a/tests/test-convert-hg-svn.t
> +++ b/tests/test-convert-hg-svn.t
> @@ -1,7 +1,7 @@
>   #require svn svn-bindings
>   
>     $ filter_svn_output () {
> -  >     egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
> +  >     grep -E -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
>     > }
>   
>     $ cat <<EOF >> $HGRCPATH
> diff --git a/tests/test-convert-svn-source.t b/tests/test-convert-svn-source.t
> --- a/tests/test-convert-svn-source.t
> +++ b/tests/test-convert-svn-source.t
> @@ -1,7 +1,7 @@
>   #require svn svn-bindings
>   
>     $ filter_svn_output () {
> -  >     egrep -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
> +  >     grep -E -v 'Committing|Updating|(^$)' | sed -e 's/done$//' || true
>     > }
>   
>     $ cat >> $HGRCPATH <<EOF
> diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t
> --- a/tests/test-copies-chain-merge.t
> +++ b/tests/test-copies-chain-merge.t
> @@ -1649,7 +1649,7 @@ We upgrade a repository that is not usin
>     > [format]
>     > exp-use-copies-side-data-changeset = yes
>     > EOF
> -  $ hg debugformat -v | egrep 'changelog-v2|revlog-v2|copies-sdc'
> +  $ hg debugformat -v | grep -E 'changelog-v2|revlog-v2|copies-sdc'
>     copies-sdc:          no    yes      no
>     revlog-v2:           no     no      no
>     changelog-v2:        no    yes      no
> @@ -1675,7 +1675,7 @@ We upgrade a repository that is not usin
>     > enabled=yes
>     > numcpus=8
>     > EOF
> -  $ hg debugformat -v  | egrep 'changelog-v2|revlog-v2|copies-sdc'
> +  $ hg debugformat -v  | grep -E 'changelog-v2|revlog-v2|copies-sdc'
>     copies-sdc:          no    yes      no
>     revlog-v2:           no     no      no
>     changelog-v2:        no    yes      no
> @@ -2919,14 +2919,14 @@ In this case, the file hash from "f-2" i
>   
>   Details on this hash ordering pick:
>   
> -  $ hg manifest --debug 'desc("g-1")' | egrep 'd$'
> +  $ hg manifest --debug 'desc("g-1")' | grep -E 'd$'
>     17ec97e605773eb44a117d1136b3849bcdc1924f 644   d (no-changeset !)
>     5cce88bf349f7c742bb440f2c53f81db9c294279 644   d (changeset !)
>     $ hg status --copies --rev 'desc("i-0")' --rev 'desc("g-1")' d
>     A d
>       a (no-changeset no-compatibility !)
>   
> -  $ hg manifest --debug 'desc("f-2")' | egrep 'd$'
> +  $ hg manifest --debug 'desc("f-2")' | grep -E 'd$'
>     7b79e2fe0c8924e0e598a82f048a7b024afa4d96 644   d (no-changeset !)
>     ae258f702dfeca05bf9b6a22a97a4b5645570f11 644   d (changeset !)
>     $ hg status --copies --rev 'desc("i-0")' --rev 'desc("f-2")' d
> diff --git a/tests/test-copies-in-changeset.t b/tests/test-copies-in-changeset.t
> --- a/tests/test-copies-in-changeset.t
> +++ b/tests/test-copies-in-changeset.t
> @@ -32,13 +32,13 @@ Check that copies are recorded correctly
>     $ hg init repo
>     $ cd repo
>   #if sidedata
> -  $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
> +  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
>     format-variant     repo config default
>     copies-sdc:         yes    yes      no
>     revlog-v2:           no     no      no
>     changelog-v2:       yes    yes      no
>   #else
> -  $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
> +  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
>     format-variant     repo config default
>     copies-sdc:          no     no      no
>     revlog-v2:           no     no      no
> @@ -419,7 +419,7 @@ Test upgrading/downgrading to sidedata s
>   
>   downgrading
>   
> -  $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
> +  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
>     format-variant     repo config default
>     copies-sdc:         yes    yes      no
>     revlog-v2:           no     no      no
> @@ -445,7 +445,7 @@ downgrading
>     processed revlogs:
>       - changelog
>     
> -  $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
> +  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
>     format-variant     repo config default
>     copies-sdc:          no     no      no
>     revlog-v2:           no     no      no
> @@ -470,7 +470,7 @@ upgrading
>     processed revlogs:
>       - changelog
>     
> -  $ hg debugformat -v | egrep 'format-variant|revlog-v2|copies-sdc|changelog-v2'
> +  $ hg debugformat -v | grep -E 'format-variant|revlog-v2|copies-sdc|changelog-v2'
>     format-variant     repo config default
>     copies-sdc:         yes    yes      no
>     revlog-v2:           no     no      no
> diff --git a/tests/test-debian-packages.t b/tests/test-debian-packages.t
> --- a/tests/test-debian-packages.t
> +++ b/tests/test-debian-packages.t
> @@ -15,16 +15,16 @@ Ensure debuild doesn't run the testsuite
>     $ ls *.deb | grep -v 'dbg'
>     mercurial_*.deb (glob)
>   should have .so and .py
> -  $ dpkg --contents mercurial_*.deb | egrep '(localrepo|parsers)'
> +  $ dpkg --contents mercurial_*.deb | grep -E '(localrepo|parsers)'
>     * ./usr/lib/python3/dist-packages/mercurial/cext/parsers*.so (glob)
>     * ./usr/lib/python3/dist-packages/mercurial/localrepo.py (glob)
>     * ./usr/lib/python3/dist-packages/mercurial/pure/parsers.py (glob)
>   should have zsh completions
> -  $ dpkg --contents mercurial_*.deb | egrep 'zsh.*[^/]$'
> +  $ dpkg --contents mercurial_*.deb | grep -E 'zsh.*[^/]$'
>     * ./usr/share/zsh/vendor-completions/_hg (glob)
>   should have chg
> -  $ dpkg --contents mercurial_*.deb | egrep 'chg$'
> +  $ dpkg --contents mercurial_*.deb | grep -E 'chg$'
>     * ./usr/bin/chg (glob)
>   chg should come with a man page
> -  $ dpkg --contents mercurial_*.deb | egrep 'man.*chg'
> +  $ dpkg --contents mercurial_*.deb | grep -E 'man.*chg'
>     * ./usr/share/man/man1/chg.1.gz (glob)
> diff --git a/tests/test-debugcommands.t b/tests/test-debugcommands.t
> --- a/tests/test-debugcommands.t
> +++ b/tests/test-debugcommands.t
> @@ -576,7 +576,7 @@ Test cache warming command
>   Test debugcolor
>   
>   #if no-windows
> -  $ hg debugcolor --style --color always | egrep 'mode|style|log\.'
> +  $ hg debugcolor --style --color always | grep -E 'mode|style|log\.'
>     color mode: 'ansi'
>     available style:
>     \x1b[0;33mlog.changeset\x1b[0m:                      \x1b[0;33myellow\x1b[0m (esc)
> diff --git a/tests/test-devel-warnings.t b/tests/test-devel-warnings.t
> --- a/tests/test-devel-warnings.t
> +++ b/tests/test-devel-warnings.t
> @@ -191,7 +191,7 @@ Stripping from a transaction
>     $ echo a > a
>     $ hg add a
>     $ hg commit -m a
> -  $ hg stripintr 2>&1 | egrep -v '^(\*\*|  )'
> +  $ hg stripintr 2>&1 | grep -E -v '^(\*\*|  )'
>     Traceback (most recent call last):
>     *ProgrammingError: cannot strip from inside a transaction (glob)
>   
> @@ -384,7 +384,7 @@ Stripping from a transaction
>   
>   Test programming error failure:
>   
> -  $ hg buggytransaction 2>&1 | egrep -v '^  '
> +  $ hg buggytransaction 2>&1 | grep -E -v '^  '
>     ** Unknown exception encountered with possibly-broken third-party extension "buggylocking" (version N/A)
>     ** which supports versions unknown of Mercurial.
>     ** Please disable "buggylocking" and try your action again.
> @@ -396,7 +396,7 @@ Test programming error failure:
>     Traceback (most recent call last):
>     *ProgrammingError: transaction requires locking (glob)
>   
> -  $ hg programmingerror 2>&1 | egrep -v '^  '
> +  $ hg programmingerror 2>&1 | grep -E -v '^  '
>     ** Unknown exception encountered with possibly-broken third-party extension "buggylocking" (version N/A)
>     ** which supports versions unknown of Mercurial.
>     ** Please disable "buggylocking" and try your action again.
> diff --git a/tests/test-dirstate-version-fallback.t b/tests/test-dirstate-version-fallback.t
> --- a/tests/test-dirstate-version-fallback.t
> +++ b/tests/test-dirstate-version-fallback.t
> @@ -22,7 +22,7 @@ Copy v1 dirstate
>   
>   Upgrade it to v2
>   
> -  $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | egrep 'added:|removed:'
> +  $ hg debugupgraderepo -q --config format.use-dirstate-v2=1 --run | grep -E 'added:|removed:'
>        added: dirstate-v2
>     $ hg debugrequires | grep dirstate
>     dirstate-v2
> diff --git a/tests/test-docker-packaging.t b/tests/test-docker-packaging.t
> --- a/tests/test-docker-packaging.t
> +++ b/tests/test-docker-packaging.t
> @@ -22,10 +22,10 @@ built using docker.
>   
>   main deb should have .so but no .py
>     $ ar x mercurial_*.deb
> -  $ tar tf data.tar* | egrep '(localrepo|parsers)'
> +  $ tar tf data.tar* | grep -E '(localrepo|parsers)'
>     ./usr/lib/python2.7/dist-packages/mercurial/parsers*.so (glob)
>   mercurial-common should have .py but no .so or .pyc
>     $ ar x mercurial-common_*.deb
> -  $ tar tf data.tar* | egrep '(localrepo|parsers)'
> +  $ tar tf data.tar* | grep -E '(localrepo|parsers)'
>     ./usr/lib/python2.7/dist-packages/mercurial/pure/parsers.py
>     ./usr/lib/python2.7/dist-packages/mercurial/localrepo.py
> diff --git a/tests/test-extension.t b/tests/test-extension.t
> --- a/tests/test-extension.t
> +++ b/tests/test-extension.t
> @@ -1375,7 +1375,7 @@ accessed.
>       throw  external  1.0.0
>   
>   No declared supported version, extension complains:
> -  $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
> +  $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
>     ** which supports versions unknown of Mercurial.
>     ** Please disable "throw" and try your action again.
> @@ -1387,7 +1387,7 @@ No declared supported version, extension
>   empty declaration of supported version, extension complains (but doesn't choke if
>   the value is improperly a str instead of bytes):
>     $ echo "testedwith = ''" >> throw.py
> -  $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
> +  $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
>     ** which supports versions unknown of Mercurial.
>     ** Please disable "throw" and try your action again.
> @@ -1401,7 +1401,7 @@ improperly a str instead of bytes):
>     $ echo 'buglink = "http://example.com/bts"' >> throw.py
>     $ rm -f throw.pyc throw.pyo
>     $ rm -Rf __pycache__
> -  $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
> +  $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
>     ** which supports versions unknown of Mercurial.
>     ** Please disable "throw" and try your action again.
> @@ -1418,7 +1418,7 @@ If the extensions declare outdated versi
>     $ rm -f throw.pyc throw.pyo
>     $ rm -Rf __pycache__
>     $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
> -  >   throw 2>&1 | egrep '^\*\*'
> +  >   throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "older" (version N/A)
>     ** which supports versions 1.9 of Mercurial.
>     ** Please disable "older" and try your action again.
> @@ -1432,7 +1432,7 @@ One extension only tested with older, on
>     $ rm -f older.pyc older.pyo
>     $ rm -Rf __pycache__
>     $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
> -  >   throw 2>&1 | egrep '^\*\*'
> +  >   throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "older" (version N/A)
>     ** which supports versions 1.9 of Mercurial.
>     ** Please disable "older" and try your action again.
> @@ -1446,7 +1446,7 @@ Older extension is tested with current v
>     $ rm -f older.pyc older.pyo
>     $ rm -Rf __pycache__
>     $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
> -  >   throw 2>&1 | egrep '^\*\*'
> +  >   throw 2>&1 | grep -E '^\*\*'
>     ** Unknown exception encountered with possibly-broken third-party extension "throw" 1.0.0
>     ** which supports versions 2.1 of Mercurial.
>     ** Please disable "throw" and try your action again.
> @@ -1457,7 +1457,7 @@ Older extension is tested with current v
>   
>   Ability to point to a different point
>     $ hg --config extensions.throw=throw.py --config extensions.older=older.py \
> -  >   --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | egrep '^\*\*'
> +  >   --config ui.supportcontact='Your Local Goat Lenders' throw 2>&1 | grep -E '^\*\*'
>     ** unknown exception encountered, please report by visiting
>     ** Your Local Goat Lenders
>     ** Python * (glob)
> @@ -1472,7 +1472,7 @@ Declare the version as supporting this h
>     > fi
>     $ rm -f throw.pyc throw.pyo
>     $ rm -Rf __pycache__
> -  $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
> +  $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
>     ** unknown exception encountered, please report by visiting
>     ** https://mercurial-scm.org/wiki/BugTracker
>     ** Python * (glob)
> @@ -1484,7 +1484,7 @@ Patch version is ignored during compatib
>     $ echo "util.version = lambda:b'3.2.2'" >> throw.py
>     $ rm -f throw.pyc throw.pyo
>     $ rm -Rf __pycache__
> -  $ hg --config extensions.throw=throw.py throw 2>&1 | egrep '^\*\*'
> +  $ hg --config extensions.throw=throw.py throw 2>&1 | grep -E '^\*\*'
>     ** unknown exception encountered, please report by visiting
>     ** https://mercurial-scm.org/wiki/BugTracker
>     ** Python * (glob)
> @@ -1595,7 +1595,7 @@ Refuse to load extensions with minimum v
>     > util.version = lambda: b'3.6'
>     > minimumhgversion = b'3.7'
>     > EOF
> -  $ hg --config extensions.minversion=minversion2.py version 2>&1 | egrep '\(third'
> +  $ hg --config extensions.minversion=minversion2.py version 2>&1 | grep -E '\(third'
>     (third party extension minversion requires version 3.7 or newer of Mercurial (current: 3.6); disabling)
>   
>   Can load version that is only off by point release
> @@ -1605,7 +1605,7 @@ Can load version that is only off by poi
>     > util.version = lambda: b'3.6.1'
>     > minimumhgversion = b'3.6'
>     > EOF
> -  $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
> +  $ hg --config extensions.minversion=minversion3.py version 2>&1 | grep -E '\(third'
>     [1]
>   
>   Can load minimum version identical to current
> @@ -1615,7 +1615,7 @@ Can load minimum version identical to cu
>     > util.version = lambda: b'3.5'
>     > minimumhgversion = b'3.5'
>     > EOF
> -  $ hg --config extensions.minversion=minversion3.py version 2>&1 | egrep '\(third'
> +  $ hg --config extensions.minversion=minversion3.py version 2>&1 | grep -E '\(third'
>     [1]
>   
>   Don't explode on py3 with a bad version number (both str vs bytes, and not enough
> diff --git a/tests/test-flagprocessor.t b/tests/test-flagprocessor.t
> --- a/tests/test-flagprocessor.t
> +++ b/tests/test-flagprocessor.t
> @@ -215,7 +215,7 @@ Ensure the data got to the server OK
>         raise error.Abort(msg)
>     mercurial.error.Abort: cannot register multiple processors on flag '0x8'.
>     *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'.
> -  $ hg st 2>&1 | egrep 'cannot register multiple processors|flagprocessorext'
> +  $ hg st 2>&1 | grep -E 'cannot register multiple processors|flagprocessorext'
>       File "*/tests/flagprocessorext.py", line *, in extsetup (glob)
>     mercurial.error.Abort: cannot register multiple processors on flag '0x8'.
>     *** failed to set up extension duplicate: cannot register multiple processors on flag '0x8'.
> diff --git a/tests/test-git-interop.t b/tests/test-git-interop.t
> --- a/tests/test-git-interop.t
> +++ b/tests/test-git-interop.t
> @@ -358,7 +358,7 @@ Status should be consistent for both sys
>     $ hg status
>     heads mismatch, rebuilding dagcache
>     M beta
> -  $ git status | egrep -v '^$|^  \(use '
> +  $ git status | grep -E -v '^$|^  \(use '
>     On branch master
>     Changes not staged for commit:
>     	modified:   beta
> diff --git a/tests/test-help.t b/tests/test-help.t
> --- a/tests/test-help.t
> +++ b/tests/test-help.t
> @@ -799,7 +799,7 @@ Disabled extension gets suggested
>   
>   Checking that help adapts based on the config:
>   
> -  $ hg help diff --config ui.tweakdefaults=true | egrep -e '^ *(-g|config)'
> +  $ hg help diff --config ui.tweakdefaults=true | grep -E -e '^ *(-g|config)'
>      -g --[no-]git            use git extended diff format (default: on from
>                               config)
>   
> @@ -1585,7 +1585,7 @@ Help subsection:
>   Show nested definitions
>   ("profiling.type"[break]"ls"[break]"stat"[break])
>   
> -  $ hg help config.type | egrep '^$'|wc -l
> +  $ hg help config.type | grep -E '^$'|wc -l
>     \s*3 (re)
>   
>     $ hg help config.profiling.type.ls
> @@ -1598,7 +1598,7 @@ Show nested definitions
>   
>   Separate sections from subsections
>   
> -  $ hg help config.format | egrep '^    ("|-)|^\s*$' | uniq
> +  $ hg help config.format | grep -E '^    ("|-)|^\s*$' | uniq
>         "format"
>         --------
>     
> @@ -1660,7 +1660,7 @@ note to use help -c for general hg help
>   
>   Test templating help
>   
> -  $ hg help templating | egrep '(desc|diffstat|firstline|nonempty)  '
> +  $ hg help templating | grep -E '(desc|diffstat|firstline|nonempty)  '
>         desc          String. The text of the changeset description.
>         diffstat      String. Statistics of changes with the following format:
>         firstline     Any text. Returns the first line of text.
> @@ -1701,12 +1701,12 @@ Test help hooks
>   
>   help -c should only show debug --debug
>   
> -  $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
> +  $ hg help -c --debug|grep -E debug|wc -l|grep -E '^\s*0\s*$'
>     [1]
>   
>   help -c should only show deprecated for -v
>   
> -  $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
> +  $ hg help -c -v|grep -E DEPRECATED|wc -l|grep -E '^\s*0\s*$'
>     [1]
>   
>   Test -s / --system
> @@ -1720,11 +1720,11 @@ Test -s / --system
>   
>   Test -e / -c / -k combinations
>   
> -  $ hg help -c|egrep '^[A-Z].*:|^ debug'
> +  $ hg help -c|grep -E '^[A-Z].*:|^ debug'
>     Commands:
> -  $ hg help -e|egrep '^[A-Z].*:|^ debug'
> +  $ hg help -e|grep -E '^[A-Z].*:|^ debug'
>     Extensions:
> -  $ hg help -k|egrep '^[A-Z].*:|^ debug'
> +  $ hg help -k|grep -E '^[A-Z].*:|^ debug'
>     Topics:
>     Commands:
>     Extensions:
> @@ -1735,11 +1735,11 @@ Test -e / -c / -k combinations
>     [10]
>     $ hg help -e schemes |head -1
>     schemes extension - extend schemes with shortcuts to repository swarms
> -  $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):'
> +  $ hg help -c -k dates |grep -E '^(Topics|Extensions|Commands):'
>     Commands:
> -  $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):'
> +  $ hg help -e -k a |grep -E '^(Topics|Extensions|Commands):'
>     Extensions:
> -  $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):'
> +  $ hg help -e -c -k date |grep -E '^(Topics|Extensions|Commands):'
>     Extensions:
>     Commands:
>     $ hg help -c commit > /dev/null
> diff --git a/tests/test-hgweb-csp.t b/tests/test-hgweb-csp.t
> --- a/tests/test-hgweb-csp.t
> +++ b/tests/test-hgweb-csp.t
> @@ -69,7 +69,7 @@ repo page should send CSP by default, in
>   
>   nonce should not be added to html if CSP doesn't use it
>   
> -  $ get-with-headers.py localhost:$HGPORT repo1/graph/tip | egrep 'content-security-policy|<script'
> +  $ get-with-headers.py localhost:$HGPORT repo1/graph/tip | grep -E 'content-security-policy|<script'
>     <script type="text/javascript" src="/repo1/static/mercurial.js"></script>
>     <script type="text/javascript">
>     <script type="text/javascript">
> @@ -104,7 +104,7 @@ repo page should have nonce, no ETag
>   
>   nonce should be added to html when used
>   
> -  $ get-with-headers.py localhost:$HGPORT repo1/graph/tip content-security-policy | egrep 'content-security-policy|<script'
> +  $ get-with-headers.py localhost:$HGPORT repo1/graph/tip content-security-policy | grep -E 'content-security-policy|<script'
>     content-security-policy: image-src 'self'; script-src https://example.com/ 'nonce-*' (glob)
>     <script type="text/javascript" src="/repo1/static/mercurial.js"></script>
>     <script type="text/javascript" nonce="*"> (glob)
> @@ -125,7 +125,7 @@ static page sends CSP
>   
>   nonce included in <script> and headers
>   
> -  $ get-with-headers.py localhost:$HGPORT graph/tip content-security-policy  | egrep 'content-security-policy|<script'
> +  $ get-with-headers.py localhost:$HGPORT graph/tip content-security-policy  | grep -E 'content-security-policy|<script'
>     content-security-policy: image-src 'self'; script-src https://example.com/ 'nonce-*' (glob)
>     <script type="text/javascript" src="/static/mercurial.js"></script>
>     <script type="text/javascript" nonce="*"> (glob)
> diff --git a/tests/test-hgweb-diffs.t b/tests/test-hgweb-diffs.t
> --- a/tests/test-hgweb-diffs.t
> +++ b/tests/test-hgweb-diffs.t
> @@ -318,7 +318,7 @@ set up hgweb with git diffs + noprefix
>   patch header and diffstat
>   
>     $ get-with-headers.py localhost:$HGPORT 'rev/0' \
> -  > | egrep 'files changed|---|\+\+\+'
> +  > | grep -E 'files changed|---|\+\+\+'
>          2 files changed, 2 insertions(+), 0 deletions(-)
>     <span id="l1.2" class="minusline">--- /dev/null</span><a href="#l1.2"></a>
>     <span id="l1.3" class="plusline">+++ a</span><a href="#l1.3"></a>
> diff --git a/tests/test-hgweb-symrev.t b/tests/test-hgweb-symrev.t
> --- a/tests/test-hgweb-symrev.t
> +++ b/tests/test-hgweb-symrev.t
> @@ -37,7 +37,7 @@ Set up the repo
>   
>   (De)referencing symbolic revisions (paper)
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper' | grep -E $REVLINKS
>     <li><a href="/graph/tip?style=paper">graph</a></li>
>     <li><a href="/rev/tip?style=paper">changeset</a></li>
>     <li><a href="/file/tip?style=paper">browse</a></li>
> @@ -52,7 +52,7 @@ Set up the repo
>     <a href="/shortlog/tip?revcount=120&style=paper">more</a>
>     | rev 2: <a href="/shortlog/43c799df6e75?style=paper">(0)</a> <a href="/shortlog/tip?style=paper">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/tip?style=paper">log</a></li>
>     <li><a href="/rev/tip?style=paper">changeset</a></li>
>     <li><a href="/file/tip?style=paper">browse</a></li>
> @@ -67,7 +67,7 @@ Set up the repo
>     <a href="/graph/tip?revcount=120&style=paper">more</a>
>     | rev 2: <a href="/graph/43c799df6e75?style=paper">(0)</a> <a href="/graph/tip?style=paper">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/tip?style=paper">log</a></li>
>     <li><a href="/graph/tip?style=paper">graph</a></li>
>     <li><a href="/rev/tip?style=paper">changeset</a></li>
> @@ -77,24 +77,24 @@ Set up the repo
>     <a href="/file/tip/dir/?style=paper">
>     <a href="/file/tip/foo?style=paper">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=paper' | grep -E $REVLINKS
>     <a href="/shortlog/default?style=paper" class="open">
>     <a href="/shortlog/9d8c40cba617?style=paper" class="open">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=paper' | grep -E $REVLINKS
>     <a href="/rev/tip?style=paper">
>     <a href="/rev/9d8c40cba617?style=paper">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=paper' | grep -E $REVLINKS
>     <a href="/rev/xyzzy?style=paper">
>     <a href="/rev/a7c1559b7bba?style=paper">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper&rev=all()' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=paper&rev=all()' | grep -E $REVLINKS
>        <a href="/rev/9d8c40cba617?style=paper">third</a>
>        <a href="/rev/a7c1559b7bba?style=paper">second</a>
>        <a href="/rev/43c799df6e75?style=paper">first</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=paper' | grep -E $REVLINKS
>      <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>      <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>      <li><a href="/raw-rev/xyzzy?style=paper">raw</a></li>
> @@ -105,7 +105,7 @@ Set up the repo
>      <td class="author"> <a href="/rev/9d8c40cba617?style=paper">9d8c40cba617</a></td>
>      <td class="files"><a href="/file/a7c1559b7bba/foo?style=paper">foo</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=paper' | grep -E $REVLINKS
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
>     <li><a href="/file/xyzzy?style=paper">browse</a></li>
> @@ -119,7 +119,7 @@ Set up the repo
>     <a href="/shortlog/xyzzy?revcount=120&style=paper">more</a>
>     | rev 1: <a href="/shortlog/43c799df6e75?style=paper">(0)</a> <a href="/shortlog/tip?style=paper">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
>     <li><a href="/file/xyzzy?style=paper">browse</a></li>
> @@ -133,7 +133,7 @@ Set up the repo
>     <a href="/graph/xyzzy?revcount=120&style=paper">more</a>
>     | rev 1: <a href="/graph/43c799df6e75?style=paper">(0)</a> <a href="/graph/tip?style=paper">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
> @@ -143,7 +143,7 @@ Set up the repo
>     <a href="/file/xyzzy/dir/?style=paper">
>     <a href="/file/xyzzy/foo?style=paper">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
> @@ -158,7 +158,7 @@ Set up the repo
>      <td class="author"><a href="/file/43c799df6e75/foo?style=paper">43c799df6e75</a> </td>
>      <td class="author"><a href="/file/9d8c40cba617/foo?style=paper">9d8c40cba617</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=paper' | grep -E $REVLINKS
>        href="/atom-log/tip/foo" title="Atom feed for test:foo" />
>        href="/rss-log/tip/foo" title="RSS feed for test:foo" />
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
> @@ -181,7 +181,7 @@ Set up the repo
>     <a href="/log/xyzzy/foo?revcount=120&style=paper">more</a>
>     | <a href="/log/43c799df6e75/foo?style=paper">(0)</a> <a href="/log/tip/foo?style=paper">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
> @@ -205,7 +205,7 @@ Set up the repo
>     <a href="/diff/a7c1559b7bba/foo?style=paper">diff</a>
>     <a href="/rev/a7c1559b7bba?style=paper">changeset</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
> @@ -220,7 +220,7 @@ Set up the repo
>      <td><a href="/file/43c799df6e75/foo?style=paper">43c799df6e75</a> </td>
>      <td><a href="/file/9d8c40cba617/foo?style=paper">9d8c40cba617</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=paper' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=paper' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=paper">log</a></li>
>     <li><a href="/graph/xyzzy?style=paper">graph</a></li>
>     <li><a href="/rev/xyzzy?style=paper">changeset</a></li>
> @@ -237,7 +237,7 @@ Set up the repo
>   
>   (De)referencing symbolic revisions (coal)
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal' | grep -E $REVLINKS
>     <li><a href="/graph/tip?style=coal">graph</a></li>
>     <li><a href="/rev/tip?style=coal">changeset</a></li>
>     <li><a href="/file/tip?style=coal">browse</a></li>
> @@ -252,7 +252,7 @@ Set up the repo
>     <a href="/shortlog/tip?revcount=120&style=coal">more</a>
>     | rev 2: <a href="/shortlog/43c799df6e75?style=coal">(0)</a> <a href="/shortlog/tip?style=coal">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/tip?style=coal">log</a></li>
>     <li><a href="/rev/tip?style=coal">changeset</a></li>
>     <li><a href="/file/tip?style=coal">browse</a></li>
> @@ -267,7 +267,7 @@ Set up the repo
>     <a href="/graph/tip?revcount=120&style=coal">more</a>
>     | rev 2: <a href="/graph/43c799df6e75?style=coal">(0)</a> <a href="/graph/tip?style=coal">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/tip?style=coal">log</a></li>
>     <li><a href="/graph/tip?style=coal">graph</a></li>
>     <li><a href="/rev/tip?style=coal">changeset</a></li>
> @@ -277,24 +277,24 @@ Set up the repo
>     <a href="/file/tip/dir/?style=coal">
>     <a href="/file/tip/foo?style=coal">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=coal' | grep -E $REVLINKS
>     <a href="/shortlog/default?style=coal" class="open">
>     <a href="/shortlog/9d8c40cba617?style=coal" class="open">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=coal' | grep -E $REVLINKS
>     <a href="/rev/tip?style=coal">
>     <a href="/rev/9d8c40cba617?style=coal">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=coal' | grep -E $REVLINKS
>     <a href="/rev/xyzzy?style=coal">
>     <a href="/rev/a7c1559b7bba?style=coal">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal&rev=all()' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=coal&rev=all()' | grep -E $REVLINKS
>        <a href="/rev/9d8c40cba617?style=coal">third</a>
>        <a href="/rev/a7c1559b7bba?style=coal">second</a>
>        <a href="/rev/43c799df6e75?style=coal">first</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=coal' | grep -E $REVLINKS
>      <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>      <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>      <li><a href="/raw-rev/xyzzy?style=coal">raw</a></li>
> @@ -305,7 +305,7 @@ Set up the repo
>      <td class="author"> <a href="/rev/9d8c40cba617?style=coal">9d8c40cba617</a></td>
>      <td class="files"><a href="/file/a7c1559b7bba/foo?style=coal">foo</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=coal' | grep -E $REVLINKS
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
>     <li><a href="/file/xyzzy?style=coal">browse</a></li>
> @@ -319,7 +319,7 @@ Set up the repo
>     <a href="/shortlog/xyzzy?revcount=120&style=coal">more</a>
>     | rev 1: <a href="/shortlog/43c799df6e75?style=coal">(0)</a> <a href="/shortlog/tip?style=coal">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
>     <li><a href="/file/xyzzy?style=coal">browse</a></li>
> @@ -333,7 +333,7 @@ Set up the repo
>     <a href="/graph/xyzzy?revcount=120&style=coal">more</a>
>     | rev 1: <a href="/graph/43c799df6e75?style=coal">(0)</a> <a href="/graph/tip?style=coal">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
> @@ -343,7 +343,7 @@ Set up the repo
>     <a href="/file/xyzzy/dir/?style=coal">
>     <a href="/file/xyzzy/foo?style=coal">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
> @@ -358,7 +358,7 @@ Set up the repo
>      <td class="author"><a href="/file/43c799df6e75/foo?style=coal">43c799df6e75</a> </td>
>      <td class="author"><a href="/file/9d8c40cba617/foo?style=coal">9d8c40cba617</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=coal' | grep -E $REVLINKS
>        href="/atom-log/tip/foo" title="Atom feed for test:foo" />
>        href="/rss-log/tip/foo" title="RSS feed for test:foo" />
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
> @@ -381,7 +381,7 @@ Set up the repo
>     <a href="/log/xyzzy/foo?revcount=120&style=coal">more</a>
>     | <a href="/log/43c799df6e75/foo?style=coal">(0)</a> <a href="/log/tip/foo?style=coal">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
> @@ -405,7 +405,7 @@ Set up the repo
>     <a href="/diff/a7c1559b7bba/foo?style=coal">diff</a>
>     <a href="/rev/a7c1559b7bba?style=coal">changeset</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
> @@ -420,7 +420,7 @@ Set up the repo
>      <td><a href="/file/43c799df6e75/foo?style=coal">43c799df6e75</a> </td>
>      <td><a href="/file/9d8c40cba617/foo?style=coal">9d8c40cba617</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=coal' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=coal' | grep -E $REVLINKS
>     <li><a href="/shortlog/xyzzy?style=coal">log</a></li>
>     <li><a href="/graph/xyzzy?style=coal">graph</a></li>
>     <li><a href="/rev/xyzzy?style=coal">changeset</a></li>
> @@ -437,7 +437,7 @@ Set up the repo
>   
>   (De)referencing symbolic revisions (gitweb)
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=gitweb' | grep -E $REVLINKS
>     <a href="/file?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
>     <a class="list" href="/rev/9d8c40cba617?style=gitweb">
>     <a href="/rev/9d8c40cba617?style=gitweb">changeset</a> |
> @@ -457,7 +457,7 @@ Set up the repo
>     <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
>     <a href="/file/9d8c40cba617?style=gitweb">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb' | grep -E $REVLINKS
>     <a href="/log/tip?style=gitweb">changelog</a> |
>     <a href="/graph/tip?style=gitweb">graph</a> |
>     <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
> @@ -473,7 +473,7 @@ Set up the repo
>     <a href="/file/43c799df6e75?style=gitweb">files</a>
>     <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=gitweb' | grep -E $REVLINKS
>     <a href="/shortlog/tip?style=gitweb">shortlog</a> |
>     <a href="/graph/tip?style=gitweb">graph</a> |
>     <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
> @@ -486,7 +486,7 @@ Set up the repo
>     <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
>     <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=gitweb' | grep -E $REVLINKS
>     <a href="/shortlog/tip?style=gitweb">shortlog</a> |
>     <a href="/log/tip?style=gitweb">changelog</a> |
>     <a href="/file/tip?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>  |
> @@ -500,25 +500,25 @@ Set up the repo
>     <a href="/graph/tip?revcount=120&style=gitweb">more</a>
>     | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=gitweb' | grep -E $REVLINKS
>     <td><a class="list" href="/rev/tip?style=gitweb"><b>tip</b></a></td>
>     <a href="/rev/9d8c40cba617?style=gitweb">changeset</a> |
>     <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
>     <a href="/file/9d8c40cba617?style=gitweb">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=gitweb' | grep -E $REVLINKS
>     <td><a class="list" href="/rev/xyzzy?style=gitweb"><b>xyzzy</b></a></td>
>     <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a> |
>     <a href="/log/a7c1559b7bba?style=gitweb">changelog</a> |
>     <a href="/file/a7c1559b7bba?style=gitweb">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=gitweb' | grep -E $REVLINKS
>     <td class="open"><a class="list" href="/shortlog/default?style=gitweb"><b>default</b></a></td>
>     <a href="/changeset/9d8c40cba617?style=gitweb">changeset</a> |
>     <a href="/log/9d8c40cba617?style=gitweb">changelog</a> |
>     <a href="/file/9d8c40cba617?style=gitweb">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=gitweb' | grep -E $REVLINKS
>     <a href="/rev/tip?style=gitweb">changeset</a>  | <a href="/archive/tip.zip">zip</a>  |
>     <a href="/file/tip/dir?style=gitweb">dir</a>
>     <a href="/file/tip/dir/?style=gitweb"></a>
> @@ -528,7 +528,7 @@ Set up the repo
>     <a href="/log/tip/foo?style=gitweb">revisions</a> |
>     <a href="/annotate/tip/foo?style=gitweb">annotate</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb&rev=all()' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=gitweb&rev=all()' | grep -E $REVLINKS
>     <a href="/file?style=gitweb">files</a> | <a href="/archive/tip.zip">zip</a>
>      <a class="title" href="/rev/9d8c40cba617?style=gitweb">
>     <a href="/rev/9d8c40cba617?style=gitweb">changeset</a><br/>
> @@ -537,7 +537,7 @@ Set up the repo
>      <a class="title" href="/rev/43c799df6e75?style=gitweb">
>     <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=gitweb' | grep -E $REVLINKS
>     <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
>     <a href="/log/xyzzy?style=gitweb">changelog</a> |
>     <a href="/graph/xyzzy?style=gitweb">graph</a> |
> @@ -554,7 +554,7 @@ Set up the repo
>     <a href="/comparison/a7c1559b7bba/foo?style=gitweb">comparison</a> |
>     <a href="/log/a7c1559b7bba/foo?style=gitweb">revisions</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=gitweb' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=gitweb">changelog</a> |
>     <a href="/graph/xyzzy?style=gitweb">graph</a> |
>     <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a>  |
> @@ -567,7 +567,7 @@ Set up the repo
>     <a href="/file/43c799df6e75?style=gitweb">files</a>
>     <a href="/shortlog/43c799df6e75?style=gitweb">(0)</a> <a href="/shortlog/tip?style=gitweb">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=gitweb' | grep -E $REVLINKS
>     <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
>     <a href="/graph/xyzzy?style=gitweb">graph</a> |
>     <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a>  |
> @@ -578,7 +578,7 @@ Set up the repo
>     <a href="/rev/43c799df6e75?style=gitweb">changeset</a><br/>
>     <a href="/log/43c799df6e75?style=gitweb">(0)</a>  <a href="/log/tip?style=gitweb">tip</a> <br/>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=gitweb' | grep -E $REVLINKS
>     <a href="/shortlog/xyzzy?style=gitweb">shortlog</a> |
>     <a href="/log/xyzzy?style=gitweb">changelog</a> |
>     <a href="/file/xyzzy?style=gitweb">files</a> | <a href="/archive/xyzzy.zip">zip</a>  |
> @@ -591,7 +591,7 @@ Set up the repo
>     <a href="/graph/xyzzy?revcount=120&style=gitweb">more</a>
>     | <a href="/graph/43c799df6e75?style=gitweb">(0)</a> <a href="/graph/tip?style=gitweb">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=gitweb' | grep -E $REVLINKS
>     <a href="/rev/xyzzy?style=gitweb">changeset</a>  | <a href="/archive/xyzzy.zip">zip</a>  |
>     <a href="/file/xyzzy/dir?style=gitweb">dir</a>
>     <a href="/file/xyzzy/dir/?style=gitweb"></a>
> @@ -601,7 +601,7 @@ Set up the repo
>     <a href="/log/xyzzy/foo?style=gitweb">revisions</a> |
>     <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
>     <a href="/file/xyzzy/?style=gitweb">files</a> |
>     <a href="/rev/xyzzy?style=gitweb">changeset</a> |
>     <a href="/file/tip/foo?style=gitweb">latest</a> |
> @@ -614,7 +614,7 @@ Set up the repo
>     <a class="list" href="/file/43c799df6e75/foo?style=gitweb">
>     <a class="list" href="/file/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a></td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
>     <a href="/file/xyzzy/foo?style=gitweb">file</a> |
>     <a href="/annotate/xyzzy/foo?style=gitweb">annotate</a> |
>     <a href="/diff/xyzzy/foo?style=gitweb">diff</a> |
> @@ -633,7 +633,7 @@ Set up the repo
>     <a href="/log/xyzzy/foo?revcount=120&style=gitweb">more</a>
>     <a href="/log/43c799df6e75/foo?style=gitweb">(0)</a> <a href="/log/tip/foo?style=gitweb">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
>     <a href="/file/xyzzy/?style=gitweb">files</a> |
>     <a href="/rev/xyzzy?style=gitweb">changeset</a> |
>     <a href="/file/xyzzy/foo?style=gitweb">file</a> |
> @@ -655,7 +655,7 @@ Set up the repo
>     <a href="/diff/a7c1559b7bba/foo?style=gitweb">diff</a>
>     <a href="/rev/a7c1559b7bba?style=gitweb">changeset</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
>     <a href="/file/xyzzy?style=gitweb">files</a> |
>     <a href="/rev/xyzzy?style=gitweb">changeset</a> |
>     <a href="/file/xyzzy/foo?style=gitweb">file</a> |
> @@ -668,7 +668,7 @@ Set up the repo
>     <a class="list" href="/diff/43c799df6e75/foo?style=gitweb">
>     <a class="list" href="/diff/9d8c40cba617/foo?style=gitweb">9d8c40cba617</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=gitweb' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=gitweb' | grep -E $REVLINKS
>     <a href="/file/xyzzy?style=gitweb">files</a> |
>     <a href="/rev/xyzzy?style=gitweb">changeset</a> |
>     <a href="/file/xyzzy/foo?style=gitweb">file</a> |
> @@ -683,7 +683,7 @@ Set up the repo
>   
>   (De)referencing symbolic revisions (monoblue)
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'summary?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/archive/tip.zip">zip</a></li>
>     <a href="/rev/9d8c40cba617?style=monoblue">
>     <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
> @@ -703,7 +703,7 @@ Set up the repo
>     <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
>     <a href="/file/9d8c40cba617?style=monoblue">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/tip?style=monoblue">graph</a></li>
>                 <li><a href="/file/tip?style=monoblue">files</a></li>
>                 <li><a href="/archive/tip.zip">zip</a></li>
> @@ -718,7 +718,7 @@ Set up the repo
>     <a href="/file/43c799df6e75?style=monoblue">files</a>
>         <a href="/shortlog/43c799df6e75?style=monoblue">(0)</a> <a href="/shortlog/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/tip?style=monoblue">graph</a></li>
>                 <li><a href="/file/tip?style=monoblue">files</a></li>
>                 <li><a href="/archive/tip.zip">zip</a></li>
> @@ -727,7 +727,7 @@ Set up the repo
>         <a class="title" href="/rev/43c799df6e75?style=monoblue">
>     <a href="/log/43c799df6e75?style=monoblue">(0)</a>  <a href="/log/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/file/tip?style=monoblue">files</a></li>
>                 <li><a href="/archive/tip.zip">zip</a></li>
>                 <a href="/rev/9d8c40cba617?style=monoblue">third</a>
> @@ -737,25 +737,25 @@ Set up the repo
>             <a href="/graph/tip?revcount=120&style=monoblue">more</a>
>             | <a href="/graph/43c799df6e75?style=monoblue">(0)</a> <a href="/graph/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=monoblue' | grep -E $REVLINKS
>     <td><a href="/rev/tip?style=monoblue">tip</a></td>
>     <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
>     <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
>     <a href="/file/9d8c40cba617?style=monoblue">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'bookmarks?style=monoblue' | grep -E $REVLINKS
>     <td><a href="/rev/xyzzy?style=monoblue">xyzzy</a></td>
>     <a href="/rev/a7c1559b7bba?style=monoblue">changeset</a> |
>     <a href="/log/a7c1559b7bba?style=monoblue">changelog</a> |
>     <a href="/file/a7c1559b7bba?style=monoblue">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=monoblue' | grep -E $REVLINKS
>     <td class="open"><a href="/shortlog/default?style=monoblue">default</a></td>
>     <a href="/rev/9d8c40cba617?style=monoblue">changeset</a> |
>     <a href="/log/9d8c40cba617?style=monoblue">changelog</a> |
>     <a href="/file/9d8c40cba617?style=monoblue">files</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/tip?style=monoblue">graph</a></li>
>             <li><a href="/rev/tip?style=monoblue">changeset</a></li>
>             <li><a href="/archive/tip.zip">zip</a></li>
> @@ -767,13 +767,13 @@ Set up the repo
>     <a href="/log/tip/foo?style=monoblue">revisions</a> |
>     <a href="/annotate/tip/foo?style=monoblue">annotate</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue&rev=all()' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=monoblue&rev=all()' | grep -E $REVLINKS
>                 <li><a href="/archive/tip.zip">zip</a></li>
>         <a class="title" href="/rev/9d8c40cba617?style=monoblue">
>         <a class="title" href="/rev/a7c1559b7bba?style=monoblue">
>         <a class="title" href="/rev/43c799df6e75?style=monoblue">
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>             <li><a href="/raw-rev/xyzzy">raw</a></li>
> @@ -789,7 +789,7 @@ Set up the repo
>     <a href="/comparison/a7c1559b7bba/foo?style=monoblue">comparison</a> |
>     <a href="/log/a7c1559b7bba/foo?style=monoblue">revisions</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>                 <li><a href="/archive/xyzzy.zip">zip</a></li>
> @@ -801,7 +801,7 @@ Set up the repo
>     <a href="/file/43c799df6e75?style=monoblue">files</a>
>         <a href="/shortlog/43c799df6e75?style=monoblue">(0)</a> <a href="/shortlog/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>                 <li><a href="/archive/xyzzy.zip">zip</a></li>
> @@ -809,7 +809,7 @@ Set up the repo
>         <a class="title" href="/rev/43c799df6e75?style=monoblue">
>     <a href="/log/43c799df6e75?style=monoblue">(0)</a>  <a href="/log/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>                 <li><a href="/archive/xyzzy.zip">zip</a></li>
>                 <a href="/rev/a7c1559b7bba?style=monoblue">second</a>
> @@ -818,7 +818,7 @@ Set up the repo
>             <a href="/graph/xyzzy?revcount=120&style=monoblue">more</a>
>             | <a href="/graph/43c799df6e75?style=monoblue">(0)</a> <a href="/graph/tip?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>             <li><a href="/rev/xyzzy?style=monoblue">changeset</a></li>
>             <li><a href="/archive/xyzzy.zip">zip</a></li>
> @@ -830,7 +830,7 @@ Set up the repo
>     <a href="/log/xyzzy/foo?style=monoblue">revisions</a> |
>     <a href="/annotate/xyzzy/foo?style=monoblue">annotate</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy/?style=monoblue">files</a></li>
>             <li><a href="/file/tip/foo?style=monoblue">latest</a></li>
> @@ -843,7 +843,7 @@ Set up the repo
>     <a href="/file/43c799df6e75/foo?style=monoblue">
>     <a href="/file/9d8c40cba617/foo?style=monoblue">9d8c40cba617</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>             <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
> @@ -861,7 +861,7 @@ Set up the repo
>     <a href="/annotate/43c799df6e75/foo?style=monoblue">annotate</a>
>         <a href="/log/43c799df6e75/foo?style=monoblue">(0)</a> <a href="/log/tip/foo?style=monoblue">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy/?style=monoblue">files</a></li>
>             <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
> @@ -883,7 +883,7 @@ Set up the repo
>     <a href="/diff/a7c1559b7bba/foo?style=monoblue">diff</a>
>     <a href="/rev/a7c1559b7bba?style=monoblue">changeset</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>             <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
> @@ -896,7 +896,7 @@ Set up the repo
>     <dd><a href="/diff/43c799df6e75/foo?style=monoblue">43c799df6e75</a></dd>
>     <dd><a href="/diff/9d8c40cba617/foo?style=monoblue">9d8c40cba617</a></dd>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=monoblue' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'comparison/xyzzy/foo?style=monoblue' | grep -E $REVLINKS
>                 <li><a href="/graph/xyzzy?style=monoblue">graph</a></li>
>                 <li><a href="/file/xyzzy?style=monoblue">files</a></li>
>             <li><a href="/file/xyzzy/foo?style=monoblue">file</a></li>
> @@ -911,7 +911,7 @@ Set up the repo
>   
>   (De)referencing symbolic revisions (spartan)
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan' | grep -E $REVLINKS
>     <a href="/log/tip?style=spartan">changelog</a>
>     <a href="/graph/tip?style=spartan">graph</a>
>     <a href="/file/tip/?style=spartan">files</a>
> @@ -922,7 +922,7 @@ Set up the repo
>       <td class="node"><a href="/rev/43c799df6e75?style=spartan">first</a></td>
>     navigate: <small class="navigate"><a href="/shortlog/43c799df6e75?style=spartan">(0)</a> <a href="/shortlog/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log?style=spartan' | grep -E $REVLINKS
>     <a href="/shortlog/tip?style=spartan">shortlog</a>
>     <a href="/graph/tip?style=spartan">graph</a>
>     <a href="/file/tip?style=spartan">files</a>
> @@ -939,7 +939,7 @@ Set up the repo
>       <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
>     navigate: <small class="navigate"><a href="/log/43c799df6e75?style=spartan">(0)</a>  <a href="/log/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph?style=spartan' | grep -E $REVLINKS
>     <a href="/log/tip?style=spartan">changelog</a>
>     <a href="/shortlog/tip?style=spartan">shortlog</a>
>     <a href="/file/tip/?style=spartan">files</a>
> @@ -949,13 +949,13 @@ Set up the repo
>        <a href="/rev/43c799df6e75?style=spartan">first</a>
>     navigate: <small class="navigate"><a href="/graph/43c799df6e75?style=spartan">(0)</a> <a href="/graph/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'tags?style=spartan' | grep -E $REVLINKS
>     <a href="/rev/9d8c40cba617?style=spartan">tip</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'branches?style=spartan' | grep -E $REVLINKS
>     <a href="/shortlog/9d8c40cba617?style=spartan" class="open">default</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file?style=spartan' | grep -E $REVLINKS
>     <a href="/log/tip?style=spartan">changelog</a>
>     <a href="/shortlog/tip?style=spartan">shortlog</a>
>     <a href="/graph/tip?style=spartan">graph</a>
> @@ -966,7 +966,7 @@ Set up the repo
>     <a href="/file/tip/dir/?style=spartan">
>     <td><a href="/file/tip/foo?style=spartan">foo</a></td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan&rev=all()' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog?style=spartan&rev=all()' | grep -E $REVLINKS
>     <a href="/archive/tip.zip">zip</a>
>       <td class="node"><a href="/rev/9d8c40cba617?style=spartan">9d8c40cba617</a></td>
>     <a href="/rev/a7c1559b7bba?style=spartan">a7c1559b7bba</a>
> @@ -982,7 +982,7 @@ Set up the repo
>       <th class="files"><a href="/file/43c799df6e75?style=spartan">files</a>:</th>
>       <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'rev/xyzzy?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
> @@ -994,7 +994,7 @@ Set up the repo
>     <td class="child"><a href="/rev/9d8c40cba617?style=spartan">9d8c40cba617</a></td>
>      <td class="files"><a href="/file/a7c1559b7bba/foo?style=spartan">foo</a> </td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'shortlog/xyzzy?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
>     <a href="/file/xyzzy/?style=spartan">files</a>
> @@ -1004,7 +1004,7 @@ Set up the repo
>       <td class="node"><a href="/rev/43c799df6e75?style=spartan">first</a></td>
>     navigate: <small class="navigate"><a href="/shortlog/43c799df6e75?style=spartan">(0)</a> <a href="/shortlog/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy?style=spartan' | grep -E $REVLINKS
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
>     <a href="/file/xyzzy?style=spartan">files</a>
> @@ -1018,7 +1018,7 @@ Set up the repo
>       <td class="files"><a href="/diff/43c799df6e75/dir/bar?style=spartan">dir/bar</a> <a href="/diff/43c799df6e75/foo?style=spartan">foo</a> </td>
>     navigate: <small class="navigate"><a href="/log/43c799df6e75?style=spartan">(0)</a>  <a href="/log/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'graph/xyzzy?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/file/xyzzy/?style=spartan">files</a>
> @@ -1027,7 +1027,7 @@ Set up the repo
>        <a href="/rev/43c799df6e75?style=spartan">first</a>
>     navigate: <small class="navigate"><a href="/graph/43c799df6e75?style=spartan">(0)</a> <a href="/graph/tip?style=spartan">tip</a> </small>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
> @@ -1038,7 +1038,7 @@ Set up the repo
>     <a href="/file/xyzzy/dir/?style=spartan">
>     <td><a href="/file/xyzzy/foo?style=spartan">foo</a></td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'file/xyzzy/foo?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
> @@ -1051,7 +1051,7 @@ Set up the repo
>     <a href="/file/43c799df6e75/foo?style=spartan">
>     <td><a href="/file/9d8c40cba617/foo?style=spartan">9d8c40cba617</a></td>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'log/xyzzy/foo?style=spartan' | grep -E $REVLINKS
>        href="/atom-log/tip/foo" title="Atom feed for test:foo">
>        href="/rss-log/tip/foo" title="RSS feed for test:foo">
>     <a href="/file/xyzzy/foo?style=spartan">file</a>
> @@ -1068,7 +1068,7 @@ Set up the repo
>        <a href="/diff/43c799df6e75/foo?style=spartan">(diff)</a>
>        <a href="/annotate/43c799df6e75/foo?style=spartan">(annotate)</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'annotate/xyzzy/foo?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
> @@ -1090,7 +1090,7 @@ Set up the repo
>     <a href="/diff/a7c1559b7bba/foo?style=spartan">diff</a>
>     <a href="/rev/a7c1559b7bba?style=spartan">changeset</a>
>   
> -  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=spartan' | egrep $REVLINKS
> +  $ "$TESTDIR/get-with-headers.py" $LOCALIP:$HGPORT 'diff/xyzzy/foo?style=spartan' | grep -E $REVLINKS
>     <a href="/log/xyzzy?style=spartan">changelog</a>
>     <a href="/shortlog/xyzzy?style=spartan">shortlog</a>
>     <a href="/graph/xyzzy?style=spartan">graph</a>
> diff --git a/tests/test-hgweb.t b/tests/test-hgweb.t
> --- a/tests/test-hgweb.t
> +++ b/tests/test-hgweb.t
> @@ -783,19 +783,19 @@ phase changes are refreshed (issue4061)
>   
>   access bookmarks
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | egrep '^200|changeset 0:'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/@?style=paper' | grep -E '^200|changeset 0:'
>     200 Script output follows
>      changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | egrep '^200|changeset 0:'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/%40?style=paper' | grep -E '^200|changeset 0:'
>     200 Script output follows
>      changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | egrep '^200|changeset 0:'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/a%20b%20c?style=paper' | grep -E '^200|changeset 0:'
>     200 Script output follows
>      changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | egrep '^200|changeset 0:'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/d%252Fe%252Ff?style=paper' | grep -E '^200|changeset 0:'
>     200 Script output follows
>      changeset 0:<a href="/rev/2ef0ac749a14?style=paper">2ef0ac749a14</a>
>   
> diff --git a/tests/test-histedit-fold.t b/tests/test-histedit-fold.t
> --- a/tests/test-histedit-fold.t
> +++ b/tests/test-histedit-fold.t
> @@ -236,7 +236,7 @@ tip before edit
>   
>     $ hg --config progress.debug=1 --debug \
>     > histedit 1ddb6c90f2ee --commands - 2>&1 <<EOF | \
> -  > egrep 'editing|unresolved'
> +  > grep -E 'editing|unresolved'
>     > pick 1ddb6c90f2ee e
>     > fold 10c36dd37515 f
>     > EOF
> diff --git a/tests/test-hook.t b/tests/test-hook.t
> --- a/tests/test-hook.t
> +++ b/tests/test-hook.t
> @@ -975,7 +975,7 @@ test python hooks
>     (run with --traceback for stack trace)
>     [255]
>   
> -  $ hg pull ../a --traceback 2>&1 | egrep 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
> +  $ hg pull ../a --traceback 2>&1 | grep -E 'pulling|searching|^exception|Traceback|SyntaxError|ImportError|ModuleNotFoundError|HookLoadError|abort'
>     pulling from ../a
>     searching for changes
>     exception from first failed import attempt:
> @@ -1142,7 +1142,7 @@ make sure --traceback works on hook impo
>     $ echo 'precommit.importfail = python:importfail.whatever' >> .hg/hgrc
>   
>     $ echo a >> a
> -  $ hg --traceback commit -ma 2>&1 | egrep '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
> +  $ hg --traceback commit -ma 2>&1 | grep -E '^exception|ImportError|ModuleNotFoundError|Traceback|HookLoadError|abort'
>     exception from first failed import attempt:
>     Traceback (most recent call last):
>     ModuleNotFoundError: No module named 'somebogusmodule'
> diff --git a/tests/test-import.t b/tests/test-import.t
> --- a/tests/test-import.t
> +++ b/tests/test-import.t
> @@ -371,7 +371,7 @@ plain diff in email, no subject, no mess
>     new changesets 80971e65b431
>     updating to branch default
>     2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ egrep -v '^(Subject|email)' msg.patch | hg --cwd b import -
> +  $ grep -E -v '^(Subject|email)' msg.patch | hg --cwd b import -
>     applying patch from stdin
>     abort: empty commit message
>     [10]
> diff --git a/tests/test-issue6642.t b/tests/test-issue6642.t
> --- a/tests/test-issue6642.t
> +++ b/tests/test-issue6642.t
> @@ -26,7 +26,7 @@ https://bz.mercurial-scm.org/show_bug.cg
>   
>     $ hg log -r . --debug | grep files
>     [1]
> -  $ hg log -r . --debug -T json | egrep '(added|removed|modified)'
> +  $ hg log -r . --debug -T json | grep -E '(added|removed|modified)'
>       "added": [],
>       "modified": [],
>       "removed": [],
> diff --git a/tests/test-largefiles-cache.t b/tests/test-largefiles-cache.t
> --- a/tests/test-largefiles-cache.t
> +++ b/tests/test-largefiles-cache.t
> @@ -186,7 +186,7 @@ conditional above.
>     share_dst/.hg/largefiles/dirstate
>     share_dst/.hg/largefiles/undo.backup.dirstate.bck
>   
> -  $ find src/.hg/largefiles/* | egrep "(dirstate|$hash)" | sort
> +  $ find src/.hg/largefiles/* | grep -E "(dirstate|$hash)" | sort
>     src/.hg/largefiles/dirstate
>     src/.hg/largefiles/e2fb5f2139d086ded2cb600d5a91a196e76bf020
>   
> diff --git a/tests/test-lfs-serve-access.t b/tests/test-lfs-serve-access.t
> --- a/tests/test-lfs-serve-access.t
> +++ b/tests/test-lfs-serve-access.t
> @@ -411,7 +411,7 @@ the GET/PUT request.
>     >    -A $TESTTMP/access.log -E $TESTTMP/errors.log
>     $ mv hg.pid $DAEMON_PIDS
>   
> -  $ hg clone --debug http://localhost:$HGPORT1 auth_clone | egrep '^[{}]|  '
> +  $ hg clone --debug http://localhost:$HGPORT1 auth_clone | grep -E '^[{}]|  '
>     {
>       "objects": [
>         {
> @@ -460,7 +460,7 @@ Test that Digest Auth fails gracefully b
>     (api=http://localhost:$HGPORT1/.git/info/lfs/objects/batch, action=upload)
>     [50]
>   
> -  $ hg -R auth_clone --debug push | egrep '^[{}]|  '
> +  $ hg -R auth_clone --debug push | grep -E '^[{}]|  '
>     {
>       "objects": [
>         {
> diff --git a/tests/test-lfs.t b/tests/test-lfs.t
> --- a/tests/test-lfs.t
> +++ b/tests/test-lfs.t
> @@ -116,7 +116,7 @@ lfs requirement
>   
>     $ hg debugrequires -R $TESTTMP/server/ | grep lfs
>     [1]
> -  $ hg push -v | egrep -v '^(uncompressed| )'
> +  $ hg push -v | grep -E -v '^(uncompressed| )'
>     pushing to $TESTTMP/server
>     searching for changes
>     lfs: found f11e77c257047a398492d8d6cb9f6acf3aa7c4384bb23080b43546053e183e4b in the local lfs store
> diff --git a/tests/test-mac-packages.t b/tests/test-mac-packages.t
> --- a/tests/test-mac-packages.t
> +++ b/tests/test-mac-packages.t
> @@ -41,7 +41,7 @@ Spot-check some randomly selected files:
>     ./usr/local/share/zsh/site-functions/_hg	100644	0/0
>     $ grep bash-completion/completions/hg boms.txt | cut -d '	' -f 1,2,3
>     ./usr/local/share/bash-completion-completions/hg	100644	0/0
> -  $ egrep 'man[15]' boms.txt | cut -d '	' -f 1,2,3
> +  $ grep -E 'man[15]' boms.txt | cut -d '	' -f 1,2,3
>     ./usr/local/share/man/man1	40755	0/0
>     ./usr/local/share/man/man1/chg.1	100644	0/0
>     ./usr/local/share/man/man1/hg.1	100644	0/0
> @@ -57,7 +57,7 @@ Spot-check some randomly selected files:
>     ./Library/Python/2.7/site-packages/mercurial/localrepo.py	100644	0/0
>     ./Library/Python/2.7/site-packages/mercurial/localrepo.pyc	100644	0/0
>     ./Library/Python/2.7/site-packages/mercurial/localrepo.pyo	100644	0/0
> -  $ egrep 'bin/' boms.txt | cut -d '	' -f 1,2,3
> +  $ grep -E 'bin/' boms.txt | cut -d '	' -f 1,2,3
>     ./usr/local/bin/chg	100755	0/0
>     ./usr/local/bin/hg	100755	0/0
>   
> diff --git a/tests/test-narrow-exchange-merges.t b/tests/test-narrow-exchange-merges.t
> --- a/tests/test-narrow-exchange-merges.t
> +++ b/tests/test-narrow-exchange-merges.t
> @@ -54,7 +54,7 @@ create full repo
>   
>     $ hg update -r 'desc("outside 4a")'
>     1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> @@ -66,7 +66,7 @@ create full repo
>     $ echo 6 > outside/f
>     $ hg commit -Aqm 'outside 6'
>   
> -  $ hg merge -r 'desc("outside 4c")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4c")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> @@ -78,7 +78,7 @@ create full repo
>     $ echo 8 > outside/f
>     $ hg commit -Aqm 'outside 8'
>   
> -  $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> 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
> @@ -71,7 +71,7 @@ Can merge in when no files outside narro
>   Can merge conflicting changes inside narrow spec
>   
>     $ hg update -q 'desc("modify inside/f1")'
> -  $ hg merge 'desc("conflicting inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge 'desc("conflicting inside/f1")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging inside/f1
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> diff --git a/tests/test-narrow-rebase.t b/tests/test-narrow-rebase.t
> --- a/tests/test-narrow-rebase.t
> +++ b/tests/test-narrow-rebase.t
> @@ -69,7 +69,7 @@ Can rebase onto conflicting changes insi
>     $ hg update -q 0
>     $ echo conflicting > inside/f1
>     $ hg ci -qm 'conflicting inside/f1'
> -  $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg rebase -d 'desc("modify inside/f1")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     rebasing 6:cdce97fbf653 tip "conflicting inside/f1"
>     merging inside/f1
>     unresolved conflicts (see 'hg resolve', then 'hg rebase --continue')
> diff --git a/tests/test-narrow-shallow-merges.t b/tests/test-narrow-shallow-merges.t
> --- a/tests/test-narrow-shallow-merges.t
> +++ b/tests/test-narrow-shallow-merges.t
> @@ -55,7 +55,7 @@ create full repo
>   
>     $ hg update -r 'desc("outside 4a")'
>     1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> @@ -67,7 +67,7 @@ create full repo
>     $ echo 6 > outside/f
>     $ hg commit -Aqm 'outside 6'
>   
> -  $ hg merge -r 'desc("outside 4c")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4c")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> @@ -79,7 +79,7 @@ create full repo
>     $ echo 8 > outside/f
>     $ hg commit -Aqm 'outside 8'
>   
> -  $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 1 files unresolved
>     use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon
> @@ -279,7 +279,7 @@ Incremental test case: show a pull can p
>     $ cd ../pullmaster
>     $ hg update -r 'desc("outside 4a")'
>     2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg merge -r 'desc("outside 4b")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4b")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging inside/f
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 2 files unresolved
> @@ -293,7 +293,7 @@ Incremental test case: show a pull can p
>   
>     $ hg update -r 'desc("outside 4c")'
>     2 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg merge -r 'desc("outside 4d")' 2>&1 | egrep -v '(warning:|incomplete!)'
> +  $ hg merge -r 'desc("outside 4d")' 2>&1 | grep -E -v '(warning:|incomplete!)'
>     merging inside/f
>     merging outside/f
>     0 files updated, 0 files merged, 0 files removed, 2 files unresolved
> diff --git a/tests/test-obsolete-bounds-checking.t b/tests/test-obsolete-bounds-checking.t
> --- a/tests/test-obsolete-bounds-checking.t
> +++ b/tests/test-obsolete-bounds-checking.t
> @@ -17,7 +17,7 @@ Create a repo, set the username to somet
>     adding a
>     $ hg commit -m "Initial commit"
>     $ echo a >> a
> -  $ hg amend 2>&1 | egrep -v '^(\*\*|  )'
> +  $ hg amend 2>&1 | grep -E -v '^(\*\*|  )'
>     transaction abort!
>     rollback completed
>     Traceback (most recent call last):
> diff --git a/tests/test-obsolete-divergent.t b/tests/test-obsolete-divergent.t
> --- a/tests/test-obsolete-divergent.t
> +++ b/tests/test-obsolete-divergent.t
> @@ -674,19 +674,19 @@ fix the divergence
>   
>   check an obsolete changeset that was rewritten and also split
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=paper' | egrep 'rewritten|split'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=paper' | grep -E 'rewritten|split'
>      <td>rewritten as <a href="/rev/bed64f5d2f5a?style=paper">bed64f5d2f5a</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
>     split as <a href="/rev/7ae126973a96?style=paper">7ae126973a96</a> <a href="/rev/14608b260df8?style=paper">14608b260df8</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=coal' | egrep 'rewritten|split'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=coal' | grep -E 'rewritten|split'
>      <td>rewritten as <a href="/rev/bed64f5d2f5a?style=coal">bed64f5d2f5a</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span><br>
>     split as <a href="/rev/7ae126973a96?style=coal">7ae126973a96</a> <a href="/rev/14608b260df8?style=coal">14608b260df8</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=gitweb' | egrep 'rewritten|split'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=gitweb' | grep -E 'rewritten|split'
>     <td>rewritten as <a class="list" href="/rev/bed64f5d2f5a?style=gitweb">bed64f5d2f5a</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
>     <td>split as <a class="list" href="/rev/7ae126973a96?style=gitweb">7ae126973a96</a> <a class="list" href="/rev/14608b260df8?style=gitweb">14608b260df8</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=monoblue' | egrep 'rewritten|split'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=monoblue' | grep -E 'rewritten|split'
>     <dd>rewritten as <a href="/rev/bed64f5d2f5a?style=monoblue">bed64f5d2f5a</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
>     <dd>split as <a href="/rev/7ae126973a96?style=monoblue">7ae126973a96</a> <a href="/rev/14608b260df8?style=monoblue">14608b260df8</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></dd>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=spartan' | egrep 'rewritten|split'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/e442cfc57690?style=spartan' | grep -E 'rewritten|split'
>     <td class="obsolete">rewritten as <a href="/rev/bed64f5d2f5a?style=spartan">bed64f5d2f5a</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
>     <td class="obsolete">split as <a href="/rev/7ae126973a96?style=spartan">7ae126973a96</a> <a href="/rev/14608b260df8?style=spartan">14608b260df8</a>  by test <span class="age">Thu, 01 Jan 1970 00:00:00 +0000</span></td>
>   
> diff --git a/tests/test-obsolete.t b/tests/test-obsolete.t
> --- a/tests/test-obsolete.t
> +++ b/tests/test-obsolete.t
> @@ -1233,23 +1233,23 @@ check changeset with instabilities
>   
>   check explanation for an orphan, phase-divergent and content-divergent changeset
>   
> -  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | egrep '(orphan|phase-divergent|content-divergent):'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=paper' | grep -E '(orphan|phase-divergent|content-divergent):'
>      <td>orphan:  obsolete parent <a href="/rev/3de5eca88c00?style=paper">3de5eca88c00</a><br>
>     phase-divergent:  immutable predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a><br>
>     content-divergent: <a href="/rev/6f9641995072?style=paper">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=paper">245bde4270cd</a></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | egrep '(orphan|phase-divergent|content-divergent):'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=coal' | grep -E '(orphan|phase-divergent|content-divergent):'
>      <td>orphan:  obsolete parent <a href="/rev/3de5eca88c00?style=coal">3de5eca88c00</a><br>
>     phase-divergent:  immutable predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a><br>
>     content-divergent: <a href="/rev/6f9641995072?style=coal">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=coal">245bde4270cd</a></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | egrep '(orphan|phase-divergent|content-divergent):'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=gitweb' | grep -E '(orphan|phase-divergent|content-divergent):'
>     <td>orphan:  obsolete parent <a class="list" href="/rev/3de5eca88c00?style=gitweb">3de5eca88c00</a></td>
>     <td>phase-divergent:  immutable predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
>     <td>content-divergent: <a class="list" href="/rev/6f9641995072?style=gitweb">6f9641995072</a> (draft) predecessor <a class="list" href="/rev/245bde4270cd?style=gitweb">245bde4270cd</a></td>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | egrep '(orphan|phase-divergent|content-divergent):'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=monoblue' | grep -E '(orphan|phase-divergent|content-divergent):'
>     <dd>orphan:  obsolete parent <a href="/rev/3de5eca88c00?style=monoblue">3de5eca88c00</a></dd>
>     <dd>phase-divergent:  immutable predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
>     <dd>content-divergent: <a href="/rev/6f9641995072?style=monoblue">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=monoblue">245bde4270cd</a></dd>
> -  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | egrep '(orphan|phase-divergent|content-divergent):'
> +  $ get-with-headers.py localhost:$HGPORT 'rev/50c51b361e60?style=spartan' | grep -E '(orphan|phase-divergent|content-divergent):'
>     <td class="unstable">orphan:  obsolete parent <a href="/rev/3de5eca88c00?style=spartan">3de5eca88c00</a></td>
>     <td class="unstable">phase-divergent:  immutable predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
>     <td class="unstable">content-divergent: <a href="/rev/6f9641995072?style=spartan">6f9641995072</a> (draft) predecessor <a href="/rev/245bde4270cd?style=spartan">245bde4270cd</a></td>
> diff --git a/tests/test-persistent-nodemap-stream-clone.t b/tests/test-persistent-nodemap-stream-clone.t
> --- a/tests/test-persistent-nodemap-stream-clone.t
> +++ b/tests/test-persistent-nodemap-stream-clone.t
> @@ -43,7 +43,7 @@ Simple case
>   
>   No race condition
>   
> -  $ hg clone -U --stream ssh://user@dummy/test-repo stream-clone --debug | egrep '00(changelog|manifest)'
> +  $ hg clone -U --stream ssh://user@dummy/test-repo stream-clone --debug | grep -E '00(changelog|manifest)'
>     adding [s] 00manifest.n (62 bytes)
>     adding [s] 00manifest-*.nd (118 KB) (glob)
>     adding [s] 00manifest.d (4?? KB) (glob)
> @@ -52,7 +52,7 @@ No race condition
>     adding [s] 00changelog-*.nd (118 KB) (glob)
>     adding [s] 00changelog.d (3?? KB) (glob)
>     adding [s] 00changelog.i (313 KB)
> -  $ ls -1 stream-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 stream-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     00changelog-*.nd (glob)
>     00changelog.n
>     00manifest-*.nd (glob)
> @@ -112,7 +112,7 @@ Prepare a commit
>   
>   Do a mix of clone and commit at the same time so that the file listed on disk differ at actual transfer time.
>   
> -  $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-1 --debug 2>> clone-output | egrep '00(changelog|manifest)' >> clone-output; touch $HG_TEST_STREAM_WALKED_FILE_3) &
> +  $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-1 --debug 2>> clone-output | grep -E '00(changelog|manifest)' >> clone-output; touch $HG_TEST_STREAM_WALKED_FILE_3) &
>     $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1
>     $ hg -R test-repo/ commit -m foo
>     created new head
> @@ -211,7 +211,7 @@ Check the initial state
>   Performe the mix of clone and full refresh of the nodemap, so that the files
>   (and filenames) are different between listing time and actual transfer time.
>   
> -  $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-2 --debug 2>> clone-output-2 | egrep '00(changelog|manifest)' >> clone-output-2; touch $HG_TEST_STREAM_WALKED_FILE_3) &
> +  $ (hg clone -U --stream ssh://user@dummy/test-repo stream-clone-race-2 --debug 2>> clone-output-2 | grep -E '00(changelog|manifest)' >> clone-output-2; touch $HG_TEST_STREAM_WALKED_FILE_3) &
>     $ $RUNTESTDIR/testlib/wait-on-file 10 $HG_TEST_STREAM_WALKED_FILE_1
>     $ rm test-repo/.hg/store/00changelog.n
>     $ rm test-repo/.hg/store/00changelog-*.nd
> diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t
> --- a/tests/test-persistent-nodemap.t
> +++ b/tests/test-persistent-nodemap.t
> @@ -615,10 +615,10 @@ read/write patterns.
>     $ hg share race-repo ./other-wc --config format.use-share-safe=yes
>     updating working directory
>     5001 files updated, 0 files merged, 0 files removed, 0 files unresolved
> -  $ hg debugformat -R ./race-repo | egrep 'share-safe|persistent-nodemap'
> +  $ hg debugformat -R ./race-repo | grep -E 'share-safe|persistent-nodemap'
>     share-safe:         yes
>     persistent-nodemap: yes
> -  $ hg debugformat -R ./other-wc/ | egrep 'share-safe|persistent-nodemap'
> +  $ hg debugformat -R ./other-wc/ | grep -E 'share-safe|persistent-nodemap'
>     share-safe:         yes
>     persistent-nodemap: yes
>     $ hg -R ./other-wc update 'min(head())'
> @@ -818,7 +818,7 @@ downgrading
>       - changelog
>       - manifest
>     
> -  $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     [1]
>     $ hg debugnodemap --metadata
>   
> @@ -860,7 +860,7 @@ upgrading
>       - changelog
>       - manifest
>     
> -  $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     00changelog-*.nd (glob)
>     00changelog.n
>     00manifest-*.nd (glob)
> @@ -891,7 +891,7 @@ Running unrelated upgrade
>       - changelog
>       - manifest
>     
> -  $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 .hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     00changelog-*.nd (glob)
>     00changelog.n
>     00manifest-*.nd (glob)
> @@ -916,7 +916,7 @@ standard clone
>   The persistent nodemap should exist after a streaming clone
>   
>     $ hg clone --pull --quiet -U test-repo standard-clone
> -  $ ls -1 standard-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 standard-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     00changelog-*.nd (glob)
>     00changelog.n
>     00manifest-*.nd (glob)
> @@ -936,7 +936,7 @@ local clone
>   The persistent nodemap should exist after a streaming clone
>   
>     $ hg clone -U test-repo local-clone
> -  $ ls -1 local-clone/.hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)'
> +  $ ls -1 local-clone/.hg/store/ | grep -E '00(changelog|manifest)(\.n|-.*\.nd)'
>     00changelog-*.nd (glob)
>     00changelog.n
>     00manifest-*.nd (glob)
> diff --git a/tests/test-profile.t b/tests/test-profile.t
> --- a/tests/test-profile.t
> +++ b/tests/test-profile.t
> @@ -6,7 +6,7 @@ test --time
>   
>   Function to check that statprof ran
>     $ statprofran () {
> -  >   egrep 'Sample count:|No samples recorded' > /dev/null
> +  >   grep -E 'Sample count:|No samples recorded' > /dev/null
>     > }
>   
>   test --profile
> diff --git a/tests/test-pushvars.t b/tests/test-pushvars.t
> --- a/tests/test-pushvars.t
> +++ b/tests/test-pushvars.t
> @@ -5,7 +5,7 @@ Setup
>   
>     $ cat > $TESTTMP/pretxnchangegroup.sh << EOF
>     > #!/bin/sh
> -  > env | egrep "^HG_USERVAR_(DEBUG|BYPASS_REVIEW)" | sort
> +  > env | grep -E "^HG_USERVAR_(DEBUG|BYPASS_REVIEW)" | sort
>     > exit 0
>     > EOF
>     $ cat >> $HGRCPATH << EOF
> diff --git a/tests/test-remotefilelog-corrupt-cache.t b/tests/test-remotefilelog-corrupt-cache.t
> --- a/tests/test-remotefilelog-corrupt-cache.t
> +++ b/tests/test-remotefilelog-corrupt-cache.t
> @@ -37,7 +37,7 @@ Verify corrupt cache error message
>     > EOF
>     $ chmod u+w $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0
>     $ echo x > $CACHEDIR/master/11/f6ad8ec52a2984abaafd7c3b516503785c2072/1406e74118627694268417491f018a4a883152f0
> -  $ hg up tip 2>&1 | egrep "^[^ ].*unexpected remotefilelog"
> +  $ hg up tip 2>&1 | grep -E "^[^ ].*unexpected remotefilelog"
>     abort: unexpected remotefilelog header: illegal format
>   
>   Verify detection and remediation when remotefilelog.validatecachelog is set
> diff --git a/tests/test-remotefilelog-gcrepack.t b/tests/test-remotefilelog-gcrepack.t
> --- a/tests/test-remotefilelog-gcrepack.t
> +++ b/tests/test-remotefilelog-gcrepack.t
> @@ -41,7 +41,7 @@
>     2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
>     $ hg repack
>   
> -  $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
> +  $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
>     $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
>     $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
>   
> @@ -72,7 +72,7 @@
>   
>     $ hg repack
>   
> -  $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
> +  $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
>     $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
>     $TESTTMP/hgcache/master/packs/a4e1d094ec2aee8a08a4d6d95a13c634cc7d7394.datapack
>   
> @@ -98,7 +98,7 @@
>     2 files fetched over 1 fetches - (2 misses, 0.00% hit ratio) over *s (glob)
>     $ hg repack
>   
> -  $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
> +  $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
>     $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
>     $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
>   
> @@ -130,7 +130,7 @@
>   
>     $ hg repack
>   
> -  $ find $CACHEDIR | sort | egrep ".datapack|.histpack"
> +  $ find $CACHEDIR | sort | grep -E ".datapack|.histpack"
>     $TESTTMP/hgcache/master/packs/7bcd2d90b99395ca43172a0dd24e18860b2902f9.histpack
>     $TESTTMP/hgcache/master/packs/dc8f8fdc76690ce27791ce9f53a18da379e50d37.datapack
>   
> diff --git a/tests/test-sidedata.t b/tests/test-sidedata.t
> --- a/tests/test-sidedata.t
> +++ b/tests/test-sidedata.t
> @@ -61,10 +61,10 @@ Check that we can upgrade to sidedata
>   -------------------------------------
>   
>     $ hg init up-no-side-data --config experimental.revlogv2=no
> -  $ hg debugformat -v -R up-no-side-data | egrep 'changelog-v2|revlog-v2'
> +  $ hg debugformat -v -R up-no-side-data | grep -E 'changelog-v2|revlog-v2'
>     revlog-v2:           no     no      no
>     changelog-v2:        no     no      no
> -  $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | egrep 'changelog-v2|revlog-v2'
> +  $ hg debugformat -v -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data | grep -E 'changelog-v2|revlog-v2'
>     revlog-v2:           no    yes      no
>     changelog-v2:        no     no      no
>     $ hg debugupgraderepo -R up-no-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data > /dev/null
> @@ -73,10 +73,10 @@ Check that we can downgrade from sidedat
>   -----------------------------------------
>   
>     $ hg init up-side-data --config experimental.revlogv2=enable-unstable-format-and-corrupt-my-data
> -  $ hg debugformat -v -R up-side-data | egrep 'changelog-v2|revlog-v2'
> +  $ hg debugformat -v -R up-side-data | grep -E 'changelog-v2|revlog-v2'
>     revlog-v2:          yes     no      no
>     changelog-v2:        no     no      no
> -  $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | egrep 'changelog-v2|revlog-v2'
> +  $ hg debugformat -v -R up-side-data --config experimental.revlogv2=no | grep -E 'changelog-v2|revlog-v2'
>     revlog-v2:          yes     no      no
>     changelog-v2:        no     no      no
>     $ hg debugupgraderepo -R up-side-data --config experimental.revlogv2=no > /dev/null
> diff --git a/tests/test-sparse.t b/tests/test-sparse.t
> --- a/tests/test-sparse.t
> +++ b/tests/test-sparse.t
> @@ -312,7 +312,7 @@ Mix files and subdirectories, both "glob
>     $ touch dir1/notshown
>     $ hg commit -A dir1/notshown -m "notshown"
>     $ hg debugsparse --include 'dir1/dir2'
> -  $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg'
> +  $ "$PYTHON" $TESTDIR/list-tree.py . | grep -E -v '\.[\/]\.hg'
>     ./
>     ./dir1/
>     ./dir1/dir2/
> @@ -320,7 +320,7 @@ Mix files and subdirectories, both "glob
>     ./hide.orig
>     $ hg debugsparse --delete 'dir1/dir2'
>     $ hg debugsparse --include 'glob:dir1/dir2'
> -  $ "$PYTHON" $TESTDIR/list-tree.py . | egrep -v '\.[\/]\.hg'
> +  $ "$PYTHON" $TESTDIR/list-tree.py . | grep -E -v '\.[\/]\.hg'
>     ./
>     ./dir1/
>     ./dir1/dir2/
> diff --git a/tests/test-subrepo-deep-nested-change.t b/tests/test-subrepo-deep-nested-change.t
> --- a/tests/test-subrepo-deep-nested-change.t
> +++ b/tests/test-subrepo-deep-nested-change.t
> @@ -396,7 +396,7 @@ Archive wdir() with subrepos
>     archiving (sub1/sub2) [==============>                ] 1/2\r (no-eol) (esc)
>     archiving (sub1/sub2) [==============================>] 2/2\r (no-eol) (esc)
>                                                                 \r (no-eol) (esc)
> -  $ diff -r . ../wdir | egrep -v '\.hg$|^Common subdirectories:'
> +  $ diff -r . ../wdir | grep -E -v '\.hg$|^Common subdirectories:'
>     Only in ../wdir: .hg_archival.txt
>   
>     $ find ../wdir -type f | sort
> @@ -815,7 +815,7 @@ largefile and a normal file.  Then a lar
>     $ hg add sub1/sub2
>   
>     $ hg archive -S -r 'wdir()' ../wdir2
> -  $ diff -r . ../wdir2 | egrep -v '\.hg$|^Common subdirectories:'
> +  $ diff -r . ../wdir2 | grep -E -v '\.hg$|^Common subdirectories:'
>     Only in ../wdir2: .hg_archival.txt
>     Only in .: .hglf
>     Only in .: foo
> @@ -854,7 +854,7 @@ Test 'wdir()' modified file archiving wi
>     $ echo 'mod' > large.bin
>     $ echo 'mod' > sub1/sub2/large.dat
>     $ hg archive -S -r 'wdir()' ../wdir3
> -  $ diff -r . ../wdir3 | egrep -v '\.hg$|^Common subdirectories'
> +  $ diff -r . ../wdir3 | grep -E -v '\.hg$|^Common subdirectories'
>     Only in ../wdir3: .hg_archival.txt
>     Only in .: .hglf
>     Only in .: foo
> diff --git a/tests/test-subrepo-git.t b/tests/test-subrepo-git.t
> --- a/tests/test-subrepo-git.t
> +++ b/tests/test-subrepo-git.t
> @@ -263,7 +263,7 @@ make upstream git changes
>   make and push changes to hg without updating the subrepo
>   
>     $ cd ../t
> -  $ hg clone . ../td 2>&1 | egrep -v '^Cloning into|^done\.'
> +  $ hg clone . ../td 2>&1 | grep -E -v '^Cloning into|^done\.'
>     updating to branch default
>     cloning subrepo s from $TESTTMP/gitroot
>     checking out detached HEAD in subrepository "s"
> diff --git a/tests/test-subrepo-recursion.t b/tests/test-subrepo-recursion.t
> --- a/tests/test-subrepo-recursion.t
> +++ b/tests/test-subrepo-recursion.t
> @@ -436,7 +436,7 @@ Test archiving to zip file (unzip output
>   
>   (unzip date formating is unstable, we do not care about it and glob it out)
>   
> -  $ unzip -l ../archive.zip | grep -v -- ----- | egrep -v files$
> +  $ unzip -l ../archive.zip | grep -v -- ----- | grep -E -v files$
>     Archive:  ../archive.zip
>       Length [ ]* Date [ ]* Time [ ]* Name (re)
>           172  [0-9:\- ]*  .hg_archival.txt (re)
> diff --git a/tests/test-subrepo-svn.t b/tests/test-subrepo-svn.t
> --- a/tests/test-subrepo-svn.t
> +++ b/tests/test-subrepo-svn.t
> @@ -4,7 +4,7 @@
>     $ SVNREPOURL="`"$PYTHON" $TESTDIR/svnurlof.py \"$SVNREPOPATH\"`"
>   
>     $ filter_svn_output () {
> -  >     egrep -v 'Committing|Transmitting|Updating|(^$)' || true
> +  >     grep -E -v 'Committing|Transmitting|Updating|(^$)' || true
>     > }
>   
>   create subversion repo
> diff --git a/tests/test-template-map.t b/tests/test-template-map.t
> --- a/tests/test-template-map.t
> +++ b/tests/test-template-map.t
> @@ -227,7 +227,7 @@ as default style, except for extra phase
>     $ hg log --style default > style.out
>     $ cmp log.out style.out || diff -u log.out style.out
>     $ hg log -T phases > phases.out
> -  $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
> +  $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
>     +phase:       draft
>     +phase:       draft
>     +phase:       draft
> @@ -243,7 +243,7 @@ as default style, except for extra phase
>     $ hg log -v --style default > style.out
>     $ cmp log.out style.out || diff -u log.out style.out
>     $ hg log -v -T phases > phases.out
> -  $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
> +  $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
>     +phase:       draft
>     +phase:       draft
>     +phase:       draft
> @@ -299,7 +299,7 @@ Default style should also preserve color
>     $ hg --color=debug log --style default > style.out
>     $ cmp log.out style.out || diff -u log.out style.out
>     $ hg --color=debug log -T phases > phases.out
> -  $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
> +  $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
>     +[log.phase|phase:       draft]
>     +[log.phase|phase:       draft]
>     +[log.phase|phase:       draft]
> @@ -315,7 +315,7 @@ Default style should also preserve color
>     $ hg --color=debug -v log --style default > style.out
>     $ cmp log.out style.out || diff -u log.out style.out
>     $ hg --color=debug -v log -T phases > phases.out
> -  $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
> +  $ diff -U 0 log.out phases.out | grep -E -v '^---|^\+\+\+|^@@'
>     +[log.phase|phase:       draft]
>     +[log.phase|phase:       draft]
>     +[log.phase|phase:       draft]
> 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
> @@ -2013,7 +2013,7 @@ downgrade it from dirstate-v2 automatica
>   For multiple change at the same time
>   ------------------------------------
>   
> -  $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
> +  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
>     dirstate-v2:         no
>     tracked-hint:       yes
>     share-safe:          no
> @@ -2031,7 +2031,7 @@ For multiple change at the same time
>     (see `hg help config.format.use-share-safe` for details)
>     automatically downgrading repository from the `tracked-hint` feature
>     (see `hg help config.format.use-dirstate-tracked-hint` for details)
> -  $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
> +  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
>     dirstate-v2:        yes
>     tracked-hint:        no
>     share-safe:         yes
> @@ -2040,7 +2040,7 @@ Quiet upgrade and downgrade
>   ---------------------------
>   
>   
> -  $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
> +  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
>     dirstate-v2:        yes
>     tracked-hint:        no
>     share-safe:         yes
> @@ -2055,7 +2055,7 @@ Quiet upgrade and downgrade
>     >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
>     >     --config format.use-share-safe=no
>   
> -  $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
> +  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
>     dirstate-v2:         no
>     tracked-hint:       yes
>     share-safe:          no
> @@ -2070,7 +2070,7 @@ Quiet upgrade and downgrade
>     >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories=yes \
>     >     --config format.use-share-safe.automatic-upgrade-of-mismatching-repositories:quiet=yes \
>     >     --config format.use-share-safe=yes
> -  $ hg debugformat -R auto-upgrade | egrep '(dirstate-v2|tracked|share-safe)'
> +  $ hg debugformat -R auto-upgrade | grep -E '(dirstate-v2|tracked|share-safe)'
>     dirstate-v2:        yes
>     tracked-hint:        no
>     share-safe:         yes
> diff --git a/tests/test-walk.t b/tests/test-walk.t
> --- a/tests/test-walk.t
> +++ b/tests/test-walk.t
> @@ -676,7 +676,7 @@ Test split patterns on overflow
>     > EOF
>     $ "$PYTHON" printnum.py >> overflow.list
>     $ echo fenugreek >> overflow.list
> -  $ hg debugwalk 'listfile:overflow.list' 2>&1 | egrep -v '^xxx'
> +  $ hg debugwalk 'listfile:overflow.list' 2>&1 | grep -E -v '^xxx'
>     f  fennel     fennel     exact
>     f  fenugreek  fenugreek  exact
>     $ cd ..
> diff --git a/tests/test-worker.t b/tests/test-worker.t
> --- a/tests/test-worker.t
> +++ b/tests/test-worker.t
> @@ -84,7 +84,7 @@ Known exception should be caught, but pr
>     [255]
>   
>     $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
> -  > test 100000.0 abort --traceback 2>&1 | egrep '(WorkerError|Abort)'
> +  > test 100000.0 abort --traceback 2>&1 | grep -E '(WorkerError|Abort)'
>         raise error.Abort(b'known exception')
>     mercurial.error.Abort: known exception
>         raise error.WorkerError(status)
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at lists.mercurial-scm.org
> https://lists.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list