Skip to content

Commit afe8d24

Browse files
committed
Merge dev into version-set
2 parents 7727938 + c597f74 commit afe8d24

17 files changed

+300
-114
lines changed

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ include = ["Cargo.toml", "LICENSE", "README.md", "src/**", "tests/**", "examples
2323
thiserror = "1.0"
2424
rustc-hash = "1.1.0"
2525
serde = { version = "1.0", features = ["derive"], optional = true }
26+
log = "0.4.14" # for debug logs in tests
2627

2728
[dev-dependencies]
2829
proptest = "0.10.1"
2930
ron = "0.6"
3031
varisat = "0.2.2"
3132
criterion = "0.3"
33+
env_logger = "0.9.0"
3234

3335
[[bench]]
3436
name = "large_case"

examples/branching_error_reporting.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,44 @@ fn main() {
1515
// root 1.0.0 depends on foo ^1.0.0
1616
dependency_provider.add_dependencies(
1717
"root", (1, 0, 0),
18-
vec![("foo", Range::between((1, 0, 0), (2, 0, 0)))],
18+
[("foo", Range::from_range_bounds((1, 0, 0)..(2, 0, 0)))],
1919
);
2020
#[rustfmt::skip]
2121
// foo 1.0.0 depends on a ^1.0.0 and b ^1.0.0
2222
dependency_provider.add_dependencies(
2323
"foo", (1, 0, 0),
24-
vec![
25-
("a", Range::between((1, 0, 0), (2, 0, 0))),
26-
("b", Range::between((1, 0, 0), (2, 0, 0))),
24+
[
25+
("a", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
26+
("b", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
2727
],
2828
);
2929
#[rustfmt::skip]
3030
// foo 1.1.0 depends on x ^1.0.0 and y ^1.0.0
3131
dependency_provider.add_dependencies(
3232
"foo", (1, 1, 0),
33-
vec![
34-
("x", Range::between((1, 0, 0), (2, 0, 0))),
35-
("y", Range::between((1, 0, 0), (2, 0, 0))),
33+
[
34+
("x", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
35+
("y", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
3636
],
3737
);
3838
#[rustfmt::skip]
3939
// a 1.0.0 depends on b ^2.0.0
4040
dependency_provider.add_dependencies(
4141
"a", (1, 0, 0),
42-
vec![("b", Range::between((2, 0, 0), (3, 0, 0)))],
42+
[("b", Range::from_range_bounds((2, 0, 0)..(3, 0, 0)))],
4343
);
4444
// b 1.0.0 and 2.0.0 have no dependencies.
45-
dependency_provider.add_dependencies("b", (1, 0, 0), vec![]);
46-
dependency_provider.add_dependencies("b", (2, 0, 0), vec![]);
45+
dependency_provider.add_dependencies("b", (1, 0, 0), []);
46+
dependency_provider.add_dependencies("b", (2, 0, 0), []);
4747
#[rustfmt::skip]
4848
// x 1.0.0 depends on y ^2.0.0.
4949
dependency_provider.add_dependencies(
5050
"x", (1, 0, 0),
51-
vec![("y", Range::between((2, 0, 0), (3, 0, 0)))],
51+
[("y", Range::from_range_bounds((2, 0, 0)..(3, 0, 0)))],
5252
);
5353
// y 1.0.0 and 2.0.0 have no dependencies.
54-
dependency_provider.add_dependencies("y", (1, 0, 0), vec![]);
55-
dependency_provider.add_dependencies("y", (2, 0, 0), vec![]);
54+
dependency_provider.add_dependencies("y", (1, 0, 0), []);
55+
dependency_provider.add_dependencies("y", (2, 0, 0), []);
5656

5757
// Run the algorithm.
5858
match resolve(&dependency_provider, "root", (1, 0, 0)) {

examples/caching_dependency_provider.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl<P: Package, VS: VersionSet, DP: DependencyProvider<P, VS>> DependencyProvid
5454
cache.add_dependencies(
5555
package.clone(),
5656
version.clone(),
57-
dependencies.clone().into_iter(),
57+
dependencies.clone(),
5858
);
5959
Ok(Dependencies::Known(dependencies))
6060
}

examples/doc_interface.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ type NumVS = Range<NumberVersion>;
1414
fn main() {
1515
let mut dependency_provider = OfflineDependencyProvider::<&str, NumVS>::new();
1616
dependency_provider.add_dependencies(
17-
"root", 1, vec![("menu", Range::any()), ("icons", Range::any())],
17+
"root", 1, [("menu", Range::any()), ("icons", Range::any())],
1818
);
19-
dependency_provider.add_dependencies("menu", 1, vec![("dropdown", Range::any())]);
20-
dependency_provider.add_dependencies("dropdown", 1, vec![("icons", Range::any())]);
21-
dependency_provider.add_dependencies("icons", 1, vec![]);
19+
dependency_provider.add_dependencies("menu", 1, [("dropdown", Range::any())]);
20+
dependency_provider.add_dependencies("dropdown", 1, [("icons", Range::any())]);
21+
dependency_provider.add_dependencies("icons", 1, []);
2222

2323
// Run the algorithm.
2424
let solution = resolve(&dependency_provider, "root", 1);

examples/doc_interface_error.rs

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -19,57 +19,57 @@ type SemVS = Range<SemanticVersion>;
1919
fn main() {
2020
let mut dependency_provider = OfflineDependencyProvider::<&str, SemVS>::new();
2121
// Direct dependencies: menu and icons.
22-
dependency_provider.add_dependencies("root", (1, 0, 0), vec![
22+
dependency_provider.add_dependencies("root", (1, 0, 0), [
2323
("menu", Range::any()),
2424
("icons", Range::exact((1, 0, 0))),
2525
("intl", Range::exact((5, 0, 0))),
2626
]);
2727

2828
// Dependencies of the menu lib.
29-
dependency_provider.add_dependencies("menu", (1, 0, 0), vec![
30-
("dropdown", Range::strictly_lower_than((2, 0, 0))),
29+
dependency_provider.add_dependencies("menu", (1, 0, 0), [
30+
("dropdown", Range::from_range_bounds(..(2, 0, 0))),
3131
]);
32-
dependency_provider.add_dependencies("menu", (1, 1, 0), vec![
33-
("dropdown", Range::higher_than((2, 0, 0))),
32+
dependency_provider.add_dependencies("menu", (1, 1, 0), [
33+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
3434
]);
35-
dependency_provider.add_dependencies("menu", (1, 2, 0), vec![
36-
("dropdown", Range::higher_than((2, 0, 0))),
35+
dependency_provider.add_dependencies("menu", (1, 2, 0), [
36+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
3737
]);
38-
dependency_provider.add_dependencies("menu", (1, 3, 0), vec![
39-
("dropdown", Range::higher_than((2, 0, 0))),
38+
dependency_provider.add_dependencies("menu", (1, 3, 0), [
39+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
4040
]);
41-
dependency_provider.add_dependencies("menu", (1, 4, 0), vec![
42-
("dropdown", Range::higher_than((2, 0, 0))),
41+
dependency_provider.add_dependencies("menu", (1, 4, 0), [
42+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
4343
]);
44-
dependency_provider.add_dependencies("menu", (1, 5, 0), vec![
45-
("dropdown", Range::higher_than((2, 0, 0))),
44+
dependency_provider.add_dependencies("menu", (1, 5, 0), [
45+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
4646
]);
4747

4848
// Dependencies of the dropdown lib.
49-
dependency_provider.add_dependencies("dropdown", (1, 8, 0), vec![
49+
dependency_provider.add_dependencies("dropdown", (1, 8, 0), [
5050
("intl", Range::exact((3, 0, 0))),
5151
]);
52-
dependency_provider.add_dependencies("dropdown", (2, 0, 0), vec![
52+
dependency_provider.add_dependencies("dropdown", (2, 0, 0), [
5353
("icons", Range::exact((2, 0, 0))),
5454
]);
55-
dependency_provider.add_dependencies("dropdown", (2, 1, 0), vec![
55+
dependency_provider.add_dependencies("dropdown", (2, 1, 0), [
5656
("icons", Range::exact((2, 0, 0))),
5757
]);
58-
dependency_provider.add_dependencies("dropdown", (2, 2, 0), vec![
58+
dependency_provider.add_dependencies("dropdown", (2, 2, 0), [
5959
("icons", Range::exact((2, 0, 0))),
6060
]);
61-
dependency_provider.add_dependencies("dropdown", (2, 3, 0), vec![
61+
dependency_provider.add_dependencies("dropdown", (2, 3, 0), [
6262
("icons", Range::exact((2, 0, 0))),
6363
]);
6464

6565
// Icons have no dependencies.
66-
dependency_provider.add_dependencies("icons", (1, 0, 0), vec![]);
67-
dependency_provider.add_dependencies("icons", (2, 0, 0), vec![]);
66+
dependency_provider.add_dependencies("icons", (1, 0, 0), []);
67+
dependency_provider.add_dependencies("icons", (2, 0, 0), []);
6868

6969
// Intl have no dependencies.
70-
dependency_provider.add_dependencies("intl", (3, 0, 0), vec![]);
71-
dependency_provider.add_dependencies("intl", (4, 0, 0), vec![]);
72-
dependency_provider.add_dependencies("intl", (5, 0, 0), vec![]);
70+
dependency_provider.add_dependencies("intl", (3, 0, 0), []);
71+
dependency_provider.add_dependencies("intl", (4, 0, 0), []);
72+
dependency_provider.add_dependencies("intl", (5, 0, 0), []);
7373

7474
// Run the algorithm.
7575
match resolve(&dependency_provider, "root", (1, 0, 0)) {

examples/doc_interface_semantic.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,49 +18,49 @@ type SemVS = Range<SemanticVersion>;
1818
fn main() {
1919
let mut dependency_provider = OfflineDependencyProvider::<&str, SemVS>::new();
2020
// Direct dependencies: menu and icons.
21-
dependency_provider.add_dependencies("root", (1, 0, 0), vec![
21+
dependency_provider.add_dependencies("root", (1, 0, 0), [
2222
("menu", Range::any()),
2323
("icons", Range::exact((1, 0, 0))),
2424
]);
2525

2626
// Dependencies of the menu lib.
27-
dependency_provider.add_dependencies("menu", (1, 0, 0), vec![
28-
("dropdown", Range::strictly_lower_than((2, 0, 0))),
27+
dependency_provider.add_dependencies("menu", (1, 0, 0), [
28+
("dropdown", Range::from_range_bounds(..(2, 0, 0))),
2929
]);
30-
dependency_provider.add_dependencies("menu", (1, 1, 0), vec![
31-
("dropdown", Range::higher_than((2, 0, 0))),
30+
dependency_provider.add_dependencies("menu", (1, 1, 0), [
31+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
3232
]);
33-
dependency_provider.add_dependencies("menu", (1, 2, 0), vec![
34-
("dropdown", Range::higher_than((2, 0, 0))),
33+
dependency_provider.add_dependencies("menu", (1, 2, 0), [
34+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
3535
]);
36-
dependency_provider.add_dependencies("menu", (1, 3, 0), vec![
37-
("dropdown", Range::higher_than((2, 0, 0))),
36+
dependency_provider.add_dependencies("menu", (1, 3, 0), [
37+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
3838
]);
39-
dependency_provider.add_dependencies("menu", (1, 4, 0), vec![
40-
("dropdown", Range::higher_than((2, 0, 0))),
39+
dependency_provider.add_dependencies("menu", (1, 4, 0), [
40+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
4141
]);
42-
dependency_provider.add_dependencies("menu", (1, 5, 0), vec![
43-
("dropdown", Range::higher_than((2, 0, 0))),
42+
dependency_provider.add_dependencies("menu", (1, 5, 0), [
43+
("dropdown", Range::from_range_bounds((2, 0, 0)..)),
4444
]);
4545

4646
// Dependencies of the dropdown lib.
47-
dependency_provider.add_dependencies("dropdown", (1, 8, 0), vec![]);
48-
dependency_provider.add_dependencies("dropdown", (2, 0, 0), vec![
47+
dependency_provider.add_dependencies("dropdown", (1, 8, 0), []);
48+
dependency_provider.add_dependencies("dropdown", (2, 0, 0), [
4949
("icons", Range::exact((2, 0, 0))),
5050
]);
51-
dependency_provider.add_dependencies("dropdown", (2, 1, 0), vec![
51+
dependency_provider.add_dependencies("dropdown", (2, 1, 0), [
5252
("icons", Range::exact((2, 0, 0))),
5353
]);
54-
dependency_provider.add_dependencies("dropdown", (2, 2, 0), vec![
54+
dependency_provider.add_dependencies("dropdown", (2, 2, 0), [
5555
("icons", Range::exact((2, 0, 0))),
5656
]);
57-
dependency_provider.add_dependencies("dropdown", (2, 3, 0), vec![
57+
dependency_provider.add_dependencies("dropdown", (2, 3, 0), [
5858
("icons", Range::exact((2, 0, 0))),
5959
]);
6060

6161
// Icons has no dependency.
62-
dependency_provider.add_dependencies("icons", (1, 0, 0), vec![]);
63-
dependency_provider.add_dependencies("icons", (2, 0, 0), vec![]);
62+
dependency_provider.add_dependencies("icons", (1, 0, 0), []);
63+
dependency_provider.add_dependencies("icons", (2, 0, 0), []);
6464

6565
// Run the algorithm.
6666
match resolve(&dependency_provider, "root", (1, 0, 0)) {

examples/linear_error_reporting.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,26 @@ fn main() {
1515
// root 1.0.0 depends on foo ^1.0.0 and baz ^1.0.0
1616
dependency_provider.add_dependencies(
1717
"root", (1, 0, 0),
18-
vec![
19-
("foo", Range::between((1, 0, 0), (2, 0, 0))),
20-
("baz", Range::between((1, 0, 0), (2, 0, 0))),
18+
[
19+
("foo", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
20+
("baz", Range::from_range_bounds((1, 0, 0)..(2, 0, 0))),
2121
],
2222
);
2323
#[rustfmt::skip]
2424
// foo 1.0.0 depends on bar ^2.0.0
2525
dependency_provider.add_dependencies(
2626
"foo", (1, 0, 0),
27-
vec![("bar", Range::between((2, 0, 0), (3, 0, 0)))],
27+
[("bar", Range::from_range_bounds((2, 0, 0)..(3, 0, 0)))],
2828
);
2929
#[rustfmt::skip]
3030
// bar 2.0.0 depends on baz ^3.0.0
3131
dependency_provider.add_dependencies(
3232
"bar", (2, 0, 0),
33-
vec![("baz", Range::between((3, 0, 0), (4, 0, 0)))],
33+
[("baz", Range::from_range_bounds((3, 0, 0)..(4, 0, 0)))],
3434
);
3535
// baz 1.0.0 and 3.0.0 have no dependencies
36-
dependency_provider.add_dependencies("baz", (1, 0, 0), vec![]);
37-
dependency_provider.add_dependencies("baz", (3, 0, 0), vec![]);
36+
dependency_provider.add_dependencies("baz", (1, 0, 0), []);
37+
dependency_provider.add_dependencies("baz", (3, 0, 0), []);
3838

3939
// Run the algorithm.
4040
match resolve(&dependency_provider, "root", (1, 0, 0)) {

src/internal/core.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ impl<P: Package, VS: VersionSet> State<P, VS> {
114114
// If the partial solution satisfies the incompatibility
115115
// we must perform conflict resolution.
116116
Relation::Satisfied => {
117+
log::info!(
118+
"Start conflict resolution because incompat satisfied:\n {}",
119+
current_incompat
120+
);
117121
conflict_id = Some(incompat_id);
118122
break;
119123
}
@@ -182,6 +186,7 @@ impl<P: Package, VS: VersionSet> State<P, VS> {
182186
current_incompat_changed,
183187
previous_satisfier_level,
184188
);
189+
log::info!("backtrack to {:?}", previous_satisfier_level);
185190
return Ok((package, current_incompat_id));
186191
}
187192
SameDecisionLevels { satisfier_cause } => {
@@ -191,6 +196,7 @@ impl<P: Package, VS: VersionSet> State<P, VS> {
191196
&package,
192197
&self.incompatibility_store,
193198
);
199+
log::info!("prior cause: {}", prior_cause);
194200
current_incompat_id = self.incompatibility_store.alloc(prior_cause);
195201
current_incompat_changed = true;
196202
}

0 commit comments

Comments
 (0)