(Feat): Initial Commit

This commit is contained in:
2025-11-16 19:48:50 +00:00
commit a00f70a7fe
17 changed files with 1654 additions and 0 deletions

64
pkg/fileutil/fileutil.go Normal file
View File

@@ -0,0 +1,64 @@
package fileutil
import (
"fmt"
"path/filepath"
"strings"
)
// ShouldInclude determines if a file should be included based on exclude/include patterns
func ShouldInclude(path string, excludePaths, includePaths []string) bool {
// Check exclude patterns first
for _, pattern := range excludePaths {
if matched, _ := filepath.Match(pattern, filepath.Base(path)); matched {
return false
}
// Also check if pattern is in the path
if strings.Contains(path, pattern) {
return false
}
// Handle directory patterns
if strings.HasSuffix(pattern, "/*") {
dirPattern := strings.TrimSuffix(pattern, "/*")
if strings.Contains(path, dirPattern) {
return false
}
}
}
// If include patterns are specified, check them
if len(includePaths) > 0 {
for _, pattern := range includePaths {
if matched, _ := filepath.Match(pattern, filepath.Base(path)); matched {
return true
}
if strings.Contains(path, pattern) {
return true
}
// Handle directory patterns
if strings.HasSuffix(pattern, "/*") {
dirPattern := strings.TrimSuffix(pattern, "/*")
if strings.Contains(path, dirPattern) {
return true
}
}
}
return false
}
return true
}
// FormatBytes converts bytes to human-readable format
func FormatBytes(bytes int64) string {
const unit = 1024
if bytes < unit {
return fmt.Sprintf("%d B", bytes)
}
div, exp := int64(unit), 0
for n := bytes / unit; n >= unit; n /= unit {
div *= unit
exp++
}
return fmt.Sprintf("%.1f %cB", float64(bytes)/float64(div), "KMGTPE"[exp])
}