Skip to content
This repository has been archived by the owner on Sep 9, 2020. It is now read-only.

Properly separate sources for different gopkg.in versions & github #1132

Merged
merged 4 commits into from
Sep 10, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions internal/gps/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,66 @@ func TestMgrMethodsFailWithBadPath(t *testing.T) {
}
}

type sourceCreationTestFixture struct {
roots []ProjectIdentifier
urlcount, srccount int
}

func (f sourceCreationTestFixture) run(t *testing.T) {
t.Parallel()
sm, clean := mkNaiveSM(t)
defer clean()

for _, pi := range f.roots {
_, err := sm.SourceExists(pi)
if err != nil {
t.Fatal(err)
}
}

if len(sm.srcCoord.nameToURL) != f.urlcount {
t.Errorf("want %v names in the name->url map, but got %v. contents: \n%v", f.urlcount, len(sm.srcCoord.nameToURL), sm.srcCoord.nameToURL)
}

if len(sm.srcCoord.srcs) != f.srccount {
t.Errorf("want %v gateways in the sources map, but got %v", f.srccount, len(sm.srcCoord.srcs))
}
}

// This test is primarily about making sure that the logic around folding
// together different ways of referencing the same underlying resource - whether
// that be intentionally folding them, or intentionally keeping them separate -
// work as intended.
func TestSourceCreationCounts(t *testing.T) {
if testing.Short() {
t.Skip("Skipping slow test in short mode")
}

fixtures := map[string]sourceCreationTestFixture{
"gopkgin uniqueness": {
roots: []ProjectIdentifier{
mkPI("gopkg.in/sdboyer/gpkt.v1"),
mkPI("gopkg.in/sdboyer/gpkt.v2"),
mkPI("gopkg.in/sdboyer/gpkt.v3"),
},
urlcount: 6,
srccount: 3,
},
"gopkgin separation from github": {
roots: []ProjectIdentifier{
mkPI("gopkg.in/sdboyer/gpkt.v1"),
mkPI("github.com/sdboyer/gpkt"),
},
urlcount: 4,
srccount: 2,
},
}

for name, fix := range fixtures {
t.Run(name, fix.run)
}
}

func TestGetSources(t *testing.T) {
// This test is a tad slow, skip it on -short
if testing.Short() {
Expand Down
4 changes: 3 additions & 1 deletion internal/gps/maybe_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ func (m maybeGopkginSource) try(ctx context.Context, cachedir string, c singleSo
// We don't actually need a fully consistent transform into the on-disk path
// - just something that's unique to the particular gopkg.in domain context.
// So, it's OK to just dumb-join the scheme with the path.
path := sourceCachePath(cachedir, m.url.Scheme+"/"+m.opath)
aliasURL := m.url.Scheme + "://" + m.opath
path := sourceCachePath(cachedir, aliasURL)
ustr := m.url.String()
r, err := newCtxRepo(vcs.Git, ustr, path)

Expand All @@ -160,6 +161,7 @@ func (m maybeGopkginSource) try(ctx context.Context, cachedir string, c singleSo
},
major: m.major,
unstable: m.unstable,
aliasURL: aliasURL,
}

var vl []PairedVersion
Expand Down
6 changes: 5 additions & 1 deletion internal/gps/source.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,12 @@ func (sc *sourceCoordinator) getSourceGatewayFor(ctx context.Context, id Project
// integrate it back into the main map.
sc.srcmut.Lock()
defer sc.srcmut.Unlock()
// Record the name -> URL mapping, even if it's a self-mapping.
// Record the name -> URL mapping, making sure that we also get the
// self-mapping.
sc.nameToURL[normalizedName] = url
if url != normalizedName {
sc.nameToURL[url] = url
}

if sa, has := sc.srcs[url]; has {
// URL already had an entry in the main map; use that as the result.
Expand Down
7 changes: 7 additions & 0 deletions internal/gps/vcs_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,13 @@ type gopkginSource struct {
gitSource
major uint64
unstable bool
// The aliased URL we report as being the one we talk to, even though we're
// actually talking directly to GitHub.
aliasURL string
}

func (s *gopkginSource) upstreamURL() string {
return s.aliasURL
}

func (s *gopkginSource) listVersions(ctx context.Context) ([]PairedVersion, error) {
Expand Down
4 changes: 2 additions & 2 deletions internal/gps/vcs_source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,8 @@ func testGopkginSourceInteractions(t *testing.T) {
}()

tfunc := func(opath, n string, major uint64, evl []Version) {
un := "https://" + n
u, err := url.Parse(un)
un := "https://" + opath
u, err := url.Parse("https://" + n)
if err != nil {
t.Errorf("URL was bad, lolwut? errtext: %s", err)
return
Expand Down