Skip to content
This repository was archived by the owner on Dec 6, 2023. It is now read-only.

Commit 0606ccc

Browse files
committed
MAJOR: Handle Merge Requests
check-commit now can handle Merge Request where the top commit subject has the format: "Merge commitA-ID into commitB-ID" This will make it fetch and check all commit messages between "commitA" and "commitB"
1 parent 2a537bb commit 0606ccc

File tree

1 file changed

+53
-22
lines changed

1 file changed

+53
-22
lines changed

check-commit/check.go

+53-22
Original file line numberDiff line numberDiff line change
@@ -47,46 +47,77 @@ func (ps PatchSeverity) IsValid() error {
4747
return fmt.Errorf("Invalid patch severity '%s'\n%s", ps, guidelinesLink)
4848
}
4949

50-
func main() {
51-
subject, err := exec.Command("git", "log", "-1", "--pretty=format:'%s'").Output()
52-
if err != nil {
53-
log.Fatal(fmt.Errorf("Unable to get log subject %s", err))
54-
}
55-
56-
if len(subject) > 0 {
57-
if subject[0] == []byte("'")[0] {
58-
subject = subject[1:]
59-
}
60-
if subject[len(subject)-1] == []byte("'")[0] {
61-
subject = subject[:len(subject)-1]
62-
}
63-
}
64-
parts := strings.Split(string(subject), ":")
50+
func checkSubject(subject string) error {
51+
parts := strings.Split(subject, ":")
6552
if len(parts) < 2 {
66-
log.Fatal(fmt.Errorf("Incorrect message format\n" + guidelinesLink))
53+
return fmt.Errorf("Incorrect message format '%s'\n%s", subject, guidelinesLink)
6754
}
6855

6956
// Commit type
70-
commitType := strings.Split(string(parts[0]), "/")
57+
commitType := strings.Split(parts[0], "/")
7158
switch len(commitType) {
7259
case 1:
7360
errPs := PatchSeverity(commitType[0]).IsValid()
7461
errPt := PatchType(commitType[0]).IsValid()
7562
if errPs != nil && errPt != nil {
76-
log.Fatal(errPs)
63+
return errPs
7764
}
7865
case 2:
7966
if err := PatchType(commitType[0]).IsValid(); err != nil {
80-
log.Fatal(err)
67+
return err
8168
}
8269
if err := PatchSeverity(commitType[1]).IsValid(); err != nil {
83-
log.Fatal(err)
70+
return err
8471
}
8572
default:
86-
log.Fatal(fmt.Errorf("Incorrect message format\n" + guidelinesLink))
73+
return fmt.Errorf("Incorrect message format '%s'\n%s", subject, guidelinesLink)
8774
}
8875
// Commit subject
8976
if len(parts[1]) < 20 || len(strings.Split(parts[1], " ")) < 3 {
90-
log.Fatal(fmt.Errorf("Too short or meaningless commit subject"))
77+
return fmt.Errorf("Too short or meaningless commit subject")
78+
}
79+
return nil
80+
}
81+
82+
func stripQuotes(input string) string {
83+
if len(input) > 0 {
84+
if input[0] == []byte("'")[0] {
85+
input = input[1:]
86+
}
87+
if input[len(input)-1] == []byte("'")[0] {
88+
input = input[:len(input)-1]
89+
}
90+
}
91+
return input
92+
}
93+
94+
func main() {
95+
out, err := exec.Command("git", "log", "-1", "--pretty=format:'%s'").Output()
96+
if err != nil {
97+
log.Fatal(fmt.Errorf("Unable to get log subject '%s'", err))
98+
}
99+
100+
// Handle Merge Request where the subject of last commit has the format:
101+
// "Merge commitA-ID into commitB-ID"
102+
// TODO: Make this generic by taking IDs as input params
103+
subject := stripQuotes(string(out))
104+
if strings.HasPrefix(subject, "Merge") {
105+
log.Println("Handling Merge Request:\n", subject)
106+
parts := strings.Fields(subject)
107+
if len(parts) != 4 {
108+
log.Fatal(fmt.Errorf("Unkown Merge commit format '%s'\n", subject))
109+
}
110+
out, err = exec.Command("git", "log", parts[3]+".."+parts[1], "--pretty=format:'%s'").Output()
111+
if err != nil {
112+
log.Fatal(fmt.Errorf("Unable to get log subject: '%s'", err))
113+
}
114+
}
115+
116+
// Check subject
117+
for _, subject = range strings.Split(string(out), "\n") {
118+
subject = stripQuotes(subject)
119+
if err := checkSubject(string(subject)); err != nil {
120+
log.Fatal(err)
121+
}
91122
}
92123
}

0 commit comments

Comments
 (0)