## 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=gmp
subprojectName=gmf-notation
projectNameVanity="GMF Notation"

# used to determine the actual name of the SDK zip (when builds are aliased)
SDKfilenamepattern="gmf-sdk-notation-*.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="Anthony Hunter <anthonyh@ca.ibm.com>"
newsgroup=eclipse.modeling.$projectName
# 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=ahunter

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

# IES map file template: use "buildIDactual" and "webPath" as placeholders
IESmapfileArray=( 
"gmf-sdk-buildIDactual.zip=webPath  | | | sdk | $subprojectName"
"gmf-runtime-buildIDactual.zip=webPath  | | | runtime | $subprojectName"
"gmf-examples-buildIDactual.zip=webPath  | | | sdk | $subprojectName-examples"
"gmf-tests-buildIDactual.zip=webPath  | | | sdk | $subprojectName-tests" ); # 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=0

# 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.4.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
# change ASSIGNED bugs to FIXED
bugz=0 
# enable waiting for the build to show up in the relnotes database
checkReleaseExists=1

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

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

#server on which eclipse's production files are located (downloads, javadoc, etc.): ssh as $user@$downloadServerFullName)
downloadServerFullName=build.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 (emf.torolab)
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-sdk-" "$projectName-sdk-experimental-" "$projectName-tests-" "$projectName-examples-" );
filePrefixesToUnzipArray=( "$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

# pattern to use when searching for features to include in coordsite; defaults to ".*eclipse/features/org.eclipse..*(${subprojectName}|${subprojectName}.sdk)_.*\/$" 
#coordsiteFeaturePattern=""
#coordsiteMainFeaturePattern=""
