Files
agv-control-slam/scripts/archive_feature.sh
2025-11-15 14:31:47 +08:00

252 lines
5.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"