// Copyright 2014 The Gogs Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. package git import ( "strings" "github.com/gogits/gogs/modules/setting" ) type SubModule struct { Name string Url string } // SubModuleFile represents a file with submodule type. type SubModuleFile struct { *Commit refUrl string refId string } func NewSubModuleFile(c *Commit, refUrl, refId string) *SubModuleFile { return &SubModuleFile{ Commit: c, refUrl: refUrl, refId: refId, } } // RefUrl guesses and returns reference URL. func (sf *SubModuleFile) RefUrl() string { if sf.refUrl == "" { return "" } url := strings.TrimSuffix(sf.refUrl, ".git") // git://xxx/user/repo if strings.HasPrefix(url, "git://") { return "http://" + strings.TrimPrefix(url, "git://") } // http[s]://xxx/user/repo if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") { return url } // sysuser@xxx:user/repo i := strings.Index(url, "@") j := strings.LastIndex(url, ":") if i > -1 && j > -1 { // fix problem with reverse proxy works only with local server if strings.Contains(setting.AppUrl, url[i+1:j]) { return setting.AppUrl + url[j+1:] } else { return "http://" + url[i+1:j] + "/" + url[j+1:] } } return url } // RefId returns reference ID. func (sf *SubModuleFile) RefId() string { return sf.refId }