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.

58 lines
1.2 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. )
  8. type SubModule struct {
  9. Name string
  10. Url string
  11. }
  12. // SubModuleFile represents a file with submodule type.
  13. type SubModuleFile struct {
  14. *Commit
  15. refUrl string
  16. refId string
  17. }
  18. func NewSubModuleFile(c *Commit, refUrl, refId string) *SubModuleFile {
  19. return &SubModuleFile{
  20. Commit: c,
  21. refUrl: refUrl,
  22. refId: refId,
  23. }
  24. }
  25. // RefUrl guesses and returns reference URL.
  26. func (sf *SubModuleFile) RefUrl() string {
  27. url := strings.TrimSuffix(sf.refUrl, ".git")
  28. // git://xxx/user/repo
  29. if strings.HasPrefix(url, "git://") {
  30. return "http://" + strings.TrimPrefix(url, "git://")
  31. }
  32. // http[s]://xxx/user/repo
  33. if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
  34. return url
  35. }
  36. // sysuser@xxx:user/repo
  37. i := strings.Index(url, "@")
  38. j := strings.LastIndex(url, ":")
  39. if i > -1 && j > -1 {
  40. return "http://" + url[i+1:j] + "/" + url[j+1:]
  41. }
  42. return url
  43. }
  44. // RefId returns reference ID.
  45. func (sf *SubModuleFile) RefId() string {
  46. return sf.refId
  47. }