Skip to content

Commit c7cd997

Browse files
generate-copyright: rename some functions to make it clearer.
Also move some types into their own module, and split up the writelines.
1 parent 485ad80 commit c7cd997

File tree

1 file changed

+36
-19
lines changed
  • src/tools/generate-copyright/src

1 file changed

+36
-19
lines changed

src/tools/generate-copyright/src/main.rs

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,43 @@ fn main() -> Result<(), Error> {
1515
let cargo = env_path("CARGO")?;
1616
let license_metadata = env_path("LICENSE_METADATA")?;
1717

18-
let metadata: Metadata = serde_json::from_slice(&std::fs::read(&license_metadata)?)?;
18+
let collected_tree_metadata: Metadata =
19+
serde_json::from_slice(&std::fs::read(&license_metadata)?)?;
1920

20-
let mut deps_set = BTreeSet::new();
21+
let mut collected_cargo_metadata = BTreeSet::new();
2122

2223
let root_path = std::path::absolute(".")?;
2324
for dep in cargo_metadata::get(&cargo, Path::new("./Cargo.toml"), &root_path)? {
24-
deps_set.insert(dep);
25+
collected_cargo_metadata.insert(dep);
2526
}
2627
for dep in cargo_metadata::get(&cargo, Path::new("./src/tools/cargo/Cargo.toml"), &root_path)? {
27-
deps_set.insert(dep);
28+
collected_cargo_metadata.insert(dep);
2829
}
2930
for dep in cargo_metadata::get(&cargo, Path::new("./library/std/Cargo.toml"), &root_path)? {
30-
deps_set.insert(dep);
31+
collected_cargo_metadata.insert(dep);
3132
}
3233

3334
let mut buffer = Vec::new();
3435

35-
write!(
36+
writeln!(buffer, "# In-tree files")?;
37+
writeln!(buffer)?;
38+
writeln!(
3639
buffer,
37-
"# In-tree files\n\nThe following licenses cover the in-tree source files that were used in this release:\n\n"
40+
"The following licenses cover the in-tree source files that were used in this release:"
3841
)?;
39-
render_recursive(&metadata.files, &mut buffer, 0)?;
42+
writeln!(buffer)?;
43+
render_tree_recursive(&collected_tree_metadata.files, &mut buffer, 0)?;
4044

41-
write!(
45+
writeln!(buffer)?;
46+
47+
writeln!(buffer, "# Out-of-tree files")?;
48+
writeln!(buffer)?;
49+
writeln!(
4250
buffer,
43-
"\n# Out-of-tree files\n\nThe following licenses cover the out-of-tree crates that were used in this release:\n\n"
51+
"The following licenses cover the out-of-tree crates that were used in this release:"
4452
)?;
45-
render_deps(deps_set.iter(), &mut buffer)?;
53+
writeln!(buffer)?;
54+
render_deps(collected_cargo_metadata.iter(), &mut buffer)?;
4655

4756
std::fs::write(&dest, &buffer)?;
4857

@@ -51,47 +60,51 @@ fn main() -> Result<(), Error> {
5160

5261
/// Recursively draw the tree of files/folders we found on disk and their licences, as
5362
/// markdown, into the given Vec.
54-
fn render_recursive(node: &Node, buffer: &mut Vec<u8>, depth: usize) -> Result<(), Error> {
63+
fn render_tree_recursive(
64+
node: &Node,
65+
buffer: &mut Vec<u8>,
66+
depth: usize,
67+
) -> Result<(), Error> {
5568
let prefix = std::iter::repeat("> ").take(depth + 1).collect::<String>();
5669

5770
match node {
5871
Node::Root { children } => {
5972
for child in children {
60-
render_recursive(child, buffer, depth)?;
73+
render_tree_recursive(child, buffer, depth)?;
6174
}
6275
}
6376
Node::Directory { name, children, license } => {
64-
render_license(&prefix, std::iter::once(name), license.iter(), buffer)?;
77+
render_tree_license(&prefix, std::iter::once(name), license.iter(), buffer)?;
6578
if !children.is_empty() {
6679
writeln!(buffer, "{prefix}")?;
6780
writeln!(buffer, "{prefix}*Exceptions:*")?;
6881
for child in children {
6982
writeln!(buffer, "{prefix}")?;
70-
render_recursive(child, buffer, depth + 1)?;
83+
render_tree_recursive(child, buffer, depth + 1)?;
7184
}
7285
}
7386
}
7487
Node::CondensedDirectory { name, licenses } => {
75-
render_license(&prefix, std::iter::once(name), licenses.iter(), buffer)?;
88+
render_tree_license(&prefix, std::iter::once(name), licenses.iter(), buffer)?;
7689
}
7790
Node::Group { files, directories, license } => {
78-
render_license(
91+
render_tree_license(
7992
&prefix,
8093
directories.iter().chain(files.iter()),
8194
std::iter::once(license),
8295
buffer,
8396
)?;
8497
}
8598
Node::File { name, license } => {
86-
render_license(&prefix, std::iter::once(name), std::iter::once(license), buffer)?;
99+
render_tree_license(&prefix, std::iter::once(name), std::iter::once(license), buffer)?;
87100
}
88101
}
89102

90103
Ok(())
91104
}
92105

93106
/// Draw a series of sibling files/folders, as markdown, into the given Vec.
94-
fn render_license<'a>(
107+
fn render_tree_license<'a>(
95108
prefix: &str,
96109
names: impl Iterator<Item = &'a String>,
97110
licenses: impl Iterator<Item = &'a License>,
@@ -143,11 +156,13 @@ fn render_deps<'a, 'b>(
143156
Ok(())
144157
}
145158

159+
/// Describes a tree of metadata for our filesystem tree
146160
#[derive(serde::Deserialize)]
147161
struct Metadata {
148162
files: Node,
149163
}
150164

165+
/// Describes one node in our metadata tree
151166
#[derive(serde::Deserialize)]
152167
#[serde(rename_all = "kebab-case", tag = "type")]
153168
pub(crate) enum Node {
@@ -158,12 +173,14 @@ pub(crate) enum Node {
158173
Group { files: Vec<String>, directories: Vec<String>, license: License },
159174
}
160175

176+
/// A License has an SPDX license name and a list of copyright holders.
161177
#[derive(serde::Deserialize)]
162178
struct License {
163179
spdx: String,
164180
copyright: Vec<String>,
165181
}
166182

183+
/// Grab an environment variable as a PathBuf, or fail nicely.
167184
fn env_path(var: &str) -> Result<PathBuf, Error> {
168185
if let Some(var) = std::env::var_os(var) {
169186
Ok(var.into())

0 commit comments

Comments
 (0)