Improve readable info functions

This commit is contained in:
2026-01-25 19:55:09 +02:00
parent 9f8a20c671
commit 0a06808303
2 changed files with 58 additions and 53 deletions
+27 -27
View File
@@ -323,8 +323,8 @@ func (entry *BPMDatabaseEntry) GetEntryOptionalDependants() (dependants []string
} }
func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableSize bool) string { func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableSize bool) string {
ret := make([]string, 0) builder := strings.Builder{}
appendArray := func(label string, array []string, sort bool) { builderWriteArray := func(label string, array []string, sort bool) {
if len(array) == 0 { if len(array) == 0 {
return return
} }
@@ -334,52 +334,52 @@ func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableS
slices.Sort(array) slices.Sort(array)
} }
ret = append(ret, label+":") builder.WriteString(label + ":\n")
for _, val := range array { for _, val := range array {
ret = append(ret, " - "+val) builder.WriteString(" - " + val + "\n")
} }
} }
ret = append(ret, "Name: "+entry.Info.Name) builder.WriteString("Name: " + entry.Info.Name + "\n")
ret = append(ret, "Database: "+entry.Database.Name) builder.WriteString("Database: " + entry.Database.Name + "\n")
ret = append(ret, "Description: "+entry.Info.Description) builder.WriteString("Description: " + entry.Info.Description + "\n")
ret = append(ret, "Version: "+entry.Info.GetFullVersion()) builder.WriteString("Version: " + entry.Info.GetFullVersion() + "\n")
if entry.Info.Url != "" { if entry.Info.Url != "" {
ret = append(ret, "URL: "+entry.Info.Url) builder.WriteString("URL: " + entry.Info.Url + "\n")
} }
if entry.Info.License != "" { if entry.Info.License != "" {
ret = append(ret, "License: "+entry.Info.License) builder.WriteString("License: " + entry.Info.License + "\n")
} }
appendArray("Maintainers", entry.Info.Maintainers, false) builderWriteArray("Maintainers", entry.Info.Maintainers, false)
ret = append(ret, "Architecture: "+entry.Info.Arch) builder.WriteString("Architecture: " + entry.Info.Arch + "\n")
if entry.Info.Type == "source" && entry.Info.OutputArch != "" && entry.Info.OutputArch != GetArch() { if entry.Info.Type == "source" && entry.Info.OutputArch != "" && entry.Info.OutputArch != GetArch() {
ret = append(ret, "Output architecture: "+entry.Info.OutputArch) builder.WriteString("Output architecture: " + entry.Info.OutputArch + "\n")
} }
ret = append(ret, "Type: "+entry.Info.Type) builder.WriteString("Type: " + entry.Info.Type + "\n")
appendArray("Dependencies", entry.Info.Depends, true) builderWriteArray("Dependencies", entry.Info.Depends, true)
if entry.Info.Type == "source" { if entry.Info.Type == "source" {
appendArray("Make Dependencies", entry.Info.MakeDepends, true) builderWriteArray("Make Dependencies", entry.Info.MakeDepends, true)
} }
appendArray("Runtime dependencies", entry.Info.RuntimeDepends, true) builderWriteArray("Runtime dependencies", entry.Info.RuntimeDepends, true)
appendArray("Optional dependencies", entry.Info.OptionalDepends, true) builderWriteArray("Optional dependencies", entry.Info.OptionalDepends, true)
dependants := entry.GetEntryDependants() dependants := entry.GetEntryDependants()
if len(dependants) > 0 { if len(dependants) > 0 {
appendArray("Dependant packages", dependants, false) builderWriteArray("Dependant packages", dependants, false)
} }
optionalDependants := entry.GetEntryOptionalDependants() optionalDependants := entry.GetEntryOptionalDependants()
if len(optionalDependants) > 0 { if len(optionalDependants) > 0 {
appendArray("Optionally dependant packages", optionalDependants, false) builderWriteArray("Optionally dependant packages", optionalDependants, false)
} }
appendArray("Conflicting packages", entry.Info.Conflicts, true) builderWriteArray("Conflicting packages", entry.Info.Conflicts, true)
appendArray("Provided packages", entry.Info.Provides, true) builderWriteArray("Provided packages", entry.Info.Provides, true)
appendArray("Replaces packages", entry.Info.Replaces, true) builderWriteArray("Replaces packages", entry.Info.Replaces, true)
if entry.Info.Type == "source" && len(entry.Info.SplitPackages) != 0 { if entry.Info.Type == "source" && len(entry.Info.SplitPackages) != 0 {
splitPkgs := make([]string, len(entry.Info.SplitPackages)) splitPkgs := make([]string, len(entry.Info.SplitPackages))
for i, splitPkgInfo := range entry.Info.SplitPackages { for i, splitPkgInfo := range entry.Info.SplitPackages {
splitPkgs[i] = splitPkgInfo.Name splitPkgs[i] = splitPkgInfo.Name
} }
appendArray("Split Packages", splitPkgs, true) builderWriteArray("Split Packages", splitPkgs, true)
} }
if rootDir != "" && IsPackageInstalled(entry.Info.Name, rootDir) { if rootDir != "" && IsPackageInstalled(entry.Info.Name, rootDir) {
@@ -395,7 +395,7 @@ func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableS
default: default:
installationReasonString = "Unknown" installationReasonString = "Unknown"
} }
ret = append(ret, "Installation Reason: "+installationReasonString) builder.WriteString("Installation Reason: " + installationReasonString + "\n")
} }
if entry.Info.Type == "binary" { if entry.Info.Type == "binary" {
installedSize := entry.InstalledSize installedSize := entry.InstalledSize
@@ -405,7 +405,7 @@ func (entry *BPMDatabaseEntry) CreateReadableInfo(rootDir string, humanReadableS
} else { } else {
installedSizeStr = strconv.FormatInt(installedSize, 10) installedSizeStr = strconv.FormatInt(installedSize, 10)
} }
ret = append(ret, "Installed size: "+installedSizeStr) builder.WriteString("Installed size: " + installedSizeStr + "\n")
} }
return strings.Join(ret, "\n") return strings.TrimSpace(builder.String())
} }
+31 -26
View File
@@ -540,58 +540,63 @@ func ReadPackageInfo(contents string) (*PackageInfo, error) {
} }
func (pkgInfo *PackageInfo) CreateReadableInfo(rootDir string) string { func (pkgInfo *PackageInfo) CreateReadableInfo(rootDir string) string {
ret := make([]string, 0) builder := strings.Builder{}
appendArray := func(label string, array []string) { builderWriteArray := func(label string, array []string, sort bool) {
if len(array) == 0 { if len(array) == 0 {
return return
} }
ret = append(ret, label+":") // Sort array
if sort {
slices.Sort(array)
}
builder.WriteString(label + ":\n")
for _, val := range array { for _, val := range array {
ret = append(ret, " - "+val) builder.WriteString(" - " + val + "\n")
} }
} }
ret = append(ret, "Name: "+pkgInfo.Name) builder.WriteString("Name: " + pkgInfo.Name + "\n")
ret = append(ret, "Description: "+pkgInfo.Description) builder.WriteString("Description: " + pkgInfo.Description + "\n")
ret = append(ret, "Version: "+pkgInfo.GetFullVersion()) builder.WriteString("Version: " + pkgInfo.GetFullVersion() + "\n")
if pkgInfo.Url != "" { if pkgInfo.Url != "" {
ret = append(ret, "URL: "+pkgInfo.Url) builder.WriteString("URL: " + pkgInfo.Url + "\n")
} }
if pkgInfo.License != "" { if pkgInfo.License != "" {
ret = append(ret, "License: "+pkgInfo.License) builder.WriteString("License: " + pkgInfo.License + "\n")
} }
appendArray("Maintainers", pkgInfo.Maintainers) builderWriteArray("Maintainers", pkgInfo.Maintainers, false)
ret = append(ret, "Architecture: "+pkgInfo.Arch) builder.WriteString("Architecture: " + pkgInfo.Arch + "\n")
if pkgInfo.Type == "source" && pkgInfo.OutputArch != "" && pkgInfo.OutputArch != GetArch() { if pkgInfo.Type == "source" && pkgInfo.OutputArch != "" && pkgInfo.OutputArch != GetArch() {
ret = append(ret, "Output architecture: "+pkgInfo.Arch) builder.WriteString("Output architecture: " + pkgInfo.Arch + "\n")
} }
ret = append(ret, "Type: "+pkgInfo.Type) builder.WriteString("Type: " + pkgInfo.Type + "\n")
appendArray("Dependencies", pkgInfo.Depends) builderWriteArray("Dependencies", pkgInfo.Depends, true)
if pkgInfo.Type == "source" { if pkgInfo.Type == "source" {
appendArray("Runtime Dependencies", pkgInfo.RuntimeDepends) builderWriteArray("Runtime Dependencies", pkgInfo.RuntimeDepends, true)
appendArray("Make Dependencies", pkgInfo.MakeDepends) builderWriteArray("Make Dependencies", pkgInfo.MakeDepends, true)
} }
appendArray("Runtime dependencies", pkgInfo.RuntimeDepends) builderWriteArray("Runtime dependencies", pkgInfo.RuntimeDepends, true)
appendArray("Optional dependencies", pkgInfo.OptionalDepends) builderWriteArray("Optional dependencies", pkgInfo.OptionalDepends, true)
dependants := pkgInfo.GetPackageDependants(rootDir) dependants := pkgInfo.GetPackageDependants(rootDir)
if len(dependants) > 0 { if len(dependants) > 0 {
appendArray("Dependant packages", dependants) builderWriteArray("Dependant packages", dependants, true)
} }
optionalDependants := pkgInfo.GetPackageOptionalDependants(rootDir) optionalDependants := pkgInfo.GetPackageOptionalDependants(rootDir)
if len(optionalDependants) > 0 { if len(optionalDependants) > 0 {
appendArray("Optionally dependant packages", optionalDependants) builderWriteArray("Optionally dependant packages", optionalDependants, true)
} }
appendArray("Conflicting packages", pkgInfo.Conflicts) builderWriteArray("Conflicting packages", pkgInfo.Conflicts, true)
appendArray("Provided packages", pkgInfo.Provides) builderWriteArray("Provided packages", pkgInfo.Provides, true)
appendArray("Replaces packages", pkgInfo.Replaces) builderWriteArray("Replaces packages", pkgInfo.Replaces, true)
if pkgInfo.Type == "source" && len(pkgInfo.SplitPackages) != 0 { if pkgInfo.Type == "source" && len(pkgInfo.SplitPackages) != 0 {
splitPkgs := make([]string, len(pkgInfo.SplitPackages)) splitPkgs := make([]string, len(pkgInfo.SplitPackages))
for i, splitPkgInfo := range pkgInfo.SplitPackages { for i, splitPkgInfo := range pkgInfo.SplitPackages {
splitPkgs[i] = splitPkgInfo.Name splitPkgs[i] = splitPkgInfo.Name
} }
appendArray("Split Packages", splitPkgs) builderWriteArray("Split Packages", splitPkgs, true)
} }
if rootDir != "" && IsPackageInstalled(pkgInfo.Name, rootDir) { if rootDir != "" && IsPackageInstalled(pkgInfo.Name, rootDir) {
@@ -607,10 +612,10 @@ func (pkgInfo *PackageInfo) CreateReadableInfo(rootDir string) string {
default: default:
installationReasonString = "Unknown" installationReasonString = "Unknown"
} }
ret = append(ret, "Installation Reason: "+installationReasonString) builder.WriteString("Installation Reason: " + installationReasonString + "\n")
} }
return strings.Join(ret, "\n") return strings.TrimSpace(builder.String())
} }
func extractPackage(bpmpkg *BPMPackage, verbose bool, filename, rootDir string) error { func extractPackage(bpmpkg *BPMPackage, verbose bool, filename, rootDir string) error {