diff --git a/README.md b/README.md index 726d651..502504b 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,7 @@ branches: # Git branches config. commit-message: types: [build, ci, chore, docs, feat, fix, perf, refactor, revert, style, test] # Supported commit types. header-selector: '' # You can put in a regex here to select only a certain part of the commit message. Please define a regex group 'header'. + skip-unconventional: false # Allows to skip commits that do not comply with conventional commits. Otherwise those will cause errors. scope: # Define supported scopes, if blank, scope will not be validated, if not, only scope listed will be valid. # Don't forget to add "" on your list if you need to define scopes and keep it optional. diff --git a/cmd/git-sv/config.go b/cmd/git-sv/config.go index 04fc14b..b7a2f17 100644 --- a/cmd/git-sv/config.go +++ b/cmd/git-sv/config.go @@ -103,6 +103,7 @@ func defaultConfig() Config { }, Issue: sv.CommitMessageIssueConfig{Regex: "[A-Z]+-[0-9]+"}, HeaderSelector: "", + SkipUnconventional: false, }, } } diff --git a/cmd/git-sv/main.go b/cmd/git-sv/main.go index b2a4a02..56e1055 100644 --- a/cmd/git-sv/main.go +++ b/cmd/git-sv/main.go @@ -43,7 +43,7 @@ func main() { cfg := loadCfg(repoPath) messageProcessor := sv.NewMessageProcessor(cfg.CommitMessage, cfg.Branches) - git := sv.NewGit(messageProcessor, cfg.Tag) + git := sv.NewGit(messageProcessor, cfg.Tag, cfg.CommitMessage) semverProcessor := sv.NewSemVerCommitsProcessor(cfg.Versioning, cfg.CommitMessage) releasenotesProcessor := sv.NewReleaseNoteProcessor(cfg.ReleaseNotes) outputFormatter := sv.NewOutputFormatter(templateFS(filepath.Join(repoPath, configDir, "templates"))) diff --git a/sv/config.go b/sv/config.go index 264755b..617d84b 100644 --- a/sv/config.go +++ b/sv/config.go @@ -9,6 +9,7 @@ type CommitMessageConfig struct { Scope CommitMessageScopeConfig `yaml:"scope"` Footer map[string]CommitMessageFooterConfig `yaml:"footer"` Issue CommitMessageIssueConfig `yaml:"issue"` + SkipUnconventional bool `yaml:"skip-unconventional"` } // IssueFooterConfig config for issue. diff --git a/sv/git.go b/sv/git.go index 6c2e9b2..0ee0a5f 100644 --- a/sv/git.go +++ b/sv/git.go @@ -71,13 +71,15 @@ func NewLogRange(t LogRangeType, start, end string) LogRange { type GitImpl struct { messageProcessor MessageProcessor tagCfg TagConfig + messageCfg CommitMessageConfig } // NewGit constructor. -func NewGit(messageProcessor MessageProcessor, cfg TagConfig) *GitImpl { +func NewGit(messageProcessor MessageProcessor, tagCfg TagConfig, messageCfg CommitMessageConfig) *GitImpl { return &GitImpl{ messageProcessor: messageProcessor, - tagCfg: cfg, + tagCfg: tagCfg, + messageCfg: messageCfg, } } @@ -114,7 +116,14 @@ func (g GitImpl) Log(lr LogRange) ([]GitCommitLog, error) { if err != nil { return nil, combinedOutputErr(err, out) } - return parseLogOutput(g.messageProcessor, string(out)), nil + + logs, parseErr := g.parseLogOutput(g.messageProcessor, string(out)) + + if parseErr != nil { + return nil, parseErr + } + + return logs, nil } // Commit runs git commit. @@ -188,20 +197,21 @@ func parseTagsOutput(input string) ([]GitTag, error) { return result, nil } -func parseLogOutput(messageProcessor MessageProcessor, log string) []GitCommitLog { +func (g GitImpl) parseLogOutput(messageProcessor MessageProcessor, log string) ([]GitCommitLog, error) { scanner := bufio.NewScanner(strings.NewReader(log)) scanner.Split(splitAt([]byte(endLine))) var logs []GitCommitLog for scanner.Scan() { if text := strings.TrimSpace(strings.Trim(scanner.Text(), "\"")); text != "" { log, err := parseCommitLog(messageProcessor, text) - // Ignore errors occuring during parsing if err == nil { logs = append(logs, log) + } else if !g.messageCfg.SkipUnconventional { + return logs, err } } } - return logs + return logs, nil } func parseCommitLog(messageProcessor MessageProcessor, commit string) (GitCommitLog, error) {