diff options
author | kitsunyan | 2018-05-13 00:22:28 +0000 |
---|---|---|
committer | kitsunyan | 2018-05-13 00:22:28 +0000 |
commit | bfabe37c987c2ff1718ea06bffce04dde9316efc (patch) | |
tree | d1d6c67675e80d14c4d4f53fc02b5bad2a90358c /src | |
parent | 66508034ce18a0d0e0f569c430a62e22eb311bb2 (diff) |
Skip removed packages during upgrade
A depends on B before upgrade, A depends on C after upgrade.
C conflicts with B, which was removed from official repositories.
In this case, remove B from targets list.
Diffstat (limited to 'src')
-rw-r--r-- | src/feature/syncinstall.nim | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/feature/syncinstall.nim b/src/feature/syncinstall.nim index 45613f1..a686be4 100644 --- a/src/feature/syncinstall.nim +++ b/src/feature/syncinstall.nim @@ -764,8 +764,22 @@ proc handleInstall(args: seq[Argument], config: Config, upgradeCount: int, nodep let assumeInstalled = args.assumeInstalled let skipDeps = assumeInstalled.len > 0 or nodepsCount > 0 + let removedNames = withAlpm(config.root, config.db, + config.dbs, config.arch, handle, dbs, errors): + for e in errors: printError(config.color, e) + let newInstalledNames = lc[$p.name | (p <- handle.local.packages), string].toSet + installed.map(i => i.name).filter(n => not (n in newInstalledNames)).toSet + + let (finalPkgInfos, finalAdditionalPkgInfos) = pkgInfos.foldl(block: + let (pkgInfos, additionalPkgInfos) = a + if b.name in removedNames: + (pkgInfos, additionalPkgInfos & b) + else: + (pkgInfos & b, additionalPkgInfos), + (newSeq[PackageInfo](), additionalPkgInfos)) + let (resolveSuccess, satisfied, additionalPacmanTargets, basePackages, dependencyPaths) = - resolveDependencies(config, pkgInfos, additionalPkgInfos, false, directSome, + resolveDependencies(config, finalPkgInfos, finalAdditionalPkgInfos, false, directSome, nodepsCount, assumeInstalled, noaur) let paths = initialPaths & dependencyPaths @@ -852,10 +866,10 @@ proc handleInstall(args: seq[Argument], config: Config, upgradeCount: int, nodep removeCode else: code - elif not directSome and not additionalSome: - echo(trp(" there is nothing to do\n")) - 0 else: + if not directSome and not additionalSome: + echo(trp(" there is nothing to do\n")) + clearPaths(paths) 0 proc handlePrint(args: seq[Argument], config: Config, printFormat: string, |