From owner-svn-soc-all@FreeBSD.ORG Mon Jul 8 07:12:21 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 11B5FED0 for ; Mon, 8 Jul 2013 07:12:21 +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 02E011C4D for ; Mon, 8 Jul 2013 07:12:21 +0000 (UTC) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.14.7/8.14.7) with ESMTP id r687CKeK068916 for ; Mon, 8 Jul 2013 07:12:20 GMT (envelope-from mattbw@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.14.7/8.14.6/Submit) id r687CKCK068912 for svn-soc-all@FreeBSD.org; Mon, 8 Jul 2013 07:12:20 GMT (envelope-from mattbw@FreeBSD.org) Date: Mon, 8 Jul 2013 07:12:20 GMT Message-Id: <201307080712.r687CKCK068912@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: r254407 - soc2013/mattbw/backend 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: Mon, 08 Jul 2013 07:12:21 -0000 Author: mattbw Date: Mon Jul 8 07:12:20 2013 New Revision: 254407 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254407 Log: (in-progress) create new datatypes to streamline query target passing Modified: soc2013/mattbw/backend/query.c soc2013/mattbw/backend/query.h soc2013/mattbw/backend/query_match.c Modified: soc2013/mattbw/backend/query.c ============================================================================== --- soc2013/mattbw/backend/query.c Mon Jul 8 06:12:38 2013 (r254406) +++ soc2013/mattbw/backend/query.c Mon Jul 8 07:12:20 2013 (r254407) @@ -43,10 +43,7 @@ gboolean any_repo; gboolean local_repo; - /* Query result routing */ - emit_ptr emitter; - job_emit_ptr job_emitter; - pkg_jobs_t job_type; + struct query_target *t; }; static gboolean match_id_in_it(struct pkgdb_it *it, struct query *q, struct pkg @@ -129,9 +126,12 @@ * Assume any error is due to not finding packages. At time of * writing this is true, but may change. */ - if (success == TRUE) - q->emitter(match_pkg, match_id, q); - else + if (success == TRUE) { + if (q->t->type == QUERY_EMIT) + q->t->data.emit.f(match_pkg, match_id, q); + else if (q->t->type == QUERY_JOB) + query_emit_to_job(match_pkg, match_id, q); + } else pk_backend_error_code(q->backend, PK_ERROR_ENUM_PACKAGE_NOT_FOUND, "package not found"); @@ -151,12 +151,7 @@ * It also *finishes* the backend job. */ gboolean -query_do(PkBackend *backend, - unsigned int load_flags, - emit_ptr emitter, - pkg_jobs_t job_type, - job_emit_ptr job_emitter, - query_body_ptr body) +query_do(PkBackend *backend, struct query_target *t, query_body_ptr body) { gboolean no_error_yet; guint i; @@ -185,10 +180,7 @@ no_error_yet = query_do_single(package_ids[i], backend, db, - load_flags, - emitter, - job_type, - job_emitter, + t, body); pk_backend_set_percentage(backend, ((i * 100) / len)); } @@ -210,24 +202,14 @@ query_do_single(gchar *package_id, PkBackend *backend, struct pkgdb *db, - unsigned int load_flags, - emit_ptr emitter, - pkg_jobs_t job_type, - job_emit_ptr job_emitter, + struct query_target *t, query_body_ptr body) { gboolean success; struct query *q; q = NULL; - success = query_init(package_id, - backend, - db, - load_flags, - emitter, - job_type, - job_emitter, - &q); + success = query_init(package_id, backend, db, t, &q); if (success) success = body(q); @@ -255,7 +237,7 @@ backend = query_backend(q); - if (pkg_jobs_new(&jobs, q->job_type, q->db) != EPKG_OK) { + if (pkg_jobs_new(&jobs, q->t->data.job.type, q->db) != EPKG_OK) { (void)pk_backend_error_code(backend, PK_ERROR_ENUM_INTERNAL_ERROR, "could not init pkg_jobs"); @@ -273,7 +255,7 @@ "could not add to job"); goto cleanup; } - success = q->job_emitter(jobs, q); + success = q->t->data.job.f(jobs, q); cleanup: pkg_jobs_free(jobs); @@ -287,14 +269,10 @@ query_init(const gchar *id, PkBackend *backend, struct pkgdb *db, - unsigned int load_flags, - emit_ptr emitter, - pkg_jobs_t job_type, - job_emit_ptr job_emitter, + struct query_target *t, struct query **q_p) { gboolean success; - gboolean loading_files; struct query *q; q = *q_p; @@ -304,11 +282,8 @@ query_free_contents(q); q->backend = backend; - q->load_flags = load_flags; q->db = db; - q->emitter = emitter; - q->job_type = job_type; - q->job_emitter = job_emitter; + q->t = t; success = split_id(id, &(q->strv), @@ -341,13 +316,18 @@ * Stop pkg from catching fire if we try to load files from * non-installed packages. */ - loading_files = (load_flags & PKG_LOAD_FILES) ? TRUE : FALSE; - if (q->local_repo == FALSE && loading_files) { - pk_backend_error_code(backend, - PK_ERROR_ENUM_CANNOT_GET_FILELIST, - "cannot get files for remote package"); - success = FALSE; - goto cleanup; + if (q->t->type == QUERY_EMIT) { + gboolean loading_files; + + loading_files = (q->t->data.emit.load_flags & + PKG_LOAD_FILES) ? TRUE : FALSE; + if (q->local_repo == FALSE && loading_files) { + pk_backend_error_code(backend, + PK_ERROR_ENUM_CANNOT_GET_FILELIST, + "cannot get files for remote package"); + success = FALSE; + goto cleanup; + } } cleanup: if (success == FALSE) { @@ -382,7 +362,11 @@ *match_pkg_p = NULL; *match_id_p = NULL; - load_flags = q->load_flags; + + if (q->t->type == QUERY_EMIT) + load_flags = q->t->data.emit.load_flags; + else + load_flags = PKG_LOAD_BASIC; for (HASH_FOR(err, pkgdb_it_next, it, match_pkg_p, load_flags)) if (try_id_match(*match_pkg_p, q, match_id_p) == TRUE) Modified: soc2013/mattbw/backend/query.h ============================================================================== --- soc2013/mattbw/backend/query.h Mon Jul 8 06:12:38 2013 (r254406) +++ soc2013/mattbw/backend/query.h Mon Jul 8 07:12:20 2013 (r254407) @@ -31,12 +31,31 @@ typedef gboolean (*job_emit_ptr) (struct pkg_jobs *jobs, struct query *q); typedef gboolean (*query_body_ptr) (struct query *q); +enum query_type { + QUERY_EMIT, + QUERY_JOB +}; + +struct query_target { + enum query_type type; + union { + struct { + int load_flags; + emit_ptr f; + } emit; + struct { + pkg_jobs_t type; + job_emit_ptr f; + } job; + } data; +}; + PkBackend *query_backend(struct query *q); -gboolean query_do(PkBackend *backend, unsigned int load_flags, emit_ptr emitter, pkg_jobs_t job_type, job_emit_ptr job_emitter, query_body_ptr body); -gboolean query_do_single(gchar *package_id, PkBackend *backend, struct pkgdb *db, unsigned int load_flags, emit_ptr emitter, pkg_jobs_t job_type, job_emit_ptr job_emitter, query_body_ptr body); +gboolean query_do(PkBackend *backend, struct query_target *t, query_body_ptr body); +gboolean query_do_single(gchar *package_id, PkBackend *backend, struct pkgdb *db, struct query_target *t, query_body_ptr body); gboolean query_emit_to_job(struct pkg *pkg, const gchar *id, struct query *q); gboolean query_find_match(struct query *q); -gboolean query_init(const gchar *id, PkBackend *backend, struct pkgdb *db, unsigned int load_flags, emit_ptr emitter, pkg_jobs_t job_type, job_emit_ptr job_emitter, struct query **q_p); +gboolean query_init(const gchar *id, PkBackend *backend, struct pkgdb *db, struct query_target *t, struct query **q_p); void query_free(struct query *q); #endif /* !_PKGNG_BACKEND_QUERY_H_ */ Modified: soc2013/mattbw/backend/query_match.c ============================================================================== --- soc2013/mattbw/backend/query_match.c Mon Jul 8 06:12:38 2013 (r254406) +++ soc2013/mattbw/backend/query_match.c Mon Jul 8 07:12:20 2013 (r254407) @@ -39,13 +39,13 @@ query_match_id_to_emitter(PkBackend *backend, unsigned int load_flags, emit_ptr emitter) { + struct query_target t; - return query_do(backend, - load_flags, - emitter, - PKG_JOBS_INSTALL, /* <-- does not matter what goes here */ - NULL, - query_find_match); + t.type = QUERY_EMIT; + t.data.emit.load_flags = load_flags; + t.data.emit.f = emitter; + + return query_do(backend, &t, query_find_match); } /* @@ -57,11 +57,11 @@ query_match_id_to_job(PkBackend *backend, pkg_jobs_t type, job_emit_ptr emitter) { + struct query_target t; + + t.type = QUERY_JOB; + t.data.job.type = type; + t.data.job.f = emitter; - return query_do(backend, - PKG_LOAD_BASIC, /* <-- does not matter what goes here */ - query_emit_to_job, - type, - emitter, - query_find_match); + return query_do(backend, &t, query_find_match); }