Merge lp:~openerp-dev/openobject-server/6.1-bug-932830-cto into lp:openobject-server/6.1

Proposed by Samus CTO (OpenERP)
Status: Merged
Merged at revision: 4109
Proposed branch: lp:~openerp-dev/openobject-server/6.1-bug-932830-cto
Merge into: lp:openobject-server/6.1
Diff against target: 71 lines (+12/-16)
1 file modified
openerp/tools/graph.py (+12/-16)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.1-bug-932830-cto
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+94132@code.launchpad.net

Description of the change

Bug fix of infinite loop in diagram view

To post a comment you must log in.
4074. By Samus CTO (OpenERP)

[FIX] infinte loops in tools.graph

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'openerp/tools/graph.py'
--- openerp/tools/graph.py 2011-11-14 06:48:05 +0000
+++ openerp/tools/graph.py 2012-02-22 15:20:23 +0000
@@ -313,7 +313,8 @@
313 self.order[level] = self.order[level]+1313 self.order[level] = self.order[level]+1
314314
315 for sec_end in self.transitions.get(node, []):315 for sec_end in self.transitions.get(node, []):
316 self.init_order(sec_end, self.result[sec_end]['x'])316 if node!=sec_end:
317 self.init_order(sec_end, self.result[sec_end]['x'])
317318
318319
319 def order_heuristic(self):320 def order_heuristic(self):
@@ -438,33 +439,27 @@
438 l.reverse()439 l.reverse()
439 no = len(l)440 no = len(l)
440441
441 if no%2==0:442 rest = no%2
442 first_half = l[no/2:]443 first_half = l[no/2+rest:]
443 factor = 1
444 else:
445 first_half = l[no/2+1:]
446 factor = 0
447
448 last_half = l[:no/2]444 last_half = l[:no/2]
449445
450 i=1446 for i, child in enumerate(first_half):
451 for child in first_half:447 self.result[child]['y'] = mid_pos - (i+1 - (0 if rest else 0.5))
452 self.result[child]['y'] = mid_pos - (i - (factor * 0.5))
453 i += 1
454448
455 if self.transitions.get(child, False):449 if self.transitions.get(child, False):
456 if last:450 if last:
457 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1451 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
458 last = self.tree_order(child, last)452 last = self.tree_order(child, last)
459453
460 if no%2:454 if rest:
461 mid_node = l[no/2]455 mid_node = l[no/2]
462 self.result[mid_node]['y'] = mid_pos456 self.result[mid_node]['y'] = mid_pos
463457
464 if self.transitions.get((mid_node), False):458 if self.transitions.get((mid_node), False):
465 if last:459 if last:
466 self.result[mid_node]['y'] = last + len(self.transitions[mid_node])/2 + 1460 self.result[mid_node]['y'] = last + len(self.transitions[mid_node])/2 + 1
467 last = self.tree_order(mid_node)461 if node!=mid_node:
462 last = self.tree_order(mid_node)
468 else:463 else:
469 if last:464 if last:
470 self.result[mid_node]['y'] = last + 1465 self.result[mid_node]['y'] = last + 1
@@ -474,13 +469,14 @@
474 i=1469 i=1
475 last_child = None470 last_child = None
476 for child in last_half:471 for child in last_half:
477 self.result[child]['y'] = mid_pos + (i - (factor * 0.5))472 self.result[child]['y'] = mid_pos + (i - (0 if rest else 0.5))
478 last_child = child473 last_child = child
479 i += 1474 i += 1
480 if self.transitions.get(child, False):475 if self.transitions.get(child, False):
481 if last:476 if last:
482 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1477 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
483 last = self.tree_order(child, last)478 if node!=child:
479 last = self.tree_order(child, last)
484480
485 if last_child:481 if last_child:
486 last = self.result[last_child]['y']482 last = self.result[last_child]['y']