]> source.dussan.org Git - gitea.git/commitdiff
Fix cli command restore-repo: "units" should be parsed as StringSlice (#19953)
authorwxiaoguang <wxiaoguang@gmail.com>
Wed, 15 Jun 2022 12:28:03 +0000 (20:28 +0800)
committerGitHub <noreply@github.com>
Wed, 15 Jun 2022 12:28:03 +0000 (20:28 +0800)
* Fix cli command restore-repo: "units" should be parsed as StringSlice because after  #15790 it's read by c.StringSlice("units").  Before, the "units" were processed by strings.Split
* Add checking for invalid unit names

Co-authored-by: 6543 <6543@obermui.de>
cmd/restore_repo.go
services/migrations/dump.go

index f0b01e7984c7f2b25df8a3f12e3fdaf55d831bfa..c3081279dfc251b7ab772ad91157f67e2b65cfb6 100644 (file)
@@ -37,10 +37,10 @@ var CmdRestoreRepository = cli.Command{
                        Value: "",
                        Usage: "Restore destination repository name",
                },
-               cli.StringFlag{
+               cli.StringSliceFlag{
                        Name:  "units",
-                       Value: "",
-                       Usage: `Which items will be restored, one or more units should be separated as comma.
+                       Value: nil,
+                       Usage: `Which items will be restored, one or more units should be repeated with this flag.
 wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments are allowed. Empty means all units.`,
                },
                cli.BoolFlag{
index 6410aa1ee0854c8fef0c020125f010100c9d6447..ad04756d4bc89a64d0369a418febd0f197caf6ad 100644 (file)
@@ -6,6 +6,7 @@ package migrations
 
 import (
        "context"
+       "errors"
        "fmt"
        "io"
        "net/http"
@@ -572,7 +573,7 @@ func DumpRepository(ctx context.Context, baseDir, ownerName string, opts base.Mi
        return nil
 }
 
-func updateOptionsUnits(opts *base.MigrateOptions, units []string) {
+func updateOptionsUnits(opts *base.MigrateOptions, units []string) error {
        if len(units) == 0 {
                opts.Wiki = true
                opts.Issues = true
@@ -585,6 +586,8 @@ func updateOptionsUnits(opts *base.MigrateOptions, units []string) {
        } else {
                for _, unit := range units {
                        switch strings.ToLower(unit) {
+                       case "":
+                               continue
                        case "wiki":
                                opts.Wiki = true
                        case "issues":
@@ -601,9 +604,12 @@ func updateOptionsUnits(opts *base.MigrateOptions, units []string) {
                                opts.Comments = true
                        case "pull_requests":
                                opts.PullRequests = true
+                       default:
+                               return errors.New("invalid unit: " + unit)
                        }
                }
        }
+       return nil
 }
 
 // RestoreRepository restore a repository from the disk directory
@@ -626,7 +632,9 @@ func RestoreRepository(ctx context.Context, baseDir, ownerName, repoName string,
        migrateOpts := base.MigrateOptions{
                GitServiceType: structs.GitServiceType(tp),
        }
-       updateOptionsUnits(&migrateOpts, units)
+       if err := updateOptionsUnits(&migrateOpts, units); err != nil {
+               return err
+       }
 
        if err = migrateRepository(downloader, uploader, migrateOpts, nil); err != nil {
                if err1 := uploader.Rollback(); err1 != nil {