Feat(ogrepository): implement forgejo git repository deletion endpoint
ogrepository/pipeline/head This commit looks good Details

pull/48/head
Juan Manuel Bardallo 2026-07-28 10:47:23 +02:00
parent 0267354899
commit e6644191c1
1 changed files with 42 additions and 3 deletions

View File

@ -2288,6 +2288,31 @@ def git_forgejo_create_repo(repo):
"private" : False
})
def git_forgejo_delete_command(url):
token = ""
with open("/opt/opengnsys/etc/ogGitApiToken.cfg", "r", encoding='utf-8') as token_file:
token = token_file.read().strip()
if url[0] == "/":
url = url[1:]
url = f"http://localhost:{OGGIT_FORGEJO_PORT}/{url}"
journal.send(f"Executing forgejo DELETE to {url}...", PRIORITY=journal.LOG_DEBUG, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
r = requests.delete(
url,
headers = { 'Authorization' : f"token {token}" },
timeout = 60
)
journal.send(f"Request status was {r.status_code}, content {r.content}", PRIORITY=journal.LOG_DEBUG, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
return r.status_code, r.content.decode('utf-8')
def git_forgejo_delete_repo(repo):
return git_forgejo_delete_command(f"/api/v1/repos/oggit/{repo}")
def git_forgejo_create_tag(repo,tag,msg,target):
return git_forgejo_post_command(f"/api/v1/repos/oggit/{repo}/tags", {
"message": msg,
@ -2453,9 +2478,23 @@ def git_create_repository():
return jsonify({"status": "Repository created"}), 201
@app.route("/ogrepository/v1/git/repositories", methods=['DELETE'])
def git_delete_repository():
return jsonify({"error" : "Not implemented"}), 500
@app.route("/ogrepository/v1/git/repositories/<string:repo>", methods=['DELETE'])
def git_delete_repository(repo):
repo_path = os.path.join(REPOSITORIES_BASE_PATH, OGGIT_USER, repo + ".git")
status, content = git_forgejo_delete_repo(repo)
if status not in (204, 404):
journal.send(f"Can't delete repository {repo} from forgejo: {content}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
return jsonify({"error" : f"Failed to delete from forgejo: {content}"}), 500
if os.path.isdir(repo_path):
import shutil
shutil.rmtree(repo_path, ignore_errors=True)
journal.send(f"Repository {repo} deleted", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
return jsonify({"status": "Repository deleted"}), 200
else:
journal.send(f"Can't delete repository {repo}, not found at {repo_path}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
return jsonify({"status": "Repository not found"}), 404
@app.route("/ogrepository/v1/git/repositories/<string:repo>/sync", methods=['POST'])
def git_sync_repository(repo):