From 9eef9100ca2ab82297685209b7fd1ea7c42b8f39 Mon Sep 17 00:00:00 2001 From: Jan Kupec Date: Fri, 14 Mar 2008 13:58:04 +0000 Subject: [PATCH] - don't offer to skip or retry in the prompt if there is only one dependency problem (bnc #369608) --- src/zypper-misc.cc | 57 ++++++++++++++++++++++++++++++++++++++-------------- src/zypper-prompt.cc | 24 ++++++++++++++-------- src/zypper-prompt.h | 12 +++++++++-- 3 files changed, 68 insertions(+), 25 deletions(-) diff --git a/src/zypper-misc.cc b/src/zypper-misc.cc index 1ef52f7..ba2bb4c 100644 --- a/src/zypper-misc.cc +++ b/src/zypper-misc.cc @@ -448,7 +448,8 @@ ostream& operator << (ostream & stm, ios::iostate state) //! @return true to retry solving now, false to cancel, indeterminate to continue static tribool show_problem (Zypper & zypper, - const ResolverProblem & prob, ProblemSolutionList & todo) + const ResolverProblem & prob, + ProblemSolutionList & todo) { ostringstream stm; string det; @@ -474,6 +475,8 @@ static tribool show_problem (Zypper & zypper, if (zypper.globalOpts().non_interactive) return false; + unsigned int problem_count = God->resolver()->problems().size(); + int reply; do { // without solutions, its useless to prompt @@ -484,18 +487,42 @@ static tribool show_problem (Zypper & zypper, } if (!zypper.globalOpts().machine_readable) - stm << _PL( - "Choose the above solution using '1' or skip, retry or cancel", - "Choose from above solutions by number or skip, retry or cancel", - solutions.size()); - - // translators: answers for dependency problem solution input prompt: - // "Choose from above solutions by number or skip, retry or cancel" - // Translate the letters to whatever is suitable for your language. - // The anserws must be separated by slash characters '/' and must - // correspond to number/skip/retry/cancel in that order. - // The answers should be lower case letters. - PromptOptions popts(_("#/s/r/c"), 3); + { + if (problem_count > 1) + stm << _PL( + "Choose the above solution using '1' or skip, retry or cancel", + "Choose from above solutions by number or skip, retry or cancel", + solutions.size()); + else + // translators: translate 'c' to whatever you translated the 'c' in + // "#/c" and "#/s/r/c" strings + stm << _PL( + "Choose the above solution using '1' or cancel using 'c'", + "Choose from above solutions by number or cancel", + solutions.size()); + } + + PromptOptions popts; + if (problem_count > 1) + { + // translators: answers for dependency problem solution input prompt: + // "Choose from above solutions by number or skip, retry or cancel" + // Translate the letters to whatever is suitable for your language. + // The anserws must be separated by slash characters '/' and must + // correspond to number/skip/retry/cancel in that order. + // The answers should be lower case letters. + popts.setOptions(_("#/s/r/c"), 3); + } + else + { + // translators: answers for dependency problem solution input prompt: + // "Choose from above solutions by number or cancel" + // Translate the letter 'c' to whatever is suitable for your language + // and the same as you translated it in the "#/s/r/c" string + // See the "#/s/r/c" comment for other details + popts.setOptions(_("#/c"), 1); + } + zypper.out().prompt(PROMPT_DEP_RESOLVE, stm.str(), popts); //string reply = get_prompt_reply(promptstr, popts); \TODO @@ -509,13 +536,13 @@ static tribool show_problem (Zypper & zypper, reply_s[0] = tolower( reply_s[0] ); // translators: corresponds to (r)etry - if (reply_s == _("r")) + if (problem_count > 1 && reply_s == _("r")) return true; // translators: corresponds to (c)ancel else if (reply_s == _("c") || reply_s.empty()) return false; // translators: corresponds to (s)kip - else if (reply_s == _("s")) + else if (problem_count > 1 && reply_s == _("s")) return indeterminate; // continue with next problem str::strtonum (reply_s, reply); diff --git a/src/zypper-prompt.cc b/src/zypper-prompt.cc index f3402e3..4ce9fc7 100644 --- a/src/zypper-prompt.cc +++ b/src/zypper-prompt.cc @@ -6,7 +6,6 @@ #include "zypp/base/Logger.h" #include "zypper.h" -//#include "zypper-main.h" #include "zypper-prompt.h" using namespace std; @@ -14,9 +13,23 @@ using namespace boost; // ---------------------------------------------------------------------------- -PromptOptions::PromptOptions(const std::string option_str, unsigned int default_opt) +PromptOptions::PromptOptions(const std::string & option_str, unsigned int default_opt) { - zypp::str::split(option_str, back_inserter(_options), "/"); + setOptions(option_str, default_opt); +} + +// ---------------------------------------------------------------------------- + +PromptOptions::~PromptOptions() +{ + +} + +// ---------------------------------------------------------------------------- + +void PromptOptions::setOptions(const std::string & option_str, unsigned int default_opt) +{ + zypp::str::split(option_str, back_inserter(_options), "/"); if (_options.size() <= default_opt) INT << "Invalid default option index " << default_opt << endl; @@ -24,11 +37,6 @@ PromptOptions::PromptOptions(const std::string option_str, unsigned int default_ _default = default_opt; } -PromptOptions::~PromptOptions() -{ - -} - // ---------------------------------------------------------------------------- //template diff --git a/src/zypper-prompt.h b/src/zypper-prompt.h index 26c89c0..a0480db 100644 --- a/src/zypper-prompt.h +++ b/src/zypper-prompt.h @@ -10,6 +10,11 @@ public: typedef std::vector OptionList; /** + * Default c-tor. + */ + PromptOptions() {}; + + /** * Constructor. * * \param option_str translated option string containing one or more @@ -17,10 +22,13 @@ public: * e.g. "yes/no/?" or "1/s/r/c" * \param default_opt index of the default answer within the \a option_str */ - PromptOptions(const std::string option_str, unsigned int default_opt); + PromptOptions(const std::string & option_str, unsigned int default_opt); + + /** D-tor */ ~PromptOptions(); - + const OptionList & options() const { return _options; } + void setOptions(const std::string & option_str, unsigned int default_opt); unsigned int defaultOpt() const { return _default; } private: -- 2.7.4