@@ -45,8 +45,15 @@ const Usage = `usage: git-sizer [OPTS]
45
45
--remotes process remote refs
46
46
--include prefix process references with the specified prefix
47
47
(e.g., '--include=refs/remotes/origin')
48
+ --include-regexp pattern process references matching the specified
49
+ regular expression (e.g.,
50
+ '--include-regexp=refs/tags/release-.*')
48
51
--exclude prefix don't process references with the specified
49
52
prefix (e.g., '--exclude=refs/notes')
53
+ --exclude-regexp pattern don't process references matching the specified
54
+ regular expression
55
+
56
+ Regular expression patterns must match the full reference name.
50
57
51
58
`
52
59
@@ -82,18 +89,25 @@ func (v *NegatedBoolValue) Type() string {
82
89
type filterValue struct {
83
90
filter * git.IncludeExcludeFilter
84
91
polarity git.Polarity
85
- prefix string
92
+ pattern string
93
+ regexp bool
86
94
}
87
95
88
96
func (v * filterValue ) Set (s string ) error {
89
- var prefix string
90
97
var polarity git.Polarity
98
+ var filter git.ReferenceFilter
91
99
92
- if v .prefix == "" {
93
- prefix = s
100
+ if v .regexp {
94
101
polarity = v .polarity
102
+ var err error
103
+ filter , err = git .RegexpFilter (s )
104
+ if err != nil {
105
+ return fmt .Errorf ("invalid regexp: %q" , s )
106
+ }
107
+ } else if v .pattern == "" {
108
+ polarity = v .polarity
109
+ filter = git .PrefixFilter (s )
95
110
} else {
96
- prefix = v .prefix
97
111
// Allow a boolean value to alter the polarity:
98
112
b , err := strconv .ParseBool (s )
99
113
if err != nil {
@@ -104,13 +118,14 @@ func (v *filterValue) Set(s string) error {
104
118
} else {
105
119
polarity = git .Exclude
106
120
}
121
+ filter = git .PrefixFilter (v .pattern )
107
122
}
108
123
109
124
switch polarity {
110
125
case git .Include :
111
- v .filter .Include (git . PrefixFilter ( prefix ) )
126
+ v .filter .Include (filter )
112
127
case git .Exclude :
113
- v .filter .Exclude (git . PrefixFilter ( prefix ) )
128
+ v .filter .Exclude (filter )
114
129
}
115
130
116
131
return nil
@@ -125,7 +140,9 @@ func (v *filterValue) String() string {
125
140
}
126
141
127
142
func (v * filterValue ) Type () string {
128
- if v .prefix == "" {
143
+ if v .regexp {
144
+ return "regexp"
145
+ } else if v .pattern == "" {
129
146
return "prefix"
130
147
} else {
131
148
return ""
@@ -155,23 +172,37 @@ func mainImplementation() error {
155
172
fmt .Print (Usage )
156
173
}
157
174
158
- flags .Var (& filterValue {& filter , git .Include , "" }, "include" , "include specified references" )
159
- flags .Var (& filterValue {& filter , git .Exclude , "" }, "exclude" , "exclude specified references" )
175
+ flags .Var (
176
+ & filterValue {& filter , git .Include , "" , false }, "include" ,
177
+ "include specified references" ,
178
+ )
179
+ flags .Var (
180
+ & filterValue {& filter , git .Include , "" , true }, "include-regexp" ,
181
+ "include references matching the specified regular expression" ,
182
+ )
183
+ flags .Var (
184
+ & filterValue {& filter , git .Exclude , "" , false }, "exclude" ,
185
+ "exclude specified references" ,
186
+ )
187
+ flags .Var (
188
+ & filterValue {& filter , git .Exclude , "" , true }, "exclude-regexp" ,
189
+ "exclude references matching the specified regular expression" ,
190
+ )
160
191
161
192
flag := flags .VarPF (
162
- & filterValue {& filter , git .Include , "refs/heads/" }, "branches" , "" ,
193
+ & filterValue {& filter , git .Include , "refs/heads/" , false }, "branches" , "" ,
163
194
"process all branches" ,
164
195
)
165
196
flag .NoOptDefVal = "true"
166
197
167
198
flag = flags .VarPF (
168
- & filterValue {& filter , git .Include , "refs/tags/" }, "tags" , "" ,
199
+ & filterValue {& filter , git .Include , "refs/tags/" , false }, "tags" , "" ,
169
200
"process all tags" ,
170
201
)
171
202
flag .NoOptDefVal = "true"
172
203
173
204
flag = flags .VarPF (
174
- & filterValue {& filter , git .Include , "refs/remotes/" }, "remotes" , "" ,
205
+ & filterValue {& filter , git .Include , "refs/remotes/" , false }, "remotes" , "" ,
175
206
"process all remotes" ,
176
207
)
177
208
flag .NoOptDefVal = "true"
0 commit comments