@@ -17,7 +17,9 @@ limitations under the License.
17
17
package pulls
18
18
19
19
import (
20
+ "bufio"
20
21
"fmt"
22
+ "os"
21
23
"strings"
22
24
23
25
github_util "k8s.io/contrib/github"
@@ -30,7 +32,9 @@ import (
30
32
)
31
33
32
34
type PRSizeMunger struct {
33
- genFiles * sets.String
35
+ generatedFilesFile string
36
+ genFiles * sets.String
37
+ genPrefixes * []string
34
38
}
35
39
36
40
func init () {
@@ -39,7 +43,9 @@ func init() {
39
43
40
44
func (PRSizeMunger ) Name () string { return "size" }
41
45
42
- func (PRSizeMunger ) AddFlags (cmd * cobra.Command ) {}
46
+ func (p * PRSizeMunger ) AddFlags (cmd * cobra.Command ) {
47
+ cmd .Flags ().StringVar (& p .generatedFilesFile , "generated-files-config" , "generated-files.txt" , "file containing the pathname to label mappings" )
48
+ }
43
49
44
50
const labelSizePrefix = "size/"
45
51
@@ -51,34 +57,70 @@ const labelSizePrefix = "size/"
51
57
// our results are slightly wrong, who cares? Instead look for the
52
58
// generated files once and if someone changed what files are generated
53
59
// we'll size slightly wrong. No biggie.
54
- func (s * PRSizeMunger ) getGeneratedFiles (config * config.MungeConfig ) sets. String {
60
+ func (s * PRSizeMunger ) getGeneratedFiles (config * config.MungeConfig ) {
55
61
if s .genFiles != nil {
56
- return * s . genFiles
62
+ return
57
63
}
58
64
files := sets .NewString ()
59
- files .Insert ("pkg/api/v1/deep_copy_generated.go" )
60
- files .Insert ("pkg/api/deep_copy_generated.go" )
61
- files .Insert ("pkg/expapi/v1/deep_copy_generated.go" )
62
- files .Insert ("pkg/expapi/deep_copy_generated.go" )
63
- files .Insert ("pkg/api/v1/conversion_generated.go" )
64
- files .Insert ("pkg/expapi/v1/conversion_generated.go" )
65
- files .Insert ("api/swagger-spec/resourceListing.json" )
66
- files .Insert ("api/swagger-spec/version.json" )
67
- files .Insert ("api/swagger-spec/api.json" )
68
- files .Insert ("api/swagger-spec/v1.json" )
69
- docs , err := config .GetFileContents (".generated_docs" , "" )
65
+ prefixes := []string {}
66
+ s .genFiles = & files
67
+ s .genPrefixes = & prefixes
68
+
69
+ file := s .generatedFilesFile
70
+ if len (file ) == 0 {
71
+ glog .Infof ("No --generated-files-config= supplied, applying no labels" )
72
+ return
73
+ }
74
+ fp , err := os .Open (file )
70
75
if err != nil {
71
- docs = ""
76
+ glog .Errorf ("Unable to open %q: %v" , file , err )
77
+ return
72
78
}
73
- docSlice := strings .Split (docs , "\n " )
74
- files .Insert (docSlice ... )
75
79
80
+ defer fp .Close ()
81
+ scanner := bufio .NewScanner (fp )
82
+ for scanner .Scan () {
83
+ line := scanner .Text ()
84
+ if strings .HasPrefix (line , "#" ) || line == "" {
85
+ continue
86
+ }
87
+ fields := strings .Fields (line )
88
+ if len (fields ) != 2 {
89
+ glog .Errorf ("Invalid line in generated docs config %s: %q" , file , line )
90
+ continue
91
+ }
92
+ eType := fields [0 ]
93
+ file := fields [1 ]
94
+ if eType == "prefix" {
95
+ prefixes = append (prefixes , file )
96
+ } else if eType == "path" {
97
+ files .Insert (file )
98
+ } else if eType == "paths-from-repo" {
99
+ docs , err := config .GetFileContents (file , "" )
100
+ if err != nil {
101
+ continue
102
+ }
103
+ docSlice := strings .Split (docs , "\n " )
104
+ files .Insert (docSlice ... )
105
+ } else {
106
+ glog .Errorf ("Invalid line in generated docs config, unknown type: %s, %q" , eType , line )
107
+ continue
108
+ }
109
+ }
110
+ if scanner .Err () != nil {
111
+ glog .Errorf ("Error scanning %s: %v" , file , err )
112
+ return
113
+ }
76
114
s .genFiles = & files
77
- return * s .genFiles
115
+ s .genPrefixes = & prefixes
116
+
117
+ return
78
118
}
79
119
80
120
func (s * PRSizeMunger ) MungePullRequest (config * config.MungeConfig , pr * github.PullRequest , issue * github.Issue , commits []github.RepositoryCommit , events []github.IssueEvent ) {
81
- genFiles := s .getGeneratedFiles (config )
121
+ s .getGeneratedFiles (config )
122
+ genFiles := * s .genFiles
123
+ genPrefixes := * s .genPrefixes
82
124
83
125
if pr .Additions == nil {
84
126
glog .Warningf ("PR %d has nil Additions" , * pr .Number )
@@ -93,10 +135,12 @@ func (s *PRSizeMunger) MungePullRequest(config *config.MungeConfig, pr *github.P
93
135
94
136
for _ , c := range commits {
95
137
for _ , f := range c .Files {
96
- if strings .HasPrefix (* f .Filename , "Godeps/" ) {
97
- adds = adds - * f .Additions
98
- dels = dels - * f .Deletions
99
- continue
138
+ for _ , p := range genPrefixes {
139
+ if strings .HasPrefix (* f .Filename , p ) {
140
+ adds = adds - * f .Additions
141
+ dels = dels - * f .Deletions
142
+ continue
143
+ }
100
144
}
101
145
if genFiles .Has (* f .Filename ) {
102
146
adds = adds - * f .Additions
0 commit comments