# # # patch "work.cc" # from [a2bea917938a4fdcd466c84766bfd74d22bce753] # to [b5001cfc082f64719006ebdf6698452d92392791] # # patch "work.hh" # from [cffcfb84ad4377b4e7bde7e4d3fca83ae063bf6b] # to [00a7a58e19597a8f34af93a8d6876c5d6a839d34] # ============================================================ --- work.cc a2bea917938a4fdcd466c84766bfd74d22bce753 +++ work.cc b5001cfc082f64719006ebdf6698452d92392791 @@ -150,10 +150,11 @@ { if (paths.empty()) return; - + temp_node_id_source nis; - roster_t base_roster, new_roster; - get_base_and_current_roster_shape(base_roster, new_roster, nis, app); + parentage parents; + roster_t new_roster; + get_parentage_and_current_roster_shape(parents, new_roster, nis, app); editable_roster_base er(new_roster, nis); @@ -171,9 +172,9 @@ // NB.: walk_tree will handle error checking for non-existent paths walk_tree(file_path(*i), build); - cset new_work; - make_cset(base_roster, new_roster, new_work); - put_work_cset(new_work); + revision_set new_work; + make_revision_set(parents, new_roster, new_work); + put_work_revision_set(new_work); update_any_attrs(app); } @@ -184,8 +185,9 @@ return; temp_node_id_source nis; - roster_t base_roster, new_roster; - get_base_and_current_roster_shape(base_roster, new_roster, nis, app); + parentage parents; + roster_t new_roster; + get_parentage_and_current_roster_shape(parents, new_roster, nis, app); // we traverse the the paths backwards, so that we always hit deep paths // before shallow paths (because path_set is lexicographically sorted). @@ -216,9 +218,9 @@ } } - cset new_work; - make_cset(base_roster, new_roster, new_work); - put_work_cset(new_work); + revision_set new_work; + make_revision_set(parents, new_roster, new_work); + put_work_revision_set(new_work); update_any_attrs(app); } @@ -243,14 +245,15 @@ app_state & app) { temp_node_id_source nis; - roster_t base_roster, new_roster; split_path dst; set srcs; set< pair > renames; I(!src_paths.empty()); - get_base_and_current_roster_shape(base_roster, new_roster, nis, app); + parentage parents; + roster_t new_roster; + get_parentage_and_current_roster_shape(parents, new_roster, nis, app); dst_path.split(dst); @@ -310,9 +313,9 @@ % file_path(i->second)); } - cset new_work; - make_cset(base_roster, new_roster, new_work); - put_work_cset(new_work); + revision_set new_work; + make_revision_set(parents, new_roster, new_work); + put_work_revision_set(new_work); if (app.execute) { @@ -386,7 +389,7 @@ } // revision file name - +/* std::string revision_file_name("revision"); static void get_revision_path(bookkeeping_path & m_path) @@ -394,7 +397,7 @@ m_path = bookkeeping_root / revision_file_name; L(FL("revision path is %s\n") % m_path); } -/* + void get_revision_id(revision_id & c) { c = revision_id(); @@ -444,15 +447,6 @@ } } -static void -get_base_roster(app_state & app, - roster_t & ros) -{ - revision_id rid; - marking_map mm; - get_base_revision(app, rid, ros, mm); -} - void get_current_roster_shape(roster_t & ros, node_id_source & nis, app_state & app) { @@ -476,26 +470,29 @@ } void -get_base_and_current_roster_shape(roster_t & base_roster, - roster_t & current_roster, - node_id_source & nis, - app_state & app) +get_parentage_and_current_roster_shape(parentage & parents, + roster_t & current_roster, + node_id_source & nis, + app_state & app) { - get_base_roster(app, base_roster); - current_roster = base_roster; - cset cs; - get_work_cset(cs); + revision_set rs; + get_workspace_parentage_and_revision(app, parents, rs); + current_roster = parents.begin()->second; editable_roster_base er(current_roster, nis); - cs.apply_to(er); + for (edge_map::const_iterator i = rs.edges.begin(); i != rs.edges.end(); ++i) + { + if (edge_old_revision(i) == parents.begin()->first) + edge_changes(i).apply_to(er); + } } void -get_base_and_current_restricted_roster(roster_t & base_roster, - roster_t & current_roster, - node_id_source & nis, - app_state & app) +get_parentage_and_current_restricted_roster(parentage & parents, + roster_t & current_roster, + node_id_source & nis, + app_state & app) { - get_base_and_current_roster_shape(base_roster, current_roster, nis, app); + get_parentage_and_current_roster_shape(parents, current_roster, nis, app); update_restricted_roster_from_filesystem(current_roster, app); } ============================================================ --- work.hh cffcfb84ad4377b4e7bde7e4d3fca83ae063bf6b +++ work.hh 00a7a58e19597a8f34af93a8d6876c5d6a839d34 @@ -93,15 +93,15 @@ // This returns the current roster, except it does not bother updating the // hashes in that roster -- the "shape" is correct, all files and dirs exist // and under the correct names -- but do not trust file content hashes. -void get_base_and_current_roster_shape(roster_t & base_roster, - roster_t & current_roster, - node_id_source & nis, - app_state & app); -// This does update hashes, but only those that match the current restriction -void get_base_and_current_restricted_roster(roster_t & base_roster, +void get_parentage_and_current_roster_shape(parentage & parents, roster_t & current_roster, node_id_source & nis, app_state & app); +// This does update hashes, but only those that match the current restriction +void get_parentage_and_current_restricted_roster(parentage & parents, + roster_t & current_roster, + node_id_source & nis, + app_state & app); // the "user log" is a file the user can edit as they program to record // changes they make to their source code. Upon commit the file is read