@ -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 )   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
								}   
					 
					 
					 
								}   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
							}   
					 
					 
					 
							}