瀏覽代碼

fix: skip --assume-installed packages

Jonas Bögle 3 年之前
父節點
當前提交
7dda0fa2f8
共有 2 個文件被更改,包括 17 次插入5 次删除
  1. 2 1
      install.go
  2. 15 4
      pkg/dep/depPool.go

+ 2 - 1
install.go

@@ -69,6 +69,7 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
 	var srcinfos map[string]*gosrc.Srcinfo
 	noDeps := cmdArgs.ExistsDouble("d", "nodeps")
 	noCheck := strings.Contains(config.MFlags, "--nocheck")
+	assumeInstalled := cmdArgs.GetArgs("assume-installed")
 	sysupgradeArg := cmdArgs.ExistsArg("u", "sysupgrade")
 	refreshArg := cmdArgs.ExistsArg("y", "refresh")
 	warnings := query.NewWarnings()
@@ -142,7 +143,7 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
 
 	dp, err := dep.GetPool(requestTargets,
 		warnings, dbExecutor, config.Runtime.AURClient, config.Runtime.Mode,
-		ignoreProviders, settings.NoConfirm, config.Provides, config.ReBuild, config.RequestSplitN, noDeps, noCheck)
+		ignoreProviders, settings.NoConfirm, config.Provides, config.ReBuild, config.RequestSplitN, noDeps, noCheck, assumeInstalled)
 	if err != nil {
 		return err
 	}

+ 15 - 4
pkg/dep/depPool.go

@@ -83,7 +83,7 @@ func makePool(dbExecutor db.Executor, aurClient *aur.Client) *Pool {
 // Includes db/ prefixes and group installs
 func (dp *Pool) ResolveTargets(pkgs []string,
 	mode settings.TargetMode,
-	ignoreProviders, noConfirm, provides bool, rebuild string, splitN int, noDeps, noCheckDeps bool) error {
+	ignoreProviders, noConfirm, provides bool, rebuild string, splitN int, noDeps, noCheckDeps bool, assumeInstalled []string) error {
 	// RPC requests are slow
 	// Combine as many AUR package requests as possible into a single RPC call
 	aurTargets := make(stringset.StringSet)
@@ -98,7 +98,7 @@ func (dp *Pool) ResolveTargets(pkgs []string,
 		// still get skipped even if it's from a different database to
 		// the one specified
 		// this is how pacman behaves
-		if dp.hasPackage(target.DepString()) {
+		if dp.hasPackage(target.DepString()) || isInAssumeInstalled(target.DepString(), assumeInstalled) {
 			continue
 		}
 
@@ -376,11 +376,11 @@ func GetPool(pkgs []string,
 	aurClient *aur.Client,
 	mode settings.TargetMode,
 	ignoreProviders, noConfirm, provides bool,
-	rebuild string, splitN int, noDeps bool, noCheckDeps bool) (*Pool, error) {
+	rebuild string, splitN int, noDeps bool, noCheckDeps bool, assumeInstalled []string) (*Pool, error) {
 	dp := makePool(dbExecutor, aurClient)
 
 	dp.Warnings = warnings
-	err := dp.ResolveTargets(pkgs, mode, ignoreProviders, noConfirm, provides, rebuild, splitN, noDeps, noCheckDeps)
+	err := dp.ResolveTargets(pkgs, mode, ignoreProviders, noConfirm, provides, rebuild, splitN, noDeps, noCheckDeps, assumeInstalled)
 
 	return dp, err
 }
@@ -500,6 +500,17 @@ func (dp *Pool) hasPackage(name string) bool {
 	return false
 }
 
+func isInAssumeInstalled(name string, assumeInstalled []string) bool {
+	for _, pkgAndVersion := range assumeInstalled {
+		parts := strings.SplitN(pkgAndVersion, "=", 2)
+		if parts[0] == name {
+			return true
+		}
+	}
+
+	return false
+}
+
 func providerMenu(dep string, providers providers, noConfirm bool) *query.Pkg {
 	size := providers.Len()