69 lines
1.7 KiB
Python
69 lines
1.7 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import logging
|
||
|
from pathlib import Path
|
||
|
|
||
|
import utils
|
||
|
from git import Repo
|
||
|
|
||
|
|
||
|
def apps_cache_path() -> Path:
|
||
|
path = apps_repo_root() / ".apps_cache"
|
||
|
path.mkdir()
|
||
|
return path
|
||
|
|
||
|
|
||
|
def app_cache_path(app: str) -> Path:
|
||
|
path = apps_cache_path() / app
|
||
|
path.mkdir()
|
||
|
return path
|
||
|
|
||
|
|
||
|
# def refresh_all_caches(catalog: dict[str, dict[str, str]]):
|
||
|
# for app, infos
|
||
|
# pass
|
||
|
|
||
|
|
||
|
def app_cache_clone(app: str, infos: dict[str, str]) -> None:
|
||
|
git_depths = {
|
||
|
"notworking": 5,
|
||
|
"inprogress": 20,
|
||
|
"default": 40,
|
||
|
}
|
||
|
|
||
|
Repo.clone_from(
|
||
|
infos["url"],
|
||
|
to_path=app_cache_path(app),
|
||
|
depth=git_depths.get(infos["state"], git_depths["default"]),
|
||
|
single_branch=True, branch=infos.get("branch", "master"),
|
||
|
)
|
||
|
|
||
|
|
||
|
def app_cache_update(app: str, infos: dict[str, str]) -> None:
|
||
|
app_path = app_cache_path(app)
|
||
|
age = utils.git_repo_age(app_path)
|
||
|
if age is False:
|
||
|
return app_cache_clone(app, infos)
|
||
|
|
||
|
if age < 3600:
|
||
|
logging.info(f"Skipping {app}, it's been updated recently.")
|
||
|
return
|
||
|
|
||
|
repo = Repo(app_path)
|
||
|
repo.remote("origin").set_url(infos["url"])
|
||
|
|
||
|
branch = infos.get("branch", "master")
|
||
|
if repo.active_branch != branch:
|
||
|
all_branches = [str(b) for b in repo.branches]
|
||
|
if branch in all_branches:
|
||
|
repo.git.checkout(branch, "--force")
|
||
|
else:
|
||
|
repo.git.remote("set-branches", "--add", "origin", branch)
|
||
|
repo.remote("origin").fetch(f"{branch}:{branch}")
|
||
|
|
||
|
repo.remote("origin").fetch(refspec=branch, force=True)
|
||
|
repo.git.reset("--hard", f"origin/{branch}")
|
||
|
|
||
|
|
||
|
def cache_all_apps(catalog: dict[str, dict[str, str]]) -> None:
|