From ee449757a2f8d63faa8048c84693efda3a38d16e Mon Sep 17 00:00:00 2001 From: mo khan Date: Tue, 31 Aug 2021 14:47:58 -0600 Subject: [PATCH] refactor: extract loop to try https then fallback to http --- go_modules/helpers/importresolver/main.go | 44 ++++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/go_modules/helpers/importresolver/main.go b/go_modules/helpers/importresolver/main.go index c82205325369..873410f72d94 100644 --- a/go_modules/helpers/importresolver/main.go +++ b/go_modules/helpers/importresolver/main.go @@ -1,6 +1,8 @@ package importresolver import ( + "errors" + "fmt" "io/ioutil" "strings" @@ -12,32 +14,32 @@ type Args struct { } func VCSRemoteForImport(args *Args) (interface{}, error) { - local, err := ioutil.TempDir("", "unused-vcs-local-dir") - if err != nil { - return nil, err - } - - return resolveDestinationUrlFrom(args.Import, local) -} - -func resolveDestinationUrlFrom(remote string, local string) (interface{}, error) { + remote := args.Import scheme := strings.Split(remote, ":")[0] switch scheme { case "http", "https": - repo, err := vcs.NewRepo(remote, local) - if err != nil { - return nil, err - } - return repo.Remote(), nil + return resolve(remote) default: - repo, err := vcs.NewRepo("https://"+remote, local) - if err != nil { - repo, err := vcs.NewRepo("http://"+remote, local) - if err != nil { - return nil, err + schemes := []string{"https://", "http://"} + for _, scheme := range schemes { + repo, err := resolve(scheme + remote) + if err == nil { + return repo, nil } - return repo.Remote(), nil } - return repo.Remote(), nil + return nil, errors.New(fmt.Sprintf("Could not resolve url for: %v", remote)) + } +} + +func resolve(remote string) (interface{}, error) { + local, err := ioutil.TempDir("", "unused-vcs-local-dir") + if err != nil { + return nil, err + } + + repo, err := vcs.NewRepo(remote, local) + if err != nil { + return nil, err } + return repo.Remote(), nil }