Add default storage configurations (#12813)
Signed-off-by: Andrew Thornton <art27@cantab.net> Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
parent
4c6ac08182
commit
3878e985b6
19 changed files with 459 additions and 185 deletions
45
cmd/dump.go
45
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.
|
||||
|
|
|
@ -7,6 +7,7 @@ package cmd
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"code.gitea.io/gitea/models"
|
||||
"code.gitea.io/gitea/models/migrations"
|
||||
|
@ -30,8 +31,8 @@ var CmdMigrateStorage = cli.Command{
|
|||
Usage: "Kinds of files to migrate, currently only 'attachments' is supported",
|
||||
},
|
||||
cli.StringFlag{
|
||||
Name: "store, s",
|
||||
Value: "local",
|
||||
Name: "storage, s",
|
||||
Value: setting.LocalStorageType,
|
||||
Usage: "New storage type, local or minio",
|
||||
},
|
||||
cli.StringFlag{
|
||||
|
@ -112,15 +113,15 @@ func runMigrateStorage(ctx *cli.Context) error {
|
|||
|
||||
var dstStorage storage.ObjectStorage
|
||||
var err error
|
||||
switch ctx.String("store") {
|
||||
case "local":
|
||||
switch strings.ToLower(ctx.String("storage")) {
|
||||
case setting.LocalStorageType:
|
||||
p := ctx.String("path")
|
||||
if p == "" {
|
||||
log.Fatal("Path must be given when store is loal")
|
||||
log.Fatal("Path must be given when storage is loal")
|
||||
return nil
|
||||
}
|
||||
dstStorage, err = storage.NewLocalStorage(p)
|
||||
case "minio":
|
||||
case setting.MinioStorageType:
|
||||
dstStorage, err = storage.NewMinioStorage(
|
||||
context.Background(),
|
||||
ctx.String("minio-endpoint"),
|
||||
|
@ -132,14 +133,14 @@ func runMigrateStorage(ctx *cli.Context) error {
|
|||
ctx.Bool("minio-use-ssl"),
|
||||
)
|
||||
default:
|
||||
return fmt.Errorf("Unsupported attachments store type: %s", ctx.String("store"))
|
||||
return fmt.Errorf("Unsupported attachments storage type: %s", ctx.String("storage"))
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
tp := ctx.String("type")
|
||||
tp := strings.ToLower(ctx.String("type"))
|
||||
switch tp {
|
||||
case "attachments":
|
||||
if err := migrateAttachments(dstStorage); err != nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue