## promoteToEclipse.*.properties
## specific version of promoteToEclipse.sh properties
##
## NOTE:
## You must rename this file to promoteToEclipse.$subprojectName.properties for it to be 
## found when using the -sub flag; otherwise you'll have to use the -f flag to specify
## a CUSTOM-named properties file

# product being built (folder name prefix)
projectName=emft
projectNameVanity=`echo $projectName $subprojectName | tr "a-z" "A-Z"`; # or something else manually assigned

# used to determine the actual name of the SDK zip (when builds are aliased)
SDKfilenamepattern="$projectName-$subprojectName-SDK-*.zip"

# cvs modules and aliases to use when checking out: this will be used like this:
#   cvs -d $eclipseCVSRep $quietCVS co -P -d uml2 org.eclipse.$projectName/$subprojectName
cvsModulesArray=( "$subprojectName org.eclipse.$projectName/$subprojectName" );

# the following two arrays must be the same size (or else the second one will default to blank)
javadocModuleArray=( "$projectName-$subprojectName" ); # array, project-subproject, for the name of the zip scp'd to remote, eg. foo-bar-doc.zip
# if "", create in $projectName/javadoc; if "/path", create in $projectName/$subprojectName/javadoc 
javadocFolderArray=( "/$subprojectName" ); # array of path fragments
# list of targets to use when executing fixJavadocs.sh
javadocTargetArray=( "-sub $subprojectName" );

# publisher of newsgroup announcements
newsgroupPublisherEmail="Lei Zhang <lzhangl@cn.ibm.com>"
newsgroup=eclipse.modeling.mdt.$subprojectName
# to thread posts under an existing post (or posts) enter the slash-escaped Message-ID for which this is a reply,
# eg: <du7hic\$qos\$1@utils.eclipse.org>
newsgroupThreadReferences=""

# default eclipse.org, build server, mapfile server usernames
user=$USER
# if no value set here or by -userIES flag, default to -user flag or value in properties file
userIES=

# group permissions on eclipse.org so that anyone can change files
eclipseUserGroup="$projectName-home"
eclipsePermsDir=2775
eclipsePermsFile=664

# group permissions on build box so that anyone can change files
buildUserGroup="www"
buildPermsDir=2775
buildPermsFile=664

# IES map file branch (required)
branchIES=R3_2_maintenance

# IES map file template: use "buildIDactual" and "webPath" as placeholders
IESmapfileArray=( 
"$projectName-$subprojectName-runtime-buildIDactual.zip=webPath | | | runtime | $subprojectName" 
"$projectName-$subprojectName-SDK-buildIDactual.zip=webPath     | | | sdk | $subprojectName" ); # array of lines

### DEFAULT BEHAVIOUR OPTIONS ###

# default setting for whether to do or skip the drop upload section: 0 = do, 1 = skip
dodrop=1

# default setting for whether to do or skip the javadoc section: 0 = do, 1 = skip
dodocs=1

# default setting for whether to do or skip the Update Manager jars section: 0 = do, 1 = skip
UMjars=1

#default buildID
buildID=

#default branch
branch=1.0.1
cvsbranch=R1_0_maintenance

#do RSS feed file update?
RSS=1

# do search cvs update?
searchCVS=1
# how long to block before giving up (in seconds, eg., 1200 for 20 mins wait)
searchCVSTimeout=1200

#do IES mapping file update?
IES=0

# debug output
debug=0 ; # values can be 0,1,2

#clean up /tmp folder?
noclean=0;

# compare drops folder after scp upload?
noCompareDropsFolders=0 ; # default 0, do compare; set 1 to bypass or pass in querystring

# compare UM folder after scp upload?
noCompareUMFolders= ; # default 0, do compare; set 1 to bypass or pass in querystring

# announce new build in newsgroup? (default 0)
announce=0;

### SERVER & PATH CONFIG OPTIONS ###

#server on which builds occur (need to ssh to this box as $user@$buildServerFullName)
buildServerFullName=emf.torolab.ibm.com

#server on which eclipse's production CVS is located (need to ssh to this box as $user@$eclipseServerFullName)
eclipseServerFullName=dev.eclipse.org

#server on which eclipse's production files are located (downloads, javadoc, etc.): ssh as $user@$downloadServerFullName)
downloadServerFullName=download1.eclipse.org

#paths on \$downloadServerFullName where files are published
projectWWWDir=/home/data/httpd/download.eclipse.org/modeling/mdt/$subprojectName
projectDropsDir=$projectWWWDir/$subprojectName/downloads/drops

#paths to build base, scripts, and drops on build server (emf.torolab)
baseBuildDir=/home/www-data/build/$projectName
buildScriptsDir=$baseBuildDir/scripts
buildDropsDir=$baseBuildDir/$subprojectName/downloads/drops

# path to website on build server (emf.torolab)
localWebDir=/var/www/html/modeling/mdt/$subprojectName

# urls 
releaseNotesURL=http://www.eclipse.org/modeling/mdt/news/relnotes.php?project=$subprojectName
downloadsURL=http://www.eclipse.org/modeling/mdt/downloads/?proj=$subprojectName

### ANT OPTIONS ###
ANT=/opt/apache-ant-1.6/bin/ant

### DEFAULT BEHAVIOUR AND JVM OPTIONS :: buildUpdate.sh ###

# specify the correct java home & vm used to run the build
javaHome=/opt/ibm-java2-1.4
vm=$javaHome/bin/java

# zips to unpack for UM jar generation
filePrefixesToUnzipArray=( "$projectName-$subprojectName-SDK-" "$projectName-$subprojectName-automated-tests-" "$projectName-$subprojectName-examples-" );

# ant script and target to be executed
antScript=org.eclipse.releng.generators/buildProductUpdateJars.xml
target=run

# default operations
builder=1 # get builder packages from cvs
promote=0 # don't promote by default
skipjars=0 # when promoting, upload all jars (don't skip)
cleanup=1 # delete temp stuff when done

# compare UM folder after scp upload?
noCompareUMFolders=0 ; # default 0, do compare; set 1 to bypass or pass in querystring

# do 4-part jars?
no4thPart=0;

# where to get releng.generators.ProductUpdateBuilder, jars & ant scripts
relengGeneratorsCVSPath=org.eclipse.$projectName/releng/common/updates/org.eclipse.releng.generators

# use a default value for basebuilderBranch? 0 = no, 1 = yes
useDefaultBasebuilderBranch=0


