# 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 --git a/scripts/pkg/private/load_package_dirs.m b/scripts/pkg/private/load_package_dirs.m --- a/scripts/pkg/private/load_package_dirs.m +++ b/scripts/pkg/private/load_package_dirs.m @@ -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