Skip to content

Commit b5b8c96

Browse files
committed
Handle case when filter query is whitespace
Fixes #35
1 parent c5bded9 commit b5b8c96

8 files changed

+44
-3
lines changed

cmd/grv/commit_filter.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
// CreateCommitFilter constructs a commit filter from the provided query
88
func CreateCommitFilter(query string) (commitFilter *CommitFilter, errors []error) {
99
filter, errors := CreateFilter(query, &CommitFieldDescriptor{})
10-
if len(errors) > 0 {
10+
if len(errors) > 0 || filter == nil {
1111
return
1212
}
1313

cmd/grv/commit_filter_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,14 @@ func TestCommitFieldValuesAreExtracted(t *testing.T) {
208208
}
209209
}
210210
}
211+
212+
func TestNilCommitFilterIsReturnedIfQueryDoesNotDefineFilter(t *testing.T) {
213+
query := " \t\v\r\n"
214+
commitFilter, errors := CreateCommitFilter(query)
215+
216+
if len(errors) > 0 {
217+
t.Errorf("CreateCommitFilter failed with errors %v", errors)
218+
} else if commitFilter != nil {
219+
t.Errorf("Expected returned filter to be nil but found: %[1]v of type %[1]T", commitFilter)
220+
}
221+
}

cmd/grv/commit_view.go

+3
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,9 @@ func addCommitFilter(commitView *CommitView, action Action) (err error) {
766766
if len(errors) > 0 {
767767
commitView.channels.ReportErrors(errors)
768768
return
769+
} else if commitFilter == nil {
770+
log.Debugf("Query string does not define commit filter: \"%v\"", query)
771+
return
769772
}
770773

771774
if err = commitView.repoData.AddCommitFilter(commitView.activeRef, commitFilter); err != nil {

cmd/grv/filter_generator.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ type FieldDescriptor interface {
2323
func CreateFilter(query string, fieldDescriptor FieldDescriptor) (filter Filter, errors []error) {
2424
queryParser := NewQueryParser(strings.NewReader(query))
2525

26-
expression, _, err := queryParser.Parse()
26+
expression, eof, err := queryParser.Parse()
2727
if err != nil {
2828
log.Debugf("Errors encountered when parsing query")
2929
errors = append(errors, err)
3030
return
31+
} else if eof {
32+
return
3133
}
3234

3335
log.Debugf("Received query: %v", expression)

cmd/grv/filter_generator_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -466,3 +466,14 @@ func TestFieldValuesAreRetrievedFromInput(t *testing.T) {
466466
}
467467
}
468468
}
469+
470+
func TestNilFilterIsReturnedIfQueryDoesNotDefineFilter(t *testing.T) {
471+
query := " "
472+
filter, errors := CreateFilter(query, &TestRecordFieldDescriptor{})
473+
474+
if len(errors) > 0 {
475+
t.Errorf("CreateFilter failed with errors %v", errors)
476+
} else if filter != nil {
477+
t.Errorf("Expected returned filter to be nil but found: %[1]v of type %[1]T", filter)
478+
}
479+
}

cmd/grv/ref_filter.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
// CreateRefFilter creates a ref filter from the provided query
88
func CreateRefFilter(query string) (refFilter *RefFilter, errors []error) {
99
filter, errors := CreateFilter(query, &refFieldDescriptor{})
10-
if len(errors) > 0 {
10+
if len(errors) > 0 || filter == nil {
1111
return
1212
}
1313

cmd/grv/ref_filter_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,14 @@ func TestCertainRenderedRefTypesAlwaysMatchFilter(t *testing.T) {
168168
}
169169
}
170170
}
171+
172+
func TestNilRefFilterIsReturnedIfQueryDoesNotDefineFilter(t *testing.T) {
173+
query := " "
174+
refFilter, errors := CreateRefFilter(query)
175+
176+
if len(errors) > 0 {
177+
t.Errorf("CreateRefFilter failed with errors %v", errors)
178+
} else if refFilter != nil {
179+
t.Errorf("Expected returned filter to be nil but found: %[1]v of type %[1]T", refFilter)
180+
}
181+
}

cmd/grv/ref_view.go

+3
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,9 @@ func addRefFilter(refView *RefView, action Action) (err error) {
958958
if len(errors) > 0 {
959959
refView.channels.ReportErrors(errors)
960960
return
961+
} else if refFilter == nil {
962+
log.Debugf("Query string does not define ref filter: \"%v\"", query)
963+
return
961964
}
962965

963966
beforeRenderedRefNum := len(refView.renderedRefs.RenderedRefs())

0 commit comments

Comments
 (0)