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  }