mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Change use of Walk to WalkDir to improve disk performance (#22462)
As suggest by Go developers, use `filepath.WalkDir` instead of `filepath.Walk` because [*Walk is less efficient than WalkDir, introduced in Go 1.16, which avoids calling `os.Lstat` on every file or directory visited](https://pkg.go.dev/path/filepath#Walk). This proposition address that, in a similar way as https://github.com/go-gitea/gitea/pull/22392 did. Co-authored-by: zeripath <art27@cantab.net> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							da274380a7
						
					
				
				
					commit
					04c97aa364
				
			@@ -280,17 +280,17 @@ func Repos(ctx *context.Context) {
 | 
			
		||||
		repos := map[string]*repo_model.Repository{}
 | 
			
		||||
		// We're going to iterate by pagesize.
 | 
			
		||||
		root := user_model.UserPath(ctxUser.Name)
 | 
			
		||||
		if err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
 | 
			
		||||
		if err := filepath.WalkDir(root, func(path string, d os.DirEntry, err error) error {
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				if os.IsNotExist(err) {
 | 
			
		||||
					return nil
 | 
			
		||||
				}
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
			if !info.IsDir() || path == root {
 | 
			
		||||
			if !d.IsDir() || path == root {
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
			name := info.Name()
 | 
			
		||||
			name := d.Name()
 | 
			
		||||
			if !strings.HasSuffix(name, ".git") {
 | 
			
		||||
				return filepath.SkipDir
 | 
			
		||||
			}
 | 
			
		||||
@@ -304,7 +304,7 @@ func Repos(ctx *context.Context) {
 | 
			
		||||
			count++
 | 
			
		||||
			return filepath.SkipDir
 | 
			
		||||
		}); err != nil {
 | 
			
		||||
			ctx.ServerError("filepath.Walk", err)
 | 
			
		||||
			ctx.ServerError("filepath.WalkDir", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user