fix/nonascii_attributes #69
|  | @ -43,6 +43,7 @@ func main() { | |||
| 	showVersion := flag.Bool("version", false, "print current version") | ||||
| 	rootDir := flag.String("root", ".", "root dir for forbidden files check") | ||||
| 	repoSize := flag.Float64("repoSize", 2, "maximum size of the repo in MiB") | ||||
| 	// TODO: remove localList, it is only for backward compatibility now
 | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 | ||||
| 	localList := flag.String("localList", "", "local file list for non-ascii file check") | ||||
| 	checkFileNameList := flag.String("checkFileNameList", "", "comma-separated list of files to check") | ||||
| 	checkFileSumList := flag.String("checkFileSumList", "", "comma-separated list of expected checksums") | ||||
|  | @ -77,7 +78,7 @@ func main() { | |||
| 	if err != nil { | ||||
| 		fmt.Printf("### Forbidden File Check Failed:\n%s\n", err.Error()) | ||||
| 	} | ||||
| 	err = healthcheck.NonAsciiFiles(*rootDir, *localList) | ||||
| 	err = healthcheck.NonAsciiFiles(*rootDir) | ||||
| 	if err != nil { | ||||
| 		fmt.Printf("### Non-ASCII Characters File Check Failed:\n%s\n", err.Error()) | ||||
| 	} | ||||
|  |  | |||
|  | @ -8,46 +8,57 @@ import ( | |||
| 	"path/filepath" | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
| 
 | ||||
| 	"github.com/go-git/go-git/v5/plumbing/format/gitattributes" | ||||
| ) | ||||
| 
 | ||||
| // getNonAscii retrieves a list of files in the specified root directory that contain non-ASCII characters.
 | ||||
| // It searches for non-ASCII characters in each file's content and returns a list of paths to files containing non-ASCII characters.
 | ||||
| func getNonAscii(root string, localList string) ([]string, error) { | ||||
| func getNonAscii(root string) ([]string, error) { | ||||
| 	var nonAscii []string | ||||
| 
 | ||||
| 	var dirs []string | ||||
| 
 | ||||
| 	if localList != "" { | ||||
| 		file, err := os.Open(localList) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("Failed to open file %s: %v\n", localList, err) | ||||
| 		} | ||||
| 		defer file.Close() | ||||
| 
 | ||||
| 		scanner := bufio.NewScanner(file) | ||||
| 		for scanner.Scan() { | ||||
| 			dirs = append(dirs, scanner.Text()) | ||||
| 		} | ||||
| 		if err := scanner.Err(); err != nil { | ||||
| 			return nil, fmt.Errorf("Error reading file %s: %v\n", localList, err) | ||||
| 		} | ||||
| 	gitattrExist := true | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  the naming is weird, we need to think what is  the naming is weird, we need to think what is `!noAttri`. Just sth like `gitattributesExist`. | ||||
| 	var matcher gitattributes.Matcher | ||||
| 	_, err := os.Stat(".gitattributes") | ||||
| 	if os.IsNotExist(err) { | ||||
| 		gitattrExist = false | ||||
| 	} | ||||
| 
 | ||||
| 	err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { | ||||
| 	if gitattrExist { | ||||
| 		fs := os.DirFS(".") | ||||
| 		f, err := fs.Open(".gitattributes") | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 
 | ||||
| 		attribute, err := gitattributes.ReadAttributes(f, nil, true) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		matcher = gitattributes.NewMatcher(attribute) | ||||
| 	} | ||||
| 
 | ||||
| 	err = filepath.Walk(root, func(path string, info os.FileInfo, err error) error { | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		if info.IsDir() { | ||||
| 			if info.Name() == ".git" || info.Name() == ".gitea" || info.Name() == "ci" || (localList != "" && inString(info.Name(), dirs)) { | ||||
| 			if info.Name() == ".git" { | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  Can we check the  Can we check the `.gitea` dir now? | ||||
| 				return filepath.SkipDir | ||||
| 			} else { | ||||
| 				return nil | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if info.Name() == "healthcheck" { | ||||
| 			return nil | ||||
| 		if gitattrExist { | ||||
| 			relPath, err := filepath.Rel(root, path) | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  and can this healthcheck skip be removed now? and can this healthcheck skip be removed now? 
				
					
						周赵嘉程521432910016
						commented  no we can't for now. no we can't for now. 
				
					
						张泊明518370910136
						commented  what about now? what about now? 
				
					
						周赵嘉程521432910016
						commented  what do you mean? for now we still need to copy the healthcheck bin into /w to run for test case. I don't now what's the better solution. what do you mean? for now we still need to copy the healthcheck bin into /w to run for test case. I don't now what's the better solution. 
				
					
						周赵嘉程521432910016
						commented  oh sorry, I didn't see your commit. I will try it soon. oh sorry, I didn't see your commit. I will try it soon. 
				
					
						周赵嘉程521432910016
						commented  it got fixed. it got fixed. | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			ret, matched := matcher.Match(strings.Split(relPath, "/"), nil) | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  this line is too long now, should make it in two lines. this line is too long now, should make it in two lines. | ||||
| 			if matched && ret["text"].IsUnset() { | ||||
| 				return nil | ||||
| 			} | ||||
| 		} | ||||
| 
					
					zzjc123 marked this conversation as resolved
					
						
						
							Outdated
						
					
				 
				
					
						张泊明518370910136
						commented  just just 
```go
			if _, ret := matcher.Match(strings.Split(relPath, "/"), nil); ret {
				return nil
			}
``` | ||||
| 
 | ||||
| 		file, err := os.Open(path) | ||||
|  | @ -79,8 +90,8 @@ func getNonAscii(root string, localList string) ([]string, error) { | |||
| 
 | ||||
| // nonAsciiFiles checks for non-ASCII characters in files within the specified root directory.
 | ||||
| // It prints a message with the paths to files containing non-ASCII characters, if any.
 | ||||
| func NonAsciiFiles(root string, localList string) error { | ||||
| 	nonAscii, err := getNonAscii(root, localList) | ||||
| func NonAsciiFiles(root string) error { | ||||
| 	nonAscii, err := getNonAscii(root) | ||||
| 	if err != nil { | ||||
| 		slog.Error("getting non-ascii", "err", err) | ||||
| 		return fmt.Errorf("error getting non-ascii: %w", err) | ||||
|  |  | |||
|  | @ -5,15 +5,6 @@ import ( | |||
| 	"regexp" | ||||
| ) | ||||
| 
 | ||||
| func inString(str1 string, strList []string) bool { | ||||
| 	for _, str := range strList { | ||||
| 		if str1 == str { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
| 
 | ||||
| // addExt appends the specified extension to each file name in the given fileList.
 | ||||
| // It modifies the original fileList in place.
 | ||||
| func addExt(fileList []string, ext string) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	
typo here
i mean it should be "remove localList" here, and "remove gitWhitelist“ down there