mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-11 04:11:18 +01:00
fix: include last line in file previews with no trailing newline
This commit is contained in:
parent
904e1239a8
commit
8f53a69c2e
6 changed files with 39 additions and 4 deletions
|
@ -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...
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
||||||
190d9492934af498c3f669d6a2431dc5459e5b20
|
4c1aaf56bcb9f39dcf65f3f250726850aed13cd6
|
||||||
|
|
Loading…
Reference in a new issue