Refactor doctor.py into a directory (#13298)
This commit is contained in:
parent
d61e5c0027
commit
e87d231645
6 changed files with 70 additions and 49 deletions
5
lib/python/qmk/cli/doctor/__init__.py
Executable file
5
lib/python/qmk/cli/doctor/__init__.py
Executable file
|
@ -0,0 +1,5 @@
|
|||
"""QMK Doctor
|
||||
|
||||
Check out the user's QMK environment and make sure it's ready to compile.
|
||||
"""
|
||||
from .main import doctor
|
|
@ -1,4 +1,4 @@
|
|||
"""OS-agnostic helper functions
|
||||
"""Check for specific programs.
|
||||
"""
|
||||
from enum import Enum
|
||||
import re
|
||||
|
@ -30,7 +30,7 @@ ESSENTIAL_BINARIES = {
|
|||
}
|
||||
|
||||
|
||||
def parse_gcc_version(version):
|
||||
def _parse_gcc_version(version):
|
||||
m = re.match(r"(\d+)(?:\.(\d+))?(?:\.(\d+))?", version)
|
||||
|
||||
return {
|
||||
|
@ -40,7 +40,7 @@ def parse_gcc_version(version):
|
|||
}
|
||||
|
||||
|
||||
def check_arm_gcc_version():
|
||||
def _check_arm_gcc_version():
|
||||
"""Returns True if the arm-none-eabi-gcc version is not known to cause problems.
|
||||
"""
|
||||
if 'output' in ESSENTIAL_BINARIES['arm-none-eabi-gcc']:
|
||||
|
@ -50,7 +50,7 @@ def check_arm_gcc_version():
|
|||
return CheckStatus.OK # Right now all known arm versions are ok
|
||||
|
||||
|
||||
def check_avr_gcc_version():
|
||||
def _check_avr_gcc_version():
|
||||
"""Returns True if the avr-gcc version is not known to cause problems.
|
||||
"""
|
||||
rc = CheckStatus.ERROR
|
||||
|
@ -60,7 +60,7 @@ def check_avr_gcc_version():
|
|||
cli.log.info('Found avr-gcc version %s', version_number)
|
||||
rc = CheckStatus.OK
|
||||
|
||||
parsed_version = parse_gcc_version(version_number)
|
||||
parsed_version = _parse_gcc_version(version_number)
|
||||
if parsed_version['major'] > 8:
|
||||
cli.log.warning('{fg_yellow}We do not recommend avr-gcc newer than 8. Downgrading to 8.x is recommended.')
|
||||
rc = CheckStatus.WARNING
|
||||
|
@ -68,7 +68,7 @@ def check_avr_gcc_version():
|
|||
return rc
|
||||
|
||||
|
||||
def check_avrdude_version():
|
||||
def _check_avrdude_version():
|
||||
if 'output' in ESSENTIAL_BINARIES['avrdude']:
|
||||
last_line = ESSENTIAL_BINARIES['avrdude']['output'].split('\n')[-2]
|
||||
version_number = last_line.split()[2][:-1]
|
||||
|
@ -77,7 +77,7 @@ def check_avrdude_version():
|
|||
return CheckStatus.OK
|
||||
|
||||
|
||||
def check_dfu_util_version():
|
||||
def _check_dfu_util_version():
|
||||
if 'output' in ESSENTIAL_BINARIES['dfu-util']:
|
||||
first_line = ESSENTIAL_BINARIES['dfu-util']['output'].split('\n')[0]
|
||||
version_number = first_line.split()[1]
|
||||
|
@ -86,7 +86,7 @@ def check_dfu_util_version():
|
|||
return CheckStatus.OK
|
||||
|
||||
|
||||
def check_dfu_programmer_version():
|
||||
def _check_dfu_programmer_version():
|
||||
if 'output' in ESSENTIAL_BINARIES['dfu-programmer']:
|
||||
first_line = ESSENTIAL_BINARIES['dfu-programmer']['output'].split('\n')[0]
|
||||
version_number = first_line.split()[1]
|
||||
|
@ -111,7 +111,7 @@ def check_binary_versions():
|
|||
"""Check the versions of ESSENTIAL_BINARIES
|
||||
"""
|
||||
versions = []
|
||||
for check in (check_arm_gcc_version, check_avr_gcc_version, check_avrdude_version, check_dfu_util_version, check_dfu_programmer_version):
|
||||
for check in (_check_arm_gcc_version, _check_avr_gcc_version, _check_avrdude_version, _check_dfu_util_version, _check_dfu_programmer_version):
|
||||
versions.append(check())
|
||||
return versions
|
||||
|
|
@ -1,11 +1,13 @@
|
|||
"""OS-specific functions for: Linux
|
||||
"""
|
||||
from pathlib import Path
|
||||
import platform
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
from milc import cli
|
||||
|
||||
from qmk.constants import QMK_FIRMWARE
|
||||
from qmk.os_helpers import CheckStatus
|
||||
from .check import CheckStatus
|
||||
|
||||
|
||||
def _udev_rule(vid, pid=None, *args):
|
||||
|
@ -138,3 +140,23 @@ def check_modem_manager():
|
|||
"""(TODO): Add check for non-systemd systems
|
||||
"""
|
||||
return False
|
||||
|
||||
|
||||
def os_test_linux():
|
||||
"""Run the Linux specific tests.
|
||||
"""
|
||||
# Don't bother with udev on WSL, for now
|
||||
if 'microsoft' in platform.uname().release.lower():
|
||||
cli.log.info("Detected {fg_cyan}Linux (WSL){fg_reset}.")
|
||||
|
||||
# https://github.com/microsoft/WSL/issues/4197
|
||||
if QMK_FIRMWARE.as_posix().startswith("/mnt"):
|
||||
cli.log.warning("I/O performance on /mnt may be extremely slow.")
|
||||
return CheckStatus.WARNING
|
||||
|
||||
return CheckStatus.OK
|
||||
else:
|
||||
cli.log.info("Detected {fg_cyan}Linux{fg_reset}.")
|
||||
from .linux import check_udev_rules
|
||||
|
||||
return check_udev_rules()
|
13
lib/python/qmk/cli/doctor/macos.py
Normal file
13
lib/python/qmk/cli/doctor/macos.py
Normal file
|
@ -0,0 +1,13 @@
|
|||
import platform
|
||||
|
||||
from milc import cli
|
||||
|
||||
from .check import CheckStatus
|
||||
|
||||
|
||||
def os_test_macos():
|
||||
"""Run the Mac specific tests.
|
||||
"""
|
||||
cli.log.info("Detected {fg_cyan}macOS %s{fg_reset}.", platform.mac_ver()[0])
|
||||
|
||||
return CheckStatus.OK
|
|
@ -7,9 +7,10 @@ from subprocess import DEVNULL
|
|||
|
||||
from milc import cli
|
||||
from milc.questions import yesno
|
||||
|
||||
from qmk import submodules
|
||||
from qmk.constants import QMK_FIRMWARE
|
||||
from qmk.os_helpers import CheckStatus, check_binaries, check_binary_versions, check_submodules, check_git_repo
|
||||
from .check import CheckStatus, check_binaries, check_binary_versions, check_submodules, check_git_repo
|
||||
|
||||
|
||||
def os_tests():
|
||||
|
@ -18,53 +19,19 @@ def os_tests():
|
|||
platform_id = platform.platform().lower()
|
||||
|
||||
if 'darwin' in platform_id or 'macos' in platform_id:
|
||||
from .macos import os_test_macos
|
||||
return os_test_macos()
|
||||
elif 'linux' in platform_id:
|
||||
from .linux import os_test_linux
|
||||
return os_test_linux()
|
||||
elif 'windows' in platform_id:
|
||||
from .windows import os_test_windows
|
||||
return os_test_windows()
|
||||
else:
|
||||
cli.log.warning('Unsupported OS detected: %s', platform_id)
|
||||
return CheckStatus.WARNING
|
||||
|
||||
|
||||
def os_test_linux():
|
||||
"""Run the Linux specific tests.
|
||||
"""
|
||||
# Don't bother with udev on WSL, for now
|
||||
if 'microsoft' in platform.uname().release.lower():
|
||||
cli.log.info("Detected {fg_cyan}Linux (WSL){fg_reset}.")
|
||||
|
||||
# https://github.com/microsoft/WSL/issues/4197
|
||||
if QMK_FIRMWARE.as_posix().startswith("/mnt"):
|
||||
cli.log.warning("I/O performance on /mnt may be extremely slow.")
|
||||
return CheckStatus.WARNING
|
||||
|
||||
return CheckStatus.OK
|
||||
else:
|
||||
cli.log.info("Detected {fg_cyan}Linux{fg_reset}.")
|
||||
from qmk.os_helpers.linux import check_udev_rules
|
||||
|
||||
return check_udev_rules()
|
||||
|
||||
|
||||
def os_test_macos():
|
||||
"""Run the Mac specific tests.
|
||||
"""
|
||||
cli.log.info("Detected {fg_cyan}macOS %s{fg_reset}.", platform.mac_ver()[0])
|
||||
|
||||
return CheckStatus.OK
|
||||
|
||||
|
||||
def os_test_windows():
|
||||
"""Run the Windows specific tests.
|
||||
"""
|
||||
win32_ver = platform.win32_ver()
|
||||
cli.log.info("Detected {fg_cyan}Windows %s (%s){fg_reset}.", win32_ver[0], win32_ver[1])
|
||||
|
||||
return CheckStatus.OK
|
||||
|
||||
|
||||
@cli.argument('-y', '--yes', action='store_true', arg_only=True, help='Answer yes to all questions.')
|
||||
@cli.argument('-n', '--no', action='store_true', arg_only=True, help='Answer no to all questions.')
|
||||
@cli.subcommand('Basic QMK environment checks')
|
14
lib/python/qmk/cli/doctor/windows.py
Normal file
14
lib/python/qmk/cli/doctor/windows.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
import platform
|
||||
|
||||
from milc import cli
|
||||
|
||||
from .check import CheckStatus
|
||||
|
||||
|
||||
def os_test_windows():
|
||||
"""Run the Windows specific tests.
|
||||
"""
|
||||
win32_ver = platform.win32_ver()
|
||||
cli.log.info("Detected {fg_cyan}Windows %s (%s){fg_reset}.", win32_ver[0], win32_ver[1])
|
||||
|
||||
return CheckStatus.OK
|
Loading…
Reference in a new issue