Skip to main content
summaryrefslogblamecommitdiffstats
blob: 08860aa986cc75adcacc3b17e56e0a7a57c5ab48 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                   






                                                                         

                     




                                                                                            
                             



                                                                        

                            



                                                                








                                              

                                                                             






                                                               

            

                                             
            
                    



      




                                                                        



                         
                                 



                              

                                               



                                     




                               


                    



                 


                                





                             



                      

                


                           


                     



                             


                                
                           



                                                 



                                



                                                    



                               

               
                          

                                                       




                                                                                      












                                                                



                                                           






                                      





                                                                        













                                             




                                                                                                       










                               




                                 




                               




                                                                        




                                             

 
                                                 


                                

                             




                        

                                    
                                                  

                                     
                                                       
      
                                        

 



                                                       




                               
                                                              


 
                                                                                                              




                                                                                                 
                         




                             





                             
                               
                   

                         


                         


                                     


                                                
                                
                                  


                                         

                               
                                   

                                                   
                               



                                

                                                                                            
         
        
              
 




                                                                                                 
                                                                     























                                                                      

 
                                           
                                                                                                 











                                                       

 


                                                                                                 
                                                                     









                                                                                                                                                                  
 
 
                                                               

                                                                                                 



                          















                                         
                                       
                                     
                                 
 
                                         


                                                            

                                                                                            


                     
                                                                                             
        







                                                                

        
              
 
 
                                                                       




                                                                                                 




                                     
 
                                       
                                     
                                 
 
                                         



                                                            

                                                                                            




















                                                                       

 



                                                                                                 













                                                                               

 
 




                                                                                                 










                                                                                                       

                                                                                                             




                                                                                                                   



                                                                                                                                  







                                                                                                           





                                                                                                 




                         
                                                                                                    


                                  














                                                                                                                                   



                                                                             
 




                                                                                                 




                         

                                                                                                 








                                                                             
 
 



                                                                                                 






















                                                                                                   

 

























                                                                                                   




                                                                                                                                                              






                                                                                         

                                                                          






                                                                                             
                                         
                                                        
                                                                           



                                         
                                                                     
      


 



                                                                                                 
















                                                                       

 



                                                                                                 
























                                                                                                                                   

 
 
                                                                                             




                                                                                                 
                                                   






                          
                                
                                   
                                    

                                 
                                                                                       
 















                                                                 
        
 
 




                                                                                                                                                              













                                                     
                     
        








                                                                                                                                                              











                                                     
                                                                                               



                                                                                         
                                                                       








                                                                                                             

 


                                                                                            












                                                                                                                                                                                                              



                                                                                            



                                                                            

 



                                                                                                 








                                                                                                                                      




















                                                                                                                           

        
 






















                                                                                                                             


























                                                                                           
       
 





                                                                        
 






                                                           







                                                                                  







                                                                             







                                                                                  


 
#!/usr/bin/env bash
# this is not really to be executed, but sourced where needed

# general purpose utility for "hard exit" if return code not zero.
# especially useful to call/check after basic things that should normally
# easily succeeed.
# usage:
#   checkForErrorExit $? "Failed to copy file (for example)"
checkForErrorExit () 
{
    # arg 1 must be return code, $?
    # arg 2 (remaining line) can be message to print before exiting do to non-zero exit code
    exitCode=$1
    shift
    message="$*"
    if [[ -z "${exitCode}" ]]
    then
        echo "PROGRAM ERROR: checkForErrorExit called with no arguments"
        exit 1
    fi

    if [[ -z "${message}" ]]
    then
        echo "WARNING: checkForErrorExit called without message"
        message="(Calling program provided no message)"
    fi

    # first make sure exit code is well formed
    if [[ "${exitCode}" =~ [0] ]]
    then
        #echo "exitcode was zero"
        exitrc=0
    else
        if [[ "${exitCode}" =~ ^-?[0-9]+$ ]]  
        then
            #echo "exitcode was indeed a legal, non-zero numeric return code"
            exitrc=$exitCode
        else
            #echo "exitode was not numeric, so will force to 1"
            exitrc=1
        fi  
    fi 

    if [[ $exitrc != 0 ]] 
    then
        echo
        echo "   ERROR. exit code: ${exitrc}"
        echo "   ERROR. message: ${message}"
        echo
        exit $exitrc
    fi
}



# USAGE: fn-git-clone URL [BRANCH [TARGET_DIR] ]
#   URL: file:///gitroot/platform/eclipse.platform.releng.aggregator.git
#   BRANCH: R4_2_maintenance 
#   TARGET_DIR: e.p.releng.aggregator
fn-git-clone () 
{
    URL="$1"; shift
    if [ $# -gt 0 ]; then
        BRANCH_CMD="-b $1"; shift
    fi
    if [ $# -gt 0 ]; then
        TARGET_DIR="$1"; shift
    fi
    echo git clone $BRANCH_CMD $URL $TARGET_DIR
    git clone $BRANCH_CMD $URL $TARGET_DIR
}

# USAGE: fn-git-checkout BRANCH | TAG
#   BRANCH: R4_2_maintenance 
fn-git-checkout () 
{
    BRANCH="$1"; shift
    echo git checkout "$BRANCH"
    git checkout "$BRANCH"
}

# USAGE: fn-git-pull
fn-git-pull () 
{
    echo git pull
    git pull
}

# USAGE: fn-git-submodule-update
fn-git-submodule-update () 
{
    echo git submodule init
    git submodule init
    echo git submodule update
    git submodule update
}


# USAGE: fn-git-clean 
fn-git-clean () 
{
    # See bug 400657
    echo git clean -f -d -x
    git clean -f -d -x
}

# USAGE: fn-git-reset
fn-git-reset () 
{
    echo git reset --hard  $@
    git reset --hard  $@
}

# USAGE: fn-git-clean-submodules
fn-git-clean-submodules () 
{   
    # See bug 400657
    echo git submodule foreach git clean -f -d -x
    git submodule foreach git clean -f -d -x
}


# USAGE: fn-git-reset-submodules
fn-git-reset-submodules () 
{
    echo git submodule foreach git reset --hard HEAD
    git submodule foreach git reset --hard HEAD
}

# USAGE: fn-build-id BUILD_TYPE
#   BUILD_TYPE: I, M, N
fn-build-id () 
{
    BUILD_TYPE="$1"; shift
    TIMESTAMP=$( date +%Y%m%d-%H%M --date='@'$RAWDATE )
    echo ${BUILD_TYPE}${TIMESTAMP}
}

# USAGE: fn-local-repo URL [TO_REPLACE]
#   URL: git://git.eclipse.org/gitroot/platform/eclipse.platform.releng.aggregator.git
#   TO_REPLACE: git://git.eclipse.org
fn-local-repo () 
{
    FORCE_LOCAL_REPO=false
    URL="$1"; shift
    if [ build = $(hostname) -o $FORCE_LOCAL_REPO = true ]; then
        TO_REPLACE='git://git.eclipse.org'
        if [ $# -gt 0 ]; then
            TO_REPLACE="$1"; shift
        fi
        echo $URL | sed "s!$TO_REPLACE!file://!g"
    else
        echo $URL
    fi
}

# USAGE: cat repositories.txt | fn-local-repos [TO_REPLACE]
#   TO_REPLACE: git://git.eclipse.org
fn-local-repos () 
{
    TO_REPLACE='git://git.eclipse.org'
    if [ $# -gt 0 ]; then
        TO_REPLACE="$1"; shift
    fi
    sed "s!$TO_REPLACE!file://!g"
}

# USAGE: fn-git-clone-aggregator GIT_CACHE URL BRANCH 
#   GIT_CACHE: /shared/eclipse/builds/R4_2_maintenance/gitCache
#   URL: file:///gitroot/platform/eclipse.platform.releng.aggregator.git
#   BRANCH: R4_2_maintenance
fn-git-clone-aggregator () 
{
    GIT_CACHE="$1"; shift
    URL="$1"; shift
    BRANCH="$1"; shift
    if [ ! -e "$GIT_CACHE" ]; then
        mkdir -p "$GIT_CACHE"
    fi
    pushd "$GIT_CACHE"
    fn-git-clone "$URL" "$BRANCH"
    popd
    pushd  $(fn-git-dir "$GIT_CACHE" "$URL" )
    fn-git-submodule-update
    popd
}

# USAGE: fn-git-clean-aggregator AGGREGATOR_DIR BRANCH 
#   AGGREGATOR_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BRANCH: R4_2_maintenance
fn-git-clean-aggregator () 
{
    AGGREGATOR_DIR="$1"; shift
    BRANCH="$1"; shift
    pushd "$AGGREGATOR_DIR"
    fn-git-clean
    fn-git-clean-submodules
    fn-git-reset-submodules
    fn-git-checkout "$BRANCH"
    fn-git-reset origin/$BRANCH
    popd
}

# USAGE: fn-git-cache ROOT BRANCH
#   ROOT: /shared/eclipse/builds
#   BRANCH: R4_2_maintenance
fn-git-cache () 
{
    ROOT="$1"; shift
    BRANCH="$1"; shift
    echo $ROOT/$BRANCH/gitCache
}

# USAGE: fn-git-dir GIT_CACHE URL
#   GIT_CACHE: /shared/eclipse/builds/R4_2_maintenance/gitCache
#   URL: file:///gitroot/platform/eclipse.platform.releng.aggregator.git
fn-git-dir () 
{
    GIT_CACHE="$1"; shift
    URL="$1"; shift
    echo $GIT_CACHE/$( basename "$URL" .git )
}

# USAGE: fn-build-dir ROOT BRANCH BUILD_ID STREAM
#   ROOT: /shared/eclipse/builds
#   BRANCH: R4_2_maintenance
#   BUILD_ID: M20121119-1900
#   STREAM: 4.3.0
# TODO: no longer need branch
fn-build-dir () 
{
    ROOT="$1"; shift
    BRANCH="$1"; shift
    BUILD_ID="$1"; shift
    STREAM="$1"; shift
    eclipseStreamMajor=${STREAM:0:1}
    dropDirSegment=siteDir/eclipse/downloads/drops
    if [[ $eclipseStreamMajor > 3 ]] 
    then
        dropDirSegment=siteDir/eclipse/downloads/drops4
    fi
    echo $ROOT/$dropDirSegment/$BUILD_ID
}

# USAGE: fn-basebuilder-dir ROOT BRANCH BASEBUILDER_TAG
#   ROOT: /shared/eclipse/builds
#   BRANCH: R4_2_maintenance
#   BASEBUILDER_TAG: R38M6PlusRC3D
fn-basebuilder-dir () 
{
    ROOT="$1"; shift
    BRANCH="$1"; shift
    BASEBUILDER_TAG="$1"; shift
    echo $ROOT/org.eclipse.releng.basebuilder_$BASEBUILDER_TAG
}


# USAGE: fn-maven-build-aggregator BUILD_ID REPO_DIR LOCAL_REPO DEBUG QUIET SIGNING UPDATE_BRANDING MAVEN_BREE
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   LOCAL_REPO: /shared/eclipse/builds/R4_2_maintenance/localMavenRepo
#   VERBOSE: true
#   SIGNING: true
#   UPDATE_BRANDING: true
fn-maven-build-aggregator () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    LOCAL_REPO="$1"; shift
    DEBUG=$1; shift
    QUIET=$1; shift
    SIGNING=$1; shift
    UPDATE_BRANDING=$1; shift
    MAVEN_BREE=$1; shift
    
    MARGS="-DbuildId=$BUILD_ID"
    if $DEBUG; then
        MARGS="$MARGS -X"
    fi
    if $QUIET; then
        MARGS="$MARGS -q"
    fi
    if $SIGNING; then
        MARGS="$MARGS -Peclipse-sign"
    fi
    if $UPDATE_BRANDING; then
        MARGS="$MARGS -Pupdate-branding-plugins"
    fi
    MARGS="$MARGS ${MAVEN_BREE}"
    echo "DEBUG: Variables in $0" 
    echo "DEBUG: BUILD_ID: $BUILD_ID"
    echo "DEBUG: REPO_DIR: $REPO_DIR"
    echo "DEBUG: LOCAL_REPO: $LOCAL_REPO"
    echo "DEBUG: DEBUG: $DEBUG"
    echo "DEBUG: QUIET: $QUIET"
    echo "DEBUG: SIGNING: $SIGNING"
    echo "DEBUG: UPDATE_BRANDING: $UPDATE_BRANDING"
    echo "DEBUG: MAVEN_BREE: $MAVEN_BREE"
    echo "DEBUG: MARGS: $MARGS"
    pushd "$REPO_DIR"
    mvn $MARGS \
        clean install \
        -Dmaven.test.skip=true \
        -Dmaven.repo.local=$LOCAL_REPO \
        -DbuildTimestamp="${TIMESTAMP}" -DbuildType="${BUILD_TYPE}"  -DbuildId="${BUILD_ID}"
    rc=$?
    popd
    return $rc
}

# USAGE: fn-submodule-checkout BUILD_ID REPO_DIR REPOSITORIES_TXT
#   BUILD_ID: M20121116-1100
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   SCRIPT: /shared/eclipse/builds/scripts/git-submodule-checkout.sh
#   REPOSITORIES_TXT: /shared/eclipse/builds/streams/repositories.txt
fn-submodule-checkout () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    SCRIPT="$1"; shift
    REPOSITORIES_TXT="$1"; shift
    pushd "$REPO_DIR"
    git submodule foreach "/bin/bash $SCRIPT $REPOSITORIES_TXT \$name"
    uninit=$( git submodule | grep "^-" | cut -f2 -d" " | sort -u )
    if [ ! -z "$uninit" ]; then
        echo Some modules are not initialized: $uninit
        return
    fi
    conflict=$( git submodule | grep "^U" | cut -f2 -d" " | sort -u )
    if [ ! -z "$conflict" ]; then
        echo Some modules have conflicts: $conflict
        return
    fi
    adds=$( git submodule | grep "^+" | cut -f2 -d" " )
    if [ -z "$adds" ]; then
        echo No updates for the submodules
        return
    fi
    popd
}

# USAGE: fn-add-submodule-updates REPO_DIR 
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
fn-add-submodule-updates () 
{
    REPO_DIR="$1"; shift
    pushd "$REPO_DIR"
    adds=$( git submodule | grep "^+" | cut -f2 -d" " )
    if [ -z "$adds" ]; then
        echo No updates for the submodules
        return
    fi
    echo git add $adds
    git add $adds
    popd
}

# USAGE: fn-submodule-checkout BUILD_ID REPO_DIR REPOSITORIES_TXT
#   BUILD_ID: M20121116-1100
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   REPOSITORIES_TXT: /shared/eclipse/builds/streams/repositories.txt
fn-tag-build-inputs () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    REPOSITORIES_TXT="$1"; shift
    pushd "$REPO_DIR"
    git submodule foreach "if grep \"^\${name}:\" $REPOSITORIES_TXT >/dev/null; then git tag $BUILD_ID; $GIT_PUSH origin $BUILD_ID; else echo Skipping \$name; fi"
    git tag $BUILD_ID
    $GIT_PUSH origin $BUILD_ID
    popd
}

# USAGE: fn-pom-version-updater REPO_DIR LOCAL_REPO DEBUG QUIET
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   LOCAL_REPO: /shared/eclipse/builds/R4_2_maintenance/localMavenRepo
fn-pom-version-updater () 
{
    REPO_DIR="$1"; shift
    LOCAL_REPO="$1"; shift
    DEBUG=$1; shift
    QUIET=$1; shift
    
    MARGS=""
    if $DEBUG; then
        MARGS="$MARGS -X"
    fi
    if $QUIET; then
        MARGS="$MARGS -q"
    fi
    echo "DEBUG: Variables in $0" 
    echo "DEBUG: REPO_DIR: $REPO_DIR"
    echo "DEBUG: LOCAL_REPO: $LOCAL_REPO"
    echo "DEBUG: DEBUG: $DEBUG"
    echo "DEBUG: QUIET: $QUIET"
    echo "DEBUG: MARGS: $MARGS"
    # fail fast if not set up correctly
    rc=$(fn-check-dir-exists TMP_DIR)
    checkForErrorExit "$rc" "$rc"

    report=${TMP_DIR}/pom_${BUILD_ID}.txt
    pushd "$REPO_DIR"
    mvn $MARGS \
        org.eclipse.tycho:tycho-versions-plugin:update-pom \
        -Dmaven.repo.local=$LOCAL_REPO \
        -DbuildTimestamp="${TIMESTAMP}" -DbuildType="${BUILD_TYPE}"  -DbuildId="${BUILD_ID}"
    RC=$?
    if [[ $RC != 0 ]]
    then
        echo "ERROR: tycho-versions-plugin:update-pom returned non-zero return code: $RC" >&2
    else
        changes=$( git status --short -uno | cut -c4- )
        if [ -z "$changes" ]; then
              echo "INFO: No changes in pom versions" >&2
              RC=0
           else
              echo "INFO: Changes in pom versions: $changes" >&2
              RC=0
       fi
    fi
    popd
    return $RC
}

# USAGE: fn-pom-version-update-with-commit BUILD_ID REPO_DIR LOCAL_REPO
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   LOCAL_REPO: /shared/eclipse/builds/R4_2_maintenance/localMavenRepo
#   VERBOSE: true
#   SIGNING: true
fn-pom-version-update-with-commit () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    LOCAL_REPO="$1"; shift

    # fail fast if not set up correctly
    rc=$(fn-check-dir-exists TMP_DIR)
    checkForErrorExit "$rc" "$rc"

    report=${TMP_DIR}/pom_${BUILD_ID}.txt
    MARGS="-DbuildId=$BUILD_ID"
    pushd "$REPO_DIR"
    mvn $MARGS \
        org.eclipse.tycho:tycho-versions-plugin:update-pom \
        -Dmaven.repo.local=$LOCAL_REPO \
        -DbuildTimestamp="${TIMESTAMP}" -DbuildType="${BUILD_TYPE}"  -DbuildId="${BUILD_ID}"
    changes=$( git status --short -uno | cut -c4- )
    if [ -z "$changes" ]; then
        echo No changes in pom versions
        return
    fi
    repos=$( git status --short -uno | cut -c4- | grep -v pom.xml )
    for CURRENT_REPO in $repos; do
        pushd "$CURRENT_REPO"
        pom_only=$( git status --short -uno | grep -v pom.xml | wc -l )
        if (( pom_only == 0 )); then
            git add $( git status --short -uno | cut -c4- )
            git commit -m "Update pom versions for build $BUILD_ID"
            echo $GIT_PUSH origin HEAD
        else
            echo Unable to update poms for $CURRENT_REPO
        fi
        popd
    done
    echo git add $changes
    git add $changes
    popd
}

# USAGE: fn-gather-repo BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-repo () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    REPO_DIR_REPOSITORY=$REPO_DIR/eclipse.platform.repository/target/repository
    if [[ -d "$REPO_DIR_REPOSITORY" ]]
    then
        pushd "$REPO_DIR"
        cp -r eclipse.platform.repository/target/repository $BUILD_DIR
        popd
    else
        echo "   ERROR: $REPO_DIR_REPOSITORY did not exist in fn-gather-repo"
    fi
}



# USAGE: fn-gather-sdk BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-sdk () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    TARGET_PRODUCTS="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/sdk/target/products
    if [[ -d "$TARGET_PRODUCTS" ]]
    then
        pushd "$TARGET_PRODUCTS"
        cp org.eclipse.sdk.ide-aix.gtk.ppc64.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-aix-gtk-ppc64.zip
        cp org.eclipse.sdk.ide-aix.gtk.ppc.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-aix-gtk-ppc.zip
        cp org.eclipse.sdk.ide-hpux.gtk.ia64.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-hpux-gtk-ia64.zip
        cp org.eclipse.sdk.ide-linux.gtk.ppc.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk-ppc.tar.gz
        cp org.eclipse.sdk.ide-linux.gtk.ppc64.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk-ppc64.tar.gz
        cp org.eclipse.sdk.ide-linux.gtk.s390.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk-s390.tar.gz
        cp org.eclipse.sdk.ide-linux.gtk.s390x.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk-s390x.tar.gz
        cp org.eclipse.sdk.ide-linux.gtk.x86_64.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk-x86_64.tar.gz
        cp org.eclipse.sdk.ide-linux.gtk.x86.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-linux-gtk.tar.gz
        #cp org.eclipse.sdk.ide-macosx.cocoa.x86_64.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-macosx-cocoa-x86_64.tar.gz
	tar cfz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-macosx-cocoa-x86_64.tar.gz -C org.eclipse.sdk.ide/macosx/cocoa/x86_64 eclipse
        #cp org.eclipse.sdk.ide-macosx.cocoa.x86.tar.gz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-macosx-cocoa.tar.gz
	tar cfz "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-macosx-cocoa.tar.gz -C org.eclipse.sdk.ide/macosx/cocoa/x86 eclipse
        cp org.eclipse.sdk.ide-solaris.gtk.sparc.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-solaris-gtk.zip
        cp org.eclipse.sdk.ide-solaris.gtk.x86.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-solaris-gtk-x86.zip
        cp org.eclipse.sdk.ide-win32.win32.x86_64.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-win32-x86_64.zip
        cp org.eclipse.sdk.ide-win32.win32.x86.zip "$BUILD_DIR"/eclipse-SDK-${BUILD_ID}-win32.zip
        popd
    else
        echo "   ERROR: $TARGET_PRODUCTS did not exist in fn-gather-sdks"
    fi
}

# USAGE: fn-gather-platform BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-platform () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    TARGET_PRODUCTS="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/platform/target/products
    if [[ -d "$TARGET_PRODUCTS" ]]
    then
        pushd "$TARGET_PRODUCTS"
        cp org.eclipse.platform.ide-aix.gtk.ppc64.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-aix-gtk-ppc64.zip
        cp org.eclipse.platform.ide-aix.gtk.ppc.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-aix-gtk-ppc.zip
        cp org.eclipse.platform.ide-hpux.gtk.ia64.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-hpux-gtk-ia64.zip
        cp org.eclipse.platform.ide-linux.gtk.ppc.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk-ppc.tar.gz
        cp org.eclipse.platform.ide-linux.gtk.ppc64.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk-ppc64.tar.gz
        cp org.eclipse.platform.ide-linux.gtk.s390.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk-s390.tar.gz
        cp org.eclipse.platform.ide-linux.gtk.s390x.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk-s390x.tar.gz
        cp org.eclipse.platform.ide-linux.gtk.x86_64.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk-x86_64.tar.gz
        cp org.eclipse.platform.ide-linux.gtk.x86.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-linux-gtk.tar.gz
        cp org.eclipse.platform.ide-macosx.cocoa.x86_64.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-macosx-cocoa-x86_64.tar.gz
        cp org.eclipse.platform.ide-macosx.cocoa.x86.tar.gz "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-macosx-cocoa.tar.gz
        cp org.eclipse.platform.ide-solaris.gtk.sparc.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-solaris-gtk.zip
        cp org.eclipse.platform.ide-solaris.gtk.x86.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-solaris-gtk-x86.zip
        cp org.eclipse.platform.ide-win32.win32.x86_64.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-win32-x86_64.zip
        cp org.eclipse.platform.ide-win32.win32.x86.zip "$BUILD_DIR"/eclipse-platform-${BUILD_ID}-win32.zip
        popd
    else
        echo "   ERROR: $TARGET_PRODUCTS did not exist in fn-gather-platform"
    fi
}

# USAGE: fn-gather-swt-zips BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-swt-zips () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    # TODO: this directory sanity check does not accomplish much, since "binaries/bundles" always
    # exists. Results in "not found" msg. Doubt there's any simple solution.
    SWT_BUNDLES_DIR="$REPO_DIR"/eclipse.platform.swt.binaries/bundles
    if [[ -d "$SWT_BUNDLES_DIR" ]]
    then
        pushd "$SWT_BUNDLES_DIR"
        cp  */target/*.zip "$BUILD_DIR"
        popd
    else
        echo "   ERROR: $SWT_BUNDLES_DIR did not exist in fn-gather-swt-zips"
    fi
}

# USAGE: fn-gather-test-zips BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-test-zips () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    TEST_ZIP_DIR="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/eclipse-junit-tests/target
    if [[ -d "$TEST_ZIP_DIR" ]]
    then 
        pushd "$TEST_ZIP_DIR"
        cp eclipse-junit-tests-bundle.zip "$BUILD_DIR"/eclipse-Automated-Tests-${BUILD_ID}.zip
        TEST_FRAMEWORK_DIR=$TEST_ZIP_DIR/eclipse-test-framework
        if [[ -d "$TEST_FRAMEWORK_DIR" ]]
        then
            pushd "$TEST_FRAMEWORK_DIR"
            zip -r "$BUILD_DIR"/eclipse-test-framework-${BUILD_ID}.zip *
            popd
        else
            echo "   ERROR: $TEST_FRAMEWORK_DIR did not exist in fn-gather-test-zips." 
        fi
        popd
    else
        echo "   ERROR: $TEST_ZIP_DIR did not exist in fn-gather-test-zips."
    fi
}


# USAGE: fn-gather-test-zips BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-ecj-jars () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    ECJ_JAR_DIR="$REPO_DIR"/eclipse.jdt.core/org.eclipse.jdt.core/target
    if [[ -d "$ECJ_JAR_DIR" ]]
    then 
        pushd "$ECJ_JAR_DIR"
        # TODO: How to avoid hard coding '3.9.0'? Is blob wildcard ('*') safe enouch?
        cp org.eclipse.jdt.core-3.9.0-SNAPSHOT-batch-compiler.jar "$BUILD_DIR"/ecj-${BUILD_ID}.jar
        cp org.eclipse.jdt.core-3.9.0-SNAPSHOT-sources.jar "$BUILD_DIR"/ecjsrc-${BUILD_ID}.jar
        popd
    else
        echo "   ERROR: $ECJ_JAR_DIR did not exist in fn-gather-ecj-jars."
        #TODO eventually, fail the build here? If they don't exist, something must be pretty wrong?
    fi
}



# USAGE: fn-slice-repos BUILD_ID REPO_DIR BUILD_DIR BASEBUILDER_LAUNCHER
#   BUILD_ID: I20121116-0700
#   ANT_SCRIPT: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
#   BASEBUILDER_LAUNCHER: /shared/eclipse/builds/R4_2_maintenance/org.eclipse.releng.basebuilder_R3_7/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
fn-slice-repos () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    BASEBUILDER_LAUNCHER="$1"; shift
    ANT_SCRIPT="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/repos/buildAll.xml
    REPO_DIR_DIR="$REPO_DIR"/eclipse.platform.repository/target/repository
    if [[ -d "$REPO_DIR_DIR" ]]
    then
        pushd "$REPO_DIR"
        java -jar "$BASEBUILDER_LAUNCHER" \
            -application org.eclipse.ant.core.antRunner \
            -buildfile "$ANT_SCRIPT" \
            -Declipse.build.configs="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder \
            -DbuildId="$BUILD_ID" \
            -DbuildRepo="$REPO_DIR_DIR" \
            -DpostingDirectory=$(dirname "$BUILD_DIR") \
            -DequinoxPostingDirectory="$BUILD_ROOT/siteDir/equinox/drops" \
            -DbuildLabel="$BUILD_ID" \
            -DbuildDirectory="$BUILD_DIR"
        popd
    else
        echo "   ERROR: $REPO_DIR_DIR did not exist in fn-slice-repo"
    fi
}


# USAGE: fn-gather-repo-zips BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-repo-zips () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    if [[ -d "$REPO_DIR" ]]
    then
        pushd "$REPO_DIR"/eclipse.platform.repository/target/repos
        for r in org.eclipse.*; do
            pushd $r
            zip -r "$BUILD_DIR"/${r}-${BUILD_ID}.zip * 
            popd
        done
        popd
    else
        echo "   ERROR: $REPO_DIR did not exist in fn-gather-repo-zips"
    fi
}

# USAGE: fn-gather-compile-logs BUILD_ID REPO_DIR BUILD_DIR
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-gather-compile-logs () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    if [[ -d "$REPO_DIR" ]]
    then
        mkdir -p "$BUILD_DIR"/compilelogs/plugins
        pushd "$REPO_DIR"
        for dot in $( find * -name "@dot.xml" ); do
            echo "Processing $dot" # org.eclipse.e4.core.di/target/@dot.xml
            targetDir=$( dirname "$dot" )
            if [ ! -r "$targetDir"/MANIFEST.MF ]; then
                echo "**Failed to process $dot"
            else
                BUNDLE_ID=$( grep Bundle-SymbolicName "$targetDir"/MANIFEST.MF | cut -f2 -d" " |  cut -f1 -d\; | tr -d '\f\r\n\t' )
                BUNDLE_VERSION=$(  grep Bundle-Version "$targetDir"/MANIFEST.MF | cut -f2 -d" " | tr -d '\f\r\n\t' )
                mkdir "$BUILD_DIR"/compilelogs/plugins/${BUNDLE_ID}_${BUNDLE_VERSION}
                cp "$dot" "$BUILD_DIR"/compilelogs/plugins/${BUNDLE_ID}_${BUNDLE_VERSION}
            fi
        done
        popd
    else
        echo "   ERROR: $REPO_DIR did not exist in fn-gather-compile-logs"
    fi
}


# USAGE: fn-gather-main-index BUILD_ID REPO_DIR BUILD_DIR STREAM BUILD_TYPE BUILD_PRETTY_DATE
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
#   STREAM: 4.2.2
#   BUILD_TYPE: M, I, N
#   BUILD_PRETTY_DATE: Thu Nov 20 17:47:35 EST 2012
fn-gather-main-index () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    STREAM="$1"; shift
    BUILD_TYPE="$1"; shift
    #BUILD_TYPE_NAME=Integration
    #if [ "$BUILD_TYPE" = M ]; then
    #    BUILD_TYPE_NAME=Maintenance
    #fi
    BUILD_PRETTY_DATE="$1"; shift
    pushd "$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/eclipse/templateFiles

    # Simplified by creating PHP variables in buildproperties.php
    cp "index.php.template" "$BUILD_DIR"/index.php

    #    # fail fast if not set up correctly
    #rc=$(fn-check-dir-exists TMP_DIR)
    #checkForErrorExit "$rc" "$rc"

    #T1=${TMP_DIR}/t1_$$
    #T2=${TMP_DIR}/t2_$$
    #sed "s/@eclipseStream@/$STREAM/g" index.php.template >$T1
    #sed "s/@type@/$BUILD_TYPE_NAME/g" $T1 >$T2
    #sed "s/@build@/$BUILD_ID/g" $T2 >$T1
    #sed "s/@date@/$BUILD_PRETTY_DATE/g" $T1 >$T2
    #sed "s/@buildlabel@/$BUILD_ID/g" $T2 >$T1
    #cp $T1 "$BUILD_DIR"/index.php
    #rm $T1 $T2
    popd
}

# USAGE: fn-parse-compile-logs BUILD_ID ANT_SCRIPT BUILD_DIR BASEBUILDER_LAUNCHER
#   BUILD_ID: I20121116-0700
#   ANT_SCRIPT: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
#   BASEBUILDER_LAUNCHER: /shared/eclipse/builds/R4_2_maintenance/org.eclipse.releng.basebuilder_R3_7/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
fn-parse-compile-logs () 
{
    BUILD_ID="$1"; shift
    ANT_SCRIPT="$1"; shift
    BUILD_DIR="$1"; shift
    BASEBUILDER_LAUNCHER="$1"; shift
    pushd "$BUILD_DIR"
    java -jar "$BASEBUILDER_LAUNCHER" \
        -application org.eclipse.ant.core.antRunner \
        -buildfile "$ANT_SCRIPT" \
        -DbuildDirectory=$(dirname "$BUILD_DIR" ) \
        -DpostingDirectory=$(dirname "$BUILD_DIR" ) \
        -DbuildId="$BUILD_ID" \
        -DbuildLabel="$BUILD_ID" \
        verifyCompile
    popd
}

# USAGE: fn-publish-eclipse BUILD_TYPE BUILD_STREAM BUILD_ID REPO_DIR BUILD_DIR BASEBUILDER_LAUNCHER
#   BUILD_TYPE: I
#   BUILD_STREAM: 4.2.2
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
#   BASEBUILDER_LAUNCHER: /shared/eclipse/builds/R4_2_maintenance/org.eclipse.releng.basebuilder_R3_7/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar
fn-publish-eclipse () 
{
    BUILD_TYPE="$1"; shift
    BUILD_STREAM="$1"; shift
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    BASEBUILDER_LAUNCHER="$1"; shift
    pushd "$BUILD_DIR"
    java -jar "$BASEBUILDER_LAUNCHER" \
        -application org.eclipse.ant.core.antRunner \
        -v \
        -buildfile "$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/eclipse/helper.xml \
        -Declipse.build.configs="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder \
        -DbuildId="$BUILD_ID" \
        -DbuildRepo="$REPO_DIR"/eclipse.platform.repository/target/repository \
        -DpostingDirectory=$(dirname "$BUILD_DIR") \
        -DequinoxPostingDirectory="$BUILD_ROOT/siteDir/equinox/drops" \
        -DpublishingContent="$REPO_DIR"/eclipse.platform.releng.tychoeclipsebuilder/eclipse/publishingFiles \
        -DbuildLabel="$BUILD_ID" \
        -Dhudson=true \
        -DeclipseStream=$BUILD_STREAM \
        -DbuildType="$BUILD_TYPE" \
        -Dbase.builder=$(dirname $(dirname "$BASEBUILDER_LAUNCHER" ) ) \
        -DbuildDirectory=$(dirname "$BUILD_DIR") \
        publish
    popd
}

# USAGE: fn-checkout-basebuilder BUILDER_DIR BASEBUILDER_TAG
#   BUILDER_DIR: /shared/eclipse/builds/R4_2_maintenance/org.eclipse.releng.basebuilder_R3_7
#   BASEBUILDER_TAG: R3_7
fn-checkout-basebuilder () 
{
    BUILDER_DIR="$1"; shift
    BASEBUILDER_TAG="$1"; shift
    if [ -e "$BUILDER_DIR" ]; then
        return
    fi
    pushd $( dirname "$BUILDER_DIR" )
    wget --no-verbose -O basebuilder-${BASEBUILDER_TAG}.zip http://git.eclipse.org/c/platform/eclipse.platform.releng.basebuilder.git/snapshot/eclipse.platform.releng.basebuilder-${BASEBUILDER_TAG}.zip 2>&1
    unzip -q basebuilder-${BASEBUILDER_TAG}.zip
    mv eclipse.platform.releng.basebuilder-${BASEBUILDER_TAG} "$BUILDER_DIR"
    rm basebuilder-${BASEBUILDER_TAG}.zip
    popd
}

# USAGE: fn-basebuilder-launcher BUILDER_DIR
#   BUILDER_DIR: /shared/eclipse/builds/R4_2_maintenance/org.eclipse.releng.basebuilder_R3_7
fn-basebuilder-launcher () 
{
    BUILDER_DIR="$1"; shift
    find "$BUILDER_DIR" -name "org.eclipse.equinox.launcher_*.jar" | tail -1
}

# USAGE: fn-pom-version-report BUILD_ID REPO_DIR BUILD_DIR LOCAL_REPO
#   BUILD_ID: I20121116-0700
#   REPO_DIR: /shared/eclipse/builds/R4_2_maintenance/gitCache/eclipse.platform.releng.aggregator
#   BUILD_DIR: /shared/eclipse/builds/R4_2_maintenance/dirs/M20121120-1747
fn-pom-version-report () 
{
    BUILD_ID="$1"; shift
    REPO_DIR="$1"; shift
    BUILD_DIR="$1"; shift
    pushd "$REPO_DIR"
    mkdir -p "$BUILD_DIR"/pom_updates
    git submodule foreach "if (git status -s -uno | grep pom.xml >/dev/null ); then git diff >$BUILD_DIR/pom_updates/\$name.diff; fi "
    pushd "$BUILD_DIR"/pom_updates
    nDiffs=$( ls -1 $BUILD_DIR/pom_updates/*.diff | wc -l )
    # don't create index.html if no diffs to display, as our PHP DL page knows 
    # not to display link if index.html is not present. 
    if [[ $nDiffs > 0 ]] 
    then
        echo "<html>"  >index.html 
        echo "<head>"  >>index.html
        echo "<title>POM version report for $BUILD_ID</title>"  >>index.html
        echo "</head>"  >>index.html
        echo "<body>"  >>index.html
        echo "<h1>POM version report for $BUILD_ID</h1>"  >>index.html
        echo "<p>These repositories need patches to bring their pom.xml files up to the correct version.</p>"  >>index.html
        echo "<ul>"  >>index.html

        for f in *.diff; do
            FNAME=$( basename $f .diff )
            echo "<li><a href=\"$f\">$FNAME</a></li>" >> index.html
        done
        echo "</ul>" >> index.html
        echo "</html>" >> index.html
    fi
    popd
    popd
}

# USAGE: fn-check-dir-exists DIR_VAR_NAME
#   DIR_VAR_NAME: JAVA_HOME (not, $JAVA_HOME, for better error messages)
#   callers should check for non-zero returned value, which itself is suitable for message, 
#   but must be quoted. Such as
#        rc=${fn-check-dir-exists JAVA_HOME)
#        checkForErrorExit "$rc" "$rc"
fn-check-dir-exists () 
{
    DIR_VAR_NAME=$1
    if [[ -z "${!DIR_VAR_NAME}" ]]
    then
        echo "DIR_VAR_NAME, ${DIR_VAR_NAME}, must be defined before running this script."
    else 
        if [[ ! -d  "${!DIR_VAR_NAME}" ]]
        then
            echo "The directory DIR_VAR_NAME, ${DIR_VAR_NAME} (\"${!DIR_VAR_NAME}\"), must exist before running this script."
        else
            echo 0
        fi
    fi
}

# USAGE: fn-write-property VAR_NAME
#   VAR_NAME: Variable name to write as "variable=value" form
# This script assumes the following variables have been defined and are pointing 
# to an appropriate file (see master-build.sh): 
# BUILD_ENV_FILE=${buildDirectory}/buildproperties.shsource
# BUILD_ENV_FILE_PHP=${buildDirectory}/buildproperties.php
# BUILD_ENV_FILE_PROP=${buildDirectory}/buildproperties.properties

# Note we always append to file, assuming if doesn't exist yet and will be 
# created, and for each build, it won't exist, so will be written fresh for 
# each build. 

# TODO: Could add some sanity checking of if variable name appropriate 
# for various language (e.g. I forget all the rules, but bash variables 
# can not start with numerial, PHP variables (or is it Ant) can't have hyphens
# (or is it underscore :), etc. But may need to add some mangling, or warning? 
# Similarly, not sure at the moment of what to 
# write if value is null/empty. For now will leave empty string, but some might need blank?
# Or literally nothing? Also, unsure of effects of full quoting or if always needed? 

fn-write-property () 
{
    VAR_NAME=$1
    if [[ -z "${VAR_NAME}" ]]
    then
        echo "VAR_NAME must be passed to this script, $0."
        return 1
    fi 

    # bash scripts (export may be overkill ... but, just in case needed)
    echo "export ${VAR_NAME}=\"${!VAR_NAME}\"" >> $BUILD_ENV_FILE
    # PHP, suitable for direct "include"
    echo "\$${VAR_NAME} = \"${!VAR_NAME}\";" >> $BUILD_ENV_FILE_PHP
    # standard properties file
    echo "${VAR_NAME} = \"${!VAR_NAME}\"" >> $BUILD_ENV_FILE_PROP

}

# USAGE: fn-write-property-init
# Must be called (exactly) once before writing properties. 
fn-write-property-init () 
{

    # nothing really required for bash shsource, but we'll put in some niceties
    echo "#!/usr/bin/env bash" > $BUILD_ENV_FILE
    echo "# properties written for $BUILD_ID" >> $BUILD_ENV_FILE
    # PHP, suitable for direct "include": needs to start and end with <?php ... ?>
    echo "<?php " > $BUILD_ENV_FILE_PHP
    echo "// properties written for $BUILD_ID " >> $BUILD_ENV_FILE_PHP
    # standard properties file: nothing special required
    echo "! properties written for $BUILD_ID" > $BUILD_ENV_FILE_PROP

}

# USAGE: fn-write-property-close
# Must be called (exactly) once when completely finished writing properties. 
fn-write-property-close () 
{

    # nothing really required for bash shsource, but we'll put in some niceties
    echo "# finished properties for $BUILD_ID" >> $BUILD_ENV_FILE
    # PHP, suitable for direct "include": needs to start and end with <?php ... ?>
    # Note: technically may not need closing ?> for an 'include' ? 
    echo "// finished properties for $BUILD_ID " >> $BUILD_ENV_FILE_PHP
    echo "?>"  >> $BUILD_ENV_FILE_PHP
    # standard properties file: nothing special required
    echo "! finshed properties for $BUILD_ID" >> $BUILD_ENV_FILE_PROP

}

Back to the top