From 052a551c0cedf1e2da8b244f8bd323be1b68bb78 Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sun, 2 Aug 2020 11:31:23 +0200 Subject: [PATCH] Add "hidden" field to packages Also drop residual of IsSet which isn't actually used Related to #26 --- cmd/search.go | 82 +++++++++++++++++++++-------------- pkg/package/package.go | 20 +++------ pkg/solver/solver.go | 6 +-- pkg/spectooling/definition.go | 7 ++- 4 files changed, 65 insertions(+), 50 deletions(-) diff --git a/cmd/search.go b/cmd/search.go index 02b17b80..9bd7b4e4 100644 --- a/cmd/search.go +++ b/cmd/search.go @@ -32,6 +32,7 @@ type PackageResult struct { Category string `json:"category"` Version string `json:"version"` Repository string `json:"repository"` + Hidden bool `json:"hidden"` } type Results struct { @@ -58,6 +59,9 @@ var searchCmd = &cobra.Command{ if len(args) != 1 { Fatal("Wrong number of arguments (expected 1)") } + + hidden, _ := cmd.Flags().GetBool("hidden") + installed := LuetCfg.Viper.GetBool("installed") stype := LuetCfg.Viper.GetString("solver.type") discount := LuetCfg.Viper.GetFloat64("solver.discount") @@ -114,25 +118,31 @@ var searchCmd = &cobra.Command{ } for _, m := range matches { if !revdeps { - Info(fmt.Sprintf(":file_folder:%s", m.Repo.GetName()), fmt.Sprintf(":package:%s", m.Package.HumanReadableString())) - results.Packages = append(results.Packages, - PackageResult{ - Name: m.Package.GetName(), - Version: m.Package.GetVersion(), - Category: m.Package.GetCategory(), - Repository: m.Repo.GetName(), - }) + if !m.Package.IsHidden() || m.Package.IsHidden() && hidden { + Info(fmt.Sprintf(":file_folder:%s", m.Repo.GetName()), fmt.Sprintf(":package:%s", m.Package.HumanReadableString())) + results.Packages = append(results.Packages, + PackageResult{ + Name: m.Package.GetName(), + Version: m.Package.GetVersion(), + Category: m.Package.GetCategory(), + Repository: m.Repo.GetName(), + Hidden: m.Package.IsHidden(), + }) + } } else { visited := make(map[string]interface{}) for _, revdep := range m.Package.ExpandedRevdeps(m.Repo.GetTree().GetDatabase(), visited) { - Info(fmt.Sprintf(":file_folder:%s", m.Repo.GetName()), fmt.Sprintf(":package:%s", revdep.HumanReadableString())) - results.Packages = append(results.Packages, - PackageResult{ - Name: revdep.GetName(), - Version: revdep.GetVersion(), - Category: revdep.GetCategory(), - Repository: m.Repo.GetName(), - }) + if !revdep.IsHidden() || revdep.IsHidden() && hidden { + Info(fmt.Sprintf(":file_folder:%s", m.Repo.GetName()), fmt.Sprintf(":package:%s", revdep.HumanReadableString())) + results.Packages = append(results.Packages, + PackageResult{ + Name: revdep.GetName(), + Version: revdep.GetVersion(), + Category: revdep.GetCategory(), + Repository: m.Repo.GetName(), + Hidden: revdep.IsHidden(), + }) + } } } } @@ -162,26 +172,32 @@ var searchCmd = &cobra.Command{ for _, pack := range iMatches { if !revdeps { - Info(fmt.Sprintf(":package:%s", pack.HumanReadableString())) - results.Packages = append(results.Packages, - PackageResult{ - Name: pack.GetName(), - Version: pack.GetVersion(), - Category: pack.GetCategory(), - Repository: "system", - }) + if !pack.IsHidden() || pack.IsHidden() && hidden { + Info(fmt.Sprintf(":package:%s", pack.HumanReadableString())) + results.Packages = append(results.Packages, + PackageResult{ + Name: pack.GetName(), + Version: pack.GetVersion(), + Category: pack.GetCategory(), + Repository: "system", + Hidden: pack.IsHidden(), + }) + } } else { visited := make(map[string]interface{}) for _, revdep := range pack.ExpandedRevdeps(system.Database, visited) { - Info(fmt.Sprintf(":package:%s", pack.HumanReadableString())) - results.Packages = append(results.Packages, - PackageResult{ - Name: revdep.GetName(), - Version: revdep.GetVersion(), - Category: revdep.GetCategory(), - Repository: "system", - }) + if !revdep.IsHidden() || revdep.IsHidden() && hidden { + Info(fmt.Sprintf(":package:%s", pack.HumanReadableString())) + results.Packages = append(results.Packages, + PackageResult{ + Name: revdep.GetName(), + Version: revdep.GetVersion(), + Category: revdep.GetCategory(), + Repository: "system", + Hidden: revdep.IsHidden(), + }) + } } } } @@ -223,5 +239,7 @@ func init() { searchCmd.Flags().Bool("by-label", false, "Search packages through label") searchCmd.Flags().Bool("by-label-regex", false, "Search packages through label regex") searchCmd.Flags().Bool("revdeps", false, "Search package reverse dependencies") + searchCmd.Flags().Bool("hidden", false, "Include hidden packages") + RootCmd.AddCommand(searchCmd) } diff --git a/pkg/package/package.go b/pkg/package/package.go index df9f9c01..6f47a2f0 100644 --- a/pkg/package/package.go +++ b/pkg/package/package.go @@ -42,8 +42,7 @@ type Package interface { Encode(PackageDatabase) (string, error) BuildFormula(PackageDatabase, PackageDatabase) ([]bf.Formula, error) - IsFlagged(bool) Package - Flagged() bool + GetFingerPrint() string GetPackageName() string Requires([]*DefaultPackage) Package @@ -99,6 +98,7 @@ type Package interface { HasAnnotation(string) bool MatchAnnotation(*regexp.Regexp) bool + IsHidden() bool IsSelector() bool VersionMatchSelector(string, version.Versioner) (bool, error) SelectorMatchVersion(string, version.Versioner) (bool, error) @@ -164,8 +164,8 @@ type DefaultPackage struct { State State `json:"state,omitempty"` PackageRequires []*DefaultPackage `json:"requires"` // Affects YAML field names too. PackageConflicts []*DefaultPackage `json:"conflicts"` // Affects YAML field names too. - IsSet bool `json:"set,omitempty"` // Affects YAML field names too. Provides []*DefaultPackage `json:"provides,omitempty"` // Affects YAML field names too. + Hidden bool `json:"hidden,omitempty"` // Affects YAML field names too. // Annotations are used for core features/options Annotations map[string]string `json:"annotations,omitempty"` // Affects YAML field names too @@ -260,6 +260,10 @@ func (p *DefaultPackage) IsSelector() bool { return strings.ContainsAny(p.GetVersion(), "<>=") } +func (p *DefaultPackage) IsHidden() bool { + return p.Hidden +} + func (p *DefaultPackage) HasLabel(label string) bool { return helpers.MapHasKey(&p.Labels, label) } @@ -316,15 +320,6 @@ func (p *DefaultPackage) Yaml() ([]byte, error) { return y, nil } -func (p *DefaultPackage) IsFlagged(b bool) Package { - p.IsSet = b - return p -} - -func (p *DefaultPackage) Flagged() bool { - return p.IsSet -} - func (p *DefaultPackage) GetName() string { return p.Name } @@ -763,7 +758,6 @@ func (p *DefaultPackage) Explain() { fmt.Println("Name: ", p.GetName()) fmt.Println("Category: ", p.GetCategory()) fmt.Println("Version: ", p.GetVersion()) - fmt.Println("Installed: ", p.IsSet) for _, req := range p.GetRequires() { fmt.Println("\t-> ", req) diff --git a/pkg/solver/solver.go b/pkg/solver/solver.go index f7f6b48e..69699144 100644 --- a/pkg/solver/solver.go +++ b/pkg/solver/solver.go @@ -532,7 +532,7 @@ func (s *Solver) Uninstall(c pkg.Package, checkconflicts, full bool) (pkg.Packag for _, a := range asserts { if a.Value { if !checkconflicts { - res = append(res, a.Package.IsFlagged(false)) + res = append(res, a.Package) continue } @@ -543,7 +543,7 @@ func (s *Solver) Uninstall(c pkg.Package, checkconflicts, full bool) (pkg.Packag // If doesn't conflict with installed we just consider it for removal and look for the next one if !c { - res = append(res, a.Package.IsFlagged(false)) + res = append(res, a.Package) continue } @@ -553,7 +553,7 @@ func (s *Solver) Uninstall(c pkg.Package, checkconflicts, full bool) (pkg.Packag return nil, err } if !c { - res = append(res, a.Package.IsFlagged(false)) + res = append(res, a.Package) } } diff --git a/pkg/spectooling/definition.go b/pkg/spectooling/definition.go index 6a235b80..7f48f0c5 100644 --- a/pkg/spectooling/definition.go +++ b/pkg/spectooling/definition.go @@ -29,7 +29,6 @@ type DefaultPackageSanitized struct { UseFlags []string `json:"use_flags,omitempty" yaml:"use_flags,omitempty"` PackageRequires []*DefaultPackageSanitized `json:"requires,omitempty" yaml:"requires,omitempty"` PackageConflicts []*DefaultPackageSanitized `json:"conflicts,omitempty" yaml:"conflicts,omitempty"` - IsSet bool `json:"set,omitempty" yaml:"set,omitempty"` Provides []*DefaultPackageSanitized `json:"provides,omitempty" yaml:"provides,omitempty"` Annotations map[string]string `json:"annotations,omitempty" yaml:"annotations,omitempty"` @@ -40,6 +39,7 @@ type DefaultPackageSanitized struct { Description string `json:"description,omitempty" yaml:"description,omitempty"` Uri []string `json:"uri,omitempty" yaml:"uri,omitempty"` License string `json:"license,omitempty" yaml:"license,omitempty"` + Hidden bool `json:"hidden,omitempty" yaml:"hidden,omitempty"` Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"` } @@ -50,7 +50,7 @@ func NewDefaultPackageSanitized(p pkg.Package) *DefaultPackageSanitized { Version: p.GetVersion(), Category: p.GetCategory(), UseFlags: p.GetUses(), - IsSet: p.Flagged(), + Hidden: p.IsHidden(), Path: p.GetPath(), Description: p.GetDescription(), Uri: p.GetURI(), @@ -68,6 +68,7 @@ func NewDefaultPackageSanitized(p pkg.Package) *DefaultPackageSanitized { Name: r.Name, Version: r.Version, Category: r.Category, + Hidden: r.IsHidden(), }, ) } @@ -82,6 +83,7 @@ func NewDefaultPackageSanitized(p pkg.Package) *DefaultPackageSanitized { Name: c.Name, Version: c.Version, Category: c.Category, + Hidden: c.IsHidden(), }, ) } @@ -96,6 +98,7 @@ func NewDefaultPackageSanitized(p pkg.Package) *DefaultPackageSanitized { Name: prov.Name, Version: prov.Version, Category: prov.Category, + Hidden: prov.IsHidden(), }, ) }