mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-23 20:17:03 +01:00
Fix bug that release attachment files not deleted when deleting repository (#9322)
* Fix bug that release attachment files not deleted when deleting repository * improve code * add quote * improve code
This commit is contained in:
parent
aceb1085c7
commit
751cfb805d
1 changed files with 28 additions and 7 deletions
|
@ -1992,6 +1992,17 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attachments := make([]*Attachment, 0, 20)
|
||||||
|
if err = sess.Join("INNER", "`release`", "`release`.id = `attachment`.release_id").
|
||||||
|
Where("`release`.repo_id = ?", repoID).
|
||||||
|
Find(&attachments); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
releaseAttachments := make([]string, 0, len(attachments))
|
||||||
|
for i := 0; i < len(attachments); i++ {
|
||||||
|
releaseAttachments = append(releaseAttachments, attachments[i].LocalPath())
|
||||||
|
}
|
||||||
|
|
||||||
if err = deleteBeans(sess,
|
if err = deleteBeans(sess,
|
||||||
&Access{RepoID: repo.ID},
|
&Access{RepoID: repo.ID},
|
||||||
&Action{RepoID: repo.ID},
|
&Action{RepoID: repo.ID},
|
||||||
|
@ -2042,13 +2053,13 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
attachmentPaths := make([]string, 0, 20)
|
attachments = attachments[:0]
|
||||||
attachments := make([]*Attachment, 0, len(attachmentPaths))
|
|
||||||
if err = sess.Join("INNER", "issue", "issue.id = attachment.issue_id").
|
if err = sess.Join("INNER", "issue", "issue.id = attachment.issue_id").
|
||||||
Where("issue.repo_id = ?", repoID).
|
Where("issue.repo_id = ?", repoID).
|
||||||
Find(&attachments); err != nil {
|
Find(&attachments); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
attachmentPaths := make([]string, 0, len(attachments))
|
||||||
for j := range attachments {
|
for j := range attachments {
|
||||||
attachmentPaths = append(attachmentPaths, attachments[j].LocalPath())
|
attachmentPaths = append(attachmentPaths, attachments[j].LocalPath())
|
||||||
}
|
}
|
||||||
|
@ -2085,11 +2096,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove attachment files.
|
|
||||||
for i := range attachmentPaths {
|
|
||||||
removeAllWithNotice(sess, "Delete attachment", attachmentPaths[i])
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove LFS objects
|
// Remove LFS objects
|
||||||
var lfsObjects []*LFSMetaObject
|
var lfsObjects []*LFSMetaObject
|
||||||
if err = sess.Where("repository_id=?", repoID).Find(&lfsObjects); err != nil {
|
if err = sess.Where("repository_id=?", repoID).Find(&lfsObjects); err != nil {
|
||||||
|
@ -2129,6 +2135,21 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
|
||||||
return fmt.Errorf("Commit: %v", err)
|
return fmt.Errorf("Commit: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sess.Close()
|
||||||
|
|
||||||
|
// We should always delete the files after the database transaction succeed. If
|
||||||
|
// we delete the file but the database rollback, the repository will be borken.
|
||||||
|
|
||||||
|
// Remove issue attachment files.
|
||||||
|
for i := range attachmentPaths {
|
||||||
|
removeAllWithNotice(x, "Delete issue attachment", attachmentPaths[i])
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove release attachment files.
|
||||||
|
for i := range releaseAttachments {
|
||||||
|
removeAllWithNotice(x, "Delete release attachment", releaseAttachments[i])
|
||||||
|
}
|
||||||
|
|
||||||
if len(repo.Avatar) > 0 {
|
if len(repo.Avatar) > 0 {
|
||||||
avatarPath := repo.CustomAvatarPath()
|
avatarPath := repo.CustomAvatarPath()
|
||||||
if com.IsExist(avatarPath) {
|
if com.IsExist(avatarPath) {
|
||||||
|
|
Loading…
Reference in a new issue