mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-19 16:30:15 +00:00
Allow admin to associate missing LFS objects for repositories (#18143)
This PR reworked the Find pointer files feature in Settings -> LFS page. When a LFS object is missing from database but exists in LFS content store, admin can associate it to the repository by clicking the Associate button. This PR is not perfect (because the LFS module itself should be improved too), it's just a nice-to-have feature to help users recover their LFS repositories (eg: database was lost / table was truncated)
This commit is contained in:
parent
25a290e320
commit
385dc6a992
3 changed files with 57 additions and 26 deletions
|
@ -421,12 +421,13 @@ func LFSPointerFiles(ctx *context.Context) {
|
|||
var numAssociated, numNoExist, numAssociatable int
|
||||
|
||||
type pointerResult struct {
|
||||
SHA string
|
||||
Oid string
|
||||
Size int64
|
||||
InRepo bool
|
||||
Exists bool
|
||||
Accessible bool
|
||||
SHA string
|
||||
Oid string
|
||||
Size int64
|
||||
InRepo bool
|
||||
Exists bool
|
||||
Accessible bool
|
||||
Associatable bool
|
||||
}
|
||||
|
||||
results := []pointerResult{}
|
||||
|
@ -461,22 +462,29 @@ func LFSPointerFiles(ctx *context.Context) {
|
|||
// Can we fix?
|
||||
// OK well that's "simple"
|
||||
// - we need to check whether current user has access to a repo that has access to the file
|
||||
result.Accessible, err = models.LFSObjectAccessible(ctx.User, pointerBlob.Oid)
|
||||
result.Associatable, err = models.LFSObjectAccessible(ctx.User, pointerBlob.Oid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
result.Accessible = true
|
||||
if !result.Associatable {
|
||||
associated, err := models.LFSObjectIsAssociated(pointerBlob.Oid)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
result.Associatable = !associated
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result.Accessible = result.InRepo || result.Associatable
|
||||
|
||||
if result.InRepo {
|
||||
numAssociated++
|
||||
}
|
||||
if !result.Exists {
|
||||
numNoExist++
|
||||
}
|
||||
if !result.InRepo && result.Accessible {
|
||||
if result.Associatable {
|
||||
numAssociatable++
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue