# # # patch "cmd.cc" # from [163f99ce43db2eeb334a47f9ce797a09e69509db] # to [fefcaae628a94df6d13f1902afa42080e71d6fa2] # # patch "monotone.cc" # from [c9818e70469c5b45e9ed904803bc3d1cb4d48f5f] # to [5c66d8074caf1a08b094905c1e6530be9496b8ee] # # patch "option.cc" # from [a7ab569db1b556b73b5290540a1fb1102cb8e3e7] # to [617c3ae809ca290b34932c165822e2b57576db75] # # patch "option.hh" # from [59c63eefa82a518b4fdc17efba28e5f50a5711e2] # to [853a798c3150eef1824a73daca05d1e1cf1eb3f8] # ============================================================ --- cmd.cc 163f99ce43db2eeb334a47f9ce797a09e69509db +++ cmd.cc fefcaae628a94df6d13f1902afa42080e71d6fa2 @@ -121,8 +121,7 @@ namespace commands { = (options::opts::globals() | cmd->opts()) .instantiate(&app.opts); - optset.from_command_line(app.reset_info.default_args, - option::concrete_option_set::xargs_forbidden); + optset.from_command_line(app.reset_info.default_args); if (subcmd) { @@ -131,8 +130,7 @@ namespace commands { subcmd_defaults); (options::opts::globals() | subcmd->opts()) .instantiate(&app.opts) - .from_command_line(subcmd_defaults, - option::concrete_option_set::xargs_forbidden); + .from_command_line(subcmd_defaults); } // at this point we process the data from _MTN/options if @@ -143,8 +141,7 @@ namespace commands { workspace::get_options(app.opts); } - optset.from_command_line(app.reset_info.cmdline_args, - option::concrete_option_set::xargs_forbidden); + optset.from_command_line(app.reset_info.cmdline_args); if (subcmd) { @@ -155,8 +152,7 @@ namespace commands { if (!separate_params) { /* the first argument here is only ever modified if the second is 'true' */ - subcmd_optset.from_command_line(const_cast(subcmd_cmdline), - option::concrete_option_set::xargs_forbidden); + subcmd_optset.from_command_line(const_cast(subcmd_cmdline)); } else { ============================================================ --- monotone.cc c9818e70469c5b45e9ed904803bc3d1cb4d48f5f +++ monotone.cc 5c66d8074caf1a08b094905c1e6530be9496b8ee @@ -186,8 +186,7 @@ cpp_main(int argc, char ** argv) options::opts::all_options().instantiate(&app.opts) .from_command_line(app.reset_info.cmdline_args, - option::concrete_option_set::xargs_allowed, - option::concrete_option_set::allow_duplicates); + option::concrete_option_set::preparse); if (app.opts.version_given) { ============================================================ --- option.cc a7ab569db1b556b73b5290540a1fb1102cb8e3e7 +++ option.cc 617c3ae809ca290b34932c165822e2b57576db75 @@ -265,13 +265,12 @@ void concrete_option_set::from_command_l } void concrete_option_set::from_command_line(int argc, - char const * const * argv, - concrete_option_set::option_parse_type ty) + char const * const * argv) { args_vector arguments; for (int i = 1; i < argc; ++i) arguments.push_back(arg_type(argv[i], origin::user)); - from_command_line(arguments, xargs_allowed, ty); + from_command_line(arguments); } static concrete_option const & @@ -292,11 +291,11 @@ static void check_by_name_insertion(by_n typedef pair::iterator, bool> by_name_res_type; static void check_by_name_insertion(by_name_res_type const & res, concrete_option const & opt, - concrete_option_set::option_parse_type ty) + concrete_option_set::preparse_flag pf) { - switch (ty) + switch (pf) { - case concrete_option_set::allow_duplicates: + case concrete_option_set::preparse: if (!res.second) { string const & name = res.first->first; @@ -306,7 +305,7 @@ static void check_by_name_insertion(by_n I(i_have_arg == they_have_arg); } break; - case concrete_option_set::forbid_duplicates: + case concrete_option_set::no_preparse: I(res.second); break; } @@ -315,7 +314,7 @@ get_by_name(std::set co // generate an index that lets us look options up by name static map get_by_name(std::set const & options, - concrete_option_set::option_parse_type ty) + concrete_option_set::preparse_flag pf) { map by_name; for (std::set::const_iterator i = options.begin(); @@ -323,22 +322,21 @@ get_by_name(std::set co { if (!i->longname.empty()) check_by_name_insertion(by_name.insert(make_pair(i->longname, *i)), - *i, ty); + *i, pf); if (!i->shortname.empty()) check_by_name_insertion(by_name.insert(make_pair(i->shortname, *i)), - *i, ty); + *i, pf); if (!i->cancelname.empty()) check_by_name_insertion(by_name.insert(make_pair(i->cancelname, *i)), - *i, ty); + *i, pf); } return by_name; } void concrete_option_set::from_command_line(args_vector & args, - allow_xargs_t allow_xargs, - concrete_option_set::option_parse_type ty) + preparse_flag pf) { - map by_name = get_by_name(options, ty); + map by_name = get_by_name(options, pf); bool seen_dashdash = false; for (args_vector::size_type i = 0; i < args.size(); ++i) @@ -353,7 +351,6 @@ void concrete_option_set::from_command_l if (!seen_dashdash) { seen_dashdash = true; - allow_xargs = xargs_forbidden; continue; } name = "--"; @@ -418,7 +415,7 @@ void concrete_option_set::from_command_l is_cancel = false; } - if (allow_xargs == xargs_allowed && (name == "xargs" || name == "@")) + if (name == "xargs" || name == "@") { // expand the --xargs in place data dat; @@ -466,10 +463,9 @@ void concrete_option_set::from_command_l } } -void concrete_option_set::from_key_value_pairs(vector > const & keyvals, - concrete_option_set::option_parse_type ty) +void concrete_option_set::from_key_value_pairs(vector > const & keyvals) { - map by_name = get_by_name(options, ty); + map by_name = get_by_name(options, no_preparse); for (vector >::const_iterator i = keyvals.begin(); i != keyvals.end(); ++i) ============================================================ --- option.hh 59c63eefa82a518b4fdc17efba28e5f50a5711e2 +++ option.hh 853a798c3150eef1824a73daca05d1e1cf1eb3f8 @@ -138,18 +138,17 @@ namespace option { unsigned int & maxnamelen, bool show_hidden /*no way to see deprecated*/) const; - enum option_parse_type { forbid_duplicates, allow_duplicates }; - enum allow_xargs_t { xargs_forbidden, xargs_allowed }; + + enum preparse_flag { no_preparse, preparse }; void from_command_line(args_vector & args, - allow_xargs_t allow_xargs = xargs_allowed, - option_parse_type ty = forbid_duplicates); + preparse_flag pf = no_preparse); + // Does not allow --xargs void from_command_line(int argc, - char const * const * argv, - option_parse_type ty = forbid_duplicates); + char const * const * argv); typedef std::pair key_value_pair; typedef std::vector key_value_list; - void from_key_value_pairs(key_value_list const & keyvals, - option_parse_type ty = forbid_duplicates); + // Does not allow --xargs + void from_key_value_pairs(key_value_list const & keyvals); }; concrete_option_set operator | (concrete_option const & a, concrete_option const & b);