From owner-svn-soc-all@FreeBSD.ORG Sat Jul 6 09:35:57 2013 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 928B6FFC for ; Sat, 6 Jul 2013 09:35:57 +0000 (UTC) (envelope-from mattbw@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) by mx1.freebsd.org (Postfix) with ESMTP id 755ED1F97 for ; Sat, 6 Jul 2013 09:35:57 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r669Zvkv044824 for ; Sat, 6 Jul 2013 09:35:57 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r669ZvHo044817 for svn-soc-all@FreeBSD.org; Sat, 6 Jul 2013 09:35:57 GMT (envelope-from mattbw@FreeBSD.org) Date: Sat, 6 Jul 2013 09:35:57 GMT Message-Id: <201307060935.r669ZvHo044817@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mattbw@FreeBSD.org using -f From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254232 - soc2013/mattbw/backend/actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jul 2013 09:35:57 -0000 Author: mattbw Date: Sat Jul 6 09:35:57 2013 New Revision: 254232 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254232 Log: install-packages seems to work enough to install packages now Modified: soc2013/mattbw/backend/actions/install-packages.c Modified: soc2013/mattbw/backend/actions/install-packages.c ============================================================================== --- soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 09:22:42 2013 (r254231) +++ soc2013/mattbw/backend/actions/install-packages.c Sat Jul 6 09:35:57 2013 (r254232) @@ -32,6 +32,8 @@ 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 do_install_solved_job(struct pkg_jobs *jobs, PkBackend *backend, gboolean simulate); +static void do_install_solved_job_real(struct pkg_jobs *jobs, PkBackend *backend); static void emit(struct pkg *pkg, const gchar *id, 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); @@ -81,17 +83,18 @@ return query_emit_match(q, sim_emit); } +/* + * Installs (or pretends to install) an unsolved installation job. + */ static void do_install_packages(struct pkg_jobs *jobs, struct query *q, gboolean simulate) { - 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) + if (pkg_jobs_solve(jobs) != EPKG_OK) pk_backend_error_code(backend, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "could not solve the job"); @@ -99,20 +102,42 @@ pk_backend_error_code(backend, PK_ERROR_ENUM_INTERNAL_ERROR, "job contains no packages"); - else { - struct pkg *pkg; + else + do_install_solved_job(jobs, backend, simulate); +} + +/* + * Installs (or pretends to install) a fully solved installation job. + */ +static void +do_install_solved_job(struct pkg_jobs *jobs, + PkBackend *backend, + gboolean simulate) +{ + struct pkg *pkg; - pkg = NULL; - while (pkg_jobs(jobs, &pkg) == EPKG_OK) - pkgutils_emit(pkg, - backend, - pkgutils_pkg_install_state(pkg)); - - if (simulate == FALSE) - pk_backend_error_code(backend, - PK_ERROR_ENUM_NOT_SUPPORTED, - "not implemented yet"); - } + pkg = NULL; + while (pkg_jobs(jobs, &pkg) == EPKG_OK) + pkgutils_emit(pkg, + backend, + pkgutils_pkg_install_state(pkg)); + + if (simulate == FALSE) + do_install_solved_job_real(jobs, backend); +} + +/* + * Actually installs a fully solved installation job. + */ +static void +do_install_solved_job_real(struct pkg_jobs *jobs, PkBackend *backend) +{ + + pk_backend_set_status(backend, PK_STATUS_ENUM_INSTALL); + if (pkg_jobs_apply(jobs) != EPKG_OK) + pk_backend_error_code(backend, + PK_ERROR_ENUM_PACKAGE_FAILED_TO_INSTALL, + "job failed"); } /*