sapling/tests/test-duplicateoptions.py
Ryan McElroy 790efe918e duplicates: make test robust
Summary:
This test output is unstable. Let's make the test robust by ignoring
the shelve extension (which we will soon delete) and squelching the unrelated
output.

Test Plan: run-tests.py multiple times

Reviewers: ikostia, #mercurial

Reviewed By: ikostia

Differential Revision: https://phabricator.intern.facebook.com/D6683495

Signature: 6683495:1515513516:efd3964a0053b48d770b2af04b244295dba2d807
2018-01-09 08:18:14 -08:00

49 lines
1.3 KiB
Python

from __future__ import absolute_import, print_function
import os
from mercurial import (
commands,
extensions,
ui as uimod,
)
ignore = {b'highlight', b'win32text', b'factotum', b'remotenames',
b'lz4revlog', b'hgsql', b'shelve', b'fbconduit', b''}
if os.name != 'nt':
ignore.add(b'win32mbcs')
disabled = [ext for ext in extensions.disabled().keys() if ext not in ignore]
hgrc = open(os.environ["HGRCPATH"], 'wb')
hgrc.write(b'[extensions]\n')
for ext in disabled:
hgrc.write(ext + b'=\n')
hgrc.close()
u = uimod.ui.load()
# Some extensions may print useful warning messages when they are loaded without
# the necessary config options. Let's capture that output since it does not
# matter for this test.
u.pushbuffer(error=True)
extensions.loadall(u)
u.popbuffer()
globalshort = set()
globallong = set()
for option in commands.globalopts:
option[0] and globalshort.add(option[0])
option[1] and globallong.add(option[1])
for cmd, entry in commands.table.items():
seenshort = globalshort.copy()
seenlong = globallong.copy()
for option in entry[1]:
if (option[0] and option[0] in seenshort) or \
(option[1] and option[1] in seenlong):
print("command '" + cmd + "' has duplicate option " + str(option))
seenshort.add(option[0])
seenlong.add(option[1])