#!/usr/bin/env nix-shell #!nix-shell -i python3 -p git git-sync import os import queue import subprocess from pathlib import Path from typing import Dict HOME = Path("~").expanduser().resolve() SYNC_MAPPING: Dict[Path, str] = { Path( "~/.password-store" ).expanduser(): "https://git.xenia.me.uk/pixelifytica/pass.git", Path("~/.elfeed").expanduser(): "https://git.xenia.me.uk/pixelifytica/elfeed.git", Path( "~/Documents/Org" ).expanduser(): "https://git.xenia.me.uk/pixelifytica/org.git", Path( "~/Documents/References" ).expanduser(): "https://git.xenia.me.uk/pixelifytica/references.git", } PULL_MAPPINGS: Dict[Path, str] = { Path("/etc/nixos"): "https://git.xenia.me.uk/pixelifytica/nixos.git", Path(os.getenv("XDG_CONFIG_HOME", "~/.config")).expanduser() / "emacs": "https://git.xenia.me.uk/pixelifytica/emacs.git", } def git_set_url(directory: Path, url: str) -> None: """Set url for directory""" comp = subprocess.run(f"git remote set-url origin {url}".split(), cwd=directory) if comp.returncode != 0: raise UserWarning(f"{comp.returncode} from {' '.join(comp.args)}") subprocess.run("git remote -v".split(), cwd=directory) def git_sync(directory: Path, url: str) -> subprocess.CompletedProcess: """Sync status of repository""" print(f"--- sync: ${directory} ---") if not directory.exists(): return subprocess.run("exit 1".split()) # TODO git_set_url(directory, url) return subprocess.run("git-sync -ns".split(), cwd=directory) def git_pull( directory: Path, url: str, ff_only: bool = True ) -> subprocess.CompletedProcess: """Pull updates for directory from url""" print(f"--- pull: {directory} ---") if not directory.exists(): return subprocess.run("exit 1".split()) # TODO git_set_url(directory, url) return subprocess.run("git pull --ff-only".split(), cwd=directory) def main(*args, **kwargs) -> None: for directory, url in SYNC_MAPPING.items(): print(git_sync(directory, url)) for directory, url in PULL_MAPPINGS.items(): print(git_pull(directory, url)) if __name__ == "__main__": main()