tests/test-duplicateoptions.py
author Gregory Szorc <gregory.szorc@gmail.com>
Sat, 01 Jul 2017 11:56:39 -0700
changeset 33295 c72e9c61d2b1
parent 32291 bd872f64a8ba
child 33723 5b2f331d0a33
permissions -rw-r--r--
sparse: refactor sparsechecksum() This was relying on garbage collection to close the opened file, which is a bug. Both callers simply called into self.vfs to resolve the path. So refactor to use the vfs layer. While we're here, rename the method to reflect it is internal and to break anyone relying on the old behavior.

from __future__ import absolute_import, print_function
import os
from mercurial import (
    commands,
    extensions,
    ui as uimod,
)

ignore = {'highlight', '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 = uimod.ui.load()
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])