diff options
author | Robey Pointer <robey@src.gnome.org> | 2000-09-12 05:02:56 +0000 |
---|---|---|
committer | Robey Pointer <robey@src.gnome.org> | 2000-09-12 05:02:56 +0000 |
commit | 4076157e985b907080f64ebe45800ba28c1fc726 (patch) | |
tree | ee1a1e719aebfd1ba38ea37a74d803de8c7ee56e /components | |
parent | b67c607cb6f919aa686a3db03ee47f4724f08020 (diff) | |
download | nautilus-4076157e985b907080f64ebe45800ba28c1fc726.tar.gz |
show a detailed error message when an install fails for some non-trivial reason
Diffstat (limited to 'components')
-rw-r--r-- | components/services/install-view/nautilus-service-install-view.c | 60 | ||||
-rw-r--r-- | components/services/install/nautilus-view/nautilus-service-install-view.c | 60 |
2 files changed, 104 insertions, 16 deletions
diff --git a/components/services/install-view/nautilus-service-install-view.c b/components/services/install-view/nautilus-service-install-view.c index 1beed8bcc..aa0fad978 100644 --- a/components/services/install-view/nautilus-service-install-view.c +++ b/components/services/install-view/nautilus-service-install-view.c @@ -779,29 +779,73 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti show_dialog_and_run_away (view, message); } -/* FIXME bugzilla.eazel.com 2587: need to show whole dep tree here */ +/* recursive descent of a package and its dependencies, building up a GString of errors */ +static void +dig_up_errors (const PackageData *package, GString *messages) +{ + GList *iter; + + switch (package->status) { + case PACKAGE_DEPENDENCY_FAIL: + g_string_sprintfa (messages, _("%s %s: failed dependency check\n"), package->name, package->version); + break; + case PACKAGE_CANNOT_OPEN: + g_string_sprintfa (messages, _("%s %s: couldn't find this package\n"), package->name, package->version); + break; + case PACKAGE_SOURCE_NOT_SUPPORTED: + g_string_sprintfa (messages, _("%s %s: source package (not supported)\n"), package->name, package->version); + break; + case PACKAGE_BREAKS_DEPENDENCY: + g_string_sprintfa (messages, _("%s %s: would break other dependencies\n"), package->name, package->version); + break; + case PACKAGE_FILE_CONFLICT: + g_string_sprintfa (messages, _("%s %s: conflicts with installd files\n"), package->name, package->version); + break; + case PACKAGE_ALREADY_INSTALLED: + g_string_sprintfa (messages, _("%s %s: already installed\n"), package->name, package->version); + break; + default: + break; + } + + for (iter = g_list_first (package->hard_depends); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } + for (iter = g_list_first (package->soft_depends); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } + for (iter = g_list_first (package->breaks); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } +} + static void nautilus_service_install_failed (EazelInstallCallback *cb, const PackageData *pack, NautilusServiceInstallView *view) { - char *message; + GString *message; g_assert (NAUTILUS_IS_SERVICE_INSTALL_VIEW (view)); turn_cylon_off (view, 0.0); + message = g_string_new (""); /* override the "success" result for install_done signal */ view->details->failure = TRUE; if (pack->status == PACKAGE_ALREADY_INSTALLED) { - message = _("This package has already been installed."); - show_overall_feedback (view, message); - show_dialog_and_run_away (view, message); + message = g_string_append (message, _("This package has already been installed.")); + show_overall_feedback (view, message->str); + show_dialog_and_run_away (view, message->str); + g_string_free (message, TRUE); return; } - message = _("Installation failed!\n(Probably a dependency issue.)"); - show_overall_feedback (view, message); - show_dialog_and_run_away (view, message); + g_string_sprintfa (message, _("Installation Failed!\n\n")); + show_overall_feedback (view, message->str); + + dig_up_errors (pack, message); + show_dialog_and_run_away (view, message->str); + g_string_free (message, TRUE); } diff --git a/components/services/install/nautilus-view/nautilus-service-install-view.c b/components/services/install/nautilus-view/nautilus-service-install-view.c index 1beed8bcc..aa0fad978 100644 --- a/components/services/install/nautilus-view/nautilus-service-install-view.c +++ b/components/services/install/nautilus-view/nautilus-service-install-view.c @@ -779,29 +779,73 @@ nautilus_service_install_done (EazelInstallCallback *cb, gboolean success, Nauti show_dialog_and_run_away (view, message); } -/* FIXME bugzilla.eazel.com 2587: need to show whole dep tree here */ +/* recursive descent of a package and its dependencies, building up a GString of errors */ +static void +dig_up_errors (const PackageData *package, GString *messages) +{ + GList *iter; + + switch (package->status) { + case PACKAGE_DEPENDENCY_FAIL: + g_string_sprintfa (messages, _("%s %s: failed dependency check\n"), package->name, package->version); + break; + case PACKAGE_CANNOT_OPEN: + g_string_sprintfa (messages, _("%s %s: couldn't find this package\n"), package->name, package->version); + break; + case PACKAGE_SOURCE_NOT_SUPPORTED: + g_string_sprintfa (messages, _("%s %s: source package (not supported)\n"), package->name, package->version); + break; + case PACKAGE_BREAKS_DEPENDENCY: + g_string_sprintfa (messages, _("%s %s: would break other dependencies\n"), package->name, package->version); + break; + case PACKAGE_FILE_CONFLICT: + g_string_sprintfa (messages, _("%s %s: conflicts with installd files\n"), package->name, package->version); + break; + case PACKAGE_ALREADY_INSTALLED: + g_string_sprintfa (messages, _("%s %s: already installed\n"), package->name, package->version); + break; + default: + break; + } + + for (iter = g_list_first (package->hard_depends); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } + for (iter = g_list_first (package->soft_depends); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } + for (iter = g_list_first (package->breaks); iter; iter = g_list_next (iter)) { + dig_up_errors ((PackageData *) (iter->data), messages); + } +} + static void nautilus_service_install_failed (EazelInstallCallback *cb, const PackageData *pack, NautilusServiceInstallView *view) { - char *message; + GString *message; g_assert (NAUTILUS_IS_SERVICE_INSTALL_VIEW (view)); turn_cylon_off (view, 0.0); + message = g_string_new (""); /* override the "success" result for install_done signal */ view->details->failure = TRUE; if (pack->status == PACKAGE_ALREADY_INSTALLED) { - message = _("This package has already been installed."); - show_overall_feedback (view, message); - show_dialog_and_run_away (view, message); + message = g_string_append (message, _("This package has already been installed.")); + show_overall_feedback (view, message->str); + show_dialog_and_run_away (view, message->str); + g_string_free (message, TRUE); return; } - message = _("Installation failed!\n(Probably a dependency issue.)"); - show_overall_feedback (view, message); - show_dialog_and_run_away (view, message); + g_string_sprintfa (message, _("Installation Failed!\n\n")); + show_overall_feedback (view, message->str); + + dig_up_errors (pack, message); + show_dialog_and_run_away (view, message->str); + g_string_free (message, TRUE); } |