// Copyright 2019 The Gitea Authors. All rights reserved. // Copyright 2015 The Gogs Authors. All rights reserved. // SPDX-License-Identifier: MIT package git import ( "context" giturl "code.gitea.io/gitea/modules/git/url" ) // CommitSubmoduleFile represents a file with submodule type. type CommitSubmoduleFile struct { refURL string parsedURL *giturl.RepositoryURL parsed bool refID string repoLink string } // NewCommitSubmoduleFile create a new submodule file func NewCommitSubmoduleFile(refURL, refID string) *CommitSubmoduleFile { return &CommitSubmoduleFile{refURL: refURL, refID: refID} } func (sf *CommitSubmoduleFile) RefID() string { return sf.refID // this function is only used in templates } // SubmoduleWebLink tries to make some web links for a submodule, it also works on "nil" receiver func (sf *CommitSubmoduleFile) SubmoduleWebLink(ctx context.Context, optCommitID ...string) *SubmoduleWebLink { if sf == nil { return nil } if !sf.parsed { sf.parsed = true parsedURL, err := giturl.ParseRepositoryURL(ctx, sf.refURL) if err != nil { return nil } sf.parsedURL = parsedURL sf.repoLink = giturl.MakeRepositoryWebLink(sf.parsedURL) } var commitLink string if len(optCommitID) == 2 { commitLink = sf.repoLink + "/compare/" + optCommitID[0] + "..." + optCommitID[1] } else if len(optCommitID) == 1 { commitLink = sf.repoLink + "/commit/" + optCommitID[0] } else { commitLink = sf.repoLink + "/commit/" + sf.refID } return &SubmoduleWebLink{RepoWebLink: sf.repoLink, CommitWebLink: commitLink} }