mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 14:13:12 +00:00 
			
		
		
		
	Use LFS object size instead of blob size when viewing a LFS file (#35679)
shows the main LFS filesize instead of the pointer filesize when viewing a file --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		@@ -295,14 +295,14 @@ func EditFile(ctx *context.Context) {
 | 
			
		||||
		}
 | 
			
		||||
		defer dataRc.Close()
 | 
			
		||||
 | 
			
		||||
		ctx.Data["FileSize"] = fInfo.fileSize
 | 
			
		||||
		ctx.Data["FileSize"] = fInfo.blobOrLfsSize
 | 
			
		||||
 | 
			
		||||
		// Only some file types are editable online as text.
 | 
			
		||||
		if fInfo.isLFSFile() {
 | 
			
		||||
			ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_lfs_files")
 | 
			
		||||
		} else if !fInfo.st.IsRepresentableAsText() {
 | 
			
		||||
			ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_non_text_files")
 | 
			
		||||
		} else if fInfo.fileSize >= setting.UI.MaxDisplayFileSize {
 | 
			
		||||
		} else if fInfo.blobOrLfsSize >= setting.UI.MaxDisplayFileSize {
 | 
			
		||||
			ctx.Data["NotEditableReason"] = ctx.Tr("repo.editor.cannot_edit_too_large_file")
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -60,7 +60,7 @@ const (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type fileInfo struct {
 | 
			
		||||
	fileSize int64
 | 
			
		||||
	blobOrLfsSize int64
 | 
			
		||||
	lfsMeta       *lfs.Pointer
 | 
			
		||||
	st            typesniffer.SniffedType
 | 
			
		||||
}
 | 
			
		||||
@@ -81,7 +81,7 @@ func getFileReader(ctx gocontext.Context, repoID int64, blob *git.Blob) (buf []b
 | 
			
		||||
	n, _ := util.ReadAtMost(dataRc, buf)
 | 
			
		||||
	buf = buf[:n]
 | 
			
		||||
 | 
			
		||||
	fi = &fileInfo{fileSize: blob.Size(), st: typesniffer.DetectContentType(buf)}
 | 
			
		||||
	fi = &fileInfo{blobOrLfsSize: blob.Size(), st: typesniffer.DetectContentType(buf)}
 | 
			
		||||
 | 
			
		||||
	// FIXME: what happens when README file is an image?
 | 
			
		||||
	if !fi.st.IsText() || !setting.LFS.StartServer {
 | 
			
		||||
@@ -114,7 +114,7 @@ func getFileReader(ctx gocontext.Context, repoID int64, blob *git.Blob) (buf []b
 | 
			
		||||
	}
 | 
			
		||||
	buf = buf[:n]
 | 
			
		||||
	fi.st = typesniffer.DetectContentType(buf)
 | 
			
		||||
	fi.fileSize = blob.Size()
 | 
			
		||||
	fi.blobOrLfsSize = meta.Pointer.Size
 | 
			
		||||
	fi.lfsMeta = &meta.Pointer
 | 
			
		||||
	return buf, dataRc, fi, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -226,7 +226,7 @@ func prepareFileView(ctx *context.Context, entry *git.TreeEntry) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.Data["IsLFSFile"] = fInfo.isLFSFile()
 | 
			
		||||
	ctx.Data["FileSize"] = fInfo.fileSize
 | 
			
		||||
	ctx.Data["FileSize"] = fInfo.blobOrLfsSize
 | 
			
		||||
	ctx.Data["IsRepresentableAsText"] = fInfo.st.IsRepresentableAsText()
 | 
			
		||||
	ctx.Data["IsExecutable"] = entry.IsExecutable()
 | 
			
		||||
	ctx.Data["CanCopyContent"] = fInfo.st.IsRepresentableAsText() || fInfo.st.IsImage()
 | 
			
		||||
@@ -243,7 +243,7 @@ func prepareFileView(ctx *context.Context, entry *git.TreeEntry) {
 | 
			
		||||
 | 
			
		||||
	utf8Reader := charset.ToUTF8WithFallbackReader(io.MultiReader(bytes.NewReader(buf), dataRc), charset.ConvertOpts{})
 | 
			
		||||
	switch {
 | 
			
		||||
	case fInfo.fileSize >= setting.UI.MaxDisplayFileSize:
 | 
			
		||||
	case fInfo.blobOrLfsSize >= setting.UI.MaxDisplayFileSize:
 | 
			
		||||
		ctx.Data["IsFileTooLarge"] = true
 | 
			
		||||
	case handleFileViewRenderMarkup(ctx, entry.Name(), fInfo.st, buf, utf8Reader):
 | 
			
		||||
		// it also sets ctx.Data["FileContent"] and more
 | 
			
		||||
 
 | 
			
		||||
@@ -170,7 +170,7 @@ func prepareToRenderReadmeFile(ctx *context.Context, subfolder string, readmeFil
 | 
			
		||||
 | 
			
		||||
	ctx.Data["FileIsText"] = fInfo.st.IsText()
 | 
			
		||||
	ctx.Data["FileTreePath"] = readmeFullPath
 | 
			
		||||
	ctx.Data["FileSize"] = fInfo.fileSize
 | 
			
		||||
	ctx.Data["FileSize"] = fInfo.blobOrLfsSize
 | 
			
		||||
	ctx.Data["IsLFSFile"] = fInfo.isLFSFile()
 | 
			
		||||
 | 
			
		||||
	if fInfo.isLFSFile() {
 | 
			
		||||
@@ -182,7 +182,7 @@ func prepareToRenderReadmeFile(ctx *context.Context, subfolder string, readmeFil
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if fInfo.fileSize >= setting.UI.MaxDisplayFileSize {
 | 
			
		||||
	if fInfo.blobOrLfsSize >= setting.UI.MaxDisplayFileSize {
 | 
			
		||||
		// Pretend that this is a normal text file to display 'This file is too large to be shown'
 | 
			
		||||
		ctx.Data["IsFileTooLarge"] = true
 | 
			
		||||
		return
 | 
			
		||||
 
 | 
			
		||||
@@ -11,11 +11,11 @@
 | 
			
		||||
	{{end}}
 | 
			
		||||
	{{if ne .FileSize nil}}
 | 
			
		||||
		<div class="file-info-entry">
 | 
			
		||||
			{{FileSize .FileSize}}{{if .IsLFSFile}}<span class="ui label">LFS</span>{{end}}
 | 
			
		||||
			<span class="file-info-size">{{FileSize .FileSize}}</span>{{if .IsLFSFile}}<span class="ui label">LFS</span>{{end}}
 | 
			
		||||
		</div>
 | 
			
		||||
	{{end}}
 | 
			
		||||
	{{if .LFSLock}}
 | 
			
		||||
		<div class="file-info-entry ui" data-tooltip-content="{{.LFSLockHint}}">
 | 
			
		||||
		<div class="file-info-entry" data-tooltip-content="{{.LFSLockHint}}">
 | 
			
		||||
			{{svg "octicon-lock" 16 "tw-mr-1"}}
 | 
			
		||||
			<a href="{{.LFSLockOwnerHomeLink}}">{{.LFSLockOwner}}</a>
 | 
			
		||||
		</div>
 | 
			
		||||
 
 | 
			
		||||
@@ -72,6 +72,8 @@ func TestLFSRender(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
		fileInfo := doc.Find("div.file-info-entry").First().Text()
 | 
			
		||||
		assert.Contains(t, fileInfo, "LFS")
 | 
			
		||||
		fileSize := doc.Find("div.file-info-entry > .file-info-size").Text()
 | 
			
		||||
		assert.Equal(t, "2.0 KiB", fileSize)
 | 
			
		||||
 | 
			
		||||
		// find new file view container
 | 
			
		||||
		fileViewContainer := doc.Find("[data-global-init=initRepoFileView]")
 | 
			
		||||
 
 | 
			
		||||
@@ -257,10 +257,12 @@ func testViewFileInRepo(t *testing.T) {
 | 
			
		||||
	description := htmlDoc.doc.Find(".repo-description")
 | 
			
		||||
	repoTopics := htmlDoc.doc.Find("#repo-topics")
 | 
			
		||||
	repoSummary := htmlDoc.doc.Find(".repository-summary")
 | 
			
		||||
	fileSize := htmlDoc.Find("div.file-info-entry > .file-info-size").Text()
 | 
			
		||||
 | 
			
		||||
	assert.Equal(t, 0, description.Length())
 | 
			
		||||
	assert.Equal(t, 0, repoTopics.Length())
 | 
			
		||||
	assert.Equal(t, 0, repoSummary.Length())
 | 
			
		||||
	assert.Equal(t, "30 B", fileSize)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TestBlameFileInRepo repo description, topics and summary should not be displayed when running blame on a file
 | 
			
		||||
 
 | 
			
		||||
@@ -1582,6 +1582,7 @@ tbody.commit-list {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: center;
 | 
			
		||||
  width: max-content;
 | 
			
		||||
  gap: 0.25em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.file-info-entry + .file-info-entry {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user