Skip to content

Commit 6bf3c18

Browse files
Chi-IrohThomas Sayen
authored andcommitted
Uses git rev-list when no rename follow
1 parent e1b807f commit 6bf3c18

File tree

2 files changed

+28
-10
lines changed

2 files changed

+28
-10
lines changed

modules/git/commit.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,15 @@ type CommitsCountOptions struct {
173173

174174
// CommitsCount returns number of total commits of until given revision.
175175
func CommitsCount(ctx context.Context, opts CommitsCountOptions) (int64, error) {
176-
cmd := NewCommand("--no-pager", "log", "--pretty=format:%H")
176+
var cmd *Command
177+
cmd = nil
178+
followRename := len(opts.RelPath) > 0 && opts.FollowRename
179+
180+
if followRename {
181+
cmd = NewCommand("--no-pager", "log", "--pretty=format:%H")
182+
} else {
183+
cmd = NewCommand("rev-list", "--count")
184+
}
177185

178186
cmd.AddDynamicArguments(opts.Revision...)
179187

@@ -192,7 +200,11 @@ func CommitsCount(ctx context.Context, opts CommitsCountOptions) (int64, error)
192200
if err != nil {
193201
return 0, err
194202
}
195-
return int64(len(strings.Split(stdout, "\n"))), nil
203+
if followRename {
204+
return int64(len(strings.Split(stdout, "\n"))), nil
205+
} else {
206+
return strconv.ParseInt(strings.TrimSpace(stdout), 10, 64)
207+
}
196208
}
197209

198210
// CommitsCount returns number of total commits of until current revision.

modules/git/repo_commit.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,18 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
239239
}()
240240
go func() {
241241
stderr := strings.Builder{}
242-
gitCmd := NewCommand("--no-pager", "log").
243-
AddOptionFormat("--pretty=format:%%H").
244-
AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize).
245-
AddOptionFormat("--skip=%d", (opts.Page-1)*setting.Git.CommitsRangeSize)
246-
if opts.FollowRename {
247-
gitCmd.AddOptionValues("--follow")
242+
var gitCmd *Command
243+
244+
if !opts.FollowRename {
245+
gitCmd = NewCommand("rev-list")
246+
} else {
247+
gitCmd = NewCommand("--no-pager", "log").
248+
AddOptionFormat("--pretty=format:%%H").
249+
AddOptionFormat("--follow")
248250
}
251+
gitCmd.AddOptionFormat("--max-count=%d", setting.Git.CommitsRangeSize).
252+
AddOptionFormat("--skip=%d", (opts.Page-1)*setting.Git.CommitsRangeSize)
253+
249254
gitCmd.AddDynamicArguments(opts.Revision)
250255

251256
if opts.Not != "" {
@@ -264,7 +269,8 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
264269
Stdout: stdoutWriter,
265270
Stderr: &stderr,
266271
})
267-
if err != nil && err != io.ErrUnexpectedEOF {
272+
273+
if err != nil && !(opts.FollowRename && err == io.ErrUnexpectedEOF) {
268274
_ = stdoutWriter.CloseWithError(ConcatenateError(err, (&stderr).String()))
269275
} else {
270276
_ = stdoutWriter.Close()
@@ -281,7 +287,7 @@ func (repo *Repository) CommitsByFileAndRange(opts CommitsByFileAndRangeOptions)
281287
shaline := make([]byte, length+1)
282288
for {
283289
n, err := io.ReadFull(stdoutReader, shaline)
284-
if (err != nil && err != io.ErrUnexpectedEOF) || n < length {
290+
if (err != nil && !(opts.FollowRename && err == io.ErrUnexpectedEOF)) || n < length {
285291
if err == io.EOF {
286292
err = nil
287293
}

0 commit comments

Comments
 (0)