From fd2d645c1a55947ea54ed68f050b014f649656a3 Mon Sep 17 00:00:00 2001 From: zouap Date: Mon, 10 Jan 2022 15:57:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/repo.go | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/models/repo.go b/models/repo.go index 6863004a6..e5cc5831d 100755 --- a/models/repo.go +++ b/models/repo.go @@ -13,6 +13,7 @@ import ( "html/template" "math/rand" + "code.gitea.io/gitea/modules/git" "xorm.io/xorm" "code.gitea.io/gitea/modules/blockchain" @@ -2559,6 +2560,56 @@ func UpdateRepositoryCommitNum(repo *Repository) error { return nil } +type RepoFile struct { + CommitId string + Content []byte +} + +// ReadLatestFileInRepo read latest version of file in repository +// return a RepoFile +func ReadLatestFileInRepo(userName, repoName, refName, treePath string) (*RepoFile, error) { + var err error + repoPath := RepoPath(userName, repoName) + gitRepo, err := git.OpenRepository(repoPath) + if err != nil { + log.Error("ReadLatestFileInRepo error when OpenRepository,error=%v", err) + return nil, err + } + commitID, err := gitRepo.GetBranchCommitID(refName) + if err != nil { + log.Error("ReadLatestFileInRepo error when GetBranchCommitID,error=%v", err) + return nil, err + } + commit, err := gitRepo.GetBranchCommit(refName) + if err != nil { + log.Error("ReadLatestFileInRepo error when GetBranchCommit,error=%v", err) + return nil, err + } + + blob, err := commit.GetBlobByPath(treePath) + if err != nil { + log.Error("ReadLatestFileInRepo error when GetBlobByPath,error=%v", err) + return nil, err + } + + reader, err := blob.DataAsync() + if err != nil { + return nil, err + } + defer func() { + if err = reader.Close(); err != nil { + log.Error("ReadLatestFileInRepo: Close: %v", err) + } + }() + + buf := make([]byte, 1024) + n, _ := reader.Read(buf) + if n >= 0 { + buf = buf[:n] + } + return &RepoFile{CommitId: commitID, Content: buf}, nil +} + func GenerateDefaultRepoName(ownerName string) string { if len(ownerName) > 5 { ownerName = ownerName[:5]