1+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2+ <project name =" Handle p2 composite metadata from Bintray" basedir =" ." >
3+
4+ <!--
5+ These must be set from outside
6+ <property name="bintray.user" value="" />
7+ <property name="bintray.apikey" value="" />
8+ <property name="bintray.repo" value="" />
9+ <property name="bintray.package" value="" />
10+ <property name="bintray.releases.path" value="" />
11+ <property name="bintray.composite.path" value="" />
12+ <property name="bintray.zip.path" value="" />
13+ -->
14+
15+ <property name =" bintray.url" value =" https://dl.bintray.com/${bintray.owner}/${bintray.repo}" />
16+ <property name =" bintray.package.version" value =" ${unqualifiedVersion}.${buildQualifier}" />
17+ <property name =" bintray.releases.target.path" value =" ${bintray.releases.path}/${bintray.package.version}" />
18+
19+ <property name =" main.composite.url" value =" ${bintray.url}/${bintray.composite.path}" />
20+ <property name =" target" value =" target" />
21+ <property name =" composite.repository.directory" value =" composite-child" />
22+ <property name =" main.composite.repository.directory" value =" composite-main" />
23+
24+ <property name =" compositeArtifacts" value =" compositeArtifacts.xml" />
25+ <property name =" compositeContent" value =" compositeContent.xml" />
26+
27+ <property name =" local.p2.repository" value =" target/repository" />
28+
29+ <target name =" getMajorMinorVersion" >
30+ <script language =" javascript" >
31+ <![CDATA[
32+
33+ // getting the value
34+ buildnumber = project.getProperty("unqualifiedVersion");
35+ index = buildnumber.lastIndexOf(".");
36+ counter = buildnumber.substring(0, index);
37+ project.setProperty("majorMinorVersion",counter);
38+
39+ ]]>
40+ </script >
41+ </target >
42+
43+ <!-- Take from the remote URL the possible existing metadata -->
44+ <target name =" get-composite-metadata" depends =" getMajorMinorVersion" >
45+ <get-metadata url =" ${main.composite.url}" dest =" ${target}/${main.composite.repository.directory}" />
46+ <get-metadata url =" ${main.composite.url}/${majorMinorVersion}" dest =" ${target}/${composite.repository.directory}" />
47+ <antcall target =" preprocess-metadata" />
48+ </target >
49+
50+ <macrodef name =" get-metadata" description =" Retrieve the p2 composite metadata" >
51+ <attribute name =" url" />
52+ <attribute name =" dest" />
53+ <sequential >
54+ <echo message =" Creating directory @{dest}..." />
55+ <mkdir dir =" @{dest}" />
56+ <get-file file =" ${compositeArtifacts}" url =" @{url}" dest =" @{dest}" />
57+ <get-file file =" ${compositeContent}" url =" @{url}" dest =" @{dest}" />
58+ </sequential >
59+ </macrodef >
60+
61+ <macrodef name =" get-file" description =" Use Ant Get task the file" >
62+ <attribute name =" file" />
63+ <attribute name =" url" />
64+ <attribute name =" dest" />
65+ <sequential >
66+ <!-- If the remote file does not exist then fail gracefully -->
67+ <echo message =" Getting @{file} from @{url} into @{dest}..." />
68+ <get dest =" @{dest}" ignoreerrors =" true" >
69+ <url url =" @{url}/@{file}" />
70+ </get >
71+ </sequential >
72+ </macrodef >
73+
74+ <!-- p2.atomic.composite.loading must be set to false otherwise we won't be able
75+ to add a child to the composite repository without having all the children available -->
76+ <target name =" preprocess-metadata" description =" Preprocess p2 composite metadata" >
77+ <replaceregexp byline =" true" >
78+ <regexp pattern =" property name='p2.atomic.composite.loading' value='true'" />
79+ <substitution expression =" property name='p2.atomic.composite.loading' value='false'" />
80+ <fileset dir =" ${target}" >
81+ <include name =" ${composite.repository.directory}/*.xml" />
82+ <include name =" ${main.composite.repository.directory}/*.xml" />
83+ </fileset >
84+ </replaceregexp >
85+ </target >
86+
87+ <!-- p2.atomic.composite.loading must be set to true
88+ see https://bugs.eclipse.org/bugs/show_bug.cgi?id=356561 -->
89+ <target name =" postprocess-metadata" description =" Preprocess p2 composite metadata" >
90+ <replaceregexp byline =" true" >
91+ <regexp pattern =" property name='p2.atomic.composite.loading' value='false'" />
92+ <substitution expression =" property name='p2.atomic.composite.loading' value='true'" />
93+ <fileset dir =" ${target}" >
94+ <include name =" ${composite.repository.directory}/*.xml" />
95+ <include name =" ${main.composite.repository.directory}/*.xml" />
96+ </fileset >
97+ </replaceregexp >
98+ </target >
99+
100+ <target name =" push-to-bintray" >
101+ <antcall target =" postprocess-metadata" />
102+ <antcall target =" push-p2-repo-to-bintray" />
103+ <antcall target =" push-p2-repo-zipped-to-bintray" />
104+ <antcall target =" push-composite-to-bintray" />
105+ <antcall target =" push-main-composite-to-bintray" />
106+ </target >
107+
108+ <target name =" push-p2-repo-to-bintray" >
109+ <apply executable =" curl" parallel =" false" relative =" true" addsourcefile =" false" >
110+ <arg value =" -XPUT" />
111+ <arg value =" --verbose" />
112+ <targetfile />
113+
114+ <fileset dir =" ${local.p2.repository}" />
115+
116+ <compositemapper >
117+ <mergemapper to =" -T" />
118+ <globmapper from =" *" to =" ${local.p2.repository}/*" />
119+ <mergemapper to =" -u${bintray.user}:${bintray.apikey}" />
120+ <globmapper from =" *" to =" https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.releases.target.path}/*;bt_package=${bintray.package};bt_version=${bintray.package.version};publish=1" />
121+ </compositemapper >
122+ </apply >
123+ </target >
124+
125+ <target name =" push-p2-repo-zipped-to-bintray" >
126+ <apply executable =" curl" parallel =" false" relative =" true" addsourcefile =" false" >
127+ <arg value =" -XPUT" />
128+ <targetfile />
129+
130+ <fileset dir =" ${target}" includes =" *.zip" />
131+
132+ <compositemapper >
133+ <mergemapper to =" -T" />
134+ <globmapper from =" *" to =" ${target}/*" />
135+ <mergemapper to =" -u${bintray.user}:${bintray.apikey}" />
136+ <globmapper from =" *" to =" https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.zip.path}/*;bt_package=${bintray.package};bt_version=${bintray.package.version};publish=1" />
137+ </compositemapper >
138+ </apply >
139+ </target >
140+
141+ <target name =" push-composite-to-bintray" depends =" getMajorMinorVersion" >
142+ <apply executable =" curl" parallel =" false" relative =" true" addsourcefile =" false" >
143+ <arg value =" -XPUT" />
144+ <targetfile />
145+
146+ <fileset dir =" ${target}/${composite.repository.directory}" />
147+
148+ <compositemapper >
149+ <mergemapper to =" -T" />
150+ <globmapper from =" *" to =" ${target}/${composite.repository.directory}/*" />
151+ <mergemapper to =" -u${bintray.user}:${bintray.apikey}" />
152+ <globmapper from =" *" to =" https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.composite.path}/${majorMinorVersion}/*;publish=1" />
153+ </compositemapper >
154+ </apply >
155+ </target >
156+
157+ <target name =" push-main-composite-to-bintray" >
158+ <apply executable =" curl" parallel =" false" relative =" true" addsourcefile =" false" >
159+ <arg value =" -XPUT" />
160+ <targetfile />
161+
162+ <fileset dir =" ${target}/${main.composite.repository.directory}" />
163+
164+ <compositemapper >
165+ <mergemapper to =" -T" />
166+ <globmapper from =" *" to =" ${target}/${main.composite.repository.directory}/*" />
167+ <mergemapper to =" -u${bintray.user}:${bintray.apikey}" />
168+ <globmapper from =" *" to =" https://api.bintray.com/content/${bintray.owner}/${bintray.repo}/${bintray.composite.path}/*;publish=1" />
169+ </compositemapper >
170+ </apply >
171+ </target >
172+
173+ </project >
0 commit comments