Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Jul 2013 09:35:57 GMT
From:      mattbw@FreeBSD.org
To:        svn-soc-all@FreeBSD.org
Subject:   socsvn commit: r254232 - soc2013/mattbw/backend/actions
Message-ID:  <201307060935.r669ZvHo044817@socsvn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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");
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307060935.r669ZvHo044817>