[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdesrc-build] modules/ksb: resolver: Allow cmdline selectors producing >1 module.
From:       Michael Pyne <mpyne () kde ! org>
Date:       2015-08-15 21:45:36
Message-ID: E1ZQjGi-0006xV-Lr () scm ! kde ! org
[Download RAW message or body]

Git commit 8f342c8211620202d4ea65a6981e4d0549e91c28 by Michael Pyne.
Committed on 15/08/2015 at 21:44.
Pushed by mpyne into branch 'master'.

resolver: Allow cmdline selectors producing >1 module.

Call it a "demand-paged feature"... at least I documented that this was
sub-optimal up to this point. ;)

BUG:351310
FIXED-IN:15.08

M  +18   -7    modules/ksb/ModuleResolver.pm

http://commits.kde.org/kdesrc-build/8f342c8211620202d4ea65a6981e4d0549e91c28

diff --git a/modules/ksb/ModuleResolver.pm b/modules/ksb/ModuleResolver.pm
index 351ec0a..6d52d31 100644
--- a/modules/ksb/ModuleResolver.pm
+++ b/modules/ksb/ModuleResolver.pm
@@ -258,31 +258,42 @@ sub _resolveGuessedModules
 
     $self->_expandAllUnexpandedModuleSets();
 
+    my @results;
+
+    # We use foreach since we *want* to be able to replace the iterated variable
+    # if we find an existing module.
     for my $guessedModule (@modules)
     {
-        next if !$guessedModule->getOption('#guessed-kde-project', 'module');
+        if (!$guessedModule->getOption('#guessed-kde-project', 'module')) {
+            push @results, $guessedModule;
+            next;
+        }
 
         # If the module we want could be found from within our rc-file
         # module-sets (even implicitly), use it. Otherwise assume
         # kde-projects and evaluate now.
         if (exists $lookupTableRef->{$guessedModule->name()}) {
             $guessedModule = $lookupTableRef->{$guessedModule->name()};
+            push @results, $guessedModule;
         }
         else {
             my $set = ksb::ModuleSet::KDEProjects->new($ctx, "guessed_from_cmdline");
             $set->setModulesToFind($guessedModule->name());
 
-            my @results = $self->expandModuleSets($set);
+            my @setResults = $self->expandModuleSets($set);
             my $searchItem = $guessedModule->name();
-            $guessedModule = first { $_->name() eq $searchItem } @results;
-            if (!$guessedModule) {
-                # This is a misfeature, I know. This should support whole sets too.
-                croak_runtime ("$searchItem doesn't match a single module, it matches many.");
+            if (!@setResults) {
+                croak_runtime ("$searchItem doesn't match any modules.");
             }
+
+            my $foundModule = first { $_->name() eq $searchItem } @setResults;
+            $guessedModule = $foundModule if $foundModule;
+
+            push @results, @setResults;
         }
     }
 
-    return @modules;
+    return @results;
 }
 
 # Resolves already-stored module selectors into ksb::Modules, based on
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic