mirror of https://github.com/maxcnunes/gaper.git
Add support for glob searches on watch and ignore options
This commit is contained in:
parent
6fa6a9110c
commit
853e82c957
|
@ -25,6 +25,15 @@
|
|||
revision = "02e3cf038dcea8290e44424da473dd12be796a8a"
|
||||
version = "v1.0.3"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "github.com/mattn/go-zglob"
|
||||
packages = [
|
||||
".",
|
||||
"fastwalk"
|
||||
]
|
||||
revision = "49693fbb3fe3c3a75fc4e4d6fb1d7cedcbdeb385"
|
||||
|
||||
[[projects]]
|
||||
name = "github.com/urfave/cli"
|
||||
packages = ["."]
|
||||
|
@ -40,6 +49,6 @@
|
|||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "bd09f9274a4112aeb869a026bcf3ab61443289a245d3d353da6623f3327e7b4e"
|
||||
inputs-digest = "01046dcc133438d0c6e244499b12395a2ef02264beec4752652b8c78c571a08e"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
|
|
@ -13,3 +13,7 @@
|
|||
[prune]
|
||||
go-tests = true
|
||||
unused-packages = true
|
||||
|
||||
[[constraint]]
|
||||
branch = "master"
|
||||
name = "github.com/mattn/go-zglob"
|
||||
|
|
|
@ -40,6 +40,13 @@ func (l *Logger) Debug(v ...interface{}) {
|
|||
}
|
||||
}
|
||||
|
||||
// Debugf ...
|
||||
func (l *Logger) Debugf(format string, v ...interface{}) {
|
||||
if l.verbose {
|
||||
l.logDebug.Printf(format, v...)
|
||||
}
|
||||
}
|
||||
|
||||
// Warn ...
|
||||
func (l *Logger) Warn(v ...interface{}) {
|
||||
l.logWarn.Println(v...)
|
||||
|
|
5
main.go
5
main.go
|
@ -162,7 +162,10 @@ func runGaper(cfg *Config) error {
|
|||
return fmt.Errorf("run error: %v", err)
|
||||
}
|
||||
|
||||
watcher := NewWatcher(cfg.PollInterval, cfg.WatchItems, cfg.IgnoreItems, cfg.Extensions)
|
||||
watcher, err := NewWatcher(cfg.PollInterval, cfg.WatchItems, cfg.IgnoreItems, cfg.Extensions)
|
||||
if err != nil {
|
||||
return fmt.Errorf("watcher error: %v", err)
|
||||
}
|
||||
|
||||
go watcher.Watch()
|
||||
for {
|
||||
|
|
39
watcher.go
39
watcher.go
|
@ -2,9 +2,12 @@ package main
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
zglob "github.com/mattn/go-zglob"
|
||||
)
|
||||
|
||||
// Watcher ...
|
||||
|
@ -18,27 +21,37 @@ type Watcher struct {
|
|||
}
|
||||
|
||||
// NewWatcher ...
|
||||
func NewWatcher(pollInterval int, watchItems []string, ignoreItems []string, extensions []string) *Watcher {
|
||||
func NewWatcher(pollInterval int, watchItems []string, ignoreItems []string, extensions []string) (*Watcher, error) {
|
||||
allowedExts := make(map[string]bool)
|
||||
for _, ext := range extensions {
|
||||
allowedExts["."+ext] = true
|
||||
}
|
||||
|
||||
watchMatches, err := resolveGlobMatches(watchItems)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ignoreMatches, err := resolveGlobMatches(ignoreItems)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Watcher{
|
||||
Events: make(chan string),
|
||||
Errors: make(chan error),
|
||||
PollInterval: pollInterval,
|
||||
WatchItems: watchItems,
|
||||
IgnoreItems: ignoreItems,
|
||||
WatchItems: watchMatches,
|
||||
IgnoreItems: ignoreMatches,
|
||||
AllowedExtensions: allowedExts,
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
||||
var startTime = time.Now()
|
||||
var errDetectedChange = errors.New("done")
|
||||
|
||||
// Watch ...
|
||||
func (w *Watcher) Watch() { // nolint: gocyclo
|
||||
func (w *Watcher) Watch() {
|
||||
for {
|
||||
for i := range w.WatchItems {
|
||||
fileChanged, err := w.scanChange(w.WatchItems[i])
|
||||
|
@ -93,3 +106,19 @@ func (w *Watcher) scanChange(watchPath string) (string, error) {
|
|||
|
||||
return fileChanged, nil
|
||||
}
|
||||
|
||||
func resolveGlobMatches(paths []string) ([]string, error) {
|
||||
var result []string
|
||||
|
||||
for _, path := range paths {
|
||||
matches, err := zglob.Glob(path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("couldn't resolve glob path %s: %v", path, err)
|
||||
}
|
||||
|
||||
logger.Debugf("Resolved glob path %s: %v", path, matches)
|
||||
result = append(result, matches...)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue