From 4fe80ae0261c81a5742ad98d33b12525dcd4266e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Kupec?= Date: Thu, 28 Jan 2010 19:01:29 +0100 Subject: [PATCH] Reset abort request flag on retry. - also watch the flag in download progress handler --- src/Zypper.h | 2 +- src/callbacks/media.cc | 20 ++++++++++++++++---- src/callbacks/media.h | 14 ++++++++++++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/Zypper.h b/src/Zypper.h index 39d361d..fdfc7cb 100644 --- a/src/Zypper.h +++ b/src/Zypper.h @@ -183,7 +183,7 @@ public: bool runningShell() const { return _running_shell; } bool runningHelp() const { return _running_help; } bool exitRequested() const { return _exit_requested; } - void requestExit() { _exit_requested = true; } + void requestExit(bool do_exit = true) { _exit_requested = do_exit; } int argc() { return _running_shell ? _sh_argc : _argc; } char ** argv() { return _running_shell ? _sh_argv : _argv; } diff --git a/src/callbacks/media.cc b/src/callbacks/media.cc index b7a41ee..2188fb7 100644 --- a/src/callbacks/media.cc +++ b/src/callbacks/media.cc @@ -215,18 +215,27 @@ ZmartRecipients::MediaChangeReportReceiver::requestMedia( _("Please insert medium [%s] #%d and type 'y' to continue or 'n' to cancel the operation.")) % label % mediumNr); if (read_bool_answer(PROMPT_YN_MEDIA_CHANGE, request, false)) + { + zypper.requestExit(false); return MediaChangeReport::RETRY; + } else return MediaChangeReport::ABORT; } if (error == MediaChangeReport::IO_SOFT) { - MediaChangeReport::Action action = MediaChangeReport::RETRY; + MediaChangeReport::Action default_action = MediaChangeReport::RETRY; if (repeat_counter.counter_overrun(url)) - action = MediaChangeReport::ABORT; - return (Action) read_action_ari_with_timeout(PROMPT_ARI_MEDIA_PROBLEM, - 30,action); + default_action = MediaChangeReport::ABORT; + + MediaChangeReport::Action action = (Action) read_action_ari_with_timeout( + PROMPT_ARI_MEDIA_PROBLEM, 30, default_action); + + if (action == MediaChangeReport::RETRY) + zypper.requestExit(false); + + return action; } Action action = MediaChangeReport::ABORT; @@ -256,5 +265,8 @@ ZmartRecipients::MediaChangeReportReceiver::requestMedia( && !zypper.runtimeData().seen_verify_hint) print_verify_hint(Zypper::instance()->out()); + if (action == MediaChangeReport::RETRY) + zypper.requestExit(false); + return action; } diff --git a/src/callbacks/media.h b/src/callbacks/media.h index b3a439f..26028f1 100644 --- a/src/callbacks/media.h +++ b/src/callbacks/media.h @@ -110,6 +110,13 @@ namespace ZmartRecipients return true; Zypper & zypper = *(Zypper::instance()); + + if (zypper.exitRequested()) + { + DBG << "received exit request" << std::endl; + return false; + } + if (!zypper.runtimeData().raw_refresh_progress_label.empty()) zypper.out().progress( "raw-refresh", zypper.runtimeData().raw_refresh_progress_label); @@ -122,7 +129,6 @@ namespace ZmartRecipients return true; } - // not used anywhere in libzypp 3.20.0 (really) virtual DownloadProgressReport::Action problem( const zypp::Url & uri, DownloadProgressReport::Error error, const std::string & description ) { @@ -131,7 +137,11 @@ namespace ZmartRecipients Zypper::instance()->out().dwnldProgressEnd(uri, _last_drate_avg, true); Zypper::instance()->out().error(zcb_error2str(error, description)); - return (Action) read_action_ari(PROMPT_ARI_MEDIA_PROBLEM, DownloadProgressReport::ABORT); + Action action = (Action) read_action_ari( + PROMPT_ARI_MEDIA_PROBLEM, DownloadProgressReport::ABORT); + if (action == DownloadProgressReport::RETRY) + Zypper::instance()->requestExit(false); + return action; } // used only to finish, errors will be reported in media change callback (libzypp 3.20.0) -- 2.7.4