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, | ||||
| 		&Access{RepoID: repo.ID}, | ||||
| 		&Action{RepoID: repo.ID}, | ||||
|  | @ -2042,13 +2053,13 @@ func DeleteRepository(doer *User, uid, repoID int64) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	attachmentPaths := make([]string, 0, 20) | ||||
| 	attachments := make([]*Attachment, 0, len(attachmentPaths)) | ||||
| 	attachments = attachments[:0] | ||||
| 	if err = sess.Join("INNER", "issue", "issue.id = attachment.issue_id"). | ||||
| 		Where("issue.repo_id = ?", repoID). | ||||
| 		Find(&attachments); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	attachmentPaths := make([]string, 0, len(attachments)) | ||||
| 	for j := range attachments { | ||||
| 		attachmentPaths = append(attachmentPaths, attachments[j].LocalPath()) | ||||
| 	} | ||||
|  | @ -2085,11 +2096,6 @@ func DeleteRepository(doer *User, uid, repoID int64) error { | |||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	// Remove attachment files.
 | ||||
| 	for i := range attachmentPaths { | ||||
| 		removeAllWithNotice(sess, "Delete attachment", attachmentPaths[i]) | ||||
| 	} | ||||
| 
 | ||||
| 	// Remove LFS objects
 | ||||
| 	var lfsObjects []*LFSMetaObject | ||||
| 	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) | ||||
| 	} | ||||
| 
 | ||||
| 	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 { | ||||
| 		avatarPath := repo.CustomAvatarPath() | ||||
| 		if com.IsExist(avatarPath) { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue