Skip to content

Commit 7f21b3f

Browse files
committed
improve performance of diffs
This has two major changes that significantly reduce the amount of work done for large diffs: * Kill a running git process when reaching the maximum number of files in a diff, preventing it from processing the entire diff. * When loading a diff with the URL param `file-only=true`, skip loading stats. This speeds up loading both hidden files of a diff and sections of a diff when clicking the "Show More" button. A couple of minor things from profiling: * Reuse open git commits if possible to avoid querying the repo. * Reuse existing repo in `PrepareViewPullInfo` if head and base are the same.
1 parent 0690cb0 commit 7f21b3f

File tree

7 files changed

+84
-65
lines changed

7 files changed

+84
-65
lines changed

routers/web/repo/commit.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ func Diff(ctx *context.Context) {
328328
MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
329329
MaxFiles: maxFiles,
330330
WhitespaceBehavior: gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)),
331+
FileOnly: fileOnly,
331332
}, files...)
332333
if err != nil {
333334
ctx.NotFound("GetDiff", err)

routers/web/repo/compare.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,8 @@ func PrepareCompareDiff(
611611
maxLines, maxFiles = -1, -1
612612
}
613613

614+
fileOnly := ctx.FormBool("file-only")
615+
614616
diff, err := gitdiff.GetDiff(ctx, ci.HeadGitRepo,
615617
&gitdiff.DiffOptions{
616618
BeforeCommitID: beforeCommitID,
@@ -621,6 +623,7 @@ func PrepareCompareDiff(
621623
MaxFiles: maxFiles,
622624
WhitespaceBehavior: whitespaceBehavior,
623625
DirectComparison: ci.DirectComparison,
626+
FileOnly: fileOnly,
624627
}, ctx.FormStrings("files")...)
625628
if err != nil {
626629
ctx.ServerError("GetDiffRangeWithWhitespaceBehavior", err)

routers/web/repo/pull.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -395,12 +395,17 @@ func PrepareViewPullInfo(ctx *context.Context, issue *issues_model.Issue) *git.C
395395
var headBranchSha string
396396
// HeadRepo may be missing
397397
if pull.HeadRepo != nil {
398-
headGitRepo, err := gitrepo.OpenRepository(ctx, pull.HeadRepo)
399-
if err != nil {
400-
ctx.ServerError("OpenRepository", err)
401-
return nil
398+
var headGitRepo *git.Repository
399+
if ctx.Repo != nil && ctx.Repo.Repository != nil && pull.HeadRepoID == ctx.Repo.Repository.ID && ctx.Repo.GitRepo != nil {
400+
headGitRepo = ctx.Repo.GitRepo
401+
} else {
402+
headGitRepo, err = gitrepo.OpenRepository(ctx, pull.HeadRepo)
403+
if err != nil {
404+
ctx.ServerError("OpenRepository", err)
405+
return nil
406+
}
407+
defer headGitRepo.Close()
402408
}
403-
defer headGitRepo.Close()
404409

405410
if pull.Flow == issues_model.PullRequestFlowGithub {
406411
headBranchExist = headGitRepo.IsBranchExist(pull.HeadBranch)
@@ -740,17 +745,31 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
740745
maxLines, maxFiles = -1, -1
741746
}
742747

748+
baseCommit, err := ctx.Repo.GitRepo.GetCommit(startCommitID)
749+
if err != nil {
750+
ctx.ServerError("GetCommit", err)
751+
return
752+
}
753+
commit, err := gitRepo.GetCommit(endCommitID)
754+
if err != nil {
755+
ctx.ServerError("GetCommit", err)
756+
return
757+
}
758+
743759
diffOptions := &gitdiff.DiffOptions{
744760
AfterCommitID: endCommitID,
761+
AfterCommit: commit,
745762
SkipTo: ctx.FormString("skip-to"),
746763
MaxLines: maxLines,
747764
MaxLineCharacters: setting.Git.MaxGitDiffLineCharacters,
748765
MaxFiles: maxFiles,
749766
WhitespaceBehavior: gitdiff.GetWhitespaceFlag(ctx.Data["WhitespaceBehavior"].(string)),
767+
FileOnly: fileOnly,
750768
}
751769

752770
if !willShowSpecifiedCommit {
753771
diffOptions.BeforeCommitID = startCommitID
772+
diffOptions.BeforeCommit = baseCommit
754773
}
755774

756775
var methodWithError string
@@ -813,17 +832,6 @@ func viewPullFiles(ctx *context.Context, specifiedStartCommit, specifiedEndCommi
813832
ctx.Data["Diff"] = diff
814833
ctx.Data["DiffNotAvailable"] = diff.NumFiles == 0
815834

816-
baseCommit, err := ctx.Repo.GitRepo.GetCommit(startCommitID)
817-
if err != nil {
818-
ctx.ServerError("GetCommit", err)
819-
return
820-
}
821-
commit, err := gitRepo.GetCommit(endCommitID)
822-
if err != nil {
823-
ctx.ServerError("GetCommit", err)
824-
return
825-
}
826-
827835
if ctx.IsSigned && ctx.Doer != nil {
828836
if ctx.Data["CanMarkConversation"], err = issues_model.CanMarkConversation(ctx, issue, ctx.Doer); err != nil {
829837
ctx.ServerError("CanMarkConversation", err)

services/gitdiff/csv_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ c,d,e`,
191191
}
192192

193193
for n, c := range cases {
194-
diff, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(c.diff), "")
194+
diff, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(c.diff), "", nil)
195195
if err != nil {
196196
t.Errorf("ParsePatch failed: %s", err)
197197
}

services/gitdiff/gitdiff.go

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -380,18 +380,11 @@ func (diffFile *DiffFile) GetType() int {
380380
}
381381

382382
// GetTailSection creates a fake DiffLineSection if the last section is not the end of the file
383-
func (diffFile *DiffFile) GetTailSection(gitRepo *git.Repository, leftCommitID, rightCommitID string) *DiffSection {
383+
func (diffFile *DiffFile) GetTailSection(gitRepo *git.Repository, leftCommit, rightCommit *git.Commit) *DiffSection {
384384
if len(diffFile.Sections) == 0 || diffFile.Type != DiffFileChange || diffFile.IsBin || diffFile.IsLFSFile {
385385
return nil
386386
}
387-
leftCommit, err := gitRepo.GetCommit(leftCommitID)
388-
if err != nil {
389-
return nil
390-
}
391-
rightCommit, err := gitRepo.GetCommit(rightCommitID)
392-
if err != nil {
393-
return nil
394-
}
387+
395388
lastSection := diffFile.Sections[len(diffFile.Sections)-1]
396389
lastLine := lastSection.Lines[len(lastSection.Lines)-1]
397390
leftLineCount := getCommitFileLineCount(leftCommit, diffFile.Name)
@@ -494,7 +487,7 @@ func (diff *Diff) LoadComments(ctx context.Context, issue *issues_model.Issue, c
494487
const cmdDiffHead = "diff --git "
495488

496489
// ParsePatch builds a Diff object from a io.Reader and some parameters.
497-
func ParsePatch(ctx context.Context, maxLines, maxLineCharacters, maxFiles int, reader io.Reader, skipToFile string) (*Diff, error) {
490+
func ParsePatch(ctx context.Context, maxLines, maxLineCharacters, maxFiles int, reader io.Reader, skipToFile string, cancel context.CancelFunc) (*Diff, error) {
498491
log.Debug("ParsePatch(%d, %d, %d, ..., %s)", maxLines, maxLineCharacters, maxFiles, skipToFile)
499492
var curFile *DiffFile
500493

@@ -536,6 +529,11 @@ parsingLoop:
536529
lastFile := createDiffFile(diff, line)
537530
diff.End = lastFile.Name
538531
diff.IsIncomplete = true
532+
533+
// signal that we are exiting this diff early
534+
if cancel != nil {
535+
cancel()
536+
}
539537
_, err := io.Copy(io.Discard, reader)
540538
if err != nil {
541539
// By the definition of io.Copy this never returns io.EOF
@@ -1094,13 +1092,16 @@ func readFileName(rd *strings.Reader) (string, bool) {
10941092
// DiffOptions represents the options for a DiffRange
10951093
type DiffOptions struct {
10961094
BeforeCommitID string
1095+
BeforeCommit *git.Commit
10971096
AfterCommitID string
1097+
AfterCommit *git.Commit
10981098
SkipTo string
10991099
MaxLines int
11001100
MaxLineCharacters int
11011101
MaxFiles int
11021102
WhitespaceBehavior git.TrustedCmdArgs
11031103
DirectComparison bool
1104+
FileOnly bool
11041105
}
11051106

11061107
// GetDiff builds a Diff between two commits of a repository.
@@ -1109,12 +1110,19 @@ type DiffOptions struct {
11091110
func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, files ...string) (*Diff, error) {
11101111
repoPath := gitRepo.Path
11111112

1112-
commit, err := gitRepo.GetCommit(opts.AfterCommitID)
1113-
if err != nil {
1114-
return nil, err
1113+
commit := opts.AfterCommit
1114+
if commit == nil {
1115+
var err error
1116+
commit, err = gitRepo.GetCommit(opts.AfterCommitID)
1117+
if err != nil {
1118+
return nil, err
1119+
}
11151120
}
11161121

1117-
cmdDiff := git.NewCommand(gitRepo.Ctx)
1122+
ctx, cancel := context.WithCancel(ctx)
1123+
defer cancel()
1124+
1125+
cmdDiff := git.NewCommand(ctx)
11181126
objectFormat, err := gitRepo.GetObjectFormat()
11191127
if err != nil {
11201128
return nil, err
@@ -1136,6 +1144,14 @@ func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, fi
11361144
AddArguments(opts.WhitespaceBehavior...).
11371145
AddDynamicArguments(actualBeforeCommitID, opts.AfterCommitID)
11381146
opts.BeforeCommitID = actualBeforeCommitID
1147+
1148+
if opts.BeforeCommit == nil {
1149+
var err error
1150+
opts.BeforeCommit, err = gitRepo.GetCommit(opts.BeforeCommitID)
1151+
if err != nil {
1152+
return nil, err
1153+
}
1154+
}
11391155
}
11401156

11411157
// In git 2.31, git diff learned --skip-to which we can use to shortcut skip to file
@@ -1163,14 +1179,14 @@ func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, fi
11631179
Dir: repoPath,
11641180
Stdout: writer,
11651181
Stderr: stderr,
1166-
}); err != nil {
1182+
}); err != nil && err.Error() != "signal: killed" {
11671183
log.Error("error during GetDiff(git diff dir: %s): %v, stderr: %s", repoPath, err, stderr.String())
11681184
}
11691185

11701186
_ = writer.Close()
11711187
}()
11721188

1173-
diff, err := ParsePatch(ctx, opts.MaxLines, opts.MaxLineCharacters, opts.MaxFiles, reader, parsePatchSkipToFile)
1189+
diff, err := ParsePatch(ctx, opts.MaxLines, opts.MaxLineCharacters, opts.MaxFiles, reader, parsePatchSkipToFile, cancel)
11741190
if err != nil {
11751191
return nil, fmt.Errorf("unable to ParsePatch: %w", err)
11761192
}
@@ -1205,37 +1221,28 @@ func GetDiff(ctx context.Context, gitRepo *git.Repository, opts *DiffOptions, fi
12051221
}
12061222
diffFile.IsGenerated = isGenerated.Value()
12071223

1208-
tailSection := diffFile.GetTailSection(gitRepo, opts.BeforeCommitID, opts.AfterCommitID)
1224+
tailSection := diffFile.GetTailSection(gitRepo, opts.BeforeCommit, commit)
12091225
if tailSection != nil {
12101226
diffFile.Sections = append(diffFile.Sections, tailSection)
12111227
}
12121228
}
12131229

1214-
separator := "..."
1215-
if opts.DirectComparison {
1216-
separator = ".."
1230+
if opts.FileOnly {
1231+
return diff, nil
12171232
}
12181233

1219-
diffPaths := []string{opts.BeforeCommitID + separator + opts.AfterCommitID}
1220-
if len(opts.BeforeCommitID) == 0 || opts.BeforeCommitID == objectFormat.EmptyObjectID().String() {
1221-
diffPaths = []string{objectFormat.EmptyTree().String(), opts.AfterCommitID}
1222-
}
1223-
diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
1224-
if err != nil && strings.Contains(err.Error(), "no merge base") {
1225-
// git >= 2.28 now returns an error if base and head have become unrelated.
1226-
// previously it would return the results of git diff --shortstat base head so let's try that...
1227-
diffPaths = []string{opts.BeforeCommitID, opts.AfterCommitID}
1228-
diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
1229-
}
1234+
stats, err := GetPullDiffStats(gitRepo, opts)
12301235
if err != nil {
12311236
return nil, err
12321237
}
12331238

1239+
diff.NumFiles, diff.TotalAddition, diff.TotalDeletion = stats.NumFiles, stats.TotalAddition, stats.TotalDeletion
1240+
12341241
return diff, nil
12351242
}
12361243

12371244
type PullDiffStats struct {
1238-
TotalAddition, TotalDeletion int
1245+
NumFiles, TotalAddition, TotalDeletion int
12391246
}
12401247

12411248
// GetPullDiffStats
@@ -1259,12 +1266,12 @@ func GetPullDiffStats(gitRepo *git.Repository, opts *DiffOptions) (*PullDiffStat
12591266
diffPaths = []string{objectFormat.EmptyTree().String(), opts.AfterCommitID}
12601267
}
12611268

1262-
_, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
1269+
diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
12631270
if err != nil && strings.Contains(err.Error(), "no merge base") {
12641271
// git >= 2.28 now returns an error if base and head have become unrelated.
12651272
// previously it would return the results of git diff --shortstat base head so let's try that...
12661273
diffPaths = []string{opts.BeforeCommitID, opts.AfterCommitID}
1267-
_, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
1274+
diff.NumFiles, diff.TotalAddition, diff.TotalDeletion, err = git.GetDiffShortStat(gitRepo.Ctx, repoPath, nil, diffPaths...)
12681275
}
12691276
if err != nil {
12701277
return nil, err
@@ -1345,7 +1352,7 @@ outer:
13451352
// CommentAsDiff returns c.Patch as *Diff
13461353
func CommentAsDiff(ctx context.Context, c *issues_model.Comment) (*Diff, error) {
13471354
diff, err := ParsePatch(ctx, setting.Git.MaxGitDiffLines,
1348-
setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(c.Patch), "")
1355+
setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(c.Patch), "", nil)
13491356
if err != nil {
13501357
log.Error("Unable to parse patch: %v", err)
13511358
return nil, err

services/gitdiff/gitdiff_test.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ diff --git "\\a/README.md" "\\b/README.md"
175175
}
176176
for _, testcase := range tests {
177177
t.Run(testcase.name, func(t *testing.T) {
178-
got, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), testcase.skipTo)
178+
got, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), testcase.skipTo, nil)
179179
if (err != nil) != testcase.wantErr {
180180
t.Errorf("ParsePatch(%q) error = %v, wantErr %v", testcase.name, err, testcase.wantErr)
181181
return
@@ -400,7 +400,7 @@ index 6961180..9ba1a00 100644
400400

401401
for _, testcase := range tests {
402402
t.Run(testcase.name, func(t *testing.T) {
403-
got, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "")
403+
got, err := ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "", nil)
404404
if (err != nil) != testcase.wantErr {
405405
t.Errorf("ParsePatch(%q) error = %v, wantErr %v", testcase.name, err, testcase.wantErr)
406406
return
@@ -449,21 +449,21 @@ index 0000000..6bb8f39
449449
diffBuilder.WriteString("+line" + strconv.Itoa(i) + "\n")
450450
}
451451
diff = diffBuilder.String()
452-
result, err := ParsePatch(db.DefaultContext, 20, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
452+
result, err := ParsePatch(db.DefaultContext, 20, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
453453
if err != nil {
454454
t.Errorf("There should not be an error: %v", err)
455455
}
456456
if !result.Files[0].IsIncomplete {
457457
t.Errorf("Files should be incomplete! %v", result.Files[0])
458458
}
459-
result, err = ParsePatch(db.DefaultContext, 40, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
459+
result, err = ParsePatch(db.DefaultContext, 40, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
460460
if err != nil {
461461
t.Errorf("There should not be an error: %v", err)
462462
}
463463
if result.Files[0].IsIncomplete {
464464
t.Errorf("Files should not be incomplete! %v", result.Files[0])
465465
}
466-
result, err = ParsePatch(db.DefaultContext, 40, 5, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
466+
result, err = ParsePatch(db.DefaultContext, 40, 5, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
467467
if err != nil {
468468
t.Errorf("There should not be an error: %v", err)
469469
}
@@ -494,14 +494,14 @@ index 0000000..6bb8f39
494494
diffBuilder.WriteString("+line" + strconv.Itoa(35) + "\n")
495495
diff = diffBuilder.String()
496496

497-
result, err = ParsePatch(db.DefaultContext, 20, 4096, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
497+
result, err = ParsePatch(db.DefaultContext, 20, 4096, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
498498
if err != nil {
499499
t.Errorf("There should not be an error: %v", err)
500500
}
501501
if !result.Files[0].IsIncomplete {
502502
t.Errorf("Files should be incomplete! %v", result.Files[0])
503503
}
504-
result, err = ParsePatch(db.DefaultContext, 40, 4096, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
504+
result, err = ParsePatch(db.DefaultContext, 40, 4096, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
505505
if err != nil {
506506
t.Errorf("There should not be an error: %v", err)
507507
}
@@ -520,7 +520,7 @@ index 0000000..6bb8f39
520520
Docker Pulls
521521
+ cut off
522522
+ cut off`
523-
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "")
523+
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff), "", nil)
524524
if err != nil {
525525
t.Errorf("ParsePatch failed: %s", err)
526526
}
@@ -536,7 +536,7 @@ index 0000000..6bb8f39
536536
Docker Pulls
537537
+ cut off
538538
+ cut off`
539-
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff2), "")
539+
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff2), "", nil)
540540
if err != nil {
541541
t.Errorf("ParsePatch failed: %s", err)
542542
}
@@ -552,7 +552,7 @@ index 0000000..6bb8f39
552552
Docker Pulls
553553
+ cut off
554554
+ cut off`
555-
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff2a), "")
555+
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff2a), "", nil)
556556
if err != nil {
557557
t.Errorf("ParsePatch failed: %s", err)
558558
}
@@ -568,7 +568,7 @@ index 0000000..6bb8f39
568568
Docker Pulls
569569
+ cut off
570570
+ cut off`
571-
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff3), "")
571+
_, err = ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(diff3), "", nil)
572572
if err != nil {
573573
t.Errorf("ParsePatch failed: %s", err)
574574
}
@@ -665,6 +665,6 @@ func TestNoCrashes(t *testing.T) {
665665
}
666666
for _, testcase := range tests {
667667
// It shouldn't crash, so don't care about the output.
668-
ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "")
668+
ParsePatch(db.DefaultContext, setting.Git.MaxGitDiffLines, setting.Git.MaxGitDiffLineCharacters, setting.Git.MaxGitDiffFiles, strings.NewReader(testcase.gitdiff), "", nil)
669669
}
670670
}

0 commit comments

Comments
 (0)