🔨 Migrate use_example_configs to Python (#27632)

This commit is contained in:
ellensp 2025-01-12 16:06:24 +13:00 committed by GitHub
parent de7ac7f594
commit 6eca4bbab1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 97 additions and 41 deletions

View file

@ -1,12 +1,33 @@
#!/usr/bin/env bash #!/usr/bin/env python3
rm -f Marlin/_Bootscreen.h Marlin/_Statusscreen.h marlin_config.json .pio/build/mc.zip import os, sys, subprocess
if [[ $1 == '-d' || $1 == '--default' ]]; then files_to_remove = [
use_example_configs "Marlin/_Bootscreen.h",
else "Marlin/_Statusscreen.h",
git checkout Marlin/Configuration.h 2>/dev/null "marlin_config.json",
git checkout Marlin/Configuration_adv.h 2>/dev/null ".pio/build/mc.zip"
git checkout Marlin/config.ini 2>/dev/null ]
git checkout Marlin/src/pins/*/pins_*.h 2>/dev/null
fi 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)

View file

@ -1,4 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env python
# #
# use_example_configs [repo:]configpath # use_example_configs [repo:]configpath
# #
@ -14,40 +14,75 @@
# The fallback branch is bugfix-2.1.x. # The fallback branch is bugfix-2.1.x.
# #
which curl >/dev/null && TOOL='curl -L -s -S -f -o wgot' import os, subprocess, sys, urllib.request
which wget >/dev/null && TOOL='wget -q -O wgot'
CURR=$(git branch 2>/dev/null | grep ^* | sed 's/\* //g') def get_current_branch():
case "$CURR" in try:
bugfix-2.*.x ) BRANCH=$CURR ;; result = subprocess.run(['git', 'branch'], capture_output=True, text=True, check=True)
*-2.1.x|2.1.x ) BRANCH=latest-2.1.x ;; for line in result.stdout.splitlines():
*-2.0.x|2.0.x ) BRANCH=latest-2.0.x ;; if line.startswith('*'):
*-1.1.x|1.1.x ) BRANCH=latest-1.1.x ;; return line[2:]
*-1.0.x|1.0.x ) BRANCH=latest-1.0.x ;; except subprocess.CalledProcessError:
* ) BRANCH=bugfix-2.1.x ;; return None
esac
if [[ $# > 0 ]]; then def fetch_configs(branch, config_path):
IFS=: read -r PART1 PART2 <<< "$@" print(f"Fetching {config_path} configurations from {branch}...")
[[ -n $PART2 ]] && { UDIR="$PART2" ; BRANCH="$PART1" ; } \ base_url = f"https://raw.githubusercontent.com/MarlinFirmware/Configurations/{branch}/config/{config_path}"
|| { UDIR="$PART1" ; } files = ["Configuration.h", "Configuration_adv.h", "_Bootscreen.h", "_Statusscreen.h"]
RDIR="${UDIR// /%20}" marlin_dir = os.path.join(os.getcwd(), "Marlin")
echo "Fetching $UDIR configurations from $BRANCH..." if not os.path.exists(marlin_dir):
EXAMPLES="examples/$RDIR" print(f"Directory {marlin_dir} does not exist.")
else sys.exit(1)
EXAMPLES="default" for file in files:
fi 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
CONFIGS="https://raw.githubusercontent.com/MarlinFirmware/Configurations/$BRANCH/config/${EXAMPLES}" def main():
branch = get_current_branch()
if not branch:
print("Not a git repository or no branch found.")
sys.exit(1)
restore_configs 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"
cd Marlin 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"
$TOOL "$CONFIGS/Configuration.h" >/dev/null 2>&1 && mv wgot Configuration.h try:
$TOOL "$CONFIGS/Configuration_adv.h" >/dev/null 2>&1 && mv wgot Configuration_adv.h subprocess.run(['restore_configs'], check=True)
$TOOL "$CONFIGS/_Bootscreen.h" >/dev/null 2>&1 && mv wgot _Bootscreen.h except FileNotFoundError:
$TOOL "$CONFIGS/_Statusscreen.h" >/dev/null 2>&1 && mv wgot _Statusscreen.h print("restore_configs not found, skipping.")
fetch_configs(branch, config_path)
rm -f wgot if __name__ == "__main__":
cd - >/dev/null main()