summaryrefslogtreecommitdiffstats
path: root/src/tools/generate-copyright
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:26:03 +0000
commit9918693037dce8aa4bb6f08741b6812923486c18 (patch)
tree21d2b40bec7e6a7ea664acee056eb3d08e15a1cf /src/tools/generate-copyright
parentReleasing progress-linux version 1.75.0+dfsg1-5~progress7.99u1. (diff)
downloadrustc-9918693037dce8aa4bb6f08741b6812923486c18.tar.xz
rustc-9918693037dce8aa4bb6f08741b6812923486c18.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/tools/generate-copyright')
-rw-r--r--src/tools/generate-copyright/src/main.rs37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/tools/generate-copyright/src/main.rs b/src/tools/generate-copyright/src/main.rs
index 60c771676..558e87290 100644
--- a/src/tools/generate-copyright/src/main.rs
+++ b/src/tools/generate-copyright/src/main.rs
@@ -1,4 +1,5 @@
use anyhow::Error;
+use std::collections::BTreeSet;
use std::io::Write;
use std::path::PathBuf;
@@ -26,7 +27,7 @@ fn render_recursive(node: &Node, buffer: &mut Vec<u8>, depth: usize) -> Result<(
}
}
Node::Directory { name, children, license } => {
- render_license(&prefix, std::iter::once(name), license, buffer)?;
+ render_license(&prefix, std::iter::once(name), license.iter(), buffer)?;
if !children.is_empty() {
writeln!(buffer, "{prefix}")?;
writeln!(buffer, "{prefix}*Exceptions:*")?;
@@ -36,11 +37,19 @@ fn render_recursive(node: &Node, buffer: &mut Vec<u8>, depth: usize) -> Result<(
}
}
}
+ Node::CondensedDirectory { name, licenses } => {
+ render_license(&prefix, std::iter::once(name), licenses.iter(), buffer)?;
+ }
Node::Group { files, directories, license } => {
- render_license(&prefix, directories.iter().chain(files.iter()), license, buffer)?;
+ render_license(
+ &prefix,
+ directories.iter().chain(files.iter()),
+ std::iter::once(license),
+ buffer,
+ )?;
}
Node::File { name, license } => {
- render_license(&prefix, std::iter::once(name), license, buffer)?;
+ render_license(&prefix, std::iter::once(name), std::iter::once(license), buffer)?;
}
}
@@ -50,15 +59,26 @@ fn render_recursive(node: &Node, buffer: &mut Vec<u8>, depth: usize) -> Result<(
fn render_license<'a>(
prefix: &str,
names: impl Iterator<Item = &'a String>,
- license: &License,
+ licenses: impl Iterator<Item = &'a License>,
buffer: &mut Vec<u8>,
) -> Result<(), Error> {
+ let mut spdxs = BTreeSet::new();
+ let mut copyrights = BTreeSet::new();
+ for license in licenses {
+ spdxs.insert(&license.spdx);
+ for copyright in &license.copyright {
+ copyrights.insert(copyright);
+ }
+ }
+
for name in names {
writeln!(buffer, "{prefix}**`{name}`** ")?;
}
- writeln!(buffer, "{prefix}License: `{}` ", license.spdx)?;
- for (i, copyright) in license.copyright.iter().enumerate() {
- let suffix = if i == license.copyright.len() - 1 { "" } else { " " };
+ for spdx in spdxs.iter() {
+ writeln!(buffer, "{prefix}License: `{spdx}` ")?;
+ }
+ for (i, copyright) in copyrights.iter().enumerate() {
+ let suffix = if i == copyrights.len() - 1 { "" } else { " " };
writeln!(buffer, "{prefix}Copyright: {copyright}{suffix}")?;
}
@@ -74,7 +94,8 @@ struct Metadata {
#[serde(rename_all = "kebab-case", tag = "type")]
pub(crate) enum Node {
Root { children: Vec<Node> },
- Directory { name: String, children: Vec<Node>, license: License },
+ Directory { name: String, children: Vec<Node>, license: Option<License> },
+ CondensedDirectory { name: String, licenses: Vec<License> },
File { name: String, license: License },
Group { files: Vec<String>, directories: Vec<String>, license: License },
}