OSDN Git Service

バージョン取得でレジストリの値を信頼するか否かをソフトリストの情報から判断するように変更。
[applistation/AppliStation.git] / na-get-lib / NaGet.Packages / Package.cs
1 using System.Xml.Serialization;\r
2 \r
3 namespace NaGet.Packages\r
4 {\r
5         /// <summary>\r
6         /// インストーラーの種類を表す。\r
7         /// </summary>\r
8         public enum InstallerType\r
9         {\r
10                 /// <summary>\r
11                 /// インストーラー\r
12                 /// </summary>\r
13                 [XmlEnum(Name="installer")]\r
14                 EXEC_INSTALLER,\r
15                 /// <summary>\r
16                 /// Microsoft Software Installer\r
17                 /// </summary>\r
18                 [XmlEnum(Name="msi")]\r
19                 MSI_PACKAGE,\r
20                 /// <summary>\r
21                 /// 自己解凍書庫を含む書庫一般\r
22                 /// </summary>\r
23                 [XmlEnum(Name="archive")]\r
24                 ARCHIVE,\r
25                 /// <summary>\r
26                 /// それ自身がプログラムそのものである\r
27                 /// </summary>\r
28                 [XmlEnum(Name="itself")]\r
29                 ITSELF,\r
30                 /// <summary>\r
31                 /// インストールできない単なるデータ(BIOSなど)\r
32                 /// </summary>\r
33                 [XmlEnum(Name="cannotinstall")]\r
34                 CANNOT_INSTALL,\r
35         }\r
36         \r
37         /// <summary>\r
38         /// バージョン取得手段の種類を返す。\r
39         /// </summary>\r
40         public enum VersionInfoKey\r
41         {\r
42                 /// <summary>\r
43                 /// レジストリ情報を優先\r
44                 /// </summary>\r
45                 [XmlEnum(Name="registry")]\r
46                 REGISTRY,\r
47         }\r
48         \r
49         /// <summary>\r
50         /// パッケージ情報を格納するクラス\r
51         /// </summary>\r
52         public class Package\r
53         {\r
54                 /// <summary>\r
55                 /// パッケージ名\r
56                 /// </summary>\r
57                 public string Name;\r
58 \r
59                 /// <summary>\r
60                 /// バージョン文字列\r
61                 /// </summary>\r
62                 public string Version;\r
63 \r
64                 /// <summary>\r
65                 /// パッケージの概要\r
66                 /// </summary>\r
67                 public string Summary;\r
68                 \r
69                 /// <summary>\r
70                 /// パッケージの解説\r
71                 /// </summary>\r
72                 public string Description;\r
73 \r
74                 /// <summary>\r
75                 /// 公式サイトのURL\r
76                 /// </summary>\r
77                 public LocationEntry Url;\r
78                 \r
79                 /// <summary>\r
80                 /// 製作者の名前\r
81                 /// </summary>\r
82                 public string Author;\r
83                 \r
84                 /// <summary>\r
85                 /// インストーラーのタイプ\r
86                 /// </summary>\r
87                 public InstallerType Type;\r
88                 \r
89                 /// <summary>\r
90                 /// インストーラーが書庫内に入っているかのフラグ\r
91                 /// </summary>\r
92                 public bool ArchivedInstaller = false;\r
93                 \r
94                 /// <summary>\r
95                 /// アンインストーラーのレジストリのキー\r
96                 /// </summary>\r
97                 public string UninstallerKey;\r
98                 \r
99                 /// <summary>\r
100                 /// バージョン取得のルール\r
101                 /// </summary>\r
102                 public VersionInfoKey? VersionInfoKey;\r
103                 \r
104                 /// <summary>\r
105                 /// サイレントインストールのための引数。\r
106                 /// インストーラー形式のみ有効で、nullもしくは空文字列の場合は\r
107                 /// サイレントインストールができないことをあらわす\r
108                 /// </summary>\r
109                 public string SilentInstallArguments;\r
110                 \r
111                 /// <summary>\r
112                 /// インストールスクリプト(MSBuildドキュメント)\r
113                 /// </summary>\r
114                 public string InstallScript;\r
115                 \r
116                 /// <summary>\r
117                 /// アーカイブインストーラーのときのSystem32のコピー\r
118                 /// </summary>\r
119                 public string System32CopyFiles;\r
120                 \r
121                 /// <summary>\r
122                 /// インストーラーのリソースの配列\r
123                 /// </summary>\r
124                 [XmlElement]\r
125                 public Installer[] Installer;\r
126 \r
127                 /// <summary>\r
128                 /// 必要とされるパッケージの配列\r
129                 /// </summary>\r
130                 [XmlArray(IsNullable=true),XmlArrayItem("Entry")]\r
131                 public Entry[] Requires;\r
132                 \r
133                 /// <summary>\r
134                 /// 競合するパッケージの配列\r
135                 /// </summary>\r
136                 [XmlArray(IsNullable=true),XmlArrayItem("Entry")]\r
137                 public Entry[] Conflicts;\r
138                 \r
139                 /// <summary>\r
140                 /// タグ\r
141                 /// </summary>\r
142                 public string Tags;\r
143                 \r
144                 /// <summary>\r
145                 /// ライセンス\r
146                 /// </summary>\r
147                 public string License;\r
148                 \r
149                 /// <summary>\r
150                 /// 所属するパッケージリスト名称\r
151                 /// </summary>\r
152                 public string PackageListName;\r
153         }\r
154 \r
155         /// <summary>\r
156         /// パッケージ参照を示すクラス\r
157         /// </summary>\r
158         public struct Entry\r
159         {\r
160                 /// <summary>\r
161                 /// パッケージ名\r
162                 /// </summary>\r
163                 [XmlAttribute]\r
164                 public string Name;\r
165                 /// <summary>\r
166                 /// パッケージのバージョン比較の式\r
167                 /// </summary>\r
168                 [XmlAttribute]\r
169                 public string Flags;\r
170                 /// <summary>\r
171                 /// パッケージのバージョン\r
172                 /// </summary>\r
173                 [XmlAttribute]\r
174                 public string Version;\r
175                 \r
176                 public Entry(string name, string flags, string version)\r
177                 {\r
178                         Name = name;\r
179                         Flags = flags;\r
180                         Version = version;\r
181                 }\r
182                 public bool Match(Package pkg)\r
183                 {\r
184                         System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(\r
185                                 (System.Text.RegularExpressions.Regex.IsMatch(Name, "^/.*/$"))?\r
186                                 Name.Substring(1, Name.Length-2) :\r
187                                 string.Format("^{0}$", System.Text.RegularExpressions.Regex.Escape(Name))\r
188                         , System.Text.RegularExpressions.RegexOptions.Singleline);\r
189                         \r
190                         if (regex.IsMatch(pkg.Name)) {\r
191                                 if (string.IsNullOrEmpty(Version)) {\r
192                                         return true;\r
193                                 } else {\r
194                                         // TODO Flagの内容は現在のところ無視\r
195                                         return pkg.Version == Version;\r
196                                 }\r
197                         } else {\r
198                                 return false;\r
199                         }\r
200                 }\r
201         }\r
202 \r
203         public class Installer\r
204         {\r
205                 /// <summary>\r
206                 /// コンストラクタ\r
207                 /// </summary>\r
208                 public Installer()\r
209                 {\r
210                 }\r
211                 \r
212                 public Platform Platform;\r
213                 \r
214                 /// <summary>\r
215                 /// ダウンロードリソースURLの配列\r
216                 /// </summary>\r
217                 public LocationEntry Url;\r
218                 \r
219                 /// <summary>\r
220                 /// ファイル検証用ハッシュ\r
221                 /// </summary>\r
222                 [XmlElement]\r
223                 public HashValue[] Hash;\r
224         }\r
225         \r
226         /// <summary>\r
227         /// リソースの位置を示すクラス\r
228         /// </summary>\r
229         public sealed class LocationEntry\r
230         {\r
231                 /// <summary>\r
232                 /// コンストラクタ\r
233                 /// </summary>\r
234                 public LocationEntry()\r
235                 {\r
236                 }\r
237 \r
238                 /// <summary>\r
239                 /// コンストラクタ\r
240                 /// </summary>\r
241                 /// <param name="sHref">リソースのURL</param>\r
242                 public LocationEntry(string sHref)\r
243                 {\r
244                         Href = sHref;\r
245                 }\r
246 \r
247                 /// <summary>\r
248                 /// リソースのURL\r
249                 /// </summary>\r
250                 [XmlAttribute]\r
251                 public string Href;\r
252         }\r
253 }\r