Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制

Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制

安装

在项目目录中运行以下Cargo命令:

cargo add scm-record

或者在Cargo.toml中添加以下行:

scm-record = "0.8.0"

基本使用示例

scm-record是一个用于记录源代码变更的SCM工具,可以帮助开发者高效管理版本控制。以下是基本使用示例:

use scm_record::{Record, RecordBuilder};

fn main() {
    // 创建一个新的记录构建器
    let mut builder = RecordBuilder::new();
    
    // 添加文件变更
    builder.add_file_change("src/main.rs", "Initial version");
    builder.add_file_change("Cargo.toml", "Added scm-record dependency");
    
    // 构建记录
    let record: Record = builder.build();
    
    // 打印记录摘要
    println!("Record summary: {}", record.summary());
    
    // 可以将记录应用到版本控制系统
    record.apply().expect("Failed to apply changes");
}

完整示例DEMO

下面是一个更完整的示例,展示如何使用scm-record来管理复杂的变更:

use scm_record::{Record, RecordBuilder, ChangeType};
use std::path::PathBuf;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建记录构建器
    let mut builder = RecordBuilder::new();
    
    // 添加不同类型的变更
    builder.add_change(
        PathBuf::from("src/lib.rs"),
        ChangeType::Modified,
        "Added new feature X"
    );
    
    builder.add_change(
        PathBuf::from("src/old_file.rs"),
        ChangeType::Deleted,
        "Removed deprecated functionality"
    );
    
    builder.add_change(
        PathBuf::from("src/new_feature.rs"),
        ChangeType::Added,
        "Implemented new module"
    );
    
    // 设置记录的元数据
    builder.set_author("John Doe <john@example.com>");
    builder.set_description("这个提交包含多项改进和重构");
    
    // 构建记录
    let record = builder.build();
    
    // 验证记录
    if record.validate().is_err() {
        eprintln!("记录包含无效的变更");
        return Ok(());
    }
    
    // 应用记录
    record.apply()?;
    
    // 也可以将记录保存为文件
    record.write_to_file("changes.scm")?;
    
    Ok(())
}

主要功能

  1. 变更跟踪:可以跟踪添加、修改和删除的文件
  2. 元数据管理:支持设置作者、描述等提交信息
  3. 验证功能:在应用前验证变更的有效性
  4. 序列化支持:可以将记录保存到文件或从文件加载

许可证

scm-record采用MIT或Apache-2.0双许可证发布。


1 回复

Rust SCM记录工具scm-record的使用:高效管理源代码变更与版本控制

scm-record是一个为Rust开发者设计的源代码管理记录工具,它可以帮助开发者更高效地跟踪和管理代码变更,简化版本控制流程。

主要功能

  1. 自动记录代码变更
  2. 生成简洁的变更日志
  3. 与Git等版本控制系统集成
  4. 提供变更分类和标记功能

安装方法

cargo install scm-record

或者在你的Cargo.toml中添加依赖:

[dependencies]
scm-record = "0.3.0"

完整示例代码

下面是一个使用scm-record的完整工作流示例:

use scm_record::{Repository, Change, ChangeType, GitIntegration};

fn main() {
    // 1. 初始化项目记录
    let repo = Repository::init(".").expect("初始化仓库失败");
    
    // 2. 初始化Git集成
    let git = GitIntegration::new(".").expect("初始化Git集成失败");
    
    // 3. 创建几个变更记录
    let bugfix = Change::new("修复登录页面CSS问题")
        .set_type(ChangeType::BugFix)
        .add_file("src/login.rs")
        .add_file("assets/css/login.css");
    
    let feature = Change::new("添加密码重置功能")
        .set_type(ChangeType::Feature)
        .add_file("src/auth.rs")
        .add_file("tests/auth_test.rs");
    
    let chore = Change::new("更新依赖版本")
        .set_type(ChangeType::Chore)
        .add_file("Cargo.toml");
    
    // 4. 记录变更到仓库
    let record = repo.record()
        .add_change(bugfix)
        .add_change(feature)
        .add_change(chore)
        .with_message("准备发布1.2.0版本")
        .finalize()
        .expect("记录变更失败");
    
    println!("成功记录{}项变更", record.changes().len());
    
    // 5. 与Git集成 - 记录暂存区变更
    let staged_changes = git.record_staged_changes("自动提交暂存区变更")
        .expect("记录暂存区变更失败");
    
    // 6. 生成变更日志
    let changelog = repo.generate_changelog()
        .expect("生成变更日志失败");
    
    // 7. 保存变更日志到文件
    std::fs::write("CHANGELOG.md", changelog)
        .expect("写入变更日志文件失败");
    
    println!("变更日志已生成并保存到CHANGELOG.md");
    
    // 8. 使用自定义模板格式化变更
    let template = scm_record::ChangeTemplate::new()
        .set_header_format("{type}: {description}")
        .add_type_mapping(ChangeType::BugFix, "修复")
        .add_type_mapping(ChangeType::Feature, "功能");
    
    let sample_change = template.create_change(
        ChangeType::Feature,
        "添加用户偏好设置页面"
    );
    
    println!("格式化后的变更: {}", sample_change.format());
}

配置示例

在项目根目录创建.scm-record.toml文件:

[core]
auto_detect_vcs = true
default_change_type = "feature"

[output]
changelog_file = "CHANGES.md"
compact_mode = true

[git]
auto_stage = true
commit_message_template = "{type}: {description}"

变更类型说明

scm-record支持以下几种标准变更类型:

  1. Feature - 新功能
  2. BugFix - bug修复
  3. Chore - 维护性任务
  4. Refactor - 代码重构
  5. Documentation - 文档更新
  6. Performance - 性能优化
  7. Test - 测试相关变更

高级用法示例

use scm_record::{Change, ChangeType, Record};

// 批量创建变更记录
fn batch_create_changes() -> Record {
    let changes = vec![
        Change::new("修复用户注册验证逻辑")
            .set_type(ChangeType::BugFix)
            .add_file("src/auth.rs")
            .add_file("tests/auth_test.rs"),
        
        Change::new("添加黑暗模式支持")
            .set_type(ChangeType::Feature)
            .add_file("src/theme.rs")
            .add_file("assets/css/theme.css"),
            
        Change::new("更新项目文档")
            .set_type(ChangeType::Documentation)
            .add_file("README.md")
    ];
    
    let mut record = Record::new();
    for change in changes {
        record.add_change(change);
    }
    
    record.finalize()
}

scm-record通过提供结构化的变更记录方式,可以帮助团队更好地维护代码变更历史,生成更有意义的发布说明,并简化版本控制工作流。

回到顶部