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
|
# File 'lib/ace/assign/molecules/evidence_calculator.rb', line 16
def calculate(pr_number: nil, auto_merge: false)
root = Ace::Support::Fs::Molecules::ProjectRootFinder.find_or_current
if pr_number.nil?
pr_output, s = Open3.capture2("ace-git", "pr", "--format", "json", chdir: root)
if s.success?
begin
require "json"
pr_data = JSON.parse(pr_output)
pr_number = pr_data["number"]
rescue StandardError
end
end
end
head, _s = Open3.capture2("git", "rev-parse", "HEAD", chdir: root)
head = head.to_s.strip
tree, _s = Open3.capture2("git", "rev-parse", "HEAD^{tree}", chdir: root)
tree = tree.to_s.strip
diff_output, _s = Open3.capture2("git", "diff", "HEAD", chdir: root)
changed_scope_digest = Digest::SHA256.hexdigest(diff_output.to_s)
review_receipt = evaluate_review_receipt(root, head)
release_receipt = evaluate_release_receipt(root, head)
feedback_state = "terminal"
merge_decision = evaluate_merge_decision(
auto_merge: auto_merge,
review_receipt: review_receipt,
release_receipt: release_receipt,
feedback_state: feedback_state
)
canonical_payload = [
pr_number || "none",
head,
tree,
changed_scope_digest,
review_receipt,
release_receipt,
feedback_state,
merge_decision
].join(":")
decision_digest = Digest::SHA256.hexdigest(canonical_payload)
{
pr: pr_number || "none",
head: head,
tree: tree,
changed_scope_digest: changed_scope_digest,
review_receipt: review_receipt,
release_receipt: release_receipt,
feedback_state: feedback_state,
merge_decision: merge_decision,
decision_digest: decision_digest
}
end
|