@ -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 ) {
func isSubdir ( upper string , lower string ) ( bool , error ) {
if relPath , err := filepath . Rel ( upper , lower ) ; err != nil {
if relPath , err := filepath . Rel ( upper , lower ) ; err != nil {
return false , err
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" ,
Name : "skip-log, L" ,
Usage : "Skip the log dumping" ,
Usage : "Skip the log dumping" ,
} ,
} ,
cli . BoolFlag {
Name : "skip-custom-dir" ,
Usage : "Skip custom directory" ,
} ,
cli . GenericFlag {
cli . GenericFlag {
Name : "type" ,
Name : "type" ,
Value : outputTypeEnum ,
Value : outputTypeEnum ,
@ -211,6 +183,11 @@ func runDump(ctx *cli.Context) error {
}
}
defer file . Close ( )
defer file . Close ( )
absFileName , err := filepath . Abs ( fileName )
if err != nil {
return err
}
verbose := ctx . Bool ( "verbose" )
verbose := ctx . Bool ( "verbose" )
outType := ctx . String ( "type" )
outType := ctx . String ( "type" )
var iface interface { }
var iface interface { }
@ -233,7 +210,7 @@ func runDump(ctx *cli.Context) error {
log . Info ( "Skip dumping local repositories" )
log . Info ( "Skip dumping local repositories" )
} else {
} else {
log . Info ( "Dumping local repositories... %s" , setting . RepoRootPath )
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 )
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 )
customDir , err := os . Stat ( setting . CustomPath )
if err == nil && customDir . IsDir ( ) {
if err == nil && customDir . IsDir ( ) {
if is , _ := isSubdir ( setting . AppDataPath , setting . CustomPath ) ; ! is {
if is , _ := isSubdir ( setting . AppDataPath , setting . CustomPath ) ; ! is {
if err := addRecursive ( w , "custom" , setting . CustomPath , verbose ) ; err != nil {
if err := addRecursiveExclud e ( w , "custom" , setting . CustomPath , [ ] string { absFileName } , verbose ) ; err != nil {
fatal ( "Failed to include custom: %v" , err )
fatal ( "Failed to include custom: %v" , err )
}
}
} else {
} else {
@ -304,6 +284,7 @@ func runDump(ctx *cli.Context) error {
} else {
} else {
log . Info ( "Custom dir %s doesn't exist, skipped" , setting . CustomPath )
log . Info ( "Custom dir %s doesn't exist, skipped" , setting . CustomPath )
}
}
}
isExist , err := util . IsExist ( setting . AppDataPath )
isExist , err := util . IsExist ( setting . AppDataPath )
if err != nil {
if err != nil {
@ -325,6 +306,7 @@ func runDump(ctx *cli.Context) error {
excludes = append ( excludes , setting . LFS . Path )
excludes = append ( excludes , setting . LFS . Path )
excludes = append ( excludes , setting . Attachment . Path )
excludes = append ( excludes , setting . Attachment . Path )
excludes = append ( excludes , setting . LogRootPath )
excludes = append ( excludes , setting . LogRootPath )
excludes = append ( excludes , absFileName )
if err := addRecursiveExclude ( w , "data" , setting . AppDataPath , excludes , verbose ) ; err != nil {
if err := addRecursiveExclude ( w , "data" , setting . AppDataPath , excludes , verbose ) ; err != nil {
fatal ( "Failed to include data directory: %v" , err )
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 )
log . Error ( "Unable to check if %s exists. Error: %v" , setting . LogRootPath , err )
}
}
if isExist {
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 )
fatal ( "Failed to include log: %v" , err )
}
}
}
}