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





                                                                 



                                                                                        
 





                                                                             
                                                                                                                         


               



                     

                                                                                  

                     
                                                                      









                                                                                  

 









































































                                                                                                                                        
 






                                                                                                      
                                       


                                                           
                                                             
  

                                             
                                
    

                                                          
    
                               



                                               
                                    
    
                             

                                                    
 

                         
                          

  
                                                                                                                                                       

                                                 
                                                         

                                               


                                                          
                                     
    
                                  
                               
                                                       





                                                               
                                                
                                                        
  
 

                                                                                                      
 

                                                                          
    
                                          
      
                                                                               


                                                                                        
                                      
      
                                                                          

                                                                                  
                                                                                       




                                                                                                      
  
 
                                                             
                                         

         
                           
                                                        
                           

                                                    
                                                                
                                        





                                                                                                  
#!/usr/bin/env bash

# directly gets a fresh copy of sdk directory from eclipsebuilder
# need to manually check and make sure nothing is running or will
# be running soon.

source localBuildProperties.shsource 2>/dev/null

# Normally, we should be "working in" /shared/eclipse ... the parent of 'sdk' directory.
export WORK_DIR=${WORK_DIR:-${PWD}}

# codifying the branch (or tag) to use, so it can be set/chagned in one place
branch=master
initScriptTag="h=$branch"

# to use a tag instead of branch, would be tag=X, such as
# tag=vI20120417-0700, or in full form
# http://${GIT_HOST}/c/platform/eclipse.platform.releng.eclipsebuilder.git/plain/scripts/wgetFresh.sh?tag=vI20120417-0700

# = = = = = = =

function errorExit ()
{
  MSG=$1
  RETURN_CODE=$2
  # We will count no message as a warning, but, is intended for caller to provide,
  # so is technically a programming error.
  if [[ -z "{MSG}" ]]
  then
    printf "\n\tWARNING: /t%s" "Call to errorExit provided no message"
    MSG="No message provided."
  fi
  # May be legitimate not to provide "exit status", in which case we just use '1'.
  # TODO: Deluxe version would check for positive integer between 0 and 255
  if [[ -z "${RETURN_CODE}" ]]
  then
    $RETURN_CODE=1
  fi
  # Here is whole purpose of this method.
  printf "\n\tERROR: \t%s" "${MSG} Exit Status: ${RETURN_CODE}"
}

function checkForErrorExit ()
{
  # arg 1 must be return code, $?
  # arg 2 (remaining line) can be message to print before exiting due to non-zero exit code
  exitCode=$1
  shift
  message="$*"
  if [[ -z "${exitCode}" ]]
  then
    echo -e "\n\tPROGRAM ERROR: checkForErrorExit called with no arguments\n"
    exit 1
  fi
  if [[ -z "${message}" ]]
  then
    echo -e "\n\tWARNING: checkForErrorExit called without message\n"
    message="(Calling program provided no message)"
  fi
  if [[ "${TEST_MODE}" == "true" ]]
  then
    echo -e "\t\tTest mode: exitCode: $exitCode \t message: ${message}"
  fi
  if [[ ${exitCode} -lt 0 ]]
  then
    # This is just a "fact of the way bash works" ... but, hard to debug if not expecting it.
    echo -e "\n\t WARNING: exitCode was less than 0, ${exitCode}, so actual value will be different. $(( ${exitCode} & 255 )) \n"
    exitCode=$(( ${exitCode} & 255 ))
  fi
  if [[ ${exitCode} -gt 255 ]]
  then
    # This is just a "fact of the way bash works" ... but, hard to debug if not expecting it.
    echo -e "\n\t WARNING: exitCode was greater than 255, ${exitCode}, so value on exit will be modulo 256. $(( ${exitCode} % 256 )) \n"
    exitCode=$(( ${exitCode} % 256 ))
  fi
  if [[ ! ${exitCode} =~ ^[0-9]+$ ]]
  then
    echo -e "\n\t WARNING: exitCode was not all digits.\n\t Arbitrarily set exitCode to 1 (and may have unintended results).\n"
    exitCode=1
  fi
  if [[ ${exitCode} != 0 ]]
  then
    if [[ "${TEST_MODE}" == "true" ]]
    then
      echo -e "\n\t ERROR. exit code: ${exitCode}  ${message} \tTest mode: otherwise would have exited with ${exitCode}"
    else
      echo -e "\n\t ERROR. exit code: ${exitCode}  ${message}\n"
      exit ${exitCode}
    fi
  else
    if [[ "${TEST_MODE}" == "true" ]]
    then
      echo -e "\t\tTest mode: returned 0 (no exit)"
    fi
    return 0
  fi
}

# = = = = =

if [[ "$1" == "-t" ]]
then
  TEST_MODE=true
  echo -e "\n\tStarting self test mode, since '-t' specified. Will exit when done with tests.\n"
  checkForErrorExit 0 #no message case
  checkForErrorExit 0 "Normal zero case."
  checkForErrorExit 0 "Normal zero as string case."
  checkForErrorExit abcd "String, not numeric case."
  checkForErrorExit 255 "Number exactly 255 cases."
  checkForErrorExit -1 "Negative number case."
  checkForErrorExit -2 "Negative number case."
  checkForErrorExit 512 "Number greater than 255 case."

  echo -e "\n\tTest mode completed normally.\n"
  exit 0
fi

cd "${WORK_DIR}"
checkForErrorExit $? "could not change directory parent of sdk, ${WORK_DIR}."

# as a sanity check, we make sure WORK_DIR is defined to be something, and not equal to "/" or ${HOME}
# since some "removes" either won't work, or risk removing things we do not intend.
if [[ -z "${WORK_DIR}" ]]
then
  errorExit "WORK_DIR was not defined."
fi
if [[ "${WORK_DIR}" == "/" || "${WORK_DIR}" == "${HOME}" ]]
then
  errorExit "WORK_DIR inappropriately defined as ${WORK_DIR}"
fi

# remove if exists from previous (failed) run
if [[ -e "${WORK_DIR}/tempeb" ]]
then
  rm -fr "${WORK_DIR}/tempeb"
  checkForErrorExit $? "Could not remove directory tempeb"
else
  mkdir -p "${WORK_DIR}/tempeb"
  checkForErrorExit $? "could not mkdir tempeb"
fi

# ditto
if [[ -e "${WORK_DIR}/master.zip" ]]
then
  rm "${WORK_DIR}/master.zip"
  checkForErrorExit $? "Could not remove master.zip"
fi

if [[ -z "${GIT_HOST}" ]]
then
  GIT_HOST=git.eclipse.org
fi

wget --no-verbose --no-cache -O "${WORK_DIR}/master.zip" http://${GIT_HOST}/c/platform/eclipse.platform.releng.aggregator.git/snapshot/master.zip 2>&1;
checkForErrorExit $? "could not get aggregator?!"

unzip -q "${WORK_DIR}/master.zip" -d "${WORK_DIR}/tempeb"
checkForErrorExit $? "could not unzip master?!"

# save a copy to diff with (and to revert to if needed)
# after first moving any previous copies.
# will need to manually cleanup dated backups occasionally
if [[ -d "${WORK_DIR}/sdkTempSave" ]]
then
  NOWDATE=$( date -u +%Y%m%d%H%M )
  NEWNAME=sdkTempSave${NOWDATE}
  mv "${WORK_DIR}/sdkTempSave" "${WORK_DIR}/${NEWNAME}"
  checkForErrorExit $? "could not mv sdkTempSave to ${NEWNAME}"
fi

# It won't exist, if first time running script, for example.
if [[ -e sdk ]]
then
  mv "${WORK_DIR}/sdk" "${WORK_DIR}/sdkTempSave"
  checkForErrorExit $? "could not mv sdk to sdkTempSave"
fi

rsync -r "${WORK_DIR}/tempeb/master/production/sdk/" "${WORK_DIR}/sdk"
checkForErrorExit $? "could not rsync -r ${WORK_DIR}/tempeb/master/production/sdk/ to ${WORK_DIR}/sdk"

# there won't be an sdkTempSave, if first time script is ran, for example.
if [[ -e "${WORK_DIR}/sdkTempSave" ]]
then
  if [[ -e "${WORK_DIR}/sdkdiffout.txt" ]]
  then
    # not positive why, but I've seen us get here, but NOWDATE not defined yet.
    # But could happen from various scenerios of deleting files or directories involved.
    if [[ -z "${NOWDATE}" ]]
    then
      NOWDATE=$( date -u +%Y%m%d%H%M )
    fi
    mv "${WORK_DIR}/sdkdiffout.txt" "${WORK_DIR}/sdkdiffout${NOWDATE}.txt"
    checkForErrorExit $? "could not mv sdkdiffout.txt to sdkdiffout${NOWDATE}.txt"
  fi
  diff -w -r "${WORK_DIR}/sdk" "${WORK_DIR}/sdkTempSave" > "${WORK_DIR}/sdkdiffout.txt"
  # It's normal for diff to return '1', if differences are found. returns '0' if no differences found.
  # No need to 'exit' for either '0' or '1'.
  # Even '2' may or may not be ok, See "info diff".
  # So, we'll not check return codes for 'diff'.
  # checkForErrorExit $? "could not run diff"
fi

find "${WORK_DIR}/sdk" -name "*.sh" -exec chmod -c +x '{}' \;
checkForErrorExit $? "could not run find"

# cleanup
rm "${WORK_DIR}/master.zip"
checkForErrorExit $? "could not cleanup (rm) master.zip"
rm -fr "${WORK_DIR}/tempeb"
checkForErrorExit $? "could not cleanup (rm) tempeb"

# sdkdiff will not always exist, such as, if first time running.
if [[ -e "${WORK_DIR}/sdkdiffout.txt" ]]
then
  echo -e "\n\tNormal exit. Check sdkdiffout.txt to confirm expected differences were obtained.\n"
else
  echo -e "\n\tNormal exit."
fi

Back to the top