OSDN Git Service

na-get-lib,EntryのNameに正規表現を使えるようにした。およびこれにマッチするPackage検索の関数を更新
authorttp <ttp@users.sourceforge.jp>
Sun, 21 Sep 2008 08:38:37 +0000 (08:38 +0000)
committerttp <ttp@users.sourceforge.jp>
Sun, 21 Sep 2008 08:38:37 +0000 (08:38 +0000)
 * Entry.Nameが"/"から始まり、かつ"/"で終わるとき、その間に狭まれた文字列を正規表現として読み込む。
 * Package検索に、EntryのName(含・正規表現)、Version(完全一致に限る)を対応させた。

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

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

index 0b266c7..f9e7ad6 100644 (file)
@@ -44,7 +44,7 @@ namespace NaGet.Packages.Install
                        List<Installation> reqInsts = new List<Installation>();\r
                        \r
                        foreach (Entry entry in DeleteDuplicatedEntries(CreateRequiresEntries(insts))) {\r
-                               if (!pkgListsMan.IsInstalledFor(entry)) {                       \r
+                               if (!pkgListsMan.IsInstalledFor(entry)) {\r
                                        if (Array.Exists(insts, delegate(Installation inst) {\r
                                                        return inst.InstalledPackage.Name == entry.Name;\r
                                                         })) {\r
index 18d3c0f..bc5ec42 100644 (file)
@@ -138,8 +138,16 @@ namespace NaGet.Packages
        /// <summary>\r
        /// パッケージ参照を示すクラス\r
        /// </summary>\r
-       public class Entry\r
+       public struct Entry\r
        {\r
+               public Entry(string name, string flags, string version)\r
+               {\r
+                       Name = name;\r
+                       Flags = flags;\r
+                       Version = version;\r
+               }\r
+               \r
+               \r
                /// <summary>\r
                /// パッケージ名\r
                /// </summary>\r
@@ -149,7 +157,7 @@ namespace NaGet.Packages
                /// パッケージのバージョン比較の式\r
                /// </summary>\r
                [XmlAttribute]\r
-               public string Flags; // TODO フラグは列挙体あたりにするべき\r
+               public string Flags;\r
                /// <summary>\r
                /// パッケージのバージョン\r
                /// </summary>\r
index 6b9fdc5..5aa1aa4 100644 (file)
@@ -170,12 +170,7 @@ namespace NaGet.Packages
                /// <param name="version">検索にかけるパッケージのバージョン</param>\r
                public TPackage GetPackageForPackage(string name, string version)\r
                {\r
-                       foreach (TPackage tpkg in GetPackagesForName(name)) {\r
-                               if (tpkg.Version == version) {\r
-                                       return tpkg;\r
-                               }\r
-                       }\r
-                       return null;\r
+                       return GetPackageForEntry(new Entry(name, null, version));\r
                }\r
                \r
                /// <summary>\r
@@ -185,8 +180,26 @@ namespace NaGet.Packages
                /// <param name="name">検索にかけるパッケージ参照エントリ</param>\r
                public TPackage GetPackageForEntry(Entry entry)\r
                {\r
-                       return GetPackageForName(entry.Name);\r
-                       // TODO 名前でしか存在確認をしていない。将来的にはバージョンなども考慮すべき\r
+                       System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(\r
+                               (System.Text.RegularExpressions.Regex.IsMatch(entry.Name, "^/.*/$"))?\r
+                               entry.Name.Substring(1, entry.Name.Length-2) :\r
+                               System.Text.RegularExpressions.Regex.Escape(entry.Name)\r
+                       );\r
+                       \r
+                       return packageArrayList.Find(\r
+                               (Predicate<TPackage>) delegate(TPackage pkg){\r
+                                       if (regex.IsMatch(pkg.Name)) {\r
+                                               if (string.IsNullOrEmpty(entry.Version)) {\r
+                                                       return true;\r
+                                               } else {\r
+                                                       // TODO Flagの内容は現在のところ無視\r
+                                                       return pkg.Version == entry.Version;\r
+                                               }\r
+                                       } else {\r
+                                               return false;\r
+                                       }\r
+                               }\r
+                       );\r
                }\r
        }\r
 }\r