#!/bin/bash 
 
# 删除分支操作 
target_branch="feature/dev_v6.4.0_gzy"
 
# 定义颜色和Emoji常量 
RED="\033[31m"
GREEN="\033[32m"
YELLOW="\033[33m"
BLUE="\033[34m"
RESET="\033[0m"
SUCCESS_EMOJI="✅"
FAIL_EMOJI="❌"
WARNING_EMOJI="⚠️ "
INFO_EMOJI="ℹ️ "
 
# 日志文件路径(强制使用绝对路径)
LOG_FILE="$(pwd)/delete_branches_$(date +%Y%m%d_%H%M%S).log"
 
# 导出所有依赖项(关键修复)
export RED GREEN YELLOW BLUE RESET \
       SUCCESS_EMOJI FAIL_EMOJI WARNING_EMOJI INFO_EMOJI \
       LOG_FILE target_branch 
 
# 打印带颜色的日志函数 
log() {
  local level=$1 
  local message=$2 
  local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
  case $level in 
    "SUCCESS") echo "${GREEN}${SUCCESS_EMOJI} [${timestamp}] SUCCESS: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
    "ERROR") echo "${RED}${FAIL_EMOJI} [${timestamp}] ERROR: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
    "WARNING") echo "${YELLOW}${WARNING_EMOJI} [${timestamp}] WARNING: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
    "INFO") echo "${BLUE}${INFO_EMOJI} [${timestamp}] INFO: ${message}${RESET}" | tee -a "$LOG_FILE" >&2 ;;
  esac 
}
export -f log 
 
echo "\n${BLUE}==================== 脚本启动 ====================${RESET}"
log "INFO" "开始批量删除远程分支操作"
 
# 遍历所有子目录 
find . -maxdepth 1 -type d ! -name "." | while read -r dir; do 
  echo "\n${BLUE}▄▄▄▄▄▄▄▄▄▄▄▄▄▄ 处理目录: ${dir} ▄▄▄▄▄▄▄▄▄▄▄▄▄▄${RESET}"
  (
    cd "$dir" || { log "ERROR" "无法进入目录: $dir"; exit 1; }
    
    # 新增Git仓库检测 
    if ! git rev-parse --is-inside-work-tree &>/dev/null; then 
      log "WARNING" "非Git仓库目录: $dir"
      exit 0 
    fi 
 
    # 更新远程分支 
    if ! git fetch --prune 2>&1 | tee -a "$LOG_FILE"; then 
      log "ERROR" "分支列表更新失败: $dir"
      exit 1 
    fi 
 
    # 匹配并删除分支 
    git branch -r | grep "origin/${target_branch}$" | while read -r branch; do 
      branch_name="${branch#origin/}"
      log "INFO" "尝试删除分支: ${branch_name}"
      
      if git push origin --delete "$branch_name" 2>&1 | tee -a "$LOG_FILE"; then 
        log "SUCCESS" "分支删除成功: ${branch_name}"
      else 
        log "ERROR" "分支删除失败: ${branch_name}"
      fi 
    done 
  )
done 
 
echo "\n${BLUE}==================== 脚本结束 ====================${RESET}"
log "INFO" "操作已完成,详细日志请查看: ${LOG_FILE}"