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

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

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