if file_exists $SOURCE_CACHE/$SOURCE; then
  message "${MESSAGE_COLOR}Unpacking the source...${DEFAULT_COLOR}" &&
  tar -xjf $SOURCE_CACHE/$SOURCE -C $(dirname $SOURCE_DIRECTORY) &&
  cd $SOURCE_DIRECTORY &&
  message "${MESSAGE_COLOR}Updating...${DEFAULT_COLOR}" &&
  echo git pull &&
  git pull &&
  cd - > /dev/null
else
  message "${MESSAGE_COLOR}Doing a recursive clone...${DEFAULT_COLOR}" &&
  echo git clone --recursive "$SOURCE_URL" "$SOURCE_DIRECTORY" &&
  git clone --recursive "$SOURCE_URL" "$SOURCE_DIRECTORY"
fi &&

message "${MESSAGE_COLOR}Repacking the source...${DEFAULT_COLOR}" &&
tar -cjf $SOURCE -C $(dirname $SOURCE_DIRECTORY) $(basename $SOURCE_DIRECTORY) &&
mv $SOURCE $SOURCE_CACHE
