mirror of
https://github.com/golang/go.git
synced 2025-05-16 04:44:39 +00:00
cmd/go: solve ambiguity of get lp.net/project/foo
This solves the ambiguity for "lp.net/project/foo". In these URLs, "foo" could be a series name registered in Launchpad with its own branch, and it could also be the name of a directory within the main project branch one level up. Solve it by testing if the series branch exists in Launchpad and if it doesn't moving the root one level up. R=rsc CC=golang-dev https://golang.org/cl/5577058
This commit is contained in:
parent
2332439b1b
commit
cdbed823bd
@ -93,8 +93,11 @@ var vcsBzr = &vcsCmd{
|
|||||||
name: "Bazaar",
|
name: "Bazaar",
|
||||||
cmd: "bzr",
|
cmd: "bzr",
|
||||||
|
|
||||||
createCmd: "branch {repo} {dir}",
|
createCmd: "branch {repo} {dir}",
|
||||||
downloadCmd: "pull --overwrite", // TODO: REALLY?
|
|
||||||
|
// Without --overwrite bzr will not pull tags that changed.
|
||||||
|
// Replace by --overwrite-tags after http://pad.lv/681792 goes in.
|
||||||
|
downloadCmd: "pull --overwrite",
|
||||||
|
|
||||||
tagCmd: []tagCmd{{"tags", `^(\S+)`}},
|
tagCmd: []tagCmd{{"tags", `^(\S+)`}},
|
||||||
tagDefault: "revno:-1",
|
tagDefault: "revno:-1",
|
||||||
@ -198,7 +201,7 @@ func (v *vcsCmd) tagSync(dir, tag string) error {
|
|||||||
return v.run(dir, v.tagSyncCmd, "tag", tag)
|
return v.run(dir, v.tagSyncCmd, "tag", tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
// A vcsPath is describes how to convert an import path into a
|
// A vcsPath describes how to convert an import path into a
|
||||||
// version control system and repository name.
|
// version control system and repository name.
|
||||||
type vcsPath struct {
|
type vcsPath struct {
|
||||||
prefix string // prefix this description applies to
|
prefix string // prefix this description applies to
|
||||||
@ -302,9 +305,10 @@ var vcsPaths = []*vcsPath{
|
|||||||
// Launchpad
|
// Launchpad
|
||||||
{
|
{
|
||||||
prefix: "launchpad.net/",
|
prefix: "launchpad.net/",
|
||||||
re: `^(?P<root>launchpad\.net/([A-Za-z0-9_.\-]+(/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`,
|
re: `^(?P<root>launchpad\.net/((?P<project>[A-Za-z0-9_.\-]+)(?P<series>/[A-Za-z0-9_.\-]+)?|~[A-Za-z0-9_.\-]+/(\+junk|[A-Za-z0-9_.\-]+)/[A-Za-z0-9_.\-]+))(/[A-Za-z0-9_.\-]+)*$`,
|
||||||
vcs: "bzr",
|
vcs: "bzr",
|
||||||
repo: "https://{root}",
|
repo: "https://{root}",
|
||||||
|
check: launchpadVCS,
|
||||||
},
|
},
|
||||||
|
|
||||||
// General syntax for any server.
|
// General syntax for any server.
|
||||||
@ -403,3 +407,19 @@ func bitbucketVCS(match map[string]string) error {
|
|||||||
|
|
||||||
return fmt.Errorf("unable to detect version control system for bitbucket.org/ path")
|
return fmt.Errorf("unable to detect version control system for bitbucket.org/ path")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// launchpadVCS solves the ambiguity for "lp.net/project/foo". In this case,
|
||||||
|
// "foo" could be a series name registered in Launchpad with its own branch,
|
||||||
|
// and it could also be the name of a directory within the main project
|
||||||
|
// branch one level up.
|
||||||
|
func launchpadVCS(match map[string]string) error {
|
||||||
|
if match["project"] == "" || match["series"] == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_, err := httpGET(expand(match, "https://code.launchpad.net/{project}{series}/.bzr/branch-format"))
|
||||||
|
if err != nil {
|
||||||
|
match["root"] = expand(match, "launchpad.net/{project}")
|
||||||
|
match["repo"] = expand(match, "https://{root}")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user