(c *cli.Context)
| 45 | ) |
| 46 | |
| 47 | func runBackup(c *cli.Context) error { |
| 48 | zip.Verbose = c.Bool("verbose") |
| 49 | |
| 50 | err := conf.Init(c.String("config")) |
| 51 | if err != nil { |
| 52 | return errors.Wrap(err, "init configuration") |
| 53 | } |
| 54 | conf.InitLogging(true) |
| 55 | |
| 56 | conn, err := database.SetEngine() |
| 57 | if err != nil { |
| 58 | return errors.Wrap(err, "set engine") |
| 59 | } |
| 60 | |
| 61 | tmpDir := c.String("tempdir") |
| 62 | if !osutil.Exist(tmpDir) { |
| 63 | log.Fatal("'--tempdir' does not exist: %s", tmpDir) |
| 64 | } |
| 65 | rootDir, err := os.MkdirTemp(tmpDir, "gogs-backup-") |
| 66 | if err != nil { |
| 67 | log.Fatal("Failed to create backup root directory '%s': %v", rootDir, err) |
| 68 | } |
| 69 | log.Info("Backup root directory: %s", rootDir) |
| 70 | |
| 71 | // Metadata |
| 72 | metaFile := path.Join(rootDir, "metadata.ini") |
| 73 | metadata := ini.Empty() |
| 74 | metadata.Section("").Key("VERSION").SetValue(strconv.Itoa(currentBackupFormatVersion)) |
| 75 | metadata.Section("").Key("DATE_TIME").SetValue(time.Now().String()) |
| 76 | metadata.Section("").Key("GOGS_VERSION").SetValue(conf.App.Version) |
| 77 | if err = metadata.SaveTo(metaFile); err != nil { |
| 78 | log.Fatal("Failed to save metadata '%s': %v", metaFile, err) |
| 79 | } |
| 80 | |
| 81 | archiveName := filepath.Join(c.String("target"), c.String("archive-name")) |
| 82 | log.Info("Packing backup files to: %s", archiveName) |
| 83 | |
| 84 | z, err := zip.Create(archiveName) |
| 85 | if err != nil { |
| 86 | log.Fatal("Failed to create backup archive '%s': %v", archiveName, err) |
| 87 | } |
| 88 | if err = z.AddFile(archiveRootDir+"/metadata.ini", metaFile); err != nil { |
| 89 | log.Fatal("Failed to include 'metadata.ini': %v", err) |
| 90 | } |
| 91 | |
| 92 | // Database |
| 93 | dbDir := filepath.Join(rootDir, "db") |
| 94 | if err = database.DumpDatabase(context.Background(), conn, dbDir, c.Bool("verbose")); err != nil { |
| 95 | log.Fatal("Failed to dump database: %v", err) |
| 96 | } |
| 97 | if err = z.AddDir(archiveRootDir+"/db", dbDir); err != nil { |
| 98 | log.Fatal("Failed to include 'db': %v", err) |
| 99 | } |
| 100 | |
| 101 | if !c.Bool("database-only") { |
| 102 | // Custom files |
| 103 | err = addCustomDirToBackup(z) |
| 104 | if err != nil { |
nothing calls this directly
no test coverage detected