@@ -15,34 +15,43 @@ fn main() -> Result<(), Error> {
15
15
let cargo = env_path ( "CARGO" ) ?;
16
16
let license_metadata = env_path ( "LICENSE_METADATA" ) ?;
17
17
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) ?) ?;
19
20
20
- let mut deps_set = BTreeSet :: new ( ) ;
21
+ let mut collected_cargo_metadata = BTreeSet :: new ( ) ;
21
22
22
23
let root_path = std:: path:: absolute ( "." ) ?;
23
24
for dep in cargo_metadata:: get ( & cargo, Path :: new ( "./Cargo.toml" ) , & root_path) ? {
24
- deps_set . insert ( dep) ;
25
+ collected_cargo_metadata . insert ( dep) ;
25
26
}
26
27
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) ;
28
29
}
29
30
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) ;
31
32
}
32
33
33
34
let mut buffer = Vec :: new ( ) ;
34
35
35
- write ! (
36
+ writeln ! ( buffer, "# In-tree files" ) ?;
37
+ writeln ! ( buffer) ?;
38
+ writeln ! (
36
39
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:"
38
41
) ?;
39
- render_recursive ( & metadata. files , & mut buffer, 0 ) ?;
42
+ writeln ! ( buffer) ?;
43
+ render_tree_recursive ( & collected_tree_metadata. files , & mut buffer, 0 ) ?;
40
44
41
- write ! (
45
+ writeln ! ( buffer) ?;
46
+
47
+ writeln ! ( buffer, "# Out-of-tree files" ) ?;
48
+ writeln ! ( buffer) ?;
49
+ writeln ! (
42
50
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:"
44
52
) ?;
45
- render_deps ( deps_set. iter ( ) , & mut buffer) ?;
53
+ writeln ! ( buffer) ?;
54
+ render_deps ( collected_cargo_metadata. iter ( ) , & mut buffer) ?;
46
55
47
56
std:: fs:: write ( & dest, & buffer) ?;
48
57
@@ -51,47 +60,51 @@ fn main() -> Result<(), Error> {
51
60
52
61
/// Recursively draw the tree of files/folders we found on disk and their licences, as
53
62
/// 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 > {
55
68
let prefix = std:: iter:: repeat ( "> " ) . take ( depth + 1 ) . collect :: < String > ( ) ;
56
69
57
70
match node {
58
71
Node :: Root { children } => {
59
72
for child in children {
60
- render_recursive ( child, buffer, depth) ?;
73
+ render_tree_recursive ( child, buffer, depth) ?;
61
74
}
62
75
}
63
76
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) ?;
65
78
if !children. is_empty ( ) {
66
79
writeln ! ( buffer, "{prefix}" ) ?;
67
80
writeln ! ( buffer, "{prefix}*Exceptions:*" ) ?;
68
81
for child in children {
69
82
writeln ! ( buffer, "{prefix}" ) ?;
70
- render_recursive ( child, buffer, depth + 1 ) ?;
83
+ render_tree_recursive ( child, buffer, depth + 1 ) ?;
71
84
}
72
85
}
73
86
}
74
87
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) ?;
76
89
}
77
90
Node :: Group { files, directories, license } => {
78
- render_license (
91
+ render_tree_license (
79
92
& prefix,
80
93
directories. iter ( ) . chain ( files. iter ( ) ) ,
81
94
std:: iter:: once ( license) ,
82
95
buffer,
83
96
) ?;
84
97
}
85
98
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) ?;
87
100
}
88
101
}
89
102
90
103
Ok ( ( ) )
91
104
}
92
105
93
106
/// Draw a series of sibling files/folders, as markdown, into the given Vec.
94
- fn render_license < ' a > (
107
+ fn render_tree_license < ' a > (
95
108
prefix : & str ,
96
109
names : impl Iterator < Item = & ' a String > ,
97
110
licenses : impl Iterator < Item = & ' a License > ,
@@ -143,11 +156,13 @@ fn render_deps<'a, 'b>(
143
156
Ok ( ( ) )
144
157
}
145
158
159
+ /// Describes a tree of metadata for our filesystem tree
146
160
#[ derive( serde:: Deserialize ) ]
147
161
struct Metadata {
148
162
files : Node ,
149
163
}
150
164
165
+ /// Describes one node in our metadata tree
151
166
#[ derive( serde:: Deserialize ) ]
152
167
#[ serde( rename_all = "kebab-case" , tag = "type" ) ]
153
168
pub ( crate ) enum Node {
@@ -158,12 +173,14 @@ pub(crate) enum Node {
158
173
Group { files : Vec < String > , directories : Vec < String > , license : License } ,
159
174
}
160
175
176
+ /// A License has an SPDX license name and a list of copyright holders.
161
177
#[ derive( serde:: Deserialize ) ]
162
178
struct License {
163
179
spdx : String ,
164
180
copyright : Vec < String > ,
165
181
}
166
182
183
+ /// Grab an environment variable as a PathBuf, or fail nicely.
167
184
fn env_path ( var : & str ) -> Result < PathBuf , Error > {
168
185
if let Some ( var) = std:: env:: var_os ( var) {
169
186
Ok ( var. into ( ) )
0 commit comments