# # # patch "NEWS" # from [e393f36663d768fa1481555c9066e67ebf741341] # to [3d88b7e4160e3f0d6499e24aa0dcef0cdf96e96c] # # patch "cmd_db.cc" # from [1b303b05481975f1179e6a0ee2b7245722fc85be] # to [b9c8fe26e048399f25a33677971bce98682d9146] # # patch "cmd_diff_log.cc" # from [740ad3ddb276b0d5a902287a4375ad4ad8a9ff1e] # to [37b1cfffa001ccc5b813fe6f0e84dc6a5dc3996e] # # patch "cmd_key_cert.cc" # from [2c7e684267b1e4fc095f800170c8d71e464ad51d] # to [4f67608a826cf01297dd297ad9aaf5a18c85a82a] # # patch "cmd_merging.cc" # from [0863da85d59d73a4d604b155d6bcb360f557a1d1] # to [0bef934b86c12babe6845d04b5e9fbfcf9114182] # # patch "cmd_netsync.cc" # from [962aeb6b15df6f5cea78cb7d7f569f4f93ef8259] # to [e70435eb00dcd606984f40ca8b4a53996985fc72] # # patch "cmd_ws_commit.cc" # from [786606ead8e18ec1354eedff05c7eef954f660ae] # to [8f12395a73d4c2fbd19e4eac883b719e581d0ae7] # # patch "options_list.hh" # from [bc318ee8e2ee4717aee0aee2b8a549c617fc6c76] # to [521e90001833b8023276b7cedd0ed4b3253c1fd4] # # patch "project.cc" # from [68daf9b3cbd648b9a84b3f6333340d0abea93d02] # to [b2475c129db63d4170d577cd7e1ca90437b41410] # # patch "project.hh" # from [e62f10cec3dee378d94ae1527f2355e3115d03cb] # to [072a2c57396fafe3102d3c1478f2914ade2fa08e] # # patch "selectors.cc" # from [dc24e327b618b136be7d9c10781759afe08ce1b8] # to [952f8becd5473558a75ceff46a93feb310756908] # # patch "selectors.hh" # from [43c5060c6c0d55fe8e57e8f07e1a71dc0d99bbc6] # to [8f23c72c0901a492c75f483b8c2c4316251b31ed] # ============================================================ --- NEWS e393f36663d768fa1481555c9066e67ebf741341 +++ NEWS 3d88b7e4160e3f0d6499e24aa0dcef0cdf96e96c @@ -25,6 +25,9 @@ XXX XXX XX XX:XX:XX UTC 2010 long dates, '%X' for short and long times (currently unused) and '%x %X' for short and long date times. + - The options '--date-format' and '--no-format-dates' are no longer + specific to the 'log' command, but can now be used globally. + New features - Added portuguese translation (thanks to Américo Monteiro) @@ -40,6 +43,9 @@ XXX XXX XX XX:XX:XX UTC 2010 - The annotation of 'annotate' is now localized. + - The various occurrences where a revision is described by its + certs now come with proper localized date output. + Other - Roster handling has been sped up significantly, and roster cache ============================================================ --- cmd_db.cc 1b303b05481975f1179e6a0ee2b7245722fc85be +++ cmd_db.cc b9c8fe26e048399f25a33677971bce98682d9146 @@ -426,7 +426,7 @@ CMD(complete, "complete", "", CMD_REF(in i != completions.end(); ++i) { if (!verbose) cout << *i << '\n'; - else cout << describe_revision(project, *i) << '\n'; + else cout << describe_revision(app.opts, app.lua, project, *i) << '\n'; } } else if (idx(args, 0)() == "file") ============================================================ --- cmd_diff_log.cc 740ad3ddb276b0d5a902287a4375ad4ad8a9ff1e +++ cmd_diff_log.cc 37b1cfffa001ccc5b813fe6f0e84dc6a5dc3996e @@ -735,7 +735,6 @@ CMD(log, "log", "", CMD_REF(informative) options::opts::last | options::opts::next | options::opts::from | options::opts::to | options::opts::revision | options::opts::brief | options::opts::diffs | - options::opts::format_dates | options::opts::date_fmt | options::opts::depth | options::opts::exclude | options::opts::no_merges | options::opts::no_files | options::opts::no_graph) ============================================================ --- cmd_key_cert.cc 2c7e684267b1e4fc095f800170c8d71e464ad51d +++ cmd_key_cert.cc 4f67608a826cf01297dd297ad9aaf5a18c85a82a @@ -219,7 +219,7 @@ CMD(trusted, "trusted", "", CMD_REF(key_ set rids; expand_selector(app.opts, app.lua, project, idx(args, 0)(), rids); - diagnose_ambiguous_expansion(project, idx(args, 0)(), rids); + diagnose_ambiguous_expansion(app.opts, app.lua, project, idx(args, 0)(), rids); revision_id ident; if (!rids.empty()) ============================================================ --- cmd_merging.cc 0863da85d59d73a4d604b155d6bcb360f557a1d1 +++ cmd_merging.cc 0bef934b86c12babe6845d04b5e9fbfcf9114182 @@ -228,7 +228,7 @@ CMD(update, "update", "", CMD_REF(worksp for (set::const_iterator i = candidates.begin(); i != candidates.end(); ++i) P(i18n_format(" %s") - % describe_revision(project, *i)); + % describe_revision(app.opts, app.lua, project, *i)); P(F("choose one with '%s update -r'") % prog_name); E(false, origin::user, F("multiple update candidates remain after selection")); @@ -1398,7 +1398,7 @@ CMD(heads, "heads", "", CMD_REF(tree), " for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) - cout << describe_revision(project, *i) << '\n'; + cout << describe_revision(app.opts, app.lua, project, *i) << '\n'; } CMD(get_roster, "get_roster", "", CMD_REF(debug), N_("[REVID]"), ============================================================ --- cmd_netsync.cc 962aeb6b15df6f5cea78cb7d7f569f4f93ef8259 +++ cmd_netsync.cc e70435eb00dcd606984f40ca8b4a53996985fc72 @@ -749,7 +749,7 @@ CMD(clone, "clone", "", CMD_REF(network) P(F("branch %s has multiple heads:") % branchname); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(project, *i)); + % describe_revision(app.opts, app.lua, project, *i)); P(F("choose one with '%s clone -r SERVER BRANCH'") % prog_name); E(false, origin::user, F("branch %s has multiple heads") % branchname); } ============================================================ --- cmd_ws_commit.cc 786606ead8e18ec1354eedff05c7eef954f660ae +++ cmd_ws_commit.cc 8f12395a73d4c2fbd19e4eac883b719e581d0ae7 @@ -44,7 +44,7 @@ static void using boost::shared_ptr; static void -revision_summary(revision_t const & rev, branch_name const & branch, +revision_summary(revision_t const & rev, branch_name const & branch, set const & old_branch_names, utf8 & summary) { @@ -689,7 +689,7 @@ CMD(checkout, "checkout", "co", CMD_REF( P(F("branch %s has multiple heads:") % app.opts.branch); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(project, *i)); + % describe_revision(app.opts, app.lua, project, *i)); P(F("choose one with '%s checkout -r'") % prog_name); E(false, origin::user, F("branch %s has multiple heads") % app.opts.branch); @@ -1442,7 +1442,7 @@ CMD_NO_WORKSPACE(import, "import", "", C P(F("branch %s has multiple heads:") % app.opts.branch); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(project, *i)); + % describe_revision(app.opts, app.lua, project, *i)); P(F("choose one with '%s import -r'") % prog_name); E(false, origin::user, F("branch %s has multiple heads") % app.opts.branch); @@ -1560,7 +1560,7 @@ CMD(reset, "reset", "", CMD_REF(bisect), work.get_parent_rosters(db, parents); E(parents.size() == 1, origin::user, F("this command can only be used in a single-parent workspace")); - + revision_id current_id = parent_id(*parents.begin()); temp_node_id_source nis; @@ -1575,7 +1575,7 @@ CMD(reset, "reset", "", CMD_REF(bisect), I(start.first == bisect::start); revision_id starting_id = start.second; - P(F("reset back to %s") % describe_revision(project, starting_id)); + P(F("reset back to %s") % describe_revision(app.opts, app.lua, project, starting_id)); roster_t starting_roster; db.get_roster(starting_id, starting_roster); @@ -1600,7 +1600,8 @@ static void } static void -bisect_select(project_t & project, +bisect_select(options const & opts, lua_hooks & lua, + project_t & project, vector const & info, revision_id const & current_id, revision_id & selected_id) @@ -1608,7 +1609,7 @@ bisect_select(project_t & project, graph_loader loader(project.db); set good, bad, skipped; - E(!info.empty(), origin::user, + E(!info.empty(), origin::user, F("no bisection in progress")); for (vector::const_iterator i = info.begin(); @@ -1665,7 +1666,7 @@ bisect_select(project_t & project, set good_descendants(good), bad_ancestors(bad); loader.load_descendants(good_descendants); loader.load_ancestors(bad_ancestors); - + set search; set_intersection(good_descendants.begin(), good_descendants.end(), bad_ancestors.begin(), bad_ancestors.end(), @@ -1728,7 +1729,7 @@ bisect_select(project_t & project, revision_id first_bad = *bad_sorted.begin(); P(F("bisection finished at revision %s") - % describe_revision(project, first_bad)); + % describe_revision(opts, lua, project, first_bad)); // if the workspace is not already at the ending revision return it as // the selected revision so that an update back to this revision @@ -1745,7 +1746,7 @@ bisect_select(project_t & project, vector candidates; toposort(project.db, remaining, candidates); - selected_id = candidates[candidates.size()/2]; + selected_id = candidates[candidates.size()/2]; } std::ostream & @@ -1821,7 +1822,7 @@ bisect_update(app_state & app, bisect::t { info.push_back(make_pair(bisect::start, current_id)); P(F("bisection started at revision %s") - % describe_revision(project, current_id)); + % describe_revision(app.opts, app.lua, project, current_id)); } if (type != bisect::update) @@ -1841,7 +1842,7 @@ bisect_update(app_state & app, bisect::t marked_ids.erase(i->second); } else - E(false, origin::user, F("conflicting bisect %s/%s on revision %s") + E(false, origin::user, F("conflicting bisect %s/%s on revision %s") % type % i->first % i->second); } } @@ -1850,16 +1851,16 @@ bisect_update(app_state & app, bisect::t for (set::const_iterator i = marked_ids.begin(); i != marked_ids.end(); ++i) info.push_back(make_pair(type, *i)); - + work.put_bisect_info(info); } revision_id selected_id; - bisect_select(project, info, current_id, selected_id); + bisect_select(app.opts, app.lua, project, info, current_id, selected_id); if (null_id(selected_id)) return; - P(F("updating to %s") % describe_revision(project, selected_id)); + P(F("updating to %s") % describe_revision(app.opts, app.lua, project, selected_id)); roster_t selected_roster; db.get_roster(selected_id, selected_roster); @@ -1909,7 +1910,7 @@ CMD(bisect_status, "status", "", CMD_REF work.get_bisect_info(info); revision_id selected_id; - bisect_select(project, info, current_id, selected_id); + bisect_select(app.opts, app.lua, project, info, current_id, selected_id); if (current_id != selected_id) { ============================================================ --- options_list.hh bc318ee8e2ee4717aee0aee2b8a549c617fc6c76 +++ options_list.hh 521e90001833b8023276b7cedd0ed4b3253c1fd4 @@ -211,7 +211,7 @@ OPT(date, "date", date_t, , } #endif -OPT(date_fmt, "date-format", std::string, , +GOPT(date_fmt, "date-format", std::string, , gettext_noop("strftime(3) format specification for printing dates")) #ifdef option_bodies { @@ -219,7 +219,7 @@ OPT(date_fmt, "date-format", std::string } #endif -OPT(format_dates, "no-format-dates", bool, true, +GOPT(format_dates, "no-format-dates", bool, true, gettext_noop("print date certs exactly as stored in the database")) #ifdef option_bodies { ============================================================ --- project.cc 68daf9b3cbd648b9a84b3f6333340d0abea93d02 +++ project.cc b2475c129db63d4170d577cd7e1ca90437b41410 @@ -689,7 +689,8 @@ string // These should maybe be converted to member functions. string -describe_revision(project_t & project, revision_id const & id) +describe_revision(options const & opts, lua_hooks & lua, + project_t & project, revision_id const & id) { cert_name author_name(author_cert_name); cert_name date_name(date_cert_name); @@ -698,6 +699,15 @@ describe_revision(project_t & project, r description += encode_hexenc(id.inner()(), id.inner().made_from); + string date_fmt; + if (opts.format_dates) + { + if (!opts.date_fmt.empty()) + date_fmt = opts.date_fmt; + else + lua.hook_get_date_format_spec(date_time_short, date_fmt); + } + // append authors and date of this revision vector certs; project.get_revision_certs(id, certs); @@ -714,7 +724,7 @@ describe_revision(project_t & project, r else if (i->name == date_cert_name) { dates += " "; - dates += i->value(); + dates += date_t(i->value()).as_formatted_localtime(date_fmt); } } ============================================================ --- project.hh e62f10cec3dee378d94ae1527f2355e3115d03cb +++ project.hh 072a2c57396fafe3102d3c1478f2914ade2fa08e @@ -188,7 +188,8 @@ std::string }; std::string -describe_revision(project_t & project, revision_id const & id); +describe_revision(options const & opts, lua_hooks & lua, + project_t & project, revision_id const & id); void notify_if_multiple_heads(project_t & project, branch_name const & branchname, ============================================================ --- selectors.cc dc24e327b618b136be7d9c10781759afe08ce1b8 +++ selectors.cc 952f8becd5473558a75ceff46a93feb310756908 @@ -200,7 +200,7 @@ decode_selector(options const & opts, lu parent_ids.insert(i->first); } - diagnose_ambiguous_expansion(project, "p:", parent_ids); + diagnose_ambiguous_expansion(opts, lua, project, "p:", parent_ids); sel = encode_hexenc((* parent_ids.begin()).inner()(), origin::internal); } @@ -464,7 +464,7 @@ complete(options const & opts, lua_hooks complete(opts, lua, project, str, completions); I(!completions.empty()); - diagnose_ambiguous_expansion(project, str, completions); + diagnose_ambiguous_expansion(opts, lua, project, str, completions); completion = *completions.begin(); } @@ -493,7 +493,8 @@ void } void -diagnose_ambiguous_expansion(project_t & project, +diagnose_ambiguous_expansion(options const & opts, lua_hooks & lua, + project_t & project, string const & str, set const & completions) { @@ -504,7 +505,7 @@ diagnose_ambiguous_expansion(project_t & % str).str(); for (set::const_iterator i = completions.begin(); i != completions.end(); ++i) - err += ("\n" + describe_revision(project, *i)); + err += ("\n" + describe_revision(opts, lua, project, *i)); E(false, origin::user, i18n_format(err)); } ============================================================ --- selectors.hh 43c5060c6c0d55fe8e57e8f07e1a71dc0d99bbc6 +++ selectors.hh 8f23c72c0901a492c75f483b8c2c4316251b31ed @@ -40,8 +40,8 @@ void expand_selector(options const & opt project_t & project, std::string const & str, std::set & completions); -void diagnose_ambiguous_expansion(project_t & project, std::string const & str, - std::set const & completions); +void diagnose_ambiguous_expansion(options const & opts, lua_hooks & lua, project_t & project, + std::string const & str, std::set const & completions); #endif // __SELECTORS_HH__