Author: jkupec Date: Sun Apr 13 22:29:54 2008 New Revision: 9594 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9594&view=rev Log: - allow white space when specifying version with operators in install/remove commands (fate #302919) Modified: trunk/zypper/src/zypper-misc.cc Modified: trunk/zypper/src/zypper-misc.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/zypper/src/zypper-misc.cc?rev=9594&r1=9593&r2=9594&view=diff ============================================================================== --- trunk/zypper/src/zypper-misc.cc (original) +++ trunk/zypper/src/zypper-misc.cc Sun Apr 13 22:29:54 2008 @@ -400,11 +400,60 @@ // ---------------------------------------------------------------------------- +// join arguments at comparison operators ('=', '>=', and the like) +static void +install_remove_preprocess_args(const Zypper::ArgList & args, + Zypper::ArgList & argsnew) +{ + Zypper::ArgList::size_type argc = args.size(); + argsnew.reserve(argc); + string tmp; + // preprocess the arguments + for(Zypper::ArgList::size_type i = 0, lastnew = 0; i < argc; ++i) + { + tmp = args[i]; + if (i + && (tmp == "=" || tmp == "==" || tmp == "<" + || tmp == ">" || tmp == "<=" || tmp == ">=") + && i < argc - 1) + { + argsnew[lastnew-1] += tmp + args[++i]; + continue; + } + else if (tmp.find_last_of("=<>") == tmp.size() - 1 && i < argc - 1) + { + argsnew.push_back(tmp + args[++i]); + ++lastnew; + } + else if (i && tmp.find_first_of("=<>") == 0) + { + argsnew[lastnew-1] += tmp; + ++i; + } + else + { + argsnew.push_back(tmp); + ++lastnew; + } + } + + DBG << "old: "; + copy(args.begin(), args.end(), ostream_iterator<string>(DBG, " ")); + DBG << endl << "new: "; + copy(argsnew.begin(), argsnew.end(), ostream_iterator<string>(DBG, " ")); + DBG << endl; +} + +// ---------------------------------------------------------------------------- + void install_remove(Zypper & zypper, const Zypper::ArgList & args, bool install_not_remove, const ResKind & kind) { + if (args.empty()) + return; + bool by_capability = false; // TODO bool force_by_capability = zypper.cOpts().count("capability"); bool force_by_name = zypper.cOpts().count("name"); @@ -428,7 +477,10 @@ ZYPP_THROW(ExitRequestException()); } - for_(it, args.begin(), args.end()) + Zypper::ArgList argsnew; + install_remove_preprocess_args(args, argsnew); + + for_(it, argsnew.begin(), argsnew.end()) { string str = *it; -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org