test-chg.t
205 lines
| 4.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-chg.t
Yuya Nishihara
|
r29274 | #require chg | ||
Yuya Nishihara
|
r29275 | $ cp $HGRCPATH $HGRCPATH.orig | ||
Jun Wu
|
r28516 | init repo | ||
Yuya Nishihara
|
r29274 | $ chg init foo | ||
Jun Wu
|
r28516 | $ cd foo | ||
ill-formed config | ||||
Yuya Nishihara
|
r29274 | $ chg status | ||
Jun Wu
|
r28516 | $ echo '=brokenconfig' >> $HGRCPATH | ||
Yuya Nishihara
|
r29274 | $ chg status | ||
Jun Wu
|
r28516 | hg: parse error at * (glob) | ||
[255] | ||||
Jun Wu
|
r29088 | |||
Yuya Nishihara
|
r29275 | $ cp $HGRCPATH.orig $HGRCPATH | ||
Jun Wu
|
r30677 | |||
long socket path | ||||
$ sockpath=$TESTTMP/this/path/should/be/longer/than/one-hundred-and-seven/characters/where/107/is/the/typical/size/limit/of/unix-domain-socket | ||||
$ mkdir -p $sockpath | ||||
$ bakchgsockname=$CHGSOCKNAME | ||||
$ CHGSOCKNAME=$sockpath/server | ||||
$ export CHGSOCKNAME | ||||
$ chg root | ||||
$TESTTMP/foo | ||||
$ rm -rf $sockpath | ||||
$ CHGSOCKNAME=$bakchgsockname | ||||
$ export CHGSOCKNAME | ||||
Yuya Nishihara
|
r29275 | $ cd .. | ||
Yuya Nishihara
|
r31107 | editor | ||
------ | ||||
$ cat >> pushbuffer.py <<EOF | ||||
> def reposetup(ui, repo): | ||||
> repo.ui.pushbuffer(subproc=True) | ||||
> EOF | ||||
$ chg init editor | ||||
$ cd editor | ||||
by default, system() should be redirected to the client: | ||||
$ touch foo | ||||
$ CHGDEBUG= HGEDITOR=cat chg ci -Am channeled --edit 2>&1 \ | ||||
> | egrep "HG:|run 'cat" | ||||
Jun Wu
|
r34310 | chg: debug: * run 'cat "*"' at '$TESTTMP/editor' (glob) | ||
Yuya Nishihara
|
r31107 | HG: Enter commit message. Lines beginning with 'HG:' are removed. | ||
HG: Leave message empty to abort commit. | ||||
HG: -- | ||||
HG: user: test | ||||
HG: branch 'default' | ||||
HG: added foo | ||||
but no redirection should be made if output is captured: | ||||
$ touch bar | ||||
$ CHGDEBUG= HGEDITOR=cat chg ci -Am bufferred --edit \ | ||||
> --config extensions.pushbuffer="$TESTTMP/pushbuffer.py" 2>&1 \ | ||||
> | egrep "HG:|run 'cat" | ||||
[1] | ||||
check that commit commands succeeded: | ||||
$ hg log -T '{rev}:{desc}\n' | ||||
1:bufferred | ||||
0:channeled | ||||
$ cd .. | ||||
Yuya Nishihara
|
r30847 | pager | ||
----- | ||||
$ cat >> fakepager.py <<EOF | ||||
> import sys | ||||
> for line in sys.stdin: | ||||
> sys.stdout.write('paged! %r\n' % line) | ||||
> EOF | ||||
enable pager extension globally, but spawns the master server with no tty: | ||||
$ chg init pager | ||||
$ cd pager | ||||
$ cat >> $HGRCPATH <<EOF | ||||
> [extensions] | ||||
> pager = | ||||
> [pager] | ||||
Matt Harbison
|
r39743 | > pager = "$PYTHON" $TESTTMP/fakepager.py | ||
Yuya Nishihara
|
r30847 | > EOF | ||
$ chg version > /dev/null | ||||
$ touch foo | ||||
$ chg ci -qAm foo | ||||
pager should be enabled if the attached client has a tty: | ||||
$ chg log -l1 -q --config ui.formatted=True | ||||
paged! '0:1f7b0de80e11\n' | ||||
$ chg log -l1 -q --config ui.formatted=False | ||||
0:1f7b0de80e11 | ||||
Jun Wu
|
r31890 | chg waits for pager if runcommand raises | ||
$ cat > $TESTTMP/crash.py <<EOF | ||||
Yuya Nishihara
|
r32337 | > from mercurial import registrar | ||
Jun Wu
|
r31890 | > cmdtable = {} | ||
Yuya Nishihara
|
r32337 | > command = registrar.command(cmdtable) | ||
Pulkit Goyal
|
r33097 | > @command(b'crash') | ||
Jun Wu
|
r31890 | > def pagercrash(ui, repo, *pats, **opts): | ||
> ui.write('going to crash\n') | ||||
> raise Exception('.') | ||||
> EOF | ||||
$ cat > $TESTTMP/fakepager.py <<EOF | ||||
Augie Fackler
|
r33951 | > from __future__ import absolute_import | ||
> import sys | ||||
> import time | ||||
Jun Wu
|
r31890 | > for line in iter(sys.stdin.readline, ''): | ||
> if 'crash' in line: # only interested in lines containing 'crash' | ||||
> # if chg exits when pager is sleeping (incorrectly), the output | ||||
> # will be captured by the next test case | ||||
> time.sleep(1) | ||||
> sys.stdout.write('crash-pager: %s' % line) | ||||
> EOF | ||||
$ cat >> .hg/hgrc <<EOF | ||||
> [extensions] | ||||
> crash = $TESTTMP/crash.py | ||||
> EOF | ||||
$ chg crash --pager=on --config ui.formatted=True 2>/dev/null | ||||
crash-pager: going to crash | ||||
[255] | ||||
Yuya Nishihara
|
r30847 | $ cd .. | ||
Yuya Nishihara
|
r29275 | server lifecycle | ||
---------------- | ||||
chg server should be restarted on code change, and old server will shut down | ||||
automatically. In this test, we use the following time parameters: | ||||
- "sleep 1" to make mtime different | ||||
- "sleep 2" to notice mtime change (polling interval is 1 sec) | ||||
set up repository with an extension: | ||||
$ chg init extreload | ||||
$ cd extreload | ||||
$ touch dummyext.py | ||||
$ cat <<EOF >> .hg/hgrc | ||||
> [extensions] | ||||
> dummyext = dummyext.py | ||||
> EOF | ||||
isolate socket directory for stable result: | ||||
$ OLDCHGSOCKNAME=$CHGSOCKNAME | ||||
$ mkdir chgsock | ||||
$ CHGSOCKNAME=`pwd`/chgsock/server | ||||
warm up server: | ||||
$ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start' | ||||
Jun Wu
|
r34310 | chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob) | ||
Yuya Nishihara
|
r29275 | |||
new server should be started if extension modified: | ||||
$ sleep 1 | ||||
$ touch dummyext.py | ||||
$ CHGDEBUG= chg log 2>&1 | egrep 'instruction|start' | ||||
Jun Wu
|
r34310 | chg: debug: * instruction: unlink $TESTTMP/extreload/chgsock/server-* (glob) | ||
chg: debug: * instruction: reconnect (glob) | ||||
chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob) | ||||
Yuya Nishihara
|
r29275 | |||
old server will shut down, while new server should still be reachable: | ||||
$ sleep 2 | ||||
$ CHGDEBUG= chg log 2>&1 | (egrep 'instruction|start' || true) | ||||
socket file should never be unlinked by old server: | ||||
(simulates unowned socket by updating mtime, which makes sure server exits | ||||
at polling cycle) | ||||
$ ls chgsock/server-* | ||||
chgsock/server-* (glob) | ||||
$ touch chgsock/server-* | ||||
$ sleep 2 | ||||
$ ls chgsock/server-* | ||||
chgsock/server-* (glob) | ||||
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' | ||||
Jun Wu
|
r34310 | chg: debug: * start cmdserver at $TESTTMP/extreload/chgsock/server.* (glob) | ||
Yuya Nishihara
|
r29275 | |||
shut down servers and restore environment: | ||||
$ rm -R chgsock | ||||
$ CHGSOCKNAME=$OLDCHGSOCKNAME | ||||
$ cd .. | ||||