# HG changeset patch # User Mike Miller # Date 1337441497 14400 # Node ID dee1452ca601772d98437a46f0a631a66f245917 # Parent 97e3d1769be06028139748dd1ac8b8382d7aeaed Load packages with circular dependencies correctly * scripts/pkg/private/load_package_dirs.m: Fix recursion to handle circular dependencies correctly. diff -r 97e3d1769be0 -r dee1452ca601 scripts/pkg/private/load_package_dirs.m --- a/scripts/pkg/private/load_package_dirs.m Sat May 19 00:35:15 2012 -0400 +++ b/scripts/pkg/private/load_package_dirs.m Sat May 19 11:31:37 2012 -0400 @@ -28,6 +28,11 @@ && installed_pkgs_lst{i}.loaded) continue; else + ## Insert this package at the front before recursing over dependencies. + if (! any (idx == i)) + idx = [i, idx]; + endif + if (handle_deps) deps = installed_pkgs_lst{i}.depends; if ((length (deps) > 1) @@ -36,8 +41,10 @@ for k = 1 : length (deps) for j = 1 : length (installed_pkgs_lst) if (strcmp (installed_pkgs_lst{j}.name, deps{k}.package)) - tmplidx (end + 1) = j; - break; + if (! any (idx == j)) + tmplidx (end + 1) = j; + break; + endif endif endfor endfor @@ -45,9 +52,6 @@ installed_pkgs_lst); endif endif - if (isempty (find(idx == i))) - idx (end + 1) = i; - endif endif endfor endfunction