# # # patch "NEWS" # from [9755f0b992a3b7ebe0e7f026da868d282446549b] # to [1278129541697d55743c7237da0db78ff2d92856] # # patch "database.cc" # from [22e4b9ab811ee3efcd5a166a67094e259ea8190a] # to [0bc6ce7bb27323c3724ee95f099985a3abad21f3] # ============================================================ --- NEWS 9755f0b992a3b7ebe0e7f026da868d282446549b +++ NEWS 1278129541697d55743c7237da0db78ff2d92856 @@ -111,6 +111,10 @@ xxx xxx xx xx:xx:xx UTC 2010 - A regression in 0.47 prevent successful execution of push / pull / sync over pipes (Debian bug 574512); this has been fixed. + - A bug in 0.46 and 0.47 could lead to pulls or possibly commits taking + approximately forever, if any of the previous branch heads was not a + "close" relation of the new head. This has been fixed. + - Several bugs related to restrictions not including the required parent directories of included files have been fixed. It is now possible to say 'mtn add a/b/c' followed by 'mtn commit a/b/c' and have the commit ============================================================ --- database.cc 22e4b9ab811ee3efcd5a166a67094e259ea8190a +++ database.cc 0bc6ce7bb27323c3724ee95f099985a3abad21f3 @@ -2655,6 +2655,7 @@ database::is_a_ancestor_of_b(revision_id vector todo; todo.push_back(ancestor); + set seen; while (!todo.empty()) { revision_id anc = todo.back(); @@ -2666,11 +2667,16 @@ database::is_a_ancestor_of_b(revision_id { if (*i == child) return true; + else if (seen.find(*i) != seen.end()) + continue; else { get_rev_height(*i, anc_height); if (child_height > anc_height) - todo.push_back(*i); + { + seen.insert(*i); + todo.push_back(*i); + } } } }