Skip to content

Commit 5c84ce0

Browse files
committed
Auto merge of #12662 - Angelin01:limit-cargo-add-feature-print, r=weihanglo
Limit cargo add feature print
2 parents 80932be + 9928689 commit 5c84ce0

File tree

14 files changed

+242
-0
lines changed

14 files changed

+242
-0
lines changed

src/cargo/ops/cargo_add/mod.rs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -964,16 +964,45 @@ fn print_dep_table_msg(shell: &mut Shell, dep: &DependencyUI) -> CargoResult<()>
964964
} else {
965965
"".to_owned()
966966
};
967+
967968
shell.write_stderr(format_args!("{}Features{}:\n", prefix, suffix), &style::NOP)?;
969+
970+
const MAX_FEATURE_PRINTS: usize = 50;
971+
972+
let mut activated_printed = 0;
973+
let total_activated = activated.len();
968974
for feat in activated {
975+
if activated_printed >= MAX_FEATURE_PRINTS {
976+
let remaining = total_activated - activated_printed;
977+
shell.write_stderr(
978+
format_args!("{prefix}... {remaining} more activated features\n"),
979+
&style::NOP,
980+
)?;
981+
break;
982+
}
983+
969984
shell.write_stderr(&prefix, &style::NOP)?;
970985
shell.write_stderr('+', &style::GOOD)?;
971986
shell.write_stderr(format_args!(" {}\n", feat), &style::NOP)?;
987+
activated_printed += 1;
972988
}
989+
990+
let mut deactivated_printed = 0;
991+
let total_deactivated = deactivated.len();
973992
for feat in deactivated {
993+
if activated_printed + deactivated_printed >= MAX_FEATURE_PRINTS {
994+
let remaining = total_deactivated - deactivated_printed;
995+
shell.write_stderr(
996+
format_args!("{prefix}... {remaining} more deactivated features\n"),
997+
&style::NOP,
998+
)?;
999+
break;
1000+
}
1001+
9741002
shell.write_stderr(&prefix, &style::NOP)?;
9751003
shell.write_stderr('-', &style::ERROR)?;
9761004
shell.write_stderr(format_args!(" {}\n", feat), &style::NOP)?;
1005+
deactivated_printed += 1;
9771006
}
9781007
}
9791008

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[workspace]
2+
3+
[package]
4+
name = "cargo-list-test-fixture"
5+
version = "0.0.0"

tests/testsuite/cargo_add/features_too_many_activated/in/src/lib.rs

Whitespace-only changes.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use cargo_test_support::compare::assert_ui;
2+
use cargo_test_support::prelude::*;
3+
use cargo_test_support::Project;
4+
use itertools::Itertools;
5+
6+
use cargo_test_support::curr_dir;
7+
8+
#[cargo_test]
9+
fn case() {
10+
const MANY_FEATURES_COUNT: usize = 200;
11+
const ACTIVATED_FEATURES_COUNT: usize = 100;
12+
13+
cargo_test_support::registry::init();
14+
let mut test_package =
15+
cargo_test_support::registry::Package::new("your-face", "99999.0.0+my-package");
16+
for i in 0..MANY_FEATURES_COUNT {
17+
test_package.feature(format!("eyes{i:03}").as_str(), &[]);
18+
}
19+
test_package.publish();
20+
21+
let project = Project::from_template(curr_dir!().join("in"));
22+
let project_root = project.root();
23+
let cwd = &project_root;
24+
25+
let features = (0..ACTIVATED_FEATURES_COUNT)
26+
.map(|i| format!("eyes{i:03}"))
27+
.join(",");
28+
snapbox::cmd::Command::cargo_ui()
29+
.arg("add")
30+
.arg_line(format!("your-face --features {features}").as_str())
31+
.current_dir(cwd)
32+
.assert()
33+
.success()
34+
.stdout_matches_path(curr_dir!().join("stdout.log"))
35+
.stderr_matches_path(curr_dir!().join("stderr.log"));
36+
37+
assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
38+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[workspace]
2+
3+
[package]
4+
name = "cargo-list-test-fixture"
5+
version = "0.0.0"
6+
7+
[dependencies]
8+
your-face = { version = "99999.0.0", features = ["eyes000", "eyes001", "eyes002", "eyes003", "eyes004", "eyes005", "eyes006", "eyes007", "eyes008", "eyes009", "eyes010", "eyes011", "eyes012", "eyes013", "eyes014", "eyes015", "eyes016", "eyes017", "eyes018", "eyes019", "eyes020", "eyes021", "eyes022", "eyes023", "eyes024", "eyes025", "eyes026", "eyes027", "eyes028", "eyes029", "eyes030", "eyes031", "eyes032", "eyes033", "eyes034", "eyes035", "eyes036", "eyes037", "eyes038", "eyes039", "eyes040", "eyes041", "eyes042", "eyes043", "eyes044", "eyes045", "eyes046", "eyes047", "eyes048", "eyes049", "eyes050", "eyes051", "eyes052", "eyes053", "eyes054", "eyes055", "eyes056", "eyes057", "eyes058", "eyes059", "eyes060", "eyes061", "eyes062", "eyes063", "eyes064", "eyes065", "eyes066", "eyes067", "eyes068", "eyes069", "eyes070", "eyes071", "eyes072", "eyes073", "eyes074", "eyes075", "eyes076", "eyes077", "eyes078", "eyes079", "eyes080", "eyes081", "eyes082", "eyes083", "eyes084", "eyes085", "eyes086", "eyes087", "eyes088", "eyes089", "eyes090", "eyes091", "eyes092", "eyes093", "eyes094", "eyes095", "eyes096", "eyes097", "eyes098", "eyes099"] }
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
Updating `dummy-registry` index
2+
Adding your-face v99999.0.0 to dependencies.
3+
Features:
4+
+ eyes000
5+
+ eyes001
6+
+ eyes002
7+
+ eyes003
8+
+ eyes004
9+
+ eyes005
10+
+ eyes006
11+
+ eyes007
12+
+ eyes008
13+
+ eyes009
14+
+ eyes010
15+
+ eyes011
16+
+ eyes012
17+
+ eyes013
18+
+ eyes014
19+
+ eyes015
20+
+ eyes016
21+
+ eyes017
22+
+ eyes018
23+
+ eyes019
24+
+ eyes020
25+
+ eyes021
26+
+ eyes022
27+
+ eyes023
28+
+ eyes024
29+
+ eyes025
30+
+ eyes026
31+
+ eyes027
32+
+ eyes028
33+
+ eyes029
34+
+ eyes030
35+
+ eyes031
36+
+ eyes032
37+
+ eyes033
38+
+ eyes034
39+
+ eyes035
40+
+ eyes036
41+
+ eyes037
42+
+ eyes038
43+
+ eyes039
44+
+ eyes040
45+
+ eyes041
46+
+ eyes042
47+
+ eyes043
48+
+ eyes044
49+
+ eyes045
50+
+ eyes046
51+
+ eyes047
52+
+ eyes048
53+
+ eyes049
54+
... 50 more activated features
55+
... 100 more deactivated features

tests/testsuite/cargo_add/features_too_many_activated/stdout.log

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
[workspace]
2+
3+
[package]
4+
name = "cargo-list-test-fixture"
5+
version = "0.0.0"

tests/testsuite/cargo_add/features_too_many_few_activated/in/src/lib.rs

Whitespace-only changes.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use cargo_test_support::compare::assert_ui;
2+
use cargo_test_support::prelude::*;
3+
use cargo_test_support::Project;
4+
use itertools::Itertools;
5+
6+
use cargo_test_support::curr_dir;
7+
8+
#[cargo_test]
9+
fn case() {
10+
const MANY_FEATURES_COUNT: usize = 200;
11+
const ACTIVATED_FEATURES_COUNT: usize = 10;
12+
13+
cargo_test_support::registry::init();
14+
let mut test_package =
15+
cargo_test_support::registry::Package::new("your-face", "99999.0.0+my-package");
16+
for i in 0..MANY_FEATURES_COUNT {
17+
test_package.feature(format!("eyes{i:03}").as_str(), &[]);
18+
}
19+
test_package.publish();
20+
21+
let project = Project::from_template(curr_dir!().join("in"));
22+
let project_root = project.root();
23+
let cwd = &project_root;
24+
25+
let features = (0..ACTIVATED_FEATURES_COUNT)
26+
.map(|i| format!("eyes{i:03}"))
27+
.join(",");
28+
snapbox::cmd::Command::cargo_ui()
29+
.arg("add")
30+
.arg_line(format!("your-face --features {features}").as_str())
31+
.current_dir(cwd)
32+
.assert()
33+
.success()
34+
.stdout_matches_path(curr_dir!().join("stdout.log"))
35+
.stderr_matches_path(curr_dir!().join("stderr.log"));
36+
37+
assert_ui().subset_matches(curr_dir!().join("out"), &project_root);
38+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[workspace]
2+
3+
[package]
4+
name = "cargo-list-test-fixture"
5+
version = "0.0.0"
6+
7+
[dependencies]
8+
your-face = { version = "99999.0.0", features = ["eyes000", "eyes001", "eyes002", "eyes003", "eyes004", "eyes005", "eyes006", "eyes007", "eyes008", "eyes009"] }
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
Updating `dummy-registry` index
2+
Adding your-face v99999.0.0 to dependencies.
3+
Features:
4+
+ eyes000
5+
+ eyes001
6+
+ eyes002
7+
+ eyes003
8+
+ eyes004
9+
+ eyes005
10+
+ eyes006
11+
+ eyes007
12+
+ eyes008
13+
+ eyes009
14+
- eyes010
15+
- eyes011
16+
- eyes012
17+
- eyes013
18+
- eyes014
19+
- eyes015
20+
- eyes016
21+
- eyes017
22+
- eyes018
23+
- eyes019
24+
- eyes020
25+
- eyes021
26+
- eyes022
27+
- eyes023
28+
- eyes024
29+
- eyes025
30+
- eyes026
31+
- eyes027
32+
- eyes028
33+
- eyes029
34+
- eyes030
35+
- eyes031
36+
- eyes032
37+
- eyes033
38+
- eyes034
39+
- eyes035
40+
- eyes036
41+
- eyes037
42+
- eyes038
43+
- eyes039
44+
- eyes040
45+
- eyes041
46+
- eyes042
47+
- eyes043
48+
- eyes044
49+
- eyes045
50+
- eyes046
51+
- eyes047
52+
- eyes048
53+
- eyes049
54+
... 150 more deactivated features

tests/testsuite/cargo_add/features_too_many_few_activated/stdout.log

Whitespace-only changes.

tests/testsuite/cargo_add/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ mod features_empty;
2222
mod features_multiple_occurrences;
2323
mod features_preserve;
2424
mod features_spaced_values;
25+
mod features_too_many_activated;
26+
mod features_too_many_few_activated;
2527
mod features_unknown;
2628
mod features_unknown_no_features;
2729
mod git;

0 commit comments

Comments
 (0)