commit 9ec0eaf7d7fbfefdf1c7a985c063ab1179801893
parent 2529f5cd2cb82f6fdcc657e4bfc8750363e9a125
Author: Oscar Benedito <oscar@oscarbenedito.com>
Date:   Wed, 23 Sep 2026 00:05:22 +0200

Raise exceptions on failures

Diffstat:
Mgit-backup.py | 14++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/git-backup.py b/git-backup.py @@ -18,6 +18,7 @@ import datetime import json import os import sys +import subprocess import git import requests @@ -31,6 +32,7 @@ ENV_TARGET_DIR = "TARGET_DIR" def backup_gitlab(token): def get_repositories_data_gitlab(url, page): response = requests.get(url + "&page=" + str(page)) + response.raise_for_status() return response.json() url = "https://gitlab.com/api/v4/projects?private_token=" + token + "&per_page=100&membership=true" @@ -45,7 +47,7 @@ def backup_gitlab(token): if os.path.isdir(clone_dir): git.cmd.Git(clone_dir).fetch() else: - os.system("git clone --mirror " + repository["ssh_url_to_repo"] + " " + clone_dir) + subprocess.run(["git", "clone", "--mirror", "--", repository["ssh_url_to_repo"], clone_dir], check=True) backup_data["sites"]["gitlab.com"].append( { "name": repository["name"], @@ -62,6 +64,7 @@ def backup_github(token): def get_repositories_data_github(url, token, page): headers = {"Authorization": "token " + token} response = requests.get(url + "?page=" + str(page), headers=headers) + response.raise_for_status() return response.json() url = "https://api.github.com/user/repos" @@ -76,7 +79,7 @@ def backup_github(token): if os.path.isdir(clone_dir): git.cmd.Git(clone_dir).fetch() else: - os.system("git clone --mirror " + repository["ssh_url"] + " " + clone_dir) + subprocess.run(["git", "clone", "--mirror", "--", repository["ssh_url"], clone_dir], check=True) backup_data["sites"]["github.com"].append( { "name": repository["name"], @@ -96,7 +99,7 @@ def backup_custom_repositories(repositories): if os.path.isdir(clone_dir): git.cmd.Git(clone_dir).fetch() else: - os.system("git clone --mirror " + repository["clone_url"] + " " + clone_dir) + subprocess.run(["git", "clone", "--mirror", "--", repository["clone_url"], clone_dir], check=True) if repository["host"] not in backup_data["sites"]: backup_data["sites"][repository["host"]] = [] backup_data["sites"][repository["host"]].append( @@ -114,8 +117,7 @@ def main(): os.makedirs(os.environ.get(ENV_TARGET_DIR), exist_ok=True) os.chdir(os.environ.get(ENV_TARGET_DIR)) except Exception as e: - print(f"Failed to create directory due to error: {e}", file=sys.stderr) - return + raise RuntimeError("Failed to create backup directory") from e backup_data["time"] = str(datetime.datetime.now()) backup_data["sites"] = {} @@ -135,7 +137,7 @@ def main(): repositories = json.load(f) backup_custom_repositories(repositories) except FileNotFoundError: - print("Error: File " + custom_repositories_path + " not found", file=sys.stderr) + raise RuntimeError("Missing configured repository list: " + custom_repositories_path) with open("backup_data.json", "w", encoding="utf-8") as output_file: json.dump(backup_data, output_file, ensure_ascii=False)