diff --git a/BrainPortal/lib/tasks/cbrain_plugins.rake b/BrainPortal/lib/tasks/cbrain_plugins.rake index 12d6fa5f4..0a8da9c34 100644 --- a/BrainPortal/lib/tasks/cbrain_plugins.rake +++ b/BrainPortal/lib/tasks/cbrain_plugins.rake @@ -119,10 +119,23 @@ namespace :cbrain do end end + erase_dead_symlinks = lambda do |name, directory| + Dir.entries(directory) + .map { |entry| Pathname.new(directory) + entry } + .select { |subpath| subpath.symlink? } + .select { |subpath| ! subpath.exist? } # checks that the symlink points to something valid + .each do |subpath| + puts "-> Erasing symlink for #{name} '#{subpath}'." if verbose + logger.('DeadSymlink', 'None', name, subpath) + File.unlink(subpath) # remove symlink + end + end + # Setup each userfile plugin setup.('userfiles/*', 'userfile', userfiles_plugins_dir, condition: lambda { |f| File.directory?(f) } ) + erase_dead_symlinks.('userfile', userfiles_plugins_dir) # Setup each cbrain_task plugin setup.('cbrain_task/*', 'task', tasks_plugins_dir, @@ -131,6 +144,7 @@ namespace :cbrain do File.symlink "cbrain_task_class_loader.rb", "#{symlink_location}.rb" end ) + erase_dead_symlinks.('task', tasks_plugins_dir) # Setup each cbrain_task descriptor plugin setup.('cbrain_task_descriptors/*', 'descriptor', descriptors_plugins_dir, @@ -139,16 +153,19 @@ namespace :cbrain do File.symlink "cbrain_task_descriptor_loader.rb", "#{symlink_location.sub(/.json$/, '.rb')}" end ) + erase_dead_symlinks.('descriptor', descriptors_plugins_dir) # Setup each boutiques descriptor plugin (new integrator) setup.('boutiques_descriptors/*', 'boutiques', boutiques_plugins_dir, condition: lambda { |f| File.extname(f) == '.json' }, ) + erase_dead_symlinks.('boutiques', boutiques_plugins_dir) # Setup each ruby lib file setup.('lib/*', 'lib', lib_plugins_dir, condition: lambda { |f| File.extname(f) == '.rb' }, ) + erase_dead_symlinks.('lib', lib_plugins_dir) end # chdir package end # each package diff --git a/script/update_cb_all.sh b/script/update_cb_all.sh index ae524840e..e8282cd96 100755 --- a/script/update_cb_all.sh +++ b/script/update_cb_all.sh @@ -34,8 +34,7 @@ A) for both Bourreau and BrainPortal: 1 - git pull of the main CBRAIN repo 2 - git pull of each installed plugins 3 - bundle install - 4 - rake cbrain:plugins:clean:all - - rake cbrain:plugins:install:all + 4 - rake cbrain:plugins:install:all B) for BrainPortal only: @@ -192,9 +191,7 @@ fi step=4 if test $step -ge $skipto -a $step -le $stopat ; then -Step $step: Re-install All Plugins -test "$base" == "BrainPortal" && runcapture "rake cbrain:plugins:clean:all" -test "$base" == "Bourreau" && runcapture "rake cbrain:plugins:clean:plugins" +Step $step: Update All Plugins Symlinks test "$base" == "BrainPortal" && runcapture "rake cbrain:plugins:install:all" test "$base" == "Bourreau" && runcapture "rake cbrain:plugins:install:plugins"