From 87053c53696e1d53cd90552770fe75e706997c38 Mon Sep 17 00:00:00 2001 From: Philidor Green Date: Tue, 24 Mar 2020 17:03:05 +0300 Subject: cmd: backup support exclude mirror repositories (#6003) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * cmd: backup support exclude mirror repositories * Apply suggestions from code review Co-authored-by: ᴜɴᴋɴᴡᴏɴ --- internal/cmd/backup.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'internal/cmd') 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) } } -- cgit v1.2.3