|
|
|
@ -49,38 +49,6 @@ func addFile(w archiver.Writer, filePath string, absPath string, verbose bool) e |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func addRecursive(w archiver.Writer, dirPath string, absPath string, verbose bool) error { |
|
|
|
|
if verbose { |
|
|
|
|
log.Info("Adding dir %s\n", dirPath) |
|
|
|
|
} |
|
|
|
|
dir, err := os.Open(absPath) |
|
|
|
|
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) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if err := addFile(w, dirPath, absPath, false); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, fileInfo := range files { |
|
|
|
|
if fileInfo.IsDir() { |
|
|
|
|
err = addRecursive(w, filepath.Join(dirPath, fileInfo.Name()), filepath.Join(absPath, fileInfo.Name()), verbose) |
|
|
|
|
} else { |
|
|
|
|
err = addFile(w, filepath.Join(dirPath, fileInfo.Name()), filepath.Join(absPath, fileInfo.Name()), verbose) |
|
|
|
|
} |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func isSubdir(upper string, lower string) (bool, error) { |
|
|
|
|
if relPath, err := filepath.Rel(upper, lower); err != nil { |
|
|
|
|
return false, err |
|
|
|
@ -157,6 +125,10 @@ It can be used for backup and capture Gitea server image to send to maintainer`, |
|
|
|
|
Name: "skip-log, L", |
|
|
|
|
Usage: "Skip the log dumping", |
|
|
|
|
}, |
|
|
|
|
cli.BoolFlag{ |
|
|
|
|
Name: "skip-custom-dir", |
|
|
|
|
Usage: "Skip custom directory", |
|
|
|
|
}, |
|
|
|
|
cli.GenericFlag{ |
|
|
|
|
Name: "type", |
|
|
|
|
Value: outputTypeEnum, |
|
|
|
@ -211,6 +183,11 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
} |
|
|
|
|
defer file.Close() |
|
|
|
|
|
|
|
|
|
absFileName, err := filepath.Abs(fileName) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
verbose := ctx.Bool("verbose") |
|
|
|
|
outType := ctx.String("type") |
|
|
|
|
var iface interface{} |
|
|
|
@ -233,7 +210,7 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
log.Info("Skip dumping local repositories") |
|
|
|
|
} else { |
|
|
|
|
log.Info("Dumping local repositories... %s", setting.RepoRootPath) |
|
|
|
|
if err := addRecursive(w, "repos", setting.RepoRootPath, verbose); err != nil { |
|
|
|
|
if err := addRecursiveExclude(w, "repos", setting.RepoRootPath, []string{absFileName}, verbose); err != nil { |
|
|
|
|
fatal("Failed to include repositories: %v", err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -292,10 +269,13 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ctx.IsSet("skip-custom-dir") && ctx.Bool("skip-custom-dir") { |
|
|
|
|
log.Info("Skiping custom directory") |
|
|
|
|
} else { |
|
|
|
|
customDir, err := os.Stat(setting.CustomPath) |
|
|
|
|
if err == nil && customDir.IsDir() { |
|
|
|
|
if is, _ := isSubdir(setting.AppDataPath, setting.CustomPath); !is { |
|
|
|
|
if err := addRecursive(w, "custom", setting.CustomPath, verbose); err != nil { |
|
|
|
|
if err := addRecursiveExclude(w, "custom", setting.CustomPath, []string{absFileName}, verbose); err != nil { |
|
|
|
|
fatal("Failed to include custom: %v", err) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
@ -304,6 +284,7 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
} else { |
|
|
|
|
log.Info("Custom dir %s doesn't exist, skipped", setting.CustomPath) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
isExist, err := util.IsExist(setting.AppDataPath) |
|
|
|
|
if err != nil { |
|
|
|
@ -325,6 +306,7 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
excludes = append(excludes, setting.LFS.Path) |
|
|
|
|
excludes = append(excludes, setting.Attachment.Path) |
|
|
|
|
excludes = append(excludes, setting.LogRootPath) |
|
|
|
|
excludes = append(excludes, absFileName) |
|
|
|
|
if err := addRecursiveExclude(w, "data", setting.AppDataPath, excludes, verbose); err != nil { |
|
|
|
|
fatal("Failed to include data directory: %v", err) |
|
|
|
|
} |
|
|
|
@ -358,7 +340,7 @@ func runDump(ctx *cli.Context) error { |
|
|
|
|
log.Error("Unable to check if %s exists. Error: %v", setting.LogRootPath, err) |
|
|
|
|
} |
|
|
|
|
if isExist { |
|
|
|
|
if err := addRecursive(w, "log", setting.LogRootPath, verbose); err != nil { |
|
|
|
|
if err := addRecursiveExclude(w, "log", setting.LogRootPath, []string{absFileName}, verbose); err != nil { |
|
|
|
|
fatal("Failed to include log: %v", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|