diff options
author | Philidor Green <fishbullet@users.noreply.github.com> | 2020-03-24 17:03:05 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-24 22:03:05 +0800 |
commit | 87053c53696e1d53cd90552770fe75e706997c38 (patch) | |
tree | fc5947a6fd5bfa59d9c98fe63b43adc9882569a3 /internal/cmd | |
parent | e14b6abf9dae13bc087c9d9db8fe7c7a5125c792 (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.go | 28 |
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) } } |