Files
hakorune/tools/mir13-migration-helper.sh

143 lines
4.1 KiB
Bash
Raw Normal View History

#!/bin/bash
# MIR13移行専用ヘルパーChatGPT5方式を応用
set -euo pipefail
# === MIR13特化設定 ===
LEGACY_PATTERNS=(
"ArrayGet" "ArraySet"
"RefNew" "RefGet" "RefSet"
"TypeCheck" "Cast"
"PluginInvoke"
"Copy" "Debug" "Print"
"Nop" "Throw" "Catch"
"Safepoint"
)
# 統合先
UNIFICATION_MAP="
ArrayGet:BoxCall
ArraySet:BoxCall
RefNew:BoxCall
RefGet:BoxCall
RefSet:BoxCall
TypeCheck:TypeOp
Cast:TypeOp
PluginInvoke:BoxCall
"
# === Phase 1: レガシー命令の使用箇所を検出 ===
echo "🔍 Detecting legacy instruction usage..."
mkdir -p mir13-migration/{detections,patches,results}
for pattern in "${LEGACY_PATTERNS[@]}"; do
echo "Searching for: $pattern"
rg -l "MirInstruction::$pattern" src/ > "mir13-migration/detections/$pattern.txt" || true
count=$(wc -l < "mir13-migration/detections/$pattern.txt" 2>/dev/null || echo 0)
if [[ $count -gt 0 ]]; then
echo " Found in $count files"
# 各ファイルに対してCodexタスク生成
while IFS= read -r file; do
target_instruction=$(echo "$UNIFICATION_MAP" | grep "^$pattern:" | cut -d: -f2 || echo "appropriate")
task="In $file, replace all uses of MirInstruction::$pattern with MirInstruction::$target_instruction.
Ensure semantic equivalence is maintained. For array operations, use BoxCall with appropriate method names.
For type operations, use TypeOp with appropriate parameters."
echo " Creating task for: $file"
echo "$task" > "mir13-migration/patches/$pattern-$(basename "$file").task"
done < "mir13-migration/detections/$pattern.txt"
fi
done
# === Phase 2: 並列実行スクリプト生成 ===
cat > mir13-migration/execute_migration.sh << 'MIGRATION_SCRIPT'
#!/bin/bash
# Execute MIR13 migration tasks
JOBS=${JOBS:-3}
LOG_DIR="logs-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$LOG_DIR"
echo "🚀 Executing MIR13 migration tasks..."
# 各タスクファイルを処理
for task_file in patches/*.task; do
[[ -e "$task_file" ]] || continue
task_content=$(cat "$task_file")
task_name=$(basename "$task_file" .task)
echo "Processing: $task_name"
# Codex実行ここは環境に応じて調整
../tools/codex-async-notify.sh "$task_content" > "$LOG_DIR/$task_name.log" 2>&1 &
# API制限対策で少し待つ
sleep 3
done
echo "✅ All tasks submitted!"
echo "📋 Monitor progress in tmux or check logs in: $LOG_DIR"
# 結果集計スクリプト
cat > verify_migration.sh << 'VERIFY'
#!/bin/bash
echo "🔍 Verifying MIR13 migration..."
# レガシー命令が残っていないか確認
legacy_found=0
for pattern in ArrayGet ArraySet RefNew RefGet RefSet TypeCheck Cast PluginInvoke; do
if rg -q "MirInstruction::$pattern" ../src/; then
echo "❌ Still found: $pattern"
rg "MirInstruction::$pattern" ../src/ | head -3
((legacy_found++))
fi
done
if [[ $legacy_found -eq 0 ]]; then
echo "✅ No legacy instructions found!"
echo "🎉 MIR13 migration complete!"
else
echo "⚠️ Found $legacy_found legacy instruction types remaining"
fi
# 新しい統一命令の使用統計
echo ""
echo "📊 Unified instruction usage:"
echo -n " BoxCall: "
rg "MirInstruction::BoxCall" ../src/ | wc -l
echo -n " TypeOp: "
rg "MirInstruction::TypeOp" ../src/ | wc -l
VERIFY
chmod +x verify_migration.sh
MIGRATION_SCRIPT
chmod +x mir13-migration/execute_migration.sh
# === サマリー表示 ===
echo ""
echo "📊 MIR13 Migration Summary:"
echo "=========================="
total_files=0
for pattern in "${LEGACY_PATTERNS[@]}"; do
file="mir13-migration/detections/$pattern.txt"
if [[ -s "$file" ]]; then
count=$(wc -l < "$file")
echo " $pattern: $count files"
((total_files += count))
fi
done
echo "=========================="
echo " Total: $total_files file occurrences"
echo ""
echo "🚀 Next steps:"
echo " 1. cd mir13-migration"
echo " 2. Review task files in patches/"
echo " 3. Run: ./execute_migration.sh"
echo " 4. After completion, run: ./verify_migration.sh"