#!/bin/bash
#usage:
# ./ossUpgrade.sh "stage/ztsjxxxt/frontEnd/" html.zip ztsjxxxt
# set -xt
PATH=PATH:/usr/bin:/usr/sbin:/usr/local/bin
ossPath=$1 #末尾别忘了加/
fileName=$2
preName="${fileName%.*}"

protol=oss

basePath=$3

if [ ! -d $basePath ]; then
  mkdir $basePath -p
fi

function compare(){
  if [ ! -d $basePath ]; then
    mkdir $basePath
  fi
  cd $basePath
  if [ ! -f ${fileName}_oss.info ]; then
    touch ${fileName}_oss.info
  fi
  echo upstream ossPath: ${protol}://${ossPath}$fileName
  ( ossutil stat ${protol}://${ossPath}$fileName | head -n -2) > ${fileName}_upstream_oss.info
  upstreamOssInfoMd5=$(md5sum ${fileName}_upstream_oss.info)
  upstreamOssInfoMd5="${upstreamOssInfoMd5%  *}"
  locOssInfoMd5=$(md5sum ${fileName}_oss.info)
  locOssInfoMd5="${locOssInfoMd5%  *}"
  echo "upstream $fileName ossInfo md5: |${upstreamOssInfoMd5}|"
  echo "localTep $fileName ossInfo md5: |${locOssInfoMd5}|"
  echo "upstream:" $(pwd)/${fileName}_upstream_oss.info
  cat ${fileName}_upstream_oss.info
  echo "localTem:" $(pwd)/${fileName}_oss.info
  cat ${fileName}_oss.info
  # 当上游oss文件meta信息跟下游缓存文件meta信息匹配时, 无需更新
  if [ "${upstreamOssInfoMd5}" = "${locOssInfoMd5}" ];then
    return 0
  else 
    # 当上游oss文件meta信息跟下游缓存文件meta信息不符时,如果上游信息是空,下游非空,则忽略更新,因为有可能是误判
    if [ "${upstreamOssInfoMd5}" = "d41d8cd98f00b204e9800998ecf8427e" ] && [ "${locOssInfoMd5}" != "d41d8cd98f00b204e9800998ecf8427e" ];then
      echo "maybe a mistake, ignore upgrade"
      return 0
    else 
      return 1
    fi
  fi
}

function downloadFromOss(){
  cd $basePath
  echo "fileName: " $fileName
  ossutil cp -f ${protol}://${ossPath}${fileName} ${fileName}_tmp
  rm $fileName
  mv ${fileName}_tmp $fileName
  ( ossutil stat ${protol}://${ossPath}$fileName | head -n -2) > ${fileName}_oss.info
}

function main(){
  echo " "
  echo "start ossUpgrade service"
  compare
  result=$?
  if [ $result = 0 ];then 
      # uploadLog
      echo "local temp file $fileName is same with oss file,no need to replace"
      echo "end ossUpgrade service"
      echo " "
      exit 0
  else
      echo "local temp file $fileName is different from oss, will download..."
  fi
  downloadFromOss
  echo "end ossUpgrade service"
  echo " "
}

main