1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-06-15 00:15:32 +02:00

refactor: 💡 Use new approach introduced via #1637

fix: 🐛 The root URI for Azure DevOps repositories contains _git

refactor so that we don't have conditional logic based on service definition

no need for this commend anymore

add comment

Fixed RegEx for HTTP remote git URL

Added Tests

pretty sure we can do this safely
This commit is contained in:
tiwood
2021-12-30 16:04:49 +01:00
committed by Jesse Duffield
parent 08ee3309cb
commit f0d0d45ba7
3 changed files with 79 additions and 88 deletions

View File

@ -1,7 +1,6 @@
package hosting_service
import (
"fmt"
"net/url"
"regexp"
"strings"
@ -66,13 +65,13 @@ func (self *HostingServiceMgr) getService() (*Service, error) {
return nil, err
}
root, err := serviceDomain.getRootFromRemoteURL(self.remoteURL)
repoURL, err := serviceDomain.serviceDefinition.getRepoURLFromRemoteURL(self.remoteURL, serviceDomain.webDomain)
if err != nil {
return nil, err
}
return &Service{
root: root,
repoURL: repoURL,
ServiceDefinition: serviceDomain.serviceDefinition,
}, nil
}
@ -139,47 +138,32 @@ type ServiceDomain struct {
serviceDefinition ServiceDefinition
}
func (self ServiceDomain) getRootFromRemoteURL(repoURL string) (string, error) {
// we may want to make this more specific to the service in future e.g. if
// some new service comes along which has a different root url structure.
repoInfo, err := self.serviceDefinition.getRepoInfoFromURL(repoURL)
if err != nil {
return "", err
}
return fmt.Sprintf("https://%s/%s/%s", self.webDomain, repoInfo.Owner, repoInfo.Repository), nil
}
// RepoInformation holds some basic information about the repo
type RepoInformation struct {
Owner string
Repository string
}
type ServiceDefinition struct {
provider string
pullRequestURLIntoDefaultBranch string
pullRequestURLIntoTargetBranch string
commitURL string
regexStrings []string
// can expect 'webdomain' to be passed in. Otherwise, you get to pick what we match in the regex
repoURLTemplate string
}
func (self ServiceDefinition) getRepoInfoFromURL(url string) (*RepoInformation, error) {
func (self ServiceDefinition) getRepoURLFromRemoteURL(url string, webDomain string) (string, error) {
for _, regexStr := range self.regexStrings {
re := regexp.MustCompile(regexStr)
matches := utils.FindNamedMatches(re, url)
if matches != nil {
return &RepoInformation{
Owner: matches["owner"],
Repository: matches["repo"],
}, nil
input := utils.FindNamedMatches(re, url)
if input != nil {
input["webDomain"] = webDomain
return utils.ResolvePlaceholderString(self.repoURLTemplate, input), nil
}
}
return nil, errors.New("Failed to parse repo information from url")
return "", errors.New("Failed to parse repo information from url")
}
type Service struct {
root string
repoURL string
ServiceDefinition
}
@ -196,5 +180,5 @@ func (self *Service) getCommitURL(commitSha string) string {
}
func (self *Service) resolveUrl(templateString string, args map[string]string) string {
return self.root + utils.ResolvePlaceholderString(templateString, args)
return self.repoURL + utils.ResolvePlaceholderString(templateString, args)
}