# # patch "ChangeLog" # from [94df1b3806f6020b5ab486f8e77d0d0789c4c489] # to [99443bcc3c4c5e98a1ba170b4ecc5c2f558091c3] # # patch "change_set.cc" # from [62f13b93026c2ca5cae82595101f98f4fbb05d8e] # to [2d1bd3032cf730ae58836127e0b11a0719acba10] # # patch "pcdv.cc" # from [52ca638a980086603d40838ebb861e892a5ff7f3] # to [987bf0dfb85f1e2d26e1e22e85f3f0f9bfd73658] # ======================================================================== --- ChangeLog 94df1b3806f6020b5ab486f8e77d0d0789c4c489 +++ ChangeLog 99443bcc3c4c5e98a1ba170b4ecc5c2f558091c3 @@ -1,5 +1,10 @@ 2005-08-20 Timothy Brownawell + * change_set.cc: use versioned scalars to track file edits + * pcdv.cc (tree_state::current_scalars): bugfix + +2005-08-20 Timothy Brownawell + * pcdv.{cc,hh} (tree merger): each file now gets a versioned scalar 2005-08-19 Timothy Brownawell ======================================================================== --- change_set.cc 62f13b93026c2ca5cae82595101f98f4fbb05d8e +++ change_set.cc 2d1bd3032cf730ae58836127e0b11a0719acba10 @@ -1892,6 +1892,8 @@ typedef std::multimap::iterator gi; typedef std::map > >::iterator ai; + interner itx; + // process history std::multimap graph, rgraph; app.db.get_revision_ancestry(graph); @@ -1942,6 +1944,7 @@ std::vector treevec; std::vector revec; MM(revec); + std::map sc; for (edge_map::const_iterator i = rs.edges.begin(); i != rs.edges.end(); ++i) { @@ -1957,11 +1960,19 @@ } treevec.push_back(from); revec.push_back(edge_changes(i).rearrangement); + for (change_set::delta_map::const_iterator + j = edge_changes(i).deltas.begin(); + j != edge_changes(i).deltas.end(); ++j) + { + sc.insert(make_pair(delta_entry_path(j), + itx.intern(delta_entry_dst(j).inner()()))); + } } - tree_state newtree(tree_state::merge_with_rearrangement(treevec, revec, - roots.front().inner()())); + tree_state newtree1(tree_state::merge_with_rearrangement(treevec, revec, + roots.front().inner()())); + tree_state newtree2(newtree1.set_scalars(roots.front().inner()(), sc)); - trees.insert(make_pair(roots.front(), newtree)); + trees.insert(make_pair(roots.front(), newtree2)); ai i = about.find(roots.front()); I(i != about.end()); @@ -2046,6 +2057,22 @@ r = ip.insert(std::make_pair(i->first, itempaths())); r.first->second.merged = (*i).second; } + + std::map > sm = m.current_scalars(); + for (std::map >::const_iterator + i = sm.begin(); i != sm.end(); ++i) + { + std::pair::iterator, bool> r; + r = ip.insert(std::make_pair(i->first, itempaths())); + if ((*i).second.size() == 1) + { + r.first->second.clean = true; + r.first->second.hash = file_id(itx.lookup(*(*i).second.begin())); + } + else + r.first->second.clean = false; + } + paths.clear(); paths.reserve(ip.size()); for (std::map::const_iterator i = ip.begin(); ======================================================================== --- pcdv.cc 52ca638a980086603d40838ebb861e892a5ff7f3 +++ pcdv.cc 987bf0dfb85f1e2d26e1e22e85f3f0f9bfd73658 @@ -2017,7 +2017,11 @@ std::map > out; for (std::map::const_iterator i = states->begin(); i != states->end(); ++i) - out.insert(make_pair(i->first, i->second.current_scalars())); + { + std::set s = i->second.current_scalars(); + if (!(s.size() == 1 && *s.begin() == item_status::scalar(-1))) + out.insert(make_pair(i->first, s)); + } return out; }