##// END OF EJS Templates
hgweb: profile HTTP requests...
hgweb: profile HTTP requests Currently, running `hg serve --profile` doesn't yield anything useful: when the process is terminated the profiling output displays results from the main thread, which typically spends most of its time in select.select(). Furthermore, it has no meaningful results from mercurial.* modules because the threads serving HTTP requests don't actually get profiled. This patch teaches the hgweb wsgi applications to profile individual requests. If profiling is enabled, the profiler kicks in after HTTP/WSGI environment processing but before Mercurial's main request processing. The profile results are printed to the configured profiling output. If running `hg serve` from a shell, they will be printed to stderr, just before the HTTP request line is logged. If profiling to a file, we only write a single profile to the file because the file is not opened in append mode. We could add support for appending to files in a future patch if someone wants it. Per request profiling doesn't work with the statprof profiler because internally that profiler collects samples from the thread that *initially* requested profiling be enabled. I have plans to address this by vendoring Facebook's customized statprof and then improving it.

File last commit:

r29688:30c59bdd default
r29787:80df0426 default
Show More
test-pull-http.t
80 lines | 2.1 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: replace exit 80 with #require
r22046 #require killdaemons
Matt Mackall
tests: unify test-pull-http
r12480
$ hg init test
$ cd test
$ echo a > a
$ hg ci -Ama
adding a
$ cd ..
$ hg clone test test2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd test2
$ echo a >> a
$ hg ci -mb
Augie Fackler
clone: don't save user's password in .hg/hgrc (Issue3122)
r15552 Cloning with a password in the URL should not save the password in .hg/hgrc:
$ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
$ hg clone http://foo:xyzzy@localhost:$HGPORT/ test3
requesting all changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat test3/.hg/hgrc
Jordi Gutiérrez Hermoso
config: use the same hgrc for a cloned repo as for an uninitted repo...
r22837 # example repository config (see "hg help config" for more info)
Augie Fackler
clone: don't save user's password in .hg/hgrc (Issue3122)
r15552 [paths]
default = http://foo@localhost:$HGPORT/
Jordi Gutiérrez Hermoso
config: use the same hgrc for a cloned repo as for an uninitted repo...
r22837
# path aliases to other clones of this repo in URLs or filesystem paths
# (see "hg help config.paths" for more info)
#
# default-push = ssh://jdoe@example.net/hg/jdoes-fork
# my-fork = ssh://jdoe@example.net/hg/jdoes-fork
# my-clone = /home/jdoe/jdoes-clone
[ui]
# name and email (local to this repository, optional), e.g.
# username = Jane Doe <jdoe@example.com>
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 $ killdaemons.py
Augie Fackler
clone: don't save user's password in .hg/hgrc (Issue3122)
r15552
Matt Mackall
tests: unify test-pull-http
r12480 expect error, cloning not allowed
$ echo '[web]' > .hg/hgrc
$ echo 'allowpull = false' >> .hg/hgrc
$ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
$ cat hg.pid >> $DAEMON_PIDS
Pierre-Yves David
tests: remove all remaining usage of experimental.bundle2-exp...
r29688 $ hg clone http://localhost:$HGPORT/ test4 # bundle2+
Pierre-Yves David
test: use both bundle formats in test-pull-http...
r25372 requesting all changes
abort: authorization failed
[255]
Pierre-Yves David
tests: use 'legacy.exchange' option in various mixed tests...
r29687 $ hg clone http://localhost:$HGPORT/ test4 --config devel.legacy.exchange=bundle1
Matt Mackall
tests: unify test-pull-http
r12480 abort: authorization failed
[255]
Matt Mackall
tests: drop DAEMON_PIDS from killdaemons calls
r25474 $ killdaemons.py
Matt Mackall
tests: unify test-pull-http
r12480
serve errors
$ cat errors.log
$ req() {
Adrian Buehlmann
check-code: add 'no tab indent' check for unified tests...
r12743 > hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log
> cat hg.pid >> $DAEMON_PIDS
> hg --cwd ../test pull http://localhost:$HGPORT/
Matt Mackall
tests: drop explicit $TESTDIR from executables...
r25472 > killdaemons.py hg.pid
Adrian Buehlmann
check-code: add 'no tab indent' check for unified tests...
r12743 > echo % serve errors
> cat errors.log
Matt Mackall
tests: unify test-pull-http
r12480 > }
expect error, pulling not allowed
$ req
Mads Kiilerich
tests: reintroduce ":$HGPORT" in test output...
r12643 pulling from http://localhost:$HGPORT/
Pierre-Yves David
test: use bundle2 in test-pull-http...
r25391 searching for changes
Matt Mackall
tests: unify test-pull-http
r12480 abort: authorization failed
% serve errors
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..