mirror of
https://github.com/turbot/steampipe.git
synced 2026-02-17 10:00:17 -05:00
98 lines
3.5 KiB
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))
|
|
}
|