

function cvsCheckout {
  if [ -z $4 ]
  then
    echo "No parameters passed to function cvsCheckout()."
    return 0
  fi
  REPSTRING=$1
  FILEPATH=$2
  VERSION=$3
  FILENAME=$4

  echo "Checking out ${FILEPATH} to ${FILENAME}"
  cvs -q -d ${REPSTRING} checkout -r ${VERSION} -p ${FILEPATH} >${FILENAME}
}


function gitCheckout {
  if [ -z $4 ]
  then
    echo "No parameters passed to function gitCheckout()."
    return 0
  fi
  GITURL=$1
  GITPATH=$2
  GITBRANCH=$3
  FILENAME=$4

  echo "Checking out ${GITPATH} to ${FILENAME}"
  git archive --format=tar \
    --remote=${GITURL} ${GITBRANCH} ${GITPATH} | tar xf - --to-stdout >${FILENAME}
}

function pullAllConfigFiles {
  if [ -z $2 ]
  then
    echo "No parameters passed to function pullAllConfigFiles()."
    return 0
  fi
  
  if [ ! -d $2 ]
  then
    echo "Directory $2 does not exist."
    return 0
  fi
  
  # read relevant (non comment, non empty) lines from package definition map file
  ALL_PACKAGES=`grep -v '^#' $1 | grep -v '^\s*$'`


  # name, [CVS,GIT], repository string, path to file, version [HEAD], EPP local filename
  # cpp,CVS,:pserver:anonymous@dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/packages/org.eclipse.epp.package.cpp.feature/eclipse_cpp_juno.xml,HEAD,cpp.xml
  # cpp,CVS,:pserver:anonymous@dev.eclipse.org:/cvsroot/technology,org.eclipse.epp/packages/org.eclipse.epp.package.cpp.feature/feature.xml,HEAD,cpp.feature.xml

  for II in ${ALL_PACKAGES};
  do
    PACKAGE_NAME=`echo ${II} | cut -d "," -f 1`
    REPTYPE=`echo ${II}      | cut -d "," -f 2`
    REPSTRING=`echo ${II}    | cut -d "," -f 3`
    FILEPATH=`echo ${II}     | cut -d "," -f 4`
    VERSION=`echo ${II}      | cut -d "," -f 5`
    FILENAME=`echo ${II}     | cut -d "," -f 6`

    if [ "${REPTYPE}" = "CVS" ]; then
      cvsCheckout ${REPSTRING} ${FILEPATH} ${VERSION} ${2}/${FILENAME}
    elif [ "${REPTYPE}" = "GIT" ]; then
      gitCheckout ${REPSTRING} ${FILEPATH} ${VERSION} ${2}/${FILENAME}
    fi
    ALL_PACKAGE_NAMES="${ALL_PACKAGE_NAMES} ${PACKAGE_NAME}"
  done
}

