tests/test-duplicateoptions.py
author Pierre-Yves David <pierre-yves.david@octobus.net>
Mon, 10 Feb 2025 10:42:16 +0100
changeset 52874 e6069f84abbb
parent 48875 6000f5b25c9b
permissions -rw-r--r--
cleanup: remove the sqlitestore extension The idea of having a clear storage interface and a small extension to test it was not bad in theory. However this never materialize to anything concrete, and nobody has touched this extensions for over 6 years. So it is mainly getting in the way of other works. Incidently, the clarification of interface is seeing progress thanks to the Matt Harbison typing effort and the slow rewrite into rust of core element led by Octobus. So I suggest we drop this extension, freeing energy for other improvements.

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

ignore = {b'highlight', b'win32text', b'factotum', b'beautifygraph'}

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])