|
|
|
@ -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.TreePath)) |
|
|
|
|
br.PreviousSha = part.PreviousSha |
|
|
|
|
br.PreviousShaURL = fmt.Sprintf("%s/blame/commit/%s/%s", repoLink, url.PathEscape(part.PreviousSha), util.PathEscapeSegments(part.PreviousPath)) |
|
|
|
|
br.CommitURL = fmt.Sprintf("%s/commit/%s", repoLink, url.PathEscape(part.Sha)) |
|
|
|
|
br.CommitMessage = commit.CommitMessage |
|
|
|
|
br.CommitSince = commitSince |
|
|
|
|