diff --git a/internal/server/singleprocess/state/box.go b/internal/server/singleprocess/state/box.go index 695570b29..fe23fe20c 100644 --- a/internal/server/singleprocess/state/box.go +++ b/internal/server/singleprocess/state/box.go @@ -177,10 +177,19 @@ func (s *State) boxFind( if err != nil { return nil, err } + if req.Version == "" { + req.Version = ">= 0" + } + versionConstraint, err := version.NewConstraint(req.Version) + if err != nil { + return nil, err + } + for e := raw.Next(); e != nil; e = raw.Next() { boxIndexEntry := e.(*boxIndexRecord) if req.Version != "" { - if boxIndexEntry.Version != req.Version { + boxVersion, _ := version.NewVersion(boxIndexEntry.Version) + if !versionConstraint.Check(boxVersion) { continue } } diff --git a/internal/server/singleprocess/state/box_test.go b/internal/server/singleprocess/state/box_test.go index c8a40f94b..a1edc4cc9 100644 --- a/internal/server/singleprocess/state/box_test.go +++ b/internal/server/singleprocess/state/box_test.go @@ -192,5 +192,28 @@ func TestBox(t *testing.T) { }) require.NoError(err) require.Nil(b7) + + b8, err := s.BoxFind(&vagrant_plugin_sdk.Ref_Box{ + Name: "hashicorp/bionic", + Version: "~> 1.2", + }) + require.NoError(err) + require.Equal(b8.Name, "hashicorp/bionic") + require.Equal(b8.Version, "1.2.4") + + b9, err := s.BoxFind(&vagrant_plugin_sdk.Ref_Box{ + Name: "hashicorp/bionic", + Version: "> 1.0, < 3.0", + }) + require.NoError(err) + require.Equal(b9.Name, "hashicorp/bionic") + require.Equal(b9.Version, "1.2.4") + + b10, err := s.BoxFind(&vagrant_plugin_sdk.Ref_Box{ + Name: "hashicorp/bionic", + Version: "< 1.0", + }) + require.NoError(err) + require.Nil(b10) }) }