tests/test-duplicateoptions.py
author Matt Mackall <mpm@selenic.com>
Sun, 17 Feb 2013 14:41:31 -0600
changeset 18696 d23f61b6617f
parent 16383 f5dd179bfa4a
child 20622 352abbb0be88
permissions -rw-r--r--
httppeer: avoid large dumps when we don't see an hgweb repo When we don't get an hgweb protocol response, we dump the response to the user for diagnostic purposes (it might be a cgitb message, for instance). But if we try to clone a bundle, we don't want to show the entire bundle in the error message. Also, we don't want fetch the full bundle multiple times during fallback. So we only fetch 1k here.

import os
from mercurial import ui, commands, extensions

ignore = set(['highlight', 'inotify', 'win32text', 'factotum'])

if os.name != 'nt':
    ignore.add('win32mbcs')

disabled = [ext for ext in extensions.disabled().keys() if ext not in ignore]

hgrc = open(os.environ["HGRCPATH"], 'w')
hgrc.write('[extensions]\n')

for ext in disabled:
    hgrc.write(ext + '=\n')

hgrc.close()

u = ui.ui()
extensions.loadall(u)

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.iteritems():
    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])