From 9b908e9df42b30b67e4eeaa1fa56611c6e4ed7a5 Mon Sep 17 00:00:00 2001 From: Vadim Troshchinskiy Date: Fri, 13 Sep 2024 09:51:54 +0200 Subject: [PATCH] Ticket #741: Crear repo Ticket #736: Eliminar repo --- api/gitapi.py | 34 ++++++++++++++++++++++++++-- api/opengnsys_git_installer.py | 1 + api/requirements.txt | 8 +++++-- installer/opengnsys_git_installer.py | 2 ++ 4 files changed, 41 insertions(+), 4 deletions(-) create mode 120000 api/opengnsys_git_installer.py diff --git a/api/gitapi.py b/api/gitapi.py index 822cb88..72fdb19 100644 --- a/api/gitapi.py +++ b/api/gitapi.py @@ -2,7 +2,8 @@ from flask import Flask, jsonify import os.path import os import git - +import shutil +from opengnsys_git_installer import OpengnsysGitInstaller repositories_base_path = "/opt/opengnsys/images" @@ -37,12 +38,41 @@ def get_repositories(): "repositories": repos }) +@app.route('/repositories/', methods=['PUT']) +def create_repo(repo): + + repo_path = os.path.join(repositories_base_path, repo + ".git") + if os.path.isdir(repo_path): + return jsonify({"status": "Repository already exists"}), 200 + + + installer = OpengnsysGitInstaller() + installer._init_git_repo(repo + ".git") + + + return jsonify({"status": "Repository created"}), 201 + +@app.route('/repositories/', methods=['DELETE']) +def delete_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 + + + shutil.rmtree(repo_path) + return jsonify({"status": "Repository deleted"}), 200 + + + @app.route('/repositories//branches') def get_repository_branches(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 - gitRepo = git.Repo(os.path.join(repositories_base_path, repo + ".git")) + gitRepo = git.Repo(repo_path) branches = [] for branch in gitRepo.branches: diff --git a/api/opengnsys_git_installer.py b/api/opengnsys_git_installer.py new file mode 120000 index 0000000..a550869 --- /dev/null +++ b/api/opengnsys_git_installer.py @@ -0,0 +1 @@ +../installer/opengnsys_git_installer.py \ No newline at end of file diff --git a/api/requirements.txt b/api/requirements.txt index 8e7eab4..c2fb0d6 100644 --- a/api/requirements.txt +++ b/api/requirements.txt @@ -1,4 +1,5 @@ click==8.0.4 +colorterm==0.3 dataclasses==0.8 Flask==2.0.3 gitdb==4.0.9 @@ -6,9 +7,12 @@ GitPython==3.1.20 importlib-metadata==4.8.3 itsdangerous==2.0.1 Jinja2==3.0.3 +libarchive==0.4.7 MarkupSafe==2.0.1 -pkg-resources==0.0.0 +nose==1.3.7 +pkg_resources==0.0.0 smmap==5.0.0 -typing-extensions==4.1.1 +termcolor==1.1.0 +typing_extensions==4.1.1 Werkzeug==2.0.3 zipp==3.6.0 diff --git a/installer/opengnsys_git_installer.py b/installer/opengnsys_git_installer.py index ac16962..388b579 100755 --- a/installer/opengnsys_git_installer.py +++ b/installer/opengnsys_git_installer.py @@ -182,6 +182,8 @@ class OpengnsysGitInstaller: repo.config_writer().set_value("user", "name", "OpenGnsys").release() repo.config_writer().set_value("user", "email", "OpenGnsys@opengnsys.com").release() + self._recursive_chown(repo_path, ouid=self.ssh_uid, ogid=self.ssh_gid) + def _add_line_to_file(self, filename, new_line): """Agrega una lĂ­nea a un archivo""" found = False