Fix qmk cli isues'
This commit is contained in:
@@ -1,116 +0,0 @@
|
||||
"""Read and write configuration settings
|
||||
"""
|
||||
from milc import cli
|
||||
|
||||
|
||||
def print_config(section, key):
|
||||
"""Print a single config setting to stdout.
|
||||
"""
|
||||
cli.echo('%s.%s{fg_cyan}={fg_reset}%s', section, key, cli.config[section][key])
|
||||
|
||||
|
||||
def show_config():
|
||||
"""Print the current configuration to stdout.
|
||||
"""
|
||||
for section in cli.config:
|
||||
for key in cli.config[section]:
|
||||
print_config(section, key)
|
||||
|
||||
|
||||
def parse_config_token(config_token):
|
||||
"""Split a user-supplied configuration-token into its components.
|
||||
"""
|
||||
section = option = value = None
|
||||
|
||||
if '=' in config_token and '.' not in config_token:
|
||||
cli.log.error('Invalid configuration token, the key must be of the form <section>.<option>: %s', config_token)
|
||||
return section, option, value
|
||||
|
||||
# Separate the key (<section>.<option>) from the value
|
||||
if '=' in config_token:
|
||||
key, value = config_token.split('=')
|
||||
else:
|
||||
key = config_token
|
||||
|
||||
# Extract the section and option from the key
|
||||
if '.' in key:
|
||||
section, option = key.split('.', 1)
|
||||
else:
|
||||
section = key
|
||||
|
||||
return section, option, value
|
||||
|
||||
|
||||
def set_config(section, option, value):
|
||||
"""Set a config key in the running config.
|
||||
"""
|
||||
log_string = '%s.%s{fg_cyan}:{fg_reset} %s {fg_cyan}->{fg_reset} %s'
|
||||
if cli.args.read_only:
|
||||
log_string += ' {fg_red}(change not written)'
|
||||
|
||||
cli.echo(log_string, section, option, cli.config[section][option], value)
|
||||
|
||||
if not cli.args.read_only:
|
||||
if value == 'None':
|
||||
del cli.config[section][option]
|
||||
else:
|
||||
cli.config[section][option] = value
|
||||
|
||||
|
||||
@cli.argument('-ro', '--read-only', arg_only=True, action='store_true', help='Operate in read-only mode.')
|
||||
@cli.argument('configs', nargs='*', arg_only=True, help='Configuration options to read or write.')
|
||||
@cli.subcommand("Read and write configuration settings.")
|
||||
def config(cli):
|
||||
"""Read and write config settings.
|
||||
|
||||
This script iterates over the config_tokens supplied as argument. Each config_token has the following form:
|
||||
|
||||
section[.key][=value]
|
||||
|
||||
If only a section (EG 'compile') is supplied all keys for that section will be displayed.
|
||||
|
||||
If section.key is supplied the value for that single key will be displayed.
|
||||
|
||||
If section.key=value is supplied the value for that single key will be set.
|
||||
|
||||
If section.key=None is supplied the key will be deleted.
|
||||
|
||||
No validation is done to ensure that the supplied section.key is actually used by qmk scripts.
|
||||
"""
|
||||
if not cli.args.configs:
|
||||
return show_config()
|
||||
|
||||
# Process config_tokens
|
||||
save_config = False
|
||||
|
||||
for argument in cli.args.configs:
|
||||
# Split on space in case they quoted multiple config tokens
|
||||
for config_token in argument.split(' '):
|
||||
section, option, value = parse_config_token(config_token)
|
||||
|
||||
# Validation
|
||||
if option and '.' in option:
|
||||
cli.log.error('Config keys may not have more than one period! "%s" is not valid.', config_token)
|
||||
return False
|
||||
|
||||
# Do what the user wants
|
||||
if section and option and value:
|
||||
# Write a configuration option
|
||||
set_config(section, option, value)
|
||||
if not cli.args.read_only:
|
||||
save_config = True
|
||||
|
||||
elif section and option:
|
||||
# Display a single key
|
||||
print_config(section, option)
|
||||
|
||||
elif section:
|
||||
# Display an entire section
|
||||
for key in cli.config[section]:
|
||||
print_config(section, key)
|
||||
|
||||
# Ending actions
|
||||
if save_config:
|
||||
cli.save_config()
|
||||
|
||||
return True
|
||||
@@ -54,10 +54,7 @@ def check_udev_rules():
|
||||
_udev_rule("03eb", "2ff3"), # ATmega16U4
|
||||
_udev_rule("03eb", "2ff4"), # ATmega32U4
|
||||
_udev_rule("03eb", "2ff9"), # AT90USB64
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
_udev_rule("03eb", "2ffa"), # AT90USB162
|
||||
>>>>>>> 0.12.52~1
|
||||
_udev_rule("03eb", "2ffb") # AT90USB128
|
||||
},
|
||||
'kiibohd': {_udev_rule("1c11", "b007")},
|
||||
@@ -108,11 +105,7 @@ def check_udev_rules():
|
||||
|
||||
# Collect all rules from the config files
|
||||
for rule_file in udev_rules:
|
||||
<<<<<<< HEAD
|
||||
for line in rule_file.read_text().split('\n'):
|
||||
=======
|
||||
for line in rule_file.read_text(encoding='utf-8').split('\n'):
|
||||
>>>>>>> 0.12.52~1
|
||||
line = line.strip()
|
||||
if not line.startswith("#") and len(line):
|
||||
current_rules.add(line)
|
||||
@@ -149,11 +142,7 @@ def check_modem_manager():
|
||||
|
||||
"""
|
||||
if check_systemd():
|
||||
<<<<<<< HEAD
|
||||
mm_check = run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10)
|
||||
=======
|
||||
mm_check = cli.run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10)
|
||||
>>>>>>> 0.12.52~1
|
||||
if mm_check.returncode == 0:
|
||||
return True
|
||||
else:
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
"""Format C code according to QMK's style.
|
||||
"""
|
||||
from os import path
|
||||
from shutil import which
|
||||
from subprocess import CalledProcessError, DEVNULL, Popen, PIPE
|
||||
|
||||
@@ -15,6 +14,12 @@ core_dirs = ('drivers', 'quantum', 'tests', 'tmk_core', 'platforms')
|
||||
ignored = ('tmk_core/protocol/usb_hid', 'platforms/chibios/boards')
|
||||
|
||||
|
||||
def is_relative_to(file, other):
|
||||
"""Provide similar behavior to PurePath.is_relative_to in Python > 3.9
|
||||
"""
|
||||
return str(normpath(file).resolve()).startswith(str(normpath(other).resolve()))
|
||||
|
||||
|
||||
def find_clang_format():
|
||||
"""Returns the path to clang-format.
|
||||
"""
|
||||
@@ -68,18 +73,18 @@ def cformat_run(files):
|
||||
def filter_files(files, core_only=False):
|
||||
"""Yield only files to be formatted and skip the rest
|
||||
"""
|
||||
if core_only:
|
||||
# Filter non-core files
|
||||
for index, file in enumerate(files):
|
||||
files = list(map(normpath, filter(None, files)))
|
||||
|
||||
for file in files:
|
||||
if core_only:
|
||||
# The following statement checks each file to see if the file path is
|
||||
# - in the core directories
|
||||
# - not in the ignored directories
|
||||
if not any(str(file).startswith(i) for i in core_dirs) or any(str(file).startswith(i) for i in ignored):
|
||||
files[index] = None
|
||||
if not any(is_relative_to(file, i) for i in core_dirs) or any(is_relative_to(file, i) for i in ignored):
|
||||
cli.log.debug("Skipping non-core file %s, as '--core-only' is used.", file)
|
||||
continue
|
||||
|
||||
for file in files:
|
||||
if file and file.name.split('.')[-1] in c_file_suffixes:
|
||||
if file.suffix[1:] in c_file_suffixes:
|
||||
yield file
|
||||
else:
|
||||
cli.log.debug('Skipping file %s', file)
|
||||
@@ -118,12 +123,8 @@ def format_c(cli):
|
||||
print(git_diff.stderr)
|
||||
return git_diff.returncode
|
||||
|
||||
files = []
|
||||
|
||||
for file in git_diff.stdout.strip().split('\n'):
|
||||
if not any([file.startswith(ignore) for ignore in ignored]):
|
||||
if path.exists(file) and file.split('.')[-1] in c_file_suffixes:
|
||||
files.append(file)
|
||||
changed_files = git_diff.stdout.strip().split('\n')
|
||||
files = list(filter_files(changed_files, True))
|
||||
|
||||
# Sanity check
|
||||
if not files:
|
||||
|
||||
@@ -25,8 +25,9 @@ def yapf_run(files):
|
||||
def filter_files(files):
|
||||
"""Yield only files to be formatted and skip the rest
|
||||
"""
|
||||
files = list(map(normpath, filter(None, files)))
|
||||
for file in files:
|
||||
if file and normpath(file).name.split('.')[-1] in py_file_suffixes:
|
||||
if file.suffix[1:] in py_file_suffixes:
|
||||
yield file
|
||||
else:
|
||||
cli.log.debug('Skipping file %s', file)
|
||||
|
||||
@@ -26,7 +26,8 @@ def system_libs(binary: str) -> List[Path]:
|
||||
|
||||
# Actually query xxxxxx-gcc to find its include paths.
|
||||
if binary.endswith("gcc") or binary.endswith("g++"):
|
||||
result = cli.run([binary, '-E', '-Wp,-v', '-'], capture_output=True, check=True, input='\n')
|
||||
# (TODO): Remove 'stdin' once 'input' no longer causes issues under MSYS
|
||||
result = cli.run([binary, '-E', '-Wp,-v', '-'], capture_output=True, check=True, stdin=None, input='\n')
|
||||
paths = []
|
||||
for line in result.stderr.splitlines():
|
||||
if line.startswith(" "):
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
"""QMK CLI JSON Subcommands
|
||||
|
||||
We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
|
||||
"""
|
||||
from . import keymap
|
||||
@@ -1,16 +0,0 @@
|
||||
"""Generate a keymap.c from a configurator export.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
from milc import cli
|
||||
|
||||
|
||||
@cli.argument('-o', '--output', arg_only=True, type=Path, help='File to write to')
|
||||
@cli.argument('-q', '--quiet', arg_only=True, action='store_true', help="Quiet mode, only output error messages")
|
||||
@cli.argument('filename', arg_only=True, help='Configurator JSON file')
|
||||
@cli.subcommand('Creates a keymap.c from a QMK Configurator export.', hidden=True)
|
||||
def json_keymap(cli):
|
||||
"""Renamed to `qmk json2c`.
|
||||
"""
|
||||
cli.log.error('This command has been renamed to `qmk json2c`.')
|
||||
return False
|
||||
@@ -12,7 +12,8 @@ from milc import cli
|
||||
def pytest(cli):
|
||||
"""Run several linting/testing commands.
|
||||
"""
|
||||
nose2 = cli.run(['nose2', '-v', '-t' 'lib/python', *cli.args.test], capture_output=False, stdin=DEVNULL)
|
||||
nose2 = cli.run(['nose2', '-v', '-t'
|
||||
'lib/python', *cli.args.test], capture_output=False, stdin=DEVNULL)
|
||||
flake8 = cli.run(['flake8', 'lib/python'], capture_output=False, stdin=DEVNULL)
|
||||
|
||||
return flake8.returncode | nose2.returncode
|
||||
|
||||
Reference in New Issue
Block a user