diff --git a/src/deb-installer/manager/packagesmanager.cpp b/src/deb-installer/manager/packagesmanager.cpp index 8576f844..60a90a69 100644 --- a/src/deb-installer/manager/packagesmanager.cpp +++ b/src/deb-installer/manager/packagesmanager.cpp @@ -158,6 +158,7 @@ PackageDependsStatus PackagesManager::checkDependsStatus(const QString &package_ m_checkedOrDependsStatus.clear(); m_unCheckedOrDepends.clear(); m_dependsInfo.clear(); + m_loopErrorDeepends.clear(); //用debFile.packageName()无法打开deb文件,故替换成debFile.filePath() //更新m_dependsInfo getPackageOrDepends(debFile.filePath(), debFile.architecture(), true); @@ -743,6 +744,7 @@ PackageDependsStatus PackagesManager::getPackageDependsStatus(const int index) m_checkedOrDependsStatus.clear(); m_unCheckedOrDepends.clear(); m_dependsInfo.clear(); + m_loopErrorDeepends.clear(); //用debFile.packageName()无法打开deb文件,故替换成debFile.filePath() //更新m_dependsInfo getPackageOrDepends(debFile.filePath(), debFile.architecture(), true); @@ -1566,6 +1568,11 @@ const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSet &depends) { + // 只有单包,认为首次进入 + if (choosed_set.size() <= 1) { + m_loopErrorDeepends.clear(); + } + PackageDependsStatus dependsStatus = PackageDependsStatus::ok(); QList break_list; QList available_list; @@ -1597,6 +1604,11 @@ const PackageDependsStatus PackagesManager::checkDependsPackageStatus(QSetname())) + if (choosed_set.contains(package->name())) { + // 已有记录,返回之前排查的结果,而不是直接返回 Ok , 当前包名可能为虚包。 + if (m_loopErrorDeepends.contains(package->name())) { + return PackageDependsStatus(m_loopErrorDeepends.value(package->name()), package->name()); + } + return PackageDependsStatus::ok(); + } // check arch conflicts if (package->multiArchType() == MultiArchSame) { diff --git a/src/deb-installer/manager/packagesmanager.h b/src/deb-installer/manager/packagesmanager.h index b8c1adfd..b9a4b270 100644 --- a/src/deb-installer/manager/packagesmanager.h +++ b/src/deb-installer/manager/packagesmanager.h @@ -578,6 +578,13 @@ private slots: QMap, QList>> m_dependsPackages; DependInfo m_dinfo; //依赖包的包名及版本 + /** + @brief m_loopErrorDeepends 循环判断依赖时缓存非 Ok 的前置包状态 + 用于对 OR 或依赖及 Provides 虚包依赖在循环中依赖中返回前置已检测的包状态, + 而不是直接返回 Ok . + */ + QHash m_loopErrorDeepends; + // wine应用处理的下标 int m_DealDependIndex = -1;