Skip to content

Commit 91d9c08

Browse files
committed
showRefGrouper: new implementation for --show-ref
Implement `--show-ref` by logging at the `RefGrouper` level rather than at the `ReferenceFilter` level. This decouples use of the filter from logging.
1 parent c7b9b89 commit 91d9c08

2 files changed

Lines changed: 29 additions & 20 deletions

File tree

internal/refopts/ref_group_builder.go

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,6 @@ func (rgb *RefGroupBuilder) Finish() (sizes.RefGrouper, error) {
235235
rgb.topLevelGroup.filter = git.AllReferencesFilter
236236
}
237237

238-
if rgb.ShowRefs {
239-
fmt.Fprintf(os.Stderr, "References (included references marked with '+'):\n")
240-
rgb.topLevelGroup.filter = showRefFilter{rgb.topLevelGroup.filter}
241-
}
242-
243238
refGrouper := refGrouper{
244239
topLevelGroup: rgb.topLevelGroup,
245240
}
@@ -256,6 +251,11 @@ func (rgb *RefGroupBuilder) Finish() (sizes.RefGrouper, error) {
256251
refGrouper.refGroups = append(refGrouper.refGroups, *refGrouper.ignoredRefGroup)
257252
}
258253

254+
if rgb.ShowRefs {
255+
fmt.Fprintf(os.Stderr, "References (included references marked with '+'):\n")
256+
return showRefGrouper{&refGrouper, os.Stderr}, nil
257+
}
258+
259259
return &refGrouper, nil
260260
}
261261

@@ -313,18 +313,3 @@ func (refGrouper *refGrouper) Categorize(refname string) (bool, []sizes.RefGroup
313313
func (refGrouper *refGrouper) Groups() []sizes.RefGroup {
314314
return refGrouper.refGroups
315315
}
316-
317-
// showRefFilter is a `git.ReferenceFilter` that logs its choices to Stderr.
318-
type showRefFilter struct {
319-
f git.ReferenceFilter
320-
}
321-
322-
func (f showRefFilter) Filter(refname string) bool {
323-
b := f.f.Filter(refname)
324-
if b {
325-
fmt.Fprintf(os.Stderr, "+ %s\n", refname)
326-
} else {
327-
fmt.Fprintf(os.Stderr, " %s\n", refname)
328-
}
329-
return b
330-
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package refopts
2+
3+
import (
4+
"fmt"
5+
"io"
6+
7+
"github.com/github/git-sizer/sizes"
8+
)
9+
10+
// showRefFilter is a `git.ReferenceFilter` that logs its choices to Stderr.
11+
type showRefGrouper struct {
12+
*refGrouper
13+
w io.Writer
14+
}
15+
16+
func (refGrouper showRefGrouper) Categorize(refname string) (bool, []sizes.RefGroupSymbol) {
17+
walk, symbols := refGrouper.refGrouper.Categorize(refname)
18+
if walk {
19+
fmt.Fprintf(refGrouper.w, "+ %s\n", refname)
20+
} else {
21+
fmt.Fprintf(refGrouper.w, " %s\n", refname)
22+
}
23+
return walk, symbols
24+
}

0 commit comments

Comments
 (0)