From ef41ec5a89ba00cc3f92243c25bb403bfe9dbbca Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Date: Mon, 16 Sep 2024 16:32:33 +0200 Subject: [PATCH] Ticket #737: GC --- api/gitapi.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/api/gitapi.py b/api/gitapi.py index 6458150..9f051b0 100644 --- a/api/gitapi.py +++ b/api/gitapi.py @@ -51,6 +51,12 @@ def do_repo_sync(repo, params): return results +def do_repo_gc(repo): + gitrepo = git.Repo(f"{repositories_base_path}/{repo}.git") + + gitrepo.git.gc() + return True + # Define a route for the root URL @app.route('/') @@ -144,6 +150,20 @@ def backup_repo(repo): #return jsonify({"status": "Started backup", "repository" : repo, "ssh_server" : dest_server, "ssh_user" : dest_user, "filename" : dest_file}), 200 +@app.route('/repositories//gc', methods=['POST']) +def gc_repo(repo): + + repo_path = os.path.join(repositories_base_path, repo + ".git") + if not os.path.isdir(repo_path): + return jsonify({"error": "Repository not found"}), 404 + + future = executor.submit(do_repo_gc, repo) + task_id = str(uuid.uuid4()) + tasks[task_id] = future + + return jsonify({"status": "started", "task_id" : task_id}), 200 + + @app.route('/tasks//status') def tasks_status(task_id): if not task_id in tasks: