mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add data directory excluding sessions to dump (#587)
This commit is contained in:
		
				
					committed by
					
						
						Lunny Xiao
					
				
			
			
				
	
			
			
			
						parent
						
							b7eae783b5
						
					
				
				
					commit
					e698654902
				
			
							
								
								
									
										53
									
								
								cmd/dump.go
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								cmd/dump.go
									
									
									
									
									
								
							@@ -11,6 +11,7 @@ import (
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/models"
 | 
			
		||||
@@ -53,6 +54,7 @@ func runDump(ctx *cli.Context) error {
 | 
			
		||||
		setting.CustomConf = ctx.String("config")
 | 
			
		||||
	}
 | 
			
		||||
	setting.NewContext()
 | 
			
		||||
	setting.NewServices() // cannot access session settings otherwise
 | 
			
		||||
	models.LoadConfigs()
 | 
			
		||||
	models.SetEngine()
 | 
			
		||||
 | 
			
		||||
@@ -107,6 +109,20 @@ func runDump(ctx *cli.Context) error {
 | 
			
		||||
	} else {
 | 
			
		||||
		log.Printf("Custom dir %s doesn't exist, skipped", setting.CustomPath)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Printf("Packing data directory...%s", setting.AppDataPath)
 | 
			
		||||
	var sessionAbsPath string
 | 
			
		||||
	if setting.SessionConfig.Provider == "file" {
 | 
			
		||||
		if len(setting.SessionConfig.ProviderConfig) == 0 {
 | 
			
		||||
			setting.SessionConfig.ProviderConfig = "data/sessions"
 | 
			
		||||
		}
 | 
			
		||||
		sessionAbsPath, _ = filepath.Abs(setting.SessionConfig.ProviderConfig)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := zipAddDirectoryExclude(z, "data", setting.AppDataPath, sessionAbsPath); err != nil {
 | 
			
		||||
		log.Fatalf("Fail to include data directory: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := z.AddDir("log", setting.LogRootPath); err != nil {
 | 
			
		||||
		log.Fatalf("Fail to include log: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
@@ -129,3 +145,40 @@ func runDump(ctx *cli.Context) error {
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// zipAddDirectoryExclude zips absPath to specified zipPath inside z excluding excludeAbsPath
 | 
			
		||||
func zipAddDirectoryExclude(zip *zip.ZipArchive, zipPath, absPath string, excludeAbsPath string) error {
 | 
			
		||||
	absPath, err := filepath.Abs(absPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	dir, err := os.Open(absPath)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	defer dir.Close()
 | 
			
		||||
 | 
			
		||||
	zip.AddEmptyDir(zipPath)
 | 
			
		||||
 | 
			
		||||
	files, err := dir.Readdir(0)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	for _, file := range files {
 | 
			
		||||
		currentAbsPath := path.Join(absPath, file.Name())
 | 
			
		||||
		currentZipPath := path.Join(zipPath, file.Name())
 | 
			
		||||
		if file.IsDir() {
 | 
			
		||||
			if currentAbsPath != excludeAbsPath {
 | 
			
		||||
				if err = zipAddDirectoryExclude(zip, currentZipPath, currentAbsPath, excludeAbsPath); err != nil {
 | 
			
		||||
					return err
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		} else {
 | 
			
		||||
			if err = zip.AddFile(currentZipPath, currentAbsPath); err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user