Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
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.
119 lines
2.8 KiB
119 lines
2.8 KiB
// Copyright 2020 The Gitea Authors. All rights reserved. |
|
// Use of this source code is governed by a MIT-style |
|
// license that can be found in the LICENSE file. |
|
|
|
package cmd |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
|
|
"code.gitea.io/gitea/modules/log" |
|
"code.gitea.io/gitea/modules/migrations" |
|
"code.gitea.io/gitea/modules/migrations/base" |
|
"code.gitea.io/gitea/modules/setting" |
|
"code.gitea.io/gitea/modules/storage" |
|
pull_service "code.gitea.io/gitea/services/pull" |
|
|
|
"github.com/urfave/cli" |
|
) |
|
|
|
// CmdRestoreRepository represents the available restore a repository sub-command. |
|
var CmdRestoreRepository = cli.Command{ |
|
Name: "restore-repo", |
|
Usage: "Restore the repository from disk", |
|
Description: "This is a command for restoring the repository data.", |
|
Action: runRestoreRepository, |
|
Flags: []cli.Flag{ |
|
cli.StringFlag{ |
|
Name: "repo_dir, r", |
|
Value: "./data", |
|
Usage: "Repository dir path to restore from", |
|
}, |
|
cli.StringFlag{ |
|
Name: "owner_name", |
|
Value: "", |
|
Usage: "Restore destination owner name", |
|
}, |
|
cli.StringFlag{ |
|
Name: "repo_name", |
|
Value: "", |
|
Usage: "Restore destination repository name", |
|
}, |
|
cli.StringFlag{ |
|
Name: "units", |
|
Value: "", |
|
Usage: `Which items will be restored, one or more units should be separated as comma. |
|
wiki, issues, labels, releases, release_assets, milestones, pull_requests, comments are allowed. Empty means all units.`, |
|
}, |
|
}, |
|
} |
|
|
|
func runRestoreRepository(ctx *cli.Context) error { |
|
if err := initDB(); err != nil { |
|
return err |
|
} |
|
|
|
log.Trace("AppPath: %s", setting.AppPath) |
|
log.Trace("AppWorkPath: %s", setting.AppWorkPath) |
|
log.Trace("Custom path: %s", setting.CustomPath) |
|
log.Trace("Log path: %s", setting.LogRootPath) |
|
setting.InitDBConfig() |
|
|
|
if err := storage.Init(); err != nil { |
|
return err |
|
} |
|
|
|
if err := pull_service.Init(); err != nil { |
|
return err |
|
} |
|
|
|
var opts = base.MigrateOptions{ |
|
RepoName: ctx.String("repo_name"), |
|
} |
|
|
|
if len(ctx.String("units")) == 0 { |
|
opts.Wiki = true |
|
opts.Issues = true |
|
opts.Milestones = true |
|
opts.Labels = true |
|
opts.Releases = true |
|
opts.Comments = true |
|
opts.PullRequests = true |
|
opts.ReleaseAssets = true |
|
} else { |
|
units := strings.Split(ctx.String("units"), ",") |
|
for _, unit := range units { |
|
switch strings.ToLower(unit) { |
|
case "wiki": |
|
opts.Wiki = true |
|
case "issues": |
|
opts.Issues = true |
|
case "milestones": |
|
opts.Milestones = true |
|
case "labels": |
|
opts.Labels = true |
|
case "releases": |
|
opts.Releases = true |
|
case "release_assets": |
|
opts.ReleaseAssets = true |
|
case "comments": |
|
opts.Comments = true |
|
case "pull_requests": |
|
opts.PullRequests = true |
|
} |
|
} |
|
} |
|
|
|
if err := migrations.RestoreRepository( |
|
context.Background(), |
|
ctx.String("repo_dir"), |
|
ctx.String("owner_name"), |
|
ctx.String("repo_name"), |
|
); err != nil { |
|
log.Fatal("Failed to restore repository: %v", err) |
|
return err |
|
} |
|
|
|
return nil |
|
}
|
|
|