diff --git a/cmd/restore_repo.go b/cmd/restore_repo.go index f0b01e7984c..c3081279dfc 100644 --- a/cmd/restore_repo.go +++ b/cmd/restore_repo.go @@ -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{ diff --git a/services/migrations/dump.go b/services/migrations/dump.go index 6410aa1ee08..ad04756d4bc 100644 --- a/services/migrations/dump.go +++ b/services/migrations/dump.go @@ -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 {