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
/// <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
/// <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