From 7d8e810341aead684a3aeaab30048fc0872f99d3 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 20 Oct 2022 10:07:21 +0200 Subject: [PATCH] luci-app-ddns: get rid of luci-lib-ipkg depdency Invoking opkg to obtain the installed package version is very slow and resource intensive, parse the related control file directly to avoid the extraneous dependency and resource consumption. Signed-off-by: Jo-Philipp Wich (cherry picked from commit 3395656b9f687fd5e071a7805e0ba4c83f62906d) --- applications/luci-app-ddns/Makefile | 2 +- .../root/usr/libexec/rpcd/luci.ddns | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/applications/luci-app-ddns/Makefile b/applications/luci-app-ddns/Makefile index 1b70170308..a529e22e22 100644 --- a/applications/luci-app-ddns/Makefile +++ b/applications/luci-app-ddns/Makefile @@ -12,7 +12,7 @@ PKG_LICENSE:=Apache-2.0 PKG_MAINTAINER:=Ansuel Smith LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts) -LUCI_DEPENDS:=+luci-lib-ipkg +luci-mod-admin-full +ddns-scripts +LUCI_DEPENDS:=+luci-mod-admin-full +ddns-scripts LUCI_PKGARCH:=all include ../../luci.mk diff --git a/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns b/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns index 132c186642..6db329c186 100755 --- a/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns +++ b/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns @@ -153,21 +153,26 @@ local methods = { }, get_ddns_state = { call = function() - local ipkg = require "luci.model.ipkg" local uci = UCI.cursor() local dateformat = uci:get("ddns", "global", "ddns_dateformat") or "%F %R" local services_mtime = fs.stat(ddns_package_path .. "/list", 'mtime') uci:unload("ddns") - local ver, srv_ver_cmd local res = {} + local ver - if ipkg then - ver = ipkg.info(srv_name)[srv_name].Version - else - srv_ver_cmd = luci_helper .. " -V | awk {'print $2'} " - ver = util.exec(srv_ver_cmd) + local _, ctrl = pcall(io.lines, "/usr/lib/opkg/info/%s.control" % srv_name) + if ctrl then + for line in ctrl do + ver = line:match("^Version: (.+)$") + + if ver then + break + end + end end + ver = ver or util.trim(util.exec("%s -V | awk {'print $2'}" % luci_helper)) + res['_version'] = ver and #ver > 0 and ver or nil res['_enabled'] = sys.init.enabled("ddns") res['_curr_dateformat'] = os.date(dateformat) -- 2.30.2