X-Git-Url: https://git.ralfj.de/git-mirror.git/blobdiff_plain/9e8ef5ff99e70c7cc97445acbd91abaf539fd536..1a85298cc06a5dd0d84961bb1060b1049920ef07:/git_mirror.py diff --git a/git_mirror.py b/git_mirror.py index a3b7fe9..859b376 100644 --- a/git_mirror.py +++ b/git_mirror.py @@ -27,6 +27,7 @@ import hmac, hashlib 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): @@ -53,10 +54,10 @@ def git_is_forced_update(oldsha, newsha): 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 @@ -153,7 +154,8 @@ class Repo: 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." @@ -189,8 +191,7 @@ def find_repo_by_directory(repos, dir): 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 = {}