## 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=m2m
subprojectName=qvtoml
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"

# 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="Radek Dvorak <radek.dvorak@borland.com>"
newsgroup=eclipse.modeling.$projectName.$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"admin
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=

# 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=2.0.0
cvsbranch=HEAD

#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

#close bugzillas in ASSIGNED state?
bugz=0
# default setting for whether to do or skip checking for the existence of the new build in the release notes / database before attempting to close bugs: 1 = do, 0 = skip
checkReleaseExists=1

# 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=`hostname`

#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/$projectName
projectDropsDir=$projectWWWDir/$subprojectName/downloads/drops

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

# path to website on build server 
localWebDir=/var/www/html/modeling/$projectName

# urls 
releaseNotesURL=http://www.eclipse.org/modeling/$projectName/news/relnotes.php?project=$subprojectName
downloadsURL=http://www.eclipse.org/modeling/$projectName/downloads/?project=$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/sun-java2-1.4
vm=$javaHome/bin/java

# zips to unpack for UM jar generation
filePrefixesToUnzipArray=( "$projectName-$subprojectName-Master-" );

# 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=releng-common/tools/updates/org.eclipse.releng.generators

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

# See http://wiki.eclipse.org/Modeling_Project_Releng/Releasing#Contributing_To_Ganymede_Update_Site
# pattern to use when searching for features to include in coordsite; defaults to ".*eclipse/features/org.eclipse..*(${subprojectName}|${subprojectName}.sdk)_.*\/$" 
coordsiteFeaturePattern=""
# pattern to use when setting feature to include in coordsite's main feature ('Models and Model Development'); all other matching features will go in 'Enabling Features'
coordsiteMainFeaturePattern=""
