mirror of
https://github.com/wahyd4/node-prune.git
synced 2026-08-09 05:06:18 +10:00
refactor into pkg
This commit is contained in:
+3
-50
@@ -2,15 +2,13 @@ package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/apex/log/handlers/text"
|
||||
"github.com/dustin/go-humanize"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/tj/node-prune"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@@ -32,7 +30,7 @@ func main() {
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
|
||||
stats, err := prune(dir)
|
||||
stats, err := prune.Prune(dir)
|
||||
if err != nil {
|
||||
log.Fatalf("error: %s", err)
|
||||
}
|
||||
@@ -44,48 +42,3 @@ func main() {
|
||||
"duration": time.Since(start).Round(time.Millisecond).String(),
|
||||
}).Info("complete")
|
||||
}
|
||||
|
||||
// Stats of the prune.
|
||||
type Stats struct {
|
||||
FilesTotal int64
|
||||
FilesRemoved int64
|
||||
SizeRemoved int64
|
||||
}
|
||||
|
||||
// prune files in dir.
|
||||
func prune(dir string) (*Stats, error) {
|
||||
var stats Stats
|
||||
|
||||
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if info.IsDir() {
|
||||
return nil
|
||||
}
|
||||
|
||||
atomic.AddInt64(&stats.FilesTotal, 1)
|
||||
|
||||
if !prunable(path, info) {
|
||||
return nil
|
||||
}
|
||||
|
||||
log.WithField("path", path).Debug("prune")
|
||||
atomic.AddInt64(&stats.FilesRemoved, 1)
|
||||
atomic.AddInt64(&stats.SizeRemoved, info.Size())
|
||||
if err := os.Remove(path); err != nil {
|
||||
return errors.Wrap(err, "removing")
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return &stats, err
|
||||
}
|
||||
|
||||
// prunable returns true if the file should be pruned.
|
||||
func prunable(path string, info os.FileInfo) bool {
|
||||
ext := filepath.Ext(path)
|
||||
return ext == ".ts" || ext == ".md"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
// Package prune provides node_modules pruning of unnecessary files.
|
||||
package prune
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync/atomic"
|
||||
|
||||
"github.com/apex/log"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// Stats for a prune.
|
||||
type Stats struct {
|
||||
FilesTotal int64
|
||||
FilesRemoved int64
|
||||
SizeRemoved int64
|
||||
}
|
||||
|
||||
// Pruner is a module pruner.
|
||||
type Pruner struct {
|
||||
Dir string
|
||||
Log log.Interface
|
||||
}
|
||||
|
||||
// Prune dir of unnecessary files.
|
||||
func Prune(dir string) (*Stats, error) {
|
||||
return Pruner{dir, log.Log}.Prune()
|
||||
}
|
||||
|
||||
// Prune performs the pruning.
|
||||
func (p Pruner) Prune() (*Stats, error) {
|
||||
var stats Stats
|
||||
|
||||
err := filepath.Walk(p.Dir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if info.IsDir() {
|
||||
return nil
|
||||
}
|
||||
|
||||
atomic.AddInt64(&stats.FilesTotal, 1)
|
||||
|
||||
if !prunable(path, info) {
|
||||
return nil
|
||||
}
|
||||
|
||||
p.Log.WithField("path", path).Debug("prune")
|
||||
atomic.AddInt64(&stats.FilesRemoved, 1)
|
||||
atomic.AddInt64(&stats.SizeRemoved, info.Size())
|
||||
|
||||
if err := os.Remove(path); err != nil {
|
||||
return errors.Wrap(err, "removing")
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
|
||||
return &stats, err
|
||||
}
|
||||
|
||||
// prunable returns true if the file should be pruned.
|
||||
func prunable(path string, info os.FileInfo) bool {
|
||||
ext := filepath.Ext(path)
|
||||
return ext == ".ts" || ext == ".md"
|
||||
}
|
||||
Reference in New Issue
Block a user