Skip to content

Commit 65f247d

Browse files
committed
Split the reference-filtering code into a separate file
1 parent cbc8706 commit 65f247d

File tree

2 files changed

+75
-70
lines changed

2 files changed

+75
-70
lines changed

git/git.go

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -290,76 +290,6 @@ func (l *BatchObjectIter) Close() error {
290290
return err
291291
}
292292

293-
type ReferenceFilter func(Reference) bool
294-
295-
func AllReferencesFilter(_ Reference) bool {
296-
return true
297-
}
298-
299-
func PrefixFilter(prefix string) ReferenceFilter {
300-
return func(r Reference) bool {
301-
return strings.HasPrefix(r.Refname, prefix)
302-
}
303-
}
304-
305-
var (
306-
BranchesFilter ReferenceFilter = PrefixFilter("refs/heads/")
307-
TagsFilter ReferenceFilter = PrefixFilter("refs/tags/")
308-
RemotesFilter ReferenceFilter = PrefixFilter("refs/remotes/")
309-
)
310-
311-
func notNilFilters(filters ...ReferenceFilter) []ReferenceFilter {
312-
var ret []ReferenceFilter
313-
for _, filter := range filters {
314-
if filter != nil {
315-
ret = append(ret, filter)
316-
}
317-
}
318-
return ret
319-
}
320-
321-
func OrFilter(filters ...ReferenceFilter) ReferenceFilter {
322-
filters = notNilFilters(filters...)
323-
if len(filters) == 0 {
324-
return AllReferencesFilter
325-
} else if len(filters) == 1 {
326-
return filters[0]
327-
} else {
328-
return func(r Reference) bool {
329-
for _, filter := range filters {
330-
if filter(r) {
331-
return true
332-
}
333-
}
334-
return false
335-
}
336-
}
337-
}
338-
339-
func AndFilter(filters ...ReferenceFilter) ReferenceFilter {
340-
filters = notNilFilters(filters...)
341-
if len(filters) == 0 {
342-
return AllReferencesFilter
343-
} else if len(filters) == 1 {
344-
return filters[0]
345-
} else {
346-
return func(r Reference) bool {
347-
for _, filter := range filters {
348-
if !filter(r) {
349-
return false
350-
}
351-
}
352-
return true
353-
}
354-
}
355-
}
356-
357-
func NotFilter(filter ReferenceFilter) ReferenceFilter {
358-
return func(r Reference) bool {
359-
return !filter(r)
360-
}
361-
}
362-
363293
// Parse a `cat-file --batch[-check]` output header line (including
364294
// the trailing LF). `spec`, if not "", is used in error messages.
365295
func parseBatchHeader(spec string, header string) (OID, ObjectType, counts.Count32, error) {

git/ref_filter.go

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package git
2+
3+
import (
4+
"strings"
5+
)
6+
7+
type ReferenceFilter func(Reference) bool
8+
9+
func AllReferencesFilter(_ Reference) bool {
10+
return true
11+
}
12+
13+
func PrefixFilter(prefix string) ReferenceFilter {
14+
return func(r Reference) bool {
15+
return strings.HasPrefix(r.Refname, prefix)
16+
}
17+
}
18+
19+
var (
20+
BranchesFilter ReferenceFilter = PrefixFilter("refs/heads/")
21+
TagsFilter ReferenceFilter = PrefixFilter("refs/tags/")
22+
RemotesFilter ReferenceFilter = PrefixFilter("refs/remotes/")
23+
)
24+
25+
func notNilFilters(filters ...ReferenceFilter) []ReferenceFilter {
26+
var ret []ReferenceFilter
27+
for _, filter := range filters {
28+
if filter != nil {
29+
ret = append(ret, filter)
30+
}
31+
}
32+
return ret
33+
}
34+
35+
func OrFilter(filters ...ReferenceFilter) ReferenceFilter {
36+
filters = notNilFilters(filters...)
37+
if len(filters) == 0 {
38+
return AllReferencesFilter
39+
} else if len(filters) == 1 {
40+
return filters[0]
41+
} else {
42+
return func(r Reference) bool {
43+
for _, filter := range filters {
44+
if filter(r) {
45+
return true
46+
}
47+
}
48+
return false
49+
}
50+
}
51+
}
52+
53+
func AndFilter(filters ...ReferenceFilter) ReferenceFilter {
54+
filters = notNilFilters(filters...)
55+
if len(filters) == 0 {
56+
return AllReferencesFilter
57+
} else if len(filters) == 1 {
58+
return filters[0]
59+
} else {
60+
return func(r Reference) bool {
61+
for _, filter := range filters {
62+
if !filter(r) {
63+
return false
64+
}
65+
}
66+
return true
67+
}
68+
}
69+
}
70+
71+
func NotFilter(filter ReferenceFilter) ReferenceFilter {
72+
return func(r Reference) bool {
73+
return !filter(r)
74+
}
75+
}

0 commit comments

Comments
 (0)