On 04/03/2014 03:51 PM, zhshzhou@linux.vnet.ibm.com wrote:
From: Zhou Zheng Sheng <zhshzhou@linux.vnet.ibm.com>

In ui/js/src/kimchi.main.js we fetch all plugin tabs and concat them to
the tabs array. However array.concat does not work in place, it creates
a new array to store the result, so it does not correctly update the
tabs array. The plugin tabs are not loaded at all.

This patch fixes the problem by using tabs.push.apply(tabs, pluginTabs) .

Signed-off-by: Zhou Zheng Sheng <zhshzhou@linux.vnet.ibm.com>
---
 ui/js/src/kimchi.main.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ui/js/src/kimchi.main.js b/ui/js/src/kimchi.main.js
index 9b0acbf..78206bf 100644
--- a/ui/js/src/kimchi.main.js
+++ b/ui/js/src/kimchi.main.js
@@ -72,7 +72,7 @@ kimchi.main = function() {
                 var url = kimchi.template(pluginConfigUrl, {
                     plugin: p
                 });
-                tabs.concat(retrieveTabs(url));

+                tabs.push.apply(tabs, retrieveTabs(url));
No. It's wrong. retrieveTabs() returns an array. Consider this: we have 3 plugins, and we'll load them one by one.
1) For the first time, we assign the result of retrieveTabs() to firstTabsArray = ['Admin Function1', 'Admin Function2']. Then we simply copy the reference from firstTabsArray to tabs.
2) For the second time, we get secondTabsArray = ['Admin Function3', 'Admin Function4']. Then tabs should be: ['Admin Function1', 'Admin Function2', 'Admin Function3', 'Admin Function4'].
3) For the third time, we get thirdTabsArray = ['Admin Function5', 'Admin Function6']. Then tabs should be: ['Admin Function1', 'Admin Function2', 'Admin Function3', 'Admin Function4', 'Admin Function5', 'Admin Function6'].

    If using array.push(), the final result of tabs will become: [ ['Admin Function1', 'Admin Function2'], ['Admin Function3', 'Admin Function4'], ['Admin Function5', 'Admin Function6'] ].
             });

             var firstTabPath = tabs[0] && tabs[0]['path'];