70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
|
#!/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)
|