Date: Sat, 6 Jul 2013 07:38:41 GMT From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254219 - in soc2013/mattbw/backend: . actions Message-ID: <201307060738.r667cfv8059686@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mattbw Date: Sat Jul 6 07:38:41 2013 New Revision: 254219 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254219 Log: bash simulate-install-packages to the point where it sometimes shows the correct information Modified: soc2013/mattbw/backend/actions/actions.h soc2013/mattbw/backend/actions/install-packages.c soc2013/mattbw/backend/pk-backend-pkgng.c soc2013/mattbw/backend/query.c Modified: soc2013/mattbw/backend/actions/actions.h ============================================================================== --- soc2013/mattbw/backend/actions/actions.h Sat Jul 6 07:09:02 2013 (r254218) +++ soc2013/mattbw/backend/actions/actions.h Sat Jul 6 07:38:41 2013 (r254219) @@ -24,10 +24,14 @@ #include <glib.h> /* gboolean */ #include "../pk-backend.h" /* PkBackend */ -/* Each thread is implemented in its namesake C file. */ +/* + * Each thread is implemented in its namesake C file, except simulations + * which are stored with their non-simulated counterparts. + */ gboolean get_details_thread(PkBackend *backend); gboolean get_files_thread(PkBackend *backend); gboolean get_repo_list_thread(PkBackend *backend); gboolean install_packages_thread(PkBackend *backend); +gboolean simulate_install_packages_thread(PkBackend *backend); #endif /* !_PKGNG_BACKEND_ACTIONS_H_ */ Modified: soc2013/mattbw/backend/actions/install-packages.c ============================================================================== --- soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 07:09:02 2013 (r254218) +++ soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 07:38:41 2013 (r254219) @@ -29,12 +29,17 @@ #include "actions.h" /* install_packages_thread prototype */ static gboolean body(struct query *q); +static gboolean sim_body(struct query *q); +static void do_install_packages(struct pkg_jobs *jobs, struct query *q, gboolean simulate); static void emit(struct pkg *pkg, const gchar *id, struct query *q); -static void job(struct pkg_jobs *jobs, struct query *q); +static void job (struct pkg_jobs *jobs, struct query *q); +static void sim_emit(struct pkg *pkg, const gchar *id, struct query *q); +static void sim_job(struct pkg_jobs *jobs, struct query *q); + /* - * The thread that performs an InstallPackages operation. Should be invoked by - * the pk_backend_install_packages hook. + * The thread that performs an InstallPackages operation. Should be invoked + * by the pk_backend_install_packages hook. */ gboolean install_packages_thread(PkBackend *backend) @@ -44,6 +49,17 @@ } /* + * The thread that performs a Simulate InstallPackages operation. Should be + * invoked by the pk_backend_simulate_install_packages hook. + */ +gboolean +simulate_install_packages_thread(PkBackend *backend) +{ + + return query_for_all_ids(backend, PKG_LOAD_BASIC, sim_body); +} + +/* * Look up and attempt to install the given PackageID, if it can be found. */ static gboolean @@ -54,46 +70,99 @@ } /* - * Tries to install the given package. + * Look up and attempt to simulate installing the given PackageID, if it can + * be found. */ -static void -emit(struct pkg *pkg, const gchar *id, struct query *q) +static gboolean +sim_body(struct query *q) { - INTENTIONALLY_IGNORE(id); - return query_emit_to_job(pkg, q, PKG_JOBS_INSTALL, job); + return query_emit_match(q, sim_emit); } -/* - * Tries to install the given package. - */ static void -job(struct pkg_jobs *jobs, struct query *q) +do_install_packages(struct pkg_jobs *jobs, struct query *q, gboolean simulate) { - int err; - PkBackend *backend; + int err; + PkBackend *backend; backend = query_backend(q); + pk_backend_set_status(backend, PK_STATUS_ENUM_DEP_RESOLVE); err = pkg_jobs_solve(jobs); if (err == EPKG_OK) { - char *desc; - gchar *id; - struct pkg *pkg; + char *desc; + gchar *id; + struct pkg *pkg; pkg = NULL; id = NULL; - for (HASH_FOR(err, pkg_jobs, jobs, &pkg)) { - pkg_get(pkg, PKG_DESC, &desc); - query_pkg_to_id(pkg, &id); - pk_backend_package(backend, - PK_INFO_ENUM_INSTALLING, - id, - desc); + if (pkg_jobs_count(jobs) == 0) + pk_backend_error_code(backend, + PK_ERROR_ENUM_INTERNAL_ERROR, + "job contains no packages"); + else { + while (pkg_jobs(jobs, &pkg) == EPKG_OK) { + pkg_get(pkg, PKG_COMMENT, &desc); + query_pkg_to_id(pkg, &id); + pk_backend_package(backend, + PK_INFO_ENUM_INSTALLING, + id, + desc); + } + g_free(id); } - g_free(id); } else pk_backend_error_code(backend, - PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, - "could not solve the job"); + PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, + "could not solve the job"); + + /* TODO: actual install */ + if (err == EPKG_OK && simulate == FALSE) + pk_backend_error_code(backend, + PK_ERROR_ENUM_NOT_SUPPORTED, + "not implemented yet"); + +} + +/* + * Tries to install the given package. + */ +static void +emit(struct pkg *pkg, const gchar *id, struct query *q) +{ + + INTENTIONALLY_IGNORE(id); + return query_emit_to_job(pkg, q, PKG_JOBS_INSTALL, job); +} + +/* + * Tries to process the given solved installation jobs. + */ +static void +job(struct pkg_jobs *jobs, struct query *q) +{ + + do_install_packages(jobs, q, FALSE); +} + +/* + * Tries to install the given package. + */ +static void +sim_emit(struct pkg *pkg, const gchar *id, struct query *q) +{ + + INTENTIONALLY_IGNORE(id); + return query_emit_to_job(pkg, q, PKG_JOBS_INSTALL, sim_job); +} + +/* + * Tries to simulate processing the given installation jobs. + */ +static void +sim_job(struct pkg_jobs *jobs, struct query *q) +{ + + do_install_packages(jobs, q, TRUE); } Modified: soc2013/mattbw/backend/pk-backend-pkgng.c ============================================================================== --- soc2013/mattbw/backend/pk-backend-pkgng.c Sat Jul 6 07:09:02 2013 (r254218) +++ soc2013/mattbw/backend/pk-backend-pkgng.c Sat Jul 6 07:38:41 2013 (r254219) @@ -367,7 +367,6 @@ pk_backend_set_percentage(backend, PK_BACKEND_PERCENTAGE_INVALID); pk_backend_thread_create(backend, install_packages_thread); - pk_backend_finished(backend); } /** @@ -1142,35 +1141,13 @@ void pk_backend_simulate_install_packages(PkBackend *backend, gchar **package_ids) { - INTENTIONALLY_IGNORE(package_ids); - - pk_backend_set_status(backend, PK_STATUS_ENUM_DEP_RESOLVE); - - pk_backend_package(backend, PK_INFO_ENUM_REMOVING, - "powertop;1.8-1.fc8;i386;fedora", "Power consumption monitor"); - - pk_backend_package(backend, PK_INFO_ENUM_INSTALLING, - "gtk2;2.11.6-6.fc8;i386;fedora", "GTK+ Libraries for GIMP"); - - pk_backend_package(backend, PK_INFO_ENUM_UPDATING, - "lib7;7.0.1-6.fc13;i386;fedora", "C Libraries"); - - pk_backend_package(backend, PK_INFO_ENUM_REINSTALLING, - "libssl;3.5.7-2.fc13;i386;fedora", "SSL Libraries"); - pk_backend_package(backend, PK_INFO_ENUM_AVAILABLE, - "vips-doc;7.12.4-2.fc8;noarch;linva", "The vips documentation package."); - - pk_backend_package(backend, PK_INFO_ENUM_INSTALLED, - "glib2;2.14.0;i386;fedora", "The GLib library"); - - pk_backend_package(backend, PK_INFO_ENUM_DOWNGRADING, - "kernel;2.6.23-0.115.rc3.git1.fc8;i386;installed", "The Linux kernel (the core of the Linux operating system)"); + INTENTIONALLY_IGNORE(package_ids); - pk_backend_package(backend, PK_INFO_ENUM_UPDATING, - "gtkhtml2;2.19.1-4.fc8;i386;fedora", "An HTML widget for GTK+ 2.0"); + pk_backend_set_status(backend, PK_STATUS_ENUM_RUNNING); + pk_backend_set_percentage(backend, PK_BACKEND_PERCENTAGE_INVALID); - pk_backend_finished(backend); + pk_backend_thread_create(backend, simulate_install_packages_thread); } Modified: soc2013/mattbw/backend/query.c ============================================================================== --- soc2013/mattbw/backend/query.c Sat Jul 6 07:09:02 2013 (r254218) +++ soc2013/mattbw/backend/query.c Sat Jul 6 07:38:41 2013 (r254219) @@ -208,7 +208,8 @@ jobs = NULL; err = pkg_jobs_new(&jobs, type, q->db); if (err == EPKG_OK) { - err = pkg_jobs_set_repository(jobs, q->data); + if (q->data != NULL) + err = pkg_jobs_set_repository(jobs, q->data); if (err == EPKG_OK) { err = jobs_add_pkg(jobs, MATCH_EXACT, pkg); if (err == EPKG_OK) @@ -217,10 +218,9 @@ pk_backend_error_code(q->backend, PK_ERROR_ENUM_INTERNAL_ERROR, "could not add to job"); - } else pk_backend_error_code(q->backend, - PK_ERROR_ENUM_INTERNAL_ERROR, + PK_ERROR_ENUM_REPO_NOT_FOUND, "could not set repo"); } else @@ -427,6 +427,7 @@ { char *name; + name = NULL; pkg_get(pkg, PKG_NAME, &name); return pkg_jobs_add(jobs, type, &name, 1); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307060738.r667cfv8059686>