Skip to content

Commit 83f87a2

Browse files
committed
plumbing: FilterObjectType, enforce supported object types
1 parent ce14926 commit 83f87a2

File tree

2 files changed

+37
-6
lines changed

2 files changed

+37
-6
lines changed

plumbing/protocol/packp/filter.go

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package packp
22

33
import (
4+
"errors"
45
"fmt"
56
"github.com/go-git/go-git/v5/plumbing"
67
"net/url"
78
"strings"
89
)
910

11+
var ErrUnsupportedObjectFilterType = errors.New("unsupported object filter type")
12+
1013
// Filter values enable the partial clone capability which causes
1114
// the server to omit objects that match the filter.
1215
type Filter string
@@ -30,8 +33,19 @@ func FilterTreeDepth(depth uint64) Filter {
3033

3134
// FilterObjectType omits all objects which are not of the requested type t.
3235
// Supported types are TagObject, CommitObject, TreeObject and BlobObject.
33-
func FilterObjectType(t plumbing.ObjectType) Filter {
34-
return Filter(fmt.Sprintf("object:type=%s", t.String()))
36+
func FilterObjectType(t plumbing.ObjectType) (Filter, error) {
37+
switch t {
38+
case plumbing.TagObject:
39+
fallthrough
40+
case plumbing.CommitObject:
41+
fallthrough
42+
case plumbing.TreeObject:
43+
fallthrough
44+
case plumbing.BlobObject:
45+
return Filter(fmt.Sprintf("object:type=%s", t.String())), nil
46+
default:
47+
return "", fmt.Errorf("%w: %s", ErrUnsupportedObjectFilterType, t.String())
48+
}
3549
}
3650

3751
// FilterCombine combines multiple Filter values together.

plumbing/protocol/packp/filter_test.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,27 @@ func TestFilterTreeDepth(t *testing.T) {
2222
}
2323

2424
func TestFilterObjectType(t *testing.T) {
25-
require.EqualValues(t, "object:type=tag", FilterObjectType(plumbing.TagObject))
26-
require.EqualValues(t, "object:type=commit", FilterObjectType(plumbing.CommitObject))
27-
require.EqualValues(t, "object:type=tree", FilterObjectType(plumbing.TreeObject))
28-
require.EqualValues(t, "object:type=blob", FilterObjectType(plumbing.BlobObject))
25+
filter, err := FilterObjectType(plumbing.TagObject)
26+
require.NoError(t, err)
27+
require.EqualValues(t, "object:type=tag", filter)
28+
29+
filter, err = FilterObjectType(plumbing.CommitObject)
30+
require.NoError(t, err)
31+
require.EqualValues(t, "object:type=commit", filter)
32+
33+
filter, err = FilterObjectType(plumbing.TreeObject)
34+
require.NoError(t, err)
35+
require.EqualValues(t, "object:type=tree", filter)
36+
37+
filter, err = FilterObjectType(plumbing.BlobObject)
38+
require.NoError(t, err)
39+
require.EqualValues(t, "object:type=blob", filter)
40+
41+
_, err = FilterObjectType(plumbing.InvalidObject)
42+
require.Error(t, err)
43+
44+
_, err = FilterObjectType(plumbing.OFSDeltaObject)
45+
require.Error(t, err)
2946
}
3047

3148
func TestFilterCombine(t *testing.T) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy