commit 9ec0eaf7d7fbfefdf1c7a985c063ab1179801893
parent 2529f5cd2cb82f6fdcc657e4bfc8750363e9a125
Author: Oscar Benedito <oscar@oscarbenedito.com>
Date: Wed, 23 Sep 2026 00:05:22 +0200
Raise exceptions on failures
Diffstat:
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)