check-feature-dependencies.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. # Feature依赖关系检查脚本
  3. set -e
  4. echo "🔍 检查Feature依赖关系..."
  5. # 获取所有feature分支
  6. FEATURE_BRANCHES=$(git branch | grep -E '^ [0-9]{3}-' | sed 's/^ //')
  7. CURRENT_BRANCH=$(git branch --show-current)
  8. # 定义Feature依赖关系 (兼容旧版bash)
  9. get_dependencies() {
  10. case "$1" in
  11. "001-specManager-perp")
  12. echo ""
  13. ;;
  14. "002-credential-manager")
  15. echo ""
  16. ;;
  17. "003-delta-50-80")
  18. echo "001-specManager-perp,002-credential-manager"
  19. ;;
  20. *)
  21. echo ""
  22. ;;
  23. esac
  24. }
  25. # 检查函数
  26. check_dependencies() {
  27. local feature=$1
  28. local deps=$(get_dependencies "$feature")
  29. echo "📋 检查 $feature 的依赖..."
  30. if [[ -z "$deps" ]]; then
  31. echo " ✅ 无依赖项"
  32. return 0
  33. fi
  34. IFS=',' read -ra DEP_ARRAY <<< "$deps"
  35. local missing_deps=()
  36. for dep in "${DEP_ARRAY[@]}"; do
  37. # 检查依赖的spec是否存在
  38. if [[ ! -d "specs/$dep" ]]; then
  39. missing_deps+=("$dep (spec缺失)")
  40. continue
  41. fi
  42. # 检查依赖的feature是否已合并到main
  43. git checkout main >/dev/null 2>&1
  44. if [[ ! -d "specs/$dep" ]]; then
  45. missing_deps+=("$dep (未合并到main)")
  46. fi
  47. git checkout "$CURRENT_BRANCH" >/dev/null 2>&1
  48. done
  49. if [[ ${#missing_deps[@]} -eq 0 ]]; then
  50. echo " ✅ 所有依赖项满足"
  51. else
  52. echo " ❌ 缺失依赖项:"
  53. for missing in "${missing_deps[@]}"; do
  54. echo " - $missing"
  55. done
  56. return 1
  57. fi
  58. }
  59. # 检查共享组件冲突
  60. check_shared_components() {
  61. echo "🔧 检查共享组件冲突..."
  62. local conflicts_found=0
  63. # 检查AccountManager
  64. if [[ -f "src/modules/account/AccountManager.ts" ]]; then
  65. local account_features=$(grep -l "AccountManager" specs/*/tasks.md 2>/dev/null | wc -l)
  66. if [[ $account_features -gt 1 ]]; then
  67. echo " ⚠️ AccountManager被多个feature使用: $account_features个"
  68. conflicts_found=1
  69. fi
  70. fi
  71. # 检查PriceManager
  72. if [[ -f "src/modules/trading/PriceManager.ts" ]]; then
  73. local price_features=$(grep -l "PriceManager" specs/*/tasks.md 2>/dev/null | wc -l)
  74. if [[ $price_features -gt 1 ]]; then
  75. echo " ⚠️ PriceManager被多个feature使用: $price_features个"
  76. conflicts_found=1
  77. fi
  78. fi
  79. if [[ $conflicts_found -eq 0 ]]; then
  80. echo " ✅ 无共享组件冲突"
  81. fi
  82. return $conflicts_found
  83. }
  84. # 主检查逻辑
  85. main() {
  86. local has_issues=0
  87. echo "📊 Feature依赖关系检查报告"
  88. echo "================================"
  89. for feature in $FEATURE_BRANCHES; do
  90. if ! check_dependencies "$feature"; then
  91. has_issues=1
  92. fi
  93. echo ""
  94. done
  95. if ! check_shared_components; then
  96. has_issues=1
  97. fi
  98. echo "================================"
  99. if [[ $has_issues -eq 0 ]]; then
  100. echo "✅ 所有Feature依赖关系检查通过"
  101. else
  102. echo "❌ 发现依赖关系问题,请解决后再继续"
  103. exit 1
  104. fi
  105. }
  106. main "$@"