OSDN Git Service

na-get-lib,依存関係解決関数群を微修正
authorttp <ttp@users.sourceforge.jp>
Sat, 6 Sep 2008 06:12:29 +0000 (06:12 +0000)
committerttp <ttp@users.sourceforge.jp>
Sat, 6 Sep 2008 06:12:29 +0000 (06:12 +0000)
git-svn-id: http://localhost/svn/AppliStation/trunk@964 34ed2c89-c49f-4a4b-abdb-c318350108cf

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

index e41cb91..2df1836 100644 (file)
@@ -13,6 +13,13 @@ namespace NaGet.Packages.Install
                {\r
                }\r
                \r
+               /// <summary>\r
+               /// 依存解決済みInstallation配列を生成する\r
+               /// </summary>\r
+               /// <param name="insts">元のインストールリスト</param>\r
+               /// <param name="pkgListsMan">インストール確認などをおこなうパッケージリストのマネージャ</param>\r
+               /// <param name="resolved">解決済みInstallation配列</param>\r
+               /// <param name="dependencies">依存によって必要とされたInstallation配列。ない場合は空配列</param>\r
                public static void ResolveInstallations(Installation[] insts, PackageListsManager pkgListsMan, out Installation[] resolved, out Installation[] dependencies)\r
                {\r
                        List<Installation> depInsts;\r
@@ -36,23 +43,6 @@ namespace NaGet.Packages.Install
                {\r
                        List<Installation> reqInsts = new List<Installation>();\r
                        \r
-                       foreach (Entry entry in CreateRequiresEntries(insts, pkgListsMan)) {\r
-                               reqInsts.Add(new Installation(pkgListsMan.AvailablePkgList.GetPackageForEntry(entry)));\r
-                       }\r
-                       \r
-                       return reqInsts;\r
-               }\r
-               \r
-               \r
-               /// <summary>\r
-               /// Requires依存による依存パッケージの検索をし、それをパッケージ参照エントリのイテレータで返す。\r
-               /// 返されるイテレータは、インストール済み及び重複のパッケージは取り除かれている。\r
-               /// </summary>\r
-               /// <param name="insts">対象インストールリスト</param>\r
-               /// <param name="pkgListsMan">現在インストールされているか否かの判断に使われるパッケージリスト</param>\r
-               /// <returns>Requires依存による依存</returns>\r
-               public static IEnumerable<Entry> CreateRequiresEntries(Installation[] insts, PackageListsManager pkgListsMan)\r
-               {\r
                        foreach (Entry entry in DeleteDuplicatedEntries(CreateDependencyEntries(insts, "Requires"))) {\r
                                if (!pkgListsMan.IsInstalledFor(entry)) {                       \r
                                        if (Array.Exists(insts, delegate(Installation inst) {\r
@@ -60,10 +50,13 @@ namespace NaGet.Packages.Install
                                                         })) {\r
                                                continue;\r
                                        } else {\r
-                                               yield return entry;\r
+                                               Package pkg = pkgListsMan.AvailablePkgList.GetPackageForEntry(entry);\r
+                                               reqInsts.Add(new Installation(pkg));\r
                                        }\r
                                }\r
                        }\r
+                       \r
+                       return reqInsts;\r
                }\r
                \r
                /// <summary>\r
@@ -74,13 +67,13 @@ namespace NaGet.Packages.Install
                /// <returns>重複しているものを取り除いたエントリのイテレータ</returns>\r
                private static IEnumerable<Entry> DeleteDuplicatedEntries(IEnumerable<Entry> entries)\r
                {\r
-                       List<string> pkgNames = new List<string>();\r
+                       LinkedList<string> pkgNames = new LinkedList<string>();\r
                        \r
                        foreach (Entry entry in entries) {\r
-                               if (pkgNames.IndexOf(entry.Name) < 0) {\r
+                               if (! pkgNames.Contains(entry.Name)) {\r
                                        // 新出ならば返す\r
                                        yield return entry;\r
-                                       pkgNames.Add(entry.Name);\r
+                                       pkgNames.AddFirst(entry.Name);\r
                                }\r
                        }\r
                }\r