浏览代码

feat(install): implement support for -dd

jguer 4 年之前
父节点
当前提交
d7424b1b28
共有 2 个文件被更改,包括 22 次插入12 次删除
  1. 1 1
      install.go
  2. 21 11
      pkg/dep/depPool.go

+ 1 - 1
install.go

@@ -136,7 +136,7 @@ func install(cmdArgs *settings.Arguments, dbExecutor db.Executor, ignoreProvider
 
 	dp, err := dep.GetPool(requestTargets,
 		warnings, dbExecutor, config.Runtime.Mode,
-		ignoreProviders, settings.NoConfirm, config.Provides, config.ReBuild, config.RequestSplitN)
+		ignoreProviders, settings.NoConfirm, config.Provides, config.ReBuild, config.RequestSplitN, noDeps)
 	if err != nil {
 		return err
 	}

+ 21 - 11
pkg/dep/depPool.go

@@ -78,7 +78,7 @@ func makePool(dbExecutor db.Executor) *Pool {
 // Includes db/ prefixes and group installs
 func (dp *Pool) ResolveTargets(pkgs []string,
 	mode settings.TargetMode,
-	ignoreProviders, noConfirm, provides bool, rebuild string, splitN int) error {
+	ignoreProviders, noConfirm, provides bool, rebuild string, splitN int, noDeps bool) error {
 	// RPC requests are slow
 	// Combine as many AUR package requests as possible into a single RPC
 	// call
@@ -118,7 +118,7 @@ func (dp *Pool) ResolveTargets(pkgs []string,
 		if foundPkg != nil {
 			dp.Targets = append(dp.Targets, target)
 			dp.Explicit.Set(foundPkg.Name())
-			dp.ResolveRepoDependency(foundPkg)
+			dp.ResolveRepoDependency(foundPkg, noDeps)
 			continue
 		} else {
 			// check for groups
@@ -147,7 +147,7 @@ func (dp *Pool) ResolveTargets(pkgs []string,
 	}
 
 	if len(aurTargets) > 0 && (mode == settings.ModeAny || mode == settings.ModeAUR) {
-		return dp.resolveAURPackages(aurTargets, true, ignoreProviders, noConfirm, provides, rebuild, splitN)
+		return dp.resolveAURPackages(aurTargets, true, ignoreProviders, noConfirm, provides, rebuild, splitN, noDeps)
 	}
 
 	return nil
@@ -260,7 +260,7 @@ func (dp *Pool) cacheAURPackages(_pkgs stringset.StringSet, provides bool, split
 
 func (dp *Pool) resolveAURPackages(pkgs stringset.StringSet,
 	explicit, ignoreProviders, noConfirm, provides bool,
-	rebuild string, splitN int) error {
+	rebuild string, splitN int, noDeps bool) error {
 	newPackages := make(stringset.StringSet)
 	newAURPackages := make(stringset.StringSet)
 
@@ -289,7 +289,14 @@ func (dp *Pool) resolveAURPackages(pkgs stringset.StringSet,
 		}
 		dp.Aur[pkg.Name] = pkg
 
-		for _, deps := range [3][]string{pkg.Depends, pkg.MakeDepends, pkg.CheckDepends} {
+		var combinedDepList [][]string
+		if noDeps {
+			combinedDepList = [][]string{pkg.MakeDepends, pkg.CheckDepends}
+		} else {
+			combinedDepList = [][]string{pkg.Depends, pkg.MakeDepends, pkg.CheckDepends}
+		}
+
+		for _, deps := range combinedDepList {
 			for _, dep := range deps {
 				newPackages.Set(dep)
 			}
@@ -311,7 +318,7 @@ func (dp *Pool) resolveAURPackages(pkgs stringset.StringSet,
 		}
 
 		if repoPkg != nil {
-			dp.ResolveRepoDependency(repoPkg)
+			dp.ResolveRepoDependency(repoPkg, false)
 			continue
 		}
 
@@ -320,12 +327,15 @@ func (dp *Pool) resolveAURPackages(pkgs stringset.StringSet,
 		newAURPackages.Set(dep)
 	}
 
-	err = dp.resolveAURPackages(newAURPackages, false, ignoreProviders, noConfirm, provides, rebuild, splitN)
+	err = dp.resolveAURPackages(newAURPackages, false, ignoreProviders, noConfirm, provides, rebuild, splitN, noDeps)
 	return err
 }
 
-func (dp *Pool) ResolveRepoDependency(pkg db.IPackage) {
+func (dp *Pool) ResolveRepoDependency(pkg db.IPackage, noDeps bool) {
 	dp.Repo[pkg.Name()] = pkg
+	if noDeps {
+		return
+	}
 
 	for _, dep := range dp.AlpmExecutor.PackageDepends(pkg) {
 		if dp.hasSatisfier(dep.String()) {
@@ -340,7 +350,7 @@ func (dp *Pool) ResolveRepoDependency(pkg db.IPackage) {
 		// has satisfier in repo: fetch it
 		repoPkg := dp.AlpmExecutor.SyncSatisfier(dep.String())
 		if repoPkg != nil {
-			dp.ResolveRepoDependency(repoPkg)
+			dp.ResolveRepoDependency(repoPkg, noDeps)
 		}
 	}
 }
@@ -350,11 +360,11 @@ func GetPool(pkgs []string,
 	dbExecutor db.Executor,
 	mode settings.TargetMode,
 	ignoreProviders, noConfirm, provides bool,
-	rebuild string, splitN int) (*Pool, error) {
+	rebuild string, splitN int, noDeps bool) (*Pool, error) {
 	dp := makePool(dbExecutor)
 
 	dp.Warnings = warnings
-	err := dp.ResolveTargets(pkgs, mode, ignoreProviders, noConfirm, provides, rebuild, splitN)
+	err := dp.ResolveTargets(pkgs, mode, ignoreProviders, noConfirm, provides, rebuild, splitN, noDeps)
 
 	return dp, err
 }