0
0
mirror of https://github.com/thegeeklab/git-sv.git synced 2024-11-24 21:20:40 +00:00

refactor: make handling with unconventional commits configurable

issue: #45
This commit is contained in:
hypervtechnics 2022-04-06 11:01:17 +02:00
parent f36433692d
commit 8bce43b160
5 changed files with 20 additions and 7 deletions

View File

@ -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.

View File

@ -103,6 +103,7 @@ func defaultConfig() Config {
},
Issue: sv.CommitMessageIssueConfig{Regex: "[A-Z]+-[0-9]+"},
HeaderSelector: "",
SkipUnconventional: false,
},
}
}

View File

@ -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")))

View File

@ -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.

View File

@ -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) {