commits.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package scan
  2. import (
  3. "github.com/go-git/go-git/v5"
  4. )
  5. // CommitsScanner is a commit scanner
  6. type CommitsScanner struct {
  7. BaseScanner
  8. repo *git.Repository
  9. repoName string
  10. commits []string
  11. }
  12. // NewCommitsScanner creates and returns a commits scanner, notice the 's' in commits
  13. func NewCommitsScanner(base BaseScanner, repo *git.Repository, commits []string) *CommitsScanner {
  14. return &CommitsScanner{
  15. BaseScanner: base,
  16. repo: repo,
  17. commits: commits,
  18. repoName: getRepoName(base.opts),
  19. }
  20. }
  21. // Scan kicks off a CommitsScanner Scan
  22. func (css *CommitsScanner) Scan() (Report, error) {
  23. var scannerReport Report
  24. for _, c := range css.commits {
  25. c, err := obtainCommit(css.repo, c)
  26. if err != nil {
  27. return scannerReport, nil
  28. }
  29. cs := NewCommitScanner(css.BaseScanner, css.repo, c)
  30. commitReport, err := cs.Scan()
  31. if err != nil {
  32. return scannerReport, err
  33. }
  34. scannerReport.Leaks = append(scannerReport.Leaks, commitReport.Leaks...)
  35. scannerReport.Commits++
  36. }
  37. return scannerReport, nil
  38. }