This is an automated email from the ASF dual-hosted git repository. ccollins pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-newt.git
The following commit(s) were added to refs/heads/master by this push: new 45add9e upgrade: Don't warn on fixup to an equivalent URL 45add9e is described below commit 45add9ee283c1bfd1a5a80fce694451e1cdffcd8 Author: Christopher Collins <ccoll...@apache.org> AuthorDate: Thu Mar 5 17:00:31 2020 -0800 upgrade: Don't warn on fixup to an equivalent URL If `project.yml` specifies a repo with a different URL than the current `origin`, newt fixes the `origin` URL and produces a warning like this: WARNING: Repo's "origin" remote points to unexpected URL: g...@github.com:apache/mynewt-nimble.git; correcting it to https://github.com/apache/mynewt-nimble.git. Repo contents may be incorrect. This commit suppresses the warning if the two URLs are "equivalent". URLs are considered equivalent if: 1. The strings are identical after the optional ".git" suffixes are stripped, OR 2. One is a "git@" URL and the other is an "https://" URL for the same repo. For example: g...@github.com:apache/mynewt-core.git https://github.com/apache/mynewt-core --- newt/downloader/downloader.go | 55 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/newt/downloader/downloader.go b/newt/downloader/downloader.go index 474309d..506b798 100644 --- a/newt/downloader/downloader.go +++ b/newt/downloader/downloader.go @@ -314,6 +314,57 @@ func getCommits(path string) (map[string]Commit, error) { return m, nil } +// urlsEquivalent determines if two URLs point to the same repo. URLs are +// equivalent if: +// 1. The strings are identical after the optional ".git" suffixes are +// stripped, +// OR +// 2. One is a "git@" URL and the other is an "https://" URL for the same +// repo. For example: +// g...@github.com:apache/mynewt-core.git +// https://github.com/apache/mynewt-core +func urlsEquivalent(a string, b string) bool { + // Strip optional `.git` suffix. + a = strings.TrimSuffix(a, ".git") + b = strings.TrimSuffix(b, ".git") + + if a == b { + return true + } + + gitRE := regexp.MustCompile(`git@([^:]+):(.*)`) + + parseGit := func(s string) string { + groups := gitRE.FindStringSubmatch(s) + if len(groups) != 3 { + return "" + } + + return groups[1] + "/" + groups[2] + } + + parseHttps := func(s string) string { + if !strings.HasPrefix(s, "https://") { + return "" + } + + return strings.TrimPrefix(s, "https://") + } + + var git string + var https string + + git = parseGit(a) + if git == "" { + git = parseGit(b) + https = parseHttps(a) + } else { + https = parseHttps(b) + } + + return git != "" && git == https +} + // init populates a generic downloader with branch and tag information. func (gd *GenericDownloader) init(path string) error { cmap, err := getCommits(path) @@ -848,7 +899,7 @@ func (gd *GithubDownloader) FixupOrigin(path string) error { // Use the public URL, i.e., hide the login and password. _, publicUrl := gd.remoteUrls() - if curUrl == publicUrl { + if urlsEquivalent(curUrl, publicUrl) { return nil } @@ -925,7 +976,7 @@ func (gd *GitDownloader) FixupOrigin(path string) error { return err } - if curUrl == gd.Url { + if urlsEquivalent(curUrl, gd.Url) { return nil }