#! /usr/bin/bash set -euo pipefail IFS=$'\n\t' REPO_ROOT_FILE="$(systemd-path user-state-private)"/repo-roots/repo-roots list_repos () { repo_root=$1 find "${repo_root}" -maxdepth 2 -name .git -type d -exec dirname {} \; } sync_repo () { repo=$1 echo git-sync "${repo}" ( cd "${repo}" && "$(systemd-path user-state-private)"/git-sync/git-sync sync ) || true echo } case "${1:-sync}" in "list") while read -r repo_root; do list_repos "${repo_root}" done < "${REPO_ROOT_FILE}" ;; "sync") while read -r repo_root; do for repo in $(list_repos "${repo_root}"); do sync_repo "${repo}" done done < "${REPO_ROOT_FILE}" ;; *) echo Unknown option \""$1"\" exit 1 ;; esac