Browse Source

style(filter): make filtering names more relevant

jguer 4 years ago
parent
commit
8074179112
6 changed files with 45 additions and 14 deletions
  1. 1 1
      clean.go
  2. 2 2
      install.go
  3. 38 7
      pkg/query/filter.go
  4. 2 2
      print.go
  5. 1 1
      upgrade.go
  6. 1 1
      vcs.go

+ 1 - 1
clean.go

@@ -121,7 +121,7 @@ func cleanAUR(keepInstalled, keepCurrent, removeAll bool, alpmHandle *alpm.Handl
 	installedBases := make(stringset.StringSet)
 	inAURBases := make(stringset.StringSet)
 
-	_, remotePackages, _, _, err := query.FilterPackages(alpmHandle)
+	remotePackages, _, err := query.GetRemotePackages(alpmHandle)
 	if err != nil {
 		return err
 	}

+ 2 - 2
install.go

@@ -95,7 +95,7 @@ func install(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, ignoreProvide
 	}
 	config.Runtime.AlpmHandle = alpmHandle
 
-	_, _, localNames, remoteNames, err := query.FilterPackages(alpmHandle)
+	localNames, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
 	if err != nil {
 		return err
 	}
@@ -964,7 +964,7 @@ func buildInstallPkgbuilds(
 	config.NoConfirm = true
 
 	//remotenames: names of all non repo packages on the system
-	_, _, localNames, remoteNames, err := query.FilterPackages(alpmHandle)
+	localNames, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
 	if err != nil {
 		return err
 	}

+ 38 - 7
pkg/query/filter.go

@@ -8,10 +8,43 @@ import (
 	"github.com/Jguer/yay/v10/pkg/text"
 )
 
-// FilterPackages filters packages based on source and type from local repository.
-func FilterPackages(alpmHandle *alpm.Handle) (
-	local, remote []alpm.Package,
-	localNames, remoteNames []string,
+// GetPackageNamesBySource returns package names with and without correspondence in SyncDBS respectively
+func GetPackageNamesBySource(alpmHandle *alpm.Handle) (local, remote []string, err error) {
+	localDB, err := alpmHandle.LocalDB()
+	if err != nil {
+		return nil, nil, err
+	}
+	dbList, err := alpmHandle.SyncDBs()
+	if err != nil {
+		return nil, nil, err
+	}
+
+	err = localDB.PkgCache().ForEach(func(k alpm.Package) error {
+		found := false
+		// For each DB search for our secret package.
+		_ = dbList.ForEach(func(d alpm.DB) error {
+			if found {
+				return nil
+			}
+
+			if d.Pkg(k.Name()) != nil {
+				found = true
+				local = append(local, k.Name())
+			}
+			return nil
+		})
+		if !found {
+			remote = append(remote, k.Name())
+		}
+		return nil
+	})
+	return local, remote, err
+}
+
+// GetRemotePackages returns packages with no correspondence in SyncDBS.
+func GetRemotePackages(alpmHandle *alpm.Handle) (
+	remote []alpm.Package,
+	remoteNames []string,
 	err error) {
 	localDB, err := alpmHandle.LocalDB()
 	if err != nil {
@@ -32,8 +65,6 @@ func FilterPackages(alpmHandle *alpm.Handle) (
 
 			if d.Pkg(k.Name()) != nil {
 				found = true
-				local = append(local, k)
-				localNames = append(localNames, k.Name())
 			}
 			return nil
 		})
@@ -46,7 +77,7 @@ func FilterPackages(alpmHandle *alpm.Handle) (
 	}
 
 	err = localDB.PkgCache().ForEach(f)
-	return local, remote, localNames, remoteNames, err
+	return remote, remoteNames, err
 }
 
 func RemoveInvalidTargets(targets []string, mode settings.TargetMode) []string {

+ 2 - 2
print.go

@@ -204,7 +204,7 @@ func localStatistics(alpmHandle *alpm.Handle) error {
 		return err
 	}
 
-	_, _, _, remoteNames, err := query.FilterPackages(alpmHandle)
+	_, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
 	if err != nil {
 		return err
 	}
@@ -246,7 +246,7 @@ func printUpdateList(cmdArgs *settings.Arguments, alpmHandle *alpm.Handle, enabl
 	warnings := query.NewWarnings()
 	old := os.Stdout // keep backup of the real stdout
 	os.Stdout = nil
-	_, _, localNames, remoteNames, err := query.FilterPackages(alpmHandle)
+	localNames, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
 	if err != nil {
 		return err
 	}

+ 1 - 1
upgrade.go

@@ -120,7 +120,7 @@ func getVersionDiff(oldVersion, newVersion string) (left, right string) {
 
 // upList returns lists of packages to upgrade from each source.
 func upList(warnings *query.AURWarnings, alpmHandle *alpm.Handle, enableDowngrade bool) (aurUp, repoUp upSlice, err error) {
-	_, remote, _, remoteNames, err := query.FilterPackages(alpmHandle)
+	remote, remoteNames, err := query.GetRemotePackages(alpmHandle)
 	if err != nil {
 		return nil, nil, err
 	}

+ 1 - 1
vcs.go

@@ -36,7 +36,7 @@ func createDevelDB(vcsFilePath string, alpmHandle *alpm.Handle) error {
 	var mux sync.Mutex
 	var wg sync.WaitGroup
 
-	_, _, _, remoteNames, err := query.FilterPackages(alpmHandle)
+	_, remoteNames, err := query.GetPackageNamesBySource(alpmHandle)
 	if err != nil {
 		return err
 	}