From b168f34de9e85bbc47072ad732e2bc7d4065e19a Mon Sep 17 00:00:00 2001 From: Roy Ivy III Date: Sun, 29 May 2016 21:17:47 -0500 Subject: [PATCH] fix dependency matching, correcting ordering for concurrent installations --- lib/core.ps1 | 9 +++++++++ lib/depends.ps1 | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/core.ps1 b/lib/core.ps1 index a494246cfe..7e245e066b 100644 --- a/lib/core.ps1 +++ b/lib/core.ps1 @@ -689,3 +689,12 @@ function app($name, $bucket, $variant) { if ($null -ne $variant) { $result = "$result@$variant" } $result } + +function matching_apps($apps, $app) { + $matches = @() + $app_name = app_name( $app ) + if ($null -ne $apps) { foreach ($app in $apps) { + if ( app_name($app) -ieq $app_name ) { $matches += $app } + }} + $matches +} diff --git a/lib/depends.ps1 b/lib/depends.ps1 index 6ec6d62d55..a02b7149cd 100644 --- a/lib/depends.ps1 +++ b/lib/depends.ps1 @@ -7,9 +7,13 @@ function install_order($apps, $arch) { $deps = @( deps $app $arch ) # trace "install_order(): deps = [$deps]" if ($null -ne $deps) { foreach ($dep in $deps) { - if($res -notcontains $dep) { $res += $dep } + $app_variant = @( matching_apps( $apps, $dep ) )[0]; + if ($null -ne $app_variant) { $dep = $app_variant } + if (-not matching_apps( $res, $dep )) { $res += $dep } + # if($res -notcontains $dep) { $res += $dep } }} - if($res -notcontains $app) { $res += $app } + if (-not (matching_apps( $res, $app ))) { $res += $app } + # if($res -notcontains $app) { $res += $app } }} $res # trace "install_order():DONE: res = [$res]"