-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathepics_module_version_list.py
executable file
·73 lines (64 loc) · 3.18 KB
/
epics_module_version_list.py
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
#!/bin/env python3
# Tejas Guruswamy <[email protected]> 2020-07-24
# Scans target directory for versioned EPICS modules.
import os
import sys
import re
import datetime
from pprint import pprint
module_list = []
module_dict = {}
#module_dict_assemble = {}
module_dict_release = {}
if __name__ == '__main__':
if len(sys.argv) != 2 or not os.path.isdir(sys.argv[1]):
print("Usage:\n"
"\t{} directory\n"
"Scans target directory for versioned EPICS modules. Writes results to $directory/module_version_list.txt .".format(sys.argv[0]))
sys.exit(-1)
for path,dirs,files in os.walk(sys.argv[1]):
if '/configure' in path:
for pattern in ['RELEASE', 'RELEASE.LOCAL', 'RELEASE.local']:
if pattern in files:
with open(os.path.join(path, pattern), 'r') as f:
for line in f:
m = re.match(r'([^#\s=]+)=\S*/(\S*?)$', line, flags=re.I)
if m is not None:
#print(line)
version = m.group(2)
if version == '..':
continue
if m.group(1) not in module_dict_release:
module_dict_release[m.group(1)] = version
else:
if version not in module_dict_release[m.group(1)]:
module_dict_release[m.group(1)] += ", " + version
# if 'assemble_synApps.sh' in files:
# with open(os.path.join(path, 'assemble_synApps.sh'), 'r') as f:
# for line in f:
# m = re.match(r'([^#\s=]+)=(\S*)$', line)
# if m is not None:
# #print(line)
# module_dict_assemble[m.group(1)] = m.group(2)
for d in dirs:
m = re.match(r'(\S*?)((?:-R?\d+)+)$', d)
if m is not None:
module_list += [m.group(0)]
#print("\t".join(m.groups()))
module_dict[m.group(1)] = re.sub(r'^-', '', m.group(2))
print("Scanned {}, found {:d} possible epics modules.".format(sys.argv[1], len(module_dict_release.keys())))
with open(os.path.join(sys.argv[1], 'module_version_list.txt'), 'w') as f:
f.write('#EPICS module version scan {}\n'.format(datetime.datetime.now().isoformat(sep=' ', timespec='seconds')))
f.write('#generated by epics_module_version_list.py\n')
for k,v in module_dict_release.items():
values = re.split(', ', v)
for val in values:
if val not in module_list:
print("{} mentioned in RELEASE, but versioned module directory not found.".format(val))
else:
f.write('{} = {}\n'.format(k, val))
print("Wrote to ", os.path.join(sys.argv[1], 'module_version_list.txt'))
print("Not all modules found are guaranteed to have built or installed correctly.")
# pprint(sorted(module_dict.items()))
# pprint(sorted(module_dict_assemble.items()))
# pprint(sorted(module_dict_release.items()))