import email.mime.text, email.utils, smtplib
mail_sender = "null@localhost"
+config_file = os.path.join(os.path.dirname(__file__), 'git-mirror.conf')
class GitCommand:
def __getattr__(self, name):
assert code in (0, 1)
return False if code == 0 else True # if oldsha is an ancestor of newsha, then this was a "good" (non-forced) update
-def read_config(fname, defSection = 'DEFAULT'):
+def read_config(defSection = 'DEFAULT'):
'''Reads a config file that may have options outside of any section.'''
config = configparser.ConfigParser()
- with open(fname) as file:
+ with open(config_file) as file:
stream = itertools.chain(("["+defSection+"]\n",), file)
config.read_file(stream)
return config
if len(local_state):
raise Exception("Something went wrong getting the local state of {}.".format(ref))
local_sha = git_nullsha
- assert local_sha in (oldsha, newsha), "Someone lied about the old SHA."
+ # some sanity checking, but deal gracefully with new branches appearing
+ assert local_sha in (git_nullsha, oldsha, newsha), "Someone lied about the old SHA: Local ({}) is neither old ({}) nor new ({})".format(local_sha, oldsha, newsha)
# if we are already at newsha locally, we also ran the local hooks, so we do not have to do anything
if local_sha == newsha:
return "Local repository is already up-to-date."
def load_repos():
global mail_sender
- conffile = os.path.join(os.path.dirname(__file__), 'git-mirror.conf')
- conf = read_config(conffile)
+ conf = read_config()
mail_sender = conf['DEFAULT']['mail-sender']
repos = {}