Files
steampipe/pkg/modinstaller/summary_builder.go

98 lines
3.5 KiB
Go

package modinstaller
import (
"fmt"
"github.com/spf13/viper"
"github.com/turbot/steampipe/pkg/constants"
"github.com/turbot/steampipe/pkg/steampipeconfig/versionmap"
"github.com/turbot/steampipe/pkg/utils"
)
const (
VerbInstalled = "Installed"
VerbUninstalled = "Uninstalled"
VerbUpgraded = "Upgraded"
VerbDowngraded = "Downgraded"
VerbPruned = "Pruned"
)
var dryRunVerbs = map[string]string{
VerbInstalled: "Would install",
VerbUninstalled: "Would uninstall",
VerbUpgraded: "Would upgrade",
VerbDowngraded: "Would downgrade",
VerbPruned: "Would prune",
}
func getVerb(verb string) string {
if viper.GetBool(constants.ArgDryRun) {
verb = dryRunVerbs[verb]
}
return verb
}
func BuildInstallSummary(installData *InstallData) string {
// for now treat an install as update - we only install deps which are in the mod.sp but missing in the mod folder
modDependencyPath := installData.WorkspaceMod.GetInstallCacheKey()
installCount, installedTreeString := getInstallationResultString(installData.Installed, modDependencyPath)
uninstallCount, uninstalledTreeString := getInstallationResultString(installData.Uninstalled, modDependencyPath)
upgradeCount, upgradeTreeString := getInstallationResultString(installData.Upgraded, modDependencyPath)
downgradeCount, downgradeTreeString := getInstallationResultString(installData.Downgraded, modDependencyPath)
var installString, upgradeString, downgradeString, uninstallString string
if installCount > 0 {
verb := getVerb(VerbInstalled)
installString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, installCount, utils.Pluralize("mod", installCount), installedTreeString)
}
if uninstallCount > 0 {
verb := getVerb(VerbUninstalled)
uninstallString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, uninstallCount, utils.Pluralize("mod", uninstallCount), uninstalledTreeString)
}
if upgradeCount > 0 {
verb := getVerb(VerbUpgraded)
upgradeString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, upgradeCount, utils.Pluralize("mod", upgradeCount), upgradeTreeString)
}
if downgradeCount > 0 {
verb := getVerb(VerbDowngraded)
downgradeString = fmt.Sprintf("\n%s %d %s:\n\n%s\n", verb, downgradeCount, utils.Pluralize("mod", downgradeCount), downgradeTreeString)
}
if installCount+uninstallCount+upgradeCount+downgradeCount == 0 {
if len(installData.Lock.InstallCache) == 0 {
return "No mods are installed"
}
return "All mods are up to date"
}
return fmt.Sprintf("%s%s%s%s", installString, upgradeString, downgradeString, uninstallString)
}
func getInstallationResultString(items versionmap.DependencyVersionMap, modDependencyPath string) (int, string) {
var res string
count := len(items.FlatMap())
if count > 0 {
tree := items.GetDependencyTree(modDependencyPath)
res = tree.String()
}
return count, res
}
func BuildUninstallSummary(installData *InstallData) string {
// for now treat an install as update - we only install deps which are in the mod.sp but missing in the mod folder
uninstallCount := len(installData.Uninstalled.FlatMap())
if uninstallCount == 0 {
return "Nothing uninstalled"
}
uninstalledTree := installData.GetUninstalledTree()
verb := getVerb(VerbUninstalled)
return fmt.Sprintf("\n%s %d %s:\n\n%s", verb, uninstallCount, utils.Pluralize("mod", uninstallCount), uninstalledTree.String())
}
func BuildPruneSummary(pruned versionmap.VersionListMap) string {
pruneCount := len(pruned.FlatMap())
verb := getVerb(VerbPruned)
return fmt.Sprintf("\n%s %d %s:\n", verb, pruneCount, utils.Pluralize("mod", pruneCount))
}