Created
October 21, 2023 16:54
-
-
Save ladyada/3b90fae2af3002a792f97256c4884ff3 to your computer and use it in GitHub Desktop.
clean & update arduino libraries python script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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