From 7859445bf4c18f9182cff48b058786f971ca21d7 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Mon, 17 Sep 2012 19:41:21 +0200 Subject: Use control master in ssh and work around github deletion bugs. --- sync-github.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/sync-github.py b/sync-github.py index 73499b7..687e01c 100755 --- a/sync-github.py +++ b/sync-github.py @@ -3,6 +3,8 @@ from pygithub3 import Github import sys import os import os.path +import stat +import uuid import subprocess class LocalRepo: @@ -65,12 +67,25 @@ def main(argv): for repo in remote_repos: if repo.name not in [local.name for local in local_repos]: print "[-] Deleting repository %s." % repo.name - github.repos.delete(repo=repo.name, user=user) - + try: + github.repos.delete(repo=repo.name, user=user) + except: + pass + + print "[#] Connecting to github ssh." + control_master = os.path.abspath(os.path.dirname(__file__) + "/.ssh-control-" + str(uuid.uuid4())) + ssh_cmd = control_master + ".cmd.sh" + cmd_file = open(ssh_cmd, "w") + cmd_file.write("#!/bin/sh\nexec ssh -o ControlMaster=no -o ControlPath=\"%s\" $@\n" % control_master) + cmd_file.close() + os.chmod(ssh_cmd, stat.S_IRWXU) + os.system("ssh -Nf -o ControlMaster=yes -o ControlPath=\"%s\" git@github.com" % control_master) for repo in local_repos: print "[^] Mirroring repository %s." % repo.name - os.system("cd \"%s\"; git push --mirror git@github.com:%s/%s.git" % (repo.path, user, repo.name)) - + os.system("cd \"%s\"; GIT_SSH=\"%s\" git push --mirror git@github.com:%s/%s.git" % (repo.path, ssh_cmd, user, repo.name)) + os.system("ssh -o ControlMaster=no -o ControlPath=\"%s\" -O exit -N git@github.com" % control_master) + os.unlink(ssh_cmd) + return 0 if __name__ == "__main__": -- cgit v1.2.3-59-g8ed1b