diff --git a/.gitignore b/.gitignore index 433ced5de1..f7c17fcc63 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /profile.out /coverage.txt release/ +.idea/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 68444d004c..ecbdfc3829 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ NEW FEATURES: BUG FIXES: +* `dep` resolves private repos (including `git`) similarly to `go get` ([#1716](https://github.com/golang/dep/issues/1716)) + IMPROVEMENTS: * Reduce network access by trusting local source information and only pulling diff --git a/gps/deduce.go b/gps/deduce.go index 796681738f..74a7116847 100644 --- a/gps/deduce.go +++ b/gps/deduce.go @@ -73,7 +73,7 @@ var ( //gcRegex = regexp.MustCompile(`^(?Pcode\.google\.com/[pr]/(?P[a-z0-9\-]+)(\.(?P[a-z0-9\-]+))?)(/[A-Za-z0-9_.\-]+)*$`) jazzRegex = regexp.MustCompile(`^(?Phub\.jazz\.net(/git/[a-z0-9]+/[A-Za-z0-9_.\-]+))((?:/[A-Za-z0-9_.\-]+)*)$`) apacheRegex = regexp.MustCompile(`^(?Pgit\.apache\.org(/[a-z0-9_.\-]+\.git))((?:/[A-Za-z0-9_.\-]+)*)$`) - vcsExtensionRegex = regexp.MustCompile(`^(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?/[A-Za-z0-9_.\-/~]*?\.(?Pbzr|git|hg|svn))((?:/[A-Za-z0-9_.\-]+)*)$`) + vcsExtensionRegex = regexp.MustCompile(`^(?P(?P([a-z0-9.\-]+\.)+[a-z0-9.\-]+(:[0-9]+)?(/~?[A-Za-z0-9_.\-]+)+?)\.(?Pbzr|fossil|git|hg|svn))(/~?[A-Za-z0-9_.\-]+)*$`) ) // Other helper regexes @@ -486,19 +486,26 @@ func (m vcsExtensionDeducer) deduceSource(path string, u *url.URL) (maybeSources return nil, fmt.Errorf("%s contains no vcs extension hints for matching", path) } - switch v[4] { + match := map[string]string{} + for i, name := range m.regexp.SubexpNames() { + if name != "" && match[name] == "" { + match[name] = v[i] + } + } + + switch match["vcs"] { case "git", "hg", "bzr": - x := strings.SplitN(v[1], "/", 2) + x := strings.SplitN(match["repo"], "/", 2) // TODO(sdboyer) is this actually correct for bzr? u.Host = x[0] u.Path = "/" + x[1] if u.Scheme != "" { - if !validateVCSScheme(u.Scheme, v[4]) { - return nil, fmt.Errorf("%s is not a valid scheme for accessing %s repositories (path %s)", u.Scheme, v[4], path) + if !validateVCSScheme(u.Scheme, match["vcs"]) { + return nil, fmt.Errorf("%s is not a valid scheme for accessing %s repositories (path %s)", u.Scheme, match["vcs"], path) } - switch v[4] { + switch match["vcs"] { case "git": return maybeSources{maybeGitSource{url: u}}, nil case "bzr": @@ -512,7 +519,7 @@ func (m vcsExtensionDeducer) deduceSource(path string, u *url.URL) (maybeSources var mb maybeSources var f func(k int, u *url.URL) - switch v[4] { + switch match["vcs"] { case "git": schemes = gitSchemes f = func(k int, u *url.URL) { diff --git a/gps/deduce_test.go b/gps/deduce_test.go index 0eb05eb359..0f8e4c71f2 100644 --- a/gps/deduce_test.go +++ b/gps/deduce_test.go @@ -396,67 +396,67 @@ var pathDeductionFixtures = map[string][]pathDeductionFixture{ in: "foobar.com/baz.git", root: "foobar.com/baz.git", mb: maybeSources{ - maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, + maybeGitSource{url: mkurl("https://foobar.com/baz")}, + maybeGitSource{url: mkurl("ssh://foobar.com/baz")}, + maybeGitSource{url: mkurl("git://foobar.com/baz")}, + maybeGitSource{url: mkurl("http://foobar.com/baz")}, }, }, { in: "foobar.com/baz.git/extra/path", root: "foobar.com/baz.git", mb: maybeSources{ - maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, + maybeGitSource{url: mkurl("https://foobar.com/baz")}, + maybeGitSource{url: mkurl("ssh://foobar.com/baz")}, + maybeGitSource{url: mkurl("git://foobar.com/baz")}, + maybeGitSource{url: mkurl("http://foobar.com/baz")}, }, }, { in: "foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeSources{ - maybeBzrSource{url: mkurl("https://foobar.com/baz.bzr")}, - maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz.bzr")}, - maybeBzrSource{url: mkurl("bzr://foobar.com/baz.bzr")}, - maybeBzrSource{url: mkurl("http://foobar.com/baz.bzr")}, + maybeBzrSource{url: mkurl("https://foobar.com/baz")}, + maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz")}, + maybeBzrSource{url: mkurl("bzr://foobar.com/baz")}, + maybeBzrSource{url: mkurl("http://foobar.com/baz")}, }, }, { in: "foo-bar.com/baz.hg", root: "foo-bar.com/baz.hg", mb: maybeSources{ - maybeHgSource{url: mkurl("https://foo-bar.com/baz.hg")}, - maybeHgSource{url: mkurl("ssh://foo-bar.com/baz.hg")}, - maybeHgSource{url: mkurl("http://foo-bar.com/baz.hg")}, + maybeHgSource{url: mkurl("https://foo-bar.com/baz")}, + maybeHgSource{url: mkurl("ssh://foo-bar.com/baz")}, + maybeHgSource{url: mkurl("http://foo-bar.com/baz")}, }, }, { in: "git@foobar.com:baz.git", root: "foobar.com/baz.git", mb: maybeSources{ - maybeGitSource{url: mkurl("ssh://git@foobar.com/baz.git")}, + maybeGitSource{url: mkurl("ssh://git@foobar.com/baz")}, }, }, { in: "bzr+ssh://foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeSources{ - maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz.bzr")}, + maybeBzrSource{url: mkurl("bzr+ssh://foobar.com/baz")}, }, }, { in: "ssh://foobar.com/baz.bzr", root: "foobar.com/baz.bzr", mb: maybeSources{ - maybeBzrSource{url: mkurl("ssh://foobar.com/baz.bzr")}, + maybeBzrSource{url: mkurl("ssh://foobar.com/baz")}, }, }, { in: "https://foobar.com/baz.hg", root: "foobar.com/baz.hg", mb: maybeSources{ - maybeHgSource{url: mkurl("https://foobar.com/baz.hg")}, + maybeHgSource{url: mkurl("https://foobar.com/baz")}, }, }, { @@ -464,18 +464,6 @@ var pathDeductionFixtures = map[string][]pathDeductionFixture{ root: "foobar.com/baz.hg", srcerr: errors.New("git is not a valid scheme for accessing hg repositories (path foobar.com/baz.hg)"), }, - // who knows why anyone would do this, but having a second vcs ext - // shouldn't throw us off - only the first one counts - { - in: "foobar.com/baz.git/quark/quizzle.bzr/quorum", - root: "foobar.com/baz.git", - mb: maybeSources{ - maybeGitSource{url: mkurl("https://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("ssh://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("git://foobar.com/baz.git")}, - maybeGitSource{url: mkurl("http://foobar.com/baz.git")}, - }, - }, }, "vanity": { // Vanity imports