aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Arutyunov <karen@codesynthesis.com>2023-11-15 16:42:46 +0300
committerKaren Arutyunov <karen@codesynthesis.com>2023-11-17 17:10:48 +0300
commitd84cd60c19179562bb8d5555cecb73e85f1181a9 (patch)
tree2fed3d49d12a09cfb8d4853fae63e521a2fe4da4
parent76632ec8816369f5b7cf503a37e75fe814bb12bf (diff)
Add tests which demonstrate cases when we could potentially resolve unsatisfied dependency constraints but currently fail
-rw-r--r--tests/common/satisfy/libbar-0.1.0.tar.gzbin0 -> 406 bytes
-rw-r--r--tests/common/satisfy/libbaz-2.0.0.tar.gzbin0 -> 381 bytes
-rw-r--r--tests/common/satisfy/libbix-1.0.0.tar.gzbin0 -> 360 bytes
-rw-r--r--tests/common/satisfy/libbix-2.0.0.tar.gzbin0 -> 363 bytes
-rw-r--r--tests/common/satisfy/libbux-1.0.0.tar.gzbin0 -> 351 bytes
-rw-r--r--tests/common/satisfy/libfix-1.0.0.tar.gzbin0 -> 364 bytes
-rw-r--r--tests/common/satisfy/libfox-1.1.0.tar.gzbin0 -> 370 bytes
-rw-r--r--tests/common/satisfy/libfox-2.0.0.tar.gzbin0 -> 367 bytes
l---------tests/common/satisfy/t4f/libbix-1.0.0.tar.gz1
l---------tests/common/satisfy/t4f/libbix-2.0.0.tar.gz1
l---------tests/common/satisfy/t4f/libbux-1.0.0.tar.gz1
l---------tests/common/satisfy/t4f/libfix-1.0.0.tar.gz1
l---------tests/common/satisfy/t4f/libfox-1.1.0.tar.gz1
l---------tests/common/satisfy/t4f/libfox-2.0.0.tar.gz1
-rw-r--r--tests/common/satisfy/t4f/repositories.manifest3
l---------tests/common/satisfy/t4i/libbar-0.1.0.tar.gz1
l---------tests/common/satisfy/t4i/libbaz-2.0.0.tar.gz1
-rw-r--r--tests/common/satisfy/t4i/repositories.manifest1
-rw-r--r--tests/pkg-build.testscript491
l---------tests/pkg-build/t4i1
20 files changed, 500 insertions, 4 deletions
diff --git a/tests/common/satisfy/libbar-0.1.0.tar.gz b/tests/common/satisfy/libbar-0.1.0.tar.gz
new file mode 100644
index 0000000..f072c11
--- /dev/null
+++ b/tests/common/satisfy/libbar-0.1.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libbaz-2.0.0.tar.gz b/tests/common/satisfy/libbaz-2.0.0.tar.gz
new file mode 100644
index 0000000..d539208
--- /dev/null
+++ b/tests/common/satisfy/libbaz-2.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libbix-1.0.0.tar.gz b/tests/common/satisfy/libbix-1.0.0.tar.gz
new file mode 100644
index 0000000..9dfe541
--- /dev/null
+++ b/tests/common/satisfy/libbix-1.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libbix-2.0.0.tar.gz b/tests/common/satisfy/libbix-2.0.0.tar.gz
new file mode 100644
index 0000000..ca7bd95
--- /dev/null
+++ b/tests/common/satisfy/libbix-2.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libbux-1.0.0.tar.gz b/tests/common/satisfy/libbux-1.0.0.tar.gz
new file mode 100644
index 0000000..51960f9
--- /dev/null
+++ b/tests/common/satisfy/libbux-1.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libfix-1.0.0.tar.gz b/tests/common/satisfy/libfix-1.0.0.tar.gz
new file mode 100644
index 0000000..ed2d78f
--- /dev/null
+++ b/tests/common/satisfy/libfix-1.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libfox-1.1.0.tar.gz b/tests/common/satisfy/libfox-1.1.0.tar.gz
new file mode 100644
index 0000000..c626d72
--- /dev/null
+++ b/tests/common/satisfy/libfox-1.1.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/libfox-2.0.0.tar.gz b/tests/common/satisfy/libfox-2.0.0.tar.gz
new file mode 100644
index 0000000..1297cda
--- /dev/null
+++ b/tests/common/satisfy/libfox-2.0.0.tar.gz
Binary files differ
diff --git a/tests/common/satisfy/t4f/libbix-1.0.0.tar.gz b/tests/common/satisfy/t4f/libbix-1.0.0.tar.gz
new file mode 120000
index 0000000..acf87bf
--- /dev/null
+++ b/tests/common/satisfy/t4f/libbix-1.0.0.tar.gz
@@ -0,0 +1 @@
+../libbix-1.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/libbix-2.0.0.tar.gz b/tests/common/satisfy/t4f/libbix-2.0.0.tar.gz
new file mode 120000
index 0000000..26683f9
--- /dev/null
+++ b/tests/common/satisfy/t4f/libbix-2.0.0.tar.gz
@@ -0,0 +1 @@
+../libbix-2.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/libbux-1.0.0.tar.gz b/tests/common/satisfy/t4f/libbux-1.0.0.tar.gz
new file mode 120000
index 0000000..8718789
--- /dev/null
+++ b/tests/common/satisfy/t4f/libbux-1.0.0.tar.gz
@@ -0,0 +1 @@
+../libbux-1.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/libfix-1.0.0.tar.gz b/tests/common/satisfy/t4f/libfix-1.0.0.tar.gz
new file mode 120000
index 0000000..aad4c49
--- /dev/null
+++ b/tests/common/satisfy/t4f/libfix-1.0.0.tar.gz
@@ -0,0 +1 @@
+../libfix-1.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/libfox-1.1.0.tar.gz b/tests/common/satisfy/t4f/libfox-1.1.0.tar.gz
new file mode 120000
index 0000000..97bb68b
--- /dev/null
+++ b/tests/common/satisfy/t4f/libfox-1.1.0.tar.gz
@@ -0,0 +1 @@
+../libfox-1.1.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/libfox-2.0.0.tar.gz b/tests/common/satisfy/t4f/libfox-2.0.0.tar.gz
new file mode 120000
index 0000000..2996971
--- /dev/null
+++ b/tests/common/satisfy/t4f/libfox-2.0.0.tar.gz
@@ -0,0 +1 @@
+../libfox-2.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4f/repositories.manifest b/tests/common/satisfy/t4f/repositories.manifest
index 4cc7c0a..5b70556 100644
--- a/tests/common/satisfy/t4f/repositories.manifest
+++ b/tests/common/satisfy/t4f/repositories.manifest
@@ -1,4 +1 @@
: 1
-:
-location: ../t4a
-role: complement
diff --git a/tests/common/satisfy/t4i/libbar-0.1.0.tar.gz b/tests/common/satisfy/t4i/libbar-0.1.0.tar.gz
new file mode 120000
index 0000000..f622e36
--- /dev/null
+++ b/tests/common/satisfy/t4i/libbar-0.1.0.tar.gz
@@ -0,0 +1 @@
+../libbar-0.1.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4i/libbaz-2.0.0.tar.gz b/tests/common/satisfy/t4i/libbaz-2.0.0.tar.gz
new file mode 120000
index 0000000..8787403
--- /dev/null
+++ b/tests/common/satisfy/t4i/libbaz-2.0.0.tar.gz
@@ -0,0 +1 @@
+../libbaz-2.0.0.tar.gz \ No newline at end of file
diff --git a/tests/common/satisfy/t4i/repositories.manifest b/tests/common/satisfy/t4i/repositories.manifest
new file mode 100644
index 0000000..5b70556
--- /dev/null
+++ b/tests/common/satisfy/t4i/repositories.manifest
@@ -0,0 +1 @@
+: 1
diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript
index 4766e2a..fe01161 100644
--- a/tests/pkg-build.testscript
+++ b/tests/pkg-build.testscript
@@ -102,7 +102,7 @@
# | |-- libfox-1.0.0.tar.gz
# | `-- repositories.manifest
# |
-# |-- t4e
+# |-- t4e -> t4a (complement repository)
# | |-- libfoo-1.1.0+1.tar.gz
# | `-- repositories.manifest
# |
@@ -114,6 +114,17 @@
# | |-- libbox-2.0.0.tar.gz -> libbax == 1.0.0
# | |-- libbax-1.0.0.tar.gz
# | |-- libbax-2.0.0.tar.gz
+# | |-- libbix-1.0.0.tar.gz -> libbax == 1.0.0
+# | |-- libbix-2.0.0.tar.gz -> libbax == 2.0.0
+# | |-- libbux-1.0.0.tar.gz -> libbix
+# | |-- libfix-1.0.0.tar.gz -> libfox
+# | |-- libfox-1.1.0.tar.gz -> libbar >= 1.0.0
+# | |-- libfox-2.0.0.tar.gz -> libbar >= 2.0.0
+# | `-- repositories.manifest
+# |
+# |-- t4i
+# | |-- libbaz-2.0.0.tar.gz -> libbar < 2.1.0
+# | |-- libbar-0.1.0.tar.gz
# | `-- repositories.manifest
# |
# |-- t5
@@ -497,6 +508,7 @@ posix = ($cxx.target.class != 'windows')
cp -r $src/t4d $out/t4d && $rep_create $out/t4d &$out/t4d/packages.manifest
cp -r $src/t4e $out/t4e && $rep_create $out/t4e &$out/t4e/packages.manifest
cp -r $src/t4f $out/t4f && $rep_create $out/t4f &$out/t4f/packages.manifest
+ cp -r $src/t4i $out/t4i && $rep_create $out/t4i &$out/t4i/packages.manifest
cp -r $src/t5 $out/t5 && $rep_create $out/t5 &$out/t5/packages.manifest
cp -r $src/t6 $out/t6 && $rep_create $out/t6 &$out/t6/packages.manifest
cp -r $src/t7a $out/t7a && $rep_create $out/t7a &$out/t7a/packages.manifest
@@ -4003,6 +4015,483 @@ test.arguments += --sys-no-query
$pkg_drop libbox libbar
}
}
+
+ : constraint-resolution
+ :
+ {
+ +$clone_root_cfg
+ +$rep_add $rep/t4f && $rep_fetch
+
+ : replace-dependent
+ :
+ : This test demonstrates a case when the dependency resolution machinery
+ : fails to resolve unsatisfied dependency constraints by replacing an
+ : unsatisfied dependent version with a satisfied one.
+ :
+ {
+ $clone_cfg;
+
+ $* libfoo libfix --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libfoo/2.0.0
+ trace: collect_build: add libfix/1.0.0
+ trace: collect_build_prerequisites: begin libfoo/2.0.0
+ trace: collect_build: add libbar/1.2.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/1.2.0 of dependent libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libbar/1.2.0
+ trace: collect_build_prerequisites: end libbar/1.2.0
+ trace: collect_build_prerequisites: end libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libfix/1.0.0
+ trace: collect_build: add libfox/2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libfox/2.0.0 of dependent libfix/1.0.0
+ trace: collect_build_prerequisites: begin libfox/2.0.0
+ trace: collect_build: postpone failure for dependent libfox unsatisfied with dependency libbar/1.2.0 (>= 2.0.0)
+ trace: collect_build: pick libbar/1.2.0 over libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/1.2.0 of dependent libfox/2.0.0
+ trace: collect_build_prerequisites: end libfox/2.0.0
+ trace: collect_build_prerequisites: end libfix/1.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/2.0.0 depends on (libbar >= 2.0.0)
+ info: libfoo/2.0.0 depends on (libbar == 1.2.0)
+ info: available libbar/2.1.0
+ info: available libbar/1.2.0
+ info: while satisfying libfox/2.0.0
+ info: while satisfying libfix/1.0.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfoo libfix ?libfox/1.1.0 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfoo/2.0.0
+ unpacked libfoo/2.0.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ fetched libfix/1.0.0
+ unpacked libfix/1.0.0
+ configured libbar/1.2.0
+ configured libfoo/2.0.0
+ configured libfox/1.1.0
+ configured libfix/1.0.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured 1.2.0 available 2.1.0
+ !libfoo configured 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ !libfix configured 1.0.0
+ libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfoo libfix
+ }
+
+ : replace-dependent-reorder
+ :
+ : Similar to the above, but the unsatisfied dependent which needs to be
+ : replaced differs from the one added to the unsatisfied dependents list.
+ :
+ {
+ $clone_cfg;
+
+ $* libfix libfoo --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libfix/1.0.0
+ trace: collect_build: add libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libfix/1.0.0
+ trace: collect_build: add libfox/2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libfox/2.0.0 of dependent libfix/1.0.0
+ trace: collect_build_prerequisites: begin libfox/2.0.0
+ trace: collect_build: add libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libfox/2.0.0
+ trace: collect_build_prerequisites: begin libbar/2.1.0
+ trace: collect_build: add libbox/2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbox/2.0.0 of dependent libbar/2.1.0
+ trace: collect_build_prerequisites: begin libbox/2.0.0
+ trace: collect_build: add libbax/1.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbax/1.0.0 of dependent libbox/2.0.0
+ trace: collect_build_prerequisites: begin libbax/1.0.0
+ trace: collect_build_prerequisites: end libbax/1.0.0
+ trace: collect_build_prerequisites: end libbox/2.0.0
+ trace: collect_build_prerequisites: end libbar/2.1.0
+ trace: collect_build_prerequisites: end libfox/2.0.0
+ trace: collect_build_prerequisites: end libfix/1.0.0
+ trace: collect_build_prerequisites: begin libfoo/2.0.0
+ trace: collect_build: postpone failure for dependent libfoo unsatisfied with dependency libbar/2.1.0 (== 1.2.0)
+ trace: collect_build: pick libbar/2.1.0 over libbar/1.2.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libfoo/2.0.0
+ trace: collect_build_prerequisites: end libfoo/2.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/2.0.0 depends on (libbar >= 2.0.0)
+ info: libfoo/2.0.0 depends on (libbar == 1.2.0)
+ info: available libbar/2.1.0
+ info: available libbar/1.2.0
+ info: while satisfying libfoo/2.0.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfix libfoo ?libfox/1.1.0 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ fetched libfix/1.0.0
+ unpacked libfix/1.0.0
+ fetched libfoo/2.0.0
+ unpacked libfoo/2.0.0
+ configured libbar/1.2.0
+ configured libfox/1.1.0
+ configured libfix/1.0.0
+ configured libfoo/2.0.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured 1.2.0 available 2.1.0
+ libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ !libfix configured 1.0.0
+ libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ !libfoo configured 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfoo libfix
+ }
+
+ : replace-dependent-to-hold
+ :
+ : Similar to the replace-dependent test, but the unsatisfied dependent
+ : is being built to hold rather than as a dependency.
+ :
+ {
+ $clone_cfg;
+
+ $* libfoo libfox --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libfoo/2.0.0
+ trace: collect_build: add libfox/2.0.0
+ trace: collect_build_prerequisites: begin libfoo/2.0.0
+ trace: collect_build: add libbar/1.2.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/1.2.0 of dependent libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libbar/1.2.0
+ trace: collect_build_prerequisites: end libbar/1.2.0
+ trace: collect_build_prerequisites: end libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libfox/2.0.0
+ trace: collect_build: postpone failure for dependent libfox unsatisfied with dependency libbar/1.2.0 (>= 2.0.0)
+ trace: collect_build: pick libbar/1.2.0 over libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/1.2.0 of dependent libfox/2.0.0
+ trace: collect_build_prerequisites: end libfox/2.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/2.0.0 depends on (libbar >= 2.0.0)
+ info: libfoo/2.0.0 depends on (libbar == 1.2.0)
+ info: available libbar/2.1.0
+ info: available libbar/1.2.0
+ info: while satisfying libfox/2.0.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfoo libfox/1.1.0 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfoo/2.0.0
+ unpacked libfoo/2.0.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ configured libbar/1.2.0
+ configured libfoo/2.0.0
+ configured libfox/1.1.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured 1.2.0 available 2.1.0
+ !libfoo configured 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ !libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfoo libfox
+ }
+
+ : replace-dependent-to-hold-reorder
+ :
+ : Similar to the above, but the unsatisfied dependent which needs to be
+ : replaced differs from the one added to the unsatisfied dependents list.
+ :
+ {
+ $clone_cfg;
+
+ $* libfox libfoo --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libfox/2.0.0
+ trace: collect_build: add libfoo/2.0.0
+ trace: collect_build_prerequisites: begin libfox/2.0.0
+ trace: collect_build: add libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libfox/2.0.0
+ trace: collect_build_prerequisites: begin libbar/2.1.0
+ trace: collect_build: add libbox/2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbox/2.0.0 of dependent libbar/2.1.0
+ trace: collect_build_prerequisites: begin libbox/2.0.0
+ trace: collect_build: add libbax/1.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbax/1.0.0 of dependent libbox/2.0.0
+ trace: collect_build_prerequisites: begin libbax/1.0.0
+ trace: collect_build_prerequisites: end libbax/1.0.0
+ trace: collect_build_prerequisites: end libbox/2.0.0
+ trace: collect_build_prerequisites: end libbar/2.1.0
+ trace: collect_build_prerequisites: end libfox/2.0.0
+ trace: collect_build_prerequisites: begin libfoo/2.0.0
+ trace: collect_build: postpone failure for dependent libfoo unsatisfied with dependency libbar/2.1.0 (== 1.2.0)
+ trace: collect_build: pick libbar/2.1.0 over libbar/1.2.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libfoo/2.0.0
+ trace: collect_build_prerequisites: end libfoo/2.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/2.0.0 depends on (libbar >= 2.0.0)
+ info: libfoo/2.0.0 depends on (libbar == 1.2.0)
+ info: available libbar/2.1.0
+ info: available libbar/1.2.0
+ info: while satisfying libfoo/2.0.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfox/1.1.0 libfoo 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ fetched libfoo/2.0.0
+ unpacked libfoo/2.0.0
+ configured libbar/1.2.0
+ configured libfox/1.1.0
+ configured libfoo/2.0.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured 1.2.0 available 2.1.0
+ !libfox configured !1.1.0 available 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ !libfoo configured 2.0.0
+ libbar configured 1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfoo libfox
+ }
+
+ : replace-dependency
+ :
+ : This test demonstrates a case when the dependency resolution machinery
+ : fails to resolve unsatisfied dependency constraints by replacing the
+ : unsatisfactory dependency versions with a satisfactory one.
+ :
+ {
+ $clone_cfg;
+ $rep_add $rep/t4i && $rep_fetch;
+
+ $* libfox/1.1.0 libbaz --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libfox/1.1.0
+ trace: collect_build: add libbaz/2.0.0
+ trace: collect_build_prerequisites: begin libfox/1.1.0
+ trace: collect_build: add libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libfox/1.1.0
+ trace: collect_build_prerequisites: begin libbar/2.1.0
+ trace: collect_build: add libbox/2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbox/2.0.0 of dependent libbar/2.1.0
+ trace: collect_build_prerequisites: begin libbox/2.0.0
+ trace: collect_build: add libbax/1.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbax/1.0.0 of dependent libbox/2.0.0
+ trace: collect_build_prerequisites: begin libbax/1.0.0
+ trace: collect_build_prerequisites: end libbax/1.0.0
+ trace: collect_build_prerequisites: end libbox/2.0.0
+ trace: collect_build_prerequisites: end libbar/2.1.0
+ trace: collect_build_prerequisites: end libfox/1.1.0
+ trace: collect_build_prerequisites: begin libbaz/2.0.0
+ trace: collect_build: postpone failure for dependent libbaz unsatisfied with dependency libbar/2.1.0 (< 2.1.0)
+ trace: collect_build: pick libbar/2.1.0 over libbar/0.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/2.1.0 of dependent libbaz/2.0.0
+ trace: collect_build_prerequisites: end libbaz/2.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/1.1.0 depends on (libbar >= 1.0.0)
+ command line requires (libfox == 1.1.0)
+ info: libbaz/2.0.0 depends on (libbar < 2.1.0)
+ info: available libbar/2.1.0
+ info: available libbar/0.1.0
+ info: while satisfying libbaz/2.0.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfox/1.1.0 libbaz ?libbar/1.2.0 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ fetched libbaz/2.0.0
+ unpacked libbaz/2.0.0
+ configured libbar/1.2.0
+ configured libfox/1.1.0
+ configured libbaz/2.0.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured !1.2.0 available 2.1.0
+ !libfox configured !1.1.0 available 2.0.0
+ libbar configured !1.2.0 available 2.1.0
+ !libbaz configured 2.0.0
+ libbar configured !1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfox libbaz
+ }
+
+ : replace-dependency-reorder
+ :
+ : Similar to the above, but the order of the dependents on the command
+ : line is swapped.
+ :
+ {
+ $clone_cfg;
+ $rep_add $rep/t4i && $rep_fetch;
+
+ $* libbaz libfox/1.1.0 --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libbaz/2.0.0
+ trace: collect_build: add libfox/1.1.0
+ trace: collect_build_prerequisites: begin libbaz/2.0.0
+ trace: collect_build: add libbar/0.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/0.1.0 of dependent libbaz/2.0.0
+ trace: collect_build_prerequisites: begin libbar/0.1.0
+ trace: collect_build_prerequisites: end libbar/0.1.0
+ trace: collect_build_prerequisites: end libbaz/2.0.0
+ trace: collect_build_prerequisites: begin libfox/1.1.0
+ trace: collect_build: postpone failure for dependent libfox unsatisfied with dependency libbar/0.1.0 (>= 1.0.0)
+ trace: collect_build: pick libbar/0.1.0 over libbar/2.1.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbar/0.1.0 of dependent libfox/1.1.0
+ trace: collect_build_prerequisites: end libfox/1.1.0
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to satisfy constraints on package libbar
+ info: libfox/1.1.0 depends on (libbar >= 1.0.0)
+ command line requires (libfox == 1.1.0)
+ info: libbaz/2.0.0 depends on (libbar < 2.1.0)
+ info: available libbar/2.1.0
+ info: available libbar/0.1.0
+ info: while satisfying libfox/1.1.0
+ info: explicitly specify libbar version to manually satisfy both constraints
+ %.*
+ EOE
+
+ $* libfox/1.1.0 libbaz ?libbar/1.2.0 2>>EOE;
+ fetched libbar/1.2.0
+ unpacked libbar/1.2.0
+ fetched libfox/1.1.0
+ unpacked libfox/1.1.0
+ fetched libbaz/2.0.0
+ unpacked libbaz/2.0.0
+ configured libbar/1.2.0
+ configured libfox/1.1.0
+ configured libbaz/2.0.0
+ EOE
+
+ $pkg_status -ar >>EOO;
+ libbar configured !1.2.0 available 2.1.0
+ !libfox configured !1.1.0 available 2.0.0
+ libbar configured !1.2.0 available 2.1.0
+ !libbaz configured 2.0.0
+ libbar configured !1.2.0 available 2.1.0
+ EOO
+
+ $pkg_drop libfox libbaz
+ }
+
+ : unsatisfied-dependent
+ :
+ : This test demonstrates a case when the dependency resolution machinery
+ : fails to complete successfully as noop.
+ :
+ : Note that there is no version constraints are specified on the command
+ : line, the request is to upgrade all packages to the latest possible
+ : versions, and thus noop in this case would an appropriate outcome.
+ :
+ {
+ $clone_cfg;
+
+ $* libbox ?libbix/1.0.0 libbux 2>!;
+
+ $pkg_status -ar >>EOO;
+ libbax configured 1.0.0 available 2.0.0
+ !libbox configured 2.0.0
+ libbax configured 1.0.0 available 2.0.0
+ libbix configured !1.0.0 available 2.0.0
+ libbax configured 1.0.0 available 2.0.0
+ !libbux configured 1.0.0
+ libbix configured !1.0.0 available 2.0.0
+ libbax configured 1.0.0 available 2.0.0
+ EOO
+
+ $* --upgrade --recursive --verbose 5 2>>~%EOE% != 0;
+ %.*
+ trace: pkg_build: refine package collection/plan execution from scratch
+ trace: collect_build: add libbox/2.0.0
+ trace: collect_build: add libbux/1.0.0
+ trace: collect_build_prerequisites: skip configured libbox/2.0.0
+ trace: collect_build_prerequisites: skip configured libbux/1.0.0
+ trace: execute_plan: simulate: yes
+ %.*
+ trace: evaluate_dependency: libbix/1.0.0: update to libbix/2.0.0
+ %.*
+ trace: pkg_build: refine package collection/plan execution
+ trace: collect_build: add libbix/2.0.0
+ trace: collect_build_prerequisites: pre-reeval libbux/1.0.0
+ trace: collect_build_prerequisites: pre-reevaluated libbux/1.0.0: end reached
+ trace: collect_build_prerequisites: begin libbix/2.0.0
+ trace: collect_build: add libbax/2.0.0
+ info: package libbix dependency on (libbax == 2.0.0) is forcing upgrade of libbax/1.0.0 to 2.0.0
+ trace: collect_build_prerequisites: no cfg-clause for dependency libbax/2.0.0 of dependent libbix/2.0.0
+ trace: collect_build_prerequisites: skip unsatisfied existing dependent libbox of dependency libbax/2.0.0 due to constraint (libbax == 1.0.0)
+ trace: collect_build_prerequisites: skip being built existing dependent libbix of dependency libbax
+ trace: collect_build_prerequisites: begin libbax/2.0.0
+ trace: collect_build_prerequisites: end libbax/2.0.0
+ trace: collect_build_prerequisites: end libbix/2.0.0
+ trace: collect_dependents: postpone failure for existing dependent libbox unsatisfied with dependency libbax/2.0.0 (== 1.0.0)
+ trace: execute_plan: simulate: yes
+ %.*
+ error: unable to upgrade package libbax/1.0.0 to 2.0.0
+ info: because configured package libbox/2.0.0 depends on (libbax == 1.0.0)
+ info: package libbax/2.0.0 required by
+ libbix/2.0.0 (libbax == 2.0.0)
+ info: consider re-trying with --upgrade|-u potentially combined with --recursive|-r
+ info: or explicitly request up/downgrade of package libbox
+ info: or explicitly specify package libbax version to manually satisfy these constraints
+ %.*
+ EOE
+
+ $pkg_drop libbox libbux
+ }
+ }
}
: upgrade
diff --git a/tests/pkg-build/t4i b/tests/pkg-build/t4i
new file mode 120000
index 0000000..41e500e
--- /dev/null
+++ b/tests/pkg-build/t4i
@@ -0,0 +1 @@
+../common/satisfy/t4i \ No newline at end of file