# # # patch "cmd.hh" # from [211fa6d55aa18f33f2040f1e655b5a6803d0d44b] # to [08f1cf48c648d5c1963e32971d73b53b54b9486a] # # patch "cmd_automate.cc" # from [5544e0c25fd22d3181ea5c3d45913e4206078404] # to [69e50cb544de0f7503a23595ce7ee6b696ef4913] # # patch "cmd_db.cc" # from [3a960d8829125e7b89c899ad72251e1bf89d5a3a] # to [8f22eb0807bc554d247bfa4f57ae80468133e43d] # # patch "cmd_files.cc" # from [9b70ba030e4f2499515a97c75ff1dbcea865a48d] # to [ac1dc5fda3f5323e7b5c1a6b0446a50c66336fd2] # # patch "cmd_key_cert.cc" # from [546d3ac7ff4d2c398bc839ae9425812648cbd515] # to [99d48e6e7a7716bded2d67533c946b516db972ac] # # patch "cmd_list.cc" # from [00f9e275978144bbeaf6fcc27995040e2ac8be28] # to [0061f36029425ffd1ad0d58016cb38a9742bc380] # # patch "cmd_merging.cc" # from [fc388e33f7aa9c0dcb9b9705fd38de5c981d2957] # to [8ec636955b9cdaee7c43a28b984a3d1c1cdfe2b5] # # patch "cmd_netsync.cc" # from [28f0fa9ab7ca55b385bfa8d270d66d88e6639e10] # to [e5e2ce383a6e9d7fa9148682443c7a81da66b3c0] # # patch "cmd_othervcs.cc" # from [d7a05a30ca623880f4a6ec54a95e9ebb7d9a43f8] # to [fb12125d16db52e0ac197b97686ad2c7a6bdb47a] # # patch "cmd_packet.cc" # from [8c51013b109d8819152e70697e431ed1d901acdd] # to [67418301746163151fd844c9c4d80a57f9310049] # # patch "cmd_ws_commit.cc" # from [a7cad6c252610590c16fb485f7e649ce923bdf6d] # to [05e0c296e0a16d6804116a627699636044276a26] # # patch "commands.cc" # from [8c56069bd84d00ceeb78734337c2accf713baf07] # to [8eeaceb818e213c1faeb66508a7d5406a2601d19] # # patch "commands.hh" # from [972f42a94e23b582ed476d3c03e71ec963245382] # to [5a82219ddcb3102278635ea3e41ff00dfc64b478] # # patch "monotone.cc" # from [1fbe846cf7073f9679be1c4c8bd00e67402053a0] # to [3cee3701a32bae5c9842613601b83b5935fec357] # # patch "revision.cc" # from [eb1e5ead3c8bb99f24f8e9b07bd9cae05886d9f5] # to [61e9ab7efb8f5bf36815c4c2bd04077fe38bb97b] # ============================================================ --- cmd.hh 211fa6d55aa18f33f2040f1e655b5a6803d0d44b +++ cmd.hh 08f1cf48c648d5c1963e32971d73b53b54b9486a @@ -198,7 +198,7 @@ void commands::cmd_ ## C::exec(app_state args_vector const & args) \ { \ if (args.size() == 0) \ - throw usage(name); \ + throw usage(ident()); \ \ args_vector::const_iterator i = args.begin(); \ ++i; \ @@ -206,7 +206,7 @@ void commands::cmd_ ## C::exec(app_state /* XXX Command completion... */ \ /*command * child = find_command(this, idx(args, 0)()); \ if (child == NULL) \ - throw usage(name); \ + throw usage(ident()); \ else \ child->exec(app, idx(args, 0)(), removed); */ \ } ============================================================ --- cmd_automate.cc 5544e0c25fd22d3181ea5c3d45913e4206078404 +++ cmd_automate.cc 69e50cb544de0f7503a23595ce7ee6b696ef4913 @@ -47,7 +47,7 @@ find_automation(arg_type const & name, s map::const_iterator i = automation::automations->find(name()); if (i == automation::automations->end()) - throw usage(root_cmd_name); + throw usage(commands::command_id()); // XXX root_cmd_name else return *(i->second); } @@ -383,7 +383,7 @@ CMD_WITH_SUBCMDS(automate, "", CMD_REF(a options::opts::none) { if (args.size() == 0) - throw usage(name); + throw usage(ident()); args_vector::const_iterator i = args.begin(); arg_type cmd = *i; ============================================================ --- cmd_db.cc 3a960d8829125e7b89c899ad72251e1bf89d5a3a +++ cmd_db.cc 8f22eb0807bc554d247bfa4f57ae80468133e43d @@ -89,7 +89,7 @@ CMD(db, "", CMD_REF(database), else if (idx(args, 0)() == "regenerate_caches") regenerate_caches(app); else - throw usage(name); + throw usage(ident()); } else if (args.size() == 2) { @@ -104,7 +104,7 @@ CMD(db, "", CMD_REF(database), else if (idx(args, 0)() == "kill_tag_locally") app.db.delete_tag_named(cert_value(idx(args, 1)())); else - throw usage(name); + throw usage(ident()); } else if (args.size() == 3) { @@ -117,10 +117,10 @@ CMD(db, "", CMD_REF(database), app.db.set_epoch(branch_name(idx(args, 1)()), ed); } else - throw usage(name); + throw usage(ident()); } else - throw usage(name); + throw usage(ident()); } CMD(set, "", CMD_REF(variables), N_("DOMAIN NAME VALUE"), @@ -131,7 +131,7 @@ CMD(set, "", CMD_REF(variables), N_("DOM options::opts::none) { if (args.size() != 3) - throw usage(name); + throw usage(ident()); var_domain d; var_name n; @@ -149,7 +149,7 @@ CMD(unset, "", CMD_REF(variables), N_("D options::opts::none) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); var_domain d; var_name n; @@ -167,7 +167,7 @@ CMD(complete, "", CMD_REF(informative), options::opts::verbose) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); bool verbose = app.opts.verbose; @@ -207,7 +207,7 @@ CMD(complete, "", CMD_REF(informative), } } else - throw usage(name); + throw usage(ident()); } CMD(test_migration_step, "", CMD_REF(hidden), "SCHEMA", @@ -217,7 +217,7 @@ CMD(test_migration_step, "", CMD_REF(hid options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); app.db.test_migration_step(idx(args,0)()); } ============================================================ --- cmd_files.cc 9b70ba030e4f2499515a97c75ff1dbcea865a48d +++ cmd_files.cc ac1dc5fda3f5323e7b5c1a6b0446a50c66336fd2 @@ -50,7 +50,7 @@ CMD(fmerge, "", CMD_REF(debug), N_(" 1)) - throw usage(name); + throw usage(ident()); file_path file = file_path_external(idx(args, 0)); split_path sp; @@ -196,7 +196,7 @@ CMD(identify, "", CMD_REF(debug), N_("[P options::opts::none) { if (!(args.size() == 0 || args.size() == 1)) - throw usage(name); + throw usage(ident()); data dat; @@ -261,7 +261,7 @@ CMD(cat, "", CMD_REF(informative), options::opts::revision) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); revision_id rid; if (app.opts.revision_selectors.size() == 0) ============================================================ --- cmd_key_cert.cc 546d3ac7ff4d2c398bc839ae9425812648cbd515 +++ cmd_key_cert.cc 99d48e6e7a7716bded2d67533c946b516db972ac @@ -35,7 +35,7 @@ CMD(genkey, "", CMD_REF(key_and_cert), N options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id ident; internalize_rsa_keypair_id(idx(args, 0), ident); @@ -65,7 +65,7 @@ CMD(dropkey, "", CMD_REF(key_and_cert), bool key_deleted = false; if (args.size() != 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id ident(idx(args, 0)()); bool checked_db = false; @@ -105,7 +105,7 @@ CMD(passphrase, "", CMD_REF(key_and_cert options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id ident; internalize_rsa_keypair_id(idx(args, 0), ident); @@ -128,7 +128,7 @@ CMD(ssh_agent_export, "", CMD_REF(key_an options::opts::none) { if (args.size() > 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id id; keypair key; @@ -167,7 +167,7 @@ CMD(ssh_agent_add, "", CMD_REF(key_and_c options::opts::none) { if (args.size() > 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id id; keypair key; @@ -184,7 +184,7 @@ CMD(cert, "", CMD_REF(key_and_cert), N_( options::opts::none) { if ((args.size() != 3) && (args.size() != 2)) - throw usage(name); + throw usage(ident()); transaction_guard guard(app.db); @@ -218,7 +218,7 @@ CMD(trusted, "", CMD_REF(key_and_cert), options::opts::none) { if (args.size() < 4) - throw usage(name); + throw usage(ident()); revision_id rid; complete(app, idx(args, 0)(), rid, false); @@ -265,7 +265,7 @@ CMD(tag, "", CMD_REF(review), N_("REVISI options::opts::none) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); revision_id r; complete(app, idx(args, 0)(), r); @@ -279,7 +279,7 @@ CMD(testresult, "", CMD_REF(review), N_( options::opts::none) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); revision_id r; complete(app, idx(args, 0)(), r); @@ -293,7 +293,7 @@ CMD(approve, "", CMD_REF(review), N_("RE options::opts::branch) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); revision_id r; complete(app, idx(args, 0)(), r); @@ -308,7 +308,7 @@ CMD(comment, "", CMD_REF(review), N_("RE options::opts::none) { if (args.size() != 1 && args.size() != 2) - throw usage(name); + throw usage(ident()); utf8 comment; if (args.size() == 2) ============================================================ --- cmd_list.cc 00f9e275978144bbeaf6fcc27995040e2ac8be28 +++ cmd_list.cc 0061f36029425ffd1ad0d58016cb38a9742bc380 @@ -53,7 +53,7 @@ CMD(certs, "", CMD_REF(list), "ID", options::opts::depth | options::opts::exclude) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); vector certs; @@ -161,7 +161,7 @@ CMD(keys, "", CMD_REF(list), "[PATTERN]" if (args.size() == 1) pattern = idx(args, 0)(); else if (args.size() > 1) - throw usage(name); + throw usage(ident()); if (app.db.database_specified()) { @@ -254,7 +254,7 @@ CMD(branches, "", CMD_REF(list), "[PATTE if (args.size() == 1) inc = globish(idx(args,0)()); else if (args.size() > 1) - throw usage(name); + throw usage(ident()); vector excludes; typecast_vocab_container(app.opts.exclude_patterns, excludes); combine_and_check_globish(excludes, exc); @@ -335,7 +335,7 @@ CMD(vars, "", CMD_REF(list), "[DOMAIN]", internalize_var_domain(idx(args, 0), filter); } else - throw usage(name); + throw usage(ident()); map vars; app.db.get_vars(vars); ============================================================ --- cmd_merging.cc fc388e33f7aa9c0dcb9b9705fd38de5c981d2957 +++ cmd_merging.cc 8ec636955b9cdaee7c43a28b984a3d1c1cdfe2b5 @@ -135,10 +135,10 @@ CMD(update, "", CMD_REF(workspace), "", options::opts::branch | options::opts::revision) { if (args.size() > 0) - throw usage(name); + throw usage(ident()); if (app.opts.revision_selectors.size() > 1) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -338,7 +338,7 @@ CMD(merge, "", CMD_REF(tree), "", typedef set::const_iterator rid_set_iter; if (args.size() != 0) - throw usage(name); + throw usage(ident()); N(app.opts.branchname() != "", F("please specify a branch, with --branch=BRANCH")); @@ -436,7 +436,7 @@ CMD(propagate, "", CMD_REF(tree), N_("SO options::opts::date | options::opts::author | options::opts::message | options::opts::msgfile) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); args_vector a = args; a.push_back(arg_type()); process(app, "merge_into_dir", a); @@ -477,7 +477,7 @@ CMD(merge_into_dir, "", CMD_REF(tree), N set src_heads, dst_heads; if (args.size() != 3) - throw usage(name); + throw usage(ident()); app.get_project().get_branch_heads(branch_name(idx(args, 0)()), src_heads); app.get_project().get_branch_heads(branch_name(idx(args, 1)()), dst_heads); @@ -614,7 +614,7 @@ CMD(merge_into_workspace, "", CMD_REF(tr roster_t working_roster; if (args.size() != 1) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -704,7 +704,7 @@ CMD(explicit_merge, "", CMD_REF(tree), branch_name branch; if (args.size() != 3) - throw usage(name); + throw usage(ident()); complete(app, idx(args, 0)(), left); complete(app, idx(args, 1)(), right); @@ -727,7 +727,7 @@ CMD(show_conflicts, "", CMD_REF(informat options::opts::branch | options::opts::date | options::opts::author) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); revision_id l_id, r_id; complete(app, idx(args,0)(), l_id); complete(app, idx(args,1)(), r_id); @@ -803,7 +803,7 @@ CMD(pluck, "", CMD_REF(workspace), N_("[ F("no such revision '%s'") % to_rid); } else - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -936,7 +936,7 @@ CMD(heads, "", CMD_REF(tree), "", { set heads; if (args.size() != 0) - throw usage(name); + throw usage(ident()); N(app.opts.branchname() != "", F("please specify a branch, with --branch=BRANCH")); @@ -1018,7 +1018,7 @@ CMD(get_roster, "", CMD_REF(debug), N_(" app.db.get_roster(rid, roster, mm); } else - throw usage(name); + throw usage(ident()); roster_data dat; write_roster_and_marking(roster, mm, dat); ============================================================ --- cmd_netsync.cc 28f0fa9ab7ca55b385bfa8d270d66d88e6639e10 +++ cmd_netsync.cc e5e2ce383a6e9d7fa9148682443c7a81da66b3c0 @@ -208,7 +208,7 @@ CMD(clone, "", CMD_REF(network), N_("ADD options::opts::exclude | options::opts::branch | options::opts::revision) { if (args.size() < 1 || args.size() > 2 || app.opts.revision_selectors.size() > 1) - throw usage(name); + throw usage(ident()); revision_id ident; system_path workspace_dir; @@ -394,7 +394,7 @@ CMD_NO_WORKSPACE(serve, "", CMD_REF(netw options::opts::bind_stdio | options::opts::no_transport_auth) { if (!args.empty()) - throw usage(name); + throw usage(ident()); pid_file pid(app.opts.pidfile); ============================================================ --- cmd_othervcs.cc d7a05a30ca623880f4a6ec54a95e9ebb7d9a43f8 +++ cmd_othervcs.cc fb12125d16db52e0ac197b97686ad2c7a6bdb47a @@ -20,7 +20,7 @@ CMD(rcs_import, "", CMD_REF(debug), N_(" options::opts::branch) { if (args.size() < 1) - throw usage(name); + throw usage(ident()); for (args_vector::const_iterator i = args.begin(); i != args.end(); ++i) @@ -36,7 +36,7 @@ CMD(cvs_import, "", CMD_REF(rcs), N_("CV options::opts::branch) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); import_cvs_repo(system_path(idx(args, 0)()), app); } ============================================================ --- cmd_packet.cc 8c51013b109d8819152e70697e431ed1d901acdd +++ cmd_packet.cc 67418301746163151fd844c9c4d80a57f9310049 @@ -25,7 +25,7 @@ CMD(pubkey, "", CMD_REF(packet_io), N_(" options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id ident(idx(args, 0)()); bool exists(false); @@ -55,7 +55,7 @@ CMD(privkey, "", CMD_REF(packet_io), N_( options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); rsa_keypair_id ident(idx(args, 0)()); N(app.keys.key_pair_exists(ident), ============================================================ --- cmd_ws_commit.cc a7cad6c252610590c16fb485f7e649ce923bdf6d +++ cmd_ws_commit.cc 05e0c296e0a16d6804116a627699636044276a26 @@ -217,7 +217,7 @@ CMD(disapprove, "", CMD_REF(review), N_( options::opts::author) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); utf8 log_message(""); bool log_message_given; @@ -270,7 +270,7 @@ CMD(mkdir, "", CMD_REF(workspace), N_("[ options::opts::no_ignore) { if (args.size() < 1) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -316,7 +316,7 @@ CMD(add, "", CMD_REF(workspace), N_("[PA options::opts::recursive) { if (!app.opts.unknown && (args.size() < 1)) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -349,7 +349,7 @@ CMD(drop, "rm", CMD_REF(workspace), N_(" options::opts::bookkeep_only | options::opts::missing | options::opts::recursive) { if (!app.opts.missing && (args.size() < 1)) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -380,7 +380,7 @@ CMD(rename, "mv", CMD_REF(workspace), options::opts::bookkeep_only) { if (args.size() < 2) - throw usage(name); + throw usage(ident()); app.require_workspace(); @@ -407,7 +407,7 @@ CMD(pivot_root, "", CMD_REF(workspace), options::opts::bookkeep_only) { if (args.size() != 2) - throw usage(name); + throw usage(ident()); app.require_workspace(); file_path new_root = file_path_external(idx(args, 0)); @@ -496,13 +496,13 @@ CMD(checkout, "co", CMD_REF(tree), N_("[ "If no directory is given, the branch name will be used as directory."), options::opts::branch | options::opts::revision) { - revision_id ident; + revision_id revid; system_path dir; transaction_guard guard(app.db, false); if (args.size() > 1 || app.opts.revision_selectors.size() > 1) - throw usage(name); + throw usage(ident()); if (app.opts.revision_selectors.size() == 0) { @@ -522,22 +522,22 @@ CMD(checkout, "co", CMD_REF(tree), N_("[ P(F("choose one with '%s checkout -r'") % ui.prog_name); E(false, F("branch %s has multiple heads") % app.opts.branchname); } - ident = *(heads.begin()); + revid = *(heads.begin()); } else if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app, idx(app.opts.revision_selectors, 0)(), ident); - N(app.db.revision_exists(ident), - F("no such revision '%s'") % ident); + complete(app, idx(app.opts.revision_selectors, 0)(), revid); + N(app.db.revision_exists(revid), + F("no such revision '%s'") % revid); - guess_branch(ident, app); + guess_branch(revid, app); I(!app.opts.branchname().empty()); - N(app.get_project().revision_is_in_branch(ident, app.opts.branchname), + N(app.get_project().revision_is_in_branch(revid, app.opts.branchname), F("revision %s is not a member of branch %s") - % ident % app.opts.branchname); + % revid % app.opts.branchname); } // we do this part of the checking down here, because it is legitimate to @@ -574,11 +574,11 @@ CMD(checkout, "co", CMD_REF(tree), N_("[ shared_ptr empty_roster = shared_ptr(new roster_t()); roster_t current_roster; - L(FL("checking out revision %s to directory %s") % ident % dir); - app.db.get_roster(ident, current_roster); + L(FL("checking out revision %s to directory %s") % revid % dir); + app.db.get_roster(revid, current_roster); revision_t workrev; - make_revision_for_workspace(ident, cset(), workrev); + make_revision_for_workspace(revid, cset(), workrev); app.work.put_work_rev(workrev); cset checkout; @@ -603,7 +603,7 @@ CMD(attr, "", CMD_REF(workspace), options::opts::none) { if (args.size() < 2 || args.size() > 4) - throw usage(name); + throw usage(ident()); roster_t new_roster; temp_node_id_source nis; @@ -624,7 +624,7 @@ CMD(attr, "", CMD_REF(workspace), if (subcmd == "set") { if (args.size() != 4) - throw usage(name); + throw usage(ident()); attr_key a_key = attr_key(idx(args, 2)()); attr_value a_value = attr_value(idx(args, 3)()); @@ -649,7 +649,7 @@ CMD(attr, "", CMD_REF(workspace), node->attrs[a_key] = make_pair(false, ""); } else - throw usage(name); + throw usage(ident()); } parent_map parents; @@ -690,10 +690,10 @@ CMD(attr, "", CMD_REF(workspace), % a_key % path) << '\n'; } else - throw usage(name); + throw usage(ident()); } else - throw usage(name); + throw usage(ident()); } @@ -951,7 +951,7 @@ CMD_NO_WORKSPACE(setup, "", CMD_REF(tree options::opts::branch) { if (args.size() > 1) - throw usage(name); + throw usage(ident()); N(!app.opts.branchname().empty(), F("need --branch argument for setup")); app.db.ensure_open(); @@ -1076,7 +1076,7 @@ CMD_NO_WORKSPACE(migrate_workspace, "", options::opts::none) { if (args.size() > 1) - throw usage(name); + throw usage(ident()); if (args.size() == 1) go_to_workspace(system_path(idx(args, 0))); ============================================================ --- commands.cc 8c56069bd84d00ceeb78734337c2accf713baf07 +++ commands.cc 8eeaceb818e213c1faeb66508a7d5406a2601d19 @@ -671,7 +671,7 @@ CMD(help, "", CMD_REF(informative), N_(" if (args.size() < 1) { app.opts.help = true; - throw usage(""); + throw usage(command_id()); } /* @@ -710,7 +710,7 @@ CMD(crash, "", CMD_REF(hidden), "{ N | E options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); bool spoon_exists(false); if (idx(args,0)() == "N") N(spoon_exists, i18n_format("There is no spoon.")); @@ -753,7 +753,7 @@ CMD(crash, "", CMD_REF(hidden), "{ N | E { // fall through and throw usage } #endif - throw usage(name); + throw usage(ident()); } #undef maybe_throw #undef maybe_throw_bare ============================================================ --- commands.hh 972f42a94e23b582ed476d3c03e71ec963245382 +++ commands.hh 5a82219ddcb3102278635ea3e41ff00dfc64b478 @@ -20,12 +20,6 @@ class utf8; // possibly from the command line and possibly internal scripting if we ever // bind tcl or lua or something in here -struct usage -{ - usage(std::string const & w) : which(w) {} - std::string which; -}; - namespace commands { typedef std::vector< utf8 > command_id; @@ -38,6 +32,12 @@ namespace commands { options::options_type toplevel_command_options(std::string const & cmd); }; +struct usage +{ + usage(commands::command_id const & w) : which(w) {} + commands::command_id which; +}; + // Local Variables: // mode: C++ // fill-column: 76 ============================================================ --- monotone.cc 1fbe846cf7073f9679be1c4c8bd00e67402053a0 +++ monotone.cc 3cee3701a32bae5c9842613601b83b5935fec357 @@ -244,7 +244,7 @@ cpp_main(int argc, char ** argv) // stop here if they asked for help if (app.opts.help) { - throw usage(cmdstr); // cmd may be empty, and that's fine. + throw usage(cmd); } // at this point we allow a workspace (meaning search for it @@ -264,7 +264,7 @@ cpp_main(int argc, char ** argv) // sub-command w/ remaining args if (cmd.empty()) { - throw usage(""); + throw usage(commands::command_id()); } else { @@ -286,6 +286,7 @@ cpp_main(int argc, char ** argv) usage_stream << F("Usage: %s [OPTION...] command [ARG...]") % ui.prog_name << "\n\n"; usage_stream << options::opts::globals().instantiate(&app.opts).get_usage_str() << '\n'; +/* XXX // Make sure to hide documentation that's not part of // the current command. options::options_type cmd_options = commands::toplevel_command_options(u.which); @@ -296,6 +297,7 @@ cpp_main(int argc, char ** argv) } commands::explain_usage(u.which, usage_stream); + */ if (app.opts.help) return 0; else ============================================================ --- revision.cc eb1e5ead3c8bb99f24f8e9b07bd9cae05886d9f5 +++ revision.cc 61e9ab7efb8f5bf36815c4c2bd04077fe38bb97b @@ -1779,7 +1779,7 @@ CMD(rev_height, "", CMD_REF(hidden), N_( options::opts::none) { if (args.size() != 1) - throw usage(name); + throw usage(ident()); revision_id rid(idx(args, 0)()); N(app.db.revision_exists(rid), F("No such revision %s") % rid); rev_height height;