github.com/turbot/steampipe@v1.7.0-rc.0.0.20240517123944-7cef272d4458/pkg/modinstaller/summary_builder.go (about) 1 package modinstaller 2 3 import ( 4 "fmt" 5 6 "github.com/spf13/viper" 7 "github.com/turbot/steampipe/pkg/constants" 8 "github.com/turbot/steampipe/pkg/steampipeconfig/versionmap" 9 "github.com/turbot/steampipe/pkg/utils" 10 ) 11 12 const ( 13 VerbInstalled = "Installed" 14 VerbUninstalled = "Uninstalled" 15 VerbUpgraded = "Upgraded" 16 VerbDowngraded = "Downgraded" 17 VerbPruned = "Pruned" 18 ) 19 20 var dryRunVerbs = map[string]string{ 21 VerbInstalled: "Would install", 22 VerbUninstalled: "Would uninstall", 23 VerbUpgraded: "Would upgrade", 24 VerbDowngraded: "Would downgrade", 25 VerbPruned: "Would prune", 26 } 27 28 func getVerb(verb string) string { 29 if viper.GetBool(constants.ArgDryRun) { 30 verb = dryRunVerbs[verb] 31 } 32 return verb 33 } 34 35 func BuildInstallSummary(installData *InstallData) string { 36 // for now treat an install as update - we only install deps which are in the mod.sp but missing in the mod folder 37 modDependencyPath := installData.WorkspaceMod.GetInstallCacheKey() 38 installCount, installedTreeString := getInstallationResultString(installData.Installed, modDependencyPath) 39 uninstallCount, uninstalledTreeString := getInstallationResultString(installData.Uninstalled, modDependencyPath) 40 upgradeCount, upgradeTreeString := getInstallationResultString(installData.Upgraded, modDependencyPath) 41 downgradeCount, downgradeTreeString := getInstallationResultString(installData.Downgraded, modDependencyPath) 42 43 var installString, upgradeString, downgradeString, uninstallString string 44 if installCount > 0 { 45 verb := getVerb(VerbInstalled) 46 installString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, installCount, utils.Pluralize("mod", installCount), installedTreeString) 47 } 48 if uninstallCount > 0 { 49 verb := getVerb(VerbUninstalled) 50 uninstallString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, uninstallCount, utils.Pluralize("mod", uninstallCount), uninstalledTreeString) 51 } 52 if upgradeCount > 0 { 53 verb := getVerb(VerbUpgraded) 54 upgradeString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, upgradeCount, utils.Pluralize("mod", upgradeCount), upgradeTreeString) 55 } 56 if downgradeCount > 0 { 57 verb := getVerb(VerbDowngraded) 58 downgradeString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, downgradeCount, utils.Pluralize("mod", downgradeCount), downgradeTreeString) 59 } 60 61 if installCount+uninstallCount+upgradeCount+downgradeCount == 0 { 62 if len(installData.Lock.InstallCache) == 0 { 63 return "No mods are installed" 64 } 65 return "All mods are up to date" 66 } 67 return fmt.Sprintf("%s%s%s%s", installString, upgradeString, downgradeString, uninstallString) 68 } 69 70 func getInstallationResultString(items versionmap.DependencyVersionMap, modDependencyPath string) (int, string) { 71 var res string 72 count := len(items.FlatMap()) 73 if count > 0 { 74 tree := items.GetDependencyTree(modDependencyPath) 75 res = tree.String() 76 } 77 return count, res 78 } 79 80 func BuildUninstallSummary(installData *InstallData) string { 81 // for now treat an install as update - we only install deps which are in the mod.sp but missing in the mod folder 82 uninstallCount := len(installData.Uninstalled.FlatMap()) 83 if uninstallCount == 0 { 84 return "Nothing uninstalled" 85 } 86 uninstalledTree := installData.GetUninstalledTree() 87 88 verb := getVerb(VerbUninstalled) 89 return fmt.Sprintf("\n%s %d %s:\n\n%s", verb, uninstallCount, utils.Pluralize("mod", uninstallCount), uninstalledTree.String()) 90 } 91 92 func BuildPruneSummary(pruned versionmap.VersionListMap) string { 93 pruneCount := len(pruned.FlatMap()) 94 95 verb := getVerb(VerbPruned) 96 return fmt.Sprintf("\n%s %d %s:\n", verb, pruneCount, utils.Pluralize("mod", pruneCount)) 97 }