aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-09-06 16:23:52 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2021-09-06 16:44:09 +0200
commitf7a31c6a617c043171df737d4246c50c1f7286f3 (patch)
tree332f67853ab27bc960a620c9727d293f6c754520
parentc5019d100308fd3e330678ec223d3891ed61d3c8 (diff)
Add pkg-status --all|-a and --link options
-rw-r--r--bpkg/pkg-status.cli21
-rw-r--r--bpkg/pkg-status.cxx21
-rw-r--r--tests/pkg-build.testscript24
-rw-r--r--tests/pkg-drop.testscript5
4 files changed, 49 insertions, 22 deletions
diff --git a/bpkg/pkg-status.cli b/bpkg/pkg-status.cli
index d45c4ae..59609ec 100644
--- a/bpkg/pkg-status.cli
+++ b/bpkg/pkg-status.cli
@@ -25,11 +25,12 @@ namespace bpkg
or, if <ver> is specified, package versions. If no packages were
specified, then \cb{pkg-status} prints the status of all the held
packages (which are the packages that were explicitly built; see
- \l{bpkg-pkg-build(1)}). Additionally, the status of immediate or all
- dependencies of the above packages can be printed by specifying the
- \c{\b{--immediate}|\b{-i}} or \c{\b{--recursive}|\b{-r}} options,
- respectively. Note that the status is written to \cb{stdout}, not
- \cb{stderr}.
+ \l{bpkg-pkg-build(1)}). The latter mode can be modified to print the
+ status of all the packages by specifying the \c{\b{--all}|\b{-a}} option.
+ Additionally, the status of immediate or all dependencies of the above
+ packages can be printed by specifying the \c{\b{--immediate}|\b{-i}} or
+ \c{\b{--recursive}|\b{-r}} options, respectively. Note that the status is
+ written to \cb{stdout}, not \cb{stderr}.
The status output format is regular with components separated with
spaces. Each line starts with the package name and version (if specified)
@@ -165,6 +166,16 @@ namespace bpkg
{
"\h|PKG-STATUS OPTIONS|"
+ bool --all|-a
+ {
+ "Print the status of all the packages, not just held."
+ }
+
+ bool --link
+ {
+ "Also print the status of held/all packages from linked configurations."
+ }
+
bool --immediate|-i
{
"Also print the status of immediate dependencies."
diff --git a/bpkg/pkg-status.cxx b/bpkg/pkg-status.cxx
index a376d38..2b05086 100644
--- a/bpkg/pkg-status.cxx
+++ b/bpkg/pkg-status.cxx
@@ -338,14 +338,19 @@ namespace bpkg
}
else
{
- // Find all held packages in this and all the dependency
- // configurations.
+ // Find held/all packages in this and, if --link specified, all the
+ // dependency configurations.
//
+ query q;
+
+ if (!o.all ())
+ q = query::hold_package;
+
for (database& ldb: db.dependency_configs ())
{
for (shared_ptr<selected_package> s:
pointer_result (
- ldb.query<selected_package> (query::hold_package)))
+ ldb.query<selected_package> (q)))
{
pkgs.push_back (package {ldb,
s->hold_package ? ldb : db,
@@ -354,11 +359,19 @@ namespace bpkg
move (s),
nullopt /* constraint */});
}
+
+ if (!o.link ())
+ break;
}
if (pkgs.empty ())
{
- info << "no held packages in the configuration";
+ if (o.all ())
+ info << "no packages in the configuration";
+ else
+ info << "no held packages in the configuration" <<
+ info << "use --all|-a to see status of all packages";
+
return 0;
}
}
diff --git a/tests/pkg-build.testscript b/tests/pkg-build.testscript
index 9f2ffe0..b413a14 100644
--- a/tests/pkg-build.testscript
+++ b/tests/pkg-build.testscript
@@ -4438,7 +4438,7 @@ else
updated libbaz/1.1.0
EOE
- $pkg_status -r >>/EOO;
+ $pkg_status --link -r >>/EOO;
!libbaz configured 1.1.0
!libbar [cfg-bar/] configured !1.1.0
!libfoo [cfg-foo/] configured 1.1.0
@@ -4929,7 +4929,7 @@ else
%updated libbaz/1.0.0 \[t2.\]%
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libbaz configured 1.0.0
!libbaz [t2/] configured 1.0.0
EOO
@@ -5001,7 +5001,7 @@ else
updated foo/1.0.0
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libbaz configured 1.0.0
!foo configured 1.0.0
!libbaz [t2/] configured 1.0.0
@@ -5227,7 +5227,7 @@ else
updated foo/1.0.0
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!foo configured 1.0.0
!libbaz [t2/] configured 1.0.0
libbuild2-bar [t1/.bpkg/build2/] configured 1.0.0
@@ -5277,7 +5277,7 @@ else
%updated libbaz/1.0.0 \[t2.\]%
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libbaz [t2/] configured 1.0.0
EOO
}
@@ -5327,7 +5327,7 @@ else
updated libbar/1.0.0
EOE
- $pkg_status -d h1 -r >>/EOO
+ $pkg_status -d h1 --link -r >>/EOO
!foo configured 1.0.0
!libbaz [h2/] configured 1.0.0
libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0
@@ -5506,7 +5506,7 @@ else
updated libbar/1.0.0
EOE
- $pkg_status -d h1 -r >>/EOO
+ $pkg_status -d h1 --link -r >>/EOO
!libbar configured 1.0.0
foo configured 1.0.0
!libbaz [h2/] configured 1.0.0
@@ -5555,7 +5555,7 @@ else
updated foo/1.0.0
EOE
- $pkg_status -d h1 -r >>/EOO;
+ $pkg_status -d h1 --link -r >>/EOO;
!foo configured 1.0.0
libbaz configured 1.0.0
libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0
@@ -5585,7 +5585,7 @@ else
%updated libbaz/1.1.0 \[h2.\]%
EOE
- $pkg_status -d h1 -r >>/EOO
+ $pkg_status -d h1 --link -r >>/EOO
!foo configured 1.0.0
libbaz [h2/] configured 1.1.0
libbuild2-bar [h1/.bpkg/build2/] configured 1.0.0
@@ -5776,7 +5776,7 @@ else
updated libbar/1.0.0
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libbar configured 1.0.0
foo [t1/.bpkg/host/] configured 1.0.0
libbaz [t1/.bpkg/host/] configured 1.0.0
@@ -5834,7 +5834,7 @@ else
%updated libbar/1.1.0 \[t2.\]%
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libbar configured 1.0.0
foo [t1/.bpkg/host/] configured 1.0.0
libbaz [t1/.bpkg/host/] configured 1.0.0
@@ -5928,7 +5928,7 @@ else
updated libbar/1.0.0
EOE
- $pkg_status -d t1 -r >>/EOO
+ $pkg_status -d t1 --link -r >>/EOO
!libfix configured 1.0.0
libbar configured 1.0.0 available 1.1.0
!foo [h1/] configured 1.1.0
diff --git a/tests/pkg-drop.testscript b/tests/pkg-drop.testscript
index c9b629b..d875543 100644
--- a/tests/pkg-drop.testscript
+++ b/tests/pkg-drop.testscript
@@ -766,6 +766,9 @@ $* libfoo/1.0.0 2>>~%EOE% != 0
error: unable to find prerequisite package foo in linked configuration cfg2/
EOE
- $pkg_status -d cfg2 -r 2>'info: no held packages in the configuration'
+ $pkg_status -d cfg2 -r 2>>EOE
+ info: no held packages in the configuration
+ info: use --all|-a to see status of all packages
+ EOE
}
}