提交 5079ae40 编写于 作者: M Mislav Marohnić

Fix `hub cherry-pick` remote and GitHub notation detection

上级 55399494
...@@ -48,8 +48,9 @@ func transformCherryPickArgs(args *Args) { ...@@ -48,8 +48,9 @@ func transformCherryPickArgs(args *Args) {
if project != nil { if project != nil {
args.ReplaceParam(args.IndexOfParam(ref), sha) args.ReplaceParam(args.IndexOfParam(ref), sha)
if hasGitRemote(project.Owner) { remote := gitRemoteForProject(project)
args.Before("git", "fetch", project.Owner) if remote != nil {
args.Before("git", "fetch", remote.Name)
} else { } else {
args.Before("git", "remote", "add", "-f", project.Owner, project.GitURL("", "", false)) args.Before("git", "remote", "add", "-f", project.Owner, project.GitURL("", "", false))
} }
...@@ -69,14 +70,14 @@ func parseCherryPickProjectAndSha(ref string) (project *github.Project, sha stri ...@@ -69,14 +70,14 @@ func parseCherryPickProjectAndSha(ref string) (project *github.Project, sha stri
} }
} }
ownerWithShaRegexp := regexp.MustCompile("^(%s)@([a-f0-9]{7,40})$") ownerWithShaRegexp := regexp.MustCompile("^([a-zA-Z0-9][a-zA-Z0-9-]*)@([a-f0-9]{7,40})$")
if ownerWithShaRegexp.MatchString(ref) { if ownerWithShaRegexp.MatchString(ref) {
matches := ownerWithShaRegexp.FindStringSubmatch(ref) matches := ownerWithShaRegexp.FindStringSubmatch(ref)
sha = matches[2] sha = matches[2]
localRepo, err := github.LocalRepo() localRepo, err := github.LocalRepo()
utils.Check(err) utils.Check(err)
project, err := localRepo.CurrentProject() project, err = localRepo.CurrentProject()
utils.Check(err) utils.Check(err)
project.Owner = matches[1] project.Owner = matches[1]
} }
......
...@@ -51,16 +51,18 @@ func parseUserBranchFromPR(pullRequest *octokit.PullRequest) (user string, branc ...@@ -51,16 +51,18 @@ func parseUserBranchFromPR(pullRequest *octokit.PullRequest) (user string, branc
return return
} }
func hasGitRemote(name string) bool { func gitRemoteForProject(project *github.Project) (foundRemote *github.Remote) {
remotes, err := github.Remotes() remotes, err := github.Remotes()
utils.Check(err) utils.Check(err)
for _, remote := range remotes { for _, remote := range remotes {
if remote.Name == name { remoteProject, pErr := remote.Project()
return true if pErr == nil && remoteProject.SameAs(project) {
foundRemote = &remote
return
} }
} }
return false return nil
} }
func isEmptyDir(path string) bool { func isEmptyDir(path string) bool {
......
...@@ -23,6 +23,10 @@ func (p Project) String() string { ...@@ -23,6 +23,10 @@ func (p Project) String() string {
return fmt.Sprintf("%s/%s", p.Owner, p.Name) return fmt.Sprintf("%s/%s", p.Owner, p.Name)
} }
func (p *Project) SameAs(other *Project) bool {
return p.Owner == other.Owner && p.Name == other.Name && p.Host == other.Host
}
func (p *Project) WebURL(name, owner, path string) string { func (p *Project) WebURL(name, owner, path string) string {
if owner == "" { if owner == "" {
owner = p.Owner owner = p.Owner
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册