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.

restore_repo.go 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Copyright 2020 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package cmd
  5. import (
  6. "context"
  7. "strings"
  8. "code.gitea.io/gitea/modules/log"
  9. "code.gitea.io/gitea/modules/migrations"
  10. "code.gitea.io/gitea/modules/migrations/base"
  11. "code.gitea.io/gitea/modules/setting"
  12. "code.gitea.io/gitea/modules/storage"
  13. pull_service "code.gitea.io/gitea/services/pull"
  14. "github.com/urfave/cli"
  15. )
  16. // CmdRestoreRepository represents the available restore a repository sub-command.
  17. var CmdRestoreRepository = cli.Command{
  18. Name: "restore-repo",
  19. Usage: "Restore the repository from disk",
  20. Description: "This is a command for restoring the repository data.",
  21. Action: runRestoreRepository,
  22. Flags: []cli.Flag{
  23. cli.StringFlag{
  24. Name: "repo_dir, r",
  25. Value: "./data",
  26. Usage: "Repository dir path to restore from",
  27. },
  28. cli.StringFlag{
  29. Name: "owner_name",
  30. Value: "",
  31. Usage: "Restore destination owner name",
  32. },
  33. cli.StringFlag{
  34. Name: "repo_name",
  35. Value: "",
  36. Usage: "Restore destination repository name",
  37. },
  38. cli.StringFlag{
  39. Name: "units",
  40. Value: "",
  41. Usage: `Which items will be restored, one or more units should be separated as comma.
  42. wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments are allowed. Empty means all units.`,
  43. },
  44. },
  45. }
  46. func runRestoreRepository(ctx *cli.Context) error {
  47. if err := initDB(); err != nil {
  48. return err
  49. }
  50. log.Trace("AppPath: %s", setting.AppPath)
  51. log.Trace("AppWorkPath: %s", setting.AppWorkPath)
  52. log.Trace("Custom path: %s", setting.CustomPath)
  53. log.Trace("Log path: %s", setting.LogRootPath)
  54. setting.InitDBConfig()
  55. if err := storage.Init(); err != nil {
  56. return err
  57. }
  58. if err := pull_service.Init(); err != nil {
  59. return err
  60. }
  61. var opts = base.MigrateOptions{
  62. RepoName: ctx.String("repo_name"),
  63. }
  64. if len(ctx.String("units")) == 0 {
  65. opts.Wiki = true
  66. opts.Issues = true
  67. opts.Milestones = true
  68. opts.Labels = true
  69. opts.Releases = true
  70. opts.Comments = true
  71. opts.PullRequests = true
  72. opts.ReleaseAssets = true
  73. } else {
  74. units := strings.Split(ctx.String("units"), ",")
  75. for _, unit := range units {
  76. switch strings.ToLower(unit) {
  77. case "wiki":
  78. opts.Wiki = true
  79. case "issues":
  80. opts.Issues = true
  81. case "milestones":
  82. opts.Milestones = true
  83. case "labels":
  84. opts.Labels = true
  85. case "releases":
  86. opts.Releases = true
  87. case "release_assets":
  88. opts.ReleaseAssets = true
  89. case "comments":
  90. opts.Comments = true
  91. case "pull_requests":
  92. opts.PullRequests = true
  93. }
  94. }
  95. }
  96. if err := migrations.RestoreRepository(
  97. context.Background(),
  98. ctx.String("repo_dir"),
  99. ctx.String("owner_name"),
  100. ctx.String("repo_name"),
  101. ); err != nil {
  102. log.Fatal("Failed to restore repository: %v", err)
  103. return err
  104. }
  105. return nil
  106. }