Skip to content

Commit c7b9b89

Browse files
committed
filterGroupValue: use the existing map of refgroups
Change `filterGroupValue` to use the existing map of reference groups that has been put together by the `RefGroupBuilder` rather than reading the gitconfig again. This still doesn't handle nested groups correctly, but we'll fix that in a moment.
1 parent 1955ee0 commit c7b9b89

3 files changed

Lines changed: 15 additions & 52 deletions

File tree

git-sizer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func mainImplementation(args []string) error {
166166
return err
167167
}
168168

169-
rgb.AddRefopts(flags, configger)
169+
rgb.AddRefopts(flags)
170170

171171
flags.SortFlags = false
172172

internal/refopts/filter_group_value.go

Lines changed: 12 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,64 +2,27 @@ package refopts
22

33
import (
44
"fmt"
5-
"os"
65

76
"github.com/github/git-sizer/git"
7+
"github.com/github/git-sizer/sizes"
88
)
99

1010
type filterGroupValue struct {
11-
filter *git.ReferenceFilter
12-
configger Configger
11+
filter *git.ReferenceFilter
12+
groups map[sizes.RefGroupSymbol]*refGroup
1313
}
1414

15-
func (v *filterGroupValue) Set(name string) error {
16-
// At this point, it is not yet certain that the command was run
17-
// inside a Git repository. If not, ignore this option (the
18-
// command will error out anyway).
19-
if v.configger == nil {
20-
fmt.Fprintf(
21-
os.Stderr,
22-
"warning: not in Git repository; ignoring '--refgroup' option.\n",
23-
)
24-
return nil
25-
}
15+
func (v *filterGroupValue) Set(symbolString string) error {
16+
symbol := sizes.RefGroupSymbol(symbolString)
2617

27-
config, err := v.configger.Config(fmt.Sprintf("refgroup.%s", name))
28-
if err != nil {
29-
return err
30-
}
31-
for _, entry := range config.Entries {
32-
switch entry.Key {
33-
case "include":
34-
*v.filter = git.Include.Combine(
35-
*v.filter, git.PrefixFilter(entry.Value),
36-
)
37-
case "includeregexp":
38-
filter, err := git.RegexpFilter(entry.Value)
39-
if err != nil {
40-
return fmt.Errorf(
41-
"invalid regular expression for 'refgroup.%s.%s': %w",
42-
name, entry.Key, err,
43-
)
44-
}
45-
*v.filter = git.Include.Combine(*v.filter, filter)
46-
case "exclude":
47-
*v.filter = git.Exclude.Combine(
48-
*v.filter, git.PrefixFilter(entry.Value),
49-
)
50-
case "excluderegexp":
51-
filter, err := git.RegexpFilter(entry.Value)
52-
if err != nil {
53-
return fmt.Errorf(
54-
"invalid regular expression for 'refgroup.%s.%s': %w",
55-
name, entry.Key, err,
56-
)
57-
}
58-
*v.filter = git.Exclude.Combine(*v.filter, filter)
59-
default:
60-
// Ignore unrecognized keys.
61-
}
18+
refGroup, ok := v.groups[symbol]
19+
20+
if !ok || symbol == "" {
21+
return fmt.Errorf("refgroup '%s' is not defined", symbol)
6222
}
23+
24+
*v.filter = git.Include.Combine(*v.filter, refGroup.filter)
25+
6326
return nil
6427
}
6528

internal/refopts/ref_group_builder.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func splitKey(key string) (sizes.RefGroupSymbol, string) {
141141
}
142142

143143
// Add some reference-related options to `flags`.
144-
func (rgb *RefGroupBuilder) AddRefopts(flags *pflag.FlagSet, configger Configger) {
144+
func (rgb *RefGroupBuilder) AddRefopts(flags *pflag.FlagSet) {
145145
tlf := &rgb.topLevelGroup.filter
146146
flags.Var(
147147
&filterValue{tlf, git.Include, "", false}, "include",
@@ -221,7 +221,7 @@ func (rgb *RefGroupBuilder) AddRefopts(flags *pflag.FlagSet, configger Configger
221221
flag.NoOptDefVal = "true"
222222

223223
flag = flags.VarPF(
224-
&filterGroupValue{tlf, configger}, "refgroup", "",
224+
&filterGroupValue{tlf, rgb.groups}, "refgroup", "",
225225
"process references in refgroup defined by gitconfig",
226226
)
227227

0 commit comments

Comments
 (0)