You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.4 KiB

  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package git
  5. import (
  6. "strings"
  7. "github.com/gogits/gogs/modules/setting"
  8. )
  9. type SubModule struct {
  10. Name string
  11. Url string
  12. }
  13. // SubModuleFile represents a file with submodule type.
  14. type SubModuleFile struct {
  15. *Commit
  16. refUrl string
  17. refId string
  18. }
  19. func NewSubModuleFile(c *Commit, refUrl, refId string) *SubModuleFile {
  20. return &SubModuleFile{
  21. Commit: c,
  22. refUrl: refUrl,
  23. refId: refId,
  24. }
  25. }
  26. // RefUrl guesses and returns reference URL.
  27. func (sf *SubModuleFile) RefUrl() string {
  28. if sf.refUrl == "" {
  29. return ""
  30. }
  31. url := strings.TrimSuffix(sf.refUrl, ".git")
  32. // git://xxx/user/repo
  33. if strings.HasPrefix(url, "git://") {
  34. return "http://" + strings.TrimPrefix(url, "git://")
  35. }
  36. // http[s]://xxx/user/repo
  37. if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
  38. return url
  39. }
  40. // sysuser@xxx:user/repo
  41. i := strings.Index(url, "@")
  42. j := strings.LastIndex(url, ":")
  43. if i > -1 && j > -1 {
  44. // fix problem with reverse proxy works only with local server
  45. if strings.Contains(setting.AppUrl,url[i+1:j]) {
  46. return setting.AppUrl + url[j+1:]
  47. } else {
  48. return "http://" + url[i+1:j] + "/" + url[j+1:]
  49. }
  50. }
  51. return url
  52. }
  53. // RefId returns reference ID.
  54. func (sf *SubModuleFile) RefId() string {
  55. return sf.refId
  56. }