config/scripts/backup_git.py

72 lines
2.2 KiB
Python
Raw Normal View History

2012-12-04 11:40:08 +01:00
#!/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"
2016-03-02 18:02:49 +01:00
def sendMail(stdOut, stdErr, repo):
email_text = "Error when sync " + repo + "\n"
email_text += "stdOut :" + stdOut + "\n\n"
email_text += "stdErr :" + stdErr + "\n\n"
2012-12-04 11:40:08 +01:00
2016-03-02 18:02:49 +01:00
msg = MIMEText(email_text)
msg['Subject'] = "Erreur Synchro" + repo
msg['From'] = EMAIL_ORI
2012-12-04 11:40:08 +01:00
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()
2016-03-02 18:02:49 +01:00
2012-12-04 11:40:08 +01:00
def getRepoList():
2016-03-02 18:02:49 +01:00
gitolite_conf = open(os.path.join(
GITOLITE_DEPOT_PATH, "conf/gitolite.conf"), 'r')
2012-12-04 11:40:08 +01:00
content = gitolite_conf.read()
repo = []
2016-03-02 18:02:49 +01:00
for line in content.split("\n"):
2012-12-04 11:40:08 +01:00
if line.startswith("repo"):
repo.append(line.split(" ")[1])
return repo
repoToBackup = getRepoList()
for repo in repoToBackup:
2016-03-02 18:02:49 +01:00
repo_path = os.path.join(BACKUP_DIR, repo + ".git")
2012-12-04 11:40:08 +01:00
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)
2016-03-02 18:02:49 +01:00
proc = subprocess.Popen(MIRROR_CMD + repo,
2012-12-04 11:40:08 +01:00
shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(stdOut, stdErr) = proc.communicate()
ret = proc.returncode
if ret:
sendMail(stdOut, stdErr, repo)