summaryrefslogtreecommitdiffstats
path: root/src/etc
diff options
context:
space:
mode:
authorstilez <stilez@users.noreply.github.com>2017-01-25 06:36:32 +0000
committerRenato Botelho <renato@netgate.com>2017-01-30 13:33:26 -0200
commit1f9edebb4dce80939a0dba9e05341bace3f598e2 (patch)
tree68d27702a6f0f5816861c23356cf4fad7553d5ea /src/etc
parent5e446a2510683917bb3c5079bb217211b16fd6a8 (diff)
downloadpfsense-1f9edebb4dce80939a0dba9e05341bace3f598e2.zip
pfsense-1f9edebb4dce80939a0dba9e05341bace3f598e2.tar.gz
use wrapped version of pkg info -e instead
(cherry picked from commit e5f96a2cb3c0cad0c828148bd7b8d45c130a9b17)
Diffstat (limited to 'src/etc')
-rw-r--r--src/etc/inc/pkg-utils.inc36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/etc/inc/pkg-utils.inc b/src/etc/inc/pkg-utils.inc
index 6420925..7f6ddac 100644
--- a/src/etc/inc/pkg-utils.inc
+++ b/src/etc/inc/pkg-utils.inc
@@ -428,11 +428,37 @@ function get_pkg_info($pkgs = 'all', $local_only = false, $installed_only = fals
*/
// pkg info errors if none match, unlike pkg search, so test it will work beforehand...
- $tmp1 = $tmp2 = '';
- $tmprc = pkg_exec("info -e -R --raw-format json-compact " . $pkgs, $tmp1, $tmp2);
-
- if ($tmprc == 0) {
- // ok, packages match, so pkg info can be safely called
+ if (
+
+ $extra_param = "";
+ if ($local_only) {
+ $extra_param = "-U ";
+ }
+
+ if ($lock) {
+ mark_subsystem_dirty('pkg');
+ }
+
+ if (!$installed_only) {
+ // repo catalog search (either remote or local_only)
+ $rc = pkg_exec("search {$extra_param}-R --raw-format json-compact " . $pkgs, $out, $err);
+ }
+ if ($installed_only || ($local_only && $rc != 0)) {
+ /* use pkg info if (1) installed pkg search or (2) local catalog copy search requested + failed.
+ *
+ * The local repo catalog copy may be cleared if a previous call to pkg search couldn't get the
+ * remote repo catalog.
+ *
+ * If the calling code would have accepted local copy info (which isn't assumed up to date) then it
+ * makes sense to fall back on pkg info to at least return the known info about installed pkgs (pkg
+ * info should still work), instead of failing and returning no info at all. For example, this
+ * enables offline view + management of installed pkgs.
+ */
+
+ // pkg info errors if none match, unlike pkg search, so test it will work beforehand
+ // is_package_installed() is a wrapper for pkg info -e <pattern> which is what we need here.
+ if (is_package_installed($pkgs)) {
+ // ok, 1 or more packages match, so pkg info can be safely called to get the pkg list
$rc = pkg_exec("info -R --raw-format json-compact " . $pkgs, $out, $err);
} // else we already have empty values for $out etc which are correct if none matched
}
OpenPOWER on IntegriCloud