Skip to main content

bake_license/
lib.rs

1// Released under the MIT License.
2// Copyright, 2026, by Samuel Williams.
3
4//! License and copyright maintenance tasks for Bake.
5mod authorship;
6mod source;
7mod update;
8mod update_summary;
9
10#[cfg(test)]
11mod test_support;
12
13pub use update::update;
14pub use update_summary::UpdateSummary;
15/// Compatibility name for [`UpdateSummary`].
16pub use update_summary::UpdateSummary as Update;
17
18/// Refresh `license.md`, the README License section, and Rust source headers.
19#[bake::task(name = "license:update")]
20pub fn refresh(context: &mut bake::Context) -> bake::Result<String> {
21    let summary = update(context.root())?;
22    Ok(format!(
23        "Changed {} file(s); refreshed {} tracked Rust source file(s)",
24        summary.files_changed, summary.source_files,
25    ))
26}
27
28#[cfg(test)]
29mod task_tests {
30    use crate::test_support::GitRepository;
31    use bake::Registry;
32    use tempfile::tempdir;
33
34    #[test]
35    fn reports_updated_license_and_source_file_counts() {
36        let repository = GitRepository::new();
37        repository.write("src/lib.rs", "pub fn example() {}\n");
38        repository.commit(
39            "Alice",
40            "alice@example.com",
41            "2024-01-02T03:04:05+00:00",
42            "Add source",
43        );
44
45        let mut context = Registry::new().context(repository.root());
46        let result = crate::refresh(&mut context).unwrap();
47
48        assert_eq!(
49            result,
50            "Changed 2 file(s); refreshed 1 tracked Rust source file(s)"
51        );
52    }
53
54    #[test]
55    fn propagates_update_errors_from_the_license_task() {
56        let directory = tempdir().unwrap();
57        let mut context = Registry::new().context(directory.path());
58
59        assert!(crate::refresh(&mut context).is_err());
60    }
61}