Merge pull request 'fix: include last line in file previews with no trailing newline' (#5085) from solomonv/fix-previews-without-trailing-eol into forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/5085
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
This commit is contained in:
Gusted 2024-08-25 00:58:14 +00:00
commit d34d8ec2cf
6 changed files with 39 additions and 4 deletions

View file

@ -7,6 +7,7 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"html/template" "html/template"
"io"
"regexp" "regexp"
"slices" "slices"
"strconv" "strconv"
@ -184,10 +185,12 @@ func newFilePreview(ctx *RenderContext, node *html.Node, locale translation.Loca
lineBuffer := new(bytes.Buffer) lineBuffer := new(bytes.Buffer)
for i := 0; i < lineCount; i++ { for i := 0; i < lineCount; i++ {
buf, err := reader.ReadBytes('\n') buf, err := reader.ReadBytes('\n')
if err == nil || err == io.EOF {
lineBuffer.Write(buf)
}
if err != nil { if err != nil {
break break
} }
lineBuffer.Write(buf)
} }
// highlight the file... // highlight the file...

View file

@ -688,10 +688,10 @@ func TestRender_FilePreview(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
defer gitRepo.Close() defer gitRepo.Close()
commit, err := gitRepo.GetCommit("HEAD") commit, err := gitRepo.GetCommit(commitSha)
require.NoError(t, err) require.NoError(t, err)
blob, err := commit.GetBlobByPath("path/to/file.go") blob, err := commit.GetBlobByPath(filePath)
require.NoError(t, err) require.NoError(t, err)
return blob, nil return blob, nil
@ -780,6 +780,38 @@ func TestRender_FilePreview(t *testing.T) {
}, },
) )
}) })
t.Run("single-line", func(t *testing.T) {
testRender(
util.URLJoin(markup.TestRepoURL, "src", "commit", "4c1aaf56bcb9f39dcf65f3f250726850aed13cd6", "single-line.txt")+"#L1",
`<p></p>`+
`<div class="file-preview-box">`+
`<div class="header">`+
`<div>`+
`<a href="http://localhost:3000/gogits/gogs/" rel="nofollow">gogits/gogs</a> `+
`<a href="http://localhost:3000/gogits/gogs/src/commit/4c1aaf56bcb9f39dcf65f3f250726850aed13cd6/single-line.txt#L1" class="muted" rel="nofollow">single-line.txt</a>`+
`</div>`+
`<span class="text small grey">`+
`Line 1 in <a href="http://localhost:3000/gogits/gogs/src/commit/4c1aaf56bcb9f39dcf65f3f250726850aed13cd6" class="text black" rel="nofollow">gogits/gogs@4c1aaf5</a>`+
`</span>`+
`</div>`+
`<div class="ui table">`+
`<table class="file-preview">`+
`<tbody>`+
`<tr>`+
`<td class="lines-num"><span data-line-number="1"></span></td>`+
`<td class="lines-code chroma"><code class="code-inner">A`+`</code></td>`+
`</tr>`+
`</tbody>`+
`</table>`+
`</div>`+
`</div>`+
`<p></p>`,
map[string]string{
"user": "gogits",
"repo": "gogs2",
},
)
})
t.Run("AppSubURL", func(t *testing.T) { t.Run("AppSubURL", func(t *testing.T) {
urlWithSub := util.URLJoin(markup.TestAppURL, "sub", markup.TestOrgRepo, "src", "commit", sha, "path", "to", "file.go") + "#L2-L3" urlWithSub := util.URLJoin(markup.TestAppURL, "sub", markup.TestOrgRepo, "src", "commit", sha, "path", "to", "file.go") + "#L2-L3"

View file

@ -1 +1 @@
190d9492934af498c3f669d6a2431dc5459e5b20 4c1aaf56bcb9f39dcf65f3f250726850aed13cd6