grim/bitshifter

87ac5b752969
Parents adb49ff06e6e
Children 116dbee5fa96
Update to python3 and support multiple repositories
--- a/bitshifter.py Thu Feb 09 15:18:22 2017 -0600
+++ b/bitshifter.py Fri Jan 31 06:50:57 2020 -0600
@@ -1,3 +1,5 @@
+# vi:et:ts=4 sw=4 sts=4
+import os
import logging
import subprocess
@@ -10,6 +12,22 @@
app = Flask(__name__)
+class HG(object):
+ def __init__(self, path):
+ self.path = path
+
+ def pull(self):
+ return f'hg pull --cwd {self.path} incoming'
+
+ def push(self):
+ return f'hg push --cwd {self.path} --new-branch outgoing'
+
+
+VCS_TOOLS = {
+ 'hg': HG,
+}
+
+
@app.route('/hooked', methods=['POST'])
def hooked():
data = request.get_json()
@@ -17,41 +35,38 @@
if 'repository' in data:
repo = data.get('repository')
- if repo.get('scm') == 'hg' and repo.get('full_name') == 'pidgin/main':
- try:
- cmd1 = 'hg pull --cwd pidgin bitbucket'
- print 'running: {}'.format(cmd1)
- out1 = subprocess.check_output(cmd1.split())
- print out1
- except Exception as exp:
- logging.exception(exp)
- return make_response((exp, 500))
-
- try:
- cmd2 = 'hg push --cwd pidgin --new-branch pidgin.im'
- print 'running: {}'.format(cmd2)
- out2 = subprocess.check_output(cmd2.split())
- print out2
-
- output = out1 + out2
-
- return make_response((output, 200,))
- except subprocess.CalledProcessError as exp:
- if exp.returncode == 1:
- print exp.output
-
- output = out1 + exp.output
-
- return make_response((output, 200,))
-
- logging.exception(exp)
- return make_response((exp, 500))
- except Exception as exp:
- logging.exception(exp)
- return make_response((exp, 500))
+ path = os.path.join('respositories', repo.get('full_name'))
+ if not os.path.isdir(path):
+ msg = f'unknown repository {repo.get("full_name")}'
+ log.error(msg)
+ return make_response((msg, 400))
- return make_response(('bad request', 400))
+ vcs_cls = VCS_TOOLS.get(repo.get('scm'), None)
+ if vcs_cls is None:
+ msg = f'unknown vcs {repo.get("scm")}'
+ log.error(msg)
+ return make_response((msg, 400))
+
+ vcs = vcs_cls(repo.get('full_name'))
+
+ try:
+ out = subprocess.check_output(vcs.pull().split())
+ log.info(out)
+ out = subprocess.check_output(vcs.push().split())
+ log.info(out)
+ except subprocess.CalledProcessError as exp:
+ if exp.returncode == 1:
+ log.info(exp.output)
+
+ return make_response((exp.output, 500))
+
+ return make_response((exp, 500))
+ except Exception as exp:
+ logging.exception(exp)
+ return make_response((exp, 500))
+ else:
+ return make_response(('bitshifted', 200))
if __name__ == '__main__':
--- a/requirements.txt Thu Feb 09 15:18:22 2017 -0600
+++ b/requirements.txt Fri Jan 31 06:50:57 2020 -0600
@@ -1,1 +1,1 @@
-Flask==0.10.1
+Flask==1.1.1