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
1=== modified file 'openerp/tools/graph.py'
2--- openerp/tools/graph.py 2011-11-14 06:48:05 +0000
3+++ openerp/tools/graph.py 2012-02-22 15:20:23 +0000
4@@ -313,7 +313,8 @@
5 self.order[level] = self.order[level]+1
6
7 for sec_end in self.transitions.get(node, []):
8- self.init_order(sec_end, self.result[sec_end]['x'])
9+ if node!=sec_end:
10+ self.init_order(sec_end, self.result[sec_end]['x'])
11
12
13 def order_heuristic(self):
14@@ -438,33 +439,27 @@
15 l.reverse()
16 no = len(l)
17
18- if no%2==0:
19- first_half = l[no/2:]
20- factor = 1
21- else:
22- first_half = l[no/2+1:]
23- factor = 0
24-
25+ rest = no%2
26+ first_half = l[no/2+rest:]
27 last_half = l[:no/2]
28
29- i=1
30- for child in first_half:
31- self.result[child]['y'] = mid_pos - (i - (factor * 0.5))
32- i += 1
33+ for i, child in enumerate(first_half):
34+ self.result[child]['y'] = mid_pos - (i+1 - (0 if rest else 0.5))
35
36 if self.transitions.get(child, False):
37 if last:
38 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
39 last = self.tree_order(child, last)
40
41- if no%2:
42+ if rest:
43 mid_node = l[no/2]
44 self.result[mid_node]['y'] = mid_pos
45
46 if self.transitions.get((mid_node), False):
47 if last:
48 self.result[mid_node]['y'] = last + len(self.transitions[mid_node])/2 + 1
49- last = self.tree_order(mid_node)
50+ if node!=mid_node:
51+ last = self.tree_order(mid_node)
52 else:
53 if last:
54 self.result[mid_node]['y'] = last + 1
55@@ -474,13 +469,14 @@
56 i=1
57 last_child = None
58 for child in last_half:
59- self.result[child]['y'] = mid_pos + (i - (factor * 0.5))
60+ self.result[child]['y'] = mid_pos + (i - (0 if rest else 0.5))
61 last_child = child
62 i += 1
63 if self.transitions.get(child, False):
64 if last:
65 self.result[child]['y'] = last + len(self.transitions[child])/2 + 1
66- last = self.tree_order(child, last)
67+ if node!=child:
68+ last = self.tree_order(child, last)
69
70 if last_child:
71 last = self.result[last_child]['y']