Mercurial > hg > mercurial
annotate teamcity-common.xml @ 919:16ad8d51b001
fix non-ascii characters support in commandline arguments
author | eugene.petrenko@jetbrains.com |
---|---|
date | Mon, 19 Jan 2015 18:30:08 +0100 |
parents | 31a1aca3305c |
children |
rev | line source |
---|---|
76 | 1 <?xml version="1.0" encoding="UTF-8"?> |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
2 <!-- |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
3 ~ Copyright 2000-2014 JetBrains s.r.o. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
4 ~ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
5 ~ Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
6 ~ you may not use this file except in compliance with the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
7 ~ You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
8 ~ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
9 ~ http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
10 ~ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
11 ~ Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
12 ~ distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
13 ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
14 ~ See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
15 ~ limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
16 --> |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
108
diff
changeset
|
17 |
76 | 18 <project name="TeamCityPluginCommon"> |
19 | |
20 <!-- | |
21 Tasks: | |
22 package.teamcity.plugin | |
23 deploy.teamcity.plugin | |
24 undeploy.teamcity.plugin | |
25 unpack.teamcity | |
26 | |
27 Targets: | |
28 check.teamcitydistribution | |
29 --> | |
30 | |
31 <property name="path.variable.teamcitydistribution" value="${teamcity.distribution}"/> | |
32 | |
33 <property name="teamcity.internal.default.out" value="dist"/> | |
34 | |
35 | |
36 <macrodef name="package.teamcity.plugin" description="packages TeamCity plugin"> | |
37 <attribute name="name" description="name of the plugin"/> | |
38 <attribute name="server.output" default="" description="path to compiled server plugin output"/> | |
39 <attribute name="agent.output" default="" description="path to compiled agent plugin output"/> | |
40 <attribute name="common.output" default="" description="path to compiled common plugin output"/> | |
41 <attribute name="out" default="${teamcity.internal.default.out}" description="directory to put prepared plugin zip into"/> | |
42 <attribute name="plugin.descriptor.file" default="${basedir}/teamcity-plugin.xml" description="path to teamcity-plugin.xml file"/> | |
43 <attribute name="common.jar.name" default="@{name}-common.jar" description="name of the shared jar between server and agent"/> | |
44 <attribute name="out.unpacked" default="@{out}/unpacked" | |
45 description="name of the directory to store unpacked plugin (not packed into zip)"/> | |
46 | |
47 <attribute name="server.lib.dir" default="" description="directory to get libs for the server part"/> | |
48 <attribute name="server.lib.includes" default="none should match" description="includes pattern of the files in the directory"/> | |
49 <attribute name="plugin.version" default="SNAPSHOT" | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
50 description="the version of the plugin to put into teamcity-plugin.xml instead of '@Plugin_Version@'"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
51 <attribute name="plugin.vendor" default="Unknown vendor" |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
52 description="name of the vendor to put into teamcity-plugin.xml instead of '@Plugin_Vendor@'"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
53 <attribute name="plugin.vendor.url" default="" |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
54 description="vendor URL to put into teamcity-plugin.xml instead of '@Plugin_Vendor_Url@'"/> |
76 | 55 |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
56 <element name="server-additional-files" optional="yes" description="fileset of the files to pack into root of the server plugin part"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
57 <element name="agent-additional-files" optional="yes" description="fileset of the files to pack into root of the agent plugin part"/> |
76 | 58 |
59 <sequential> | |
60 | |
61 <antcall target="check.already.defined"/> | |
62 | |
63 <property name="teamcity.internal.distrib.prep" value="${basedir}/temp/dist_prep"/> | |
64 <property name="teamcity.internal.distrib.prep.agent" value="${teamcity.internal.distrib.prep}/agent"/> | |
65 <property name="teamcity.internal.distrib.prep.common" value="${teamcity.internal.distrib.prep}/common"/> | |
66 <property name="teamcity.internal.distrib.prep.agent.jars" value="${teamcity.internal.distrib.prep.agent}/unpacked"/> | |
67 | |
68 | |
69 <!-- build jars --> | |
70 | |
71 <delete dir="@{out.unpacked}" quiet="true"/> | |
72 <delete dir="${teamcity.internal.distrib.prep}" quiet="true"/> | |
73 | |
74 <mkdir dir="@{out.unpacked}"/> | |
75 | |
76 <condition property="common.needed"> | |
77 <length string="@{common.output}" when="greater" length="0"/> | |
78 </condition> | |
79 <condition property="server.needed"> | |
80 <length string="@{server.output}" when="greater" length="0"/> | |
81 </condition> | |
82 <condition property="agent.needed"> | |
83 <length string="@{agent.output}" when="greater" length="0"/> | |
84 </condition> | |
85 | |
86 <condition property="plugin.descriptor.file.needed"> | |
87 <and> | |
88 <available file="@{plugin.descriptor.file}"/> | |
89 <length string="@{plugin.descriptor.file}" when="greater" length="0"/> | |
90 </and> | |
91 </condition> | |
92 | |
93 <mkdir dir="${teamcity.internal.distrib.prep.common}"/> | |
94 <antcall target="prepare.common.part"> | |
95 <param name="common.output" value="@{common.output}"/> | |
96 <param name="common.jar.path" value="${teamcity.internal.distrib.prep.common}/@{common.jar.name}"/> | |
97 </antcall> | |
98 | |
99 <antcall target="prepare.server.part"> | |
100 <param name="out.unpacked" value="@{out.unpacked}"/> | |
101 <param name="name" value="@{name}"/> | |
102 <param name="server.output" value="@{server.output}"/> | |
103 <param name="common.jar.path" value="${teamcity.internal.distrib.prep.common}/@{common.jar.name}"/> | |
104 <param name="lib.dir" value="@{server.lib.dir}"/> | |
105 <param name="lib.includes" value="@{server.lib.includes}"/> | |
106 </antcall> | |
107 | |
108 <antcall target="prepare.agent.part"> | |
109 <param name="out.unpacked" value="@{out.unpacked}"/> | |
110 <param name="name" value="@{name}"/> | |
111 <param name="agent.output" value="@{agent.output}"/> | |
112 <param name="common.jar.path" value="${teamcity.internal.distrib.prep.common}/@{common.jar.name}"/> | |
113 </antcall> | |
114 | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
115 <!-- copy additional agent files --> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
116 <mkdir dir="${teamcity.internal.distrib.prep.agent.jars}/@{name}" /> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
117 <copy todir="${teamcity.internal.distrib.prep.agent.jars}/@{name}"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
118 <fileset dir="${basedir}" excludes="**"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
119 <agent-additional-files/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
120 </copy> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
121 |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
122 <antcall target="pack.agent.part"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
123 <param name="out.unpacked" value="@{out.unpacked}"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
124 <param name="name" value="@{name}"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
125 </antcall> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
126 |
76 | 127 <!-- copy teamcity-plugin.xml --> |
128 <antcall target="prepare.plugin.descriptor.file"> | |
129 <param name="source" value="@{plugin.descriptor.file}"/> | |
130 <param name="dest" value="@{out.unpacked}/teamcity-plugin.xml"/> | |
131 <param name="plugin.version" value="@{plugin.version}"/> | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
132 <param name="plugin.vendor" value="@{plugin.vendor}"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
133 <param name="plugin.vendor.url" value="@{plugin.vendor.url}"/> |
76 | 134 </antcall> |
135 | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
136 <!-- copy additional server plugin files --> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
137 <copy todir="@{out.unpacked}"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
138 <fileset dir="${basedir}" excludes="**"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
139 <server-additional-files/> |
76 | 140 </copy> |
141 | |
142 <!-- clean --> | |
143 <echo message="Cleaning..."/> | |
144 <delete dir="${teamcity.internal.distrib.prep}" quiet="true"/> | |
145 | |
146 <!-- package in zip --> | |
147 <echo message="Packaging zip..."/> | |
148 <delete file="@{out}/@{name}.zip" quiet="true"/> | |
149 <zip destfile="@{out}/@{name}.zip"> | |
150 <fileset dir="@{out.unpacked}"/> | |
151 </zip> | |
152 <echo message="To install the plugin, place '@{out}\@{name}.zip' into '.BuildServer/plugins' directory"/> | |
153 | |
154 </sequential> | |
155 </macrodef> | |
156 | |
157 <target name="check.teamcitydistribution" description="checks whether TeamCity distribution ready to be used by IDEA-generated build"> | |
158 <check.property name="path.variable.teamcitydistribution" | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
159 fail-message="Please define 'teamcity.distribution' or 'path.variable.teamcitydistribution' property (e.g. in build.properties file). The property should point to unpacked TeamCity .tar.gz or .exe distribution." |
76 | 160 /> |
161 | |
162 <condition property="teamcity.distribution.not.present"> | |
163 <not> | |
164 <and> | |
165 <available file="${path.variable.teamcitydistribution}/webapps/ROOT/WEB-INF/lib"/> | |
166 </and> | |
167 </not> | |
168 </condition> | |
169 <fail if="teamcity.distribution.not.present" | |
170 message="Cannot find TeamCity distribution at path '${path.variable.teamcitydistribution}'. The property 'teamcity.distribution' or 'path.variable.teamcitydistribution' should point to unpacked TeamCity .tar.gz or .exe distribution."/> | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
171 <echo message="Using ${path.variable.teamcitydistribution} as TeamCity distribution" /> |
76 | 172 </target> |
173 | |
174 <macrodef name="deploy.teamcity.plugin"> | |
175 <attribute name="name"/> | |
176 <attribute name="teamcity.data.path" default="${user.home}/.BuildServer" description="path to .BuildServer"/> | |
177 <attribute name="out" default="${teamcity.internal.default.out}" description="directory storing prepared plugin zip"/> | |
178 | |
179 <sequential> | |
180 <copy file="@{out}/@{name}.zip" todir="@{teamcity.data.path}/plugins" failonerror="true"/> | |
181 </sequential> | |
182 </macrodef> | |
183 | |
184 <macrodef name="undeploy.teamcity.plugin"> | |
185 <attribute name="name"/> | |
186 <attribute name="teamcity.data.path" default="${user.home}/.BuildServer" description="path to .BuildServer"/> | |
187 | |
188 <sequential> | |
189 <delete file="@{teamcity.data.path}/plugins/@{name}.zip" quiet="true"/> | |
190 </sequential> | |
191 </macrodef> | |
192 | |
193 | |
194 <macrodef name="unpack.teamcity" description="TeamCity distribution unpacking"> | |
195 <attribute name="distribution.dir" default="${basedir}/teamcity-dist" | |
196 description="path to put unpacked TeamCity distribution into. Warning: the content of the directory will be deleted!"/> | |
197 <attribute name="teamcity.data.path" default="${user.home}/.BuildServer" description="path to .BuildServer"/> | |
198 <attribute name="teamcity.tar.gz-location" default="${basedir}" description="path where TeamCity-NNNN.tar.gz file resides"/> | |
199 | |
200 <sequential> | |
201 <delete dir="@{distribution.dir}" quiet="true"/> | |
202 <mkdir dir="@{distribution.dir}"/> | |
203 | |
204 <!-- TODO: issue error if there are several matching files --> | |
205 | |
206 <untar compression="gzip" dest="@{distribution.dir}"> | |
207 <fileset dir="@{teamcity.tar.gz-location}"> | |
208 <include name="*.tar.gz"/> | |
209 </fileset> | |
210 </untar> | |
211 | |
212 <move todir="@{distribution.dir}"> | |
213 <fileset dir="@{distribution.dir}\TeamCity"> | |
214 <include name="**"/> | |
215 </fileset> | |
216 </move> | |
217 </sequential> | |
218 </macrodef> | |
219 | |
220 | |
221 <!-- ** Implementation ** --> | |
222 | |
223 <macrodef name="check.property"> | |
224 <attribute name="name"/> | |
225 <attribute name="fail-message" default=""/> | |
226 <attribute name="check-path" default=""/> | |
227 <sequential> | |
228 <condition property="is.configured.@{name}"> | |
229 <not> | |
230 <and> | |
231 <isset property="@{name}"/> | |
232 <length string="${@{name}}" when="greater" length="0"/> | |
233 </and> | |
234 </not> | |
235 </condition> | |
236 <fail if="is.configured.@{name}" | |
237 message="Property '@{name}' not defined. @{fail-message}"/> | |
238 </sequential> | |
239 </macrodef> | |
240 | |
241 | |
242 <target name="prepare.common.part" if="common.needed"> | |
243 <jar destfile="${common.jar.path}"> | |
244 <fileset dir="${common.output}"/> | |
245 </jar> | |
246 </target> | |
247 | |
248 | |
249 <target name="prepare.server.part" if="server.needed"> | |
250 <mkdir dir="${out.unpacked}/server"/> | |
251 | |
252 <jar destfile="${out.unpacked}/server/${name}.jar"> | |
253 <fileset dir="${server.output}"/> | |
254 </jar> | |
255 | |
256 <copy todir="${out.unpacked}/server" failonerror="false"> | |
257 <fileset file="${common.jar.path}"/> | |
258 <fileset dir="${lib.dir}" includes="${lib.includes}"/> | |
259 </copy> | |
260 </target> | |
261 | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
262 <target name="pack.agent.part" if="agent.needed"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
263 <zip destfile="${out.unpacked}/agent/${name}.zip"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
264 <fileset dir="${teamcity.internal.distrib.prep.agent.jars}"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
265 </zip> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
266 </target> |
76 | 267 |
268 <target name="prepare.agent.part" if="agent.needed"> | |
269 <!-- prepare.agent.part --> | |
270 <mkdir dir="${teamcity.internal.distrib.prep.agent}"/> | |
271 <mkdir dir="${teamcity.internal.distrib.prep.agent.jars}/${name}/lib"/> | |
272 <mkdir dir="${out.unpacked}/agent"/> | |
273 | |
274 <jar destfile="${teamcity.internal.distrib.prep.agent.jars}/${name}/lib/${name}.jar"> | |
275 <fileset dir="${agent.output}"/> | |
276 </jar> | |
277 | |
278 <copy todir="${teamcity.internal.distrib.prep.agent.jars}/${name}/lib" failonerror="false"> | |
279 <fileset file="${common.jar.path}"/> | |
280 </copy> | |
281 </target> | |
282 | |
283 <target name="prepare.plugin.descriptor.file" if="plugin.descriptor.file.needed"> | |
284 <echo message="Copying plugin descriptor file '${source}' to '${dest}'."/> | |
285 <copy file="${source}" tofile="${dest}" failonerror="false"/> | |
286 | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
287 <echo message="Replacing '@Plugin_Version@', '@Plugin_Vendor@' and '@Plugin_Vendor_Url@' in the copied plugin descriptor file."/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
288 <replace file="${dest}"> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
289 <replacefilter token="@version@" value="${plugin.version}"/> |
104 | 290 <replacefilter token="@Plugin_Version@" value="${plugin.version}"/> |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
291 <replacefilter token="@Plugin_Vendor@" value="${plugin.vendor}"/> |
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
292 <replacefilter token="@Plugin_Vendor_Url@" value="${plugin.vendor.url}"/> |
76 | 293 </replace> |
294 </target> | |
295 | |
296 <target name="check.already.defined"> | |
297 <condition property="already.defined"> | |
298 <isset property="teamcity.internal.distrib.prep"/> | |
299 </condition> | |
300 <fail if="already.defined" | |
301 message="It seems you are trying to use the script several times in the same context. This script does not support such use. Please call this script as a separate Ant process, via 'ant' task."/> | |
302 </target> | |
303 | |
108
63fcc9b14221
update teamcity-common.xml and teamcity-plugin.xml
C:\Users\pavel.sher\AppData\Roaming\The Bat!
parents:
104
diff
changeset
|
304 </project> |