Skip to content

Commit 31cd5e7

Browse files
committed
Associate LFS pointer on download
Temporary measure to work around go-gitea#17715
1 parent f48fda8 commit 31cd5e7

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

models/git/lfs.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ func CountLFSMetaObjects(repoID int64) (int64, error) {
210210

211211
// LFSObjectAccessible checks if a provided Oid is accessible to the user
212212
func LFSObjectAccessible(user *user_model.User, oid string) (bool, error) {
213-
if user.IsAdmin {
213+
if user != nil && user.IsAdmin {
214214
count, err := db.GetEngine(db.DefaultContext).Count(&LFSMetaObject{Pointer: lfs.Pointer{Oid: oid}})
215215
return count > 0, err
216216
}

services/lfs/server.go

+20
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,26 @@ func BatchHandler(ctx *context.Context) {
244244
responseObject = buildObjectResponse(rc, p, false, !exists, err)
245245
} else {
246246
var err *lfs_module.ObjectError
247+
248+
if exists && meta == nil {
249+
accessible, accessibleErr := git_model.LFSObjectAccessible(ctx.Doer, p.Oid)
250+
if accessibleErr != nil {
251+
log.Error("Unable to check if LFS MetaObject [%s] is accessible. Error: %v", p.Oid, err)
252+
writeStatus(ctx, http.StatusInternalServerError)
253+
return
254+
}
255+
if accessible {
256+
_, newMetaObjErr := git_model.NewLFSMetaObject(&git_model.LFSMetaObject{Pointer: p, RepositoryID: repository.ID})
257+
if newMetaObjErr != nil {
258+
log.Error("Unable to create LFS MetaObject [%s] for %s/%s. Error: %v", p.Oid, rc.User, rc.Repo, err)
259+
writeStatus(ctx, http.StatusInternalServerError)
260+
return
261+
}
262+
} else {
263+
exists = false
264+
}
265+
}
266+
247267
if !exists || meta == nil {
248268
err = &lfs_module.ObjectError{
249269
Code: http.StatusNotFound,

0 commit comments

Comments
 (0)