##// END OF EJS Templates
bisect: avoid adding irrelevant revisions to bisect state...
bisect: avoid adding irrelevant revisions to bisect state When adding new revisions to the bisect state, it only makes sense to add information about revisions that are under consideration (i.e., those that are topologically between the known good and bad revisions). However, if the user passes in a revset (e.g., '!merge()' to exclude merge commits), hg will resolve the revset first and add all matching revisions to the bisect state (which in this case would likely be the majority of revisions in the repo). To avoid this, revisions should only be added to the bisect state if they are between the good and bad revisions (and therefore relevant to the bisection). -- Here are the results of some performance tests using the `mozilla-central` repo (since it is one of the largest freely-available hg repositories in the wild). These tests compare the performance of a locally-built `hg` before and after application of this series. Note that `--noupdate` is passed to avoid including update time (which should not vary across cases). Setup (run between each test): $ hg bisect --reset $ hg bisect --noupdate --bad 56c3ad4bde5c70714b784ccf15d099e0df0f5bde $ hg bisect --noupdate --good 57426696adaf08298af3027fa77486fee0633b13 Test using a revset that returns a very large number of revisions: $ time hg bisect --noupdate --skip '!merge()' > /dev/null Before: real 0m9.398s user 0m9.233s sys 0m0.120s After: real 0m1.513s user 0m1.425s sys 0m0.052s Test using a revset that is expensive to compute: $ time hg bisect --noupdate --skip 'desc("Bug")' > /dev/null Before: real 0m49.853s user 0m49.580s sys 0m0.243s After: real 0m4.120s user 0m4.036s sys 0m0.048s

File last commit:

r49728:5aafc3c5 default
r50337:81623652 default
Show More
test-basic.t
259 lines | 5.4 KiB | text/troff | Tads3Lexer
Matt Mackall
tests: unify test-basic
r11742 Create a repository:
Gregory Szorc
tests: conditionalize tests based on presence of custom extensions...
r37360 #if no-extraextensions
Matt Mackall
config: make repo optional again
r20608 $ hg config
run-tests: use a small timeout for chg instance...
r48576 chgserver.idletimeout=60
Pierre-Yves David
devel: rename 'all' to 'all-warnings' (BC)...
r25290 devel.all-warnings=true
devel: activate default-date in tests...
r32410 devel.default-date=0 0
FUJIWARA Katsunori
tests: add extra output for fsmonitor at showconfig
r33426 extensions.fsmonitor= (fsmonitor !)
dirstate-v2: rename the configuration to enable the format...
r49523 format.use-dirstate-v2=1 (dirstate-v2 !)
Matt Harbison
tests: remove (glob) annotations that were only for '\' matches...
r35394 largefiles.usercache=$TESTTMP/.cache/largefiles
lfs.usercache=$TESTTMP/.cache/lfs
Matt Mackall
config: make repo optional again
r20608 ui.slash=True
ui.interactive=False
Martin von Zweigbergk
errors: add config that lets user get more detailed exit codes...
r46430 ui.detailed-exit-code=True
Boris Feld
run-tests: define the default merge tool through configuration...
r40506 ui.merge=internal:merge
FUJIWARA Katsunori
filemerge: use 'basic' as the default of '[ui] mergemarkers' for safety...
r21918 ui.mergemarkers=detailed
Yuya Nishihara
ui: separate option to show prompt echo, enabled only in tests (issue4417)...
r23053 ui.promptecho=True
Valentin Gatien-Baron
tests: setup dummyssh as the default ssh...
r48731 ui.ssh=* (glob)
run-tests: allow some slack about 'waiting on lock' message...
r46636 ui.timeout.warn=15
Jun Wu
runtests: set web.address to localhost...
r31009 web.address=localhost
Jun Wu
runtests: always set web.ipv6...
r31010 web\.ipv6=(?:True|False) (re)
Gregory Szorc
hgweb: allow defining Server response header for HTTP server...
r37027 web.server-header=testing stub value
Gregory Szorc
tests: conditionalize tests based on presence of custom extensions...
r37360 #endif
Martin Geisler
tests: remove redundant mkdir...
r13956 $ hg init t
Matt Mackall
tests: unify test-basic
r11742 $ cd t
Bryan O'Sullivan
stdio: add Linux-specific tests for error checking
r31964 Prepare a changeset:
Matt Mackall
tests: unify test-basic
r11742
$ echo a > a
$ hg add a
Bryan O'Sullivan
stdio: add Linux-specific tests for error checking
r31964
$ hg status
A a
Writes to stdio succeed and fail appropriately
#if devfull
$ hg status 2>/dev/full
A a
$ hg status >/dev/full
Simon Sapin
tests: Adapt test-basic.t expected output for rhg...
r49164 abort: No space left on device* (glob)
Bryan O'Sullivan
stdio: add Linux-specific tests for error checking
r31964 [255]
Saurabh Singh
test-basic: make test compatible with chg...
r34449 #endif
Bryan O'Sullivan
stdio: add Linux-specific tests for error checking
r31964
Gregory Szorc
dispatch: handle IOError when writing to stderr...
r35671 #if devfull
Saurabh Singh
test-basic: make test compatible with chg...
r34449 $ hg status >/dev/full 2>&1
[255]
$ hg status ENOENT 2>/dev/full
[255]
#endif
Yuya Nishihara
procutil: assign pseudo file object if sys.stdout/stderr is missing...
r46791 On Python 3, stdio may be None:
$ hg debuguiprompt --config ui.interactive=true 0<&-
Raphaël Gomès
rust: update the minimum version of Rust...
r49117 abort: Bad file descriptor (no-rhg !)
abort: response expected (rhg !)
Yuya Nishihara
procutil: assign pseudo file object if sys.stdout/stderr is missing...
r46791 [255]
$ hg version -q 0<&-
Mercurial Distributed SCM * (glob)
Raphaël Gomès
rust: update the minimum version of Rust...
r49117 #if py3 no-rhg
Yuya Nishihara
procutil: assign pseudo file object if sys.stdout/stderr is missing...
r46791 $ hg version -q 1>&-
abort: Bad file descriptor
[255]
#else
$ hg version -q 1>&-
#endif
$ hg unknown -q 1>&-
hg: unknown command 'unknown'
(did you mean debugknown?)
Martin von Zweigbergk
error: use detailed exit code 10 for command errors...
r46888 [10]
Yuya Nishihara
procutil: assign pseudo file object if sys.stdout/stderr is missing...
r46791
$ hg version -q 2>&-
Mercurial Distributed SCM * (glob)
$ hg unknown -q 2>&-
Martin von Zweigbergk
error: use detailed exit code 10 for command errors...
r46888 [10]
Yuya Nishihara
procutil: assign pseudo file object if sys.stdout/stderr is missing...
r46791
Martin Geisler
tests: remove unneeded -d flags...
r12156 $ hg commit -m test
Matt Mackall
tests: unify test-basic
r11742
This command is ancient:
$ hg history
Martin Geisler
tests: remove unneeded -d flags...
r12156 changeset: 0:acb14030fe0a
Matt Mackall
tests: unify test-basic
r11742 tag: tip
user: test
Martin Geisler
tests: remove unneeded -d flags...
r12156 date: Thu Jan 01 00:00:00 1970 +0000
Matt Mackall
tests: unify test-basic
r11742 summary: test
Mark Drago
commands.update() now works properly with a revision of 0...
r13568 Verify that updating to revision 0 via commands.update() works properly
$ cat <<EOF > update_to_rev0.py
Matt Harbison
py3: fix module imports in tests, as flagged by test-check-module-imports.t...
r40405 > from mercurial import commands, hg, ui as uimod
> myui = uimod.ui.load()
Yuya Nishihara
py3: make test-basic.t pass on Python 3
r36656 > repo = hg.repository(myui, path=b'.')
Martin von Zweigbergk
tests: pass "rev" argument to commands.update() as string...
r38499 > commands.update(myui, repo, rev=b"0")
Mark Drago
commands.update() now works properly with a revision of 0...
r13568 > EOF
$ hg up null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Matt Harbison
tests: quote PYTHON usage...
r39743 $ "$PYTHON" ./update_to_rev0.py
Mark Drago
commands.update() now works properly with a revision of 0...
r13568 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg identify -n
0
Mads Kiilerich
check-code: fix check for trailing whitespace on empty lines...
r17346
Mark Drago
commands.update() now works properly with a revision of 0...
r13568
Matt Mackall
tests: unify test-basic
r11742 Poke around at hashes:
$ hg manifest --debug
b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a
$ hg cat a
a
Verify should succeed:
$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
Meirambek Omyrzak
verify: make output less confusing (issue5924)...
r39525 checked 1 changesets with 1 changes to 1 files
Matt Mackall
tests: unify test-basic
r11742
Yuya Nishihara
templatekw: add {reporoot} keyword...
r36261 Repository root:
$ hg root
$TESTTMP/t
$ hg log -l1 -T '{reporoot}\n'
$TESTTMP/t
Yuya Nishihara
root: add support for -Tformatter option...
r42610 $ hg root -Tjson | sed 's|\\\\|\\|g'
[
{
Yuya Nishihara
root: add template variables pointing to repository directories...
r42611 "hgpath": "$TESTTMP/t/.hg",
"reporoot": "$TESTTMP/t",
"storepath": "$TESTTMP/t/.hg/store"
Yuya Nishihara
root: add support for -Tformatter option...
r42610 }
]
Yuya Nishihara
templatekw: add {reporoot} keyword...
r36261
Matt Mackall
tests: unify test-basic
r11742 At the end...
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913
$ cd ..
Yuya Nishihara
ui: add config knob to redirect status messages to stderr (API)...
r40580
Status message redirection:
$ hg init empty
status messages are sent to stdout by default:
$ hg outgoing -R t empty -Tjson 2>/dev/null
comparing with empty
searching for changes
[
{
"bookmarks": [],
"branch": "default",
"date": [0, 0],
"desc": "test",
"node": "acb14030fe0a21b60322c440ad2d20cf7685a376",
"parents": ["0000000000000000000000000000000000000000"],
"phase": "draft",
"rev": 0,
"tags": ["tip"],
"user": "test"
}
]
which can be configured to send to stderr, so the output wouldn't be
interleaved:
$ cat <<'EOF' >> "$HGRCPATH"
> [ui]
> message-output = stderr
> EOF
$ hg outgoing -R t empty -Tjson 2>/dev/null
[
{
"bookmarks": [],
"branch": "default",
"date": [0, 0],
"desc": "test",
"node": "acb14030fe0a21b60322c440ad2d20cf7685a376",
"parents": ["0000000000000000000000000000000000000000"],
"phase": "draft",
"rev": 0,
"tags": ["tip"],
"user": "test"
}
]
$ hg outgoing -R t empty -Tjson >/dev/null
comparing with empty
searching for changes
this option should be turned off by HGPLAIN= since it may break scripting use:
$ HGPLAIN= hg outgoing -R t empty -Tjson 2>/dev/null
comparing with empty
searching for changes
[
{
"bookmarks": [],
"branch": "default",
"date": [0, 0],
"desc": "test",
"node": "acb14030fe0a21b60322c440ad2d20cf7685a376",
"parents": ["0000000000000000000000000000000000000000"],
"phase": "draft",
"rev": 0,
"tags": ["tip"],
"user": "test"
}
]
but still overridden by --config:
$ HGPLAIN= hg outgoing -R t empty -Tjson --config ui.message-output=stderr \
> 2>/dev/null
[
{
"bookmarks": [],
"branch": "default",
"date": [0, 0],
"desc": "test",
"node": "acb14030fe0a21b60322c440ad2d20cf7685a376",
"parents": ["0000000000000000000000000000000000000000"],
"phase": "draft",
"rev": 0,
"tags": ["tip"],
"user": "test"
}
]
Invalid ui.message-output option:
$ hg log -R t --config ui.message-output=bad
abort: invalid ui.message-output destination: bad
[255]
Underlying message streams should be updated when ui.fout/ferr are set:
$ cat <<'EOF' > capui.py
Gregory Szorc
py3: use io.BytesIO directly...
r49728 > import io
> from mercurial import registrar
Yuya Nishihara
ui: add config knob to redirect status messages to stderr (API)...
r40580 > cmdtable = {}
> command = registrar.command(cmdtable)
> @command(b'capui', norepo=True)
> def capui(ui):
> out = ui.fout
Gregory Szorc
py3: use io.BytesIO directly...
r49728 > ui.fout = io.BytesIO()
Yuya Nishihara
ui: add config knob to redirect status messages to stderr (API)...
r40580 > ui.status(b'status\n')
Gregory Szorc
py3: use io.BytesIO directly...
r49728 > ui.ferr = io.BytesIO()
Yuya Nishihara
ui: add config knob to redirect status messages to stderr (API)...
r40580 > ui.warn(b'warn\n')
> out.write(b'stdout: %s' % ui.fout.getvalue())
> out.write(b'stderr: %s' % ui.ferr.getvalue())
> EOF
$ hg --config extensions.capui=capui.py --config ui.message-output=stdio capui
stdout: status
stderr: warn