no message
This commit is contained in:
parent
958841d781
commit
49fca2b3b9
8 changed files with 577 additions and 150 deletions
173
remove-font.py
Executable file
173
remove-font.py
Executable file
|
|
@ -0,0 +1,173 @@
|
|||
#!/usr/bin/env python3
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
import subprocess
|
||||
import requests
|
||||
import re
|
||||
from pathlib import Path
|
||||
from dotenv import load_dotenv
|
||||
from urllib.parse import urlparse
|
||||
|
||||
# Load environment variables from .env file
|
||||
load_dotenv()
|
||||
|
||||
def get_gitea_credentials():
|
||||
"""Get Gitea credentials from environment variables."""
|
||||
gitea_url = os.getenv("GITEA_URL")
|
||||
gitea_username = os.getenv("GITEA_USERNAME")
|
||||
gitea_token = os.getenv("GITEA_API_TOKEN")
|
||||
|
||||
if not all([gitea_url, gitea_username, gitea_token]):
|
||||
print("Error: Missing Gitea credentials in .env file.")
|
||||
print("Please make sure GITEA_URL, GITEA_USERNAME, and GITEA_API_TOKEN are set.")
|
||||
sys.exit(1)
|
||||
|
||||
return gitea_url, gitea_username, gitea_token
|
||||
|
||||
def get_available_fonts():
|
||||
"""Get a list of available fonts from the index.json file."""
|
||||
index_path = Path("fonts/index.json")
|
||||
if not index_path.exists():
|
||||
print("Error: fonts/index.json not found.")
|
||||
sys.exit(1)
|
||||
|
||||
with open(index_path, "r") as f:
|
||||
index = json.load(f)
|
||||
|
||||
return [font["name"] for font in index.get("fonts", [])]
|
||||
|
||||
def get_repo_name_from_submodule(font_name):
|
||||
"""Get the repository name from the submodule URL."""
|
||||
submodule_path = f"fonts/{font_name}"
|
||||
if not os.path.exists(submodule_path):
|
||||
return None
|
||||
|
||||
# Get the submodule URL from .gitmodules
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["git", "config", "-f", ".gitmodules", f"submodule.{submodule_path}.url"],
|
||||
capture_output=True, text=True, check=True
|
||||
)
|
||||
url = result.stdout.strip()
|
||||
|
||||
# Handle both HTTP and SSH URLs
|
||||
if url.startswith('http://') or url.startswith('https://'):
|
||||
# HTTP URL format: http://clancy.genet-godzilla.ts.net:3002/fishy/homebrew-font-test
|
||||
match = re.search(r'/([^/]+)/([^/]+)$', url)
|
||||
if match:
|
||||
return match.group(2) # Return the repository name
|
||||
elif url.startswith('git@') or ':' in url:
|
||||
# SSH URL format: git@clancy.genet-godzilla.ts.net:fishy/homebrew-font-test
|
||||
# or with custom port: ssh://git@clancy.genet-godzilla.ts.net:2222/fishy/homebrew-font-test
|
||||
parts = url.split(':')
|
||||
if len(parts) >= 2:
|
||||
# Get the last part which should be username/repo
|
||||
last_part = parts[-1]
|
||||
if '/' in last_part:
|
||||
return last_part.split('/')[-1]
|
||||
|
||||
print(f"Warning: Could not extract repository name from URL: {url}")
|
||||
return None
|
||||
except subprocess.CalledProcessError:
|
||||
return None
|
||||
|
||||
def delete_gitea_repo(gitea_url, gitea_username, gitea_token, repo_name):
|
||||
"""Delete a repository from Gitea using the API."""
|
||||
api_url = f"{gitea_url}/api/v1/repos/{gitea_username}/{repo_name}"
|
||||
headers = {
|
||||
"Authorization": f"token {gitea_token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
print(f"Deleting repository {repo_name} from Gitea...")
|
||||
response = requests.delete(api_url, headers=headers)
|
||||
|
||||
if response.status_code == 204:
|
||||
print(f"Repository {repo_name} deleted successfully.")
|
||||
return True
|
||||
else:
|
||||
print(f"Error deleting repository: {response.status_code} - {response.text}")
|
||||
return False
|
||||
|
||||
def remove_font(font_name):
|
||||
"""Remove a font from the Homebrew tap and delete its repository from Gitea."""
|
||||
# Get Gitea credentials
|
||||
gitea_url, gitea_username, gitea_token = get_gitea_credentials()
|
||||
|
||||
# Check if the font exists
|
||||
available_fonts = get_available_fonts()
|
||||
if font_name not in available_fonts:
|
||||
print(f"Error: Font '{font_name}' not found in the available fonts.")
|
||||
print(f"Available fonts: {', '.join(available_fonts)}")
|
||||
sys.exit(1)
|
||||
|
||||
# Confirm deletion
|
||||
print(f"\nWARNING: You are about to remove the font '{font_name}' and delete its repository from Gitea.")
|
||||
print("This action cannot be undone.")
|
||||
confirmation = input("Are you sure you want to proceed? (yes/no): ").lower()
|
||||
|
||||
if confirmation != "yes":
|
||||
print("Operation cancelled.")
|
||||
sys.exit(0)
|
||||
|
||||
# Get the repository name from the submodule
|
||||
repo_name = get_repo_name_from_submodule(font_name)
|
||||
if not repo_name:
|
||||
print(f"Warning: Could not determine the repository name for font '{font_name}'.")
|
||||
print("The repository will not be deleted from Gitea.")
|
||||
repo_name = None
|
||||
|
||||
# Remove the submodule
|
||||
submodule_path = f"fonts/{font_name}"
|
||||
if os.path.exists(submodule_path):
|
||||
print(f"Removing submodule {submodule_path}...")
|
||||
subprocess.run(["git", "submodule", "deinit", "-f", submodule_path], check=True)
|
||||
subprocess.run(["git", "rm", "-f", submodule_path], check=True)
|
||||
subprocess.run(["rm", "-rf", f".git/modules/{submodule_path}"], check=True)
|
||||
|
||||
# Remove the formula
|
||||
formula_path = f"Formula/font-{font_name}.rb"
|
||||
if os.path.exists(formula_path):
|
||||
print(f"Removing formula {formula_path}...")
|
||||
subprocess.run(["git", "rm", "-f", formula_path], check=True)
|
||||
|
||||
# Update the index.json file
|
||||
index_path = Path("fonts/index.json")
|
||||
with open(index_path, "r") as f:
|
||||
index = json.load(f)
|
||||
|
||||
# Remove the font from the index
|
||||
index["fonts"] = [font for font in index.get("fonts", []) if font["name"] != font_name]
|
||||
|
||||
# Write the updated index back to the file
|
||||
with open(index_path, "w") as f:
|
||||
json.dump(index, f, indent=2)
|
||||
|
||||
# Delete the repository from Gitea if we found the name
|
||||
if repo_name:
|
||||
delete_gitea_repo(gitea_url, gitea_username, gitea_token, repo_name)
|
||||
else:
|
||||
print("Skipping repository deletion as the repository name could not be determined.")
|
||||
|
||||
# Commit the changes
|
||||
subprocess.run(["git", "add", "fonts/index.json"], check=True)
|
||||
subprocess.run(["git", "commit", "-m", f"Remove {font_name} font"], check=True)
|
||||
|
||||
print(f"\nFont '{font_name}' has been removed successfully.")
|
||||
print("Remember to push your changes to Gitea manually.")
|
||||
|
||||
def main():
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python3 remove-font.py <font-name>")
|
||||
print("\nAvailable fonts:")
|
||||
available_fonts = get_available_fonts()
|
||||
for font in available_fonts:
|
||||
print(f" - {font}")
|
||||
sys.exit(1)
|
||||
|
||||
font_name = sys.argv[1]
|
||||
remove_font(font_name)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue