#!/bin/bash

# Git 仓库的路径
REPO_PATH="/data/www/bi_aplong_test"
LOG_FILE="$REPO_PATH/logfile.log"

# 切换到仓库目录
cd "$REPO_PATH" || { echo "错误：无法切换到目录 $REPO_PATH"; exit 1; }

# 拉取远程 test 分支的最新代码
echo "正在拉取 test 分支最新代码..." >> "$LOG_FILE"

# 删除之前可能存在的文件（如果存在）
[ -f "index.html" ] && rm -f index.html
[ -f "favicon.ico" ] && rm -f favicon.ico
[ -d "css" ] && rm -rf css
[ -d "img" ] && rm -rf img
[ -d "js" ] && rm -rf js

git reset --hard origin/test
# 现在可以正常 pull 了
git pull origin test

# 检出指定的文件和目录
CHECKOUT_ITEMS=("dist" ".gitignore" "pull_git_repo.sh")
for item in "${CHECKOUT_ITEMS[@]}"; do
    if git pull origin/test -- "$item" 2>/dev/null; then
        echo "成功检出: $item" >> "$LOG_FILE"
    else
        echo "警告: $item 不存在或检出失败" >> "$LOG_FILE"
    fi
done

# 定义要保留的文件和目录
KEEP_ITEMS=(".git" "dist" ".gitignore" "pull_git_repo.sh" "logfile.log")

# 删除不在保留列表中的文件和目录
echo "清理不需要的文件..." >> "$LOG_FILE"
find . -maxdepth 1 -mindepth 1 $(printf -- '! -name %s ' "${KEEP_ITEMS[@]}") -exec rm -rf {} + 2>/dev/null

# 复制dist目录内容到当前目录
if [ -d "dist" ]; then
    echo "正在复制dist目录内容..." >> "$LOG_FILE"
    # 启用dotglob以包含隐藏文件
    shopt -s dotglob
    cp -rf dist/* ./
    shopt -u dotglob
    
    # 删除dist目录
    rm -rf dist
    echo "dist目录内容已复制完成" >> "$LOG_FILE"
else
    echo "警告: dist目录不存在" >> "$LOG_FILE"
fi

# 设置文件权限（更安全的权限设置）
find . -type f -exec chmod 644 {} \; 2>/dev/null
find . -type d -exec chmod 755 {} \; 2>/dev/null

# 如果需要执行权限，可以单独设置
chmod +x pull_git_repo.sh

# 记录部署日志
echo "$(date '+%Y-%m-%d %H:%M:%S'): 成功从test分支部署指定文件" >> "$LOG_FILE"