-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprepare-commit-msg
More file actions
88 lines (66 loc) · 2.58 KB
/
Copy pathprepare-commit-msg
File metadata and controls
88 lines (66 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/python
import sys
import os
import subprocess
def fetch_sample_name(dir_path, processed_dirs):
if dir_path in processed_dirs:
return None
if not os.path.exists(dir_path):
processed_dirs.add(dir_path)
return None
parent_dir_path = os.path.dirname(dir_path)
file_names = os.listdir(dir_path)
sln_name = next((f for f in file_names if f.endswith(".sln")), None)
processed_dirs.add(dir_path)
if sln_name is None and os.getcwd() != dir_path:
sln_name = fetch_sample_name(parent_dir_path, processed_dirs)
return sln_name
def fetch_affected_dirs(modified_files):
dir_paths = [os.path.dirname(f) for f in modified_files]
dir_paths = list(set(dir_paths))
return dir_paths
def fetch_sln_names(modified_files):
sample_names = []
dir_paths = fetch_affected_dirs(modified_files)
processed_dirs = set()
for dir_path in dir_paths:
name = fetch_sample_name(dir_path, processed_dirs)
if name is not None:
sample_names.append(name)
sample_names = list(set(sample_names))
sample_names = [f_name[:-4] for f_name in sample_names]
return sample_names
def create_prefix(sample_names):
prefix = ""
if len(sample_names) > 0:
sample_names = ["[{0}]".format(s_name) for s_name in sample_names]
prefix = "".join(sample_names)
prefix += " "
return prefix
def prepare_commit_msg(file_path, prefix):
with open(file_path, 'r+') as f:
content = f.read()
f.seek(0)
f.write("{0}{1}".format(prefix, content))
f.truncate()
def get_framework_versions():
bash_cmd = "ls -l /Library/Frameworks/Xamarin.{0}.framework/Versions/ | grep Current | sed -n 's/.*Current -> //p'"
ios_version, error1 = subprocess.Popen(bash_cmd.format("iOS"), shell=True, stdout=subprocess.PIPE).communicate()
mac_version, error2 = subprocess.Popen(bash_cmd.format("Mac"), shell=True, stdout=subprocess.PIPE).communicate()
ios_version = ios_version.strip().split("/")[-1]
mac_version = mac_version.strip().split("/")[-1]
versions = "#Xamarin.iOS {ios_ver}\n#Xamarin.Mac {mac_ver}".format(ios_ver=ios_version, mac_ver=mac_version)
return versions
result = subprocess.check_output(["git", "diff-index", "--cached", "--name-only", "HEAD"])
modified_files = result.split()
modified_files = [os.path.abspath(f) for f in modified_files]
# the path to the file that holds the commit message
arg_len = len(sys.argv)
msg_file_path = sys.argv[1]
commit_type = sys.argv[2] if arg_len > 2 else None
sha = sys.argv[3] if arg_len > 3 else None
if commit_type is None:
names = fetch_sln_names(modified_files)
prefix = create_prefix(names)
prefix += '\n' + get_framework_versions()
prepare_commit_msg(msg_file_path, prefix)