From f7a31c6a617c043171df737d4246c50c1f7286f3 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 6 Sep 2021 16:23:52 +0200 Subject: Add pkg-status --all|-a and --link options --- bpkg/pkg-status.cli | 21 ++++++++++++++++----- bpkg/pkg-status.cxx | 21 +++++++++++++++++---- tests/pkg-build.testscript | 24 ++++++++++++------------ tests/pkg-drop.testscript | 5 ++++- 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 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 s: pointer_result ( - ldb.query (query::hold_package))) + ldb.query (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 } } -- cgit v1.1