252 lines
5.2 KiB
Bash
252 lines
5.2 KiB
Bash
#!/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 "$@"
|