/** * hif_package_array_download: * @packages: an array of packages. * @directory: destination directory, or %NULL for the cachedir. * @state: the #HifState. * @error: a #GError or %NULL.. * * Downloads an array of packages. * * Returns: %TRUE for success * * Since: 0.1.0 */ gboolean hif_package_array_download(GPtrArray *packages, const gchar *directory, HifState *state, GError **error) { HifState *state_local; HifPackage *pkg; guint i; /* download any package that is not currently installed */ hif_state_set_number_steps(state, packages->len); for (i = 0; i < packages->len; i++) { g_autofree gchar *tmp = NULL; pkg = g_ptr_array_index(packages, i); state_local = hif_state_get_child(state); tmp = hif_package_download(pkg, NULL, state_local, error); if (tmp == NULL) return FALSE; /* done */ if (!hif_state_done(state, error)) return FALSE; } return TRUE; }
/** * hif_sack_add_sources: */ gboolean hif_sack_add_sources (HySack sack, GPtrArray *sources, guint permissible_cache_age, HifSackAddFlags flags, HifState *state, GError **error) { gboolean ret; guint cnt = 0; guint i; HifSource *src; HifState *state_local; /* count the enabled sources */ for (i = 0; i < sources->len; i++) { src = g_ptr_array_index (sources, i); if (hif_source_get_enabled (src)) cnt++; } /* add each repo */ hif_state_set_number_steps (state, cnt); for (i = 0; i < sources->len; i++) { src = g_ptr_array_index (sources, i); if (!hif_source_get_enabled (src)) continue; state_local = hif_state_get_child (state); ret = hif_sack_add_source (sack, src, permissible_cache_age, flags, state_local, error); if (!ret) return FALSE; /* done */ if (!hif_state_done (state, error)) return FALSE; } /* success */ return TRUE; }
/** * hif_sack_add_source: */ gboolean hif_sack_add_source (HySack sack, HifSource *src, guint permissible_cache_age, HifSackAddFlags flags, HifState *state, GError **error) { gboolean ret = TRUE; GError *error_local = NULL; gint rc; HifState *state_local; int flags_hy = HY_BUILD_CACHE; /* set state */ ret = hif_state_set_steps (state, error, 5, /* check repo */ 95, /* load solv */ -1); if (!ret) return FALSE; /* check repo */ state_local = hif_state_get_child (state); ret = hif_source_check (src, permissible_cache_age, state_local, &error_local); if (!ret) { g_debug ("failed to check, attempting update: %s", error_local->message); g_clear_error (&error_local); hif_state_reset (state_local); ret = hif_source_update (src, HIF_SOURCE_UPDATE_FLAG_FORCE, state_local, &error_local); if (!ret) { if (g_error_matches (error_local, HIF_ERROR, HIF_ERROR_CANNOT_FETCH_SOURCE)) { g_warning ("Skipping refresh of %s: %s", hif_source_get_id (src), error_local->message); g_error_free (error_local); return TRUE; } g_propagate_error (error, error_local); return FALSE; } } /* done */ if (!hif_state_done (state, error)) return FALSE; /* only load what's required */ if ((flags & HIF_SACK_ADD_FLAG_FILELISTS) > 0) flags_hy |= HY_LOAD_FILELISTS; if ((flags & HIF_SACK_ADD_FLAG_UPDATEINFO) > 0) flags_hy |= HY_LOAD_UPDATEINFO; /* load solv */ g_debug ("Loading repo %s", hif_source_get_id (src)); hif_state_action_start (state, HIF_STATE_ACTION_LOADING_CACHE, NULL); rc = hy_sack_load_yum_repo (sack, hif_source_get_repo (src), flags_hy); if (rc == HY_E_FAILED) rc = hy_get_errno (); if (!hif_rc_to_gerror (rc, error)) { g_prefix_error (error, "Failed to load repo %s: ", hif_source_get_id (src)); return FALSE; } /* done */ return hif_state_done (state, error); }