OSDN Git Service

AppliStation-GUI,インストール確認ダイアログで、依存関係上必要なソフトを選択しなかったのの認識失敗のバグ修正
authorttp <ttp@users.sourceforge.jp>
Sun, 21 Sep 2008 11:15:12 +0000 (11:15 +0000)
committerttp <ttp@users.sourceforge.jp>
Sun, 21 Sep 2008 11:15:12 +0000 (11:15 +0000)
バグの詳細は下設のとおり
 * ユーザが依存関係にあるソフトを(少なくとも1組)選択し、
 * インストール確認ダイアログで依存の原因側のソフトのチェックを外した時
 * 依存で必要となるはずのソフトのリストアイテムが赤字にならない。

原因は、その赤字にする時の処理では、一旦インストールするとしたものを優先していなかった。

git-svn-id: http://localhost/svn/AppliStation/trunk@984 34ed2c89-c49f-4a4b-abdb-c318350108cf

AppliStation/InstallationConfirmForm.cs
na-get-lib/NaGet.Packages.Install/DependeciesResolver.cs

index 55c7f22..fa04ecb 100644 (file)
@@ -294,8 +294,14 @@ namespace AppliStation
                private uint checkUnselectedDependencies()\r
                {\r
                        uint retVal = 0;\r
+                       \r
+                       List<Package> instPkgs = new List<Package>();\r
+                       foreach (Installation inst in Installations) {\r
+                               instPkgs.Add(inst.InstalledPackage);\r
+                       }\r
+                       \r
                        List<Package> pkg = new List<Package>();\r
-                       foreach (Installation inst in DependeciesResolver.CreateRequiresInstallations(CheckedInstallations, pkgListMan)) {\r
+                       foreach (Installation inst in DependeciesResolver.CreateRequiresInstallations(CheckedInstallations, pkgListMan, instPkgs)) {\r
                                pkg.Add(inst.InstalledPackage);\r
                        }\r
                        \r
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