From 79c0e81b78557b05882058d5311719202fe9cbbe Mon Sep 17 00:00:00 2001 From: Jess Date: Fri, 22 May 2026 09:59:45 -0300 Subject: [PATCH] feat: add install-release package count support --- src/detection/packages/packages.h | 1 + src/detection/packages/packages_linux.c | 17 ++++++++++++++++- src/modules/packages/option.h | 1 + src/modules/packages/packages.c | 9 +++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/detection/packages/packages.h b/src/detection/packages/packages.h index 0a2c4040b5..4c3613ace1 100644 --- a/src/detection/packages/packages.h +++ b/src/detection/packages/packages.h @@ -22,6 +22,7 @@ typedef struct FFPackagesResult { uint32_t guixUser; uint32_t hpkgSystem; uint32_t hpkgUser; + uint32_t installrelease; uint32_t kiss; uint32_t linglong; uint32_t lpkg; diff --git a/src/detection/packages/packages_linux.c b/src/detection/packages/packages_linux.c index 98a01b23a0..e9ee26ab23 100644 --- a/src/detection/packages/packages_linux.c +++ b/src/detection/packages/packages_linux.c @@ -431,7 +431,7 @@ static uint32_t getPacmanPackages(FFstrbuf* baseDir) { uint32_t baseDirLen = baseDir->length; ffStrbufAppendS(baseDir, "/etc/pacman.conf"); - bool confFound = ffParsePropFileValues(baseDir->chars, 2, (FFpropquery[]) { + bool confFound = ffParsePropFileValues(baseDir->chars, 2, (FFpropquery[]){ { "DBPath =", &dbPath }, { "RootDir =", &rootDir }, }); @@ -648,4 +648,19 @@ void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options) result->appimage += getNumElementsBySuffix(&baseDir, "/AppImages", ".appimage"); result->appimage += getNumElementsBySuffix(&baseDir, "/Applications", ".appimage"); } + + if (!(options->disabled & FF_PACKAGES_FLAG_INSTALLRELEASE_BIT)) { + FF_STRBUF_AUTO_DESTROY path = ffStrbufCreateCopy(&baseDir); + ffStrbufAppendS(&path, ".config/install_release/state.json"); + if (ffPathExists(path.chars, FF_PATHTYPE_FILE)) { + yyjson_doc* doc = yyjson_read_file(path.chars, YYJSON_READ_NOFLAG, NULL, NULL); + if (doc != NULL) { + yyjson_val* root = yyjson_doc_get_root(doc); + if (yyjson_is_obj(root)) { + result->installrelease = (uint32_t) yyjson_obj_size(root); + } + yyjson_doc_free(doc); + } + } + } } diff --git a/src/modules/packages/option.h b/src/modules/packages/option.h index 6018494374..bd1baf42a6 100644 --- a/src/modules/packages/option.h +++ b/src/modules/packages/option.h @@ -39,6 +39,7 @@ typedef enum FF_A_PACKED FFPackagesFlags { FF_PACKAGES_FLAG_MOSS_BIT = 1ULL << 32, FF_PACKAGES_FLAG_APPIMAGE_BIT = 1ULL << 33, FF_PACKAGES_FLAG_CARDS_BIT = 1ULL << 34, + FF_PACKAGES_FLAG_INSTALLRELEASE_BIT = 1ULL << 35, FF_PACKAGES_FLAG_FORCE_UNSIGNED = UINT64_MAX, } FFPackagesFlags; static_assert(sizeof(FFPackagesFlags) == sizeof(uint64_t), ""); diff --git a/src/modules/packages/packages.c b/src/modules/packages/packages.c index a0012047a8..935ceadb64 100644 --- a/src/modules/packages/packages.c +++ b/src/modules/packages/packages.c @@ -89,6 +89,7 @@ bool ffPrintPackages(FFPackagesOptions* options) { } else { FF_PRINT_PACKAGE_NAME(hpkgSystem, "hpkg") } + FF_PRINT_PACKAGE_NAME(installrelease, "install-release") FF_PRINT_PACKAGE(kiss) FF_PRINT_PACKAGE(linglong) FF_PRINT_PACKAGE(lpkg) @@ -167,6 +168,7 @@ bool ffPrintPackages(FFPackagesOptions* options) { FF_ARG(hpkgAll, "hpkg-all"), FF_ARG(counts.hpkgSystem, "hpkg-system"), FF_ARG(counts.hpkgUser, "hpkg-user"), + FF_ARG(counts.installrelease, "install-release"), FF_ARG(counts.kiss, "kiss"), FF_ARG(counts.linglong, "linglong"), FF_ARG(counts.lpkg, "lpkg"), @@ -278,6 +280,11 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module) { ; FF_TEST_PACKAGE_NAME(HPKG) break; + case 'I': + if (false) + ; + FF_TEST_PACKAGE_NAME(INSTALLRELEASE) + break; case 'K': if (false) ; @@ -445,6 +452,7 @@ bool ffGeneratePackagesJsonResult(FF_A_UNUSED FFPackagesOptions* options, yyjson FF_APPEND_PACKAGE_COUNT(guixUser) FF_APPEND_PACKAGE_COUNT(hpkgSystem) FF_APPEND_PACKAGE_COUNT(hpkgUser) + FF_APPEND_PACKAGE_COUNT(installrelease) FF_APPEND_PACKAGE_COUNT(kiss) FF_APPEND_PACKAGE_COUNT(linglong) FF_APPEND_PACKAGE_COUNT(lpkg) @@ -522,6 +530,7 @@ FFModuleBaseInfo ffPackagesModuleInfo = { { "Total number of all hpkg packages", "hpkg-all" }, { "Number of hpkg-system packages", "hpkg-system" }, { "Number of hpkg-user packages", "hpkg-user" }, + { "Number of install-release packages", "install-release"}, { "Number of kiss packages", "kiss" }, { "Number of linglong packages", "linglong" }, { "Number of lpkg packages", "lpkg" },