## 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 <dvorak.radek@gmail.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=3.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=""
