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
        }
 

Reply via email to