2014-03-24 14:25:15 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
2019-04-20 07:15:19 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2014-03-24 14:25:15 +04:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package repo
2014-07-26 10:28:04 +04:00
import (
2021-04-01 08:17:14 +03:00
"errors"
2021-04-05 18:30:52 +03:00
"net/http"
2017-02-11 07:00:01 +03:00
"strings"
2014-07-26 10:28:04 +04:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
2021-12-10 11:14:24 +03:00
asymkey_model "code.gitea.io/gitea/models/asymkey"
2021-09-24 14:32:56 +03:00
"code.gitea.io/gitea/models/db"
2021-12-10 04:27:50 +03:00
repo_model "code.gitea.io/gitea/models/repo"
2021-11-24 12:49:20 +03:00
user_model "code.gitea.io/gitea/models/user"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/base"
2019-08-15 15:07:28 +03:00
"code.gitea.io/gitea/modules/charset"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/context"
2019-03-27 12:33:00 +03:00
"code.gitea.io/gitea/modules/git"
2019-11-16 03:47:57 +03:00
"code.gitea.io/gitea/modules/gitgraph"
2017-09-14 09:51:32 +03:00
"code.gitea.io/gitea/modules/log"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/setting"
2019-09-06 05:20:09 +03:00
"code.gitea.io/gitea/services/gitdiff"
2014-07-26 10:28:04 +04:00
)
const (
2019-06-07 23:29:29 +03:00
tplCommits base . TplName = "repo/commits"
tplGraph base . TplName = "repo/graph"
2020-11-08 20:21:54 +03:00
tplGraphDiv base . TplName = "repo/graph/div"
2019-06-07 23:29:29 +03:00
tplCommitPage base . TplName = "repo/commit_page"
2014-07-26 10:28:04 +04:00
)
2016-11-24 10:04:31 +03:00
// RefCommits render commits page
2016-03-11 19:56:52 +03:00
func RefCommits ( ctx * context . Context ) {
2014-11-07 06:06:41 +03:00
switch {
2016-08-25 07:35:03 +03:00
case len ( ctx . Repo . TreePath ) == 0 :
2014-11-07 06:06:41 +03:00
Commits ( ctx )
2016-08-25 07:35:03 +03:00
case ctx . Repo . TreePath == "search" :
2014-11-07 06:06:41 +03:00
SearchCommits ( ctx )
default :
FileHistory ( ctx )
}
}
2016-11-24 10:04:31 +03:00
// Commits render branch's commits
2016-03-11 19:56:52 +03:00
func Commits ( ctx * context . Context ) {
2015-08-20 15:18:49 +03:00
ctx . Data [ "PageIsCommits" ] = true
2017-07-31 04:23:10 +03:00
if ctx . Repo . Commit == nil {
2018-01-11 00:34:17 +03:00
ctx . NotFound ( "Commit not found" , nil )
2017-07-31 04:23:10 +03:00
return
}
2017-10-26 03:49:16 +03:00
ctx . Data [ "PageIsViewCode" ] = true
2014-07-26 10:28:04 +04:00
2017-10-26 04:37:33 +03:00
commitsCount , err := ctx . Repo . GetCommitsCount ( )
2014-07-26 10:28:04 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetCommitsCount" , err )
2014-07-26 10:28:04 +04:00
return
}
2021-07-29 04:42:15 +03:00
page := ctx . FormInt ( "page" )
2015-08-20 15:18:49 +03:00
if page <= 1 {
2014-07-26 10:28:04 +04:00
page = 1
}
2021-07-29 04:42:15 +03:00
pageSize := ctx . FormInt ( "limit" )
2020-01-24 22:00:29 +03:00
if pageSize <= 0 {
2021-06-26 14:28:55 +03:00
pageSize = setting . Git . CommitsRangeSize
2020-01-24 22:00:29 +03:00
}
2014-07-26 10:28:04 +04:00
// Both `git log branchName` and `git log commitId` work.
2020-01-24 22:00:29 +03:00
commits , err := ctx . Repo . Commit . CommitsByRange ( page , pageSize )
2014-07-26 10:28:04 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "CommitsByRange" , err )
2014-07-26 10:28:04 +04:00
return
}
2021-08-09 21:08:51 +03:00
ctx . Data [ "Commits" ] = models . ConvertFromGitCommit ( commits , ctx . Repo . Repository )
2015-11-11 00:46:17 +03:00
ctx . Data [ "Username" ] = ctx . Repo . Owner . Name
ctx . Data [ "Reponame" ] = ctx . Repo . Repository . Name
2014-07-26 10:28:04 +04:00
ctx . Data [ "CommitCount" ] = commitsCount
2021-11-18 02:50:17 +03:00
ctx . Data [ "RefName" ] = ctx . Repo . RefName
2019-04-20 07:15:19 +03:00
2021-06-26 14:28:55 +03:00
pager := context . NewPagination ( int ( commitsCount ) , setting . Git . CommitsRangeSize , page , 5 )
2019-04-20 07:15:19 +03:00
pager . SetDefaultParams ( ctx )
ctx . Data [ "Page" ] = pager
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCommits )
2014-07-26 10:28:04 +04:00
}
2016-12-29 02:44:32 +03:00
// Graph render commit graph - show commits from all branches.
func Graph ( ctx * context . Context ) {
2020-11-08 20:21:54 +03:00
ctx . Data [ "Title" ] = ctx . Tr ( "repo.commit_graph" )
2016-12-29 02:44:32 +03:00
ctx . Data [ "PageIsCommits" ] = true
2017-10-26 03:49:16 +03:00
ctx . Data [ "PageIsViewCode" ] = true
2021-07-29 04:42:15 +03:00
mode := strings . ToLower ( ctx . FormTrim ( "mode" ) )
2020-08-06 11:04:08 +03:00
if mode != "monochrome" {
mode = "color"
}
ctx . Data [ "Mode" ] = mode
2021-07-29 04:42:15 +03:00
hidePRRefs := ctx . FormBool ( "hide-pr-refs" )
2020-11-08 20:21:54 +03:00
ctx . Data [ "HidePRRefs" ] = hidePRRefs
2021-07-29 04:42:15 +03:00
branches := ctx . FormStrings ( "branch" )
2020-11-08 20:21:54 +03:00
realBranches := make ( [ ] string , len ( branches ) )
copy ( realBranches , branches )
for i , branch := range realBranches {
if strings . HasPrefix ( branch , "--" ) {
2021-12-02 10:28:08 +03:00
realBranches [ i ] = git . BranchPrefix + branch
2020-11-08 20:21:54 +03:00
}
}
ctx . Data [ "SelectedBranches" ] = realBranches
2021-07-29 04:42:15 +03:00
files := ctx . FormStrings ( "file" )
2016-12-29 02:44:32 +03:00
2017-10-26 04:37:33 +03:00
commitsCount , err := ctx . Repo . GetCommitsCount ( )
2016-12-29 02:44:32 +03:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetCommitsCount" , err )
2016-12-29 02:44:32 +03:00
return
}
2022-01-20 02:26:57 +03:00
graphCommitsCount , err := ctx . Repo . GetCommitGraphsCount ( ctx , hidePRRefs , realBranches , files )
2019-11-07 21:09:51 +03:00
if err != nil {
2020-11-08 20:21:54 +03:00
log . Warn ( "GetCommitGraphsCount error for generate graph exclude prs: %t branches: %s in %-v, Will Ignore branches and try again. Underlying Error: %v" , hidePRRefs , branches , ctx . Repo . Repository , err )
realBranches = [ ] string { }
branches = [ ] string { }
2022-01-20 02:26:57 +03:00
graphCommitsCount , err = ctx . Repo . GetCommitGraphsCount ( ctx , hidePRRefs , realBranches , files )
2020-11-08 20:21:54 +03:00
if err != nil {
ctx . ServerError ( "GetCommitGraphsCount" , err )
return
}
2019-11-07 21:09:51 +03:00
}
2021-07-29 04:42:15 +03:00
page := ctx . FormInt ( "page" )
2019-10-15 00:38:35 +03:00
2020-11-08 20:21:54 +03:00
graph , err := gitgraph . GetCommitGraph ( ctx . Repo . GitRepo , page , 0 , hidePRRefs , realBranches , files )
2016-12-29 02:44:32 +03:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetCommitGraph" , err )
2016-12-29 02:44:32 +03:00
return
}
2020-11-08 20:21:54 +03:00
if err := graph . LoadAndProcessCommits ( ctx . Repo . Repository , ctx . Repo . GitRepo ) ; err != nil {
ctx . ServerError ( "LoadAndProcessCommits" , err )
return
}
2016-12-29 02:44:32 +03:00
ctx . Data [ "Graph" ] = graph
2020-11-08 20:21:54 +03:00
gitRefs , err := ctx . Repo . GitRepo . GetRefs ( )
if err != nil {
ctx . ServerError ( "GitRepo.GetRefs" , err )
return
}
ctx . Data [ "AllRefs" ] = gitRefs
2016-12-29 02:44:32 +03:00
ctx . Data [ "Username" ] = ctx . Repo . Owner . Name
ctx . Data [ "Reponame" ] = ctx . Repo . Repository . Name
ctx . Data [ "CommitCount" ] = commitsCount
2021-11-18 02:50:17 +03:00
ctx . Data [ "RefName" ] = ctx . Repo . RefName
2020-11-08 20:21:54 +03:00
paginator := context . NewPagination ( int ( graphCommitsCount ) , setting . UI . GraphMaxCommitNum , page , 5 )
2020-08-06 11:04:08 +03:00
paginator . AddParam ( ctx , "mode" , "Mode" )
2020-11-08 20:21:54 +03:00
paginator . AddParam ( ctx , "hide-pr-refs" , "HidePRRefs" )
for _ , branch := range branches {
paginator . AddParamString ( "branch" , branch )
}
for _ , file := range files {
paginator . AddParamString ( "file" , file )
}
2020-08-06 11:04:08 +03:00
ctx . Data [ "Page" ] = paginator
2021-07-29 04:42:15 +03:00
if ctx . FormBool ( "div-only" ) {
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplGraphDiv )
2020-11-08 20:21:54 +03:00
return
}
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplGraph )
2016-12-29 02:44:32 +03:00
}
2016-11-24 10:04:31 +03:00
// SearchCommits render commits filtered by keyword
2016-03-11 19:56:52 +03:00
func SearchCommits ( ctx * context . Context ) {
2015-08-20 15:18:49 +03:00
ctx . Data [ "PageIsCommits" ] = true
2017-10-26 03:49:16 +03:00
ctx . Data [ "PageIsViewCode" ] = true
2014-07-26 10:28:04 +04:00
2021-08-11 18:08:52 +03:00
query := ctx . FormTrim ( "q" )
2019-04-12 05:28:44 +03:00
if len ( query ) == 0 {
2017-10-30 05:04:25 +03:00
ctx . Redirect ( ctx . Repo . RepoLink + "/commits/" + ctx . Repo . BranchNameSubURL ( ) )
2014-07-26 10:28:04 +04:00
return
}
2021-07-29 04:42:15 +03:00
all := ctx . FormBool ( "all" )
2019-04-12 05:28:44 +03:00
opts := git . NewSearchCommitsOptions ( query , all )
commits , err := ctx . Repo . Commit . SearchCommits ( opts )
2014-07-26 10:28:04 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "SearchCommits" , err )
2014-07-26 10:28:04 +04:00
return
}
2021-08-09 21:08:51 +03:00
ctx . Data [ "CommitCount" ] = len ( commits )
ctx . Data [ "Commits" ] = models . ConvertFromGitCommit ( commits , ctx . Repo . Repository )
2014-07-26 10:28:04 +04:00
2019-04-12 05:28:44 +03:00
ctx . Data [ "Keyword" ] = query
2017-02-05 17:43:28 +03:00
if all {
ctx . Data [ "All" ] = "checked"
}
2015-11-11 00:46:17 +03:00
ctx . Data [ "Username" ] = ctx . Repo . Owner . Name
ctx . Data [ "Reponame" ] = ctx . Repo . Repository . Name
2021-11-18 02:50:17 +03:00
ctx . Data [ "RefName" ] = ctx . Repo . RefName
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCommits )
2014-07-26 10:28:04 +04:00
}
2016-11-24 10:04:31 +03:00
// FileHistory show a file's reversions
2016-03-11 19:56:52 +03:00
func FileHistory ( ctx * context . Context ) {
2014-11-07 06:06:41 +03:00
ctx . Data [ "IsRepoToolbarCommits" ] = true
2016-08-25 07:35:03 +03:00
fileName := ctx . Repo . TreePath
2014-11-07 06:06:41 +03:00
if len ( fileName ) == 0 {
Commits ( ctx )
return
}
2021-11-18 02:50:17 +03:00
commitsCount , err := ctx . Repo . GitRepo . FileCommitsCount ( ctx . Repo . RefName , fileName )
2014-11-07 06:06:41 +03:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "FileCommitsCount" , err )
2014-11-07 06:06:41 +03:00
return
} else if commitsCount == 0 {
2018-01-11 00:34:17 +03:00
ctx . NotFound ( "FileCommitsCount" , nil )
2014-11-07 06:06:41 +03:00
return
}
2021-07-29 04:42:15 +03:00
page := ctx . FormInt ( "page" )
2015-11-11 00:46:17 +03:00
if page <= 1 {
2014-11-07 06:06:41 +03:00
page = 1
}
2021-11-18 02:50:17 +03:00
commits , err := ctx . Repo . GitRepo . CommitsByFileAndRange ( ctx . Repo . RefName , fileName , page )
2014-11-07 06:06:41 +03:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "CommitsByFileAndRange" , err )
2014-11-07 06:06:41 +03:00
return
}
2021-08-09 21:08:51 +03:00
ctx . Data [ "Commits" ] = models . ConvertFromGitCommit ( commits , ctx . Repo . Repository )
2015-11-11 00:46:17 +03:00
ctx . Data [ "Username" ] = ctx . Repo . Owner . Name
ctx . Data [ "Reponame" ] = ctx . Repo . Repository . Name
2014-11-07 06:06:41 +03:00
ctx . Data [ "FileName" ] = fileName
ctx . Data [ "CommitCount" ] = commitsCount
2021-11-18 02:50:17 +03:00
ctx . Data [ "RefName" ] = ctx . Repo . RefName
2019-04-20 07:15:19 +03:00
2021-06-26 14:28:55 +03:00
pager := context . NewPagination ( int ( commitsCount ) , setting . Git . CommitsRangeSize , page , 5 )
2019-04-20 07:15:19 +03:00
pager . SetDefaultParams ( ctx )
ctx . Data [ "Page" ] = pager
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCommits )
2014-11-07 06:06:41 +03:00
}
2016-11-24 10:04:31 +03:00
// Diff show different from current commit to previous commit
2016-03-11 19:56:52 +03:00
func Diff ( ctx * context . Context ) {
2015-08-20 19:18:30 +03:00
ctx . Data [ "PageIsDiff" ] = true
2016-08-16 17:31:54 +03:00
ctx . Data [ "RequireHighlightJS" ] = true
2020-01-26 11:17:25 +03:00
ctx . Data [ "RequireTribute" ] = true
2014-07-26 10:28:04 +04:00
userName := ctx . Repo . Owner . Name
repoName := ctx . Repo . Repository . Name
2016-03-21 17:49:46 +03:00
commitID := ctx . Params ( ":sha" )
2020-05-16 19:38:40 +03:00
var (
2021-08-31 07:16:23 +03:00
gitRepo * git . Repository
err error
2020-05-16 19:38:40 +03:00
)
if ctx . Data [ "PageIsWiki" ] != nil {
2022-03-29 22:13:41 +03:00
gitRepo , err = git . OpenRepository ( ctx , ctx . Repo . Repository . WikiPath ( ) )
2020-05-16 19:38:40 +03:00
if err != nil {
ctx . ServerError ( "Repo.GitRepo.GetCommit" , err )
return
}
2021-08-31 07:16:23 +03:00
defer gitRepo . Close ( )
2020-05-16 19:38:40 +03:00
} else {
gitRepo = ctx . Repo . GitRepo
}
2016-03-21 17:49:46 +03:00
2020-05-16 19:38:40 +03:00
commit , err := gitRepo . GetCommit ( commitID )
2016-03-21 17:49:46 +03:00
if err != nil {
2016-08-16 01:27:19 +03:00
if git . IsErrNotExist ( err ) {
2018-01-11 00:34:17 +03:00
ctx . NotFound ( "Repo.GitRepo.GetCommit" , err )
2016-08-16 01:27:19 +03:00
} else {
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "Repo.GitRepo.GetCommit" , err )
2016-08-16 01:27:19 +03:00
}
2016-03-21 17:49:46 +03:00
return
}
2016-11-07 00:15:44 +03:00
if len ( commitID ) != 40 {
commitID = commit . ID . String ( )
}
2017-09-14 09:51:32 +03:00
2021-11-21 19:51:08 +03:00
fileOnly := ctx . FormBool ( "file-only" )
maxLines , maxFiles := setting . Git . MaxGitDiffLines , setting . Git . MaxGitDiffFiles
files := ctx . FormStrings ( "files" )
if fileOnly && ( len ( files ) == 2 || len ( files ) == 1 ) {
maxLines , maxFiles = - 1 , - 1
}
diff , err := gitdiff . GetDiff ( gitRepo , & gitdiff . DiffOptions {
AfterCommitID : commitID ,
SkipTo : ctx . FormString ( "skip-to" ) ,
MaxLines : maxLines ,
MaxLineCharacters : setting . Git . MaxGitDiffLineCharacters ,
MaxFiles : maxFiles ,
WhitespaceBehavior : gitdiff . GetWhitespaceFlag ( ctx . Data [ "WhitespaceBehavior" ] . ( string ) ) ,
} , files ... )
2014-07-26 10:28:04 +04:00
if err != nil {
2021-11-21 19:51:08 +03:00
ctx . NotFound ( "GetDiff" , err )
2014-07-26 10:28:04 +04:00
return
}
parents := make ( [ ] string , commit . ParentCount ( ) )
for i := 0 ; i < commit . ParentCount ( ) ; i ++ {
2015-12-10 04:46:05 +03:00
sha , err := commit . ParentID ( i )
2014-07-26 10:28:04 +04:00
if err != nil {
2018-01-11 00:34:17 +03:00
ctx . NotFound ( "repo.Diff" , err )
2014-07-26 10:28:04 +04:00
return
}
2020-02-28 02:10:27 +03:00
parents [ i ] = sha . String ( )
2014-07-26 10:28:04 +04:00
}
2016-03-21 17:49:46 +03:00
ctx . Data [ "CommitID" ] = commitID
2019-11-15 05:52:59 +03:00
ctx . Data [ "AfterCommitID" ] = commitID
2014-07-26 10:28:04 +04:00
ctx . Data [ "Username" ] = userName
ctx . Data [ "Reponame" ] = repoName
2019-10-04 22:58:54 +03:00
var parentCommit * git . Commit
2019-09-16 12:03:22 +03:00
if commit . ParentCount ( ) > 0 {
2020-05-16 19:38:40 +03:00
parentCommit , err = gitRepo . GetCommit ( parents [ 0 ] )
2019-09-16 12:03:22 +03:00
if err != nil {
ctx . NotFound ( "GetParentCommit" , err )
return
}
}
2021-11-16 21:18:25 +03:00
setCompareContext ( ctx , parentCommit , commit , userName , repoName )
2015-08-31 10:24:28 +03:00
ctx . Data [ "Title" ] = commit . Summary ( ) + " · " + base . ShortSha ( commitID )
2014-07-26 10:28:04 +04:00
ctx . Data [ "Commit" ] = commit
2021-10-15 19:05:33 +03:00
ctx . Data [ "Diff" ] = diff
2021-12-15 08:39:34 +03:00
statuses , _ , err := models . GetLatestCommitStatus ( ctx . Repo . Repository . ID , commitID , db . ListOptions { } )
2021-10-15 19:05:33 +03:00
if err != nil {
log . Error ( "GetLatestCommitStatus: %v" , err )
}
ctx . Data [ "CommitStatus" ] = models . CalcCommitStatus ( statuses )
ctx . Data [ "CommitStatuses" ] = statuses
2021-12-10 11:14:24 +03:00
verification := asymkey_model . ParseCommitWithSignature ( commit )
2020-02-27 22:20:55 +03:00
ctx . Data [ "Verification" ] = verification
2021-11-24 12:49:20 +03:00
ctx . Data [ "Author" ] = user_model . ValidateCommitWithEmail ( commit )
2014-07-26 10:28:04 +04:00
ctx . Data [ "Parents" ] = parents
2020-05-26 08:58:07 +03:00
ctx . Data [ "DiffNotAvailable" ] = diff . NumFiles == 0
2019-05-24 10:52:05 +03:00
2021-12-10 11:14:24 +03:00
if err := asymkey_model . CalculateTrustStatus ( verification , ctx . Repo . Repository . GetTrustModel ( ) , func ( user * user_model . User ) ( bool , error ) {
2022-02-02 13:10:06 +03:00
return models . IsOwnerMemberCollaborator ( ctx . Repo . Repository , user . ID )
2021-12-10 11:14:24 +03:00
} , nil ) ; err != nil {
2020-02-27 22:20:55 +03:00
ctx . ServerError ( "CalculateTrustStatus" , err )
return
}
2019-05-24 10:52:05 +03:00
note := & git . Note { }
2021-06-07 02:44:58 +03:00
err = git . GetNote ( ctx , ctx . Repo . GitRepo , commitID , note )
2019-05-24 10:52:05 +03:00
if err == nil {
2019-08-15 15:07:28 +03:00
ctx . Data [ "Note" ] = string ( charset . ToUTF8WithFallback ( note . Message ) )
2019-05-24 10:52:05 +03:00
ctx . Data [ "NoteCommit" ] = note . Commit
2021-11-24 12:49:20 +03:00
ctx . Data [ "NoteAuthor" ] = user_model . ValidateCommitWithEmail ( note . Commit )
2019-05-24 10:52:05 +03:00
}
2019-04-19 15:17:27 +03:00
ctx . Data [ "BranchName" ] , err = commit . GetBranchName ( )
2019-06-12 22:41:28 +03:00
if err != nil {
ctx . ServerError ( "commit.GetBranchName" , err )
2020-05-23 22:49:48 +03:00
return
2019-06-12 22:41:28 +03:00
}
2020-06-11 22:42:55 +03:00
ctx . Data [ "TagName" ] , err = commit . GetTagName ( )
if err != nil {
ctx . ServerError ( "commit.GetTagName" , err )
return
}
2021-04-05 18:30:52 +03:00
ctx . HTML ( http . StatusOK , tplCommitPage )
2014-07-26 10:28:04 +04:00
}
2016-11-24 10:04:31 +03:00
// RawDiff dumps diff results of repository in given commit ID to io.Writer
2016-03-21 17:49:46 +03:00
func RawDiff ( ctx * context . Context ) {
2020-05-16 19:38:40 +03:00
var repoPath string
if ctx . Data [ "PageIsWiki" ] != nil {
repoPath = ctx . Repo . Repository . WikiPath ( )
} else {
2021-12-10 04:27:50 +03:00
repoPath = repo_model . RepoPath ( ctx . Repo . Owner . Name , ctx . Repo . Repository . Name )
2020-05-16 19:38:40 +03:00
}
2020-01-28 11:02:03 +03:00
if err := git . GetRawDiff (
2022-01-20 02:26:57 +03:00
ctx ,
2020-05-16 19:38:40 +03:00
repoPath ,
2016-07-30 18:02:22 +03:00
ctx . Params ( ":sha" ) ,
2020-01-28 11:02:03 +03:00
git . RawDiffType ( ctx . Params ( ":ext" ) ) ,
2016-07-30 18:39:58 +03:00
ctx . Resp ,
) ; err != nil {
2021-04-01 08:17:14 +03:00
if git . IsErrNotExist ( err ) {
ctx . NotFound ( "GetRawDiff" ,
errors . New ( "commit " + ctx . Params ( ":sha" ) + " does not exist." ) )
return
}
2018-01-11 00:34:17 +03:00
ctx . ServerError ( "GetRawDiff" , err )
2016-07-30 18:02:22 +03:00
return
}
2016-03-21 17:49:46 +03:00
}