From ad6fe16b26d7aeede6363388fabb51c35c97cd24 Mon Sep 17 00:00:00 2001 From: ttp Date: Sun, 21 Sep 2008 08:38:37 +0000 Subject: [PATCH] =?utf8?q?na-get-lib,Entry=E3=81=AEName=E3=81=AB=E6=AD=A3?= =?utf8?q?=E8=A6=8F=E8=A1=A8=E7=8F=BE=E3=82=92=E4=BD=BF=E3=81=88=E3=82=8B?= =?utf8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=E3=81=8A?= =?utf8?q?=E3=82=88=E3=81=B3=E3=81=93=E3=82=8C=E3=81=AB=E3=83=9E=E3=83=83?= =?utf8?q?=E3=83=81=E3=81=99=E3=82=8BPackage=E6=A4=9C=E7=B4=A2=E3=81=AE?= =?utf8?q?=E9=96=A2=E6=95=B0=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * Entry.Nameが"/"から始まり、かつ"/"で終わるとき、その間に狭まれた文字列を正規表現として読み込む。 * Package検索に、EntryのName(含・正規表現)、Version(完全一致に限る)を対応させた。 git-svn-id: http://localhost/svn/AppliStation/trunk@981 34ed2c89-c49f-4a4b-abdb-c318350108cf --- .../NaGet.Packages.Install/DependeciesResolver.cs | 2 +- na-get-lib/NaGet.Packages/Package.cs | 12 +++++++-- na-get-lib/NaGet.Packages/PackageList.cs | 29 ++++++++++++++++------ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/na-get-lib/NaGet.Packages.Install/DependeciesResolver.cs b/na-get-lib/NaGet.Packages.Install/DependeciesResolver.cs index 0b266c7..f9e7ad6 100644 --- a/na-get-lib/NaGet.Packages.Install/DependeciesResolver.cs +++ b/na-get-lib/NaGet.Packages.Install/DependeciesResolver.cs @@ -44,7 +44,7 @@ namespace NaGet.Packages.Install List reqInsts = new List(); foreach (Entry entry in DeleteDuplicatedEntries(CreateRequiresEntries(insts))) { - if (!pkgListsMan.IsInstalledFor(entry)) { + if (!pkgListsMan.IsInstalledFor(entry)) { if (Array.Exists(insts, delegate(Installation inst) { return inst.InstalledPackage.Name == entry.Name; })) { diff --git a/na-get-lib/NaGet.Packages/Package.cs b/na-get-lib/NaGet.Packages/Package.cs index 18d3c0f..bc5ec42 100644 --- a/na-get-lib/NaGet.Packages/Package.cs +++ b/na-get-lib/NaGet.Packages/Package.cs @@ -138,8 +138,16 @@ namespace NaGet.Packages /// /// パッケージ参照を示すクラス /// - public class Entry + public struct Entry { + public Entry(string name, string flags, string version) + { + Name = name; + Flags = flags; + Version = version; + } + + /// /// パッケージ名 /// @@ -149,7 +157,7 @@ namespace NaGet.Packages /// パッケージのバージョン比較の式 /// [XmlAttribute] - public string Flags; // TODO フラグは列挙体あたりにするべき + public string Flags; /// /// パッケージのバージョン /// diff --git a/na-get-lib/NaGet.Packages/PackageList.cs b/na-get-lib/NaGet.Packages/PackageList.cs index 6b9fdc5..5aa1aa4 100644 --- a/na-get-lib/NaGet.Packages/PackageList.cs +++ b/na-get-lib/NaGet.Packages/PackageList.cs @@ -170,12 +170,7 @@ namespace NaGet.Packages /// 検索にかけるパッケージのバージョン public TPackage GetPackageForPackage(string name, string version) { - foreach (TPackage tpkg in GetPackagesForName(name)) { - if (tpkg.Version == version) { - return tpkg; - } - } - return null; + return GetPackageForEntry(new Entry(name, null, version)); } /// @@ -185,8 +180,26 @@ namespace NaGet.Packages /// 検索にかけるパッケージ参照エントリ public TPackage GetPackageForEntry(Entry entry) { - return GetPackageForName(entry.Name); - // TODO 名前でしか存在確認をしていない。将来的にはバージョンなども考慮すべき + System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex( + (System.Text.RegularExpressions.Regex.IsMatch(entry.Name, "^/.*/$"))? + entry.Name.Substring(1, entry.Name.Length-2) : + System.Text.RegularExpressions.Regex.Escape(entry.Name) + ); + + return packageArrayList.Find( + (Predicate) delegate(TPackage pkg){ + if (regex.IsMatch(pkg.Name)) { + if (string.IsNullOrEmpty(entry.Version)) { + return true; + } else { + // TODO Flagの内容は現在のところ無視 + return pkg.Version == entry.Version; + } + } else { + return false; + } + } + ); } } } -- 2.11.0