OSDN Git Service

AppliStation-GUI,インストール確認ダイアログで、依存関係上必要なソフトを選択しなかったのの認識失敗のバグ修正
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages.Install / DependeciesResolver.cs
index 97ee753..2399bf6 100644 (file)
@@ -25,7 +25,7 @@ namespace NaGet.Packages.Install
                        List<Installation> depInsts;\r
                        \r
                        // 依存関係のインストールリスト\r
-                       depInsts = CreateRequiresInstallations(insts, pkgListsMan);\r
+                       depInsts = CreateRequiresInstallations(insts, pkgListsMan, null);\r
                        dependencies = depInsts.ToArray();\r
                        \r
                        // 依存解決をしたインストールリスト\r
@@ -38,8 +38,9 @@ namespace NaGet.Packages.Install
                /// </summary>\r
                /// <param name="insts">対象インストールリスト</param>\r
                /// <param name="pkgListsMan">現在インストールされているか否かの判断に使われるパッケージリスト</param>\r
+               /// <param name="preferencial">優先して使用をするパッケージのリスト。<c>null</c>でもよい</param>\r
                /// <returns>Requires依存による依存</returns>\r
-               public static List<Installation> CreateRequiresInstallations(Installation[] insts, PackageListsManager pkgListsMan)\r
+               public static List<Installation> CreateRequiresInstallations(Installation[] insts, PackageListsManager pkgListsMan, ICollection<Package> preferencial)\r
                {\r
                        List<Installation> reqInsts = new List<Installation>();\r
                        \r
@@ -58,9 +59,19 @@ namespace NaGet.Packages.Install
                                                VersionComparetor vc = new VersionComparetor();\r
                                                Package pkgToBeInstall = null;\r
                                                \r
-                                               foreach (Package pkg in pkgListsMan.availablePkgList.GetPackagesForEntry(entry)) {\r
-                                                       if ((pkgToBeInstall == null) || (vc.Compare(pkgToBeInstall.Version, pkg.Version) < 0)) {\r
-                                                               pkgToBeInstall = pkg;\r
+                                               if (preferencial != null) {\r
+                                                       foreach (Package pkg in preferencial) {\r
+                                                               if (entry.Match(pkg)) {\r
+                                                                       pkgToBeInstall = pkg;\r
+                                                                       break;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                               if (pkgToBeInstall == null) {\r
+                                                       foreach (Package pkg in pkgListsMan.availablePkgList.GetPackagesForEntry(entry)) {\r
+                                                               if ((pkgToBeInstall == null) || (vc.Compare(pkgToBeInstall.Version, pkg.Version) < 0)) {\r
+                                                                       pkgToBeInstall = pkg;\r
+                                                               }\r
                                                        }\r
                                                }\r
                                                \r