@ -59,7 +59,7 @@ func (repo *Repository) getCommitByPathWithID(id ObjectID, relpath string) (*Com
relpath = ` \ ` + relpath
relpath = ` \ ` + relpath
}
}
stdout , _ , runErr := NewCommand ( repo . Ctx , "log" , "-1" , prettyLogFormat ) . AddDynamicArguments ( id . String ( ) ) . AddDashesAndList ( relpath ) . RunStdString ( & RunOpts { Dir : repo . Path } )
stdout , _ , runErr := NewCommand ( "log" , "-1" , prettyLogFormat ) . AddDynamicArguments ( id . String ( ) ) . AddDashesAndList ( relpath ) . RunStdString ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if runErr != nil {
if runErr != nil {
return nil , runErr
return nil , runErr
}
}
@ -74,7 +74,7 @@ func (repo *Repository) getCommitByPathWithID(id ObjectID, relpath string) (*Com
// GetCommitByPath returns the last commit of relative path.
// GetCommitByPath returns the last commit of relative path.
func ( repo * Repository ) GetCommitByPath ( relpath string ) ( * Commit , error ) {
func ( repo * Repository ) GetCommitByPath ( relpath string ) ( * Commit , error ) {
stdout , _ , runErr := NewCommand ( repo . Ctx , "log" , "-1" , prettyLogFormat ) . AddDashesAndList ( relpath ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , runErr := NewCommand ( "log" , "-1" , prettyLogFormat ) . AddDashesAndList ( relpath ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if runErr != nil {
if runErr != nil {
return nil , runErr
return nil , runErr
}
}
@ -90,7 +90,7 @@ func (repo *Repository) GetCommitByPath(relpath string) (*Commit, error) {
}
}
func ( repo * Repository ) commitsByRange ( id ObjectID , page , pageSize int , not string ) ( [ ] * Commit , error ) {
func ( repo * Repository ) commitsByRange ( id ObjectID , page , pageSize int , not string ) ( [ ] * Commit , error ) {
cmd := NewCommand ( repo . Ctx , "log" ) .
cmd := NewCommand ( "log" ) .
AddOptionFormat ( "--skip=%d" , ( page - 1 ) * pageSize ) .
AddOptionFormat ( "--skip=%d" , ( page - 1 ) * pageSize ) .
AddOptionFormat ( "--max-count=%d" , pageSize ) .
AddOptionFormat ( "--max-count=%d" , pageSize ) .
AddArguments ( prettyLogFormat ) .
AddArguments ( prettyLogFormat ) .
@ -100,7 +100,7 @@ func (repo *Repository) commitsByRange(id ObjectID, page, pageSize int, not stri
cmd . AddOptionValues ( "--not" , not )
cmd . AddOptionValues ( "--not" , not )
}
}
stdout , _ , err := cmd . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err := cmd . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
@ -134,7 +134,7 @@ func (repo *Repository) searchCommits(id ObjectID, opts SearchCommitsOptions) ([
}
}
// create new git log command with limit of 100 commits
// create new git log command with limit of 100 commits
cmd := NewCommand ( repo . Ctx , "log" , "-100" , prettyLogFormat ) . AddDynamicArguments ( id . String ( ) )
cmd := NewCommand ( "log" , "-100" , prettyLogFormat ) . AddDynamicArguments ( id . String ( ) )
// pretend that all refs along with HEAD were listed on command line as <commis>
// pretend that all refs along with HEAD were listed on command line as <commis>
// https://git-scm.com/docs/git-log#Documentation/git-log.txt---all
// https://git-scm.com/docs/git-log#Documentation/git-log.txt---all
@ -154,7 +154,7 @@ func (repo *Repository) searchCommits(id ObjectID, opts SearchCommitsOptions) ([
// search for commits matching given constraints and keywords in commit msg
// search for commits matching given constraints and keywords in commit msg
addCommonSearchArgs ( cmd )
addCommonSearchArgs ( cmd )
stdout , _ , err := cmd . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err := cmd . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil {
if err != nil {
return nil , err
return nil , err
}
}
@ -168,14 +168,14 @@ func (repo *Repository) searchCommits(id ObjectID, opts SearchCommitsOptions) ([
// ignore anything not matching a valid sha pattern
// ignore anything not matching a valid sha pattern
if id . Type ( ) . IsValid ( v ) {
if id . Type ( ) . IsValid ( v ) {
// create new git log command with 1 commit limit
// create new git log command with 1 commit limit
hashCmd := NewCommand ( repo . Ctx , "log" , "-1" , prettyLogFormat )
hashCmd := NewCommand ( "log" , "-1" , prettyLogFormat )
// add previous arguments except for --grep and --all
// add previous arguments except for --grep and --all
addCommonSearchArgs ( hashCmd )
addCommonSearchArgs ( hashCmd )
// add keyword as <commit>
// add keyword as <commit>
hashCmd . AddDynamicArguments ( v )
hashCmd . AddDynamicArguments ( v )
// search with given constraints for commit matching sha hash of v
// search with given constraints for commit matching sha hash of v
hashMatching , _ , err := hashCmd . RunStdBytes ( & RunOpts { Dir : repo . Path } )
hashMatching , _ , err := hashCmd . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil || bytes . Contains ( stdout , hashMatching ) {
if err != nil || bytes . Contains ( stdout , hashMatching ) {
continue
continue
}
}
@ -190,7 +190,7 @@ func (repo *Repository) searchCommits(id ObjectID, opts SearchCommitsOptions) ([
// FileChangedBetweenCommits Returns true if the file changed between commit IDs id1 and id2
// FileChangedBetweenCommits Returns true if the file changed between commit IDs id1 and id2
// You must ensure that id1 and id2 are valid commit ids.
// You must ensure that id1 and id2 are valid commit ids.
func ( repo * Repository ) FileChangedBetweenCommits ( filename , id1 , id2 string ) ( bool , error ) {
func ( repo * Repository ) FileChangedBetweenCommits ( filename , id1 , id2 string ) ( bool , error ) {
stdout , _ , err := NewCommand ( repo . Ctx , "diff" , "--name-only" , "-z" ) . AddDynamicArguments ( id1 , id2 ) . AddDashesAndList ( filename ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err := NewCommand ( "diff" , "--name-only" , "-z" ) . AddDynamicArguments ( id1 , id2 ) . AddDashesAndList ( filename ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil {
if err != nil {
return false , err
return false , err
}
}
@ -223,7 +223,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
} ( )
} ( )
go func ( ) {
go func ( ) {
stderr := strings . Builder { }
stderr := strings . Builder { }
gitCmd := NewCommand ( repo . Ctx , "rev-list" ) .
gitCmd := NewCommand ( "rev-list" ) .
AddOptionFormat ( "--max-count=%d" , setting . Git . CommitsRangeSize ) .
AddOptionFormat ( "--max-count=%d" , setting . Git . CommitsRangeSize ) .
AddOptionFormat ( "--skip=%d" , ( opts . Page - 1 ) * setting . Git . CommitsRangeSize )
AddOptionFormat ( "--skip=%d" , ( opts . Page - 1 ) * setting . Git . CommitsRangeSize )
gitCmd . AddDynamicArguments ( opts . Revision )
gitCmd . AddDynamicArguments ( opts . Revision )
@ -233,7 +233,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
}
}
gitCmd . AddDashesAndList ( opts . File )
gitCmd . AddDashesAndList ( opts . File )
err := gitCmd . Run ( & RunOpts {
err := gitCmd . Run ( repo . Ctx , & RunOpts {
Dir : repo . Path ,
Dir : repo . Path ,
Stdout : stdoutWriter ,
Stdout : stdoutWriter ,
Stderr : & stderr ,
Stderr : & stderr ,
@ -275,11 +275,11 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
// FilesCountBetween return the number of files changed between two commits
// FilesCountBetween return the number of files changed between two commits
func ( repo * Repository ) FilesCountBetween ( startCommitID , endCommitID string ) ( int , error ) {
func ( repo * Repository ) FilesCountBetween ( startCommitID , endCommitID string ) ( int , error ) {
stdout , _ , err := NewCommand ( repo . Ctx , "diff" , "--name-only" ) . AddDynamicArguments ( startCommitID + "..." + endCommitID ) . RunStdString ( & RunOpts { Dir : repo . Path } )
stdout , _ , err := NewCommand ( "diff" , "--name-only" ) . AddDynamicArguments ( startCommitID + "..." + endCommitID ) . RunStdString ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
// git >= 2.28 now returns an error if startCommitID and endCommitID have become unrelated.
// git >= 2.28 now returns an error if startCommitID and endCommitID have become unrelated.
// previously it would return the results of git diff --name-only startCommitID endCommitID so let's try that...
// previously it would return the results of git diff --name-only startCommitID endCommitID so let's try that...
stdout , _ , err = NewCommand ( repo . Ctx , "diff" , "--name-only" ) . AddDynamicArguments ( startCommitID , endCommitID ) . RunStdString ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "diff" , "--name-only" ) . AddDynamicArguments ( startCommitID , endCommitID ) . RunStdString ( repo . Ctx , & RunOpts { Dir : repo . Path } )
}
}
if err != nil {
if err != nil {
return 0 , err
return 0 , err
@ -293,13 +293,13 @@ func (repo *Repository) CommitsBetween(last, before *Commit) ([]*Commit, error)
var stdout [ ] byte
var stdout [ ] byte
var err error
var err error
if before == nil {
if before == nil {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
} else {
} else {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// previously it would return the results of git rev-list before last so let's try that...
// previously it would return the results of git rev-list before last so let's try that...
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
}
}
}
}
if err != nil {
if err != nil {
@ -313,22 +313,22 @@ func (repo *Repository) CommitsBetweenLimit(last, before *Commit, limit, skip in
var stdout [ ] byte
var stdout [ ] byte
var err error
var err error
if before == nil {
if before == nil {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) .
stdout , _ , err = NewCommand ( "rev-list" ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddDynamicArguments ( last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
AddDynamicArguments ( last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
} else {
} else {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) .
stdout , _ , err = NewCommand ( "rev-list" ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// previously it would return the results of git rev-list --max-count n before last so let's try that...
// previously it would return the results of git rev-list --max-count n before last so let's try that...
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) .
stdout , _ , err = NewCommand ( "rev-list" ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--max-count" , strconv . Itoa ( limit ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddOptionValues ( "--skip" , strconv . Itoa ( skip ) ) .
AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
}
}
}
}
if err != nil {
if err != nil {
@ -343,13 +343,13 @@ func (repo *Repository) CommitsBetweenNotBase(last, before *Commit, baseBranch s
var stdout [ ] byte
var stdout [ ] byte
var err error
var err error
if before == nil {
if before == nil {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
} else {
} else {
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) + ".." + last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
if err != nil && strings . Contains ( err . Error ( ) , "no merge base" ) {
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// future versions of git >= 2.28 are likely to return an error if before and last have become unrelated.
// previously it would return the results of git rev-list before last so let's try that...
// previously it would return the results of git rev-list before last so let's try that...
stdout , _ , err = NewCommand ( repo . Ctx , "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , err = NewCommand ( "rev-list" ) . AddDynamicArguments ( before . ID . String ( ) , last . ID . String ( ) ) . AddOptionValues ( "--not" , baseBranch ) . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
}
}
}
}
if err != nil {
if err != nil {
@ -395,13 +395,13 @@ func (repo *Repository) CommitsCountBetween(start, end string) (int64, error) {
// commitsBefore the limit is depth, not total number of returned commits.
// commitsBefore the limit is depth, not total number of returned commits.
func ( repo * Repository ) commitsBefore ( id ObjectID , limit int ) ( [ ] * Commit , error ) {
func ( repo * Repository ) commitsBefore ( id ObjectID , limit int ) ( [ ] * Commit , error ) {
cmd := NewCommand ( repo . Ctx , "log" , prettyLogFormat )
cmd := NewCommand ( "log" , prettyLogFormat )
if limit > 0 {
if limit > 0 {
cmd . AddOptionFormat ( "-%d" , limit )
cmd . AddOptionFormat ( "-%d" , limit )
}
}
cmd . AddDynamicArguments ( id . String ( ) )
cmd . AddDynamicArguments ( id . String ( ) )
stdout , _ , runErr := cmd . RunStdBytes ( & RunOpts { Dir : repo . Path } )
stdout , _ , runErr := cmd . RunStdBytes ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if runErr != nil {
if runErr != nil {
return nil , runErr
return nil , runErr
}
}
@ -438,10 +438,10 @@ func (repo *Repository) getCommitsBeforeLimit(id ObjectID, num int) ([]*Commit,
func ( repo * Repository ) getBranches ( env [ ] string , commitID string , limit int ) ( [ ] string , error ) {
func ( repo * Repository ) getBranches ( env [ ] string , commitID string , limit int ) ( [ ] string , error ) {
if DefaultFeatures ( ) . CheckVersionAtLeast ( "2.7.0" ) {
if DefaultFeatures ( ) . CheckVersionAtLeast ( "2.7.0" ) {
stdout , _ , err := NewCommand ( repo . Ctx , "for-each-ref" , "--format=%(refname:strip=2)" ) .
stdout , _ , err := NewCommand ( "for-each-ref" , "--format=%(refname:strip=2)" ) .
AddOptionFormat ( "--count=%d" , limit ) .
AddOptionFormat ( "--count=%d" , limit ) .
AddOptionValues ( "--contains" , commitID , BranchPrefix ) .
AddOptionValues ( "--contains" , commitID , BranchPrefix ) .
RunStdString ( & RunOpts {
RunStdString ( repo . Ctx , & RunOpts {
Dir : repo . Path ,
Dir : repo . Path ,
Env : env ,
Env : env ,
} )
} )
@ -453,7 +453,7 @@ func (repo *Repository) getBranches(env []string, commitID string, limit int) ([
return branches , nil
return branches , nil
}
}
stdout , _ , err := NewCommand ( repo . Ctx , "branch" ) . AddOptionValues ( "--contains" , commitID ) . RunStdString ( & RunOpts {
stdout , _ , err := NewCommand ( "branch" ) . AddOptionValues ( "--contains" , commitID ) . RunStdString ( repo . Ctx , & RunOpts {
Dir : repo . Path ,
Dir : repo . Path ,
Env : env ,
Env : env ,
} )
} )
@ -495,7 +495,7 @@ func (repo *Repository) GetCommitsFromIDs(commitIDs []string) []*Commit {
// IsCommitInBranch check if the commit is on the branch
// IsCommitInBranch check if the commit is on the branch
func ( repo * Repository ) IsCommitInBranch ( commitID , branch string ) ( r bool , err error ) {
func ( repo * Repository ) IsCommitInBranch ( commitID , branch string ) ( r bool , err error ) {
stdout , _ , err := NewCommand ( repo . Ctx , "branch" , "--contains" ) . AddDynamicArguments ( commitID , branch ) . RunStdString ( & RunOpts { Dir : repo . Path } )
stdout , _ , err := NewCommand ( "branch" , "--contains" ) . AddDynamicArguments ( commitID , branch ) . RunStdString ( repo . Ctx , & RunOpts { Dir : repo . Path } )
if err != nil {
if err != nil {
return false , err
return false , err
}
}
@ -521,10 +521,10 @@ func (repo *Repository) AddLastCommitCache(cacheKey, fullName, sha string) error
// GetCommitBranchStart returns the commit where the branch diverged
// GetCommitBranchStart returns the commit where the branch diverged
func ( repo * Repository ) GetCommitBranchStart ( env [ ] string , branch , endCommitID string ) ( string , error ) {
func ( repo * Repository ) GetCommitBranchStart ( env [ ] string , branch , endCommitID string ) ( string , error ) {
cmd := NewCommand ( repo . Ctx , "log" , prettyLogFormat )
cmd := NewCommand ( "log" , prettyLogFormat )
cmd . AddDynamicArguments ( endCommitID )
cmd . AddDynamicArguments ( endCommitID )
stdout , _ , runErr := cmd . RunStdBytes ( & RunOpts {
stdout , _ , runErr := cmd . RunStdBytes ( repo . Ctx , & RunOpts {
Dir : repo . Path ,
Dir : repo . Path ,
Env : env ,
Env : env ,
} )
} )