# # # patch "ChangeLog" # from [003210864a935dfc9f39c045e07ebbfae858b7bc] # to [0719eadebfa458dc485581a2795d4b03d973df1a] # # patch "commands.cc" # from [64041989e13816d8ab269738b0ab7c4f6b815e6e] # to [29c43713f565770fd21459ccccfe3144545ff75c] # # patch "schema_migration.cc" # from [e0ca70123a16255c8c258676648fdf7d36161cbb] # to [a71586b6868e2ce649aa1b09c2a565997035da9c] # # patch "tests/t_revert_restrict.at" # from [65eb2a485e893c21a9043e08e6c62e116cd4571d] # to [2adc434743c0816d8a34b0b3dd7507da5a37f184] # # patch "ui.cc" # from [f8e554cfd366a72a9d6b1c8b1d9fd1e0c1c29c72] # to [b88a6344e7fc8bed1ca5b3a7ed0eef9d54015efe] # ============================================================ --- ChangeLog 003210864a935dfc9f39c045e07ebbfae858b7bc +++ ChangeLog 0719eadebfa458dc485581a2795d4b03d973df1a @@ -50,6 +50,27 @@ * HACKING, tests/README: Remove references to use of SEGV for terminating monotone servers. +2005-12-13 Timothy Brownawell + + * constants.cc: New netsync is incompatible, bump protocol version. + * constants.hh: Change default port to the one IANA assigned us. + +2005-12-10 Timothy Brownawell + + * roster.cc (make_roster_for_merge): unshadow the node_id_source + argument. Resolve usages to the argument or the local by educated guess. + +2005-12-10 Timothy Brownawell + + * paths.{cc,hh}: operator<() for split_path's + +2005-12-10 Timothy Brownawell + + * sanity.{cc,hh}: Fix musing dumps so that the header line always gets + printed, even if printing the body throws an exception. + * database.cc, packet,cc, revision.cc: sprinkle MMs + * cset.cc: sanity check print_cset to match parse_cset + 2005-12-08 Matthew Gregan * po/pt_BR.po: Add missing newline. @@ -159,27 +180,6 @@ unit_tests objects, not for libs. * pch.hh: define __STDC_CONSTANT_MACROS as required for UINT32_C. -2005-12-13 Timothy Brownawell - - * constants.cc: New netsync is incompatible, bump protocol version. - * constants.hh: Change default port to the one IANA assigned us. - -2005-12-10 Timothy Brownawell - - * roster.cc (make_roster_for_merge): unshadow the node_id_source - argument. Resolve usages to the argument or the local by educated guess. - -2005-12-10 Timothy Brownawell - - * paths.{cc,hh}: operator<() for split_path's - -2005-12-10 Timothy Brownawell - - * sanity.{cc,hh}: Fix musing dumps so that the header line always gets - printed, even if printing the body throws an exception. - * database.cc, packet,cc, revision.cc: sprinkle MMs - * cset.cc: sanity check print_cset to match parse_cset - 2005-11-28 Nathaniel Smith * txt2c.cc (main): Work correctly even on empty files. ============================================================ --- commands.cc 64041989e13816d8ab269738b0ab7c4f6b815e6e +++ commands.cc 29c43713f565770fd21459ccccfe3144545ff75c @@ -2538,7 +2538,7 @@ app_state & app, bool new_is_archived, diff_type type, - file_path restrict_file = file_path()) + set restrict_paths = set()) { // 60 is somewhat arbitrary, but less than 80 std::string patch_sep = std::string(60, '='); @@ -2547,6 +2547,10 @@ i = cs.files_added.begin(); i != cs.files_added.end(); ++i) { + if (!restrict_paths.empty() + && restrict_paths.find(i->first) == restrict_paths.end()) + continue; + cout << patch_sep << "\n"; data unpacked; vector lines; @@ -2595,6 +2599,10 @@ i = cs.deltas_applied.begin(); i != cs.deltas_applied.end(); ++i) { + if (!restrict_paths.empty() + && restrict_paths.find(i->first) == restrict_paths.end()) + continue; + file_data f_old; data data_old, data_new; vector old_lines, new_lines; @@ -3241,7 +3249,7 @@ cset work, included_work, excluded_work; path_set old_paths; - if (args.size() < 1) + if (args.size() < 1 && !app.missing) throw usage(name); app.require_working_copy(); @@ -3309,7 +3317,7 @@ continue; } - L(F("reverting %s to [%s]\n") % fp % f->content); + P(F("reverting %s to [%s]\n") % fp % f->content); N(app.db.file_version_exists(f->content), F("no file version %s found in database for %s") @@ -3626,7 +3634,23 @@ for (edge_map::const_iterator e = rev.edges.begin(); e != rev.edges.end(); ++e) { - dump_diffs(edge_changes(e), app, true, unified_diff); + // limit to selected nodes + set node_names; + if (!nodes.empty()) + { + roster_t ros; + app.db.get_roster(rid, ros); + + for (set::const_iterator n = nodes.begin(); + n != nodes.end(); n++) + { + split_path sp; + ros.get_name(*n, sp); + node_names.insert(sp); + } + } + dump_diffs(edge_changes(e), app, true, unified_diff, + node_names); } } ============================================================ --- schema_migration.cc e0ca70123a16255c8c258676648fdf7d36161cbb +++ schema_migration.cc a71586b6868e2ce649aa1b09c2a565997035da9c @@ -864,44 +864,44 @@ { int res; - res = sqlite3_exec(sql, - "CREATE TABLE rosters\n" - "(\n" - "id primary key, -- strong hash of the roster\n" - "data not null -- compressed, encoded contents of the roster\n" - ");", - NULL, NULL, errmsg); + res = logged_sqlite3_exec(sql, + "CREATE TABLE rosters\n" + "(\n" + "id primary key, -- strong hash of the roster\n" + "data not null -- compressed, encoded contents of the roster\n" + ");", + NULL, NULL, errmsg); if (res != SQLITE_OK) return false; - res = sqlite3_exec(sql, - "CREATE TABLE roster_deltas\n" - "(\n" - "id not null, -- strong hash of the roster\n" - "base not null, -- joins with either rosters.id or roster_deltas.id\n" - "delta not null, -- rdiff to construct current from base\n" - "unique(id, base)\n" - ");", - NULL, NULL, errmsg); + res = logged_sqlite3_exec(sql, + "CREATE TABLE roster_deltas\n" + "(\n" + "id not null, -- strong hash of the roster\n" + "base not null, -- joins with either rosters.id or roster_deltas.id\n" + "delta not null, -- rdiff to construct current from base\n" + "unique(id, base)\n" + ");", + NULL, NULL, errmsg); if (res != SQLITE_OK) return false; - res = sqlite3_exec(sql, - "CREATE TABLE revision_roster\n" - "(\n" - "rev_id primary key, -- joins with revisions.id\n" - "roster_id not null -- joins with either rosters.id or roster_deltas.id\n" - ");", - NULL, NULL, errmsg); + res = logged_sqlite3_exec(sql, + "CREATE TABLE revision_roster\n" + "(\n" + "rev_id primary key, -- joins with revisions.id\n" + "roster_id not null -- joins with either rosters.id or roster_deltas.id\n" + ");", + NULL, NULL, errmsg); if (res != SQLITE_OK) return false; - res = sqlite3_exec(sql, - "CREATE TABLE next_roster_node_number\n" - "(\n" - "node primary key -- only one entry in this table, ever\n" - ");", - NULL, NULL, errmsg); + res = logged_sqlite3_exec(sql, + "CREATE TABLE next_roster_node_number\n" + "(\n" + "node primary key -- only one entry in this table, ever\n" + ");", + NULL, NULL, errmsg); if (res != SQLITE_OK) return false; ============================================================ --- tests/t_revert_restrict.at 65eb2a485e893c21a9043e08e6c62e116cd4571d +++ tests/t_revert_restrict.at 2adc434743c0816d8a34b0b3dd7507da5a37f184 @@ -62,7 +62,7 @@ AT_CHECK(cp modified2 file.ignore) AT_CHECK(rm file2) -AT_CHECK(MONOTONE --rcfile=ignore_hook.lua revert . --missing --debug, [], [ignore], [ignore]) +AT_CHECK(MONOTONE --rcfile=ignore_hook.lua revert --missing --debug, [], [ignore], [ignore]) AT_CHECK(cmp testfile modified1, [0], [ignore], [ignore]) AT_CHECK(cmp file.ignore modified2, [0], [ignore], [ignore]) @@ -76,7 +76,7 @@ AT_CHECK(cp orig.ignore file.ignore) AT_CHECK(cp orig2 file2) -AT_CHECK(MONOTONE --rcfile=ignore_hook.lua revert . --missing --debug, [], [ignore], [ignore]) +AT_CHECK(MONOTONE --rcfile=ignore_hook.lua revert --missing --debug, [], [ignore], [ignore]) AT_CHECK(cmp testfile modified1, [0], [ignore], [ignore]) AT_CHECK(cmp file.ignore orig.ignore, [0], [ignore], [ignore]) ============================================================ --- ui.cc f8e554cfd366a72a9d6b1c8b1d9fd1e0c1c29c72 +++ ui.cc b88a6344e7fc8bed1ca5b3a7ed0eef9d54015efe @@ -172,8 +172,8 @@ write_tickline1 = true; } - // Always reissue the counts, with a \r to clear. - string tickline2 = "\rmonotone: "; + // Always reissue the counts. + string tickline2 = "monotone: "; for (size_t i = 0; i < tick_widths.size(); ++i) { if (i != 0)