@@ -498,40 +498,70 @@ def install(
498
498
499
499
return container_path
500
500
501
- def reinstall (self , pattern , upgrade = False , force = False , ** kwargs ):
501
+ def reinstall (self , module_name , upgrade = False , force = False ):
502
502
"""
503
503
Reinstall (and possibly upgrade) all the current modules, possibly filtered by pattern.
504
504
"""
505
- modules = self ._get_module_lookup (
506
- self .settings .module_base , self .modulefile , pattern
507
- )
505
+ if module_name :
506
+ tag = None
507
+ if ":" in module_name :
508
+ module_name , tag = module_name .split (":" , 1 )
509
+ modules = self ._get_module_lookup (
510
+ self .settings .module_base , self .modulefile , module_name
511
+ )
512
+ assert module_name in modules
513
+ self ._reinstall (module_name , [tag ] if tag else modules [module_name ], upgrade = upgrade , force = force )
514
+ else :
515
+ modules = self ._get_module_lookup (self .settings .module_base , self .modulefile )
516
+ for module_name , versions in modules .items ():
517
+ self ._reinstall (module_name , versions , upgrade = upgrade , force = force )
508
518
509
- # If we don't have modules, exit early
510
- if not modules :
511
- logger .exit ("You don't have any install modules. Try shpc show." , 0 )
519
+ def _reinstall (self , module_name , versions , upgrade = False , force = False ):
520
+ """
521
+ Reinstall (and possibly upgrade) all the current modules, possibly filtered by pattern.
522
+ """
523
+ result = self .registry .find (module_name )
524
+ if result :
525
+
526
+
527
+ valid_tags = container .ContainerConfig (result ).tags
528
+ if upgrade :
529
+
530
+ views_with_module = set ()
531
+ for version in versions :
532
+ module_dir = os .path .join (self .settings .module_base , module_name , version )
533
+ for view_name , entry in self .views .items ():
534
+ if entry .exists (module_dir ):
535
+ views_with_module .add (view_name )
536
+
537
+ latest = valid_tags .latest .name
538
+ self .install (module_name , tag = latest , view = None , force = True )
539
+ for view in views_with_module :
540
+ self .views [view ].install (module_dir )
541
+
542
+ for version in versions :
543
+ if version != latest :
544
+ self .uninstall (module_name + ":" + version , force = True )
512
545
513
- unavailable_modules = False
514
- for module_name , versions in modules .items ():
515
- result = self .registry .find (module_name )
516
- if result :
517
- valid_tags = container .ContainerConfig (result ).tags
518
- new_versions = set ()
519
- if upgrade :
520
- new_versions .add (valid_tags .latest .name )
521
- else :
522
- for version in versions :
523
- if version in valid_tags :
524
- new_versions .add (version )
525
- else :
526
- logger .warning (
527
- "%s:%s is not available anymore and will be skipped"
528
- % (module_name , version )
529
- )
530
- unavailable_modules = True
531
546
else :
532
- logger .warning (
533
- "%s is not available anymore and will be skipped" % module_name
534
- )
535
- unavailable_modules = True
536
- if unavailable_modules and not force :
537
- logger .exit ("Some modules could not be found. Add --force to proceed." )
547
+ for version in versions :
548
+ if version in valid_tags :
549
+ module_dir = os .path .join (self .settings .module_base , module_name , version )
550
+ these_views = []
551
+ # TODO: switch to .values()
552
+ for view_name , entry in self .views .items ():
553
+ if entry .exists (module_dir ):
554
+ these_views .append (entry )
555
+ self .install (module_name , tag = version , view = None , force = True )
556
+ for view in these_views :
557
+ view .install (module_dir )
558
+
559
+ else :
560
+ logger .warning (
561
+ "%s:%s is not available anymore and will be skipped"
562
+ % (module_name , version )
563
+ )
564
+ else :
565
+ logger .warning (
566
+ "%s is not available anymore and will be skipped" % module_name
567
+ )
0 commit comments