OSDN Git Service

na-get-lib,EntryのNameに正規表現を使えるようにした。およびこれにマッチするPackage検索の関数を更新
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages / PackageList.cs
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