@@ -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 \n The 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 \n The 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 ) ]
147161struct 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" ) ]
153168pub ( 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 ) ]
162178struct License {
163179 spdx : String ,
164180 copyright : Vec < String > ,
165181}
166182
183+ /// Grab an environment variable as a PathBuf, or fail nicely.
167184fn env_path ( var : & str ) -> Result < PathBuf , Error > {
168185 if let Some ( var) = std:: env:: var_os ( var) {
169186 Ok ( var. into ( ) )
0 commit comments