fix: check only latest commit for non-ascii chars #38

Merged
张泊明518370910136 merged 5 commits from fix_check-latest-commit-only into master 2024-09-20 15:08:27 +08:00

View File

@ -7,7 +7,6 @@ import (
"unicode" "unicode"
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object"
) )
// nonAsciiMsg checks for non-ASCII characters in the commit message. // nonAsciiMsg checks for non-ASCII characters in the commit message.
@ -28,23 +27,19 @@ func NonAsciiMsg(root string) error {
slog.Error("getting reference", "err", err) slog.Error("getting reference", "err", err)
return fmt.Errorf("error getting reference: %v", err) return fmt.Errorf("error getting reference: %v", err)
} }
commits, err := repo.Log(&git.LogOptions{From: ref.Hash()})
commit, err := repo.CommitObject(ref.Hash())
if err != nil { if err != nil {
slog.Error("getting commits", "err", err) slog.Error("getting latest commit", "err", err)
return fmt.Errorf("error getting commits from reference %s: %v", ref.Hash(), err) return fmt.Errorf("error getting latest commit: %v", err)
} }
var msgs []string msg := commit.Message
err = commits.ForEach(func(c *object.Commit) error { if msg == "" {
msgs = append(msgs, c.Message)
return nil return nil
})
if err != nil {
slog.Error("iterating commits", "err", err)
return fmt.Errorf("error iterating commits: %v", err)
} }
var nonAsciiMsgs []string var isCommitLegal bool = true
// List of prefixes to ignore in the commit message // List of prefixes to ignore in the commit message
ignoredPrefixes := []string{ ignoredPrefixes := []string{
"Co-authored-by:", "Co-authored-by:",
@ -53,35 +48,31 @@ func NonAsciiMsg(root string) error {
"Reviewed-on:", "Reviewed-on:",
} }
for _, msg := range msgs { // Split message by lines and ignore specific lines with prefixes
if msg == "" { lines := strings.Split(msg, "\n")
for _, line := range lines {
trimmedLine := strings.TrimSpace(line)
ignore := false
for _, prefix := range ignoredPrefixes {
if strings.HasPrefix(trimmedLine, prefix) {
ignore = true
break
}
}
if ignore {
continue continue
} }
// Split message by lines and ignore specific lines with prefixes // Check for non-ASCII characters in the rest of the lines
lines := strings.Split(msg, "\n") for _, c := range line {
for _, line := range lines { if c > unicode.MaxASCII {
trimmedLine := strings.TrimSpace(line) isCommitLegal = false
ignore := false break
for _, prefix := range ignoredPrefixes {
if strings.HasPrefix(trimmedLine, prefix) {
ignore = true
break
}
}
if ignore {
continue
}
// Check for non-ASCII characters in the rest of the lines
for _, c := range line {
if c > unicode.MaxASCII {
nonAsciiMsgs = append(nonAsciiMsgs, msg)
break
}
} }
} }
} }
if len(nonAsciiMsgs) > 0 {
return fmt.Errorf("Non-ASCII characters in commit messages:\n%s", strings.Join(nonAsciiMsgs, "\n")) if !isCommitLegal {
return fmt.Errorf("Non-ASCII characters in commit messages:\n%s", msg)
} }
return nil return nil
} }