summaryrefslogtreecommitdiffstats
path: root/cmd/dump.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/dump.go')
-rw-r--r--cmd/dump.go45
1 files changed, 40 insertions, 5 deletions
diff --git a/cmd/dump.go b/cmd/dump.go
index 0e41ecb8c7..7ff986f14e 100644
--- a/cmd/dump.go
+++ b/cmd/dump.go
@@ -18,6 +18,7 @@ import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
+ "code.gitea.io/gitea/modules/storage"
"code.gitea.io/gitea/modules/util"
"gitea.com/macaron/session"
@@ -57,6 +58,8 @@ func addRecursive(w archiver.Writer, dirPath string, absPath string, verbose boo
if err != nil {
return fmt.Errorf("Could not open directory %s: %s", absPath, err)
}
+ defer dir.Close()
+
files, err := dir.Readdir(0)
if err != nil {
return fmt.Errorf("Unable to list files in %s: %s", absPath, err)
@@ -197,6 +200,10 @@ func runDump(ctx *cli.Context) error {
return err
}
+ if err := storage.Init(); err != nil {
+ return err
+ }
+
if file == nil {
file, err = os.Create(fileName)
if err != nil {
@@ -231,11 +238,21 @@ func runDump(ctx *cli.Context) error {
fatal("Failed to include repositories: %v", err)
}
- if _, err := os.Stat(setting.LFS.ContentPath); !os.IsNotExist(err) {
- log.Info("Dumping lfs... %s", setting.LFS.ContentPath)
- if err := addRecursive(w, "lfs", setting.LFS.ContentPath, verbose); err != nil {
- fatal("Failed to include lfs: %v", err)
+ if err := storage.LFS.IterateObjects(func(objPath string, object storage.Object) error {
+ info, err := object.Stat()
+ if err != nil {
+ return err
}
+
+ return w.Write(archiver.File{
+ FileInfo: archiver.FileInfo{
+ FileInfo: info,
+ CustomName: path.Join("data", "lfs", objPath),
+ },
+ ReadCloser: object,
+ })
+ }); err != nil {
+ fatal("Failed to dump LFS objects: %v", err)
}
}
@@ -302,13 +319,31 @@ func runDump(ctx *cli.Context) error {
}
excludes = append(excludes, setting.RepoRootPath)
- excludes = append(excludes, setting.LFS.ContentPath)
+ excludes = append(excludes, setting.LFS.Path)
+ excludes = append(excludes, setting.Attachment.Path)
excludes = append(excludes, setting.LogRootPath)
if err := addRecursiveExclude(w, "data", setting.AppDataPath, excludes, verbose); err != nil {
fatal("Failed to include data directory: %v", err)
}
}
+ if err := storage.Attachments.IterateObjects(func(objPath string, object storage.Object) error {
+ info, err := object.Stat()
+ if err != nil {
+ return err
+ }
+
+ return w.Write(archiver.File{
+ FileInfo: archiver.FileInfo{
+ FileInfo: info,
+ CustomName: path.Join("data", "attachments", objPath),
+ },
+ ReadCloser: object,
+ })
+ }); err != nil {
+ fatal("Failed to dump attachments: %v", err)
+ }
+
// Doesn't check if LogRootPath exists before processing --skip-log intentionally,
// ensuring that it's clear the dump is skipped whether the directory's initialized
// yet or not.