]> source.dussan.org Git - gitea.git/commitdiff
Calculate filename hash only once (#19654)
authorKN4CK3R <admin@oldschoolhack.me>
Sun, 8 May 2022 22:29:50 +0000 (00:29 +0200)
committerGitHub <noreply@github.com>
Sun, 8 May 2022 22:29:50 +0000 (00:29 +0200)
* Calculate hash only once.

* remove unused Sha1 template helper function, use ctx.Data["FileNameHash"]

* fix unit tests

modules/templates/helper.go
routers/web/repo/compare.go
services/gitdiff/gitdiff.go
services/repository/files/diff_test.go
templates/repo/diff/blob_excerpt.tmpl
templates/repo/diff/box.tmpl
templates/repo/diff/section_split.tmpl
templates/repo/diff/section_unified.tmpl

index 1201710b920dd559a9b5932761e37935619ecce0..682459d94a03532a2caa02a75504996cd8a55ea2 100644 (file)
@@ -146,7 +146,6 @@ func NewFuncMap() []template.FuncMap {
                "EllipsisString":                 base.EllipsisString,
                "DiffTypeToStr":                  DiffTypeToStr,
                "DiffLineTypeToStr":              DiffLineTypeToStr,
-               "Sha1":                           Sha1,
                "ShortSha":                       base.ShortSha,
                "MD5":                            base.EncodeMD5,
                "ActionContent2Commits":          ActionContent2Commits,
@@ -649,11 +648,6 @@ func DotEscape(raw string) string {
        return strings.ReplaceAll(raw, ".", "\u200d.\u200d")
 }
 
-// Sha1 returns sha1 sum of string
-func Sha1(str string) string {
-       return base.EncodeSha1(str)
-}
-
 // RenderCommitMessage renders commit message with XSS-safe and special links.
 func RenderCommitMessage(ctx context.Context, msg, urlPrefix string, metas map[string]string) template.HTML {
        return RenderCommitMessageLink(ctx, msg, urlPrefix, "", metas)
index d483227ebf29d1c46fa367aee896b7e1d29568b3..31914c43ab395ea40a1d02b0ef87416589ec33de 100644 (file)
@@ -874,7 +874,7 @@ func ExcerptBlob(ctx *context.Context) {
                }
        }
        ctx.Data["section"] = section
-       ctx.Data["fileName"] = filePath
+       ctx.Data["FileNameHash"] = base.EncodeSha1(filePath)
        ctx.Data["AfterCommitID"] = commitID
        ctx.Data["Anchor"] = anchor
        ctx.HTML(http.StatusOK, tplBlobExcerpt)
index 7fe056a4818b85f604dab3511e38b2fe969e4d2f..92ff92a6c0f2169fd5be176761a09e0fb5e032cb 100644 (file)
@@ -25,6 +25,7 @@ import (
        pull_model "code.gitea.io/gitea/models/pull"
        user_model "code.gitea.io/gitea/models/user"
        "code.gitea.io/gitea/modules/analyze"
+       "code.gitea.io/gitea/modules/base"
        "code.gitea.io/gitea/modules/charset"
        "code.gitea.io/gitea/modules/git"
        "code.gitea.io/gitea/modules/highlight"
@@ -604,6 +605,7 @@ func (diffSection *DiffSection) GetComputedInlineDiffFor(diffLine *DiffLine) Dif
 // DiffFile represents a file diff.
 type DiffFile struct {
        Name                      string
+       NameHash                  string
        OldName                   string
        Index                     int
        Addition, Deletion        int
@@ -952,7 +954,6 @@ parsingLoop:
                                break curFileLoop
                        }
                }
-
        }
 
        // TODO: There are numerous issues with this:
@@ -964,6 +965,8 @@ parsingLoop:
        diffLineTypeBuffers[DiffLineAdd] = new(bytes.Buffer)
        diffLineTypeBuffers[DiffLineDel] = new(bytes.Buffer)
        for _, f := range diff.Files {
+               f.NameHash = base.EncodeSha1(f.Name)
+
                for _, buffer := range diffLineTypeBuffers {
                        buffer.Reset()
                }
index c0a378dc4b0ad8eb24b88856f55985413b14ff12..310308ca88c3e1df67e676082dc61cd0d109b460 100644 (file)
@@ -37,6 +37,7 @@ func TestGetDiffPreview(t *testing.T) {
                        {
                                Name:        "README.md",
                                OldName:     "README.md",
+                               NameHash:    "8ec9a00bfd09b3190ac6b22251dbb1aa95a0579d",
                                Index:       1,
                                Addition:    2,
                                Deletion:    1,
@@ -123,7 +124,7 @@ func TestGetDiffPreview(t *testing.T) {
                assert.NoError(t, err)
                bs, err := json.Marshal(diff)
                assert.NoError(t, err)
-               assert.EqualValues(t, expectedBs, bs)
+               assert.EqualValues(t, string(expectedBs), string(bs))
        })
 
        t.Run("empty branch, same results", func(t *testing.T) {
index ebfae2795cd224417bbc4bede3b079d61c2b2637..7ea33dcf9a9043e7c51ac3bd00852282d1f2c68d 100644 (file)
                        <td colspan="5" class="lines-code lines-code-old ">{{$inlineDiff := $.section.GetComputedInlineDiffFor $line}}<code {{if $inlineDiff.EscapeStatus.Escaped}}class="code-inner has-escaped" title="{{$.i18n.Tr "repo.line_unicode"}}"{{else}}class="code-inner"{{end}}>{{$inlineDiff.Content}}</code></td>
                {{else}}
                        {{$inlineDiff := $.section.GetComputedInlineDiffFor $line}}
-                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{Sha1 $.fileName}}L{{$line.LeftIdx}}{{end}}"></span></td>
+                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"></span></td>
                        <td class="blob-excerpt lines-escape lines-escape-old">{{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}</td>
                        <td class="blob-excerpt lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="mono" data-type-marker=""></span>{{end}}</td>
                        <td class="blob-excerpt lines-code lines-code-old halfwidth">{{/*
                                */}}<code {{if and $line.LeftIdx $inlineDiff.EscapeStatus.Escaped}}class="code-inner has-escaped" title="{{$.i18n.Tr "repo.line_unicode"}}"{{else}}class="code-inner"{{end}}>{{if $line.LeftIdx}}{{$inlineDiff.Content}}{{end}}</code>{{/*
                        */}}</td>
-                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{Sha1 $.fileName}}R{{$line.RightIdx}}{{end}}"></span></td>
+                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"></span></td>
                        <td class="blob-excerpt lines-escape lines-escape-new">{{if and $line.RightIdx $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}</td>
                        <td class="blob-excerpt lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="mono" data-type-marker=""></span>{{end}}</td>
                        <td class="blob-excerpt lines-code lines-code-new halfwidth">{{/*
@@ -59,8 +59,8 @@
                                {{end}}
                        </td>
                {{else}}
-                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{Sha1 $.fileName}}L{{$line.LeftIdx}}{{end}}"></span></td>
-                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{Sha1 $.fileName}}R{{$line.RightIdx}}{{end}}"></span></td>
+                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$.FileNameHash}}L{{$line.LeftIdx}}{{end}}"></span></td>
+                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$.FileNameHash}}R{{$line.RightIdx}}{{end}}"></span></td>
                {{end}}
                {{$inlineDiff := $.section.GetComputedInlineDiffFor $line}}
                <td class="blob-excerpt lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}</td>
index d6ad169821c2e593a02ab4e8c90746a4c6ea080a..bfac8c52e8857beab05f341ba90e88193deea523 100644 (file)
@@ -45,7 +45,7 @@
                                        </div>
                                        <!-- todo finish all file status, now modify, add, delete and rename -->
                                        <span class="status {{DiffTypeToStr .GetType}} tooltip" data-content="{{DiffTypeToStr .GetType}}" data-position="right center">&nbsp;</span>
-                                       <a class="file mono" href="#diff-{{Sha1 .Name}}">{{.Name}}</a>
+                                       <a class="file mono" href="#diff-{{.NameHash}}">{{.Name}}</a>
                                </li>
                        {{end}}
                        {{if .Diff.IsIncomplete}}
@@ -63,8 +63,7 @@
                                {{$isImage := or (call $.IsBlobAnImage $blobBase) (call $.IsBlobAnImage $blobHead)}}
                                {{$isCsv := (call $.IsCsvFile $file)}}
                                {{$showFileViewToggle := or $isImage (and (not $file.IsIncomplete) $isCsv)}}
-                               {{$nameHash := Sha1 $file.Name}}
-                               <div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}} mt-3" id="diff-{{$nameHash}}" data-old-filename="{{$file.OldName}}" data-new-filename="{{$file.Name}}" {{if $file.ShouldBeHidden}}data-folded="true"{{end}}>
+                               <div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}} mt-3" id="diff-{{$file.NameHash}}" data-old-filename="{{$file.OldName}}" data-new-filename="{{$file.Name}}" {{if $file.ShouldBeHidden}}data-folded="true"{{end}}>
                                        <h4 class="diff-file-header sticky-2nd-row ui top attached normal header df ac sb">
                                                <div class="df ac">
                                                        <a role="button" class="fold-file muted mr-2">
@@ -83,7 +82,7 @@
                                                                        {{template "repo/diff/stats" dict "file" . "root" $}}
                                                                {{end}}
                                                        </div>
-                                                       <span class="file mono"><a class="muted" href="#diff-{{$nameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} &rarr; {{end}}{{$file.Name}}</a>{{if .IsLFSFile}} ({{$.i18n.Tr "repo.stored_lfs"}}){{end}}</span>
+                                                       <span class="file mono"><a class="muted" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} &rarr; {{end}}{{$file.Name}}</a>{{if .IsLFSFile}} ({{$.i18n.Tr "repo.stored_lfs"}}){{end}}</span>
                                                        {{if $file.IsGenerated}}
                                                                <span class="ui label ml-3">{{$.i18n.Tr "repo.diff.generated"}}</span>
                                                        {{end}}
index 1f7b0d459cb14c76e27e1e560f9d83ec6ab0f801..01083c3dbf13e39c0a189e9424d5993e11791e0d 100644 (file)
@@ -7,17 +7,17 @@
                                {{if eq .GetType 4}}
                                        <td class="lines-num lines-num-old">
                                                {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5) }}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold-down"}}
                                                        </a>
                                                {{end}}
                                                {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4) }}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold-up"}}
                                                        </a>
                                                {{end}}
                                                {{if eq $line.GetExpandDirection 2}}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=split&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold"}}
                                                        </a>
                                                {{end}}
@@ -28,7 +28,7 @@
                                        {{$match := index $section.Lines $line.Match}}
                                        {{- $leftDiff := ""}}{{if $line.LeftIdx}}{{$leftDiff = $section.GetComputedInlineDiffFor $line}}{{end}}
                                        {{- $rightDiff := ""}}{{if $match.RightIdx}}{{$rightDiff = $section.GetComputedInlineDiffFor $match}}{{end}}
-                                       <td class="lines-num lines-num-old del-code" data-line-num="{{$line.LeftIdx}}"><span rel="diff-{{Sha1 $file.Name}}L{{$line.LeftIdx}}"></span></td>
+                                       <td class="lines-num lines-num-old del-code" data-line-num="{{$line.LeftIdx}}"><span rel="diff-{{$file.NameHash}}L{{$line.LeftIdx}}"></span></td>
                                        <td class="lines-escape del-code lines-escape-old">{{if $line.LeftIdx}}{{if $leftDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}{{end}}</td>
                                        <td class="lines-type-marker lines-type-marker-old del-code"><span class="mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span></td>
                                        <td class="lines-code lines-code-old halfwidth del-code">{{/*
@@ -43,7 +43,7 @@
                                                */}}<code class="code-inner"></code>{{/*
                                                */}}{{end}}{{/*
                                        */}}</td>
-                                       <td class="lines-num lines-num-new add-code" data-line-num="{{if $match.RightIdx}}{{$match.RightIdx}}{{end}}"><span rel="{{if $match.RightIdx}}diff-{{Sha1 $file.Name}}R{{$match.RightIdx}}{{end}}"></span></td>
+                                       <td class="lines-num lines-num-new add-code" data-line-num="{{if $match.RightIdx}}{{$match.RightIdx}}{{end}}"><span rel="{{if $match.RightIdx}}diff-{{$file.NameHash}}R{{$match.RightIdx}}{{end}}"></span></td>
                                        <td class="lines-escape add-code lines-escape-new">{{if $match.RightIdx}}{{if $rightDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}{{end}}</td>
                                        <td class="lines-type-marker lines-type-marker-new add-code">{{if $match.RightIdx}}<span class="mono" data-type-marker="{{$match.GetLineTypeMarker}}"></span>{{end}}</td>
                                        <td class="lines-code lines-code-new halfwidth add-code">{{/*
@@ -60,7 +60,7 @@
                                        */}}</td>
                                {{else}}
                                        {{$inlineDiff := $section.GetComputedInlineDiffFor $line}}
-                                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{Sha1 $file.Name}}L{{$line.LeftIdx}}{{end}}"></span></td>
+                                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$file.NameHash}}L{{$line.LeftIdx}}{{end}}"></span></td>
                                        <td class="lines-escape lines-escape-old">{{if $line.LeftIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}{{end}}</td>
                                        <td class="lines-type-marker lines-type-marker-old">{{if $line.LeftIdx}}<span class="mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td>
                                        <td class="lines-code lines-code-old halfwidth">{{/*
@@ -75,7 +75,7 @@
                                                */}}<code class="code-inner"></code>{{/*
                                                */}}{{end}}{{/*
                                        */}}</td>
-                                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{Sha1 $file.Name}}R{{$line.RightIdx}}{{end}}"></span></td>
+                                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"></span></td>
                                        <td class="lines-escape lines-escape-new">{{if $line.RightIdx}}{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}{{end}}</td>
                                        <td class="lines-type-marker lines-type-marker-new">{{if $line.RightIdx}}<span class="mono" data-type-marker="{{$line.GetLineTypeMarker}}"></span>{{end}}</td>
                                        <td class="lines-code lines-code-new halfwidth">{{/*
index 2fe3f6490389aebc8e17d578307468f8ec0d86aa..173b637e86b0fd22a6ec379c1c873dc74f8444fd 100644 (file)
@@ -6,24 +6,24 @@
                                {{if eq .GetType 4}}
                                        <td colspan="2" class="lines-num">
                                                {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 5) }}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=down&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold-down"}}
                                                        </a>
                                                {{end}}
                                                {{if or (eq $line.GetExpandDirection 3) (eq $line.GetExpandDirection 4) }}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=up&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold-up"}}
                                                        </a>
                                                {{end}}
                                                {{if eq $line.GetExpandDirection 2}}
-                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{Sha1 $file.Name}}K{{$line.SectionInfo.RightIdx}}">
+                                                       <a role="button" class="blob-excerpt" data-url="{{$.root.RepoLink}}/blob_excerpt/{{PathEscape $.root.AfterCommitID}}" data-query="{{$line.GetBlobExcerptQuery}}&style=unified&direction=&wiki={{$.root.PageIsWiki}}" data-anchor="diff-{{$file.NameHash}}K{{$line.SectionInfo.RightIdx}}">
                                                                {{svg "octicon-fold"}}
                                                        </a>
                                                {{end}}
                                        </td>
                                {{else}}
-                                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{Sha1 $file.Name}}L{{$line.LeftIdx}}{{end}}"></span></td>
-                                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{Sha1 $file.Name}}R{{$line.RightIdx}}{{end}}"></span></td>
+                                       <td class="lines-num lines-num-old" data-line-num="{{if $line.LeftIdx}}{{$line.LeftIdx}}{{end}}"><span rel="{{if $line.LeftIdx}}diff-{{$file.NameHash}}L{{$line.LeftIdx}}{{end}}"></span></td>
+                                       <td class="lines-num lines-num-new" data-line-num="{{if $line.RightIdx}}{{$line.RightIdx}}{{end}}"><span rel="{{if $line.RightIdx}}diff-{{$file.NameHash}}R{{$line.RightIdx}}{{end}}"></span></td>
                                {{end}}
                                {{$inlineDiff := $section.GetComputedInlineDiffFor $line -}}
                                <td class="lines-escape">{{if $inlineDiff.EscapeStatus.Escaped}}<a href="" class="toggle-escape-button" title="{{$.i18n.Tr "repo.line_unicode"}}"></a>{{end}}</td>