From: Sangyoon Jang Date: Fri, 15 Dec 2023 04:03:13 +0000 (+0900) Subject: Fix to install preload-rw packages first X-Git-Tag: accepted/tizen/unified/20231219.160414~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=317fa453b5b6647a9604762713d69427c083f62f;p=platform%2Fcore%2Fappfw%2Fpkgmgr-tool.git Fix to install preload-rw packages first Install preload-rw packages first to make more free space in the RO partition during installation. Change-Id: I5a208aba8e4149b84daa2717ea22a5e920397a88 Signed-off-by: Sangyoon Jang --- diff --git a/src/install_preload_pkg/install_preload_pkg.c b/src/install_preload_pkg/install_preload_pkg.c index 7235de8..32dbda5 100644 --- a/src/install_preload_pkg/install_preload_pkg.c +++ b/src/install_preload_pkg/install_preload_pkg.c @@ -92,6 +92,7 @@ typedef struct pkgfile_info { } pkgfile_info; GList *pkgfile_info_list; +GList *rw_pkgfile_info_list; static void __free_pkgfile_info_list(gpointer data) { @@ -140,8 +141,9 @@ static void __make_preload_rw_list(GList *pkg_list) fclose(file); } -static int _add_pkgfile_info(const char *backend, const char *directory, - install_type type, bool skip_check_reference) { +static int _add_pkgfile_info(GList **list, const char *backend, + const char *directory, install_type type, + bool skip_check_reference) { DIR *dir; struct dirent *file_info; char err_buf[BUFSZE]; @@ -210,7 +212,7 @@ static int _add_pkgfile_info(const char *backend, const char *directory, pkgfile->pkg_size = ftell(fp); fclose(fp); - pkgfile_info_list = g_list_prepend(pkgfile_info_list, pkgfile); + *list = g_list_prepend(*list, pkgfile); } closedir(dir); @@ -234,6 +236,9 @@ static gint __pkgfileinfo_compare(gconstpointer a, gconstpointer b) static void _sort_pkgfile_info_list() { pkgfile_info_list = g_list_sort(pkgfile_info_list, __pkgfileinfo_compare); + rw_pkgfile_info_list = g_list_sort(rw_pkgfile_info_list, __pkgfileinfo_compare); + pkgfile_info_list = g_list_concat(rw_pkgfile_info_list, pkgfile_info_list); + rw_pkgfile_info_list = NULL; } static int _install_pkg_with_pkginfo() @@ -273,7 +278,7 @@ static int _install_pkg_with_pkginfo() int status = 0; waitpid(pid, &status, 0); if (WIFEXITED(status) == 0 || WEXITSTATUS(status) != 0) { - _E("Execution failed : %s", file_info->backend_type); + _E("Install failed : %s, %s", file_info->backend_type, file_info->path); g_list_free_full(preload_rw_pkg_list, __free_pkginfo); return -1; } @@ -424,31 +429,33 @@ int main(int argc, char *argv[]) } if (is_default) { - if (_add_pkgfile_info(TPK_BACKEND_CMD, TPK_DIR, + if (_add_pkgfile_info(&pkgfile_info_list, TPK_BACKEND_CMD, TPK_DIR, INSTALL_TYPE_PRELOAD, skip_check_reference) != 0) goto error; - if (_add_pkgfile_info(TPK_BACKEND_CMD, TPK_RW_DIR, + if (_add_pkgfile_info(&rw_pkgfile_info_list, TPK_BACKEND_CMD, TPK_RW_DIR, INSTALL_TYPE_PRELOAD_RW, skip_check_reference) != 0) goto error; - if (_add_pkgfile_info(WGT_BACKEND_CMD, WGT_DIR, + if (_add_pkgfile_info(&pkgfile_info_list, WGT_BACKEND_CMD, WGT_DIR, INSTALL_TYPE_PRELOAD, skip_check_reference) != 0) goto error; - if (_add_pkgfile_info(WGT_BACKEND_CMD, WGT_RW_DIR, + if (_add_pkgfile_info(&rw_pkgfile_info_list, WGT_BACKEND_CMD, WGT_RW_DIR, INSTALL_TYPE_PRELOAD_RW, skip_check_reference) != 0) goto error; - if (_add_pkgfile_info(UNIFIED_BACKEND_CMD, RPK_DIR, + if (_add_pkgfile_info(&pkgfile_info_list, UNIFIED_BACKEND_CMD, RPK_DIR, INSTALL_TYPE_PRELOAD, skip_check_reference) != 0) goto error; - if (_add_pkgfile_info(UNIFIED_BACKEND_CMD, RPK_RW_DIR, + if (_add_pkgfile_info(&rw_pkgfile_info_list, UNIFIED_BACKEND_CMD, RPK_RW_DIR, INSTALL_TYPE_PRELOAD_RW, skip_check_reference) != 0) goto error; - + /* sort pkgfile_info_list and rw_pkgfile_info_list first, + * and concat rw_pkgfile_info_list to pkgfile_info_list + */ _sort_pkgfile_info_list(); if (_install_pkg_with_pkginfo() != 0) @@ -471,7 +478,7 @@ int main(int argc, char *argv[]) else backend_cmd = WGT_BACKEND_CMD; - if (_add_pkgfile_info(backend_cmd, pkg_path, + if (_add_pkgfile_info(&pkgfile_info_list, backend_cmd, pkg_path, op_type, skip_check_reference) != 0) goto error;