mirror of
https://github.com/wahyd4/node-prune.git
synced 2026-08-10 21:56:28 +10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1159d4cac8 | ||
|
|
92b4625797 | ||
|
|
330b83e1fc |
+7
-1
@@ -1,5 +1,11 @@
|
||||
|
||||
v1.2.0 / 2020-05-12
|
||||
===================
|
||||
|
||||
* add `--include` and `--exclude` flags
|
||||
* remove goreleaser.yml
|
||||
|
||||
v1.1.0 / 2020-02-10
|
||||
===================
|
||||
|
||||
* move `./cmd/node-prune/main.go` to root
|
||||
* move `./cmd/node-prune/main.go` to root
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
build:
|
||||
main: cmd/node-prune/main.go
|
||||
binary: node-prune
|
||||
goos:
|
||||
- darwin
|
||||
- linux
|
||||
- windows
|
||||
- freebsd
|
||||
- netbsd
|
||||
- openbsd
|
||||
goarch:
|
||||
- amd64
|
||||
- 386
|
||||
changelog:
|
||||
sort: asc
|
||||
filters:
|
||||
exclude:
|
||||
- '^docs:'
|
||||
- '^refactor'
|
||||
+47
-13
@@ -128,13 +128,15 @@ type Stats struct {
|
||||
|
||||
// Pruner is a module pruner.
|
||||
type Pruner struct {
|
||||
dir string
|
||||
log log.Interface
|
||||
dirs map[string]struct{}
|
||||
exts map[string]struct{}
|
||||
files map[string]struct{}
|
||||
ch chan func()
|
||||
wg sync.WaitGroup
|
||||
dir string
|
||||
log log.Interface
|
||||
dirs map[string]struct{}
|
||||
exts map[string]struct{}
|
||||
excepts []string
|
||||
globs []string
|
||||
files map[string]struct{}
|
||||
ch chan func()
|
||||
wg sync.WaitGroup
|
||||
}
|
||||
|
||||
// Option function.
|
||||
@@ -143,12 +145,14 @@ type Option func(*Pruner)
|
||||
// New with the given options.
|
||||
func New(options ...Option) *Pruner {
|
||||
v := &Pruner{
|
||||
dir: "node_modules",
|
||||
log: log.Log,
|
||||
exts: toMap(DefaultExtensions),
|
||||
dirs: toMap(DefaultDirectories),
|
||||
files: toMap(DefaultFiles),
|
||||
ch: make(chan func()),
|
||||
dir: "node_modules",
|
||||
log: log.Log,
|
||||
exts: toMap(DefaultExtensions),
|
||||
excepts: []string{},
|
||||
globs: []string{},
|
||||
dirs: toMap(DefaultDirectories),
|
||||
files: toMap(DefaultFiles),
|
||||
ch: make(chan func()),
|
||||
}
|
||||
|
||||
for _, o := range options {
|
||||
@@ -165,6 +169,20 @@ func WithDir(s string) Option {
|
||||
}
|
||||
}
|
||||
|
||||
// WithGlobs option.
|
||||
func WithGlobs(s []string) Option {
|
||||
return func(v *Pruner) {
|
||||
v.globs = s
|
||||
}
|
||||
}
|
||||
|
||||
// WithExceptions option.
|
||||
func WithExceptions(s []string) Option {
|
||||
return func(v *Pruner) {
|
||||
v.excepts = s
|
||||
}
|
||||
}
|
||||
|
||||
// WithExtensions option.
|
||||
func WithExtensions(s []string) Option {
|
||||
return func(v *Pruner) {
|
||||
@@ -248,6 +266,22 @@ func (p *Pruner) Prune() (*Stats, error) {
|
||||
|
||||
// prune returns true if the file or dir should be pruned.
|
||||
func (p *Pruner) prune(path string, info os.FileInfo) bool {
|
||||
// exceptions
|
||||
for _, glob := range p.excepts {
|
||||
matched, _ := filepath.Match(glob, info.Name())
|
||||
if matched {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
// globs
|
||||
for _, glob := range p.globs {
|
||||
matched, _ := filepath.Match(glob, info.Name())
|
||||
if matched {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// directories
|
||||
if info.IsDir() {
|
||||
_, ok := p.dirs[info.Name()]
|
||||
|
||||
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/apex/log"
|
||||
@@ -17,8 +18,27 @@ func init() {
|
||||
log.SetLevel(log.WarnLevel)
|
||||
}
|
||||
|
||||
type arrayFlags []string
|
||||
|
||||
func (i *arrayFlags) String() string {
|
||||
return strings.Join(*i, ", ")
|
||||
}
|
||||
|
||||
func (i *arrayFlags) Set(value string) error {
|
||||
*i = append(*i, value)
|
||||
return nil
|
||||
}
|
||||
|
||||
// Globs of files that should not be pruned
|
||||
var exclusionGlobs arrayFlags
|
||||
|
||||
// Globs of files that should always be pruned in addition to the defaults
|
||||
var inclusionGlobs arrayFlags
|
||||
|
||||
func main() {
|
||||
debug := flag.Bool("verbose", false, "Verbose log output.")
|
||||
flag.Var(&exclusionGlobs, "exclude", "Glob of files that should not be pruned. Can be specified multiple times.")
|
||||
flag.Var(&inclusionGlobs, "include", "Globs of files that should always be pruned in addition to the defaults. Can be specified multiple times.")
|
||||
flag.Parse()
|
||||
dir := flag.Arg(0)
|
||||
|
||||
@@ -34,6 +54,14 @@ func main() {
|
||||
options = append(options, prune.WithDir(dir))
|
||||
}
|
||||
|
||||
if len(exclusionGlobs) > 0 {
|
||||
options = append(options, prune.WithExceptions(exclusionGlobs))
|
||||
}
|
||||
|
||||
if len(inclusionGlobs) > 0 {
|
||||
options = append(options, prune.WithGlobs(inclusionGlobs))
|
||||
}
|
||||
|
||||
p := prune.New(options...)
|
||||
|
||||
stats, err := p.Prune()
|
||||
|
||||
Reference in New Issue
Block a user