diff options
author | Michael Boke <michael@mbict.nl> | 2014-10-03 22:51:07 +0200 |
---|---|---|
committer | Michael Boke <michael@mbict.nl> | 2014-10-03 22:51:07 +0200 |
commit | ba1270df2d3d835b397317f133963e7b517242f1 (patch) | |
tree | 1265a142a1fd9951d30ae11648e7fbfb5806e594 /modules/git/submodule.go | |
parent | ba0feadc34400cb91ff23f66096884d862651cdd (diff) | |
parent | 405ee14711ab946bd709ec28a526890c40cbc03b (diff) |
Merge remote-tracking branch 'upstream/master'
Conflicts:
conf/app.ini
Diffstat (limited to 'modules/git/submodule.go')
-rw-r--r-- | modules/git/submodule.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/modules/git/submodule.go b/modules/git/submodule.go new file mode 100644 index 00000000..6927f8cb --- /dev/null +++ b/modules/git/submodule.go @@ -0,0 +1,58 @@ +// 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" +) + +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 { + 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 { + return "http://" + url[i+1:j] + "/" + url[j+1:] + } + return url +} + +// RefId returns reference ID. +func (sf *SubModuleFile) RefId() string { + return sf.refId +} |