civicrm/cv

in drupal8+, calling `cv --user=<user> flush` before the user has logged in results in backtrace

Closed this issue · 2 comments

If I install:

  • Drupal8+ via drush (specifying a user "admin" and password on the command line)
  • civicrm via cv

And then:

  • Try to execute the cv --user=admin flush I get:
www-data@b2378ad6fbcf:~/powerbase/web$ cv --user=admin flush                                                                                                                                                         
Error: Call to undefined method Drupal\Core\Session\AccountProxy::get() in /var/www/powerbase/vendor/civic                                                          
rm/civicrm-core/CRM/Utils/System/Drupal8.php on line 596 #0 /var/www/powerbase/vendor/civicrm/civicrm-core                                              
/CRM/Utils/System/Base.php(893): CRM_Utils_System_Drupal8->getUserIDFromUserObject()                                                           
#1 /var/www/powerbase/vendor/civicrm/civicrm-core/CRM/Core/BAO/UFMatch.php(71): CRM_Utils_System_Base->get                               
BestUFID()                                                                                                                                            
#2 phar:///usr/local/bin/cv/src/Util/BootTrait.php(207): CRM_Core_BAO_UFMatch::synchronize()                                                                                   
#3 phar:///usr/local/bin/cv/src/Util/BootTrait.php(112): Civi\Cv\Command\FlushCommand->ensureUserContact()               
#4 [internal function]: Civi\Cv\Command\FlushCommand->_boot_full()                                                  
#5 phar:///usr/local/bin/cv/src/Util/BootTrait.php(45): call_user_func()                                      
#6 phar:///usr/local/bin/cv/src/Command/FlushCommand.php(29): Civi\Cv\Command\FlushCommand->boot()                                                                         
#7 phar:///usr/local/bin/cv/vendor/symfony/console/Command/Command.php(255): Civi\Cv\Command\FlushCommand-                                     
>execute()                                                                                                                                       
#8 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(1009): Symfony\Component\Console\Comman                                                             
d\Command->run()                                                                                                                                                               
#9 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(273): Symfony\Component\Console\Applica                                     
tion->doRunCommand()                                                                                                                     
#10 phar:///usr/local/bin/cv/src/Application.php(82): Symfony\Component\Console\Application->doRun()                                                  
#11 phar:///usr/local/bin/cv/vendor/symfony/console/Application.php(149): Civi\Cv\Application->doRun()                                                                         
#12 phar:///usr/local/bin/cv/src/Application.php(49): Symfony\Component\Console\Application->run()                       
#13 phar:///usr/local/bin/cv/bin/cv(27): Civi\Cv\Application::main()                                               
#14 /usr/local/bin/cv(14): require('phar:///usr/loc...')                                                   
#15 {main}                                                                                                                                                                            
Error: Call to undefined method Drupal\Core\Session\AccountProxy::get() in CRM_Utils_System_Drupal8->getUs                                     
erIDFromUserObject() (line 596 of /var/www/powerbase/vendor/civicrm/civicrm-core/CRM/Utils/System/Drupal8.                                       
php).                                                                                                                                                                 
www-data@b2378ad6fbcf:~/powerbase/web$ 

I can work around the problem by first calling:

cv php:eval 'CRM_Core_Config::singleton()->userSystem->synchronizeUsers();'

A simple fix might be to add that line somewhere around here? Happy to make a PR if that seems like the right strategy.

Seems similar to https://lab.civicrm.org/dev/core/-/issues/2323.

@jmcclelland Right-o. That linked line is kind of funny...

Relatedly, on Mattermost, @seamuslee001 suggested a technique that might be bit lighter than a full userSystem->synchronizeUser().

Adapted as a proposal: #149

Fix was merged. Should be released within the next couple days.