@ -114,12 +114,12 @@ func RefBlame(ctx *context.Context) {
return
}
commitNames , previousCommits := processBlameParts ( ctx , result . Parts )
commitNames := processBlameParts ( ctx , result . Parts )
if ctx . Written ( ) {
return
}
renderBlame ( ctx , result . Parts , commitNames , previousCommits )
renderBlame ( ctx , result . Parts , commitNames )
ctx . HTML ( http . StatusOK , tplRepoHome )
}
@ -185,12 +185,9 @@ func fillBlameResult(br *git.BlameReader, r *blameResult) error {
return nil
}
func processBlameParts ( ctx * context . Context , blameParts [ ] git . BlamePart ) ( map [ string ] * user_model . UserCommit , map [ string ] string ) {
func processBlameParts ( ctx * context . Context , blameParts [ ] git . BlamePart ) map [ string ] * user_model . UserCommit {
// store commit data by SHA to look up avatar info etc
commitNames := make ( map [ string ] * user_model . UserCommit )
// previousCommits contains links from SHA to parent SHA,
// if parent also contains the current TreePath.
previousCommits := make ( map [ string ] string )
// and as blameParts can reference the same commits multiple
// times, we cache the lookup work locally
commits := make ( [ ] * git . Commit , 0 , len ( blameParts ) )
@ -214,29 +211,11 @@ func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[st
} else {
ctx . ServerError ( "Repo.GitRepo.GetCommit" , err )
}
return nil , nil
return nil
}
commitCache [ sha ] = commit
}
// find parent commit
if commit . ParentCount ( ) > 0 {
psha := commit . Parents [ 0 ]
previousCommit , ok := commitCache [ psha . String ( ) ]
if ! ok {
previousCommit , _ = commit . Parent ( 0 )
if previousCommit != nil {
commitCache [ psha . String ( ) ] = previousCommit
}
}
// only store parent commit ONCE, if it has the file
if previousCommit != nil {
if haz1 , _ := previousCommit . HasFile ( ctx . Repo . TreePath ) ; haz1 {
previousCommits [ commit . ID . String ( ) ] = previousCommit . ID . String ( )
}
}
}
commits = append ( commits , commit )
}
@ -245,10 +224,10 @@ func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[st
commitNames [ c . ID . String ( ) ] = c
}
return commitNames , previousCommits
return commitNames
}
func renderBlame ( ctx * context . Context , blameParts [ ] git . BlamePart , commitNames map [ string ] * user_model . UserCommit , previousCommits map [ string ] string ) {
func renderBlame ( ctx * context . Context , blameParts [ ] git . BlamePart , commitNames map [ string ] * user_model . UserCommit ) {
repoLink := ctx . Repo . RepoLink
language := ""
@ -295,7 +274,6 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
}
commit := commitNames [ part . Sha ]
previousSha := previousCommits [ part . Sha ]
if index == 0 {
// Count commit number
commitCnt ++
@ -313,8 +291,8 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
br . Avatar = gotemplate . HTML ( avatar )
br . RepoLink = repoLink
br . PartSha = part . Sha
br . PreviousSha = previousSha
br . PreviousShaURL = fmt . Sprintf ( "%s/blame/commit/%s/%s" , repoLink , url . PathEscape ( previousSha ) , util . PathEscapeSegments ( ctx . Repo . Tree Path) )
br . PreviousSha = part . P reviousSha
br . PreviousShaURL = fmt . Sprintf ( "%s/blame/commit/%s/%s" , repoLink , url . PathEscape ( part . P reviousSha ) , util . PathEscapeSegments ( part . Previous Path) )
br . CommitURL = fmt . Sprintf ( "%s/commit/%s" , repoLink , url . PathEscape ( part . Sha ) )
br . CommitMessage = commit . CommitMessage
br . CommitSince = commitSince