podman

Форк
0
118 строк · 2.6 Кб
1
package validate
2

3
import (
4
	"fmt"
5
	"os"
6
	"path/filepath"
7

8
	"github.com/sirupsen/logrus"
9
	"github.com/vbatts/git-validation/git"
10
)
11

12
// Runner is the for processing a set of rules against a range of commits
13
type Runner struct {
14
	Root        string
15
	Rules       []Rule
16
	Results     Results
17
	Verbose     bool
18
	CommitRange string // if this is empty, then it will default to FETCH_HEAD, then HEAD
19
}
20

21
// NewRunner returns an initiallized Runner.
22
func NewRunner(root string, rules []Rule, commitrange string, verbose bool) (*Runner, error) {
23
	newroot, err := filepath.Abs(root)
24
	if err != nil {
25
		return nil, fmt.Errorf("failed to get absolute path of %q: %s", root, err)
26
	}
27
	if commitrange == "" {
28
		var err error
29
		cwd, err := os.Getwd()
30
		if err != nil {
31
			return nil, err
32
		}
33
		defer func() {
34
			if err := os.Chdir(cwd); err != nil {
35
				logrus.Warnf("changing working directory to %q failed: %s", cwd, err)
36
			}
37
		}()
38

39
		if err := os.Chdir(newroot); err != nil {
40
			return nil, err
41
		}
42
		commitrange, err = git.FetchHeadCommit()
43
		if err != nil {
44
			commitrange, err = git.HeadCommit()
45
			if err != nil {
46
				return nil, err
47
			}
48
		}
49
	}
50
	return &Runner{
51
		Root:        newroot,
52
		Rules:       rules,
53
		CommitRange: commitrange,
54
		Verbose:     verbose,
55
	}, nil
56
}
57

58
// Run processes the rules for each commit in the range provided
59
func (r *Runner) Run() error {
60
	cwd, err := os.Getwd()
61
	if err != nil {
62
		return err
63
	}
64
	defer func() {
65
		if err := os.Chdir(cwd); err != nil {
66
			logrus.Warnf("changing working directory to %q failed: %s", cwd, err)
67
		}
68
	}()
69

70
	if err := os.Chdir(r.Root); err != nil {
71
		return err
72
	}
73

74
	// collect the entries
75
	c, err := git.Commits(r.CommitRange)
76
	if err != nil {
77
		return err
78
	}
79

80
	// run them and show results
81
	for _, commit := range c {
82
		if os.Getenv("QUIET") == "" {
83
			fmt.Printf(" * %s %q ... ", commit["abbreviated_commit"], commit["subject"])
84
		}
85
		vr := Commit(commit, r.Rules)
86
		r.Results = append(r.Results, vr...)
87
		_, fail := vr.PassFail()
88
		if os.Getenv("QUIET") != "" {
89
			if fail != 0 {
90
				for _, res := range vr {
91
					if !res.Pass {
92
						fmt.Printf(" %s - FAIL - %s\n", commit["abbreviated_commit"], res.Msg)
93
					}
94
				}
95
			}
96
			// everything else in the loop is printing output.
97
			// If we're quiet, then just continue
98
			continue
99
		}
100
		if fail == 0 {
101
			fmt.Println("PASS")
102
		} else {
103
			fmt.Println("FAIL")
104
		}
105
		for _, res := range vr {
106
			if r.Verbose {
107
				if res.Pass {
108
					fmt.Printf("  - PASS - %s\n", res.Msg)
109
				} else {
110
					fmt.Printf("  - FAIL - %s\n", res.Msg)
111
				}
112
			} else if !res.Pass {
113
				fmt.Printf("  - FAIL - %s\n", res.Msg)
114
			}
115
		}
116
	}
117
	return nil
118
}
119

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.