-
Notifications
You must be signed in to change notification settings - Fork 1k
internal/gps: Parse abbreviated git revisions #1027
Changes from 6 commits
531fb9c
dfb8719
e0f7e1f
6977b26
2d4b3c2
960d21a
7f19f8b
49bf340
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -13,71 +13,82 @@ import ( | |||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
func TestSourceManager_InferConstraint(t *testing.T) { | ||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||
h := test.NewHelper(t) | ||||||||||||||||||||||||||||
cacheDir := "gps-repocache" | ||||||||||||||||||||||||||||
h.TempDir(cacheDir) | ||||||||||||||||||||||||||||
sm, err := NewSourceManager(h.Path(cacheDir)) | ||||||||||||||||||||||||||||
h.Must(err) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
sv, err := NewSemverConstraintIC("v0.8.1") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
svs, err := NewSemverConstraintIC("v0.12.0-12-de4dcafe0") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
testcase := func(str string, pi ProjectIdentifier, want Constraint) func(*testing.T) { | ||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: Can these subtests be restructured to match the way we have been doing other subtests? The pattern that we have been following is to create an array or map of testcase data, and then in a for loop call Lines 116 to 128 in 6c5ebb9
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, done. |
||||||||||||||||||||||||||||
return func(t *testing.T) { | ||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||
h := test.NewHelper(t) | ||||||||||||||||||||||||||||
defer h.Cleanup() | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
constraints := map[string]Constraint{ | ||||||||||||||||||||||||||||
"": Any(), | ||||||||||||||||||||||||||||
"v0.8.1": sv, | ||||||||||||||||||||||||||||
"v2": NewBranch("v2"), | ||||||||||||||||||||||||||||
"v0.12.0-12-de4dcafe0": svs, | ||||||||||||||||||||||||||||
"master": NewBranch("master"), | ||||||||||||||||||||||||||||
"5b3352dc16517996fb951394bcbbe913a2a616e3": Revision("5b3352dc16517996fb951394bcbbe913a2a616e3"), | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
// valid bzr rev | ||||||||||||||||||||||||||||
"jess@linux.com-20161116211307-wiuilyamo9ian0m7": Revision("jess@linux.com-20161116211307-wiuilyamo9ian0m7"), | ||||||||||||||||||||||||||||
// invalid bzr rev | ||||||||||||||||||||||||||||
"go4@golang.org-sadfasdf-": NewVersion("go4@golang.org-sadfasdf-"), | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
cacheDir := "gps-repocache" | ||||||||||||||||||||||||||||
h.TempDir(cacheDir) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
pi := ProjectIdentifier{ProjectRoot: "github.com/carolynvs/deptest"} | ||||||||||||||||||||||||||||
for str, want := range constraints { | ||||||||||||||||||||||||||||
got, err := sm.InferConstraint(str, pi) | ||||||||||||||||||||||||||||
h.Must(err) | ||||||||||||||||||||||||||||
sm, err := NewSourceManager(h.Path(cacheDir)) | ||||||||||||||||||||||||||||
h.Must(err) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
wantT := reflect.TypeOf(want) | ||||||||||||||||||||||||||||
gotT := reflect.TypeOf(got) | ||||||||||||||||||||||||||||
if wantT != gotT { | ||||||||||||||||||||||||||||
t.Errorf("expected type: %s, got %s, for input %s", wantT, gotT, str) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
if got.String() != want.String() { | ||||||||||||||||||||||||||||
t.Errorf("expected value: %s, got %s for input %s", want, got, str) | ||||||||||||||||||||||||||||
got, err := sm.InferConstraint(str, pi) | ||||||||||||||||||||||||||||
h.Must(err) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
wantT := reflect.TypeOf(want) | ||||||||||||||||||||||||||||
gotT := reflect.TypeOf(got) | ||||||||||||||||||||||||||||
if wantT != gotT { | ||||||||||||||||||||||||||||
t.Errorf("expected type: %s, got %s, for input %s", wantT, gotT, str) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
if got.String() != want.String() { | ||||||||||||||||||||||||||||
t.Errorf("expected value: %s, got %s for input %s", want, got, str) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
func TestSourceManager_InferConstraint_InvalidInput(t *testing.T) { | ||||||||||||||||||||||||||||
h := test.NewHelper(t) | ||||||||||||||||||||||||||||
var ( | ||||||||||||||||||||||||||||
gitProj = ProjectIdentifier{ProjectRoot: "github.com/carolynvs/deptest"} | ||||||||||||||||||||||||||||
bzrProj = ProjectIdentifier{ProjectRoot: "launchpad.net/govcstestbzrrepo"} | ||||||||||||||||||||||||||||
hgProj = ProjectIdentifier{ProjectRoot: "bitbucket.org/golang-dep/dep-test"} | ||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Let's add a testcase for svn. Here's the test repo info: https://github.com/golang/dep/blob/master/internal/gps/vcs_repo_test.go#L122 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Will do. That code is using svn to manually checkout a repo that would normally be cloned with git using the go tools, so I might need to do some plumbing to make it appear to the SourceMgr as a svn repo. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh, if it's not a straight case like the others, please don't bother. I didn't look at that too closely, and didn't realize it's not a svn repo... 😊 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Okay, works for me 😄 Digging in further, I got the sense that dep might not fully support svn, in fact. It doesn't look like anything references the |
||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
cacheDir := "gps-repocache" | ||||||||||||||||||||||||||||
h.TempDir(cacheDir) | ||||||||||||||||||||||||||||
sm, err := NewSourceManager(h.Path(cacheDir)) | ||||||||||||||||||||||||||||
h.Must(err) | ||||||||||||||||||||||||||||
t.Run("git", func(t *testing.T) { | ||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||
t.Run("empty", testcase("", gitProj, Any())) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
constraints := []string{ | ||||||||||||||||||||||||||||
// invalid bzr revs | ||||||||||||||||||||||||||||
"go4@golang.org-lskjdfnkjsdnf-ksjdfnskjdfn", | ||||||||||||||||||||||||||||
"20120425195858-psty8c35ve2oej8t", | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
v081, err := NewSemverConstraintIC("v0.8.1") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
pi := ProjectIdentifier{ProjectRoot: "github.com/sdboyer/deptest"} | ||||||||||||||||||||||||||||
for _, str := range constraints { | ||||||||||||||||||||||||||||
_, err := sm.InferConstraint(str, pi) | ||||||||||||||||||||||||||||
if err == nil { | ||||||||||||||||||||||||||||
t.Errorf("expected %s to produce an error", str) | ||||||||||||||||||||||||||||
v012, err := NewSemverConstraintIC("v0.12.0-12-de4dcafe0") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
t.Run("semver constraint", testcase("v0.8.1", gitProj, v081)) | ||||||||||||||||||||||||||||
t.Run("long semver constraint", testcase("v0.12.0-12-de4dcafe0", gitProj, v012)) | ||||||||||||||||||||||||||||
t.Run("branch v2", testcase("v2", gitProj, NewBranch("v2"))) | ||||||||||||||||||||||||||||
t.Run("branch master", testcase("master", gitProj, NewBranch("master"))) | ||||||||||||||||||||||||||||
t.Run("long revision", testcase("3f4c3bea144e112a69bbe5d8d01c1b09a544253f", gitProj, Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f"))) | ||||||||||||||||||||||||||||
t.Run("short revision", testcase("3f4c3bea", gitProj, Revision("3f4c3bea144e112a69bbe5d8d01c1b09a544253f"))) | ||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
t.Run("bzr", func(t *testing.T) { | ||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||
v1, err := NewSemverConstraintIC("v1.0.0") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
t.Run("empty", testcase("", bzrProj, Any())) | ||||||||||||||||||||||||||||
t.Run("semver", testcase("v1.0.0", bzrProj, v1)) | ||||||||||||||||||||||||||||
t.Run("revision", testcase("matt@mattfarina.com-20150731135137-pbphasfppmygpl68", bzrProj, Revision("matt@mattfarina.com-20150731135137-pbphasfppmygpl68"))) | ||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
t.Run("hg", func(t *testing.T) { | ||||||||||||||||||||||||||||
t.Parallel() | ||||||||||||||||||||||||||||
v1, err := NewSemverConstraintIC("v1.0.0") | ||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||
t.Fatal(err) | ||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||
t.Run("empty", testcase("", hgProj, Any())) | ||||||||||||||||||||||||||||
t.Run("semver", testcase("v1.0.0", hgProj, v1)) | ||||||||||||||||||||||||||||
t.Run("default branch", testcase("default", hgProj, NewBranch("default"))) | ||||||||||||||||||||||||||||
t.Run("revision", testcase("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59", hgProj, Revision("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59"))) | ||||||||||||||||||||||||||||
t.Run("short revision", testcase("6f55e1f03d91", hgProj, Revision("6f55e1f03d91f8a7cce35d1968eb60a2352e4d59"))) | ||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Originally the function checked if the string given was a revision first (note the comment at the top of the file). Unless we need to change that behavior(?), let's move this back to the top where we are replacing the old code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we do need to change that behavior. If we put it at the top, then we'll dereference branch names and version tags, turning them into pure Revisions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay then let's just update the comment to reflect the new order.