|
@@ -6,6 +6,8 @@ package cmd
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "reflect"
|
|
|
+ "runtime"
|
|
|
|
|
|
"github.com/urfave/cli"
|
|
|
|
|
@@ -21,6 +23,13 @@ var (
|
|
|
to make automatic initialization process more smoothly`,
|
|
|
Subcommands: []cli.Command{
|
|
|
subcmdCreateUser,
|
|
|
+ subcmdDeleteInactivateUsers,
|
|
|
+ subcmdDeleteRepositoryArchives,
|
|
|
+ subcmdDeleteMissingRepositories,
|
|
|
+ subcmdGitGcRepos,
|
|
|
+ subcmdRewriteAllPublicKeys,
|
|
|
+ subcmdSyncRepositoryHooks,
|
|
|
+ subcmdReinitMissingRepositories,
|
|
|
},
|
|
|
}
|
|
|
|
|
@@ -36,6 +45,90 @@ to make automatic initialization process more smoothly`,
|
|
|
stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
},
|
|
|
}
|
|
|
+
|
|
|
+ subcmdDeleteInactivateUsers = cli.Command{
|
|
|
+ Name: "delete-inactive-users",
|
|
|
+ Usage: "Delete all inactive accounts",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.DeleteInactivateUsers,
|
|
|
+ "All inactivate accounts have been deleted successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdDeleteRepositoryArchives = cli.Command{
|
|
|
+ Name: "delete-repository-archives",
|
|
|
+ Usage: "Delete all repositories archives",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.DeleteRepositoryArchives,
|
|
|
+ "All repositories archives have been deleted successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdDeleteMissingRepositories = cli.Command{
|
|
|
+ Name: "delete-missing-repositories",
|
|
|
+ Usage: "Delete all repository records that lost Git files",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.DeleteMissingRepositories,
|
|
|
+ "All repositories archives have been deleted successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdGitGcRepos = cli.Command{
|
|
|
+ Name: "collect-garbage",
|
|
|
+ Usage: "Do garbage collection on repositories",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.GitGcRepos,
|
|
|
+ "All repositories have done garbage collection successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdRewriteAllPublicKeys = cli.Command{
|
|
|
+ Name: "rewrite-public-keys",
|
|
|
+ Usage: "Rewrite '.ssh/authorized_keys' file (caution: non-Gogs keys will be lost)",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.RewriteAllPublicKeys,
|
|
|
+ "All public keys have been rewritten successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdSyncRepositoryHooks = cli.Command{
|
|
|
+ Name: "resync-hooks",
|
|
|
+ Usage: "Resync pre-receive, update and post-receive hooks",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.SyncRepositoryHooks,
|
|
|
+ "All repositories' pre-receive, update and post-receive hooks have been resynced successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ subcmdReinitMissingRepositories = cli.Command{
|
|
|
+ Name: "reinit-missing-repositories",
|
|
|
+ Usage: "Reinitialize all repository records that lost Git files",
|
|
|
+ Action: adminDashboardOperation(
|
|
|
+ models.ReinitMissingRepositories,
|
|
|
+ "All repository records that lost Git files have been reinitialized successfully",
|
|
|
+ ),
|
|
|
+ Flags: []cli.Flag{
|
|
|
+ stringFlag("config, c", "custom/conf/app.ini", "Custom configuration file path"),
|
|
|
+ },
|
|
|
+ }
|
|
|
)
|
|
|
|
|
|
func runCreateUser(c *cli.Context) error {
|
|
@@ -68,3 +161,23 @@ func runCreateUser(c *cli.Context) error {
|
|
|
fmt.Printf("New user '%s' has been successfully created!\n", c.String("name"))
|
|
|
return nil
|
|
|
}
|
|
|
+
|
|
|
+func adminDashboardOperation(operation func() error, successMessage string) func(*cli.Context) error {
|
|
|
+ return func(c *cli.Context) error {
|
|
|
+ if c.IsSet("config") {
|
|
|
+ setting.CustomConf = c.String("config")
|
|
|
+ }
|
|
|
+
|
|
|
+ setting.NewContext()
|
|
|
+ models.LoadConfigs()
|
|
|
+ models.SetEngine()
|
|
|
+
|
|
|
+ if err := operation(); err != nil {
|
|
|
+ functionName := runtime.FuncForPC(reflect.ValueOf(operation).Pointer()).Name()
|
|
|
+ return fmt.Errorf("%s: %v", functionName, err)
|
|
|
+ }
|
|
|
+
|
|
|
+ fmt.Printf("%s\n", successMessage)
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+}
|