[pacman-dev] [PATCH v2] libalpm: parse {check, make}depends when reading database

morganamilo morganamilo at gmail.com
Tue Oct 9 01:05:15 UTC 2018


Commit 0994893b0e6b627d45a63884ac01af7d0967eff2 added the
alpm_pkg_get_{make,check}depends functions but forgot to include
logic for parsing these fields from the database. As a result these
functions will always return an empty list.

This commit adds the parsing logic.

Signed-off-by: morganamilo <morganamilo at gmail.com>
---

Only after making this patch do I see FS#60347. V2 addes the extra lazy
loading code pointed out in the comments.

As a result this patch is basically identical to Alexandre Garnier's patch.
But as they have not submitted their patch to the mailing list I'll submit mine.

diff --git a/lib/libalpm/be_local.c b/lib/libalpm/be_local.c
index 7c2f96b8..12b13a12 100644
--- a/lib/libalpm/be_local.c
+++ b/lib/libalpm/be_local.c
@@ -153,6 +153,18 @@ static alpm_list_t *_cache_get_optdepends(alpm_pkg_t *pkg)
 	return pkg->optdepends;
 }
 
+static alpm_list_t *_cache_get_makedepends(alpm_pkg_t *pkg)
+{
+	LAZY_LOAD(INFRQ_DESC);
+	return pkg->makedepends;
+}
+
+static alpm_list_t *_cache_get_checkdepends(alpm_pkg_t *pkg)
+{
+	LAZY_LOAD(INFRQ_DESC);
+	return pkg->checkdepends;
+}
+
 static alpm_list_t *_cache_get_conflicts(alpm_pkg_t *pkg)
 {
 	LAZY_LOAD(INFRQ_DESC);
@@ -303,36 +315,38 @@ static int _cache_force_load(alpm_pkg_t *pkg)
  * logic.
  */
 static struct pkg_operations local_pkg_ops = {
-	.get_base        = _cache_get_base,
-	.get_desc        = _cache_get_desc,
-	.get_url         = _cache_get_url,
-	.get_builddate   = _cache_get_builddate,
-	.get_installdate = _cache_get_installdate,
-	.get_packager    = _cache_get_packager,
-	.get_arch        = _cache_get_arch,
-	.get_isize       = _cache_get_isize,
-	.get_reason      = _cache_get_reason,
-	.get_validation  = _cache_get_validation,
-	.has_scriptlet   = _cache_has_scriptlet,
-	.get_licenses    = _cache_get_licenses,
-	.get_groups      = _cache_get_groups,
-	.get_depends     = _cache_get_depends,
-	.get_optdepends  = _cache_get_optdepends,
-	.get_conflicts   = _cache_get_conflicts,
-	.get_provides    = _cache_get_provides,
-	.get_replaces    = _cache_get_replaces,
-	.get_files       = _cache_get_files,
-	.get_backup      = _cache_get_backup,
-
-	.changelog_open  = _cache_changelog_open,
-	.changelog_read  = _cache_changelog_read,
-	.changelog_close = _cache_changelog_close,
-
-	.mtree_open      = _cache_mtree_open,
-	.mtree_next      = _cache_mtree_next,
-	.mtree_close     = _cache_mtree_close,
-
-	.force_load      = _cache_force_load,
+	.get_base         = _cache_get_base,
+	.get_desc         = _cache_get_desc,
+	.get_url          = _cache_get_url,
+	.get_builddate    = _cache_get_builddate,
+	.get_installdate  = _cache_get_installdate,
+	.get_packager     = _cache_get_packager,
+	.get_arch         = _cache_get_arch,
+	.get_isize        = _cache_get_isize,
+	.get_reason       = _cache_get_reason,
+	.get_validation   = _cache_get_validation,
+	.has_scriptlet    = _cache_has_scriptlet,
+	.get_licenses     = _cache_get_licenses,
+	.get_groups       = _cache_get_groups,
+	.get_depends      = _cache_get_depends,
+	.get_optdepends   = _cache_get_optdepends,
+	.get_makedepends  = _cache_get_makedepends,
+	.get_checkdepends = _cache_get_checkdepends,
+	.get_conflicts    = _cache_get_conflicts,
+	.get_provides     = _cache_get_provides,
+	.get_replaces     = _cache_get_replaces,
+	.get_files        = _cache_get_files,
+	.get_backup       = _cache_get_backup,
+
+	.changelog_open   = _cache_changelog_open,
+	.changelog_read   = _cache_changelog_read,
+	.changelog_close  = _cache_changelog_close,
+
+	.mtree_open       = _cache_mtree_open,
+	.mtree_next       = _cache_mtree_next,
+	.mtree_close      = _cache_mtree_close,
+
+	.force_load       = _cache_force_load,
 };
 
 static int checkdbdir(alpm_db_t *db)
@@ -773,6 +787,10 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
 				READ_AND_SPLITDEP(info->depends);
 			} else if(strcmp(line, "%OPTDEPENDS%") == 0) {
 				READ_AND_SPLITDEP(info->optdepends);
+			} else if(strcmp(line, "%MAKEDEPENDS%") == 0) {
+				READ_AND_SPLITDEP(info->makedepends);
+			} else if(strcmp(line, "%CHECKDEPENDS%") == 0) {
+				READ_AND_SPLITDEP(info->checkdepends);
 			} else if(strcmp(line, "%CONFLICTS%") == 0) {
 				READ_AND_SPLITDEP(info->conflicts);
 			} else if(strcmp(line, "%PROVIDES%") == 0) {
diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
index 5009a7da..af94b2d5 100644
--- a/lib/libalpm/be_sync.c
+++ b/lib/libalpm/be_sync.c
@@ -700,17 +700,9 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
 			} else if(strcmp(line, "%OPTDEPENDS%") == 0) {
 				READ_AND_SPLITDEP(pkg->optdepends);
 			} else if(strcmp(line, "%MAKEDEPENDS%") == 0) {
-				/* currently unused */
-				while(1) {
-					READ_NEXT();
-					if(strlen(line) == 0) break;
-				}
+				READ_AND_SPLITDEP(pkg->makedepends);
 			} else if(strcmp(line, "%CHECKDEPENDS%") == 0) {
-				/* currently unused */
-				while(1) {
-					READ_NEXT();
-					if(strlen(line) == 0) break;
-				}
+				READ_AND_SPLITDEP(pkg->checkdepends);
 			} else if(strcmp(line, "%CONFLICTS%") == 0) {
 				READ_AND_SPLITDEP(pkg->conflicts);
 			} else if(strcmp(line, "%PROVIDES%") == 0) {
-- 
2.19.1


More information about the pacman-dev mailing list