diff options
Diffstat (limited to 'ssh-sync-repos.py')
-rwxr-xr-x | ssh-sync-repos.py | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/ssh-sync-repos.py b/ssh-sync-repos.py index 5d585a3..fd418e4 100755 --- a/ssh-sync-repos.py +++ b/ssh-sync-repos.py @@ -3,26 +3,29 @@ # Synchronize Cryptech git repositories via SSH by asking gitolite for a JSON # listing of repositories. Not useful unless you have an SSH account, sorry. -import json, subprocess, os.path, sys +from subprocess import check_call, check_output +from os.path import isdir +from json import loads +from sys import exit user = "git@git.cryptech.is" -cmd = "ssh %s info -json -lc" % user -info = json.loads(subprocess.check_output(cmd.split())) +cmd = "ssh {} info -json -lc".format(user) +info = loads(check_output(cmd.split())) errs = 0 for repo in sorted(info["repos"]): - try: - if all(c not in repo for c in "*?[]"): - print - print repo - pull = os.path.isdir(repo) - if pull: - subprocess.check_call(("git", "fetch", "--all"), cwd = repo) - subprocess.check_call(("git", "pull"), cwd = repo) - else: - subprocess.check_call(("git", "clone", "%s:%s.git" % (user, repo), repo)) - except: - print "** Error", "pulling" if pull else "cloning", repo - errs += 1 + try: + if all(c not in repo for c in "*?[]"): + print + print repo + pull = isdir(repo) + if pull: + check_call(("git", "fetch", "--all", "--prune"), cwd = repo) + check_call(("git", "pull"), cwd = repo) + else: + check_call(("git", "clone", "{}:{}.git".format(user, repo), repo)) + except: + print "** Error", "pulling" if pull else "cloning", repo + errs += 1 -sys.exit(errs) +exit(errs) |