diff --git a/scripts/backup_git.py b/scripts/backup_git.py new file mode 100755 index 0000000..877b06a --- /dev/null +++ b/scripts/backup_git.py @@ -0,0 +1,69 @@ +#!/usr/bin/python +import os +import subprocess +import smtplib +from email.mime.text import MIMEText + +HOST_TO_BACKUP = "mathux.dyndns.org" +GITOLITE_DEPOT_PATH = "/srv/share/mathieu/gitolite-admin/" +BACKUP_DIR = "/srv/share/mathieu/Backups/Git" +UPDATE_CMD = "git remote update" +MIRROR_CMD = "git clone --mirror git@"+HOST_TO_BACKUP+":" +EMAIL_TO = "mathieu@mathux.dyndns.org" +EMAIL_SERVER = "localhost" +EMAIL_ORI = "backup@mathux.dyndns.org" + + +def sendMail(stdOut,stdErr,repo): + email_text = "Error when sync "+repo+"\n" + email_text += "stdOut :"+stdOut+"\n\n" + email_text += "stdErr :"+stdErr+"\n\n" + + msg = MIMEText(email_text) + msg['Subject'] = "Erreur Synchro" +repo + msg['From'] = EMAIL_ORI + + for dest in EMAIL_TO.split(","): + msg['To'] = dest + s = smtplib.SMTP(EMAIL_SERVER) +# s.login(config["EMAIL_ORI"],config["EMAIL_PASS"]) + s.sendmail(EMAIL_ORI, dest, msg.as_string()) + s.quit() + +def getRepoList(): + gitolite_conf = open(os.path.join(GITOLITE_DEPOT_PATH, "conf/gitolite.conf"), 'r') + content = gitolite_conf.read() + repo = [] + for line in content.split("\n") : + if line.startswith("repo"): + repo.append(line.split(" ")[1]) + return repo + + +repoToBackup = getRepoList() + +for repo in repoToBackup: + repo_path = os.path.join(BACKUP_DIR, repo+".git") + stdOut = "" + stdErr = "" + ret = 0 + if os.path.exists(repo_path): + os.chdir(repo_path) + proc = subprocess.Popen(UPDATE_CMD, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + (stdOut, stdErr) = proc.communicate() + ret = proc.returncode + else: + os.chdir(BACKUP_DIR) + proc = subprocess.Popen(MIRROR_CMD+repo, + shell=True, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + (stdOut, stdErr) = proc.communicate() + ret = proc.returncode + if ret: + sendMail(stdOut, stdErr, repo)