-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdiff.go
More file actions
71 lines (61 loc) · 2.1 KB
/
Copy pathdiff.go
File metadata and controls
71 lines (61 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package cmd
import (
"fmt"
"github.com/spf13/cobra"
"github.com/zcube/commit-checker/internal/config"
"github.com/zcube/commit-checker/internal/gitdiff"
"github.com/zcube/commit-checker/internal/i18n"
)
var (
diffFormat string
diffStaged bool
diffOnly []string
)
var diffCmd = &cobra.Command{
Use: "diff [<commit>] [<commit>]",
Args: cobra.MaximumNArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
// --require-config: 프로젝트 설정 파일이 없으면 아무 출력 없이 성공 종료 (전역 opt-in 설치)
if requireConfigSkip() {
return nil
}
// --only 카테고리 검증은 설정 로드보다 먼저 수행 (잘못된 입력 즉시 보고)
defs, err := stepDefsFor(true, diffOnly)
if err != nil {
return err
}
spec, err := gitdiff.SpecFromArgs(args, diffStaged)
if err != nil {
return err
}
gitdiff.SetSpec(spec)
cfg, err := config.Load(resolveConfigFilePath(configFile))
if err != nil {
return fmt.Errorf("failed to load config: %w", err)
}
// enabled: false — 리포 단위 opt-out: 모든 검사를 건너뛰고 성공 종료
if !cfg.IsEnabled() {
return nil
}
if len(diffOnly) > 0 {
// --only 는 설정의 enabled: false 를 덮어쓰고 지정 검사를 강제 실행
cfg = cfgWithOnlyEnabled(cfg, defs)
}
// git diff 는 커맨드 진입 시 1회만 실행하고 각 검사 step 에 주입
// (SetSpec 이후에 호출해야 비교 대상이 올바르게 적용됨)
diffs, err := gitdiff.GetStagedDiff()
if err != nil {
return err
}
return runStepsAndReport(cmd.Context(), diffSteps(defs, cfg, diffs), diffFormat, guideEnabled(cfg))
},
}
func init() {
diffCmd.Short = i18n.T("cmd.diff.short", nil)
diffCmd.Long = i18n.T("cmd.diff.long", nil)
diffCmd.Flags().StringVar(&diffFormat, "format", "text", i18n.T("flag.format", nil))
diffCmd.Flags().BoolVar(&diffStaged, "staged", false, i18n.T("flag.diff_staged", nil))
diffCmd.Flags().BoolVar(&diffStaged, "cached", false, i18n.T("flag.diff_staged", nil))
diffCmd.Flags().StringSliceVar(&diffOnly, "only", nil, i18n.T("flag.only", nil))
rootCmd.AddCommand(diffCmd)
}