File opensuse-lfs-associate-objects-on-download.patch of Package gitea
see https://github.com/go-gitea/gitea/issues/17715
see https://github.com/openSUSE/openSUSE-git/issues/72
From e7b46e325cde2e79739067a441bcc0e4f3fecfa3 Mon Sep 17 00:00:00 2001
From: Adam Majer <adamm@zombino.com>
Date: Sun, 8 Dec 2024 19:46:29 +0100
Subject: [PATCH] Associate on download
---
models/git/lfs.go | 2 +-
services/lfs/server.go | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
Index: gitea-1.23.1/models/git/lfs.go
===================================================================
--- gitea-1.23.1.orig/models/git/lfs.go
+++ gitea-1.23.1/models/git/lfs.go
@@ -236,7 +236,7 @@ func CountLFSMetaObjects(ctx context.Con
// LFSObjectAccessible checks if a provided Oid is accessible to the user
func LFSObjectAccessible(ctx context.Context, user *user_model.User, oid string) (bool, error) {
- if user.IsAdmin {
+ if user != nil && user.IsAdmin {
count, err := db.GetEngine(ctx).Count(&LFSMetaObject{Pointer: lfs.Pointer{Oid: oid}})
return count > 0, err
}
Index: gitea-1.23.1/services/lfs/server.go
===================================================================
--- gitea-1.23.1.orig/services/lfs/server.go
+++ gitea-1.23.1/services/lfs/server.go
@@ -251,6 +251,27 @@ func BatchHandler(ctx *context.Context)
responseObject = buildObjectResponse(rc, p, false, !exists, err)
} else {
var err *lfs_module.ObjectError
+
+ if exists && meta == nil {
+ accessible, accessibleErr := git_model.LFSObjectAccessible(ctx, ctx.Doer, p.Oid)
+ if accessibleErr != nil {
+ log.Error("Unable to check if LFS MetaObject [%s] is accessible. Error: %v", p.Oid, err)
+ writeStatus(ctx, http.StatusInternalServerError)
+ return
+ }
+ if accessible {
+ var newMetaObjErr error
+ meta, newMetaObjErr = git_model.NewLFSMetaObject(ctx, repository.ID, p)
+ if newMetaObjErr != nil {
+ log.Error("Unable to create LFS MetaObject [%s] for %s/%s. Error: %v", p.Oid, rc.User, rc.Repo, err)
+ writeStatus(ctx, http.StatusInternalServerError)
+ return
+ }
+ } else {
+ exists = false
+ }
+ }
+
if !exists || meta == nil {
err = &lfs_module.ObjectError{
Code: http.StatusNotFound,