aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/qmk12
-rwxr-xr-xlib/python/qmk/cli/doctor.py17
-rw-r--r--lib/python/qmk/commands.py20
-rw-r--r--lib/python/qmk/tests/test_cli_commands.py3
4 files changed, 31 insertions, 21 deletions
diff --git a/bin/qmk b/bin/qmk
index 60555d3d7..7592eefd9 100755
--- a/bin/qmk
+++ b/bin/qmk
@@ -2,10 +2,8 @@
2"""CLI wrapper for running QMK commands. 2"""CLI wrapper for running QMK commands.
3""" 3"""
4import os 4import os
5import subprocess
6import sys 5import sys
7from importlib.util import find_spec 6from importlib.util import find_spec
8from time import strftime
9 7
10# Add the QMK python libs to our path 8# Add the QMK python libs to our path
11script_dir = os.path.dirname(os.path.realpath(__file__)) 9script_dir = os.path.dirname(os.path.realpath(__file__))
@@ -35,16 +33,6 @@ with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd:
35 print('Please run `pip3 install -r requirements.txt` to install the python dependencies.') 33 print('Please run `pip3 install -r requirements.txt` to install the python dependencies.')
36 exit(255) 34 exit(255)
37 35
38# Figure out our version
39# TODO(skullydazed/anyone): Find a method that doesn't involve git. This is slow in docker and on windows.
40command = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags']
41result = subprocess.run(command, universal_newlines=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
42
43if result.returncode == 0:
44 os.environ['QMK_VERSION'] = result.stdout.strip()
45else:
46 os.environ['QMK_VERSION'] = 'nogit-' + strftime('%Y-%m-%d-%H:%M:%S') + '-dirty'
47
48# Setup the CLI 36# Setup the CLI
49import milc # noqa 37import milc # noqa
50 38
diff --git a/lib/python/qmk/cli/doctor.py b/lib/python/qmk/cli/doctor.py
index 9b81c8508..65b6f0a96 100755
--- a/lib/python/qmk/cli/doctor.py
+++ b/lib/python/qmk/cli/doctor.py
@@ -10,6 +10,7 @@ from pathlib import Path
10from milc import cli 10from milc import cli
11from qmk import submodules 11from qmk import submodules
12from qmk.questions import yesno 12from qmk.questions import yesno
13from qmk.commands import run
13 14
14ESSENTIAL_BINARIES = { 15ESSENTIAL_BINARIES = {
15 'dfu-programmer': {}, 16 'dfu-programmer': {},
@@ -135,7 +136,7 @@ def check_modem_manager():
135 """Returns True if ModemManager is running. 136 """Returns True if ModemManager is running.
136 """ 137 """
137 if shutil.which("systemctl"): 138 if shutil.which("systemctl"):
138 mm_check = subprocess.run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10) 139 mm_check = run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10)
139 if mm_check.returncode == 0: 140 if mm_check.returncode == 0:
140 return True 141 return True
141 142
@@ -153,7 +154,7 @@ def is_executable(command):
153 return False 154 return False
154 155
155 # Make sure the command can be executed 156 # Make sure the command can be executed
156 check = subprocess.run([command, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=5, universal_newlines=True) 157 check = run([command, '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=5, universal_newlines=True)
157 ESSENTIAL_BINARIES[command]['output'] = check.stdout 158 ESSENTIAL_BINARIES[command]['output'] = check.stdout
158 159
159 if check.returncode in [0, 1]: # Older versions of dfu-programmer exit 1 160 if check.returncode in [0, 1]: # Older versions of dfu-programmer exit 1
@@ -207,19 +208,19 @@ def doctor(cli):
207 ok = True 208 ok = True
208 209
209 # Determine our OS and run platform specific tests 210 # Determine our OS and run platform specific tests
210 OS = platform.platform().lower() # noqa (N806), uppercase name is ok in this instance 211 platform_id = platform.platform().lower()
211 212
212 if 'darwin' in OS or 'macos' in OS: 213 if 'darwin' in platform_id or 'macos' in platform_id:
213 if not os_test_macos(): 214 if not os_test_macos():
214 ok = False 215 ok = False
215 elif 'linux' in OS: 216 elif 'linux' in platform_id:
216 if not os_test_linux(): 217 if not os_test_linux():
217 ok = False 218 ok = False
218 elif 'windows' in OS: 219 elif 'windows' in platform_id:
219 if not os_test_windows(): 220 if not os_test_windows():
220 ok = False 221 ok = False
221 else: 222 else:
222 cli.log.error('Unsupported OS detected: %s', OS) 223 cli.log.error('Unsupported OS detected: %s', platform_id)
223 ok = False 224 ok = False
224 225
225 # Make sure the basic CLI tools we need are available and can be executed. 226 # Make sure the basic CLI tools we need are available and can be executed.
@@ -227,7 +228,7 @@ def doctor(cli):
227 228
228 if not bin_ok: 229 if not bin_ok:
229 if yesno('Would you like to install dependencies?', default=True): 230 if yesno('Would you like to install dependencies?', default=True):
230 subprocess.run(['util/qmk_install.sh']) 231 run(['util/qmk_install.sh'])
231 bin_ok = check_binaries() 232 bin_ok = check_binaries()
232 233
233 if bin_ok: 234 if bin_ok:
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py
index 3d4ed1616..3424cdf08 100644
--- a/lib/python/qmk/commands.py
+++ b/lib/python/qmk/commands.py
@@ -1,6 +1,10 @@
1"""Helper functions for commands. 1"""Helper functions for commands.
2""" 2"""
3import json 3import json
4import os
5import platform
6import subprocess
7import shlex
4 8
5import qmk.keymap 9import qmk.keymap
6 10
@@ -61,3 +65,19 @@ def parse_configurator_json(configurator_file):
61 user_keymap = json.load(configurator_file) 65 user_keymap = json.load(configurator_file)
62 66
63 return user_keymap 67 return user_keymap
68
69
70def run(command, *args, **kwargs):
71 """Run a command with subprocess.run
72 """
73 platform_id = platform.platform().lower()
74
75 if isinstance(command, str):
76 raise TypeError('`command` must be a non-text sequence such as list or tuple.')
77
78 if 'windows' in platform_id:
79 safecmd = map(shlex.quote, command)
80 safecmd = ' '.join(safecmd)
81 command = [os.environ['SHELL'], '-c', safecmd]
82
83 return subprocess.run(command, *args, **kwargs)
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index a2595eb78..3b4e66a21 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -1,9 +1,10 @@
1import subprocess 1import subprocess
2from qmk.commands import run
2 3
3 4
4def check_subcommand(command, *args): 5def check_subcommand(command, *args):
5 cmd = ['bin/qmk', command] + list(args) 6 cmd = ['bin/qmk', command] + list(args)
6 return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) 7 return run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
7 8
8 9
9def test_cformat(): 10def test_cformat():