From 6eca4bbab12448d1c2b10881e5bd39211a008c20 Mon Sep 17 00:00:00 2001 From: ellensp <530024+ellensp@users.noreply.github.com> Date: Sun, 12 Jan 2025 16:06:24 +1300 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Migrate=20use=5Fexample=5Fconfig?= =?UTF-8?q?s=20to=20Python=20(#27632)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buildroot/bin/restore_configs | 45 ++++++++---- buildroot/bin/use_example_configs | 111 ++++++++++++++++++++---------- 2 files changed, 106 insertions(+), 50 deletions(-) diff --git a/buildroot/bin/restore_configs b/buildroot/bin/restore_configs index e1a601679bd1..0bbd36fd1ce6 100755 --- a/buildroot/bin/restore_configs +++ b/buildroot/bin/restore_configs @@ -1,12 +1,33 @@ -#!/usr/bin/env bash - -rm -f Marlin/_Bootscreen.h Marlin/_Statusscreen.h marlin_config.json .pio/build/mc.zip - -if [[ $1 == '-d' || $1 == '--default' ]]; then - use_example_configs -else - git checkout Marlin/Configuration.h 2>/dev/null - git checkout Marlin/Configuration_adv.h 2>/dev/null - git checkout Marlin/config.ini 2>/dev/null - git checkout Marlin/src/pins/*/pins_*.h 2>/dev/null -fi +#!/usr/bin/env python3 + +import os, sys, subprocess + +files_to_remove = [ + "Marlin/_Bootscreen.h", + "Marlin/_Statusscreen.h", + "marlin_config.json", + ".pio/build/mc.zip" +] + +for file in files_to_remove: + if os.path.exists(file): + os.remove(file) + +def use_example_configs(): + try: + subprocess.run(['use_example_configs'], check=True) + except FileNotFoundError: + print("use_example_configs not found, skipping.") + pass + +if len(sys.argv) > 1 and sys.argv[1] in ['-d', '--default']: + use_example_configs() +else: + files_to_checkout = [ + "Marlin/Configuration.h", + "Marlin/Configuration_adv.h", + "Marlin/config.ini", + "Marlin/src/pins/*/pins_*.h" + ] + for file in files_to_checkout: + subprocess.run(["git", "checkout", file], stderr=subprocess.DEVNULL) diff --git a/buildroot/bin/use_example_configs b/buildroot/bin/use_example_configs index 282e057dde46..193da7490109 100755 --- a/buildroot/bin/use_example_configs +++ b/buildroot/bin/use_example_configs @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # use_example_configs [repo:]configpath # @@ -14,40 +14,75 @@ # The fallback branch is bugfix-2.1.x. # -which curl >/dev/null && TOOL='curl -L -s -S -f -o wgot' -which wget >/dev/null && TOOL='wget -q -O wgot' - -CURR=$(git branch 2>/dev/null | grep ^* | sed 's/\* //g') -case "$CURR" in - bugfix-2.*.x ) BRANCH=$CURR ;; - *-2.1.x|2.1.x ) BRANCH=latest-2.1.x ;; - *-2.0.x|2.0.x ) BRANCH=latest-2.0.x ;; - *-1.1.x|1.1.x ) BRANCH=latest-1.1.x ;; - *-1.0.x|1.0.x ) BRANCH=latest-1.0.x ;; - * ) BRANCH=bugfix-2.1.x ;; -esac - -if [[ $# > 0 ]]; then - IFS=: read -r PART1 PART2 <<< "$@" - [[ -n $PART2 ]] && { UDIR="$PART2" ; BRANCH="$PART1" ; } \ - || { UDIR="$PART1" ; } - RDIR="${UDIR// /%20}" - echo "Fetching $UDIR configurations from $BRANCH..." - EXAMPLES="examples/$RDIR" -else - EXAMPLES="default" -fi - -CONFIGS="https://raw.githubusercontent.com/MarlinFirmware/Configurations/$BRANCH/config/${EXAMPLES}" - -restore_configs - -cd Marlin - -$TOOL "$CONFIGS/Configuration.h" >/dev/null 2>&1 && mv wgot Configuration.h -$TOOL "$CONFIGS/Configuration_adv.h" >/dev/null 2>&1 && mv wgot Configuration_adv.h -$TOOL "$CONFIGS/_Bootscreen.h" >/dev/null 2>&1 && mv wgot _Bootscreen.h -$TOOL "$CONFIGS/_Statusscreen.h" >/dev/null 2>&1 && mv wgot _Statusscreen.h - -rm -f wgot -cd - >/dev/null +import os, subprocess, sys, urllib.request + +def get_current_branch(): + try: + result = subprocess.run(['git', 'branch'], capture_output=True, text=True, check=True) + for line in result.stdout.splitlines(): + if line.startswith('*'): + return line[2:] + except subprocess.CalledProcessError: + return None + +def fetch_configs(branch, config_path): + print(f"Fetching {config_path} configurations from {branch}...") + base_url = f"https://raw.githubusercontent.com/MarlinFirmware/Configurations/{branch}/config/{config_path}" + files = ["Configuration.h", "Configuration_adv.h", "_Bootscreen.h", "_Statusscreen.h"] + marlin_dir = os.path.join(os.getcwd(), "Marlin") + if not os.path.exists(marlin_dir): + print(f"Directory {marlin_dir} does not exist.") + sys.exit(1) + for file in files: + url = f"{base_url}/{file}" + dest_file = os.path.join(marlin_dir, file) + if os.getenv('DEBUG', '0') == '1': + print(f"Fetching {file} from {url} to {dest_file}") + try: + urllib.request.urlretrieve(url, dest_file) + except urllib.error.HTTPError as e: + if e.code == 404: + if os.getenv('DEBUG', '0') == '1': + print(f"File {file} not found (404), skipping.") + else: + raise + +def main(): + branch = get_current_branch() + if not branch: + print("Not a git repository or no branch found.") + sys.exit(1) + + if branch.startswith("bugfix-2."): + branch = branch + elif branch.endswith("-2.1.x") or branch == "2.1.x": + branch = "latest-2.1.x" + elif branch.endswith("-2.0.x") or branch == "2.0.x": + branch = "latest-2.0.x" + elif branch.endswith("-1.1.x") or branch == "1.1.x": + branch = "latest-1.1.x" + elif branch.endswith("-1.0.x") or branch == "1.0.x": + branch = "latest-1.0.x" + else: + branch = "bugfix-2.1.x" + + if len(sys.argv) > 1: + arg = sys.argv[1] + if ':' in arg: + part1, part2 = arg.split(':', 1) + config_path = part2 + branch = part1 + else: + config_path = arg + config_path = 'examples/'+config_path.replace(' ', '%20') + else: + config_path = "default" + + try: + subprocess.run(['restore_configs'], check=True) + except FileNotFoundError: + print("restore_configs not found, skipping.") + fetch_configs(branch, config_path) + +if __name__ == "__main__": + main()