mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Align our subprocess usage with current best practices. (#12940)
* Align our subprocess usage with current best practices. * remove unused import * Apply suggestions from code review Co-authored-by: Ryan <fauxpark@gmail.com> * fix the cpp invocation for older python * allow for unprompted installation * make sure qmk new-keyboard works on windows Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
		
							parent
							
								
									a9aec546c8
								
							
						
					
					
						commit
						db1eacdaac
					
				| @ -1,8 +1,8 @@ | |||||||
| """Format C code according to QMK's style. | """Format C code according to QMK's style. | ||||||
| """ | """ | ||||||
| import subprocess |  | ||||||
| from os import path | from os import path | ||||||
| from shutil import which | from shutil import which | ||||||
|  | from subprocess import CalledProcessError, DEVNULL, Popen, PIPE | ||||||
| 
 | 
 | ||||||
| from argcomplete.completers import FilesCompleter | from argcomplete.completers import FilesCompleter | ||||||
| from milc import cli | from milc import cli | ||||||
| @ -34,7 +34,7 @@ def find_diffs(files): | |||||||
| 
 | 
 | ||||||
|     for file in files: |     for file in files: | ||||||
|         cli.log.debug('Checking for changes in %s', file) |         cli.log.debug('Checking for changes in %s', file) | ||||||
|         clang_format = subprocess.Popen([find_clang_format(), file], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) |         clang_format = Popen([find_clang_format(), file], stdout=PIPE, stderr=PIPE, universal_newlines=True) | ||||||
|         diff = cli.run(['diff', '-u', f'--label=a/{file}', f'--label=b/{file}', str(file), '-'], stdin=clang_format.stdout, capture_output=True) |         diff = cli.run(['diff', '-u', f'--label=a/{file}', f'--label=b/{file}', str(file), '-'], stdin=clang_format.stdout, capture_output=True) | ||||||
| 
 | 
 | ||||||
|         if diff.returncode != 0: |         if diff.returncode != 0: | ||||||
| @ -51,11 +51,11 @@ def cformat_run(files): | |||||||
|     clang_format = [find_clang_format(), '-i'] |     clang_format = [find_clang_format(), '-i'] | ||||||
| 
 | 
 | ||||||
|     try: |     try: | ||||||
|         cli.run(clang_format + list(map(str, files)), check=True, capture_output=False) |         cli.run([*clang_format, *map(str, files)], check=True, capture_output=False, stdin=DEVNULL) | ||||||
|         cli.log.info('Successfully formatted the C code.') |         cli.log.info('Successfully formatted the C code.') | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     except subprocess.CalledProcessError as e: |     except CalledProcessError as e: | ||||||
|         cli.log.error('Error formatting C code!') |         cli.log.error('Error formatting C code!') | ||||||
|         cli.log.debug('%s exited with returncode %s', e.cmd, e.returncode) |         cli.log.debug('%s exited with returncode %s', e.cmd, e.returncode) | ||||||
|         cli.log.debug('STDOUT:') |         cli.log.debug('STDOUT:') | ||||||
| @ -111,7 +111,7 @@ def cformat(cli): | |||||||
| 
 | 
 | ||||||
|     else: |     else: | ||||||
|         git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch, *core_dirs] |         git_diff_cmd = ['git', 'diff', '--name-only', cli.args.base_branch, *core_dirs] | ||||||
|         git_diff = cli.run(git_diff_cmd) |         git_diff = cli.run(git_diff_cmd, stdin=DEVNULL) | ||||||
| 
 | 
 | ||||||
|         if git_diff.returncode != 0: |         if git_diff.returncode != 0: | ||||||
|             cli.log.error("Error running %s", git_diff_cmd) |             cli.log.error("Error running %s", git_diff_cmd) | ||||||
|  | |||||||
| @ -1,6 +1,8 @@ | |||||||
| """Clean the QMK firmware folder of build artifacts. | """Clean the QMK firmware folder of build artifacts. | ||||||
| """ | """ | ||||||
| from qmk.commands import run, create_make_target | from subprocess import DEVNULL | ||||||
|  | 
 | ||||||
|  | from qmk.commands import create_make_target | ||||||
| from milc import cli | from milc import cli | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -9,4 +11,4 @@ from milc import cli | |||||||
| def clean(cli): | def clean(cli): | ||||||
|     """Runs `make clean` (or `make distclean` if --all is passed) |     """Runs `make clean` (or `make distclean` if --all is passed) | ||||||
|     """ |     """ | ||||||
|     run(create_make_target('distclean' if cli.args.all else 'clean')) |     cli.run(create_make_target('distclean' if cli.args.all else 'clean'), capture_output=False, stdin=DEVNULL) | ||||||
|  | |||||||
| @ -2,6 +2,8 @@ | |||||||
| 
 | 
 | ||||||
| You can compile a keymap already in the repo or using a QMK Configurator export. | You can compile a keymap already in the repo or using a QMK Configurator export. | ||||||
| """ | """ | ||||||
|  | from subprocess import DEVNULL | ||||||
|  | 
 | ||||||
| from argcomplete.completers import FilesCompleter | from argcomplete.completers import FilesCompleter | ||||||
| from milc import cli | from milc import cli | ||||||
| 
 | 
 | ||||||
| @ -31,8 +33,7 @@ def compile(cli): | |||||||
|     """ |     """ | ||||||
|     if cli.args.clean and not cli.args.filename and not cli.args.dry_run: |     if cli.args.clean and not cli.args.filename and not cli.args.dry_run: | ||||||
|         command = create_make_command(cli.config.compile.keyboard, cli.config.compile.keymap, 'clean') |         command = create_make_command(cli.config.compile.keyboard, cli.config.compile.keymap, 'clean') | ||||||
|         # FIXME(skullydazed/anyone): Remove text=False once milc 1.0.11 has had enough time to be installed everywhere. |         cli.run(command, capture_output=False, stdin=DEVNULL) | ||||||
|         cli.run(command, capture_output=False, text=False) |  | ||||||
| 
 | 
 | ||||||
|     # Build the environment vars |     # Build the environment vars | ||||||
|     envs = {} |     envs = {} | ||||||
|  | |||||||
| @ -3,12 +3,12 @@ | |||||||
| Check out the user's QMK environment and make sure it's ready to compile. | Check out the user's QMK environment and make sure it's ready to compile. | ||||||
| """ | """ | ||||||
| import platform | import platform | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| from milc.questions import yesno | from milc.questions import yesno | ||||||
| from qmk import submodules | from qmk import submodules | ||||||
| from qmk.constants import QMK_FIRMWARE | from qmk.constants import QMK_FIRMWARE | ||||||
| from qmk.commands import run |  | ||||||
| from qmk.os_helpers import CheckStatus, check_binaries, check_binary_versions, check_submodules, check_git_repo | from qmk.os_helpers import CheckStatus, check_binaries, check_binary_versions, check_submodules, check_git_repo | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -93,7 +93,7 @@ def doctor(cli): | |||||||
| 
 | 
 | ||||||
|     if not bin_ok: |     if not bin_ok: | ||||||
|         if yesno('Would you like to install dependencies?', default=True): |         if yesno('Would you like to install dependencies?', default=True): | ||||||
|             run(['util/qmk_install.sh']) |             cli.run(['util/qmk_install.sh', '-y'], stdin=DEVNULL, capture_output=False) | ||||||
|             bin_ok = check_binaries() |             bin_ok = check_binaries() | ||||||
| 
 | 
 | ||||||
|     if bin_ok: |     if bin_ok: | ||||||
|  | |||||||
| @ -3,6 +3,7 @@ | |||||||
| You can compile a keymap already in the repo or using a QMK Configurator export. | You can compile a keymap already in the repo or using a QMK Configurator export. | ||||||
| A bootloader must be specified. | A bootloader must be specified. | ||||||
| """ | """ | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from argcomplete.completers import FilesCompleter | from argcomplete.completers import FilesCompleter | ||||||
| from milc import cli | from milc import cli | ||||||
| @ -55,7 +56,7 @@ def flash(cli): | |||||||
|     """ |     """ | ||||||
|     if cli.args.clean and not cli.args.filename and not cli.args.dry_run: |     if cli.args.clean and not cli.args.filename and not cli.args.dry_run: | ||||||
|         command = create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, 'clean') |         command = create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, 'clean') | ||||||
|         cli.run(command, capture_output=False) |         cli.run(command, capture_output=False, stdin=DEVNULL) | ||||||
| 
 | 
 | ||||||
|     # Build the environment vars |     # Build the environment vars | ||||||
|     envs = {} |     envs = {} | ||||||
| @ -98,7 +99,7 @@ def flash(cli): | |||||||
|         cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(command)) |         cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(command)) | ||||||
|         if not cli.args.dry_run: |         if not cli.args.dry_run: | ||||||
|             cli.echo('\n') |             cli.echo('\n') | ||||||
|             compile = cli.run(command, capture_output=False, text=True) |             compile = cli.run(command, capture_output=False, stdin=DEVNULL) | ||||||
|             return compile.returncode |             return compile.returncode | ||||||
| 
 | 
 | ||||||
|     else: |     else: | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| """Build QMK documentation locally | """Build QMK documentation locally | ||||||
| """ | """ | ||||||
| import shutil | import shutil | ||||||
| import subprocess |  | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| 
 | 
 | ||||||
| @ -24,14 +24,16 @@ def generate_docs(cli): | |||||||
|     shutil.copytree(DOCS_PATH, BUILD_PATH) |     shutil.copytree(DOCS_PATH, BUILD_PATH) | ||||||
| 
 | 
 | ||||||
|     # When not verbose we want to hide all output |     # When not verbose we want to hide all output | ||||||
|     args = {'check': True} |     args = { | ||||||
|     if not cli.args.verbose: |         'capture_output': False if cli.config.general.verbose else True, | ||||||
|         args.update({'stdout': subprocess.DEVNULL, 'stderr': subprocess.STDOUT}) |         'check': True, | ||||||
|  |         'stdin': DEVNULL, | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     cli.log.info('Generating internal docs...') |     cli.log.info('Generating internal docs...') | ||||||
| 
 | 
 | ||||||
|     # Generate internal docs |     # Generate internal docs | ||||||
|     subprocess.run(['doxygen', 'Doxyfile'], **args) |     cli.run(['doxygen', 'Doxyfile'], **args) | ||||||
|     subprocess.run(['moxygen', '-q', '-a', '-g', '-o', BUILD_PATH / 'internals_%s.md', 'doxygen/xml'], **args) |     cli.run(['moxygen', '-q', '-a', '-g', '-o', BUILD_PATH / 'internals_%s.md', 'doxygen/xml'], **args) | ||||||
| 
 | 
 | ||||||
|     cli.log.info('Successfully generated internal docs to %s.', BUILD_PATH) |     cli.log.info('Successfully generated internal docs to %s.', BUILD_PATH) | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ This will compile everything in parallel, for testing purposes. | |||||||
| """ | """ | ||||||
| import re | import re | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| 
 | 
 | ||||||
| @ -35,7 +36,7 @@ def multibuild(cli): | |||||||
| 
 | 
 | ||||||
|     make_cmd = _find_make() |     make_cmd = _find_make() | ||||||
|     if cli.args.clean: |     if cli.args.clean: | ||||||
|         cli.run([make_cmd, 'clean'], capture_output=False, text=False) |         cli.run([make_cmd, 'clean'], capture_output=False, stdin=DEVNULL) | ||||||
| 
 | 
 | ||||||
|     builddir = Path(QMK_FIRMWARE) / '.build' |     builddir = Path(QMK_FIRMWARE) / '.build' | ||||||
|     makefile = builddir / 'parallel_kb_builds.mk' |     makefile = builddir / 'parallel_kb_builds.mk' | ||||||
| @ -75,4 +76,4 @@ all: {keyboard_safe}_binary | |||||||
|             ) |             ) | ||||||
|             # yapf: enable |             # yapf: enable | ||||||
| 
 | 
 | ||||||
|     cli.run([make_cmd, '-j', str(cli.args.parallel), '-f', makefile, 'all'], capture_output=False, text=False) |     cli.run([make_cmd, '-j', str(cli.args.parallel), '-f', makefile, 'all'], capture_output=False, stdin=DEVNULL) | ||||||
|  | |||||||
| @ -8,4 +8,4 @@ def new_keyboard(cli): | |||||||
|     """Creates a new keyboard |     """Creates a new keyboard | ||||||
|     """ |     """ | ||||||
|     # TODO: replace this bodge to the existing script |     # TODO: replace this bodge to the existing script | ||||||
|     cli.run(['util/new_keyboard.sh'], capture_output=False) |     cli.run(['util/new_keyboard.sh'], stdin=None, capture_output=False) | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| """Format python code according to QMK's style. | """Format python code according to QMK's style. | ||||||
| """ | """ | ||||||
| from milc import cli | from subprocess import CalledProcessError, DEVNULL | ||||||
| 
 | 
 | ||||||
| import subprocess | from milc import cli | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Flag only, don't automatically format.") | @cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Flag only, don't automatically format.") | ||||||
| @ -13,11 +13,11 @@ def pyformat(cli): | |||||||
|     edit = '--diff' if cli.args.dry_run else '--in-place' |     edit = '--diff' if cli.args.dry_run else '--in-place' | ||||||
|     yapf_cmd = ['yapf', '-vv', '--recursive', edit, 'bin/qmk', 'lib/python'] |     yapf_cmd = ['yapf', '-vv', '--recursive', edit, 'bin/qmk', 'lib/python'] | ||||||
|     try: |     try: | ||||||
|         cli.run(yapf_cmd, check=True, capture_output=False) |         cli.run(yapf_cmd, check=True, capture_output=False, stdin=DEVNULL) | ||||||
|         cli.log.info('Python code in `bin/qmk` and `lib/python` is correctly formatted.') |         cli.log.info('Python code in `bin/qmk` and `lib/python` is correctly formatted.') | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     except subprocess.CalledProcessError: |     except CalledProcessError: | ||||||
|         if cli.args.dry_run: |         if cli.args.dry_run: | ||||||
|             cli.log.error('Python code in `bin/qmk` and `lib/python` incorrectly formatted!') |             cli.log.error('Python code in `bin/qmk` and `lib/python` incorrectly formatted!') | ||||||
|         else: |         else: | ||||||
|  | |||||||
| @ -2,7 +2,7 @@ | |||||||
| 
 | 
 | ||||||
| QMK script to run unit and integration tests against our python code. | QMK script to run unit and integration tests against our python code. | ||||||
| """ | """ | ||||||
| import subprocess | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| 
 | 
 | ||||||
| @ -11,7 +11,7 @@ from milc import cli | |||||||
| def pytest(cli): | def pytest(cli): | ||||||
|     """Run several linting/testing commands. |     """Run several linting/testing commands. | ||||||
|     """ |     """ | ||||||
|     nose2 = subprocess.run(['nose2', '-v']) |     nose2 = cli.run(['nose2', '-v'], capture_output=False, stdin=DEVNULL) | ||||||
|     flake8 = subprocess.run(['flake8', 'lib/python', 'bin/qmk']) |     flake8 = cli.run(['flake8', 'lib/python', 'bin/qmk'], capture_output=False, stdin=DEVNULL) | ||||||
| 
 | 
 | ||||||
|     return flake8.returncode | nose2.returncode |     return flake8.returncode | nose2.returncode | ||||||
|  | |||||||
| @ -2,11 +2,9 @@ | |||||||
| """ | """ | ||||||
| import json | import json | ||||||
| import os | import os | ||||||
| import platform |  | ||||||
| import subprocess |  | ||||||
| import shlex |  | ||||||
| import shutil | import shutil | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | from subprocess import DEVNULL | ||||||
| from time import strftime | from time import strftime | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| @ -94,7 +92,7 @@ def get_git_version(repo_dir='.', check_dir='.'): | |||||||
|     git_describe_cmd = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags'] |     git_describe_cmd = ['git', 'describe', '--abbrev=6', '--dirty', '--always', '--tags'] | ||||||
| 
 | 
 | ||||||
|     if Path(check_dir).exists(): |     if Path(check_dir).exists(): | ||||||
|         git_describe = cli.run(git_describe_cmd, cwd=repo_dir) |         git_describe = cli.run(git_describe_cmd, stdin=DEVNULL, cwd=repo_dir) | ||||||
| 
 | 
 | ||||||
|         if git_describe.returncode == 0: |         if git_describe.returncode == 0: | ||||||
|             return git_describe.stdout.strip() |             return git_describe.stdout.strip() | ||||||
| @ -224,20 +222,3 @@ def parse_configurator_json(configurator_file): | |||||||
|             user_keymap['layout'] = aliases[orig_keyboard]['layouts'][user_keymap['layout']] |             user_keymap['layout'] = aliases[orig_keyboard]['layouts'][user_keymap['layout']] | ||||||
| 
 | 
 | ||||||
|     return user_keymap |     return user_keymap | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def run(command, *args, **kwargs): |  | ||||||
|     """Run a command with subprocess.run |  | ||||||
|     """ |  | ||||||
|     platform_id = platform.platform().lower() |  | ||||||
| 
 |  | ||||||
|     if isinstance(command, str): |  | ||||||
|         raise TypeError('`command` must be a non-text sequence such as list or tuple.') |  | ||||||
| 
 |  | ||||||
|     if 'windows' in platform_id: |  | ||||||
|         safecmd = map(str, command) |  | ||||||
|         safecmd = map(shlex.quote, safecmd) |  | ||||||
|         safecmd = ' '.join(safecmd) |  | ||||||
|         command = [os.environ.get('SHELL', '/usr/bin/bash'), '-c', safecmd] |  | ||||||
| 
 |  | ||||||
|     return subprocess.run(command, *args, **kwargs) |  | ||||||
|  | |||||||
| @ -1,9 +1,9 @@ | |||||||
| """Functions that help you work with QMK keymaps. | """Functions that help you work with QMK keymaps. | ||||||
| """ | """ | ||||||
| import json | import json | ||||||
| import subprocess |  | ||||||
| import sys | import sys | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| import argcomplete | import argcomplete | ||||||
| from milc import cli | from milc import cli | ||||||
| @ -12,7 +12,6 @@ from pygments.token import Token | |||||||
| from pygments import lex | from pygments import lex | ||||||
| 
 | 
 | ||||||
| import qmk.path | import qmk.path | ||||||
| import qmk.commands |  | ||||||
| from qmk.keyboard import find_keyboard_from_dir, rules_mk | from qmk.keyboard import find_keyboard_from_dir, rules_mk | ||||||
| 
 | 
 | ||||||
| # The `keymap.c` template to use when a keyboard doesn't have its own | # The `keymap.c` template to use when a keyboard doesn't have its own | ||||||
| @ -361,7 +360,7 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa | |||||||
|     return sorted(names) |     return sorted(names) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def _c_preprocess(path, stdin=None): | def _c_preprocess(path, stdin=DEVNULL): | ||||||
|     """ Run a file through the C pre-processor |     """ Run a file through the C pre-processor | ||||||
| 
 | 
 | ||||||
|     Args: |     Args: | ||||||
| @ -371,7 +370,9 @@ def _c_preprocess(path, stdin=None): | |||||||
|     Returns: |     Returns: | ||||||
|         the stdout of the pre-processor |         the stdout of the pre-processor | ||||||
|     """ |     """ | ||||||
|     pre_processed_keymap = qmk.commands.run(['cpp', path] if path else ['cpp'], stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) |     cmd = ['cpp', str(path)] if path else ['cpp'] | ||||||
|  |     pre_processed_keymap = cli.run(cmd, stdin=stdin) | ||||||
|  | 
 | ||||||
|     return pre_processed_keymap.stdout |     return pre_processed_keymap.stdout | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -3,10 +3,9 @@ | |||||||
| from enum import Enum | from enum import Enum | ||||||
| import re | import re | ||||||
| import shutil | import shutil | ||||||
| import subprocess | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| from qmk.commands import run |  | ||||||
| from qmk import submodules | from qmk import submodules | ||||||
| from qmk.constants import QMK_FIRMWARE | from qmk.constants import QMK_FIRMWARE | ||||||
| 
 | 
 | ||||||
| @ -142,7 +141,7 @@ def is_executable(command): | |||||||
| 
 | 
 | ||||||
|     # Make sure the command can be executed |     # Make sure the command can be executed | ||||||
|     version_arg = ESSENTIAL_BINARIES[command].get('version_arg', '--version') |     version_arg = ESSENTIAL_BINARIES[command].get('version_arg', '--version') | ||||||
|     check = run([command, version_arg], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, timeout=5, universal_newlines=True) |     check = cli.run([command, version_arg], combined_output=True, stdin=DEVNULL, timeout=5) | ||||||
| 
 | 
 | ||||||
|     ESSENTIAL_BINARIES[command]['output'] = check.stdout |     ESSENTIAL_BINARIES[command]['output'] = check.stdout | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,7 +5,6 @@ import shutil | |||||||
| 
 | 
 | ||||||
| from milc import cli | from milc import cli | ||||||
| from qmk.constants import QMK_FIRMWARE | from qmk.constants import QMK_FIRMWARE | ||||||
| from qmk.commands import run |  | ||||||
| from qmk.os_helpers import CheckStatus | from qmk.os_helpers import CheckStatus | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -132,7 +131,7 @@ def check_modem_manager(): | |||||||
| 
 | 
 | ||||||
|     """ |     """ | ||||||
|     if check_systemd(): |     if check_systemd(): | ||||||
|         mm_check = run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10) |         mm_check = cli.run(["systemctl", "--quiet", "is-active", "ModemManager.service"], timeout=10) | ||||||
|         if mm_check.returncode == 0: |         if mm_check.returncode == 0: | ||||||
|             return True |             return True | ||||||
|     else: |     else: | ||||||
|  | |||||||
| @ -1,7 +1,6 @@ | |||||||
| """Functions for working with QMK's submodules. | """Functions for working with QMK's submodules. | ||||||
| """ | """ | ||||||
| 
 | from milc import cli | ||||||
| import subprocess |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def status(): | def status(): | ||||||
| @ -18,7 +17,7 @@ def status(): | |||||||
|     status is None when the submodule doesn't exist, False when it's out of date, and True when it's current |     status is None when the submodule doesn't exist, False when it's out of date, and True when it's current | ||||||
|     """ |     """ | ||||||
|     submodules = {} |     submodules = {} | ||||||
|     git_cmd = subprocess.run(['git', 'submodule', 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=30, universal_newlines=True) |     git_cmd = cli.run(['git', 'submodule', 'status'], timeout=30) | ||||||
| 
 | 
 | ||||||
|     for line in git_cmd.stdout.split('\n'): |     for line in git_cmd.stdout.split('\n'): | ||||||
|         if not line: |         if not line: | ||||||
| @ -53,19 +52,19 @@ def update(submodules=None): | |||||||
|         # Update everything |         # Update everything | ||||||
|         git_sync_cmd.append('--recursive') |         git_sync_cmd.append('--recursive') | ||||||
|         git_update_cmd.append('--recursive') |         git_update_cmd.append('--recursive') | ||||||
|         subprocess.run(git_sync_cmd, check=True) |         cli.run(git_sync_cmd, check=True) | ||||||
|         subprocess.run(git_update_cmd, check=True) |         cli.run(git_update_cmd, check=True) | ||||||
| 
 | 
 | ||||||
|     else: |     else: | ||||||
|         if isinstance(submodules, str): |         if isinstance(submodules, str): | ||||||
|             # Update only a single submodule |             # Update only a single submodule | ||||||
|             git_sync_cmd.append(submodules) |             git_sync_cmd.append(submodules) | ||||||
|             git_update_cmd.append(submodules) |             git_update_cmd.append(submodules) | ||||||
|             subprocess.run(git_sync_cmd, check=True) |             cli.run(git_sync_cmd, check=True) | ||||||
|             subprocess.run(git_update_cmd, check=True) |             cli.run(git_update_cmd, check=True) | ||||||
| 
 | 
 | ||||||
|         else: |         else: | ||||||
|             # Update submodules in a list |             # Update submodules in a list | ||||||
|             for submodule in submodules: |             for submodule in submodules: | ||||||
|                 subprocess.run(git_sync_cmd + [submodule], check=True) |                 cli.run([*git_sync_cmd, submodule], check=True) | ||||||
|                 subprocess.run(git_update_cmd + [submodule], check=True) |                 cli.run([*git_update_cmd, submodule], check=True) | ||||||
|  | |||||||
| @ -1,15 +1,14 @@ | |||||||
| import platform | import platform | ||||||
|  | from subprocess import DEVNULL | ||||||
| 
 | 
 | ||||||
| from subprocess import STDOUT, PIPE | from milc import cli | ||||||
| 
 |  | ||||||
| from qmk.commands import run |  | ||||||
| 
 | 
 | ||||||
| is_windows = 'windows' in platform.platform().lower() | is_windows = 'windows' in platform.platform().lower() | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def check_subcommand(command, *args): | def check_subcommand(command, *args): | ||||||
|     cmd = ['bin/qmk', command, *args] |     cmd = ['bin/qmk', command, *args] | ||||||
|     result = run(cmd, stdout=PIPE, stderr=STDOUT, universal_newlines=True) |     result = cli.run(cmd, stdin=DEVNULL, combined_output=True) | ||||||
|     return result |     return result | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -18,7 +17,7 @@ def check_subcommand_stdin(file_to_read, command, *args): | |||||||
|     """ |     """ | ||||||
|     with open(file_to_read, encoding='utf-8') as my_file: |     with open(file_to_read, encoding='utf-8') as my_file: | ||||||
|         cmd = ['bin/qmk', command, *args] |         cmd = ['bin/qmk', command, *args] | ||||||
|         result = run(cmd, stdin=my_file, stdout=PIPE, stderr=STDOUT, universal_newlines=True) |         result = cli.run(cmd, stdin=my_file, combined_output=True) | ||||||
|     return result |     return result | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ DEBCONF_NONINTERACTIVE_SEEN=true | |||||||
| export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN | export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN | ||||||
| 
 | 
 | ||||||
| _qmk_install_prepare() { | _qmk_install_prepare() { | ||||||
|     sudo apt-get update |     sudo apt-get update $SKIP_PROMPT | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| _qmk_install() { | _qmk_install() { | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ _qmk_install() { | |||||||
|     echo "Installing dependencies" |     echo "Installing dependencies" | ||||||
| 
 | 
 | ||||||
|     # TODO: Check whether devel/headers packages are really needed |     # TODO: Check whether devel/headers packages are really needed | ||||||
|     sudo dnf -y install \ |     sudo dnf $SKIP_PROMPT install \ | ||||||
|         clang diffutils git gcc glibc-headers kernel-devel kernel-headers make unzip wget zip \ |         clang diffutils git gcc glibc-headers kernel-devel kernel-headers make unzip wget zip \ | ||||||
|         python3 \ |         python3 \ | ||||||
|         avr-binutils avr-gcc avr-libc \ |         avr-binutils avr-gcc avr-libc \ | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| 
 | 
 | ||||||
| _qmk_install_prepare() { | _qmk_install_prepare() { | ||||||
|     sudo pkg update |     sudo pkg update $SKIP_PROMPT | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| _qmk_install() { | _qmk_install() { | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| #!/bin/bash | #!/bin/bash | ||||||
| 
 | 
 | ||||||
| _qmk_install_prepare() { | _qmk_install_prepare() { | ||||||
|     pacman -Syu |     pacman -Syu $MSYS2_CONFIRM | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| _qmk_install() { | _qmk_install() { | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ | |||||||
| _qmk_install() { | _qmk_install() { | ||||||
|     echo "Installing dependencies" |     echo "Installing dependencies" | ||||||
| 
 | 
 | ||||||
|     sudo xbps-install \ |     sudo xbps-install $SKIP_PROMPT \ | ||||||
|         gcc git make wget unzip zip \ |         gcc git make wget unzip zip \ | ||||||
|         python3-pip \ |         python3-pip \ | ||||||
|         avr-binutils avr-gcc avr-libc \ |         avr-binutils avr-gcc avr-libc \ | ||||||
|  | |||||||
| @ -2,6 +2,13 @@ | |||||||
| 
 | 
 | ||||||
| QMK_FIRMWARE_DIR=$(cd -P -- "$(dirname -- "$0")/.." && pwd -P) | QMK_FIRMWARE_DIR=$(cd -P -- "$(dirname -- "$0")/.." && pwd -P) | ||||||
| QMK_FIRMWARE_UTIL_DIR=$QMK_FIRMWARE_DIR/util | QMK_FIRMWARE_UTIL_DIR=$QMK_FIRMWARE_DIR/util | ||||||
|  | if [ "$1" = "-y" ]; then | ||||||
|  |     SKIP_PROMPT='-y' | ||||||
|  |     MSYS2_CONFIRM='--noconfirm' | ||||||
|  | else | ||||||
|  |     SKIP_PROMPT='' | ||||||
|  |     MSYS2_CONFIRM='' | ||||||
|  | fi | ||||||
| 
 | 
 | ||||||
| case $(uname -a) in | case $(uname -a) in | ||||||
|     *Darwin*) |     *Darwin*) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Zach White
						Zach White