29 data class CommitRef(val hash: String, val issueId: Int, val message: String) |
29 data class CommitRef(val hash: String, val issueId: Int, val message: String) |
30 |
30 |
31 /** |
31 /** |
32 * Takes a [commitLog] in format `::lpitref::{node}:{desc}` and parses commit references. |
32 * Takes a [commitLog] in format `::lpitref::{node}:{desc}` and parses commit references. |
33 * Supported references are (in this example, 47 is the issue ID): |
33 * Supported references are (in this example, 47 is the issue ID): |
34 * - fixes #47 |
34 * - fix, fixes, fixed #47 |
35 * - fix #47 |
35 * - close, closes, closed #47 |
36 * - closes #47 |
36 * - resolve, resolves, resolved #47 |
37 * - close #47 |
37 * - relate to #47 |
38 * - relates to #47 |
38 * - relates to #47 |
|
39 * - issue #37 |
39 */ |
40 */ |
40 fun parseCommitRefs(commitLog: String): List<CommitRef> = buildList { |
41 fun parseCommitRefs(commitLog: String): List<CommitRef> = buildList { |
41 val marker = "::lpitref:" |
42 val marker = "::lpitref:" |
42 var currentHash = "" |
43 var currentHash = "" |
43 var currentDesc = "" |
44 var currentDesc = "" |
51 |
52 |
52 // skip possible preamble output |
53 // skip possible preamble output |
53 if (currentHash.isEmpty()) continue |
54 if (currentHash.isEmpty()) continue |
54 |
55 |
55 // scan the lines for commit references |
56 // scan the lines for commit references |
56 Regex("""(?:issue|relates? to|fix(?:e[sd])?|close(?:[sd])?) \#(\d+)""") |
57 Regex("""(?:issue|relates? to|fix(?:e[sd])?|(?:close|resolve)[sd]?) #(\d+)""") |
57 .findAll(line) |
58 .findAll(line) |
58 .map { it.groupValues[1] } |
59 .map { it.groupValues[1] } |
59 .map { it.toIntOrNull() } |
60 .map { it.toIntOrNull() } |
60 .filterNotNull() |
61 .filterNotNull() |
61 .forEach { commitId -> addFirst(CommitRef(currentHash, commitId, currentDesc)) } |
62 .forEach { commitId -> addFirst(CommitRef(currentHash, commitId, currentDesc)) } |