generated from fallion/go-template
-
-
Notifications
You must be signed in to change notification settings - Fork 19
/
root_runner.go
95 lines (67 loc) · 2.42 KB
/
root_runner.go
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
85
86
87
88
89
90
91
92
93
94
95
package cmd
import (
"errors"
"fmt"
"github.com/commitsar-app/commitsar/pkg/history"
"github.com/commitsar-app/commitsar/pkg/text"
"github.com/logrusorgru/aurora"
"github.com/spf13/cobra"
"gopkg.in/src-d/go-git.v4/plumbing"
)
func runRoot(cmd *cobra.Command, args []string) error {
debug := false
if cmd.Flag("verbose").Value.String() == "true" {
debug = true
}
fmt.Print("Starting analysis of commits on branch\n")
gitRepo, err := history.OpenGit(".", true)
if err != nil {
return err
}
currentBranch, currentBranchErr := gitRepo.CurrentBranch()
if currentBranchErr != nil {
return currentBranchErr
}
commits, commitsErr := gitRepo.BranchDiffCommits(currentBranch.Name().String(), "origin/master")
if commitsErr != nil {
return commitsErr
}
var filteredCommits []plumbing.Hash
for _, commitHash := range commits {
commitObject, commitErr := gitRepo.Commit(commitHash)
if debug {
fmt.Printf("\n[DEBUG] Commit found: [hash] %v [message] %v \n", commitObject.Hash, text.MessageTitle(commitObject.Message))
}
if commitErr != nil {
return commitErr
}
if !text.IsMergeCommit(commitObject.Message) {
filteredCommits = append(filteredCommits, commitHash)
}
}
fmt.Printf("\n%v commits filtered out\n", len(commits)-len(filteredCommits))
fmt.Printf("\nFound %v commit to check\n", len(filteredCommits))
if len(filteredCommits) == 0 {
return errors.New(aurora.Red("No commits found, please check you are on a branch outside of main").String())
}
var faultyCommits []text.FailingCommit
for _, commitHash := range filteredCommits {
commitObject, commitErr := gitRepo.Commit(commitHash)
if commitErr != nil {
return commitErr
}
messageTitle := text.MessageTitle(commitObject.Message)
textErr := text.CheckMessageTitle(messageTitle)
if textErr != nil {
faultyCommits = append(faultyCommits, text.FailingCommit{Hash: commitHash.String(), Message: messageTitle})
}
}
if len(faultyCommits) != 0 {
failingCommitMessage := text.FormatFailingCommits(faultyCommits)
fmt.Print(failingCommitMessage)
fmt.Printf("%v of %v commits are not conventional commit compliant\n", aurora.Red(len(faultyCommits)), aurora.Red(len(commits)))
return errors.New(aurora.Red("Not all commits are conventiontal commits, please check the commits listed above").String())
}
fmt.Print(aurora.Sprintf(aurora.Green("All %v commits are conventional commit compliant\n"), len(filteredCommits)))
return nil
}