aboutsummaryrefslogtreecommitdiff
path: root/internal/cmd
diff options
context:
space:
mode:
authorPhilidor Green <fishbullet@users.noreply.github.com>2020-03-24 17:03:05 +0300
committerGitHub <noreply@github.com>2020-03-24 22:03:05 +0800
commit87053c53696e1d53cd90552770fe75e706997c38 (patch)
treefc5947a6fd5bfa59d9c98fe63b43adc9882569a3 /internal/cmd
parente14b6abf9dae13bc087c9d9db8fe7c7a5125c792 (diff)
cmd: backup support exclude mirror repositories (#6003)
* cmd: backup support exclude mirror repositories * Apply suggestions from code review Co-authored-by: ᴜɴᴋɴᴡᴏɴ <u@gogs.io>
Diffstat (limited to 'internal/cmd')
-rw-r--r--internal/cmd/backup.go28
1 files changed, 25 insertions, 3 deletions
diff --git a/internal/cmd/backup.go b/internal/cmd/backup.go
index 5478979e..316f0aec 100644
--- a/internal/cmd/backup.go
+++ b/internal/cmd/backup.go
@@ -37,6 +37,7 @@ portable among all supported database engines.`,
stringFlag("target", "./", "Target directory path to save backup archive"),
stringFlag("archive-name", fmt.Sprintf("gogs-backup-%s.zip", time.Now().Format("20060102150405")), "Name of backup archive"),
boolFlag("database-only", "Only dump database"),
+ boolFlag("exclude-mirror-repos", "Exclude mirror repositories"),
boolFlag("exclude-repos", "Exclude repositories"),
},
}
@@ -122,13 +123,34 @@ func runBackup(c *cli.Context) error {
if !c.Bool("exclude-repos") && !c.Bool("database-only") {
reposDump := filepath.Join(rootDir, "repositories.zip")
log.Info("Dumping repositories in %q", conf.Repository.Root)
- if err = zip.PackTo(conf.Repository.Root, reposDump, true); err != nil {
- log.Fatal("Failed to dump repositories: %v", err)
+ if c.Bool("exclude-mirror-repos") {
+ repos, err := db.GetNonMirrorRepositories()
+ if err != nil {
+ log.Fatal("Failed to get non-mirror repositories: %v", err)
+ }
+ reposZip, err := zip.Create(reposDump)
+ if err != nil {
+ log.Fatal("Failed to create %q: %v", reposDump, err)
+ }
+ baseDir := filepath.Base(conf.Repository.Root)
+ for _, r := range repos {
+ name := r.FullName() + ".git"
+ if err := reposZip.AddDir(filepath.Join(baseDir, name), filepath.Join(conf.Repository.Root, name)); err != nil {
+ log.Fatal("Failed to add %q: %v", name, err)
+ }
+ }
+ if err = reposZip.Close(); err != nil {
+ log.Fatal("Failed to save %q: %v", reposDump, err)
+ }
+ } else {
+ if err = zip.PackTo(conf.Repository.Root, reposDump, true); err != nil {
+ log.Fatal("Failed to dump repositories: %v", err)
+ }
}
log.Info("Repositories dumped to: %s", reposDump)
if err = z.AddFile(_ARCHIVE_ROOT_DIR+"/repositories.zip", reposDump); err != nil {
- log.Fatal("Failed to include 'repositories.zip': %v", err)
+ log.Fatal("Failed to include %q: %v", reposDump, err)
}
}