#!/bin/bash # 功能更新归档脚本 # 用途: 自动创建功能更新归档目录结构,并生成文档模板 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 打印带颜色的信息 print_info() { echo -e "${BLUE}[INFO]${NC} $1" } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否在项目根目录 check_project_root() { if [ ! -f "FILE_ORGANIZATION.md" ]; then print_error "请在项目根目录运行此脚本" exit 1 fi } # 显示使用说明 show_usage() { echo "使用方法: $0 <功能名称> [开发者名称]" echo "" echo "示例:" echo " $0 adaptive_lookahead \"李四\"" echo " $0 dynamic_obstacle_avoidance" echo "" echo "说明:" echo " - 功能名称使用英文和下划线,如: adaptive_lookahead" echo " - 开发者名称可选,默认从git config获取" exit 1 } # 获取当前日期 get_date() { date +%Y%m%d } # 获取开发者名称 get_developer() { if [ -n "$1" ]; then echo "$1" else git config user.name || echo "Unknown" fi } # 获取最新的commit信息 get_latest_commit() { if git rev-parse --git-dir > /dev/null 2>&1; then echo "$(git rev-parse --short HEAD)" else echo "N/A" fi } # 创建归档目录 create_archive_dirs() { local date=$1 local feature_name=$2 local archive_path="archives/updates/${date}_${feature_name}" print_info "创建归档目录: ${archive_path}" mkdir -p "${archive_path}/code" mkdir -p "${archive_path}/docs" mkdir -p "${archive_path}/tests" mkdir -p "docs/updates" print_success "目录创建完成" echo "${archive_path}" } # 生成文档 create_document() { local date=$1 local feature_name=$2 local developer=$3 local commit_hash=$4 local archive_path=$5 local doc_name="UPDATE_${feature_name}_${date}.md" local doc_path="${archive_path}/docs/${doc_name}" local template_path=".claude/templates/feature_update_template.md" print_info "生成文档: ${doc_name}" # 如果模板存在,使用模板;否则创建基本文档 if [ -f "${template_path}" ]; then cp "${template_path}" "${doc_path}" # 替换模板变量 sed -i "s/{{FEATURE_NAME}}/${feature_name}/g" "${doc_path}" sed -i "s/{{DATE}}/${date}/g" "${doc_path}" sed -i "s/{{AUTHOR}}/${developer}/g" "${doc_path}" sed -i "s/{{COMMIT_HASH}}/${commit_hash}/g" "${doc_path}" sed -i "s/{{DATE}}_{{FEATURE_NAME}}/${date}_${feature_name}/g" "${doc_path}" else # 创建基本文档 cat > "${doc_path}" << EOF # 功能更新: ${feature_name} **日期**: ${date} **开发者**: ${developer} **Git Commit**: ${commit_hash} --- ## 功能概述 [简要描述新功能的目的和价值] ## 需求背景 [详细描述需求背景和使用场景] ## 设计方案 [技术设计方案描述] ### 架构设计 [架构设计说明] ### API设计 \`\`\`cpp // 接口定义 \`\`\` ## 实现细节 ### 新增文件 - \`file1.cpp\` - [文件说明] ### 修改文件 - \`file2.cpp\` - [修改说明] ## 使用方法 \`\`\`cpp // 使用示例 \`\`\` ## 测试验证 [测试结果] ## Git提交信息 \`\`\` Commit ID: ${commit_hash} \`\`\` ## 后续计划 - [ ] [待完善项1] - [ ] [待完善项2] --- **归档位置**: \`archives/updates/${date}_${feature_name}/\` EOF fi # 复制到快速查阅目录 cp "${doc_path}" "docs/updates/${doc_name}" print_success "文档生成完成" echo "${doc_path}" } # 显示下一步操作 show_next_steps() { local doc_path=$1 local archive_path=$2 echo "" print_success "功能更新归档创建完成!" echo "" echo "📁 归档目录: ${archive_path}" echo "📄 文档位置: ${doc_path}" echo "📋 快速查阅: docs/updates/" echo "" print_info "下一步操作:" echo " 1. 编辑文档: vim ${doc_path}" echo " 2. 复制新增/修改的代码到: ${archive_path}/code/" echo " 3. 添加测试文件到: ${archive_path}/tests/" echo " 4. 更新使用示例到: examples/" echo " 5. 提交git: git add . && git commit -m \"feature: ${feature_name}\"" echo "" } # 主函数 main() { # 检查参数 if [ $# -lt 1 ]; then show_usage fi local feature_name=$1 local developer=$(get_developer "$2") # 检查项目根目录 check_project_root # 获取信息 local date=$(get_date) local commit_hash=$(get_latest_commit) print_info "开始创建功能更新归档" print_info "功能名称: ${feature_name}" print_info "日期: ${date}" print_info "开发者: ${developer}" print_info "Commit: ${commit_hash}" echo "" # 创建目录 local archive_path=$(create_archive_dirs "${date}" "${feature_name}") # 生成文档 local doc_path=$(create_document "${date}" "${feature_name}" "${developer}" "${commit_hash}" "${archive_path}") # 显示下一步操作 show_next_steps "${doc_path}" "${archive_path}" } # 运行主函数 main "$@"