]> source.dussan.org Git - gitea.git/commitdiff
Fix CSV diff for added/deleted files (#21189) (#21193)
authorwxiaoguang <wxiaoguang@gmail.com>
Sat, 17 Sep 2022 10:53:04 +0000 (18:53 +0800)
committerGitHub <noreply@github.com>
Sat, 17 Sep 2022 10:53:04 +0000 (18:53 +0800)
Backport #21189
Fixes #21184
Regression of #19552

Instead of using `GetBlobByPath`, use the already existing instances.

routers/web/repo/compare.go
templates/repo/diff/box.tmpl
templates/repo/diff/csv_diff.tmpl

index 5c46882f3d2642d3a739a9578fae76f2fbcbd077..903a2e8ede4d5415f2f4e522862e15e4eacecfd7 100644 (file)
@@ -113,17 +113,17 @@ func setCsvCompareContext(ctx *context.Context) {
                Error    string
        }
 
-       ctx.Data["CreateCsvDiff"] = func(diffFile *gitdiff.DiffFile, baseCommit, headCommit *git.Commit) CsvDiffResult {
-               if diffFile == nil || baseCommit == nil || headCommit == nil {
+       ctx.Data["CreateCsvDiff"] = func(diffFile *gitdiff.DiffFile, baseBlob, headBlob *git.Blob) CsvDiffResult {
+               if diffFile == nil {
                        return CsvDiffResult{nil, ""}
                }
 
                errTooLarge := errors.New(ctx.Locale.Tr("repo.error.csv.too_large"))
 
-               csvReaderFromCommit := func(ctx *markup.RenderContext, c *git.Commit) (*csv.Reader, io.Closer, error) {
-                       blob, err := c.GetBlobByPath(diffFile.Name)
-                       if err != nil {
-                               return nil, nil, err
+               csvReaderFromCommit := func(ctx *markup.RenderContext, blob *git.Blob) (*csv.Reader, io.Closer, error) {
+                       if blob == nil {
+                               // It's ok for blob to be nil (file added or deleted)
+                               return nil, nil, nil
                        }
 
                        if setting.UI.CSV.MaxFileSize != 0 && setting.UI.CSV.MaxFileSize < blob.Size() {
@@ -139,28 +139,28 @@ func setCsvCompareContext(ctx *context.Context) {
                        return csvReader, reader, err
                }
 
-               baseReader, baseBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.OldName}, baseCommit)
+               baseReader, baseBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.OldName}, baseBlob)
                if baseBlobCloser != nil {
                        defer baseBlobCloser.Close()
                }
-               if err == errTooLarge {
-                       return CsvDiffResult{nil, err.Error()}
-               }
                if err != nil {
-                       log.Error("CreateCsvDiff error whilst creating baseReader from file %s in commit %s in %s: %v", diffFile.Name, baseCommit.ID.String(), ctx.Repo.Repository.Name, err)
-                       return CsvDiffResult{nil, "unable to load file from base commit"}
+                       if err == errTooLarge {
+                               return CsvDiffResult{nil, err.Error()}
+                       }
+                       log.Error("error whilst creating csv.Reader from file %s in base commit %s in %s: %v", diffFile.Name, baseBlob.ID.String(), ctx.Repo.Repository.Name, err)
+                       return CsvDiffResult{nil, "unable to load file"}
                }
 
-               headReader, headBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.Name}, headCommit)
+               headReader, headBlobCloser, err := csvReaderFromCommit(&markup.RenderContext{Ctx: ctx, RelativePath: diffFile.Name}, headBlob)
                if headBlobCloser != nil {
                        defer headBlobCloser.Close()
                }
-               if err == errTooLarge {
-                       return CsvDiffResult{nil, err.Error()}
-               }
                if err != nil {
-                       log.Error("CreateCsvDiff error whilst creating headReader from file %s in commit %s in %s: %v", diffFile.Name, headCommit.ID.String(), ctx.Repo.Repository.Name, err)
-                       return CsvDiffResult{nil, "unable to load file from head commit"}
+                       if err == errTooLarge {
+                               return CsvDiffResult{nil, err.Error()}
+                       }
+                       log.Error("error whilst creating csv.Reader from file %s in head commit %s in %s: %v", diffFile.Name, headBlob.ID.String(), ctx.Repo.Repository.Name, err)
+                       return CsvDiffResult{nil, "unable to load file"}
                }
 
                sections, err := gitdiff.CreateCsvDiff(diffFile, baseReader, headReader)
index 2fbc5b0e10f368606e92bc26901653b035e4df1a..98669ce0cb7a2135ece2bb9dc81b3b801adbcea9 100644 (file)
                                                                        {{if $isImage}}
                                                                                {{template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}}
                                                                        {{else}}
-                                                                               {{template "repo/diff/csv_diff" dict "file" . "root" $}}
+                                                                               {{template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}}
                                                                        {{end}}
                                                                </table>
                                                        </div>
index a92ef79301c6e88a27ca86262671a45f81067fec..0f46da306e73f9bc0481e9525a498671f25cda1c 100644 (file)
@@ -1,6 +1,6 @@
 <tr>
        <td>
-               {{$result := call .root.CreateCsvDiff .file .root.BaseCommit .root.HeadCommit}}
+               {{$result := call .root.CreateCsvDiff .file .blobBase .blobHead}}
                {{if $result.Error}}
                        <div class="ui center">{{$result.Error}}</div>
                {{else if $result.Sections}}