Skip to content

Instantly share code, notes, and snippets.

@ladyada
Created October 21, 2023 16:54
Show Gist options
  • Save ladyada/3b90fae2af3002a792f97256c4884ff3 to your computer and use it in GitHub Desktop.
Save ladyada/3b90fae2af3002a792f97256c4884ff3 to your computer and use it in GitHub Desktop.
clean & update arduino libraries python script
SSH_KEY_PATH = "C:\\\\Users\\\\ladyada\\\\github.ppk" # change path to your ppk or other pubkey file!
import os
import re
import subprocess
def sanitize_name(name):
return re.sub(r'[^a-zA-Z0-9]', '_', name)
def git_actions(folder_path):
os.environ['GIT_SSH_COMMAND'] = f'plink -i {SSH_KEY_PATH}'
git_folder = os.path.join(folder_path, ".git")
if os.path.exists(git_folder):
current_branch = subprocess.getoutput(f"git -C {folder_path} rev-parse --abbrev-ref HEAD").strip()
if current_branch not in ['main', 'master']:
print(f"Alert: {folder_path} is on a non-main/master branch: {current_branch}")
else:
result = subprocess.run(["git", "-C", folder_path, "pull", "origin", current_branch], capture_output=True, text=True)
if "Already up to date." in result.stdout:
pass # print(f"{os.path.basename(folder_path)}: Up to date")
elif "Fast-forward" in result.stdout:
print(f"{os.path.basename(folder_path)}: Updated")
else:
print(folder_path, result.stdout, result.stderr)
def rename_arduino_folders(root_folder):
for folder in os.listdir(root_folder):
folder_path = os.path.join(root_folder, folder)
# Handle Git actions on every folder
git_actions(folder_path)
if folder.startswith("arduino_"):
properties_file = os.path.join(folder_path, "library.properties")
if os.path.exists(properties_file):
with open(properties_file, 'r') as f:
lines = f.readlines()
properties = {}
for line in lines:
try:
key, value = line.strip().split('=', 1)
properties[key] = value
except ValueError:
continue
if 'name' in properties and 'version' in properties:
new_name = f"{sanitize_name(properties['name'])}_{sanitize_name(properties['version'])}"
new_folder_path = os.path.join(root_folder, new_name)
if folder_path != new_folder_path:
confirmation = input(f"About to rename {folder} to {new_name}. Press return to continue.")
if confirmation == '':
os.rename(folder_path, new_folder_path)
print(f"Renamed {folder} to {new_name}")
if __name__ == "__main__":
arduino_lib_folder = '.'
rename_arduino_folders(arduino_lib_folder)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment