Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 39558
1
#!/usr/bin/python
2
"""
3
(c) Tim Clemans, 2016
4
"""
5
6
import json, os, subprocess, sys, uuid
7
import re
8
import requests
9
from requests.auth import HTTPBasicAuth
10
11
def remotes():
12
results = os.popen('git remote -v').read().strip('\n').split('\n')
13
results = [row.replace(' ','\t').split('\t')[:2] for row in results]
14
results = dict(results)
15
return json.dumps(results)
16
17
def current_branch():
18
result = os.popen('git rev-parse --abbrev-ref HEAD 2> /dev/null || echo "master" ').read().strip('\n').split('\n')[-1]
19
return result.strip()
20
21
def branches():
22
results = os.popen('git branch').read().strip('\n').split('\n')
23
results = [item.strip() for item in results if not item.startswith('*')]
24
results = sorted(results)
25
return json.dumps(results)
26
27
def changed_tracked_files():
28
results = os.popen('git diff --name-only').read().strip('\n').split('\n')
29
return json.dumps(results)
30
31
def changed_untracked_files():
32
results = os.popen('git ls-files . --exclude-standard --others').read().strip('\n').split('\n')
33
return json.dumps(results)
34
35
def compare_current_branch_with_upstream_master():
36
results = os.popen('git diff %s upstream/master' % (current_branch())).read()
37
return results
38
39
def create_branch_and_reset_to_upstream_master(branch_name):
40
os.system('git checkout -b %s' % (branch_name))
41
os.system('git fetch upstream; git reset --hard upstream/master')
42
return ''
43
44
def push_to_origin_same_branch():
45
os.system('git push origin %s' % (current_branch()))
46
return ''
47
48
def pull_upstream_master():
49
os.system('git pull --no-edit upstream master')
50
return ''
51
52
def set_github_login(data_file, username, access_token):
53
with open(data_file, 'w') as f:
54
f.write(json.dumps({'github_username': username, 'github_access_token': access_token}))
55
return ''
56
57
def get_data_file_contents(data_file):
58
with open(data_file, 'r') as f:
59
return f.read()
60
61
def make_upstream_pr_for_current_branch(data_file):
62
issue_number = current_branch().split('_')[-1]
63
with open(data_file, 'r') as f:
64
data = json.loads(f.read())
65
the_remotes = json.loads(remotes())
66
upstream = re.search('/(?P<owner>\w+)/(?P<repo>\w+)\.git', the_remotes['upstream'])
67
head = '%s:%s' % (data['github_username'], current_branch())
68
payload = {
69
"issue": issue_number,
70
"head": head,
71
"base": "master"
72
}
73
url = 'https://api.github.com/repos/%s/%s/pulls' % (upstream.group('owner'), upstream.group('repo'))
74
headers = {'content-type': 'application/json'}
75
return requests.post(url, data=json.dumps(payload), headers=headers, auth=HTTPBasicAuth(data['github_username'], data['github_access_token'])).json()
76
77
def main():
78
import sys
79
#import argparse
80
#parser = argparse.ArgumentParser()
81
#parser.add_argument('command')
82
#args = parser.parse_args()
83
if sys.argv[1] == 'create_branch_and_reset_to_upstream_master':
84
print create_branch_and_reset_to_upstream_master(sys.argv[2])
85
elif sys.argv[1] == 'set_github_login':
86
print set_github_login(sys.argv[2], sys.argv[3], sys.argv[4])
87
elif sys.argv[1] == 'get_data_file_contents':
88
print get_data_file_contents(sys.argv[2])
89
elif sys.argv[1] == 'make_upstream_pr_for_current_branch':
90
print make_upstream_pr_for_current_branch(sys.argv[2])
91
else:
92
print globals()[sys.argv[1]]()
93
94
if __name__ == "__main__":
95
main()
96
97
98