diff --git a/app.py b/app.py index 8f429e0..2ac2d86 100644 --- a/app.py +++ b/app.py @@ -1,15 +1,16 @@ #!/usr/bin/env python3 + import os -import subprocess -import json from dataclasses import dataclass -from flask import Flask, render_template, request, jsonify, send_from_directory -app = Flask(__name__, static_folder=None) # Disable default static folder +from flask import Flask, jsonify, render_template, send_from_directory -GIT_REPO_PATH = "/home/frozenpipe/dev" # Default path for git repositories +app = Flask(__name__, static_folder=None) + +GIT_REPO_PATH = "/home/frozenpipe/dev" EXPORT_MARKER = "readme.md" + @dataclass class Repository: name: str @@ -17,85 +18,79 @@ class Repository: path: str exported: bool + def get_repositories(): - """ - Scan the git repository directory and return a list of Repository objects - """ repositories = [] - - # Make sure the git repository path exists + if not os.path.exists(GIT_REPO_PATH): return repositories - - # List all subdirectories that are git repositories (have a .git dir or are bare repos) + for item in os.listdir(GIT_REPO_PATH): repo_path = os.path.join(GIT_REPO_PATH, item) - - # Skip if not a directory + if not os.path.isdir(repo_path): continue - - # Check if it's a git repository (either has a .git directory or is a bare repo with HEAD file) - if not (os.path.exists(os.path.join(repo_path, ".git")) or - os.path.exists(os.path.join(repo_path, "HEAD"))): + + if not ( + os.path.exists(os.path.join(repo_path, ".git")) + or os.path.exists(os.path.join(repo_path, "HEAD")) + ): continue - - # Check if the git-daemon-export-ok file exists + exported = os.path.exists(os.path.join(repo_path, EXPORT_MARKER)) - - # Try to get the repository description from the description file only - description = "" + + description = "No description available" description_file = os.path.join(repo_path, "description") if os.path.exists(description_file): try: - with open(description_file, 'r') as f: + with open(description_file, "r") as f: description = f.read().strip() - # Skip default description - if description == "Unnamed repository; edit this file 'description' to name the repository.": + if ( + description + == "Unnamed repository; edit this file 'description' to name the repository." + ): description = "No description available" - except: - description = "No description available" - else: - description = "No description available" - - repositories.append(Repository( - name=item, - description=description, - path=repo_path, - exported=exported - )) - - # Sort repositories by name + except _ as _: + pass + repositories.append( + Repository( + name=item, description=description, path=repo_path, exported=exported + ) + ) + repositories.sort(key=lambda repo: repo.name.lower()) - + return repositories -@app.route('/') + +@app.route("/") def index(): repositories = [repo for repo in get_repositories() if repo.exported] - return render_template('index.html', repositories=repositories) + return render_template("index.html", repositories=repositories) -@app.route('/styles/') + +@app.route("/styles/") def serve_styles(filename): - return send_from_directory('styles', filename) + return send_from_directory("styles", filename) -@app.route('/scripts/') + +@app.route("/scripts/") def serve_scripts(filename): - return send_from_directory('scripts', filename) + return send_from_directory("scripts", filename) -@app.route('/api/repo/') + +@app.route("/api/repo/") def get_repo(repo_id): repositories = [repo for repo in get_repositories() if repo.exported] - + if repo_id < 0 or repo_id >= len(repositories): return jsonify({"error": "Repository not found"}), 404 - - repo = repositories[repo_id] - return jsonify({ - "name": repo.name, - "description": repo.description, - "path": repo.path - }) -if __name__ == '__main__': - app.run(host='0.0.0.0', port=8000, debug=True) + repo = repositories[repo_id] + return jsonify( + {"name": repo.name, "description": repo.description, "path": repo.path} + ) + + +if __name__ == "__main__": + app.run(host="0.0.0.0", port=8000, debug=True) diff --git a/git-server-ui.service b/git-server-ui.service index da9af7f..c2c77d1 100644 --- a/git-server-ui.service +++ b/git-server-ui.service @@ -5,7 +5,7 @@ After=network.target [Service] User=apache WorkingDirectory=/srv/git/git-server-ui -ExecStart=/root/.local/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 wsgi:app +ExecStart=/root/.local/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 --chdir /srv/git wsgi:app Restart=on-failure [Install] diff --git a/main.py b/main.py deleted file mode 100644 index f82ecc7..0000000 --- a/main.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print("Hello from git-server-ui!") - - -if __name__ == "__main__": - main()