feat: dry run for install, update, clean (#9)
* feat: implement dry run for config install, update * chore: better wording * feat: dry run for clean unused dirs Co-authored-by: Tran Hau <ngtranhau@gmail.com>main
parent
d655736596
commit
cd085a4b54
|
@ -1,5 +1,7 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
type configDemo struct {
|
type configDemo struct {
|
||||||
configApps
|
configApps
|
||||||
}
|
}
|
||||||
|
@ -7,13 +9,34 @@ type configDemo struct {
|
||||||
var _ Config = (*configDemo)(nil)
|
var _ Config = (*configDemo)(nil)
|
||||||
|
|
||||||
func (cd *configDemo) Install() error {
|
func (cd *configDemo) Install() error {
|
||||||
|
for _, app := range cd.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
fmt.Printf("Replace %s -> %s\n", p.Internal, p.External)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cd *configDemo) Update() error {
|
func (cd *configDemo) Update() error {
|
||||||
|
for _, app := range cd.Apps {
|
||||||
|
for _, p := range app.Paths {
|
||||||
|
fmt.Printf("Replace %s -> %s\n", p.External, p.Internal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cd *configDemo) Clean() error {
|
func (cd *configDemo) Clean() error {
|
||||||
|
unusedDirs, err := getUnusedDirs(cd.Apps)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for dir := range unusedDirs {
|
||||||
|
fmt.Printf("Remove %s\n", dir)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,12 +63,12 @@ func LoadConfig(path string) (*config, *configDemo, error) {
|
||||||
return &cfg, &cfgDemo, nil
|
return &cfg, &cfgDemo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install replace src internal dst external
|
// Install internal -> external
|
||||||
func (c *config) Install() error {
|
func (c *config) Install() error {
|
||||||
for _, app := range c.Apps {
|
for _, app := range c.Apps {
|
||||||
for _, path := range app.Paths {
|
for _, p := range app.Paths {
|
||||||
if err := copy.Replace(path.Internal, path.External); err != nil {
|
if err := copy.Replace(p.Internal, p.External); err != nil {
|
||||||
return fmt.Errorf("failed to replace src %s dst %s: %w", path.Internal, path.External, err)
|
return fmt.Errorf("failed to replace %s -> %s: %w", p.Internal, p.External, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -76,12 +76,12 @@ func (c *config) Install() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update replace src external dst internal
|
// Update external -> internal
|
||||||
func (c *config) Update() error {
|
func (c *config) Update() error {
|
||||||
for _, app := range c.Apps {
|
for _, app := range c.Apps {
|
||||||
for _, path := range app.Paths {
|
for _, p := range app.Paths {
|
||||||
if err := copy.Replace(path.External, path.Internal); err != nil {
|
if err := copy.Replace(p.External, p.Internal); err != nil {
|
||||||
return fmt.Errorf("failed to replace src %s dst %s: %w", path.External, path.Internal, err)
|
return fmt.Errorf("failed to replace %s -> %s: %w", p.External, p.Internal, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,25 +91,9 @@ func (c *config) Update() error {
|
||||||
|
|
||||||
// Clean remove unused config inside config dir
|
// Clean remove unused config inside config dir
|
||||||
func (c *config) Clean() error {
|
func (c *config) Clean() error {
|
||||||
files, err := os.ReadDir(configDirPath)
|
unusedDirs, err := getUnusedDirs(c.Apps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to read dir %s: %w", configDirPath, err)
|
return err
|
||||||
}
|
|
||||||
|
|
||||||
// Get all dirs inside config dir
|
|
||||||
unusedDirs := make(map[string]struct{})
|
|
||||||
for _, file := range files {
|
|
||||||
// Ignore config file
|
|
||||||
if file.Name() == configFile {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
unusedDirs[file.Name()] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Removed used dirs
|
|
||||||
for name := range c.Apps {
|
|
||||||
delete(unusedDirs, name)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete ununsed dirs to save some space
|
// Delete ununsed dirs to save some space
|
||||||
|
@ -126,3 +110,28 @@ func (c *config) Clean() error {
|
||||||
func getConfigPath(path string) string {
|
func getConfigPath(path string) string {
|
||||||
return filepath.Join(path, configDirPath, configFile)
|
return filepath.Join(path, configDirPath, configFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getUnusedDirs(apps map[string]App) (map[string]struct{}, error) {
|
||||||
|
files, err := os.ReadDir(configDirPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to read dir %s: %w", configDirPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all dirs inside config dir
|
||||||
|
unusedDirs := make(map[string]struct{})
|
||||||
|
for _, file := range files {
|
||||||
|
// Ignore config file
|
||||||
|
if file.Name() == configFile {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
unusedDirs[file.Name()] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removed used dirs
|
||||||
|
for name := range apps {
|
||||||
|
delete(unusedDirs, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return unusedDirs, nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue