mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
// Copyright 2023 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package repository |
|
|
|
import ( |
|
"context" |
|
"slices" |
|
|
|
"code.gitea.io/gitea/models/db" |
|
repo_model "code.gitea.io/gitea/models/repo" |
|
"code.gitea.io/gitea/models/unit" |
|
"code.gitea.io/gitea/modules/log" |
|
actions_service "code.gitea.io/gitea/services/actions" |
|
) |
|
|
|
// UpdateRepositoryUnits updates a repository's units |
|
func UpdateRepositoryUnits(ctx context.Context, repo *repo_model.Repository, units []repo_model.RepoUnit, deleteUnitTypes []unit.Type) (err error) { |
|
return db.WithTx(ctx, func(ctx context.Context) error { |
|
// Delete existing settings of units before adding again |
|
for _, u := range units { |
|
deleteUnitTypes = append(deleteUnitTypes, u.Type) |
|
} |
|
|
|
if slices.Contains(deleteUnitTypes, unit.TypeActions) { |
|
if err := actions_service.CleanRepoScheduleTasks(ctx, repo); err != nil { |
|
log.Error("CleanRepoScheduleTasks: %v", err) |
|
} |
|
} |
|
|
|
for _, u := range units { |
|
if u.Type == unit.TypeActions { |
|
if err := actions_service.DetectAndHandleSchedules(ctx, repo); err != nil { |
|
log.Error("DetectAndHandleSchedules: %v", err) |
|
} |
|
break |
|
} |
|
} |
|
|
|
if _, err = db.GetEngine(ctx).Where("repo_id = ?", repo.ID).In("type", deleteUnitTypes).Delete(new(repo_model.RepoUnit)); err != nil { |
|
return err |
|
} |
|
|
|
if len(units) > 0 { |
|
if err = db.Insert(ctx, units); err != nil { |
|
return err |
|
} |
|
} |
|
|
|
return nil |
|
}) |
|
}
|
|
|