Date: Sun, 7 Jul 2013 02:25:57 GMT From: mattbw@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r254274 - in soc2013/mattbw/backend: . actions Message-ID: <201307070225.r672Pvjf005597@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mattbw Date: Sun Jul 7 02:25:56 2013 New Revision: 254274 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=254274 Log: more currently fruitless work on installfiles; fix getfiles Modified: soc2013/mattbw/backend/actions/actions.h soc2013/mattbw/backend/actions/get-files.c soc2013/mattbw/backend/actions/install-files.c soc2013/mattbw/backend/pk-backend-pkgng.c Modified: soc2013/mattbw/backend/actions/actions.h ============================================================================== --- soc2013/mattbw/backend/actions/actions.h Sun Jul 7 01:52:05 2013 (r254273) +++ soc2013/mattbw/backend/actions/actions.h Sun Jul 7 02:25:56 2013 (r254274) @@ -31,8 +31,9 @@ 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 install_files_thread(PkBackend *backend); +gboolean install_packages_thread(PkBackend *backend); +gboolean simulate_install_files_thread(PkBackend *backend); gboolean simulate_install_packages_thread(PkBackend *backend); #endif /* !_PKGNG_BACKEND_ACTIONS_H_ */ Modified: soc2013/mattbw/backend/actions/get-files.c ============================================================================== --- soc2013/mattbw/backend/actions/get-files.c Sun Jul 7 01:52:05 2013 (r254273) +++ soc2013/mattbw/backend/actions/get-files.c Sun Jul 7 02:25:56 2013 (r254274) @@ -56,12 +56,11 @@ { gboolean success; int err; - int sb_err; - char *filenames; struct pkg_file *file; struct sbuf *sb; success = FALSE; + file = NULL; /* * Construct a string of the form ";file1;file2;file3;...". We'll get @@ -71,22 +70,21 @@ for (HASH_FOR(err, pkg_files, pkg, &file)) sbuf_printf(sb, ";%s", pkg_file_path(file)); - sb_err = sbuf_finish(sb); - if (sb_err) { - pk_backend_error_code(query_backend(q), - PK_ERROR_ENUM_INTERNAL_ERROR, - "couldn't construct filename string"); - goto cleanup; - } - - filenames = sbuf_data(sb); - /* Skip over any initial ; */ - if (filenames[0] == ';') - filenames++; + if (sbuf_finish(sb) != 0) + (void)pk_backend_error_code(query_backend(q), + PK_ERROR_ENUM_INTERNAL_ERROR, + "couldn't construct filename string"); + else { + char *filenames; + + filenames = sbuf_data(sb); + /* Skip over any initial ; */ + if (filenames[0] == ';') + filenames++; - success = pk_backend_files(query_backend(q), id, filenames); + success = pk_backend_files(query_backend(q), id, filenames); + } -cleanup: sbuf_delete(sb); return success; } Modified: soc2013/mattbw/backend/actions/install-files.c ============================================================================== --- soc2013/mattbw/backend/actions/install-files.c Sun Jul 7 01:52:05 2013 (r254273) +++ soc2013/mattbw/backend/actions/install-files.c Sun Jul 7 02:25:56 2013 (r254274) @@ -30,20 +30,114 @@ #include "actions.h" /* install_files_thread prototype */ +static gboolean do_file(const gchar *path, PkBackend *backend, gboolean simulate); +static gboolean do_files(PkBackend *backend, gboolean simulate); + /* - * The thread that performs an InstallFiles operation. Should be invoked - * by the pk_backend_install_files hook. + * The thread that performs an InstallFiles operation. Should be invoked by + * the pk_backend_install_files hook. */ gboolean install_files_thread(PkBackend *backend) { - guint len; - gchar **package_ids; + + return do_files(backend, FALSE); +} + +/* + * The thread that performs a simulated InstallFiles operation. Should be + * invoked by the pk_backend_install_files hook. + */ +gboolean +simulate_install_files_thread(PkBackend *backend) +{ + + return do_files(backend, TRUE); +} + +/* + * Installs a single package file, or pretends to. + */ +static gboolean +do_file(const gchar *path, PkBackend *backend, gboolean simulate) +{ + gboolean success; + struct pkg *pkg; + struct pkg_manifest_key *keys; + struct pkgdb *db; + + success = FALSE; + pkg = NULL; + keys = NULL; + db = NULL; + + (void)pkg_manifest_keys_new(&keys); + + if (simulate) { + (void)pk_backend_set_status(backend, PK_STATUS_ENUM_RUNNING); + + if (pkg_open(&pkg, path, keys, PKG_FLAG_NONE) != EPKG_OK) { + (void)pk_backend_error_code(backend, + PK_ERROR_ENUM_PACKAGE_CORRUPT, + "could not open file"); + goto cleanup; + } + pkgutils_emit(pkg, backend, pkgutils_pkg_install_state(pkg)); + + success = TRUE; + } else { + /* TODO: event hook */ + + if (open_remote_db(&db, backend) != EPKG_OK) + goto cleanup; + + (void)pk_backend_set_status(backend, PK_STATUS_ENUM_INSTALL); + + if (pkg_add(db, path, PKG_FLAG_NONE, keys) != EPKG_OK) { + (void)pk_backend_error_code(backend, + PK_ERROR_ENUM_PACKAGE_FAILED_TO_INSTALL, + "could not install file"); + goto cleanup; + } + + success = TRUE; + } + +cleanup: + pkgdb_close(db); + pkg_free(pkg); + pkg_manifest_keys_free(keys); - package_ids = pk_backend_get_strv(backend, "package_ids"); - len = g_strv_length(package_ids); + return success; +} - pk_backend_finished(backend); +/* + * Does a file install operation, or a simulation thereof. + */ +static gboolean +do_files(PkBackend *backend, gboolean simulate) +{ + gboolean success; + gchar **paths; - return FALSE; + success = FALSE; + + paths = pk_backend_get_strv(backend, "full_paths"); + if (paths == NULL) + (void)pk_backend_error_code(backend, + PK_ERROR_ENUM_INTERNAL_ERROR, + "could not get path vector"); + else if (*paths == NULL) + (void)pk_backend_error_code(backend, + PK_ERROR_ENUM_INTERNAL_ERROR, + "path vector is empty"); + else { + gchar **p; + + for (p = paths, success = TRUE; *p != NULL && success; p++) + success = do_file(*p, backend, simulate); + } + + pk_backend_finished(backend); + return success; } Modified: soc2013/mattbw/backend/pk-backend-pkgng.c ============================================================================== --- soc2013/mattbw/backend/pk-backend-pkgng.c Sun Jul 7 01:52:05 2013 (r254273) +++ soc2013/mattbw/backend/pk-backend-pkgng.c Sun Jul 7 02:25:56 2013 (r254274) @@ -132,19 +132,21 @@ INTENTIONALLY_IGNORE(backend); - /* (Backformed from pkg.h: pkg_formats) */ - return g_strdup("application/x-gzip;" - "application/x-tar;" - "application/x-bzip2;" - "application/x-xz;"); + /* + * (Backformed from pkg.h: pkg_formats) and using `gvfs-info filename + * -a "standard::content-type" + */ + return g_strdup("application/x-tar;" + "application/x-compressed-tar;" + "application/x-bzip-compressed-tar;" + "application/x-xz-compressed-tar;"); } void pk_backend_get_repo_list(PkBackend *backend, PkBitfield filters) { - INTENTIONALLY_IGNORE(filters); /* not yet supported */ - + INTENTIONALLY_IGNORE(filters); /* not yet supported */ pk_backend_thread_create(backend, get_repo_list_thread); } @@ -169,11 +171,17 @@ } void -pk_backend_simulate_install_packages(PkBackend *backend, gchar **package_ids) +pk_backend_simulate_install_files(PkBackend *backend, gchar **full_paths) { - INTENTIONALLY_IGNORE(package_ids); - + INTENTIONALLY_IGNORE(full_paths); /* retrieved from backend */ pk_backend_thread_create(backend, simulate_install_packages_thread); } +void +pk_backend_simulate_install_packages(PkBackend *backend, gchar **package_ids) +{ + + INTENTIONALLY_IGNORE(package_ids); /* retrieved from backend */ + pk_backend_thread_create(backend, simulate_install_packages_thread); +}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307070225.r672Pvjf005597>