github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/modinstaller/mod_installer_prune.go (about) 1 package modinstaller 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/turbot/steampipe/pkg/steampipeconfig/modconfig" 8 "github.com/turbot/steampipe/pkg/steampipeconfig/versionmap" 9 ) 10 11 func (i *ModInstaller) Prune() (versionmap.VersionListMap, error) { 12 unusedMods := i.installData.Lock.GetUnreferencedMods() 13 // now delete any mod folders which are not in the lock file 14 for name, versions := range unusedMods { 15 for _, version := range versions { 16 depPath := i.getDependencyDestPath(modconfig.BuildModDependencyPath(name, version)) 17 if err := i.deleteDependencyItem(depPath); err != nil { 18 return nil, err 19 } 20 } 21 } 22 23 return unusedMods, nil 24 } 25 26 func (i *ModInstaller) deleteDependencyItem(depPath string) error { 27 if err := os.RemoveAll(depPath); err != nil { 28 return err 29 } 30 return i.deleteEmptyFolderTree(filepath.Dir(depPath)) 31 32 } 33 34 func (i *ModInstaller) deleteEmptyFolderTree(folderPath string) error { 35 // if the parent folder is empty, delete it 36 err := os.Remove(folderPath) 37 if err == nil { 38 parent := filepath.Dir(folderPath) 39 return i.deleteEmptyFolderTree(parent) 40 } 41 return nil 42 }