2014-09-22 17:01:19 -04:00
// 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.
2014-09-22 10:43:16 +08:00
package git
2014-09-22 17:01:19 -04:00
import (
"strings"
2015-11-03 22:49:06 -05:00
2015-10-24 22:46:13 +02:00
"github.com/gogits/gogs/modules/setting"
2014-09-22 17:01:19 -04:00
)
2014-09-22 10:43:16 +08:00
type SubModule struct {
Name string
Url string
}
2014-09-22 17:01:19 -04:00
// 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.
2015-10-24 22:46:13 +02:00
func ( sf * SubModuleFile ) RefUrl ( ) string {
2015-03-10 03:08:17 +00:00
if sf . refUrl == "" {
return ""
}
2014-09-22 17:01:19 -04:00
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 {
2015-10-24 22:03:08 +02:00
// fix problem with reverse proxy works only with local server
2015-11-03 22:49:06 -05:00
if strings . Contains ( setting . AppUrl , url [ i + 1 : j ] ) {
2015-10-24 22:46:13 +02:00
return setting . AppUrl + url [ j + 1 : ]
2015-10-24 22:03:08 +02:00
} else {
return "http://" + url [ i + 1 : j ] + "/" + url [ j + 1 : ]
}
2014-09-22 17:01:19 -04:00
}
2015-10-24 22:03:08 +02:00
2014-09-22 17:01:19 -04:00
return url
}
// RefId returns reference ID.
func ( sf * SubModuleFile ) RefId ( ) string {
return sf . refId
}