view tests/test-duplicateoptions.py @ 47043:12450fbea288

manifests: push down expected node length into the parser This strictly enforces the node length in the manifest lines according to what the repository expects. One test case moves large hash testing into the non-treemanifest part as treemanifests don't provide an interface for overriding just the node length for now. Differential Revision: https://phab.mercurial-scm.org/D10533
author Joerg Sonnenberger <joerg@bec.de>
date Fri, 30 Apr 2021 02:11:58 +0200
parents 2372284d9457
children 6000f5b25c9b
line wrap: on
line source

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'beautifygraph'}

try:
    import sqlite3

    del sqlite3  # unused, just checking that import works
except ImportError:
    ignore.add(b'sqlitestore')

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()
extensions.loadall(u)
extensions.populateui(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.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])