Skip to content

Commit b2c77ea

Browse files
authored
[2/n] [dropshot-api-manager] dedupe compatibility issues across APIs and versions
A lot of compat issues affect entire ranges of versions, and deduping them leads to a nicer user experience. <img width="1514" height="509" alt="image" src="https://github.com/user-attachments/assets/e027b820-c6c5-459e-b1c5-c85eb247fccc" /> Reviewers: david-crespo Reviewed By: david-crespo Pull Request: #103
1 parent 4e0e89e commit b2c77ea

14 files changed

Lines changed: 926 additions & 243 deletions

File tree

crates/dropshot-api-manager/src/cmd/generate.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33
use crate::{
44
FAILURE_EXIT_CODE,
55
apis::ManagedApis,
6+
compatibility::CompatIssueLocation,
67
environment::{BlessedSource, GeneratedSource, ResolvedEnv},
78
output::{
8-
CheckResult, OutputOpts, Styles, display_api_spec_version,
9-
display_load_problems, display_non_version_problems,
10-
display_resolution, display_version_problems,
9+
CheckResult, CompatDisplayContext, OutputOpts, Styles,
10+
display_api_spec_version, display_load_problems,
11+
display_non_version_problems, display_resolution,
12+
display_version_problems,
1113
headers::{self, *},
1214
plural,
1315
},
@@ -216,6 +218,8 @@ fn generate_impl_inner(
216218
display_load_problems(writer, &errors, styles)?;
217219
let resolved =
218220
Resolved::new(env, apis, &blessed, &generated, &local_files_recheck);
221+
let dedup = resolved.build_compat_dedup_map();
222+
219223
let orphaned_and_unparseable: Vec<_> =
220224
resolved.orphaned_and_unparseable().collect();
221225
nproblems += orphaned_and_unparseable.len();
@@ -237,7 +241,13 @@ fn generate_impl_inner(
237241
(this is a bug)",
238242
ident, version
239243
)?;
240-
display_version_problems(writer, env, problems, styles)?;
244+
let compat_ctx = CompatDisplayContext {
245+
dedup: &dedup,
246+
current: CompatIssueLocation { api: ident, version },
247+
};
248+
display_version_problems(
249+
writer, env, problems, styles, compat_ctx,
250+
)?;
241251
}
242252
}
243253

@@ -259,6 +269,7 @@ fn generate_impl_inner(
259269
// Release borrows held by `resolved`, then drop all source
260270
// collections in parallel. Each contains many parsed OpenAPI
261271
// documents whose sequential drops are costly.
272+
drop(dedup);
262273
drop(resolved);
263274
std::thread::scope(|s| {
264275
s.spawn(|| drop(blessed));

0 commit comments

Comments
 (0)