#
# patch "ChangeLog"
# from [babd61b2ae2e5a9c88f5c77e649f65ca3ae282b5]
# to [63c759b0cfd48e65dc585981636065a006a2409e]
#
# patch "change_set.cc"
# from [f20e89774ae99040b5867f1d59803b660d29a071]
# to [39d27129e791256a3b0bba63888179de3fe225c0]
#
# patch "pcdv.cc"
# from [68692c9fe057fd16f00fe064bfdbaa95a2ef73d0]
# to [3bf2c8965080e804a4f70c0e152ef89f34c9bc03]
#
========================================================================
--- ChangeLog babd61b2ae2e5a9c88f5c77e649f65ca3ae282b5
+++ ChangeLog 63c759b0cfd48e65dc585981636065a006a2409e
@@ -1,3 +1,10 @@
+2005-08-19 Timothy Brownawell
+
+ * change_set.cc: Add (and use) dump() for vector
+ * pcdv.cc: Clean up P() / L() usage.
+ * pcdv.cc (item_status::suture): Downgrade invariant (should
+ have been error) to warning; was triggered by monotone db.
+
2005-08-18 Timothy Brownawell
* pcdv.cc (tree_state::merge_with_resolution): bugfix, multiple
========================================================================
--- change_set.cc f20e89774ae99040b5867f1d59803b660d29a071
+++ change_set.cc 39d27129e791256a3b0bba63888179de3fe225c0
@@ -1939,6 +1939,7 @@
app.db.get_revision(roots.front(), rs);
std::vector treevec;
std::vector revec;
+ MM(revec);
for (edge_map::const_iterator i = rs.edges.begin();
i != rs.edges.end(); ++i)
{
@@ -2827,25 +2828,53 @@
}
void
-write_path_rearrangement(change_set::path_rearrangement const & re,
- data & dat)
+write_insane_path_rearrangement(change_set::path_rearrangement const & re,
+ data & dat)
{
- re.check_sane();
std::ostringstream oss;
basic_io::printer pr(oss);
- print_path_rearrangement(pr, re);
+ print_insane_path_rearrangement(pr, re);
dat = data(oss.str());
}
void
+write_path_rearrangement(change_set::path_rearrangement const & re,
+ data & dat)
+{
+ re.check_sane();
+ write_insane_path_rearrangement(re, dat);
+}
+
+void
dump(change_set const & cs, std::string & out)
{
data tmp;
write_insane_change_set(cs, tmp);
-// write_change_set(cs, tmp);
out = tmp();
}
+void
+dump(change_set::path_rearrangement const & pr, std::string & out)
+{
+ data tmp;
+ write_insane_path_rearrangement(pr, tmp);
+ out = tmp();
+}
+
+void
+dump(std::vector const & obj,
+ std::string & out)
+{
+ out.clear();
+ std::string tmp;
+ for (std::vector::const_iterator
+ i = obj.begin(); i != obj.end(); ++i)
+ {
+ dump(*i, tmp);
+ out += tmp + "\n\n";
+ }
+}
+
#ifdef BUILD_UNIT_TESTS
#include "unit_tests.hh"
#include "sanity.hh"
========================================================================
--- pcdv.cc 68692c9fe057fd16f00fe064bfdbaa95a2ef73d0
+++ pcdv.cc 3bf2c8965080e804a4f70c0e152ef89f34c9bc03
@@ -887,7 +887,11 @@
versions->insert(*o);
else
{
- I(m->second.first == o->second.first);
+ if (!(m->second.first == o->second.first))
+ {
+ W(F("Sutured items previously had different names in the same revision."));
+ L(F("This was in revision #%1%") % o->first);
+ }
std::set s;
std::vector const & ov(o->second.second);
std::vector & mv(m->second.second);
@@ -998,6 +1002,8 @@
void
tree_state::add_suture(item_id l, item_id r)
{
+ I(l != -1);
+ I(r != -1);
I(l != r);
if (l < r)
{
@@ -1009,7 +1015,10 @@
if (i != sutures->end())
add_suture(l, i->second);
else
- sutures->insert(make_pair(l, r));
+ {
+ L(F("Suturing item %1% to item %2%") % l % r);
+ sutures->insert(make_pair(l, r));
+ }
}
void
@@ -1044,6 +1053,9 @@
item_id out = from;
while (i != sutures->end())
{
+ std::map::iterator j = states->find(i->first);
+ if (j != states->end())
+ return i->first;
out = i->second;
i = sutures->find(out);
}
@@ -1164,6 +1176,8 @@
std::vector const & changes,
std::string revision)
{
+ tree_state out(mash(trees));
+ L(F("Now processing %1% (#%2%)") % revision % out.itx->intern(revision));
// shortest first, then in order of:
// deleted dirs, deleted files, renamed dirs, renamed files, added files
// sort key is (depth, class, rev#)
@@ -1184,7 +1198,6 @@
}
}
interner cit;
- tree_state out(mash(trees));
fpid rootid = cit.intern(file_path()());
outmap.insert(make_pair(rootid, -1));
done.insert(-1);
@@ -1239,8 +1252,9 @@
for (std::set::iterator i = unchanged.begin();
i != unchanged.end(); ++i)
{
- item_id myid = out.getid(i->get<1>());
- item_id pid = out.getid(i->get<2>());
+ tree_state const & t(*i->get<0>());
+ item_id myid = t.getid(i->get<1>());
+ item_id pid = t.getid(i->get<2>());
// process this item if its parent has been processed
if (done.find(pid) == done.end())
continue;
@@ -1248,17 +1262,23 @@
if (done.find(myid) != done.end())
continue;
std::map::const_iterator
- j = out.states->find(myid);
- I(j != out.states->end());
- file_path fp = out.get_full_name(j->second);
+ j = t.states->find(myid);
+ I(j != t.states->end());
+ file_path fp = t.get_full_name(j->second);
+ I(!(fp == file_path()));
done.insert(myid);
std::pair::iterator, bool> r;
r = outmap.insert(make_pair(cit.intern(fp()), myid));
if (r.first->second != myid)
{
- W(F("Colliding over %1%") % fp);
+ L(F("Items %1% and %2% Colliding over %3% in revision %4%")
+ % myid
+ % r.first->second
+ % fp
+ % revision);
out.add_suture(r.first->second, myid);
}
+ done.insert(t.getid(myid));
}
lastlevel = level;
}
@@ -1282,7 +1302,7 @@
I(p.second);
j = p.first;
addednew = true;
- L(F("New item: %1%") % to);
+ L(F("New item: %1% (%2%)") % to % current_id);
}
else
{
@@ -1313,6 +1333,7 @@
done.insert(current_id);
continue;
}
+ I(!(to == file_path()));
{
int d = -1;
std::set s = current_item.current_names();
@@ -1340,6 +1361,15 @@
I(k != outmap.end());
// ...and get it moved in.
+ if (type != added_file && type != added_dir)
+ {
+ std::map::const_iterator
+ i = idx(trees,which).states->find(current_id);
+ if (i != idx(trees,which).states->end())
+ L(F("File %1% being renamed to %2%. (%3%)")
+ % idx(trees,which).get_full_name(i->second)
+ % to % current_id);
+ }
current_item = current_item.rename(out.itx->intern(revision),
k->second,
new_name);
@@ -1351,15 +1381,20 @@
r = outmap.insert(make_pair(cit.intern(to()), current_id));
if (r.first->second != current_id)
{
- W(F("Colliding over %1%") % to);
+ L(F("Items %1% and %2% Colliding over %3% in revision %4%")
+ % current_id
+ % r.first->second
+ % to
+ % revision);
out.add_suture(r.first->second, current_id);
}
}
for (std::set::iterator i = unchanged.begin();
i != unchanged.end(); ++i)
{
- item_id myid = out.getid(i->get<1>());
- item_id pid = out.getid(i->get<2>());
+ tree_state const & t(*i->get<0>());
+ item_id myid = t.getid(i->get<1>());
+ item_id pid = t.getid(i->get<2>());
// process this item if its parent has been processed
if (done.find(pid) == done.end())
continue;
@@ -1367,17 +1402,22 @@
if (done.find(myid) != done.end())
continue;
std::map::const_iterator
- j = out.states->find(myid);
- I(j != out.states->end());
- file_path fp = out.get_full_name(j->second);
- done.insert(myid);
+ j = t.states->find(myid);
+ I(j != t.states->end());
+ file_path fp = t.get_full_name(j->second);
+ I(!(fp == file_path()));
std::pair::iterator, bool> r;
r = outmap.insert(make_pair(cit.intern(fp()), myid));
if (r.first->second != myid)
{
- W(F("Colliding over %1%") % fp);
+ L(F("Items %1% and %2% Colliding over %3% in revision %4%")
+ % myid
+ % r.first->second
+ % fp
+ % revision);
out.add_suture(r.first->second, myid);
}
+ done.insert(t.getid(myid));
}
out.apply_sutures();
return out;