@@ -1,8 +1,9 @@
1−use std::collections::{HashMap};
1+use std::collections::HashMap;
2use std::io::{self, BufRead};
2use std::io::{self, BufRead};
4use lazy_regex::regex;
4use lazy_regex::regex;
5use regex::Regex;
5use regex::Regex;
6+use structopt::StructOpt;
7type H = HashMap<Header, Vec<(String, String, String)>>;
8type H = HashMap<Header, Vec<(String, String, String)>>;
@@ -12,7 +13,29 @@ enum Header {
12 Missing { package: String },
13 Missing { package: String },
16+#[derive(Debug, StructOpt)]
19+ about = "Automates generation of bounds in build-constraints.yaml"
15fn main() {
26fn main() {
27+ let opt = Opt::from_args();
29+ Opt::Clear => clear(),
16 let mut lib_exes: H = Default::default();
39 let mut lib_exes: H = Default::default();
17 let mut tests: H = Default::default();
40 let mut tests: H = Default::default();
18 let mut benches: H = Default::default();
41 let mut benches: H = Default::default();
@@ -61,12 +84,18 @@ fn main() {
87+ let mut auto_lib_exes = vec![];
88+ let mut auto_tests = vec![];
89+ let mut auto_benches = vec![];
64 if !lib_exes.is_empty() {
91 if !lib_exes.is_empty() {
65 println!("\nLIBS + EXES\n");
92 println!("\nLIBS + EXES\n");
67 for (header, packages) in lib_exes {
94 for (header, packages) in lib_exes {
68 for (package, version, component) in packages {
95 for (package, version, component) in packages {
69− printer(" ", &package, true, &version, &component, &header);
96+ let s = printer(" ", &package, true, &version, &component, &header);
98+ auto_lib_exes.push(s);
@@ -75,7 +104,9 @@ fn main() {
76 for (header, packages) in tests {
105 for (header, packages) in tests {
77 for (package, version, component) in packages {
106 for (package, version, component) in packages {
78− printer(" ", &package, false, &version, &component, &header);
107+ let s = printer(" ", &package, false, &version, &component, &header);
@@ -84,9 +115,20 @@ fn main() {
85 for (header, packages) in benches {
116 for (header, packages) in benches {
86 for (package, version, component) in packages {
117 for (package, version, component) in packages {
87− printer(" ", &package, false, &version, &component, &header);
118+ let s = printer(" ", &package, false, &version, &component, &header);
120+ auto_benches.push(s);
126+ "Adding {lib_exes} libs, {tests} tests, {benches} benches to build-constraints.yaml",
127+ lib_exes = auto_lib_exes.len(),
128+ tests = auto_tests.len(),
129+ benches = auto_benches.len()
131+ commenter::add(auto_lib_exes, auto_tests, auto_benches);
92fn printer(
134fn printer(
@@ -96,9 +138,9 @@ fn printer(
96 version: &str,
138 version: &str,
97 component: &str,
139 component: &str,
98 header: &Header,
140 header: &Header,
100 let lt0 = if lt0 { " < 0" } else { "" };
142 let lt0 = if lt0 { " < 0" } else { "" };
101− println!(
143+ format!(
102 "{indent}- {package}{lt0} # tried {package}-{version}, but its *{component}* {cause}",
144 "{indent}- {package}{lt0} # tried {package}-{version}, but its *{component}* {cause}",
103 indent = indent,
145 indent = indent,
104 package = package,
146 package = package,
@@ -116,7 +158,7 @@ fn printer(
116 package = package
158 package = package
122fn insert(h: &mut H, header: Header, package: &str, version: &str, component: &str) {
164fn insert(h: &mut H, header: Header, package: &str, version: &str, component: &str) {