source: main/trunk/release-kits/shared/core/ant-scripts/shared.xml@ 22145

Last change on this file since 22145 was 22145, checked in by sjm84, 14 years ago

Fixed an error with rk3 looking in the wrong place for Imagemagick and GhostScript due to recent rk2 changes

File size: 19.6 KB
RevLine 
[16173]1<?xml version="1.0" encoding="utf-8" ?>
2<project name="rk-init">
3
[20600]4 <!-- CHECK PRE-CONDITIONS -->
5 <target name="init">
[16173]6
[20600]7 <!-- load in static properties from build.properties -->
8 <property file="${rk.name}-build.properties" />
[16199]9
[21654]10 <!-- load environment properties -->
11 <property environment="env"/>
12
[20600]13 <!-- CONSTANTS (overridable in build.properties) -->
[16173]14
[20600]15 <!-- svn root -->
16 <property name="svn.root" value="http://svn.greenstone.org" />
17
18 <!-- the minimum version of java which the installer should be run with (this gets used in search4j) -->
19 <property name="java.min.version" value="1.4.0_00"/>
[16173]20
[20600]21 <!-- create a localised basedir property -->
22 <path id="basedir.path"><pathelement location="${basedir}"/></path>
23 <property name="basedir.local" refid="basedir.path"/>
[16199]24
[21593]25 <!-- size of resource chunks (windows wrapper) -->
[21521]26 <property name="resources.chunksize" value="8388608"/>
[21593]27
28 <!-- the extra space for the dmg image in KB (mac wrapper) -->
29 <property name="dmg.overhead" value="2048"/>
30
[20600]31 <!-- current date and time -->
32 <tstamp>
33 <format property="current.month" pattern="MMM"/>
34 <format property="current.year" pattern="yyyy"/>
35 <format property="date" pattern="yyyy.MM.dd"/>
36 </tstamp>
[17344]37
[20600]38 <!-- BUNDLED JAVA INFO -->
39 <!-- the bundled javas are kept in shared/linux/wrapper and shared/windows/wrapper in the repository -->
40 <!-- change this info when the bundled version changes -->
[20937]41 <property name="java.extracted" value="jre"/> <!-- set this to the name of the top level directory in the above archive -->
42
[20600]43 <!-- linux -->
44 <property name="linux-java.installer" value="jre_bin"/>
45 <property name="bundled.version.linux-java" value="1.6.0_05"/> <!-- set this to the version number of java in the above archive -->
46 <property name="component.bytesize.linux-java" value="101245987"/> <!-- set this to the size of the extract archive -->
[17518]47
[20600]48 <!-- windows -->
49 <property name="windows-java.installer" value="jre.exe"/>
50 <property name="bundled.version.windows-java" value="1.6.0_07"/> <!-- set this to the version number of java in the above archive -->
51 <property name="component.bytesize.windows-java" value="75000000"/> <!-- set this to the size of the extract archive -->
[17467]52
[20600]53 <!-- version numbers of other bundled things -->
54 <property name="bundled.version.imagemagick" value="6.4.3"/>
55 <property name="bundled.version.ghostscript" value="8.63"/>
56 <property name="bundled.version.tomcat" value="6.0.20"/>
[16173]57
[20600]58 <!-- CLASSPATH -->
59 <path id="project.classpath">
[16173]60
[20600]61 <!-- our classes -->
[21388]62 <fileset dir="${rk.home}/shared/core">
[20600]63 <include name="ant-tasks/antelope/AntelopeTasks_3.4.2.jar"/>
64 <include name="ant-tasks/orangevolt/roxes-win32forjava-1.1.1.jar"/>
65 <include name="ant-tasks/orangevolt/orangevolt-ant-tasks-1.3.8.jar"/>
66 <include name="ant-tasks/greenstone/anttasks.jar"/>
67 <include name="ant-tasks/7z-ant/7z.jar"/>
68 <include name="lib/crypt.jar"/>
69 <include name="lib/serializer.jar"/>
70 <include name="lib/xalan.jar"/>
71 <include name="lib/xercesImpl.jar"/>
72 <include name="lib/xml-apis.jar"/>
73 <include name="ant-installer/lib/ant-installer-ext.jar"/>
74 <include name="ant-installer/lib/ant-installer.jar"/>
75 </fileset>
[16173]76
[20600]77 </path>
[16173]78
[20600]79 <!-- SELF DEFINED TASKS AND TYPES -->
80 <taskdef name="if" classname="ise.antelope.tasks.IfTask" classpathref="project.classpath"/>
81 <taskdef name="try" classname="ise.antelope.tasks.TryTask" classpathref="project.classpath"/>
82 <taskdef name="math" classname="ise.antelope.tasks.MathTask" classpathref="project.classpath"/>
83 <taskdef name="sevenzip" classname="org.apache.tools.ant.SevenZip" classpathref="project.classpath"/>
84 <taskdef name="installer" classname="org.tp23.antinstaller.taskdefs.Installer" classpathref="project.classpath"/>
85 <typedef name="rsr" classname="org.greenstone.anttasks.RegexSearchReplace" classpathref="project.classpath"/>
86 <typedef name="dcff" classname="org.greenstone.anttasks.DeleteChunkFromFile" classpathref="project.classpath"/>
87 <typedef name="rsplit" classname="org.greenstone.anttasks.SplitResource" classpathref="project.classpath"/>
88 <typedef name="get-property-value" classname="org.greenstone.anttasks.GetPropertyValue" classpathref="project.classpath"/>
[22092]89
90 <!-- default revision and branch path -->
91 <property name="branch.revision" value="HEAD" />
92 <property name="branch.tag.name" value="trunk" />
93 <property name="branch.tag.version" value="" />
94
95 <if><bool><equals arg1="${branch.tag.name}" arg2="trunk" /></bool>
96
97 <property name="branch.path" value="${branch.tag.name}" />
98
99 <else>
100 <if>
101 <bool>
102 <not><equals arg1="${branch.tag.version}" arg2="" /></not>
103 </bool>
104 <property name="branch.path" value="${branch.tag.name}/${branch.tag.version}" />
105 <else>
106 <fail>Cannot use use a branch.tag.name that is not 'trunk' without also defining branch.tag.version</fail>
107 </else>
108 </if>
109 </else>
110 </if>
[17344]111
[20600]112 <!-- DATES IN DIFFERENT LANGUAGES -->
[21388]113 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="ar.Dates.${current.month}" outputProperty="month.ar"/>
114 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="ca.Dates.${current.month}" outputProperty="month.ca"/>
115 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="el.Dates.${current.month}" outputProperty="month.el"/>
116 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="es.Dates.${current.month}" outputProperty="month.es"/>
117 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="fr.Dates.${current.month}" outputProperty="month.fr"/>
118 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="lv.Dates.${current.month}" outputProperty="month.lv"/>
119 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="mr.Dates.${current.month}" outputProperty="month.mr"/>
120 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="ro.Dates.${current.month}" outputProperty="month.ro"/>
121 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="ru.Dates.${current.month}" outputProperty="month.ru"/>
122 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="vi.Dates.${current.month}" outputProperty="month.vi"/>
123 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="zh.Dates.${current.month}" outputProperty="month.zh"/>
124 <get-property-value propertiesFile="${rk.home}/shared/core/lib/dates.properties" propertyName="default.Dates.${current.month}" outputProperty="month.default"/>
[19006]125
[21623]126
[16173]127 <!-- version number -->
[21623]128 <if><bool><not><isset property="version"/></not></bool>
129 <fail>Version number not set. Check that the file '${rk.name}-build.properties' exists and defines property 'version'.</fail>
[16173]130 </if>
131 <property name="app.version" value="${version}"/>
132
[20337]133 <!-- work out rk.os -->
134 <if>
135 <bool>
136 <or>
137 <equals arg1="${rk.os}" arg2="linux"/>
138 <equals arg1="${rk.os}" arg2="mac"/>
139 <equals arg1="${rk.os}" arg2="windows"/>
140 </or>
141 </bool>
142 <echo>Using user-specified value for rk.os: '${rk.os}'</echo>
143
144 <else><if>
145 <bool><equals arg1="${os.name}" arg2="Linux"/></bool>
146 <property name="rk.os" value="linux"/>
147
148 <else><if>
149 <bool><equals arg1="${os.name}" arg2="Mac OS X"/></bool>
150 <property name="rk.os" value="mac"/>
151
152 <else><if>
153 <bool>
154 <or>
155 <equals arg1="${os.name}" arg2="Windows 95"/>
156 <equals arg1="${os.name}" arg2="Windows 98"/>
157 <equals arg1="${os.name}" arg2="Windows 2000"/>
158 <equals arg1="${os.name}" arg2="Windows XP"/>
159 <equals arg1="${os.name}" arg2="Windows NT"/>
160 <equals arg1="${os.name}" arg2="Windows ME"/>
161 <equals arg1="${os.name}" arg2="Windows Vista"/>
[22092]162 <equals arg1="${os.name}" arg2="Windows 7"/>
[20337]163 </or>
164 </bool>
165 <property name="rk.os" value="windows"/>
166
167 <else>
168 <fail>Can't work out what to set rk.os to. Please report this to [email protected] . In the mean time, manually set rk.os to 'windows', 'mac', or 'linux' by reinvoking the release kit with, for example, '-Drk.os=windows'</fail>
169
170 </else></if></else></if></else></if></else></if>
171
[21593]172 <!-- set os.suffix and os.shell -->
[20337]173 <if><bool><equals arg1="${rk.os}" arg2="mac"/></bool>
174 <property name="os.suffix" value="MacOS-intel"/>
[21593]175 <property name="os.shell" value="darwin"/>
[20337]176 </if>
177 <property name="os.suffix" value="${rk.os}"/>
[21593]178 <property name="os.shell" value="${rk.os}"/>
[20337]179
[21623]180 <!-- set os.script.format -->
181 <if><bool><or><equals arg1="${rk.os}" arg2="linux"/><equals arg1="${rk.os}" arg2="mac"/></or></bool>
182 <property name="os.script.format" value="sh"/>
183 <else><if><bool><equals arg1="${rk.os}" arg2="windows"/></bool>
184 <property name="os.script.format" value="bat"/>
185 </if></else></if>
186
[16681]187 <!-- show important properties -->
188 <echo level="info">Version (version): ${version}</echo>
[21608]189 <echo level="info">Major Version (version.major): ${version.major}</echo>
[16681]190 <echo level="info">Branch Path (branch.path): ${branch.path}</echo>
[19152]191 <echo level="info">Date (date): ${date}</echo>
[16681]192 <echo level="info">Current Month (current.month): ${current.month}</echo>
193 <echo level="info">Current Year (current.year): ${current.year}</echo>
[20337]194 <echo level="info">Operating System (rk.os): ${rk.os}</echo>
195 <echo level="info">Operating System Suffix (os.suffix): ${os.suffix}</echo>
[21634]196 <echo level="info">Operating System Script format (os.script.format): ${os.script.format}</echo>
197 <echo level="info">Operating System Shell (os.shell): ${os.shell}</echo>
[21623]198 <!--
199 <echo level="info">Current Date</echo>
200 <echo level="info">ar: ${month.ar} ${current.year}</echo>
201 <echo level="info">ca: ${month.el} ${current.year}</echo>
202 <echo level="info">el: ${month.el} ${current.year}</echo>
203 <echo level="info">es: ${month.es} ${current.year}</echo>
204 <echo level="info">fr: ${month.fr} ${current.year}</echo>
205 <echo level="info">lv: ${month.lv} ${current.year}</echo>
206 <echo level="info">mr: ${month.mr} ${current.year}</echo>
207 <echo level="info">ro: ${month.ro} ${current.year}</echo>
208 <echo level="info">ru: ${month.ru} ${current.year}</echo>
209 <echo level="info">vi: ${month.vi} ${current.year}</echo>
210 <echo level="info">zh: ${month.zh} ${current.year}</echo>
211 <echo level="info">default: (${month.default} ${current.year})</echo>
212 -->
[16173]213 </target>
214
[21630]215 <!-- show the core properties of all release-kits -->
216 <target name="core-properties">
[21652]217 <echo>version (required) the version string for the release</echo>
218 <echo>branch.path (optional) the branch of Greenstone to make a release of. Eg: tags/2.81. Default: trunk.</echo>
219 <echo>branch.revision (optional) the revision of Greenstone to make a release of. Eg: 18273. Default: HEAD.</echo>
[21630]220 </target>
221
[21623]222 <!-- a target to strip any directory of .svn folders -->
[17346]223 <target name="strip-svn-dirs">
224 <delete includeemptydirs="true">
225 <fileset dir="${dir}" defaultexcludes="false">
226 <include name="**/.svn/**" />
227 <include name="**/.svn/" />
228 <include name=".svn/**" />
229 <include name=".svn/" />
230 </fileset>
231 </delete>
232 </target>
233
[21623]234 <!-- target to insert the uninstaller into 'compiled' and compile it -->
235 <target name="insert-and-compile-uninstaller">
[17589]236
[17898]237 <!-- create working build directory -->
[21623]238 <mkdir dir="compiled/uninstaller/build/resources" />
[17898]239
240 <!-- copile to build -->
241 <javac
[21388]242 srcdir="${rk.home}/shared/core/uninstaller"
[21623]243 destdir="compiled/uninstaller/build" />
[17898]244
245 <!-- copy language bundle into place -->
246 <native2ascii
247 implementation="sun"
[21388]248 src="${rk.home}/shared/core/language-strings"
[21623]249 dest="compiled/uninstaller/build/resources"/>
[17898]250
251 <!-- jar it all up -->
252 <jar
[21623]253 destfile="compiled/uninst.jar"
[21388]254 manifest="${rk.home}/shared/core/uninstaller/manifest.mf"
[21623]255 basedir="compiled/uninstaller/build" />
[17898]256
[21630]257 <!-- clean up build directory -->
258 <delete dir="compiled/uninstaller"/>
259
[21623]260 <!-- put the associated script in place -->
261 <copy file="${rk.home}/shared/core/uninstaller/Uninstall.${os.script.format}" todir="compiled"/>
[17898]262
263 </target>
264
[21623]265 <!-- target to set all the version numbers in a greenstone2 or gs2build directory -->
[20205]266 <target name="gsdl-set-version-numbers">
[19472]267
[20213]268 <if><bool><available file="${gsdl.basedir}/common-src/src/lib/gsdlconf.h"/></bool>
269 <rsr file="${gsdl.basedir}/common-src/src/lib/gsdlconf.h" pattern="(#define GSDL_VERSION) &quot;.*&quot;" replacement="$1 &quot;${version}&quot;" />
[21623]270 </if>
[20205]271
[20214]272 <if><bool><available file="${gsdl.basedir}/etc/VERSION"/></bool>
[20213]273 <rsr file="${gsdl.basedir}/etc/VERSION" pattern="(gsdl version: ).*" replacement="$1${version}" />
[21623]274 </if>
[20205]275
[20214]276 <if><bool><available file="${gsdl.basedir}/lib/java/server.properties"/></bool>
[20213]277 <rsr file="${gsdl.basedir}/lib/java/server.properties" pattern="^(Server2Control.Version[:=]).*" replacement="$1${version}" />
[21623]278 </if>
[20205]279
[20214]280 <if><bool><available file="${gsdl.basedir}/lib/java/log4j.properties.in"/></bool>
[20213]281 <rsr file="${gsdl.basedir}/lib/java/log4j.properties.in" pattern="^(log4j.category.org.greenstone.server[:=].*)INFO(.*)" replacement="$1WARN$2" />
[21623]282 </if>
[20205]283
284 <antcall target="gsdl-set-dates-in-readmes"><param name="gsdl.basedir" value="${gsdl.basedir}"/></antcall>
285
286 </target>
287
[21623]288 <!-- target to set dates in readme files -->
[20213]289 <target name="gsdl-set-dates-in-readmes">
290
291 <!-- en -->
292 <if><bool><available file="${gsdl.basedir}/READMEen.txt"/></bool>
293 <rsr file="${gsdl.basedir}/READMEen.txt">
294 <job pattern="^(Date\s*)(.*)" replacement="$1${month.default} ${current.year}" />
295 <job pattern="^(Version\s*)(.*)" replacement="$1${version}" />
296 </rsr>
297 </if>
298
299 <!-- ar -->
300 <if><bool><available file="${gsdl.basedir}/READMEar.txt"/></bool>
301 <rsr file="${gsdl.basedir}/READMEar.txt">
302 <job pattern="(التاريخ : \s*)(.*)" replacement="$1${month.ar} ${current.year}"/>
303 <job pattern="(النسخه : \s*)(.*)" replacement="$1${version}"/>
304 </rsr>
305 </if>
306
307 <!-- es -->
308 <if><bool><available file="${gsdl.basedir}/READMEes.txt"/></bool>
309 <rsr file="${gsdl.basedir}/READMEes.txt">
310 <job pattern="^(Fecha\s*)(.*)" replacement="$1${month.es} de ${current.year}"/>
311 <job pattern="^(Versi.?n\s*)(.*)" replacement="$1${version}"/>
312 </rsr>
313 </if>
314
315 <!-- fr -->
316 <if><bool><available file="${gsdl.basedir}/READMEfr.txt"/></bool>
317 <rsr file="${gsdl.basedir}/READMEfr.txt">
318 <job pattern="^(Date\s*)(.*)" replacement="$1${month.fr} ${current.year}"/>
319 <job pattern="^(Version\s*)(.*)" replacement="$1${version}"/>
320 </rsr>
321 </if>
322
323 <!-- ru -->
324 <if><bool><available file="${gsdl.basedir}/READMEru.txt"/></bool>
325 <rsr file="${gsdl.basedir}/READMEru.txt">
326 <job pattern="^(Дата\s*)(.*)" replacement="$1${month.ru} ${current.year}"/>
327 <job pattern="^(ВерсОя\s*)(.*)" replacement="$1${version}"/>
328 </rsr>
329 </if>
330
331 </target>
332
[21648]333 <!-- target to set version numbers in gli -->
334 <target name="gli-set-version-numbers">
335
336 <!-- DICTIOANRY FILES (AboutDialog.Date) -->
337 <echo level="info">Changing AboutDialog.Date in all dictionaries</echo>
338
339 <rsr file="${glibasedir}/classes/dictionary_ar.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.ar} ${current.year})" />
340 <rsr file="${glibasedir}/classes/dictionary_ca.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.ca} de ${current.year})" />
341 <rsr file="${glibasedir}/classes/dictionary_el.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.el} ${current.year})" />
342 <rsr file="${glibasedir}/classes/dictionary_es.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.es} ${current.year})" />
343 <rsr file="${glibasedir}/classes/dictionary_fr.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.fr} ${current.year})" />
344 <rsr file="${glibasedir}/classes/dictionary_lv.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.lv} ${current.year})" />
345 <rsr file="${glibasedir}/classes/dictionary_mr.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.mr} ${current.year})" />
346 <rsr file="${glibasedir}/classes/dictionary_ro.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.ro} ${current.year})" />
347 <rsr file="${glibasedir}/classes/dictionary_ru.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.ru} ${current.year})" />
348 <rsr file="${glibasedir}/classes/dictionary_vi.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.vi} ${current.year})" />
349 <rsr file="${glibasedir}/classes/dictionary_zh.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.zh} ${current.year})" />
350 <rsr file="${glibasedir}/classes/dictionary.properties" pattern="AboutDialog.Date:.*" replacement="AboutDialog.Date:(${month.default} ${current.year})" />
351
352 <!-- GLI GATHERER -->
353 <echo level="info">Changing version number in gli Gatherer</echo>
354 <rsr file="${glibasedir}/src/org/greenstone/gatherer/Gatherer.java" pattern="^(.*)String\s*PROGRAM_VERSION\s*=\s*&quot;(.*)&quot;" replacement="$1String PROGRAM_VERSION = &quot;${version}&quot;"/>
355
356 <!-- CONFIG XML FILES -->
357 <echo level="info">Changing configuration version in classes/xml/config.xml</echo>
358 <rsr file="${glibasedir}/classes/xml/config.xml" pattern="^(\s*&lt;Configuration.* version=&quot;)[^&quot;]*(&quot;.*&gt;)" replacement="$1${version}$2"/>
359
360 <echo level="info">Changing configuration version in gli/classes/xml/configRemote.xml</echo>
361 <rsr file="${glibasedir}/classes/xml/configRemote.xml" pattern="^(\s*&lt;Configuration.* version=&quot;)[^&quot;]*(&quot;.*&gt;)" replacement="$1${version}$2"/>
362
363 </target>
364
365 <!-- target to tidy gli up for distribution -->
366 <target name="gli-tidy-for-dist">
367 <!-- delete unneeded things -->
368 <delete file="${glibasedir}/.greenstonestore"/>
369 <delete dir="${glibasedir}/classes/META-INF"/>
370 <delete dir="${glibasedir}/classes/org"/>
371 <delete dir="${glibasedir}/classes/images"/>
372 <delete dir="${glibasedir}/jar"/>
373 </target>
374
375
[21623]376 <!-- target to archive and compress a given component -->
377 <target name="create-component">
[22145]378 <mkdir dir="components"/>
379 <if>
380 <bool>
381 <equals arg1="${rk.name}" arg2="rk2"/>
382 </bool>
383
384 <if>
385 <bool>
386 <or>
387 <equals arg1="${component}" arg2="imagemagick"/>
388 <equals arg1="${component}" arg2="ghostscript"/>
389 </or>
390 </bool>
391
392 <zip destfile="components/${component}.comp" compress="false">
393 <zipfileset dir="compiled/bin/${rk.os}">
394 <patternset refid="greenstone${version.major}.${component}.component"/>
395 </zipfileset>
396 </zip>
397
398 <else>
399 <zip destfile="components/${component}.comp" compress="false">
400 <zipfileset dir="compiled">
401 <patternset refid="greenstone${version.major}.${component}.component"/>
402 </zipfileset>
403 </zip>
404 </else>
405 </if>
406
407 <else>
408 <zip destfile="components/${component}.comp" compress="false">
409 <zipfileset dir="compiled">
410 <patternset refid="greenstone${version.major}.${component}.component"/>
411 </zipfileset>
412 </zip>
413 </else>
414 </if>
415 <!-- windows -->
416 <if><bool><equals arg1="${rk.os}" arg2="windows"/></bool>
417 <exec executable="${rk.home}/shared/windows/7za/7za.exe" dir="components"><arg line="a -t7z -mx=9 ${component}.lzma ${component}.comp"/></exec>
418
419 <!-- linux, mac -->
420 <else><if><bool><or><equals arg1="${rk.os}" arg2="linux"/><equals arg1="${rk.os}" arg2="mac"/></or></bool>
421 <sevenzip task="encode" input="components/${component}.comp" output="components/${component}.lzma" dictionnary="26"/>
[20532]422
423 <!-- else warn -->
424 <else>
[22145]425 <fail>this target does not support this os (was a new release-kit os added?)</fail>
426
427 </else></if></else></if>
[21623]428 </target>
[22145]429
[16173]430</project>
Note: See TracBrowser for help on using the repository browser.