mirror of
https://github.com/bluszcz/cutego.git
synced 2024-09-29 05:35:16 +03:00
116 lines
2.7 KiB
Go
Executable file
116 lines
2.7 KiB
Go
Executable file
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
// files that must be ignored
|
|
var blacklist = map[string]bool{
|
|
".git": true,
|
|
"android": true,
|
|
"deploy": true,
|
|
"ios": true,
|
|
"ios-simulator": true,
|
|
"node_modules": true,
|
|
"qml": true,
|
|
"rpi1": true,
|
|
"rpi2": true,
|
|
"rpi3": true,
|
|
"sailfish": true,
|
|
"sailfish-emulator": true,
|
|
"vendor": true,
|
|
}
|
|
|
|
// WalkFilterBlacklist filter out blacklisted file
|
|
func WalkFilterBlacklist(root string, f filepath.WalkFunc) filepath.WalkFunc {
|
|
return func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
relPath, relErr := filepath.Rel(root, path)
|
|
if relErr != nil {
|
|
return relErr
|
|
}
|
|
if blacklist[relPath] {
|
|
// as the directory is blacklisted, just ignore everything under it
|
|
if info.IsDir() {
|
|
return filepath.SkipDir
|
|
}
|
|
return nil
|
|
}
|
|
return f(path, info, err)
|
|
}
|
|
}
|
|
|
|
// WalkFilterDirectory only allow directory
|
|
func WalkOnlyDirectory(f filepath.WalkFunc) filepath.WalkFunc {
|
|
return func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if info.IsDir() {
|
|
return f(path, info, err)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WalkOnlyFile is opposite of WalkFilterDirectory, it only allow file
|
|
func WalkOnlyFile(f filepath.WalkFunc) filepath.WalkFunc {
|
|
return func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !info.IsDir() {
|
|
return f(path, info, err)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WalkFilterPrefix only process file that do not have specified prefix
|
|
func WalkFilterPrefix(f filepath.WalkFunc, prefixes ...string) filepath.WalkFunc {
|
|
return func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
name := info.Name()
|
|
for index := range prefixes {
|
|
if strings.HasPrefix(name, prefixes[index]) {
|
|
if info.IsDir() {
|
|
return filepath.SkipDir
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
return f(path, info, err)
|
|
}
|
|
}
|
|
|
|
// WalkOnlyExtension only process file (not directory) that their extension is
|
|
// specified, without the `.` such as `go` or `html`.
|
|
func WalkOnlyExtension(f filepath.WalkFunc, extensions ...string) filepath.WalkFunc {
|
|
compiled := make([]string, len(extensions))
|
|
for index := range extensions {
|
|
compiled[index] = fmt.Sprintf(".%s", extensions[index])
|
|
}
|
|
return func(path string, info os.FileInfo, err error) error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if info.IsDir() {
|
|
return f(path, info, err)
|
|
}
|
|
extension := filepath.Ext(info.Name())
|
|
for index := range compiled {
|
|
if extension == compiled[index] {
|
|
return f(path, info, err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
}
|