git

package
v0.0.0-...-bb67ff0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 17, 2025 License: MIT Imports: 40 Imported by: 0

README

Git Module

This module is merged from https://github.com/go-gitea/git which is a Go module to access Git through shell commands. Now it's a part of gitea's main repository for easier pull request.

Documentation

Index

Examples

Constants

View Source
const (
	CmdVerbUploadPack      = "git-upload-pack"
	CmdVerbUploadArchive   = "git-upload-archive"
	CmdVerbReceivePack     = "git-receive-pack"
	CmdVerbLfsAuthenticate = "git-lfs-authenticate"
	CmdVerbLfsTransfer     = "git-lfs-transfer"

	CmdSubVerbLfsUpload   = "upload"
	CmdSubVerbLfsDownload = "download"
)
View Source
const (
	SigningKeyFormatOpenPGP = "openpgp" // for GPG keys, the expected default of git cli
	SigningKeyFormatSSH     = "ssh"
)

Based on https://git-scm.com/docs/git-config#Documentation/git-config.txt-gpgformat

View Source
const (
	// RemotePrefix is the base directory of the remotes information of git.
	RemotePrefix = "refs/remotes/"
	// PullPrefix is the base directory of the pull information of git.
	PullPrefix = "refs/pull/"
)
View Source
const BranchPrefix = "refs/heads/"

BranchPrefix base dir of the branch information file store on git

View Source
const ForPrefix = "refs/for/"

ForPrefix special ref to create a pull request: refs/for/<target-branch>/<topic-branch> or refs/for/<targe-branch> -o topic='<topic-branch>'

View Source
const NotesRef = "refs/notes/commits"

NotesRef is the git ref where Gitea will look for git-notes data. The value ("refs/notes/commits") is the default ref used by git-notes.

View Source
const RequiredVersion = "2.0.0" // the minimum Git version required
View Source
const TagPrefix = "refs/tags/"

TagPrefix tags prefix path on the repository

Variables

View Source
var ErrNotValidHook = errors.New("not a valid Git hook")

ErrNotValidHook error when a git hook is not valid

Functions

func AddChanges

func AddChanges(ctx context.Context, repoPath string, all bool, files ...string) error

AddChanges marks local changes to be ready for commit.

func AddTemplateSubmoduleIndexes

func AddTemplateSubmoduleIndexes(ctx context.Context, repoPath string, submodules []TemplateSubmoduleCommit) error

AddTemplateSubmoduleIndexes Adds the given submodules to the git index. It is only for generating new repos based on existing template, requires the .gitmodules file to be already present in the work dir.

func AllCommitsCount

func AllCommitsCount(ctx context.Context, repoPath string, hidePRRefs bool, files ...string) (int64, error)

AllCommitsCount returns count of all commits in repository

func BinToHex

func BinToHex(objectFormat ObjectFormat, sha, out []byte) []byte

BinToHexHeash converts a binary Hash into a hex encoded one. Input and output can be the same byte slice to support in place conversion without allocations. This is at least 100x quicker that hex.EncodeToString

func Clone

func Clone(ctx context.Context, from, to string, opts CloneRepoOptions) error

Clone clones original repository to target path.

func CommitChanges

func CommitChanges(ctx context.Context, repoPath string, opts CommitChangesOptions) error

CommitChanges commits local changes with given committer, author and message. If author is nil, it will be the same as committer.

func CommitsCount

func CommitsCount(ctx context.Context, opts CommitsCountOptions) (int64, error)

CommitsCount returns number of total commits of until given revision.

func CutDiffAroundLine

func CutDiffAroundLine(originalDiff io.Reader, line int64, old bool, numbersOfLine int) (string, error)

CutDiffAroundLine cuts a diff of a file in way that only the given line + numberOfLine above it will be shown it also recalculates hunks and adds the appropriate headers to the new diff. Warning: Only one-file diffs are allowed.

Example
const diff = `diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,6 @@
 # gitea-github-migrator
+
+ Build Status
- Latest Release
 Docker Pulls
+ cut off
+ cut off`
result, _ := CutDiffAroundLine(strings.NewReader(diff), 4, false, 3)
println(result)

func DiscardFull

func DiscardFull(rd *bufio.Reader, discard int64) error

func GetAffectedFiles

func GetAffectedFiles(repo *Repository, branchName, oldCommitID, newCommitID string, env []string) ([]string, error)

GetAffectedFiles returns the affected files between two commits

func GetDefaultBranch

func GetDefaultBranch(ctx context.Context, repoPath string) (string, error)

func GetDiffShortStatByCmdArgs

func GetDiffShortStatByCmdArgs(ctx context.Context, repoPath string, trustedArgs gitcmd.TrustedCmdArgs, dynamicArgs ...string) (numFiles, totalAdditions, totalDeletions int, err error)

GetDiffShortStatByCmdArgs counts number of changed files, number of additions and deletions TODO: it can be merged with another "GetDiffShortStat" in the future

func GetFullCommitID

func GetFullCommitID(ctx context.Context, repoPath, shortID string) (string, error)

GetFullCommitID returns full length (40) of commit ID by given short SHA in a repository.

func GetLastCommitForPaths

func GetLastCommitForPaths(ctx context.Context, commit *Commit, treePath string, paths []string) (map[string]*Commit, error)

GetLastCommitForPaths returns last commit information

func GetLatestCommitTime

func GetLatestCommitTime(ctx context.Context, repoPath string) (time.Time, error)

GetLatestCommitTime returns time for latest commit in repository (across all branches)

func GetNote

func GetNote(ctx context.Context, repo *Repository, commitID string, note *Note) error

GetNote retrieves the git-notes data for a given commit. FIXME: Add LastCommitCache support

func GetRawDiff

func GetRawDiff(repo *Repository, commitID string, diffType RawDiffType, writer io.Writer) error

GetRawDiff dumps diff results of repository in given commit ID to io.Writer.

func GetRemoteAddress

func GetRemoteAddress(ctx context.Context, repoPath, remoteName string) (string, error)

GetRemoteAddress returns remote url of git repository in the repoPath with special remote name

func GetRepoRawDiffForFile

func GetRepoRawDiffForFile(repo *Repository, startCommit, endCommit string, diffType RawDiffType, file string, writer io.Writer) error

GetRepoRawDiffForFile dumps diff results of file in given commit ID to io.Writer according given repository

func GetReverseRawDiff

func GetReverseRawDiff(ctx context.Context, repoPath, commitID string, writer io.Writer) error

GetReverseRawDiff dumps the reverse diff results of repository in given commit ID to io.Writer.

func HashFilePathForWebUI

func HashFilePathForWebUI(s string) string

func InitFull

func InitFull() (err error)

InitFull initializes git module with version check and change global variables, sync gitconfig. It should only be called once at the beginning of the program initialization (TestMain/GlobalInitInstalled) as this code makes unsynchronized changes to variables.

func InitRepository

func InitRepository(ctx context.Context, repoPath string, bare bool, objectFormatName string) error

InitRepository initializes a new Git repository.

func InitSimple

func InitSimple() error

InitSimple initializes git module with a very simple step, no config changes, no global command arguments. This method doesn't change anything to filesystem. At the moment, it is only used by some Gitea sub-commands.

func IsAllowedVerbForServe

func IsAllowedVerbForServe(verb string) bool

func IsAllowedVerbForServeLfs

func IsAllowedVerbForServeLfs(verb string) bool

func IsBranchExist

func IsBranchExist(ctx context.Context, repoPath, name string) bool

IsBranchExist returns true if given branch exists in the repository.

func IsEmptyCommitID

func IsEmptyCommitID(commitID string) bool

func IsErrBranchNotExist

func IsErrBranchNotExist(err error) bool

IsErrBranchNotExist checks if an error is a ErrBranchNotExist.

func IsErrCanceledOrKilled

func IsErrCanceledOrKilled(err error) bool

func IsErrInvalidCloneAddr

func IsErrInvalidCloneAddr(err error) bool

IsErrInvalidCloneAddr checks if an error is a ErrInvalidCloneAddr.

func IsErrMoreThanOne

func IsErrMoreThanOne(err error) bool

IsErrMoreThanOne checks if an error is a ErrMoreThanOne

func IsErrNotExist

func IsErrNotExist(err error) bool

IsErrNotExist if some error is ErrNotExist

func IsErrPushOutOfDate

func IsErrPushOutOfDate(err error) bool

IsErrPushOutOfDate checks if an error is a ErrPushOutOfDate.

func IsErrPushRejected

func IsErrPushRejected(err error) bool

IsErrPushRejected checks if an error is a ErrPushRejected.

func IsReferenceExist

func IsReferenceExist(ctx context.Context, repoPath, name string) bool

IsReferenceExist returns true if given reference exists in the repository.

func IsRemoteNotExistError

func IsRemoteNotExistError(err error) bool

IsRemoteNotExistError checks the prefix of the error message to see whether a remote does not exist.

func IsRepoURLAccessible

func IsRepoURLAccessible(ctx context.Context, url string) bool

IsRepoURLAccessible checks if given repository URL is accessible.

func IsStringLikelyCommitID

func IsStringLikelyCommitID(objFmt ObjectFormat, s string, minLength ...int) bool

func IsValidHookName

func IsValidHookName(name string) bool

IsValidHookName returns true if given name is a valid Git hook.

func IsValidObjectFormat

func IsValidObjectFormat(name string) bool

func IsValidRefPattern

func IsValidRefPattern(name string) bool

IsValidRefPattern ensures that the provided string could be a valid reference

func LogNameStatusRepo

func LogNameStatusRepo(ctx context.Context, repository, head, treepath string, paths ...string) (*bufio.Reader, func())

LogNameStatusRepo opens git log --raw in the provided repo and returns a stdin pipe, a stdout reader and cancel function

func ParseBool

func ParseBool(value string) (result, valid bool)

ParseBool returns the boolean value represented by the string as per git's git_config_bool true will be returned for the result if the string is empty, but valid will be false. "true", "yes", "on" are all true, true "false", "no", "off" are all false, true 0 is false, true Any other integer is true, true Anything else will return false, false

func ParseCatFileTreeLine

func ParseCatFileTreeLine(objectFormat ObjectFormat, rd *bufio.Reader, modeBuf, fnameBuf, shaBuf []byte) (mode, fname, sha []byte, n int, err error)

ParseCatFileTreeLine reads an entry from a tree in a cat-file --batch stream This carefully avoids allocations - except where fnameBuf is too small. It is recommended therefore to pass in an fnameBuf large enough to avoid almost all allocations

Each line is composed of: <mode-in-ascii-dropping-initial-zeros> SP <fname> NUL <binary HASH>

We don't attempt to convert the raw HASH to save a lot of time

func ParseDiffHunkString

func ParseDiffHunkString(diffHunk string) (leftLine, leftHunk, rightLine, rightHunk int)

ParseDiffHunkString parse the diff hunk content and return

func ParseRemoteAddr

func ParseRemoteAddr(remoteAddr, authUsername, authPassword string) (string, error)

ParseRemoteAddr checks if given remote address is valid, and returns composed URL with needed username and password.

func Push

func Push(ctx context.Context, repoPath string, opts PushOptions) error

Push pushs local commits to given remote branch.

func ReadBatchLine

func ReadBatchLine(rd *bufio.Reader) (sha []byte, typ string, size int64, err error)

ReadBatchLine reads the header line from cat-file --batch We expect: <oid> SP <type> SP <size> LF then leaving the rest of the stream "<contents> LF" to be read

func ReadTagObjectID

func ReadTagObjectID(rd *bufio.Reader, size int64) (string, error)

ReadTagObjectID reads a tag object ID hash from a cat-file --batch stream, throwing away the rest of the stream.

func ReadTreeID

func ReadTreeID(rd *bufio.Reader, size int64) (string, error)

ReadTreeID reads a tree ID from a cat-file --batch stream, throwing away the rest of the stream.

func SanitizeRefPattern

func SanitizeRefPattern(name string) string

func SplitCommitTitleBody

func SplitCommitTitleBody(commitMessage string, titleRuneLimit int) (title, body string)

func WalkGitLog

func WalkGitLog(ctx context.Context, repo *Repository, head *Commit, treepath string, paths ...string) (map[string]string, error)

WalkGitLog walks the git log --name-status for the head commit in the provided treepath and files

func WalkShowRef

func WalkShowRef(ctx context.Context, repoPath string, extraArgs gitcmd.TrustedCmdArgs, skip, limit int, walkfn func(sha1, refname string) error) (countAll int, err error)

func WriteCommitGraph

func WriteCommitGraph(ctx context.Context, repoPath string) error

WriteCommitGraph write commit graph to speed up repo access this requires git v2.18 to be installed

Types

type ArchiveType

type ArchiveType int

ArchiveType archive types

const (
	ArchiveUnknown ArchiveType = iota
	ArchiveZip                 // 1
	ArchiveTarGz               // 2
	ArchiveBundle              // 3
)

func SplitArchiveNameType

func SplitArchiveNameType(s string) (string, ArchiveType)

func (ArchiveType) String

func (a ArchiveType) String() string

String converts an ArchiveType to string: the extension of the archive file without prefix dot

type Batch

type Batch struct {
	Reader *bufio.Reader
	Writer WriteCloserError
	// contains filtered or unexported fields
}

func NewBatch

func NewBatch(ctx context.Context, repoPath string) (*Batch, error)

NewBatch creates a new batch for the given repository, the Close must be invoked before release the batch

func NewBatchCheck

func NewBatchCheck(ctx context.Context, repoPath string) (*Batch, error)

func (*Batch) Close

func (b *Batch) Close()

type BlamePart

type BlamePart struct {
	Sha          string
	Lines        []string
	PreviousSha  string
	PreviousPath string
}

BlamePart represents block of blame - continuous lines with one sha

type BlameReader

type BlameReader struct {
	// contains filtered or unexported fields
}

BlameReader returns part of file blame one by one

func CreateBlameReader

func CreateBlameReader(ctx context.Context, objectFormat ObjectFormat, repoPath string, commit *Commit, file string, bypassBlameIgnore bool) (rd *BlameReader, err error)

CreateBlameReader creates reader for given repository, commit and file

func (*BlameReader) Close

func (r *BlameReader) Close() error

Close BlameReader - don't run NextPart after invoking that

func (*BlameReader) NextPart

func (r *BlameReader) NextPart() (*BlamePart, error)

NextPart returns next part of blame (sequential code lines with the same commit)

func (*BlameReader) UsesIgnoreRevs

func (r *BlameReader) UsesIgnoreRevs() bool

type Blob

type Blob struct {
	ID ObjectID
	// contains filtered or unexported fields
}

Blob represents a Git object.

func (*Blob) DataAsync

func (b *Blob) DataAsync() (io.ReadCloser, error)

DataAsync gets a ReadCloser for the contents of a blob without reading it all. Calling the Close function on the result will discard all unread output.

func (*Blob) GetBlobBytes

func (b *Blob) GetBlobBytes(limit int64) ([]byte, error)

GetBlobBytes Gets the limited content of the blob

func (*Blob) GetBlobContent

func (b *Blob) GetBlobContent(limit int64) (string, error)

GetBlobContent Gets the limited content of the blob as raw text

func (*Blob) GetBlobContentBase64

func (b *Blob) GetBlobContentBase64(originContent *strings.Builder) (string, error)

GetBlobContentBase64 Reads the content of the blob with a base64 encoding and returns the encoded string

func (*Blob) GetBlobLineCount

func (b *Blob) GetBlobLineCount(w io.Writer) (int, error)

GetBlobLineCount gets line count of the blob. It will also try to write the content to w if it's not nil, then we could pre-fetch the content without reading it again.

func (*Blob) GuessContentType

func (b *Blob) GuessContentType() (typesniffer.SniffedType, error)

GuessContentType guesses the content type of the blob.

func (*Blob) Name

func (b *Blob) Name() string

Name returns name of the tree entry this blob object was created from (or empty string)

func (*Blob) Size

func (b *Blob) Size() int64

Size returns the uncompressed size of the blob

type CloneRepoOptions

type CloneRepoOptions struct {
	Timeout       time.Duration
	Mirror        bool
	Bare          bool
	Quiet         bool
	Branch        string
	Shared        bool
	NoCheckout    bool
	Depth         int
	Filter        string
	SkipTLSVerify bool
}

CloneRepoOptions options when clone a repository

type CodeActivityAuthor

type CodeActivityAuthor struct {
	Name    string
	Email   string
	Commits int64
}

CodeActivityAuthor represents git statistics data for commit authors

type CodeActivityStats

type CodeActivityStats struct {
	AuthorCount              int64
	CommitCount              int64
	ChangedFiles             int64
	Additions                int64
	Deletions                int64
	CommitCountInAllBranches int64
	Authors                  []*CodeActivityAuthor
}

CodeActivityStats represents git statistics data

type Commit

type Commit struct {
	Tree // FIXME: bad design, this field can be nil if the commit is from "last commit cache"

	ID            ObjectID
	Author        *Signature // never nil
	Committer     *Signature // never nil
	CommitMessage string
	Signature     *CommitSignature

	Parents []ObjectID // ID strings
	// contains filtered or unexported fields
}

Commit represents a git commit.

func CommitFromReader

func CommitFromReader(gitRepo *Repository, objectID ObjectID, reader io.Reader) (*Commit, error)

CommitFromReader will generate a Commit from a provided reader We need this to interpret commits from cat-file or cat-file --batch

If used as part of a cat-file --batch stream you need to limit the reader to the correct size

func (*Commit) CacheCommit

func (c *Commit) CacheCommit(ctx context.Context) error

CacheCommit will cache the commit from the gitRepository

func (*Commit) CommitsBefore

func (c *Commit) CommitsBefore() ([]*Commit, error)

CommitsBefore returns all the commits before current revision

func (*Commit) CommitsBeforeLimit

func (c *Commit) CommitsBeforeLimit(num int) ([]*Commit, error)

CommitsBeforeLimit returns num commits before current revision

func (*Commit) CommitsBeforeUntil

func (c *Commit) CommitsBeforeUntil(commitID string) ([]*Commit, error)

CommitsBeforeUntil returns the commits between commitID to current revision

func (*Commit) CommitsByRange

func (c *Commit) CommitsByRange(page, pageSize int, not, since, until string) ([]*Commit, error)

CommitsByRange returns the specific page commits before current revision, every page's number default by CommitsRangeSize

func (*Commit) CommitsCount

func (c *Commit) CommitsCount() (int64, error)

CommitsCount returns number of total commits of until current revision.

func (*Commit) FileChangedSinceCommit

func (c *Commit) FileChangedSinceCommit(filename, pastCommit string) (bool, error)

FileChangedSinceCommit Returns true if the file given has changed since the past commit YOU MUST ENSURE THAT pastCommit is a valid commit ID.

func (*Commit) GetBranchName

func (c *Commit) GetBranchName() (string, error)

GetBranchName gets the closest branch name (as returned by 'git name-rev --name-only')

func (*Commit) GetCommitByPath

func (c *Commit) GetCommitByPath(relpath string) (*Commit, error)

GetCommitByPath return the commit of relative path object.

func (*Commit) GetFileContent

func (c *Commit) GetFileContent(filename string, limit int) (string, error)

GetFileContent reads a file content as a string or returns false if this was not possible

func (*Commit) GetFilesChangedSinceCommit

func (c *Commit) GetFilesChangedSinceCommit(pastCommit string) ([]string, error)

GetFilesChangedSinceCommit get all changed file names between pastCommit to current revision

func (*Commit) GetRepositoryDefaultPublicGPGKey

func (c *Commit) GetRepositoryDefaultPublicGPGKey(forceUpdate bool) (*GPGSettings, error)

GetRepositoryDefaultPublicGPGKey returns the default public key for this commit

func (*Commit) GetSubModule

func (c *Commit) GetSubModule(entryName string) (*SubModule, error)

GetSubModule gets the submodule by the entry name. It returns "nil, nil" if the submodule does not exist, caller should always remember to check the "nil"

func (*Commit) GetSubModules

func (c *Commit) GetSubModules() (*ObjectCache[*SubModule], error)

GetSubModules get all the submodules of current revision git tree

func (*Commit) HasFile

func (c *Commit) HasFile(filename string) (bool, error)

HasFile returns true if the file given exists on this commit This does only mean it's there - it does not mean the file was changed during the commit.

func (*Commit) HasPreviousCommit

func (c *Commit) HasPreviousCommit(objectID ObjectID) (bool, error)

HasPreviousCommit returns true if a given commitHash is contained in commit's parents

func (*Commit) IsForcePush

func (c *Commit) IsForcePush(oldCommitID string) (bool, error)

IsForcePush returns true if a push from oldCommitHash to this is a force push

func (*Commit) Message

func (c *Commit) Message() string

Message returns the commit message. Same as retrieving CommitMessage directly.

func (*Commit) Parent

func (c *Commit) Parent(n int) (*Commit, error)

Parent returns n-th parent (0-based index) of the commit.

func (*Commit) ParentCount

func (c *Commit) ParentCount() int

ParentCount returns number of parents of the commit. 0 if this is the root commit, otherwise 1,2, etc.

func (*Commit) ParentID

func (c *Commit) ParentID(n int) (ObjectID, error)

ParentID returns oid of n-th parent (0-based index). It returns nil if no such parent exists.

func (*Commit) SearchCommits

func (c *Commit) SearchCommits(opts SearchCommitsOptions) ([]*Commit, error)

SearchCommits returns the commits match the keyword before current revision

func (*Commit) Summary

func (c *Commit) Summary() string

Summary returns first line of commit message. The string is forced to be valid UTF8

type CommitChangesOptions

type CommitChangesOptions struct {
	Committer *Signature
	Author    *Signature
	Message   string
}

CommitChangesOptions the options when a commit created

type CommitFileStatus

type CommitFileStatus struct {
	Added    []string
	Removed  []string
	Modified []string
}

CommitFileStatus represents status of files in a commit.

func GetCommitFileStatus

func GetCommitFileStatus(ctx context.Context, repoPath, commitID string) (*CommitFileStatus, error)

GetCommitFileStatus returns file status of commit in given repository.

func NewCommitFileStatus

func NewCommitFileStatus() *CommitFileStatus

NewCommitFileStatus creates a CommitFileStatus

type CommitInfo

type CommitInfo struct {
	Entry         *TreeEntry
	Commit        *Commit
	SubmoduleFile *CommitSubmoduleFile
}

CommitInfo describes the first commit with the provided entry

type CommitSignature

type CommitSignature struct {
	Signature string
	Payload   string
}

CommitSignature represents a git commit signature part.

type CommitSubmoduleFile

type CommitSubmoduleFile struct {
	// contains filtered or unexported fields
}

CommitSubmoduleFile represents a file with submodule type.

func GetCommitInfoSubmoduleFile

func GetCommitInfoSubmoduleFile(repoLink, fullPath string, commit *Commit, refCommitID ObjectID) (*CommitSubmoduleFile, error)

func NewCommitSubmoduleFile

func NewCommitSubmoduleFile(repoLink, fullPath, refURL, refID string) *CommitSubmoduleFile

NewCommitSubmoduleFile create a new submodule file

func (*CommitSubmoduleFile) RefID

func (sf *CommitSubmoduleFile) RefID() string

RefID returns the commit ID of the submodule, it returns empty string for nil receiver

func (*CommitSubmoduleFile) SubmoduleWebLinkCompare

func (sf *CommitSubmoduleFile) SubmoduleWebLinkCompare(ctx context.Context, commitID1, commitID2 string) *SubmoduleWebLink

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 (*CommitSubmoduleFile) SubmoduleWebLinkTree

func (sf *CommitSubmoduleFile) SubmoduleWebLinkTree(ctx context.Context, optCommitID ...string) *SubmoduleWebLink

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

type CommitTreeOpts

type CommitTreeOpts struct {
	Parents    []string
	Message    string
	Key        *SigningKey
	NoGPGSign  bool
	AlwaysSign bool
}

CommitTreeOpts represents the possible options to CommitTree

type CommitsByFileAndRangeOptions

type CommitsByFileAndRangeOptions struct {
	Revision string
	File     string
	Not      string
	Page     int
	Since    string
	Until    string
}

type CommitsCountOptions

type CommitsCountOptions struct {
	RepoPath string
	Not      string
	Revision []string
	RelPath  []string
	Since    string
	Until    string
}

CommitsCountOptions the options when counting commits

type DeleteBranchOptions

type DeleteBranchOptions struct {
	Force bool
}

DeleteBranchOptions Option(s) for delete branch

type DivergeObject

type DivergeObject struct {
	Ahead  int
	Behind int
}

DivergeObject represents commit count diverging commits

func GetDivergingCommits

func GetDivergingCommits(ctx context.Context, repoPath, baseBranch, targetBranch string) (do DivergeObject, err error)

GetDivergingCommits returns the number of commits a targetBranch is ahead or behind a baseBranch

type EmptyReader

type EmptyReader struct{}

func (EmptyReader) Read

func (EmptyReader) Read(p []byte) (int, error)

type Entries

type Entries []*TreeEntry

Entries a list of entry

func (Entries) CustomSort

func (tes Entries) CustomSort(cmp func(s1, s2 string) bool)

CustomSort customizable string comparing sort entry list

func (Entries) GetCommitsInfo

func (tes Entries) GetCommitsInfo(ctx context.Context, repoLink string, commit *Commit, treePath string) ([]CommitInfo, *Commit, error)

GetCommitsInfo gets information of all commits that are corresponding to these entries

func (Entries) Sort

func (tes Entries) Sort()

Sort sort the list of entry

type EntryFollowResult

type EntryFollowResult struct {
	SymlinkContent string
	TargetFullPath string
	TargetEntry    *TreeEntry
}
func EntryFollowLink(commit *Commit, fullPath string, te *TreeEntry) (*EntryFollowResult, error)
func EntryFollowLinks(commit *Commit, firstFullPath string, firstTreeEntry *TreeEntry, optLimit ...int) (res *EntryFollowResult, err error)

type EntryMode

type EntryMode int

EntryMode the type of the object in the git tree

const (
	// EntryModeNoEntry is possible if the file was added or removed in a commit. In the case of
	// when adding the base commit doesn't have the file in its tree, a mode of 0o000000 is used.
	EntryModeNoEntry EntryMode = 0o000000

	EntryModeBlob    EntryMode = 0o100644
	EntryModeExec    EntryMode = 0o100755
	EntryModeSymlink EntryMode = 0o120000
	EntryModeCommit  EntryMode = 0o160000
	EntryModeTree    EntryMode = 0o040000
)

There are only a few file modes in Git. They look like unix file modes, but they can only be one of these.

func ParseEntryMode

func ParseEntryMode(mode string) (EntryMode, error)

func (EntryMode) IsDir

func (e EntryMode) IsDir() bool

IsDir if the entry is a sub dir

func (EntryMode) IsExecutable

func (e EntryMode) IsExecutable() bool

IsExecutable if the entry is an executable file (not necessarily binary)

func (e EntryMode) IsLink() bool

IsLink if the entry is a symlink

func (EntryMode) IsRegular

func (e EntryMode) IsRegular() bool

IsRegular if the entry is a regular file

func (EntryMode) IsSubModule

func (e EntryMode) IsSubModule() bool

IsSubModule if the entry is a submodule

func (EntryMode) String

func (e EntryMode) String() string

String converts an EntryMode to a string

type ErrBranchNotExist

type ErrBranchNotExist struct {
	Name string
}

ErrBranchNotExist represents a "BranchNotExist" kind of error.

func (ErrBranchNotExist) Error

func (err ErrBranchNotExist) Error() string

func (ErrBranchNotExist) Unwrap

func (err ErrBranchNotExist) Unwrap() error

type ErrInvalidCloneAddr

type ErrInvalidCloneAddr struct {
	Host               string
	IsURLError         bool
	IsInvalidPath      bool
	IsProtocolInvalid  bool
	IsPermissionDenied bool
	LocalPath          bool
}

ErrInvalidCloneAddr represents a "InvalidCloneAddr" kind of error.

func (*ErrInvalidCloneAddr) Error

func (err *ErrInvalidCloneAddr) Error() string

func (*ErrInvalidCloneAddr) Unwrap

func (err *ErrInvalidCloneAddr) Unwrap() error

type ErrInvalidSHA

type ErrInvalidSHA struct {
	SHA string
}

func (ErrInvalidSHA) Error

func (err ErrInvalidSHA) Error() string

type ErrMoreThanOne

type ErrMoreThanOne struct {
	StdOut string
	StdErr string
	Err    error
}

ErrMoreThanOne represents an error if pull request fails when there are more than one sources (branch, tag) with the same name

func (*ErrMoreThanOne) Error

func (err *ErrMoreThanOne) Error() string

type ErrNotExist

type ErrNotExist struct {
	ID      string
	RelPath string
}

ErrNotExist commit not exist error

func (ErrNotExist) Error

func (err ErrNotExist) Error() string

func (ErrNotExist) Unwrap

func (err ErrNotExist) Unwrap() error

type ErrPushOutOfDate

type ErrPushOutOfDate struct {
	StdOut string
	StdErr string
	Err    error
}

ErrPushOutOfDate represents an error if merging fails due to the base branch being updated

func (*ErrPushOutOfDate) Error

func (err *ErrPushOutOfDate) Error() string

func (*ErrPushOutOfDate) Unwrap

func (err *ErrPushOutOfDate) Unwrap() error

Unwrap unwraps the underlying error

type ErrPushRejected

type ErrPushRejected struct {
	Message string
	StdOut  string
	StdErr  string
	Err     error
}

ErrPushRejected represents an error if merging fails due to rejection from a hook

func (*ErrPushRejected) Error

func (err *ErrPushRejected) Error() string

func (*ErrPushRejected) GenerateMessage

func (err *ErrPushRejected) GenerateMessage()

GenerateMessage generates the remote message from the stderr

func (*ErrPushRejected) Unwrap

func (err *ErrPushRejected) Unwrap() error

Unwrap unwraps the underlying error

type Features

type Features struct {
	UsingGogit             bool
	SupportProcReceive     bool           // >= 2.29
	SupportHashSha256      bool           // >= 2.42, SHA-256 repositories no longer an ‘experimental curiosity’
	SupportedObjectFormats []ObjectFormat // sha1, sha256
	SupportCheckAttrOnBare bool           // >= 2.40
	// contains filtered or unexported fields
}

func DefaultFeatures

func DefaultFeatures() *Features

func (*Features) CheckVersionAtLeast

func (f *Features) CheckVersionAtLeast(atLeast string) bool

func (*Features) VersionInfo

func (f *Features) VersionInfo() string

VersionInfo returns git version information

type GPGSettings

type GPGSettings struct {
	Sign             bool
	KeyID            string
	Email            string
	Name             string
	PublicKeyContent string
	Format           string
}

GPGSettings represents the default GPG settings for this repository

func (*GPGSettings) LoadPublicKeyContent

func (gpgSettings *GPGSettings) LoadPublicKeyContent() error

LoadPublicKeyContent will load the key from gpg

type GrepModeType

type GrepModeType string
const (
	GrepModeExact  GrepModeType = "exact"
	GrepModeWords  GrepModeType = "words"
	GrepModeRegexp GrepModeType = "regexp"
)

type GrepOptions

type GrepOptions struct {
	RefName           string
	MaxResultLimit    int
	ContextLineNumber int
	GrepMode          GrepModeType
	MaxLineLength     int // the maximum length of a line to parse, exceeding chars will be truncated
	PathspecList      []string
}

type GrepResult

type GrepResult struct {
	Filename    string
	LineNumbers []int
	LineCodes   []string
}

func GrepSearch

func GrepSearch(ctx context.Context, repo *Repository, search string, opts GrepOptions) ([]*GrepResult, error)

type Hook

type Hook struct {
	IsActive bool   // Indicates whether repository has this hook.
	Content  string // Content of hook if it's active.
	Sample   string // Sample content from Git.
	// contains filtered or unexported fields
}

Hook represents a Git hook.

func GetHook

func GetHook(repoPath, name string) (*Hook, error)

GetHook returns a Git hook by given name and repository.

func ListHooks

func ListHooks(repoPath string) (_ []*Hook, err error)

ListHooks returns a list of Git hooks of given repository.

func (*Hook) Name

func (h *Hook) Name() string

Name return the name of the hook

func (*Hook) Update

func (h *Hook) Update() error

Update updates hook settings.

type IndexObjectInfo

type IndexObjectInfo struct {
	Mode     string
	Object   ObjectID
	Filename string
}

type LastCommitCache

type LastCommitCache struct {
	// contains filtered or unexported fields
}

LastCommitCache represents a cache to store last commit

func NewLastCommitCache

func NewLastCommitCache(count int64, repoPath string, gitRepo *Repository, cache cache.StringCache) *LastCommitCache

NewLastCommitCache creates a new last commit cache for repo

func (*LastCommitCache) Get

func (c *LastCommitCache) Get(ref, entryPath string) (*Commit, error)

Get gets the last commit information by commit id and entry path

func (*LastCommitCache) GetCommitByPath

func (c *LastCommitCache) GetCommitByPath(commitID, entryPath string) (*Commit, error)

GetCommitByPath gets the last commit for the entry in the provided commit

func (*LastCommitCache) Put

func (c *LastCommitCache) Put(ref, entryPath, commitID string) error

Put put the last commit id with commit and entry path

type LogNameStatusCommitData

type LogNameStatusCommitData struct {
	CommitID  string
	ParentIDs []string
	Paths     []bool
}

LogNameStatusCommitData represents a commit artefact from git log raw

type LogNameStatusRepoParser

type LogNameStatusRepoParser struct {
	// contains filtered or unexported fields
}

LogNameStatusRepoParser parses a git log raw output from LogRawRepo

func NewLogNameStatusRepoParser

func NewLogNameStatusRepoParser(ctx context.Context, repository, head, treepath string, paths ...string) *LogNameStatusRepoParser

NewLogNameStatusRepoParser returns a new parser for a git log raw output

func (*LogNameStatusRepoParser) Close

func (g *LogNameStatusRepoParser) Close()

Close closes the parser

func (*LogNameStatusRepoParser) Next

func (g *LogNameStatusRepoParser) Next(treepath string, paths2ids map[string]int, changed []bool, maxpathlen int) (*LogNameStatusCommitData, error)

Next returns the next LogStatusCommitData

type LsTreeEntry

type LsTreeEntry struct {
	ID        ObjectID
	EntryMode EntryMode
	Name      string
	Size      optional.Option[int64]
}

type Note

type Note struct {
	Message []byte
	Commit  *Commit
}

Note stores information about a note created using git-notes.

type ObjectCache

type ObjectCache[T any] struct {
	// contains filtered or unexported fields
}

ObjectCache provides thread-safe cache operations.

func (*ObjectCache[T]) Get

func (oc *ObjectCache[T]) Get(id string) (T, bool)

Get gets cached obj by id

func (*ObjectCache[T]) Set

func (oc *ObjectCache[T]) Set(id string, obj T)

Set adds obj to cache

type ObjectFormat

type ObjectFormat interface {
	// Name returns the name of the object format
	Name() string
	// EmptyObjectID creates a new empty ObjectID from an object format hash name
	EmptyObjectID() ObjectID
	// EmptyTree is the hash of an empty tree
	EmptyTree() ObjectID
	// FullLength is the length of the hash's hex string
	FullLength() int
	// IsValid returns true if the input is a valid hash
	IsValid(input string) bool
	// MustID creates a new ObjectID from a byte slice
	MustID(b []byte) ObjectID
	// ComputeHash compute the hash for a given ObjectType and content
	ComputeHash(t ObjectType, content []byte) ObjectID
}
var (
	Sha1ObjectFormat   ObjectFormat = Sha1ObjectFormatImpl{}
	Sha256ObjectFormat ObjectFormat = Sha256ObjectFormatImpl{}
)

func ObjectFormatFromName

func ObjectFormatFromName(name string) ObjectFormat

type ObjectID

type ObjectID interface {
	String() string
	IsZero() bool
	RawValue() []byte
	Type() ObjectFormat
}

func ComputeBlobHash

func ComputeBlobHash(hashType ObjectFormat, content []byte) ObjectID

ComputeBlobHash compute the hash for a given blob content

func MustIDFromString

func MustIDFromString(hexHash string) ObjectID

func NewIDFromString

func NewIDFromString(hexHash string) (ObjectID, error)

type ObjectType

type ObjectType string

ObjectType git object type

const (
	// ObjectCommit commit object type
	ObjectCommit ObjectType = "commit"
	// ObjectTree tree object type
	ObjectTree ObjectType = "tree"
	// ObjectBlob blob object type
	ObjectBlob ObjectType = "blob"
	// ObjectTag tag object type
	ObjectTag ObjectType = "tag"
	// ObjectBranch branch object type
	ObjectBranch ObjectType = "branch"
)

func (ObjectType) Bytes

func (o ObjectType) Bytes() []byte

Bytes returns the byte array for the Object Type

type PushOptions

type PushOptions struct {
	Remote  string
	Branch  string
	Force   bool
	Mirror  bool
	Env     []string
	Timeout time.Duration
}

PushOptions options when push to remote

type RawDiffType

type RawDiffType string

RawDiffType type of a raw diff.

const (
	RawDiffNormal RawDiffType = "diff"
	RawDiffPatch  RawDiffType = "patch"
)

RawDiffType possible values.

type RefName

type RefName string

RefName represents a full git reference name

func RefNameFromBranch

func RefNameFromBranch(shortName string) RefName

func RefNameFromCommit

func RefNameFromCommit(shortName string) RefName

func RefNameFromTag

func RefNameFromTag(shortName string) RefName

func (RefName) BranchName

func (ref RefName) BranchName() string

BranchName returns simple branch name if it's an operation to branch

func (RefName) ForBranchName

func (ref RefName) ForBranchName() string

ForBranchName returns the branch name part of refs like refs/for/<branch_name>

func (RefName) IsBranch

func (ref RefName) IsBranch() bool

func (RefName) IsFor

func (ref RefName) IsFor() bool

func (RefName) IsPull

func (ref RefName) IsPull() bool

func (RefName) IsRemote

func (ref RefName) IsRemote() bool

func (RefName) IsTag

func (ref RefName) IsTag() bool

func (RefName) PullName

func (ref RefName) PullName() string

PullName returns the pull request name part of refs like refs/pull/<pull_name>/head

func (RefName) RefGroup

func (ref RefName) RefGroup() string

RefGroup returns the group type of the reference Using the name of the directory under .git/refs

func (RefName) RefType

func (ref RefName) RefType() RefType

RefType returns the simple ref type of the reference, e.g. branch, tag It's different from RefGroup, which is using the name of the directory under .git/refs

func (RefName) RefWebLinkPath

func (ref RefName) RefWebLinkPath() string

RefWebLinkPath returns a path for the reference that can be used in a web link: * "branch/<branch_name>" * "tag/<tag_name>" * "commit/<commit_id>" It returns an empty string if the reference is not a branch, tag or commit.

func (RefName) RemoteName

func (ref RefName) RemoteName() string

func (RefName) ShortName

func (ref RefName) ShortName() string

ShortName returns the short name of the reference name

func (RefName) String

func (ref RefName) String() string

func (RefName) TagName

func (ref RefName) TagName() string

TagName returns simple tag name if it's an operation to a tag

type RefType

type RefType string

RefType is a simple ref type of the reference, it is used for UI and webhooks

const (
	RefTypeBranch RefType = "branch"
	RefTypeTag    RefType = "tag"
	RefTypeCommit RefType = "commit"
)

type Reference

type Reference struct {
	Name string

	Object ObjectID // The id of this commit object
	Type   string
	// contains filtered or unexported fields
}

Reference represents a Git ref.

func (*Reference) Commit

func (ref *Reference) Commit() (*Commit, error)

Commit return the commit of the reference

func (*Reference) RefGroup

func (ref *Reference) RefGroup() string

RefGroup returns the group type of the reference

func (*Reference) ShortName

func (ref *Reference) ShortName() string

ShortName returns the short name of the reference

type Repository

type Repository struct {
	Path string

	Ctx             context.Context
	LastCommitCache *LastCommitCache
	// contains filtered or unexported fields
}

Repository represents a Git repository.

func OpenRepository

func OpenRepository(ctx context.Context, repoPath string) (*Repository, error)

OpenRepository opens the repository at the given path with the provided context.

func (*Repository) AddLastCommitCache

func (repo *Repository) AddLastCommitCache(cacheKey, fullName, sha string) error

func (*Repository) AddObjectToIndex

func (repo *Repository) AddObjectToIndex(mode string, object ObjectID, filename string) error

AddObjectToIndex adds the provided object hash to the index at the provided filename

func (*Repository) AddObjectsToIndex

func (repo *Repository) AddObjectsToIndex(objects ...IndexObjectInfo) error

AddObjectsToIndex adds the provided object hashes to the index at the provided filenames

func (*Repository) AddRemote

func (repo *Repository) AddRemote(name, url string, fetch bool) error

AddRemote adds a new remote to repository.

func (*Repository) CatFileBatch

func (repo *Repository) CatFileBatch(ctx context.Context) (WriteCloserError, *bufio.Reader, func(), error)

CatFileBatch obtains a CatFileBatch for this repository

func (*Repository) CatFileBatchCheck

func (repo *Repository) CatFileBatchCheck(ctx context.Context) (WriteCloserError, *bufio.Reader, func(), error)

CatFileBatchCheck obtains a CatFileBatchCheck for this repository

func (*Repository) Close

func (repo *Repository) Close() error

func (*Repository) CommitTree

func (repo *Repository) CommitTree(author, committer *Signature, tree *Tree, opts CommitTreeOpts) (ObjectID, error)

CommitTree creates a commit from a given tree id for the user with provided message

func (*Repository) CommitsBetween

func (repo *Repository) CommitsBetween(last, before *Commit) ([]*Commit, error)

CommitsBetween returns a list that contains commits between [before, last). If before is detached (removed by reset + push) it is not included.

func (*Repository) CommitsBetweenIDs

func (repo *Repository) CommitsBetweenIDs(last, before string) ([]*Commit, error)

CommitsBetweenIDs return commits between twoe commits

func (*Repository) CommitsBetweenLimit

func (repo *Repository) CommitsBetweenLimit(last, before *Commit, limit, skip int) ([]*Commit, error)

CommitsBetweenLimit returns a list that contains at most limit commits skipping the first skip commits between [before, last)

func (*Repository) CommitsBetweenNotBase

func (repo *Repository) CommitsBetweenNotBase(last, before *Commit, baseBranch string) ([]*Commit, error)

CommitsBetweenNotBase returns a list that contains commits between [before, last), excluding commits in baseBranch. If before is detached (removed by reset + push) it is not included.

func (*Repository) CommitsByFileAndRange

func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions) ([]*Commit, error)

CommitsByFileAndRange return the commits according revision file and the page

func (*Repository) CommitsCountBetween

func (repo *Repository) CommitsCountBetween(start, end string) (int64, error)

CommitsCountBetween return numbers of commits between two commits

func (*Repository) ConvertToGitID

func (repo *Repository) ConvertToGitID(commitID string) (ObjectID, error)

ConvertToGitID returns a GitHash object from a potential ID string

func (*Repository) CreateAnnotatedTag

func (repo *Repository) CreateAnnotatedTag(name, message, revision string) error

CreateAnnotatedTag create one annotated tag in the repository

func (*Repository) CreateArchive

func (repo *Repository) CreateArchive(ctx context.Context, format ArchiveType, target io.Writer, usePrefix bool, commitID string) error

CreateArchive create archive content to the target path

func (*Repository) CreateBranch

func (repo *Repository) CreateBranch(branch, oldbranchOrCommit string) error

CreateBranch create a new branch

func (*Repository) CreateBundle

func (repo *Repository) CreateBundle(ctx context.Context, commit string, out io.Writer) error

CreateBundle create bundle content to the target path

func (*Repository) CreateTag

func (repo *Repository) CreateTag(name, revision string) error

CreateTag create one tag in the repository

func (*Repository) DeleteBranch

func (repo *Repository) DeleteBranch(name string, opts DeleteBranchOptions) error

DeleteBranch delete a branch by name on repository.

func (*Repository) EmptyIndex

func (repo *Repository) EmptyIndex() error

EmptyIndex empties the index

func (*Repository) FileChangedBetweenCommits

func (repo *Repository) FileChangedBetweenCommits(filename, id1, id2 string) (bool, error)

FileChangedBetweenCommits Returns true if the file changed between commit IDs id1 and id2 You must ensure that id1 and id2 are valid commit ids.

func (*Repository) FileCommitsCount

func (repo *Repository) FileCommitsCount(revision, file string) (int64, error)

FileCommitsCount return the number of files at a revision

func (*Repository) FilesCountBetween

func (repo *Repository) FilesCountBetween(startCommitID, endCommitID string) (int, error)

FilesCountBetween return the number of files changed between two commits

func (*Repository) GetAllCommitsCount

func (repo *Repository) GetAllCommitsCount() (int64, error)

GetAllCommitsCount returns count of all commits in repository

func (*Repository) GetAnnotatedTag

func (repo *Repository) GetAnnotatedTag(sha string) (*Tag, error)

GetAnnotatedTag returns a Git tag by its SHA, must be an annotated tag

func (*Repository) GetBlob

func (repo *Repository) GetBlob(idStr string) (*Blob, error)

GetBlob finds the blob object in the repository.

func (*Repository) GetBranchCommit

func (repo *Repository) GetBranchCommit(name string) (*Commit, error)

GetBranchCommit returns the last commit of given branch.

func (*Repository) GetBranchCommitID

func (repo *Repository) GetBranchCommitID(name string) (string, error)

GetBranchCommitID returns last commit ID string of given branch.

func (*Repository) GetBranchNames

func (repo *Repository) GetBranchNames(skip, limit int) ([]string, int, error)

GetBranchNames returns branches from the repository, skipping "skip" initial branches and returning at most "limit" branches, or all branches if "limit" is 0.

func (*Repository) GetCodeActivityStats

func (repo *Repository) GetCodeActivityStats(fromTime time.Time, branch string) (*CodeActivityStats, error)

GetCodeActivityStats returns code statistics for activity page

func (*Repository) GetCommit

func (repo *Repository) GetCommit(commitID string) (*Commit, error)

GetCommit returns commit object of by ID string.

func (*Repository) GetCommitBranchStart

func (repo *Repository) GetCommitBranchStart(env []string, branch, endCommitID string) (string, error)

GetCommitBranchStart returns the commit where the branch diverged

func (*Repository) GetCommitByPath

func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error)

GetCommitByPath returns the last commit of relative path.

func (*Repository) GetCommitsFromIDs

func (repo *Repository) GetCommitsFromIDs(commitIDs []string) []*Commit

GetCommitsFromIDs get commits from commit IDs

func (*Repository) GetDefaultPublicGPGKey

func (repo *Repository) GetDefaultPublicGPGKey(forceUpdate bool) (*GPGSettings, error)

GetDefaultPublicGPGKey will return and cache the default public GPG settings for this repository

func (*Repository) GetDiff

func (repo *Repository) GetDiff(compareArg string, w io.Writer) error

GetDiff generates and returns patch data between given revisions, optimized for human readability

func (*Repository) GetDiffBinary

func (repo *Repository) GetDiffBinary(compareArg string, w io.Writer) error

GetDiffBinary generates and returns patch data between given revisions, including binary diffs.

func (*Repository) GetDiffNumChangedFiles

func (repo *Repository) GetDiffNumChangedFiles(base, head string, directComparison bool) (int, error)

GetDiffNumChangedFiles counts the number of changed files This is substantially quicker than shortstat but...

func (*Repository) GetFilesChangedBetween

func (repo *Repository) GetFilesChangedBetween(base, head string) ([]string, error)

GetFilesChangedBetween returns a list of all files that have been changed between the given commits If base is undefined empty SHA (zeros), it only returns the files changed in the head commit If base is the SHA of an empty tree (EmptyTreeSHA), it returns the files changes from the initial commit to the head commit

func (*Repository) GetHook

func (repo *Repository) GetHook(name string) (*Hook, error)

GetHook get one hook according the name on a repository

func (*Repository) GetMergeBase

func (repo *Repository) GetMergeBase(tmpRemote, base, head string) (string, string, error)

GetMergeBase checks and returns merge base of two branches and the reference used as base.

func (*Repository) GetObjectFormat

func (repo *Repository) GetObjectFormat() (ObjectFormat, error)

func (*Repository) GetPatch

func (repo *Repository) GetPatch(compareArg string, w io.Writer) error

GetPatch generates and returns format-patch data between given revisions, able to be used with `git apply`

func (*Repository) GetRefCommitID

func (repo *Repository) GetRefCommitID(name string) (string, error)

GetRefCommitID returns the last commit ID string of given reference (branch or tag).

func (*Repository) GetRefs

func (repo *Repository) GetRefs() ([]*Reference, error)

GetRefs returns all references of the repository.

func (*Repository) GetRefsBySha

func (repo *Repository) GetRefsBySha(sha, prefix string) ([]string, error)

GetRefsBySha returns all references filtered with prefix that belong to a sha commit hash

func (*Repository) GetRefsFiltered

func (repo *Repository) GetRefsFiltered(pattern string) ([]*Reference, error)

GetRefsFiltered returns all references of the repository that matches patterm exactly or starting with.

func (*Repository) GetTag

func (repo *Repository) GetTag(name string) (*Tag, error)

GetTag returns a Git tag by given name.

func (*Repository) GetTagCommit

func (repo *Repository) GetTagCommit(name string) (*Commit, error)

GetTagCommit get the commit of the specific tag via name

func (*Repository) GetTagCommitID

func (repo *Repository) GetTagCommitID(name string) (string, error)

GetTagCommitID returns last commit ID string of given tag.

func (*Repository) GetTagID

func (repo *Repository) GetTagID(name string) (string, error)

GetTagID returns the object ID for a tag (annotated tags have both an object SHA AND a commit SHA)

func (*Repository) GetTagInfos

func (repo *Repository) GetTagInfos(page, pageSize int) ([]*Tag, int, error)

GetTagInfos returns all tag infos of the repository.

func (*Repository) GetTagNameBySHA

func (repo *Repository) GetTagNameBySHA(sha string) (string, error)

GetTagNameBySHA returns the name of a tag from its tag object SHA or commit SHA

func (*Repository) GetTagType

func (repo *Repository) GetTagType(id ObjectID) (string, error)

GetTagType gets the type of the tag, either commit (simple) or tag (annotated)

func (*Repository) GetTagWithID

func (repo *Repository) GetTagWithID(idStr, name string) (*Tag, error)

GetTagWithID returns a Git tag by given name and ID

func (*Repository) GetTree

func (repo *Repository) GetTree(idStr string) (*Tree, error)

GetTree find the tree object in the repository.

func (*Repository) GetTreePathLatestCommit

func (repo *Repository) GetTreePathLatestCommit(refName, treePath string) (*Commit, error)

GetTreePathLatestCommit returns the latest commit of a tree path

func (*Repository) HashObject

func (repo *Repository) HashObject(reader io.Reader) (ObjectID, error)

HashObject takes a reader and returns hash for that reader

func (*Repository) Hooks

func (repo *Repository) Hooks() ([]*Hook, error)

Hooks get all the hooks on the repository

func (*Repository) IsBranchExist

func (repo *Repository) IsBranchExist(name string) bool

IsBranchExist returns true if given branch exists in current repository.

func (*Repository) IsCommitExist

func (repo *Repository) IsCommitExist(name string) bool

IsCommitExist returns true if given commit exists in current repository.

func (*Repository) IsCommitInBranch

func (repo *Repository) IsCommitInBranch(commitID, branch string) (r bool, err error)

IsCommitInBranch check if the commit is on the branch

func (*Repository) IsEmpty

func (repo *Repository) IsEmpty() (bool, error)

IsEmpty Check if repository is empty.

func (*Repository) IsObjectExist

func (repo *Repository) IsObjectExist(name string) bool

IsObjectExist returns true if the given object exists in the repository.

func (*Repository) IsReferenceExist

func (repo *Repository) IsReferenceExist(name string) bool

IsReferenceExist returns true if given reference exists in the repository.

func (*Repository) IsTagExist

func (repo *Repository) IsTagExist(name string) bool

IsTagExist returns true if given tag exists in the repository.

func (*Repository) LineBlame

func (repo *Repository) LineBlame(revision, path, file string, line uint) (*Commit, error)

LineBlame returns the latest commit at the given line

func (*Repository) ListOccurrences

func (repo *Repository) ListOccurrences(ctx context.Context, refType, commitSHA string) ([]string, error)

ListOccurrences lists all refs of the given refType the given commit appears in sorted by creation date DESC refType should only be a literal "branch" or "tag" and nothing else

func (*Repository) LsFiles

func (repo *Repository) LsFiles(filenames ...string) ([]string, error)

LsFiles checks if the given filenames are in the index

func (*Repository) LsTree

func (repo *Repository) LsTree(ref string, filenames ...string) ([]string, error)

LsTree checks if the given filenames are in the tree

func (*Repository) ReadPatchCommit

func (repo *Repository) ReadPatchCommit(prID int64) (commitSHA string, err error)

ReadPatchCommit will check if a diff patch exists and return stats

func (*Repository) ReadTreeToIndex

func (repo *Repository) ReadTreeToIndex(treeish string, indexFilename ...string) error

ReadTreeToIndex reads a treeish to the index

func (*Repository) ReadTreeToTemporaryIndex

func (repo *Repository) ReadTreeToTemporaryIndex(treeish string) (tmpIndexFilename, tmpDir string, cancel context.CancelFunc, err error)

ReadTreeToTemporaryIndex reads a treeish to a temporary index file

func (*Repository) RemoveFilesFromIndex

func (repo *Repository) RemoveFilesFromIndex(filenames ...string) error

RemoveFilesFromIndex removes given filenames from the index - it does not check whether they are present.

func (*Repository) RenameBranch

func (repo *Repository) RenameBranch(from, to string) error

RenameBranch rename a branch

func (*Repository) ResolveReference

func (repo *Repository) ResolveReference(name string) (string, error)

ResolveReference resolves a name to a reference

func (*Repository) ShowPrettyFormatLogToList

func (repo *Repository) ShowPrettyFormatLogToList(ctx context.Context, revisionRange string) ([]*Commit, error)

func (*Repository) UnstableGuessRefByShortName

func (repo *Repository) UnstableGuessRefByShortName(shortName string) RefName

UnstableGuessRefByShortName does the best guess to see whether a "short name" provided by user is a branch, tag or commit. It could guess wrongly if the input is already ambiguous. For example: * "refs/heads/the-name" vs "refs/heads/refs/heads/the-name" * "refs/tags/1234567890" vs commit "1234567890" In most cases, it SHOULD AVOID using this function, unless there is an irresistible reason (eg: make API friendly to end users) If the function is used, the caller SHOULD CHECK the ref type carefully.

func (*Repository) WalkReferences

func (repo *Repository) WalkReferences(refType ObjectType, skip, limit int, walkfn func(sha1, refname string) error) (int, error)

WalkReferences walks all the references from the repository refType should be empty, ObjectTag or ObjectBranch. All other values are equivalent to empty.

func (*Repository) WriteTree

func (repo *Repository) WriteTree() (*Tree, error)

WriteTree writes the current index as a tree to the object db and returns its hash

type SearchCommitsOptions

type SearchCommitsOptions struct {
	Keywords            []string
	Authors, Committers []string
	After, Before       string
	All                 bool
}

SearchCommitsOptions specify the parameters for SearchCommits

func NewSearchCommitsOptions

func NewSearchCommitsOptions(searchString string, forAllRefs bool) SearchCommitsOptions

NewSearchCommitsOptions construct a SearchCommitsOption from a space-delimited search string

type Sha1Hash

type Sha1Hash [20]byte

func (*Sha1Hash) IsZero

func (h *Sha1Hash) IsZero() bool

func (*Sha1Hash) RawValue

func (h *Sha1Hash) RawValue() []byte

func (*Sha1Hash) String

func (h *Sha1Hash) String() string

func (*Sha1Hash) Type

func (*Sha1Hash) Type() ObjectFormat

type Sha1ObjectFormatImpl

type Sha1ObjectFormatImpl struct{}

func (Sha1ObjectFormatImpl) ComputeHash

func (h Sha1ObjectFormatImpl) ComputeHash(t ObjectType, content []byte) ObjectID

ComputeHash compute the hash for a given ObjectType and content

func (Sha1ObjectFormatImpl) EmptyObjectID

func (Sha1ObjectFormatImpl) EmptyObjectID() ObjectID

func (Sha1ObjectFormatImpl) EmptyTree

func (Sha1ObjectFormatImpl) EmptyTree() ObjectID

func (Sha1ObjectFormatImpl) FullLength

func (Sha1ObjectFormatImpl) FullLength() int

func (Sha1ObjectFormatImpl) IsValid

func (Sha1ObjectFormatImpl) IsValid(input string) bool

func (Sha1ObjectFormatImpl) MustID

func (Sha1ObjectFormatImpl) MustID(b []byte) ObjectID

func (Sha1ObjectFormatImpl) Name

type Sha256Hash

type Sha256Hash [32]byte

func (*Sha256Hash) IsZero

func (h *Sha256Hash) IsZero() bool

func (*Sha256Hash) RawValue

func (h *Sha256Hash) RawValue() []byte

func (*Sha256Hash) String

func (h *Sha256Hash) String() string

func (*Sha256Hash) Type

func (*Sha256Hash) Type() ObjectFormat

type Sha256ObjectFormatImpl

type Sha256ObjectFormatImpl struct{}

func (Sha256ObjectFormatImpl) ComputeHash

func (h Sha256ObjectFormatImpl) ComputeHash(t ObjectType, content []byte) ObjectID

ComputeHash compute the hash for a given ObjectType and content

func (Sha256ObjectFormatImpl) EmptyObjectID

func (Sha256ObjectFormatImpl) EmptyObjectID() ObjectID

func (Sha256ObjectFormatImpl) EmptyTree

func (Sha256ObjectFormatImpl) EmptyTree() ObjectID

func (Sha256ObjectFormatImpl) FullLength

func (Sha256ObjectFormatImpl) FullLength() int

func (Sha256ObjectFormatImpl) IsValid

func (Sha256ObjectFormatImpl) IsValid(input string) bool

func (Sha256ObjectFormatImpl) MustID

func (Sha256ObjectFormatImpl) MustID(b []byte) ObjectID

func (Sha256ObjectFormatImpl) Name

type Signature

type Signature struct {
	Name  string    // the committer name, it can be anything
	Email string    // the committer email, it can be anything
	When  time.Time // the timestamp of the signature
}

Signature represents the Author, Committer or Tagger information.

func (*Signature) Decode

func (s *Signature) Decode(b []byte)

Decode decodes a byte array representing a signature to signature

func (*Signature) String

func (s *Signature) String() string

type SigningKey

type SigningKey struct {
	KeyID  string
	Format string
}

SigningKey represents an instance key info which will be used to sign git commits. FIXME: need to refactor it to a new name, this name conflicts with the variable names for "asymkey.GPGKey" in many places.

func (*SigningKey) String

func (s *SigningKey) String() string

type SubModule

type SubModule struct {
	Path   string
	URL    string
	Branch string // this field is newly added but not really used
}

SubModule is a reference on git repository

type SubmoduleWebLink struct {
	RepoWebLink, CommitWebLink string
}

type Tag

type Tag struct {
	Name      string
	ID        ObjectID
	Object    ObjectID // The id of this commit object
	Type      string
	Tagger    *Signature
	Message   string
	Signature *CommitSignature
}

Tag represents a Git tag.

type TemplateSubmoduleCommit

type TemplateSubmoduleCommit struct {
	Path   string
	Commit string
}

func GetTemplateSubmoduleCommits

func GetTemplateSubmoduleCommits(ctx context.Context, repoPath string) (submoduleCommits []TemplateSubmoduleCommit, _ error)

GetTemplateSubmoduleCommits returns a list of submodules paths and their commits from a repository This function is only for generating new repos based on existing template, the template couldn't be too large.

type Tree

type Tree struct {
	ID         ObjectID
	ResolvedID ObjectID
	// contains filtered or unexported fields
}

Tree represents a flat directory listing.

func NewTree

func NewTree(repo *Repository, id ObjectID) *Tree

NewTree create a new tree according the repository and tree id

func (*Tree) GetBlobByPath

func (t *Tree) GetBlobByPath(relpath string) (*Blob, error)

GetBlobByPath get the blob object according the path

func (*Tree) GetTreeEntryByPath

func (t *Tree) GetTreeEntryByPath(relpath string) (_ *TreeEntry, err error)

GetTreeEntryByPath get the tree entries according the sub dir

func (*Tree) ListEntries

func (t *Tree) ListEntries() (Entries, error)

ListEntries returns all entries of current tree.

func (*Tree) ListEntriesRecursiveFast

func (t *Tree) ListEntriesRecursiveFast() (Entries, error)

ListEntriesRecursiveFast returns all entries of current tree recursively including all subtrees, no size

func (*Tree) ListEntriesRecursiveWithSize

func (t *Tree) ListEntriesRecursiveWithSize() (Entries, error)

ListEntriesRecursiveWithSize returns all entries of current tree recursively including all subtrees, with size

func (*Tree) SubTree

func (t *Tree) SubTree(rpath string) (*Tree, error)

SubTree get a subtree by the sub dir path

type TreeEntry

type TreeEntry struct {
	ID ObjectID
	// contains filtered or unexported fields
}

TreeEntry the leaf in the git tree

func ParseTreeEntries

func ParseTreeEntries(data []byte) ([]*TreeEntry, error)

ParseTreeEntries parses the output of a `git ls-tree -l` command.

func (*TreeEntry) Blob

func (te *TreeEntry) Blob() *Blob

Blob returns the blob object the entry

func (*TreeEntry) GetSubJumpablePathName

func (te *TreeEntry) GetSubJumpablePathName() string

GetSubJumpablePathName return the full path of subdirectory jumpable ( contains only one directory )

func (*TreeEntry) IsDir

func (te *TreeEntry) IsDir() bool

IsDir if the entry is a sub dir

func (*TreeEntry) IsExecutable

func (te *TreeEntry) IsExecutable() bool

IsExecutable if the entry is an executable file (not necessarily binary)

func (te *TreeEntry) IsLink() bool

IsLink if the entry is a symlink

func (*TreeEntry) IsRegular

func (te *TreeEntry) IsRegular() bool

IsRegular if the entry is a regular file

func (*TreeEntry) IsSubModule

func (te *TreeEntry) IsSubModule() bool

IsSubModule if the entry is a submodule

func (*TreeEntry) Mode

func (te *TreeEntry) Mode() EntryMode

Mode returns the mode of the entry

func (*TreeEntry) Name

func (te *TreeEntry) Name() string

Name returns the name of the entry (base name)

func (*TreeEntry) Size

func (te *TreeEntry) Size() int64

Size returns the size of the entry

func (*TreeEntry) Tree

func (te *TreeEntry) Tree() *Tree

returns the Tree pointed to by this TreeEntry, or nil if this is not a tree

func (*TreeEntry) Type

func (te *TreeEntry) Type() string

Type returns the type of the entry (commit, tree, blob)

type WriteCloserError

type WriteCloserError interface {
	io.WriteCloser
	CloseWithError(err error) error
}

WriteCloserError wraps an io.WriteCloser with an additional CloseWithError function

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL