mirror of
https://github.com/go-gitea/gitea.git
synced 2025-08-21 06:03:10 +00:00
Fix test
This commit is contained in:
parent
804022bdb5
commit
c89d939b54
@ -1114,8 +1114,7 @@ func UpdateComment(ctx context.Context, c *Comment, contentVersion int, doer *us
|
||||
|
||||
// DeleteComment deletes the comment
|
||||
func DeleteComment(ctx context.Context, comment *Comment) (*Comment, error) {
|
||||
e := db.GetEngine(ctx)
|
||||
if _, err := e.ID(comment.ID).NoAutoCondition().Delete(comment); err != nil {
|
||||
if _, err := db.GetEngine(ctx).ID(comment.ID).NoAutoCondition().Delete(comment); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -1130,7 +1129,7 @@ func DeleteComment(ctx context.Context, comment *Comment) (*Comment, error) {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if _, err := e.Table("action").
|
||||
if _, err := db.GetEngine(ctx).Table("action").
|
||||
Where("comment_id = ?", comment.ID).
|
||||
Update(map[string]any{
|
||||
"is_deleted": true,
|
||||
|
@ -48,12 +48,11 @@ func deleteOrganization(ctx context.Context, org *org_model.Organization) error
|
||||
|
||||
// DeleteOrganization completely and permanently deletes everything of organization.
|
||||
func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge bool) error {
|
||||
ctx, committer, err := db.TxContext(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer committer.Close()
|
||||
|
||||
// The repositories deletion of the organization cannot be under a transaction,
|
||||
// because it cannot be rolled back because the content in disk will be deleted
|
||||
// in the DeleteOwnerRepositoriesDirectly function.
|
||||
// Even not all repositories deleted successfully, we still delete the organization again.
|
||||
// TODO: We should mark all the repositories as deleted and delete them in a background job.
|
||||
if purge {
|
||||
err := repo_service.DeleteOwnerRepositoriesDirectly(ctx, org.AsUser())
|
||||
if err != nil {
|
||||
@ -61,6 +60,7 @@ func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge
|
||||
}
|
||||
}
|
||||
|
||||
err := db.WithTx(ctx, func(ctx context.Context) error {
|
||||
// Check ownership of repository.
|
||||
count, err := repo_model.CountRepositories(ctx, repo_model.CountRepositoryOptions{OwnerID: org.ID})
|
||||
if err != nil {
|
||||
@ -79,8 +79,9 @@ func DeleteOrganization(ctx context.Context, org *org_model.Organization, purge
|
||||
if err := deleteOrganization(ctx, org); err != nil {
|
||||
return fmt.Errorf("DeleteOrganization: %w", err)
|
||||
}
|
||||
|
||||
if err := committer.Commit(); err != nil {
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -51,15 +51,8 @@ func deleteDBRepository(ctx context.Context, repoID int64) error {
|
||||
// DeleteRepository deletes a repository for a user or organization.
|
||||
// make sure if you call this func to close open sessions (sqlite will otherwise get a deadlock)
|
||||
func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams ...bool) error {
|
||||
ctx, committer, err := db.TxContext(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer committer.Close()
|
||||
sess := db.GetEngine(ctx)
|
||||
|
||||
repo := &repo_model.Repository{}
|
||||
has, err := sess.ID(repoID).Get(repo)
|
||||
has, err := db.GetEngine(ctx).ID(repoID).Get(repo)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if !has {
|
||||
@ -82,6 +75,13 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
return fmt.Errorf("list actions artifacts of repo %v: %w", repoID, err)
|
||||
}
|
||||
|
||||
var needRewriteKeysFile bool
|
||||
releaseAttachments := make([]*repo_model.Attachment, 0, 20)
|
||||
var repoAttachments []*repo_model.Attachment
|
||||
var archivePaths []string
|
||||
var lfsPaths []string
|
||||
|
||||
err = db.WithTx(ctx, func(ctx context.Context) error {
|
||||
// In case owner is a organization, we have to change repo specific teams
|
||||
// if ignoreOrgTeams is not true
|
||||
var org *user_model.User
|
||||
@ -96,7 +96,7 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
needRewriteKeysFile := deleted > 0
|
||||
needRewriteKeysFile = deleted > 0
|
||||
|
||||
if err := deleteDBRepository(ctx, repoID); err != nil {
|
||||
return err
|
||||
@ -117,7 +117,6 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
}
|
||||
|
||||
// some attachments have release_id but repo_id = 0
|
||||
releaseAttachments := make([]*repo_model.Attachment, 0, 20)
|
||||
if err = db.GetEngine(ctx).Join("INNER", "`release`", "`release`.id = `attachment`.release_id").
|
||||
Where("`release`.repo_id = ?", repoID).
|
||||
Find(&releaseAttachments); err != nil {
|
||||
@ -227,11 +226,11 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
|
||||
// Remove LFS objects
|
||||
var lfsObjects []*git_model.LFSMetaObject
|
||||
if err = sess.Where("repository_id=?", repoID).Find(&lfsObjects); err != nil {
|
||||
if err = db.GetEngine(ctx).Where("repository_id=?", repoID).Find(&lfsObjects); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
lfsPaths := make([]string, 0, len(lfsObjects))
|
||||
lfsPaths = make([]string, 0, len(lfsObjects))
|
||||
for _, v := range lfsObjects {
|
||||
count, err := db.CountByBean(ctx, &git_model.LFSMetaObject{Pointer: lfs.Pointer{Oid: v.Oid}})
|
||||
if err != nil {
|
||||
@ -250,11 +249,11 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
|
||||
// Remove archives
|
||||
var archives []*repo_model.RepoArchiver
|
||||
if err = sess.Where("repo_id=?", repoID).Find(&archives); err != nil {
|
||||
if err = db.GetEngine(ctx).Where("repo_id=?", repoID).Find(&archives); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
archivePaths := make([]string, 0, len(archives))
|
||||
archivePaths = make([]string, 0, len(archives))
|
||||
for _, v := range archives {
|
||||
archivePaths = append(archivePaths, v.RelativePath())
|
||||
}
|
||||
@ -264,14 +263,13 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
}
|
||||
|
||||
if repo.NumForks > 0 {
|
||||
if _, err = sess.Exec("UPDATE `repository` SET fork_id=0,is_fork=? WHERE fork_id=?", false, repo.ID); err != nil {
|
||||
if _, err = db.GetEngine(ctx).Exec("UPDATE `repository` SET fork_id=0,is_fork=? WHERE fork_id=?", false, repo.ID); err != nil {
|
||||
log.Error("reset 'fork_id' and 'is_fork': %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Get all attachments with repo_id = repo.ID. some release attachments have repo_id = 0 should be deleted before
|
||||
var repoAttachments []*repo_model.Attachment
|
||||
if err := sess.Where(builder.Eq{
|
||||
if err := db.GetEngine(ctx).Where(builder.Eq{
|
||||
"repo_id": repo.ID,
|
||||
}).Find(&repoAttachments); err != nil {
|
||||
return err
|
||||
@ -281,16 +279,12 @@ func DeleteRepositoryDirectly(ctx context.Context, repoID int64, ignoreOrgTeams
|
||||
}
|
||||
|
||||
// unlink packages linked to this repository
|
||||
if err = packages_model.UnlinkRepositoryFromAllPackages(ctx, repoID); err != nil {
|
||||
return packages_model.UnlinkRepositoryFromAllPackages(ctx, repoID)
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = committer.Commit(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
committer.Close()
|
||||
|
||||
if needRewriteKeysFile {
|
||||
if err := asymkey_service.RewriteAllPublicKeys(ctx); err != nil {
|
||||
log.Error("RewriteAllPublicKeys failed: %v", err)
|
||||
|
@ -211,12 +211,7 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) error {
|
||||
}
|
||||
}
|
||||
|
||||
ctx, committer, err := db.TxContext(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer committer.Close()
|
||||
|
||||
toBeCleanedAttachments, err := db.WithTx2(ctx, func(ctx context.Context) ([]*repo_model.Attachment, error) {
|
||||
// Note: A user owns any repository or belongs to any organization
|
||||
// cannot perform delete operation. This causes a race with the purge above
|
||||
// however consistency requires that we ensure that this is the case
|
||||
@ -224,35 +219,35 @@ func DeleteUser(ctx context.Context, u *user_model.User, purge bool) error {
|
||||
// Check ownership of repository.
|
||||
count, err := repo_model.CountRepositories(ctx, repo_model.CountRepositoryOptions{OwnerID: u.ID})
|
||||
if err != nil {
|
||||
return fmt.Errorf("GetRepositoryCount: %w", err)
|
||||
return nil, fmt.Errorf("GetRepositoryCount: %w", err)
|
||||
} else if count > 0 {
|
||||
return repo_model.ErrUserOwnRepos{UID: u.ID}
|
||||
return nil, repo_model.ErrUserOwnRepos{UID: u.ID}
|
||||
}
|
||||
|
||||
// Check membership of organization.
|
||||
count, err = organization.GetOrganizationCount(ctx, u)
|
||||
if err != nil {
|
||||
return fmt.Errorf("GetOrganizationCount: %w", err)
|
||||
return nil, fmt.Errorf("GetOrganizationCount: %w", err)
|
||||
} else if count > 0 {
|
||||
return organization.ErrUserHasOrgs{UID: u.ID}
|
||||
return nil, organization.ErrUserHasOrgs{UID: u.ID}
|
||||
}
|
||||
|
||||
// Check ownership of packages.
|
||||
if ownsPackages, err := packages_model.HasOwnerPackages(ctx, u.ID); err != nil {
|
||||
return fmt.Errorf("HasOwnerPackages: %w", err)
|
||||
return nil, fmt.Errorf("HasOwnerPackages: %w", err)
|
||||
} else if ownsPackages {
|
||||
return packages_model.ErrUserOwnPackages{UID: u.ID}
|
||||
return nil, packages_model.ErrUserOwnPackages{UID: u.ID}
|
||||
}
|
||||
|
||||
toBeCleanedAttachments, err := deleteUser(ctx, u, purge)
|
||||
if err != nil {
|
||||
return fmt.Errorf("DeleteUser: %w", err)
|
||||
return nil, fmt.Errorf("DeleteUser: %w", err)
|
||||
}
|
||||
|
||||
if err := committer.Commit(); err != nil {
|
||||
return toBeCleanedAttachments, nil
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_ = committer.Close()
|
||||
|
||||
attachment_service.AddAttachmentsToCleanQueue(ctx, toBeCleanedAttachments)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user