Files
Atay-Makhzan/cmd/admin.go
T

169 lines
3.8 KiB
Go
Raw Normal View History

2016-08-13 16:11:52 -07:00
// Copyright 2016 The Gogs Authors. All rights reserved.
// Copyright 2016 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2016-08-13 16:11:52 -07:00
package cmd
import (
"context"
2016-08-13 16:11:52 -07:00
"fmt"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/gitrepo"
"code.gitea.io/gitea/modules/log"
repo_module "code.gitea.io/gitea/modules/repository"
2023-07-21 17:28:19 +08:00
"github.com/urfave/cli/v2"
2016-08-13 16:11:52 -07:00
)
var (
2016-11-04 12:42:18 +01:00
// CmdAdmin represents the available admin sub-command.
2023-07-21 17:28:19 +08:00
CmdAdmin = &cli.Command{
2016-08-13 16:11:52 -07:00
Name: "admin",
2023-12-15 23:49:01 +08:00
Usage: "Perform common administrative operations",
2023-07-21 17:28:19 +08:00
Subcommands: []*cli.Command{
subcmdUser,
subcmdRepoSyncReleases,
subcmdRegenerate,
subcmdAuth,
2020-10-24 23:38:14 +03:00
subcmdSendMail,
2016-08-13 16:11:52 -07:00
},
}
2023-07-21 17:28:19 +08:00
subcmdRepoSyncReleases = &cli.Command{
Name: "repo-sync-releases",
Usage: "Synchronize repository releases with tags",
Action: runRepoSyncReleases,
}
2023-07-21 17:28:19 +08:00
subcmdRegenerate = &cli.Command{
Name: "regenerate",
Usage: "Regenerate specific files",
2023-07-21 17:28:19 +08:00
Subcommands: []*cli.Command{
microcmdRegenHooks,
microcmdRegenKeys,
},
}
2023-07-21 17:28:19 +08:00
subcmdAuth = &cli.Command{
Name: "auth",
Usage: "Modify external auth providers",
2023-07-21 17:28:19 +08:00
Subcommands: []*cli.Command{
microcmdAuthAddOauth,
microcmdAuthUpdateOauth,
microcmdAuthAddLdapBindDn,
microcmdAuthUpdateLdapBindDn,
microcmdAuthAddLdapSimpleAuth,
microcmdAuthUpdateLdapSimpleAuth,
microcmdAuthAddSMTP,
microcmdAuthUpdateSMTP,
microcmdAuthList,
microcmdAuthDelete,
},
}
2023-07-21 17:28:19 +08:00
subcmdSendMail = &cli.Command{
2020-10-24 23:38:14 +03:00
Name: "sendmail",
Usage: "Send a message to all users",
Action: runSendMail,
Flags: []cli.Flag{
2023-07-21 17:28:19 +08:00
&cli.StringFlag{
2020-10-24 23:38:14 +03:00
Name: "title",
Usage: `a title of a message`,
Value: "",
},
2023-07-21 17:28:19 +08:00
&cli.StringFlag{
2020-10-24 23:38:14 +03:00
Name: "content",
Usage: "a content of a message",
Value: "",
},
2023-07-21 17:28:19 +08:00
&cli.BoolFlag{
Name: "force",
Aliases: []string{"f"},
Usage: "A flag to bypass a confirmation step",
2020-10-24 23:38:14 +03:00
},
},
}
idFlag = &cli.Int64Flag{
Name: "id",
Usage: "ID of authentication source",
}
2016-08-13 16:11:52 -07:00
)
func runRepoSyncReleases(_ *cli.Context) error {
2021-11-07 11:11:27 +08:00
ctx, cancel := installSignals()
defer cancel()
if err := initDB(ctx); err != nil {
2018-01-12 23:16:49 +01:00
return err
}
if err := git.InitSimple(ctx); err != nil {
return err
}
log.Trace("Synchronizing repository releases (this may take a while)")
for page := 1; ; page++ {
repos, count, err := repo_model.SearchRepositoryByName(ctx, &repo_model.SearchRepoOptions{
ListOptions: db.ListOptions{
PageSize: repo_model.RepositoryListDefaultPageSize,
2020-01-24 19:00:29 +00:00
Page: page,
},
Private: true,
})
if err != nil {
return fmt.Errorf("SearchRepositoryByName: %w", err)
}
if len(repos) == 0 {
break
}
log.Trace("Processing next %d repos of %d", len(repos), count)
for _, repo := range repos {
log.Trace("Synchronizing repo %s with path %s", repo.FullName(), repo.RepoPath())
gitRepo, err := gitrepo.OpenRepository(ctx, repo)
if err != nil {
log.Warn("OpenRepository: %v", err)
continue
}
oldnum, err := getReleaseCount(ctx, repo.ID)
if err != nil {
log.Warn(" GetReleaseCountByRepoID: %v", err)
}
log.Trace(" currentNumReleases is %d, running SyncReleasesWithTags", oldnum)
if err = repo_module.SyncReleasesWithTags(ctx, repo, gitRepo); err != nil {
log.Warn(" SyncReleasesWithTags: %v", err)
gitRepo.Close()
continue
}
count, err = getReleaseCount(ctx, repo.ID)
if err != nil {
log.Warn(" GetReleaseCountByRepoID: %v", err)
gitRepo.Close()
continue
}
log.Trace(" repo %s releases synchronized to tags: from %d to %d",
repo.FullName(), oldnum, count)
gitRepo.Close()
}
}
return nil
}
2018-01-12 23:16:49 +01:00
func getReleaseCount(ctx context.Context, id int64) (int64, error) {
2024-01-15 10:19:25 +08:00
return db.Count[repo_model.Release](
ctx,
repo_model.FindReleasesOptions{
2024-01-15 10:19:25 +08:00
RepoID: id,
2018-01-12 23:16:49 +01:00
IncludeTags: true,
},
)
}