##// END OF EJS Templates
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)...
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.

File last commit:

r31773:5646d7bc default
r32050:77eaf953 4.1.3 stable
Show More
test-blackbox.t
223 lines | 8.8 KiB | text/troff | Tads3Lexer
Durham Goode
blackbox: tests for the blackbox extension...
r18674 setup
$ cat >> $HGRCPATH <<EOF
> [extensions]
> blackbox=
Gregory Szorc
tests: move mock blackbox extension into own file...
r24705 > mock=$TESTDIR/mockblackbox.py
Durham Goode
blackbox: add backup bundle paths to blackbox logs...
r18766 > mq=
Augie Fackler
blackbox: also log alias expansions...
r29846 > [alias]
> confuse = log --limit 3
Durham Goode
blackbox: tests for the blackbox extension...
r18674 > EOF
$ hg init blackboxtest
$ cd blackboxtest
command, exit codes, and duration
$ echo a > a
$ hg add a
timeless
blackbox: log dirty state...
r28246 $ hg blackbox --config blackbox.dirty=True
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> add a
timeless
blackbox: store the blackbox ui object instead of the log file...
r28247 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> add a exited 0 after * seconds (glob)
timeless
blackbox: log dirty state...
r28246 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000+ (5000)> blackbox
Durham Goode
blackbox: tests for the blackbox extension...
r18674
Augie Fackler
blackbox: also log alias expansions...
r29846 alias expansion is logged
$ hg confuse
$ hg blackbox
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> add a
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> add a exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000+ (5000)> blackbox
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000+ (5000)> blackbox --config blackbox.dirty=True exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> confuse
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> alias 'confuse' expands to 'log --limit 3'
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> confuse exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> blackbox
Durham Goode
blackbox: only show new heads on incoming...
r18677 incoming change tracking
create two heads to verify that we only see one change in the log later
$ hg commit -ma
$ hg up null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo b > b
$ hg commit -Amb
adding b
created new head
clone, commit, pull
$ hg clone . ../blackboxtest2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo c > c
$ hg commit -Amc
adding c
$ cd ../blackboxtest2
$ hg pull
Simon Heimberg
tests: append glob to filename output when required for windows...
r18719 pulling from $TESTTMP/blackboxtest (glob)
Durham Goode
blackbox: only show new heads on incoming...
r18677 searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
timeless
blackbox: flush output file descriptor...
r28025 $ hg blackbox -l 6
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> pull
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> updated served branch cache in * seconds (glob)
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> wrote served branch cache with 1 labels and 2 nodes
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> 1 incoming changes - new heads: d02f48003e62
timeless
blackbox: store the blackbox ui object instead of the log file...
r28247 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> pull exited 0 after * seconds (glob)
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> blackbox -l 6
Durham Goode
blackbox: only show new heads on incoming...
r18677
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 we must not cause a failure if we cannot write to the log
$ hg rollback
repository tip rolled back to revision 1 (undo pull)
Durham Goode
blackbox: don't run permission tests on non-unix systems...
r19082
timeless
tests: change blackbox test to work cross platform...
r28024 $ mv .hg/blackbox.log .hg/blackbox.log-
$ mkdir .hg/blackbox.log
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 $ hg --debug incoming
timeless
tests: change blackbox test to work cross platform...
r28024 warning: cannot write to blackbox.log: * (glob)
Bryan O'Sullivan
blackbox: fix a few check-code portability errors
r18836 comparing with $TESTTMP/blackboxtest (glob)
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 query 1; heads
searching for changes
all local heads known remotely
changeset: 2:d02f48003e62c24e2659d97d30f2a83abe5d5d51
tag: tip
phase: draft
parent: 1:6563da9dcf87b1949716e38ff3e3dfaa3198eb06
parent: -1:0000000000000000000000000000000000000000
manifest: 2:ab9d46b053ebf45b7996f2922b9893ff4b63d892
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files+: c
extra: branch=default
description:
c
$ hg pull
Bryan O'Sullivan
blackbox: fix a few check-code portability errors
r18836 pulling from $TESTTMP/blackboxtest (glob)
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
timeless
tests: change blackbox test to work cross platform...
r28024 a failure reading from the log is fatal
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 $ hg blackbox -l 3
timeless
tests: change blackbox test to work cross platform...
r28024 abort: *$TESTTMP/blackboxtest2/.hg/blackbox.log* (glob)
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786 [255]
timeless
tests: change blackbox test to work cross platform...
r28024 $ rmdir .hg/blackbox.log
$ mv .hg/blackbox.log- .hg/blackbox.log
Bryan O'Sullivan
blackbox: prevent failed I/O from causing hg to abort...
r18786
Durham Goode
blackbox: add backup bundle paths to blackbox logs...
r18766 backup bundles get logged
$ touch d
$ hg commit -Amd
adding d
created new head
$ hg strip tip
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
saved backup bundle to $TESTTMP/blackboxtest2/.hg/strip-backup/*-backup.hg (glob)
timeless
blackbox: flush output file descriptor...
r28025 $ hg blackbox -l 6
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @73f6ee326b27d820b0472f1a825e3a50f3dc489b (5000)> strip tip
Matt Harbison
test-blackbox: add missing glob for Windows...
r28888 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> saved backup bundle to $TESTTMP/blackboxtest2/.hg/strip-backup/73f6ee326b27-7612e004-backup.hg (glob)
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> updated base branch cache in * seconds (glob)
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> wrote base branch cache with 1 labels and 2 nodes
timeless
blackbox: store the blackbox ui object instead of the log file...
r28247 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> strip tip exited 0 after * seconds (glob)
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> blackbox -l 6
Durham Goode
blackbox: add backup bundle paths to blackbox logs...
r18766
Durham Goode
blackbox: tests for the blackbox extension...
r18674 extension and python hooks - use the eol extension for a pythonhook
$ echo '[extensions]' >> .hg/hgrc
$ echo 'eol=' >> .hg/hgrc
$ echo '[hooks]' >> .hg/hgrc
$ echo 'update = echo hooked' >> .hg/hgrc
$ hg update
FUJIWARA Katsunori
merge: make in-memory changes visible to external update hooks...
r26752 hooked
Pierre-Yves David
update: wlock the repo for the whole 'hg update' command...
r26028 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Pierre-Yves David
update: warn about other topological heads on bare update...
r28029 1 other heads for branch "default"
timeless
blackbox: flush output file descriptor...
r28025 $ hg blackbox -l 6
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> update
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> writing .hg/cache/tags2-visible with 0 tags
1970/01/01 00:00:00 bob @6563da9dcf87b1949716e38ff3e3dfaa3198eb06 (5000)> pythonhook-preupdate: hgext.eol.preupdate finished in * seconds (glob)
1970/01/01 00:00:00 bob @d02f48003e62c24e2659d97d30f2a83abe5d5d51 (5000)> exthook-update: echo hooked finished in * seconds (glob)
timeless
blackbox: store the blackbox ui object instead of the log file...
r28247 1970/01/01 00:00:00 bob @d02f48003e62c24e2659d97d30f2a83abe5d5d51 (5000)> update exited 0 after * seconds (glob)
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @d02f48003e62c24e2659d97d30f2a83abe5d5d51 (5000)> blackbox -l 6
Durham Goode
blackbox: tests for the blackbox extension...
r18674
Bryan O'Sullivan
blackbox: automatically rotate log files...
r19066 log rotation
$ echo '[blackbox]' >> .hg/hgrc
$ echo 'maxsize = 20 b' >> .hg/hgrc
$ echo 'maxfiles = 3' >> .hg/hgrc
$ hg status
$ hg status
$ hg status
$ hg tip -q
Gregory Szorc
tests: move blackbox testing of tags to test-tags.t...
r24706 2:d02f48003e62
Bryan O'Sullivan
blackbox: automatically rotate log files...
r19066 $ ls .hg/blackbox.log*
.hg/blackbox.log
.hg/blackbox.log.1
.hg/blackbox.log.2
timeless
tests: change blackbox test to work cross platform...
r28024 $ cd ..
$ hg init blackboxtest3
$ cd blackboxtest3
$ hg blackbox
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @0000000000000000000000000000000000000000 (5000)> blackbox
timeless
tests: change blackbox test to work cross platform...
r28024 $ mv .hg/blackbox.log .hg/blackbox.log-
$ mkdir .hg/blackbox.log
Danek Duvall
tests: Solaris sed does not support "\n" meaning newline in the RHS of s///...
r28336 $ sed -e 's/\(.*test1.*\)/#\1/; s#\(.*commit2.*\)#os.rmdir(".hg/blackbox.log")\
> os.rename(".hg/blackbox.log-", ".hg/blackbox.log")\
> \1#' $TESTDIR/test-dispatch.py > ../test-dispatch.py
timeless
tests: divorce blackbox test from test-dispatch.py...
r28406 $ python $TESTDIR/blackbox-readonly-dispatch.py
timeless
tests: change blackbox test to work cross platform...
r28024 running: add foo
result: 0
running: commit -m commit1 -d 2000-01-01 foo
result: None
running: commit -m commit2 -d 2000-01-02 foo
result: None
running: log -r 0
changeset: 0:0e4634943879
user: test
date: Sat Jan 01 00:00:00 2000 +0000
summary: commit1
result: None
running: log -r tip
changeset: 1:45589e459b2e
tag: tip
user: test
date: Sun Jan 02 00:00:00 2000 +0000
summary: commit2
result: None
$ hg blackbox
timeless
blackbox: properly replace ui class...
r28248 1970/01/01 00:00:00 bob @0e46349438790c460c5c9f7546bfcd39b267bbd2 (5000)> commit -m commit2 -d 2000-01-02 foo
1970/01/01 00:00:00 bob @0e46349438790c460c5c9f7546bfcd39b267bbd2 (5000)> updated served branch cache in * seconds (glob)
1970/01/01 00:00:00 bob @0e46349438790c460c5c9f7546bfcd39b267bbd2 (5000)> wrote served branch cache with 1 labels and 1 nodes
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> commit -m commit2 -d 2000-01-02 foo exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> log -r 0
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> writing .hg/cache/tags2-visible with 0 tags
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> log -r 0 exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> log -r tip
1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> log -r tip exited 0 after * seconds (glob)
timeless
blackbox: log working directory version...
r28245 1970/01/01 00:00:00 bob @45589e459b2edfbf3dbde7e01f611d2c1e7453d7 (5000)> blackbox
Bryan O'Sullivan
blackbox: automatically rotate log files...
r19066
timeless
blackbox: guard against recursion from dirty check
r28407 Test log recursion from dirty status check
$ cat > ../r.py <<EOF
> from mercurial import context, error, extensions
> x=[False]
> def status(orig, *args, **opts):
> args[0].repo().ui.log("broken", "recursion?")
> return orig(*args, **opts)
> def reposetup(ui, repo):
> extensions.wrapfunction(context.basectx, 'status', status)
> EOF
$ hg id --config extensions.x=../r.py --config blackbox.dirty=True
45589e459b2e tip
Durham Goode
blackbox: tests for the blackbox extension...
r18674 cleanup
$ cd ..