the post-receive hook really should be executable; run it directly
[git-mirror.git] / git_mirror.py
index 859b3768cad7db5e3d16231efa96a1ed906a4909..12075bff8d4768ab74aa84b44ab8e84a11b770b6 100644 (file)
@@ -84,7 +84,7 @@ class Repo:
         self.name = name
         self.local = conf['local']
         self.owner = conf['owner'] # email address to notify in case of problems
-        self.hmac_secret = conf['hmac-secret'].encode('utf-8')
+        self.hmac_secret = conf['hmac-secret'].encode('utf-8') if 'hmac-secret' in conf else None
         self.deploy_key = conf['deploy-key'] # the SSH ky used for authenticating against remote hosts
         self.mirrors = {} # maps mirrors to their URLs
         mirror_prefix = 'mirror-'
@@ -97,6 +97,7 @@ class Repo:
         send_mail("git-mirror {}".format(self.name), msg, recipients = [self.owner], sender = mail_sender)
 
     def compute_hmac(self, data):
+        assert self.hmac_secret is not None
         h = hmac.new(self.hmac_secret, digestmod = hashlib.sha1)
         h.update(data)
         return h.hexdigest()
@@ -176,7 +177,7 @@ class Repo:
         # Now run the post-receive hooks. This will *also* push the changes to all mirrors, as we
         # are one of these hooks!
         os.putenv("GIT_MIRROR_SOURCE", mirror) # tell ourselves which repo we do *not* have to update
-        with subprocess.Popen(['/bin/sh', 'hooks/post-receive'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as p:
+        with subprocess.Popen(['hooks/post-receive'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as p:
             (stdout, stderr) = p.communicate("{} {} {}\n".format(oldsha, newsha, ref).encode('utf-8'))
             stdout = stdout.decode('utf-8')
             if p.returncode: