Skip to content

Commit cc3fbc9

Browse files
committed
First working version
1 parent d3a848e commit cc3fbc9

File tree

1 file changed

+61
-31
lines changed

1 file changed

+61
-31
lines changed

shpc/main/modules/base.py

+61-31
Original file line numberDiff line numberDiff line change
@@ -498,40 +498,70 @@ def install(
498498

499499
return container_path
500500

501-
def reinstall(self, pattern, upgrade=False, force=False, **kwargs):
501+
def reinstall(self, module_name, upgrade=False, force=False):
502502
"""
503503
Reinstall (and possibly upgrade) all the current modules, possibly filtered by pattern.
504504
"""
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)
508518

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)
512545

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
531546
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

Comments
 (0)