Blob: repository.py
Blob id: 20320113b909b408b13ed9b46d6348af89a35332
Size: 1.7 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | from pathlib import Path import pygit2 as git from .config import get_repo_owner, is_repo_hidden # scans given path for bare git repos and list their names and paths def get_bare_repos(path): if not path: return [] repo_path = Path(path) if not repo_path.exists() or not repo_path.is_dir(): return [] repos = [] for item in repo_path.iterdir(): if not item.is_dir(): continue repo = _safe_repository(item) if not repo or not repo.is_bare: continue if is_repo_hidden(item): continue description = _read_description(item / "description") owner = get_repo_owner(item) repos.append( { "name": item.name, "path": str(item.resolve()), "description": description, "owner": owner, } ) repos.sort( # sort by owner (empty last), then by owner name, then by repo name key=lambda repo: ( not (repo.get("owner") or "").strip(), (repo.get("owner") or "").lower(), repo["name"].lower(), ) ) return repos def _safe_repository(path): try: return git.Repository(str(path)) except git.GitError: return None def _read_description(desc_file): if not desc_file.exists(): return "" try: desc_buf = desc_file.read_text().strip() # if no description, git writes "Unnamed repository; edit this file 'description' to name the repository." if desc_buf.startswith("Unnamed repository;"): return "" return desc_buf except Exception: return "" |