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
|
import hashlib
import os
import json
from devbot import config
_BUILT_MODULES = "builtmodules"
_SYSTEM_CHECK = "syscheck"
def _get_state_path(name):
return os.path.join(config.build_state_dir, "%s.json" % name)
def _load_state(name, default=None):
state = default
try:
with open(_get_state_path(name)) as f:
state = json.load(f)
except IOError:
pass
return state
def _save_state(name, state):
with open(_get_state_path(name), "w+") as f:
json.dump(state, f, indent=4)
f.write('\n')
def _get_diff_hash(git_module):
diff = git_module.diff().strip()
if diff:
return hashlib.sha256(diff).hexdigest()
else:
return None
def touch_built_module(module):
git_module = module.get_git_module()
built_modules = _load_state(_BUILT_MODULES, {})
info = {"commit": module.get_commit_id(),
"diff_hash": _get_diff_hash(git_module)}
built_modules[module.name] = info
_save_state(_BUILT_MODULES, built_modules)
def remove_built_module(module):
built_modules = _load_state(_BUILT_MODULES)
if built_modules and module.name in built_modules:
del built_modules[module.name]
_save_state(_BUILT_MODULES, built_modules)
def check_built_module(module):
git_module = module.get_git_module()
built_modules = _load_state(_BUILT_MODULES, {})
if module.name not in built_modules:
return False
info = built_modules[module.name]
return info["diff_hash"] == _get_diff_hash(git_module) and \
info["commit"] == module.get_commit_id()
def get_last_system_check():
system_check = _load_state(_SYSTEM_CHECK, {})
return system_check.get("commit", None)
def touch_last_system_check():
system_check = _load_state(_SYSTEM_CHECK, {})
system_check["commit"] = config.get_commit_id()
_save_state(_SYSTEM_CHECK, system_check)
def clean():
_state = None
print "Deleting state"
try:
for name in _BUILT_MODULES, _SYSTEM_CHECK:
os.unlink(_get_state_path(name))
except OSError:
pass
|