Evie Litherland-Smith
10db59de2a
Probably not in a working state at the moment, but home-manager will build. Needs proper configuring to be used
69 lines
2.1 KiB
Python
Executable file
69 lines
2.1 KiB
Python
Executable file
#!/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()
|