mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
2978 files. The fork is 2026-07-15 (rebrand: gitea.dev -> github.com/hanzoai/git), so 2026 is the year, and "Copyright 2026 Hanzo AI, Inc." was already the form used by the handful of files that had ours. Shape is now: // Copyright 2026 Hanzo AI, Inc. All rights reserved. // Copyright 2015 The Gogs Authors. All rights reserved. // Copyright 2019 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT Ours on top, theirs retained verbatim. Retained because MIT requires it, and separately because they are true — those authors did write that code. Not renamed to "The Git Authors": Git is a different project under a different license, and putting its name here would attribute this code to people who have nothing to do with it. Adding our line is the fix; overwriting theirs would have been both a licence violation and a false statement. gofmt still reports import-order drift in some of these files. It predates this change (verified against a stash) and is left alone rather than burying a one-line-per-file legal change under 3000 files of unrelated reordering. Build clean. Co-authored-by: Hanzo Dev <[email protected]>
71 lines
2.4 KiB
Go
71 lines
2.4 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// Copyright 2015 The Gogs Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package git
|
|
|
|
import (
|
|
"context"
|
|
"path"
|
|
"strings"
|
|
|
|
giturl "github.com/hanzoai/git/modules/git/url"
|
|
"github.com/hanzoai/git/modules/util"
|
|
)
|
|
|
|
// CommitSubmoduleFile represents a file with submodule type.
|
|
type CommitSubmoduleFile struct {
|
|
repoLink string
|
|
fullPath string
|
|
refURL string
|
|
refID string
|
|
|
|
parsed bool
|
|
parsedTargetLink string
|
|
}
|
|
|
|
// NewCommitSubmoduleFile create a new submodule file
|
|
func NewCommitSubmoduleFile(repoLink, fullPath, refURL, refID string) *CommitSubmoduleFile {
|
|
return &CommitSubmoduleFile{repoLink: repoLink, fullPath: fullPath, refURL: refURL, refID: refID}
|
|
}
|
|
|
|
// RefID returns the commit ID of the submodule, it returns empty string for nil receiver
|
|
func (sf *CommitSubmoduleFile) RefID() string {
|
|
if sf == nil {
|
|
return ""
|
|
}
|
|
return sf.refID
|
|
}
|
|
|
|
func (sf *CommitSubmoduleFile) getWebLinkInTargetRepo(ctx context.Context, moreLinkPath string) *SubmoduleWebLink {
|
|
if sf == nil || sf.refURL == "" {
|
|
return nil
|
|
}
|
|
if strings.HasPrefix(sf.refURL, "../") {
|
|
targetLink := path.Join(sf.repoLink, sf.refURL)
|
|
return &SubmoduleWebLink{RepoWebLink: targetLink, CommitWebLink: targetLink + moreLinkPath}
|
|
}
|
|
if !sf.parsed {
|
|
sf.parsed = true
|
|
parsedURL, err := giturl.ParseRepositoryURL(ctx, sf.refURL)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
sf.parsedTargetLink = giturl.MakeRepositoryWebLink(parsedURL)
|
|
}
|
|
return &SubmoduleWebLink{RepoWebLink: sf.parsedTargetLink, CommitWebLink: sf.parsedTargetLink + moreLinkPath}
|
|
}
|
|
|
|
// SubmoduleWebLinkTree tries to make the submodule's tree link in its own repo, it also works on "nil" receiver
|
|
// It returns nil if the submodule does not have a valid URL or is nil
|
|
func (sf *CommitSubmoduleFile) SubmoduleWebLinkTree(ctx context.Context, optCommitID ...string) *SubmoduleWebLink {
|
|
return sf.getWebLinkInTargetRepo(ctx, "/tree/"+util.OptionalArg(optCommitID, sf.RefID()))
|
|
}
|
|
|
|
// SubmoduleWebLinkCompare tries to make the submodule's compare link in its own repo, it also works on "nil" receiver
|
|
// It returns nil if the submodule does not have a valid URL or is nil
|
|
func (sf *CommitSubmoduleFile) SubmoduleWebLinkCompare(ctx context.Context, commitID1, commitID2 string) *SubmoduleWebLink {
|
|
return sf.getWebLinkInTargetRepo(ctx, "/compare/"+commitID1+"..."+commitID2)
|
|
}
|