# # # add_file "tests/merge_into_workspace/expected-log" # content [cb589fc6f67d67c443e6c1b1116fcd730cfb1b53] # # add_file "tests/merge_into_workspace/expected-log-left" # content [9f34a749db3abfbd4881d4561a6e93874c036bf2] # # patch "ChangeLog" # from [5c091db4822c0b8ec06883e592b668a9d2364c0f] # to [61b3a165a8c986fe988942d7b789841431fadfe3] # # patch "cmd_diff_log.cc" # from [769806240271dce3dc01c5af4e55d74821a2ef6d] # to [322b4dd501b77931cac0b88538d8b51a10cf43a9] # # patch "tests/merge_into_workspace/__driver__.lua" # from [1680cb1faf5f0e35319899e71c47cb28e020219b] # to [b93febaa340d15cdc537090dd1b9411f5946e58e] # ============================================================ --- tests/merge_into_workspace/expected-log cb589fc6f67d67c443e6c1b1116fcd730cfb1b53 +++ tests/merge_into_workspace/expected-log cb589fc6f67d67c443e6c1b1116fcd730cfb1b53 @@ -0,0 +1,46 @@ +----------------------------------------------------------------- +Revision: 0eb47cecdd459bb5a1017dc787cf014ae3fcdfb9 +Ancestor: deb1d49035983e4785ddba48904924a5307d59eb +Author: address@hidden +Date: 2007-02-09T18:50:42 +Branch: testbranch + +Modified files: + testfile + +ChangeLog: + +blah-blah + +----------------------------------------------------------------- +Revision: e9e23d2764be2b4e8d1b7350f5ab5c6b34901669 +Ancestor: deb1d49035983e4785ddba48904924a5307d59eb +Author: address@hidden +Date: 2007-02-09T18:50:41 +Branch: testbranch + +Modified files: + testfile + +ChangeLog: + +blah-blah + +----------------------------------------------------------------- +Revision: deb1d49035983e4785ddba48904924a5307d59eb +Ancestor: +Author: address@hidden +Date: 2007-02-09T18:50:41 +Branch: testbranch + +Added files: + otherfile testfile +Added directories: + +Modified attrs: + otherfile testfile + +ChangeLog: + +blah-blah + ============================================================ --- tests/merge_into_workspace/expected-log-left 9f34a749db3abfbd4881d4561a6e93874c036bf2 +++ tests/merge_into_workspace/expected-log-left 9f34a749db3abfbd4881d4561a6e93874c036bf2 @@ -0,0 +1,32 @@ +----------------------------------------------------------------- +Revision: e9e23d2764be2b4e8d1b7350f5ab5c6b34901669 +Ancestor: deb1d49035983e4785ddba48904924a5307d59eb +Author: address@hidden +Date: 2007-02-09T19:14:43 +Branch: testbranch + +Modified files: + testfile + +ChangeLog: + +blah-blah + +----------------------------------------------------------------- +Revision: deb1d49035983e4785ddba48904924a5307d59eb +Ancestor: +Author: address@hidden +Date: 2007-02-09T19:14:42 +Branch: testbranch + +Added files: + otherfile testfile +Added directories: + +Modified attrs: + otherfile testfile + +ChangeLog: + +blah-blah + ============================================================ --- ChangeLog 5c091db4822c0b8ec06883e592b668a9d2364c0f +++ ChangeLog 61b3a165a8c986fe988942d7b789841431fadfe3 @@ -1,5 +1,8 @@ 2007-02-09 Zack Weinberg + * cmd_files.cc (log): Work in a two-parent workspace. + * tests/merge_into_workspace: Augment with tests for log. + * cmd_files.cc (annotate): Handle multi-parent workspaces gracefully. Add lengthy comment about why multi-parent annotate doesn't work. * tests/two_parent_workspace_annotate: New xfailed test. ============================================================ --- cmd_diff_log.cc 769806240271dce3dc01c5af4e55d74821a2ef6d +++ cmd_diff_log.cc 322b4dd501b77931cac0b88538d8b51a10cf43a9 @@ -626,10 +626,15 @@ CMD(log, N_("informative"), N_("[FILE] . if (app.opts.from.size() == 0) { - app.work.get_revision_id(first_rid); - rev_height height; - app.db.get_rev_height(first_rid, height); - frontier.push(make_pair(height, first_rid)); + revision_t rev; + app.work.get_work_rev(rev); + for (edge_map::const_iterator i = rev.edges.begin(); + i != rev.edges.end(); i++) + { + rev_height height; + app.db.get_rev_height(edge_old_revision(i), height); + frontier.push(make_pair(height, edge_old_revision(i))); + } } else { @@ -655,23 +660,30 @@ CMD(log, N_("informative"), N_("[FILE] . if (args.size() > 0) { // User wants to trace only specific files - roster_t old_roster, new_roster; - if (app.opts.from.size() == 0) { + roster_t new_roster; + parent_map parents; temp_node_id_source nis; - app.work.get_base_and_current_roster_shape(old_roster, - new_roster, nis); + + app.work.get_parent_rosters(parents); + app.work.get_current_roster_shape(new_roster, nis); + + mask = node_restriction(args_to_paths(args), + args_to_paths(app.opts.exclude_patterns), + app.opts.depth, parents, new_roster, app); } else - app.db.get_roster(first_rid, new_roster); + { + // FIXME_RESTRICTIONS: should this add paths from the rosters of + // all selected revs? + roster_t roster; + app.db.get_roster(first_rid, roster); - // FIXME_RESTRICTIONS: should this add paths from the rosters of - // all selected revs? - mask = node_restriction(args_to_paths(args), - args_to_paths(app.opts.exclude_patterns), - app.opts.depth, - old_roster, new_roster, app); + mask = node_restriction(args_to_paths(args), + args_to_paths(app.opts.exclude_patterns), + app.opts.depth, roster, app); + } } // If --to was given, don't log past those revisions. ============================================================ --- tests/merge_into_workspace/__driver__.lua 1680cb1faf5f0e35319899e71c47cb28e020219b +++ tests/merge_into_workspace/__driver__.lua b93febaa340d15cdc537090dd1b9411f5946e58e @@ -1,6 +1,21 @@ -- this is very similar to the explicit_merge test, except that the -- result of the merge winds up in the current workspace. +function samefile_ignore_dates(a, b) + local atxt = readfile(a):gsub("\nDate: [^\n]*\n", "\nDate: *****\n") + local btxt = readfile(b):gsub("\nDate: [^\n]*\n", "\nDate: *****\n") + if atxt == btxt then + return true + else + writefile_q("sfid-a.txt", atxt) + writefile_q("sfid-b.txt", btxt) + local ok,pid = runcmd({"diff","-u","sfid-a.txt","sfid-b.txt"}, "sfid-") + if not ok then err(pid,2) end + log_file_contents("sfid-stdout") + return false + end +end + mtn_setup() check(get("testfile")) @@ -64,6 +79,16 @@ check(mtn("automate", "get_manifest_of") check(get("expected-manifest")) check(mtn("automate", "get_manifest_of"), 0, {"expected-manifest"}, nil) +-- log should do sensible things +check(get("expected-log")) +check(get("expected-log-left")) + +check(mtn("log", "testfile"), 0, true, nil) +check(samefile_ignore_dates("stdout", "expected-log")) + +check(mtn("log", "--from", left), 0, true, nil) +check(samefile_ignore_dates("stdout", "expected-log-left")) + -- a commit at this point should succeed commit() merged = base_revision()