# # # patch "app_state.cc" # from [3d6e64d776d54efc6205270cfd8d3d230a7e210d] # to [71d8f1fa305acdc8ff49db838a681da748c2d5b3] # # patch "app_state.hh" # from [4c203eec2194924bdfecac20c7d537f41c8bdba7] # to [aa3e19208f8489eb3798a841ece7b81e5c6317c9] # # patch "cmd_diff_log.cc" # from [81bb5e196dfa7aae79ad193d4a102a2f635a076b] # to [645e937e6c7ea0dfb7bd061f6644a34aeaa7ce32] # # patch "cmd_files.cc" # from [667646cf1a8ae03d1c2adb7c06fc251a9534876a] # to [536e5d798fa7327c512e7059bdbf77f9060885f2] # # patch "cmd_list.cc" # from [d18d3f06a4ac66ccc6c240718ac0bb449cd16b44] # to [1ab1b4e595b63b58732e5ea9478f105010a93965] # # patch "cmd_merging.cc" # from [bd7c0320bf67c594a1dba242ce1436d660c93e30] # to [a76a66f5d2facc8be195faefc2d9b69336e4f4ef] # # patch "cmd_netsync.cc" # from [0fada4ea5f8dd1bcaca166614cd6e390df40e5cc] # to [06fd5819e0cd160b6a045d6bc022b3d408e92a8b] # # patch "cmd_ws_commit.cc" # from [91f785003e480e4ef8e9e2e8633f97c978e6cc0f] # to [64ff3e0d5fc2b1ffe0be8e435f9d44d9c038bbcd] # # patch "merge.cc" # from [50d493a68529cacffcc779ac57d463fc0269d72f] # to [ed7cf204f5dd65d8fd10e1a0f7da39707ded4aac] # # patch "monotone.cc" # from [2ea5757f8a137eba92d0abe90bb47197ac2a49f7] # to [54762c67817af2a5c66cfcb996573a5bae18af9d] # # patch "netsync.cc" # from [64c964e9185e49905604a52fa52ece8a133ea232] # to [2e81dcbccb07f21bd38a4a139a05d5c9271f3c83] # # patch "option.cc" # from [96bd4758b08c30239f0d0522ac4cd043144fe558] # to [8d0a0bdde963824d7748b1e0f9512c56987a89c9] # # patch "option_list.hh" # from [4a186928eedff411fc59791a45c4b481b0b332d4] # to [4f70f8afe3afba5be0aee26fc44a13d2a0ba51e5] # # patch "revision.cc" # from [3ded2eeca0243510616a5351f57d5fac46ae8f71] # to [7c35aac3cb803f98fc5c9cfa5aad9eedb7478792] # ============================================================ --- app_state.cc 3d6e64d776d54efc6205270cfd8d3d230a7e210d +++ app_state.cc 71d8f1fa305acdc8ff49db838a681da748c2d5b3 @@ -38,14 +38,10 @@ app_state::app_state() app_state::app_state() : db(system_path()), keys(this), work(db, lua), - date_set(false), search_root(current_root_path()), - diff_format(unified_diff), diff_args_provided(false), - diff_show_encloser(true), + diff_format(unified_diff), bind_address(""), bind_port(""), - bind_stdio(false), use_transport_auth(true), confdir(get_default_confdir()), - have_set_key_dir(false), have_set_key(false), branch_is_sticky(false) { db.set_app(this); @@ -118,7 +114,7 @@ app_state::process_options() L(FL("branch name is '%s'") % opts.branch_name); - if (!have_set_key) + if (!opts.signing_key_given) internalize_rsa_keypair_id(key_option, opts.signing_key); } @@ -133,7 +129,7 @@ app_state::write_options() if (branch_is_sticky) branch_option = opts.branch_name; - if (have_set_key) + if (opts.signing_key_given) externalize_rsa_keypair_id(opts.signing_key, key_option); work.set_ws_options(database_option, branch_option, key_option, keydir_option); @@ -193,7 +189,6 @@ app_state::set_key_dir(system_path const if (!filename.empty()) { keys.set_key_dir(filename); - have_set_key_dir = true; } } @@ -212,14 +207,6 @@ void } void -app_state::add_key_to_push(utf8 const & key) -{ - rsa_keypair_id k; - internalize_rsa_keypair_id(key, k); - keys_to_push.push_back(k); -} - -void app_state::set_root(system_path const & path) { require_path_is_directory @@ -231,75 +218,16 @@ void } void -app_state::set_date(utf8 const & d) -{ - try - { - // boost::posix_time can parse "basic" ISO times, of the form - // 20000101T120000, but not "extended" ISO times, of the form - // 2000-01-01T12:00:00. So convert one to the other. - string tmp = d(); - string::size_type pos = 0; - while ((pos = tmp.find_first_of("-:")) != string::npos) - tmp.erase(pos, 1); - date = boost::posix_time::from_iso_string(tmp); - date_set = true; - } - catch (exception &e) - { - N(false, F("failed to parse date string '%s': %s") - % d % e.what()); - } -} - -void -app_state::set_author(utf8 const & a) -{ - author = a; -} - -void -app_state::set_pidfile(system_path const & p) -{ - pidfile = p; -} - -void -app_state::add_revision(utf8 const & selector) -{ - revision_selectors.push_back(selector); -} - -void -app_state::add_exclude(utf8 const & exclude_pattern) -{ - exclude_patterns.push_back(exclude_pattern); -} - -void app_state::set_diff_format(diff_type dtype) { diff_format = dtype; } void -app_state::set_diff_args(utf8 const & args) -{ - diff_args_provided = true; - diff_args = args; -} - -void -app_state::add_rcfile(utf8 const & filename) -{ - extra_rcfiles.push_back(filename); -} - -void app_state::set_confdir(system_path const & cd) { confdir = cd; - if (!have_set_key_dir) + if (!opts.key_dir_given) keys.set_key_dir(cd / "keys"); } @@ -336,8 +264,8 @@ app_state::load_rcfiles() // Command-line rcfiles override even that. - for (vector::const_iterator i = extra_rcfiles.begin(); - i != extra_rcfiles.end(); ++i) + for (vector::const_iterator i = opts.extra_rcfiles.begin(); + i != opts.extra_rcfiles.end(); ++i) { lua.load_rcfile(*i); } ============================================================ --- app_state.hh 4c203eec2194924bdfecac20c7d537f41c8bdba7 +++ app_state.hh aa3e19208f8489eb3798a841ece7b81e5c6317c9 @@ -51,28 +51,12 @@ public: option opts; - bool date_set; - boost::posix_time::ptime date; - utf8 author; system_path search_root; - std::vector revision_selectors; - std::vector exclude_patterns; - std::vector extra_rcfiles; bool found_workspace; - system_path pidfile; diff_type diff_format; - bool diff_args_provided; - bool diff_show_encloser; - utf8 diff_args; utf8 bind_address; utf8 bind_port; - bool bind_stdio; - bool use_transport_auth; - std::vector keys_to_push; system_path confdir; - bool have_set_key_dir; - bool have_set_key; - std::set attrs_to_drop; bool branch_is_sticky; std::set explicit_options; // in set if the value of the flag was explicitly given on the command line @@ -108,23 +92,10 @@ public: void set_database(system_path const & filename); void set_key_dir(system_path const & filename); void set_root(system_path const & root); - void set_date(utf8 const & date); - void set_author(utf8 const & author); - void set_pidfile(system_path const & pidfile); - void add_revision(utf8 const & selector); - void add_exclude(utf8 const & exclude_pattern); void set_diff_format(diff_type dtype); - void set_diff_args(utf8 const & args); - void add_key_to_push(utf8 const & key); - void set_stdhooks(bool b); - void set_rcfiles(bool b); - void set_verbose(bool b); - void add_rcfile(utf8 const & filename); - void set_confdir(system_path const & cd); system_path get_confdir(); - void set_automate_stdio_size(long size); explicit app_state(); ~app_state(); ============================================================ --- cmd_diff_log.cc 81bb5e196dfa7aae79ad193d4a102a2f635a076b +++ cmd_diff_log.cc 645e937e6c7ea0dfb7bd061f6644a34aeaa7ce32 @@ -209,8 +209,8 @@ do_external_diff(cset const & cs, data_old, data_new, is_binary, - app.diff_args_provided, - app.diff_args(), + app.opts.external_diff_args_given, + app.opts.external_diff_args, delta_entry_src(i).inner()(), delta_entry_dst(i).inner()()); } @@ -250,7 +250,7 @@ dump_diffs(cset const & cs, } std::string pattern(""); - if (app.diff_show_encloser) + if (!app.opts.no_show_encloser) app.lua.hook_get_encloser_pattern(file_path(i->first), pattern); @@ -306,7 +306,7 @@ dump_diffs(cset const & cs, src_path = re->second; std::string pattern(""); - if (app.diff_show_encloser) + if (!app.opts.no_show_encloser) app.lua.hook_get_encloser_pattern(file_path(src_path), pattern); @@ -341,7 +341,7 @@ CMD(diff, N_("informative"), N_("[PATH]. ostringstream header; temp_node_id_source nis; - if (app.diff_args_provided) + if (app.opts.external_diff_args_given) N(app.diff_format == external_diff, F("--diff-args requires --external\n" "try adding --external or removing --diff-args?")); @@ -350,12 +350,12 @@ CMD(diff, N_("informative"), N_("[PATH]. // initialize before transaction so we have a database to work with. - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.require_workspace(); - else if (app.revision_selectors.size() == 1) + else if (app.opts.revision.size() == 1) app.require_workspace(); - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) { roster_t new_roster, old_roster; revision_id old_rid; @@ -364,7 +364,7 @@ CMD(diff, N_("informative"), N_("[PATH]. app.work.get_revision_id(old_rid); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -376,12 +376,12 @@ CMD(diff, N_("informative"), N_("[PATH]. new_is_archived = false; header << "# old_revision [" << old_rid << "]" << "\n"; } - else if (app.revision_selectors.size() == 1) + else if (app.opts.revision.size() == 1) { roster_t new_roster, old_roster; revision_id r_old_id; - complete(app, idx(app.revision_selectors, 0)(), r_old_id); + complete(app, idx(app.opts.revision, 0)(), r_old_id); N(app.db.revision_exists(r_old_id), F("no such revision '%s'") % r_old_id); @@ -393,7 +393,7 @@ CMD(diff, N_("informative"), N_("[PATH]. // N(r_new.edges.size() == 1, F("current revision has no ancestor")); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -405,13 +405,13 @@ CMD(diff, N_("informative"), N_("[PATH]. new_is_archived = false; header << "# old_revision [" << r_old_id << "]" << "\n"; } - else if (app.revision_selectors.size() == 2) + else if (app.opts.revision.size() == 2) { roster_t new_roster, old_roster; revision_id r_old_id, r_new_id; - complete(app, idx(app.revision_selectors, 0)(), r_old_id); - complete(app, idx(app.revision_selectors, 1)(), r_new_id); + complete(app, idx(app.opts.revision, 0)(), r_old_id); + complete(app, idx(app.opts.revision, 1)(), r_new_id); N(app.db.revision_exists(r_old_id), F("no such revision '%s'") % r_old_id); @@ -422,7 +422,7 @@ CMD(diff, N_("informative"), N_("[PATH]. app.db.get_roster(r_new_id, new_roster); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -545,27 +545,27 @@ CMD(log, N_("informative"), N_("[FILE] . &option::last % &option::next % &option::revision % &option::brief % &option::diffs % &option::no_merges % &option::no_files) { - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.require_workspace("try passing a --revision to start at"); temp_node_id_source nis; set frontier; revision_id first_rid; - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) { app.work.get_revision_id(first_rid); frontier.insert(first_rid); } else { - for (vector::const_iterator i = app.revision_selectors.begin(); - i != app.revision_selectors.end(); i++) + for (vector::const_iterator i = app.opts.revision.begin(); + i != app.opts.revision.end(); i++) { set rids; complete(app, (*i)(), rids); frontier.insert(rids.begin(), rids.end()); - if (i == app.revision_selectors.begin()) + if (i == app.opts.revision.begin()) first_rid = *rids.begin(); } } @@ -577,7 +577,7 @@ CMD(log, N_("informative"), N_("[FILE] . // User wants to trace only specific files roster_t old_roster, new_roster; - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); else app.db.get_roster(first_rid, new_roster); @@ -585,7 +585,7 @@ CMD(log, N_("informative"), N_("[FILE] . // FIXME_RESTRICTIONS: should this add paths from the rosters of // all selected revs? mask = node_restriction(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); } ============================================================ --- cmd_files.cc 667646cf1a8ae03d1c2adb7c06fc251a9534876a +++ cmd_files.cc 536e5d798fa7327c512e7059bdbf77f9060885f2 @@ -102,7 +102,7 @@ CMD(fdiff, N_("debug"), N_("SRCNAME DEST app.db.get_file_version(dst_id, dst); string pattern(""); - if (app.diff_show_encloser) + if (!app.opts.no_show_encloser) app.lua.hook_get_encloser_pattern(file_path_external(src_name), pattern); make_diff(src_name, dst_name, @@ -117,20 +117,20 @@ CMD(annotate, N_("informative"), N_("PAT { revision_id rid; - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.require_workspace(); - if ((args.size() != 1) || (app.revision_selectors.size() > 1)) + if ((args.size() != 1) || (app.opts.revision.size() > 1)) throw usage(name); file_path file = file_path_external(idx(args, 0)); split_path sp; file.split(sp); - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.work.get_revision_id(rid); else - complete(app, idx(app.revision_selectors, 0)(), rid); + complete(app, idx(app.opts.revision, 0)(), rid); N(!null_id(rid), F("no revision for file '%s' in database") % file); @@ -186,16 +186,16 @@ CMD(cat, N_("informative"), if (args.size() != 1) throw usage(name); - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.require_workspace(); transaction_guard guard(app.db, false); revision_id rid; - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) app.work.get_revision_id(rid); else - complete(app, idx(app.revision_selectors, 0)(), rid); + complete(app, idx(app.opts.revision, 0)(), rid); N(app.db.revision_exists(rid), F("no such revision '%s'") % rid); ============================================================ --- cmd_list.cc d18d3f06a4ac66ccc6c240718ac0bb449cd16b44 +++ cmd_list.cc 1ab1b4e595b63b58732e5ea9478f105010a93965 @@ -238,7 +238,7 @@ ls_branches(string name, app_state & app inc = idx(args,0); else if (args.size() > 1) throw usage(name); - combine_and_check_globish(app.exclude_patterns, exc); + combine_and_check_globish(app.opts.exclude, exc); globish_matcher match(inc, exc); vector names; app.db.get_branches(names); @@ -347,7 +347,7 @@ ls_known(app_state & app, vector c app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, new_roster, app); @@ -374,7 +374,7 @@ ls_unknown_or_ignored(app_state & app, b app.require_workspace(); vector roots = args_to_paths(args); - path_restriction mask(roots, args_to_paths(app.exclude_patterns), + path_restriction mask(roots, args_to_paths(app.opts.exclude), app.opts.depth, app); path_set unknown, ignored; @@ -401,7 +401,7 @@ ls_missing(app_state & app, vector roster_t current_roster_shape; app.work.get_current_roster_shape(current_roster_shape, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, current_roster_shape, app); @@ -429,7 +429,7 @@ ls_changed(app_state & app, vector app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); ============================================================ --- cmd_merging.cc bd7c0320bf67c594a1dba242ce1436d660c93e30 +++ cmd_merging.cc a76a66f5d2facc8be195faefc2d9b69336e4f4ef @@ -81,7 +81,7 @@ CMD(update, N_("workspace"), "", if (args.size() > 0) throw usage(name); - if (app.revision_selectors.size() > 1) + if (app.opts.revision.size() > 1) throw usage(name); app.require_workspace(); @@ -97,7 +97,7 @@ CMD(update, N_("workspace"), "", // Figure out where we're going revision_id chosen_rid; - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) { P(F("updating along branch '%s'") % app.opts.branch_name); set candidates; @@ -120,7 +120,7 @@ CMD(update, N_("workspace"), "", } else { - complete(app, app.revision_selectors[0](), chosen_rid); + complete(app, app.opts.revision[0](), chosen_rid); N(app.db.revision_exists(chosen_rid), F("no such revision '%s'") % chosen_rid); } @@ -670,9 +670,9 @@ CMD(pluck, N_("workspace"), N_("[-r FROM // Work out our arguments revision_id from_rid, to_rid; - if (app.revision_selectors.size() == 1) + if (app.opts.revision.size() == 1) { - complete(app, idx(app.revision_selectors, 0)(), to_rid); + complete(app, idx(app.opts.revision, 0)(), to_rid); N(app.db.revision_exists(to_rid), F("no such revision '%s'") % to_rid); std::set parents; @@ -685,12 +685,12 @@ CMD(pluck, N_("workspace"), N_("[-r FROM % ui.prog_name % to_rid); from_rid = *parents.begin(); } - else if (app.revision_selectors.size() == 2) + else if (app.opts.revision.size() == 2) { - complete(app, idx(app.revision_selectors, 0)(), from_rid); + complete(app, idx(app.opts.revision, 0)(), from_rid); N(app.db.revision_exists(from_rid), F("no such revision '%s'") % from_rid); - complete(app, idx(app.revision_selectors, 1)(), to_rid); + complete(app, idx(app.opts.revision, 1)(), to_rid); N(app.db.revision_exists(to_rid), F("no such revision '%s'") % to_rid); } @@ -748,7 +748,7 @@ CMD(pluck, N_("workspace"), N_("[-r FROM roster_t to_true_roster; app.db.get_roster(to_rid, to_true_roster); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, *from_roster, to_true_roster, app); make_restricted_csets(*from_roster, to_true_roster, ============================================================ --- cmd_netsync.cc 0fada4ea5f8dd1bcaca166614cd6e390df40e5cc +++ cmd_netsync.cc 06fd5819e0cd160b6a045d6bc022b3d408e92a8b @@ -55,13 +55,13 @@ process_netsync_args(string const & name } // handle include/exclude args - if (serve_mode || (args.size() >= 2 || !app.exclude_patterns.empty())) + if (serve_mode || (args.size() >= 2 || app.opts.exclude_given)) { E(serve_mode || args.size() >= 2, F("no branch pattern given")); int pattern_offset = (serve_mode ? 0 : 1); vector patterns(args.begin() + pattern_offset, args.end()); combine_and_check_globish(patterns, include_pattern); - combine_and_check_globish(app.exclude_patterns, exclude_pattern); + combine_and_check_globish(app.opts.exclude, exclude_pattern); if (use_defaults && (!app.db.var_exists(default_include_pattern_key) || app.opts.set_default)) @@ -176,14 +176,14 @@ CMD_NO_WORKSPACE(serve, N_("network"), N CMD_NO_WORKSPACE(serve, N_("network"), N_("PATTERN ..."), N_("serve the branches specified by PATTERNs to connecting clients"), &option::bind % &option::pidfile % &option::exclude % - &option::stdio % &option::no_transport_auth) + &option::bind_stdio % &option::no_transport_auth) { if (args.size() < 1) throw usage(name); - pid_file pid(app.pidfile); + pid_file pid(app.opts.pidfile); - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) { rsa_keypair_id key; get_user_key(key, app); @@ -195,7 +195,7 @@ CMD_NO_WORKSPACE(serve, N_("network"), N } else { - E(app.bind_stdio, + E(app.opts.bind_stdio, F("The --no-transport-auth option is only permitted in combination with --stdio")); } ============================================================ --- cmd_ws_commit.cc 91f785003e480e4ef8e9e2e8633f97c978e6cc0f +++ cmd_ws_commit.cc 64ff3e0d5fc2b1ffe0be8e435f9d44d9c038bbcd @@ -71,14 +71,14 @@ CMD(revert, N_("workspace"), N_("[PATH]. roster_t old_roster, new_roster; cset included, excluded; - N(app.opts.missing || !args.empty() || !app.exclude_patterns.empty(), + N(app.opts.missing || !args.empty() || !app.opts.exclude.empty(), F("you must pass at least one path to 'revert' (perhaps '.')")); app.require_workspace(); app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); - node_restriction mask(args_to_paths(args), args_to_paths(app.exclude_patterns), + node_restriction mask(args_to_paths(args), args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -251,7 +251,7 @@ CMD(add, N_("workspace"), N_("[PATH]..." if (app.opts.unknown) { vector roots = args_to_paths(args); - path_restriction mask(roots, args_to_paths(app.exclude_patterns), app.opts.depth, app); + path_restriction mask(roots, args_to_paths(app.opts.exclude), app.opts.depth, app); path_set ignored; // if no starting paths have been specified use the workspace root @@ -289,7 +289,7 @@ CMD(drop, N_("workspace"), N_("[PATH]... roster_t current_roster_shape; app.work.get_current_roster_shape(current_roster_shape, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, current_roster_shape, app); app.work.find_missing(current_roster_shape, mask, paths); @@ -367,7 +367,7 @@ CMD(status, N_("informative"), N_("[PATH app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -429,10 +429,10 @@ CMD(checkout, N_("tree"), N_("[DIRECTORY transaction_guard guard(app.db, false); - if (args.size() > 1 || app.revision_selectors.size() > 1) + if (args.size() > 1 || app.opts.revision.size() > 1) throw usage(name); - if (app.revision_selectors.size() == 0) + if (app.opts.revision.size() == 0) { // use branch head revision N(!app.opts.branch_name().empty(), @@ -452,10 +452,10 @@ CMD(checkout, N_("tree"), N_("[DIRECTORY } ident = *(heads.begin()); } - else if (app.revision_selectors.size() == 1) + else if (app.opts.revision.size() == 1) { // use specified revision - complete(app, idx(app.revision_selectors, 0)(), ident); + complete(app, idx(app.opts.revision, 0)(), ident); N(app.db.revision_exists(ident), F("no such revision '%s'") % ident); @@ -675,7 +675,7 @@ CMD(commit, N_("workspace"), N_("[PATH]. app.work.get_base_and_current_roster_shape(old_roster, new_roster, nis); node_restriction mask(args_to_paths(args), - args_to_paths(app.exclude_patterns), + args_to_paths(app.opts.exclude), app.opts.depth, old_roster, new_roster, app); @@ -837,13 +837,13 @@ CMD(commit, N_("workspace"), N_("[PATH]. dbw.consume_revision_data(restricted_rev_id, rdat); cert_revision_in_branch(restricted_rev_id, branchname, app, dbw); - if (app.date_set) - cert_revision_date_time(restricted_rev_id, app.date, app, dbw); + if (app.opts.date_given) + cert_revision_date_time(restricted_rev_id, app.opts.date, app, dbw); else cert_revision_date_now(restricted_rev_id, app, dbw); - if (app.author().length() > 0) - cert_revision_author(restricted_rev_id, app.author(), app, dbw); + if (app.opts.author_given > 0) + cert_revision_author(restricted_rev_id, app.opts.author(), app, dbw); else cert_revision_author_default(restricted_rev_id, app, dbw); ============================================================ --- merge.cc 50d493a68529cacffcc779ac57d463fc0269d72f +++ merge.cc ed7cf204f5dd65d8fd10e1a0f7da39707ded4aac @@ -197,12 +197,12 @@ store_roster_merge_result(roster_t const app.db.put_revision(merged_rid, merged_rev); packet_db_writer dbw(app); - if (app.date_set) - cert_revision_date_time(merged_rid, app.date, app, dbw); + if (app.opts.date_given) + cert_revision_date_time(merged_rid, app.opts.date, app, dbw); else cert_revision_date_now(merged_rid, app, dbw); - if (app.author().length() > 0) - cert_revision_author(merged_rid, app.author(), app, dbw); + if (app.opts.author().length() > 0) + cert_revision_author(merged_rid, app.opts.author(), app, dbw); else cert_revision_author_default(merged_rid, app, dbw); ============================================================ --- monotone.cc 2ea5757f8a137eba92d0abe90bb47197ac2a49f7 +++ monotone.cc 54762c67817af2a5c66cfcb996573a5bae18af9d @@ -258,7 +258,7 @@ cpp_main(int argc, char ** argv) port_part = ""; } } - app.bind_stdio = false; + app.opts.bind_stdio = false; app.bind_address = utf8(addr_part); app.bind_port = utf8(port_part); } ============================================================ --- netsync.cc 64c964e9185e49905604a52fa52ece8a133ea232 +++ netsync.cc 2e81dcbccb07f21bd38a4a139a05d5c9271f3c83 @@ -481,8 +481,8 @@ session::session(protocol_role role, remote_peer_key_hash(""), remote_peer_key_name(""), session_key(constants::netsync_key_initializer), - read_hmac(constants::netsync_key_initializer, app.use_transport_auth), - write_hmac(constants::netsync_key_initializer, app.use_transport_auth), + read_hmac(constants::netsync_key_initializer, !app.opts.no_transport_auth), + write_hmac(constants::netsync_key_initializer, !app.opts.no_transport_auth), authenticated(false), last_io_time(::time(NULL)), byte_in_ticker(NULL), @@ -706,7 +706,7 @@ session::set_session_key(rsa_oaep_sha_da void session::set_session_key(rsa_oaep_sha_data const & hmac_key_encrypted) { - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) { keypair our_kp; load_key_pair(app, app.opts.signing_key, our_kp); @@ -1060,7 +1060,7 @@ session::queue_hello_cmd(rsa_keypair_id id const & nonce) { rsa_pub_key pub; - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) decode_base64(pub_encoded, pub); cmd.write_hello_cmd(key_name, pub, nonce); write_netcmd_and_try_flush(cmd); @@ -1075,7 +1075,7 @@ session::queue_anonymous_cmd(protocol_ro { netcmd cmd; rsa_oaep_sha_data hmac_key_encrypted; - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) encrypt_rsa(app.lua, remote_peer_key_name, server_key_encoded, nonce2(), hmac_key_encrypted); cmd.write_anonymous_cmd(role, include_pattern, exclude_pattern, @@ -1096,7 +1096,7 @@ session::queue_auth_cmd(protocol_role ro { netcmd cmd; rsa_oaep_sha_data hmac_key_encrypted; - I(app.use_transport_auth); + I(!app.opts.no_transport_auth); encrypt_rsa(app.lua, remote_peer_key_name, server_key_encoded, nonce2(), hmac_key_encrypted); cmd.write_auth_cmd(role, include_pattern, exclude_pattern, client, @@ -1220,7 +1220,7 @@ session::process_hello_cmd(rsa_keypair_i base64 their_key_encoded; - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) { hexenc their_key_hash; encode_base64(their_key, their_key_encoded); @@ -1288,7 +1288,7 @@ session::process_hello_cmd(rsa_keypair_i setup_client_tickers(); - if (app.use_transport_auth && + if (!app.opts.no_transport_auth && app.opts.signing_key() != "") { // get our key pair @@ -1344,7 +1344,7 @@ session::process_anonymous_cmd(protocol_ // If running in no-transport-auth mode, we operate anonymously and // permit adoption of any role. - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) { if (their_role != sink_role) { @@ -1371,7 +1371,7 @@ session::process_anonymous_cmd(protocol_ { error((F("not serving branch '%s'") % *i).str()); } - else if (app.use_transport_auth && + else if (!app.opts.no_transport_auth && !app.lua.hook_get_netsync_read_permitted(*i)) { error((F("anonymous access to branch '%s' denied by server") % *i).str()); @@ -1380,7 +1380,7 @@ session::process_anonymous_cmd(protocol_ ok_branches.insert(utf8(*i)); } - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) { P(F("allowed anonymous read permission for '%s' excluding '%s'") % their_include_pattern % their_exclude_pattern); @@ -2160,7 +2160,7 @@ session::begin_service() session::begin_service() { keypair kp; - if (app.use_transport_auth) + if (!app.opts.no_transport_auth) app.keys.get_key_pair(app.opts.signing_key, kp); queue_hello_cmd(app.opts.signing_key, kp.pub, mk_nonce()); } @@ -2270,7 +2270,7 @@ build_stream_to_server(app_state & app, I(argv.size() > 0); string cmd = argv[0]; argv.erase(argv.begin()); - app.use_transport_auth = app.lua.hook_use_transport_auth(u); + app.opts.no_transport_auth = !app.lua.hook_use_transport_auth(u); return shared_ptr (new Netxx::PipeStream(cmd, argv)); @@ -3069,8 +3069,8 @@ session::rebuild_merkle_trees(app_state // Add any keys specified on the command line. for (vector::const_iterator key - = app.keys_to_push.begin(); - key != app.keys_to_push.end(); ++key) + = app.opts.key_to_push.begin(); + key != app.opts.key_to_push.end(); ++key) { if (inserted_keys.find(*key) == inserted_keys.end()) { @@ -3136,7 +3136,7 @@ run_netsync_protocol(protocol_voice voic { if (voice == server_voice) { - if (app.bind_stdio) + if (app.opts.bind_stdio) { shared_ptr str(new Netxx::PipeStream(0,1)); shared_ptr sess(new session(role, server_voice, ============================================================ --- option.cc 96bd4758b08c30239f0d0522ac4cd043144fe558 +++ option.cc 8d0a0bdde963824d7748b1e0f9512c56987a89c9 @@ -1,3 +1,6 @@ +#include +#include + #include "charset.hh" #include "file_io.hh" #include "option.hh" ============================================================ --- option_list.hh 4a186928eedff411fc59791a45c4b481b0b332d4 +++ option_list.hh 4f70f8afe3afba5be0aee26fc44a13d2a0ba51e5 @@ -5,7 +5,7 @@ GOPT(args, "", std::vector, , "") } #endif -COPT(author, "author", std::string, , +COPT(author, "author", utf8, , gettext_noop("override author for commit")) #ifdef option_bodies { @@ -65,11 +65,25 @@ COPT(context_diff, "context", bool, fals } #endif -COPT(date, "date", std::string, , +COPT(date, "date", boost::posix_time::ptime, , gettext_noop("override date/time for commit")) #ifdef option_bodies { - date = arg; + try + { + // boost::posix_time can parse "basic" ISO times, of the form + // 20000101T120000, but not "extended" ISO times, of the form + // 2000-01-01T12:00:00. So convert one to the other. + string tmp = arg; + string::size_type pos = 0; + while ((pos = tmp.find_first_of("-:")) != string::npos) + tmp.erase(pos, 1); + date = boost::posix_time::from_iso_string(tmp); + } + catch (std::exception &e) + { + throw bad_arg_internal(e.what()); + } } #endif @@ -114,11 +128,11 @@ COPT(diffs, "diffs", bool, false, gettex } #endif -COPT(drop_attr, "drop-attr", std::vector, , +COPT(drop_attr, "drop-attr", std::set, , gettext_noop("when rosterifying, drop attrs entries with the given key")) #ifdef option_bodies { - drop_attr.push_back(arg); + drop_attr.insert(arg); } #endif @@ -131,11 +145,11 @@ GOPT(dump, "dump", system_path, , } #endif -COPT(exclude, "exclude", std::vector, , +COPT(exclude, "exclude", std::vector, , gettext_noop("leave out anything described by its argument")) #ifdef option_bodies { - exclude.push_back(arg); + exclude.push_back(utf8(arg)); } #endif @@ -187,11 +201,13 @@ GOPT(key_dir, "keydir", system_path, , } #endif -COPT(key_to_push, "key-to-push", std::vector, , +COPT(key_to_push, "key-to-push", std::vector, , gettext_noop("push the specified key even if it hasn't signed anything")) #ifdef option_bodies { - key_to_push.push_back(arg); + rsa_keypair_id keyid; + internalize_rsa_keypair_id(utf8(arg), keyid); + key_to_push.push_back(keyid); } #endif @@ -314,11 +330,11 @@ GOPT(quiet, "quiet", bool, false, } #endif -GOPT(rcfile, "rcfile", std::vector, , +GOPT(extra_rcfiles, "rcfile", std::vector, , gettext_noop("load extra rc file")) #ifdef option_bodies { - rcfile.push_back(arg); + extra_rcfiles.push_back(utf8(arg)); } #endif @@ -340,7 +356,7 @@ COPT(recursive, "recursive,R", bool, fal } #endif -COPT(revision, "revision,r", std::vector, , +COPT(revision, "revision,r", std::vector, , gettext_noop("select revision id for operation")) #ifdef option_bodies { @@ -364,10 +380,10 @@ COPT(set_default, "set-default", bool, f } #endif -COPT(stdio, "stdio", bool, false, gettext_noop("serve netsync on stdio")) +COPT(bind_stdio, "stdio", bool, false, gettext_noop("serve netsync on stdio")) #ifdef option_bodies { - stdio = true; + bind_stdio = true; } #endif ============================================================ --- revision.cc 3ded2eeca0243510616a5351f57d5fac46ae8f71 +++ revision.cc 7c35aac3cb803f98fc5c9cfa5aad9eedb7478792 @@ -1434,7 +1434,7 @@ anc_graph::construct_revisions_from_ance k != fattrs.end(); ++k) { string key = k->first; - if (app.attrs_to_drop.find(key) != app.attrs_to_drop.end()) + if (app.opts.drop_attr.find(key) != app.opts.drop_attr.end()) { // ignore it }