Skip to content
This repository has been archived by the owner on Jul 19, 2023. It is now read-only.

Commit

Permalink
Merge pull request #78 from keisukefukuda/bugfix
Browse files Browse the repository at this point in the history
Bugfix
  • Loading branch information
keisukefukuda committed Aug 3, 2017
2 parents bbbe8a0 + abe20af commit cee7fa2
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 8 deletions.
21 changes: 16 additions & 5 deletions mpienv/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,21 @@ def _load_mpi_info(self):
self._installed = {}
for prefix in glob.glob(os.path.join(self._mpi_dir, '*')):
name = os.path.split(prefix)[-1]
mpi = self.get_mpi_from_prefix(prefix)
try:
mpi = self.get_mpi_from_prefix(prefix)
except RuntimeError:
# If the directory exists but MPI is not found,
# then it's a broken MPI.
mpiexec = os.path.join(prefix, 'bin', 'mpiexec')
if os.path.exists(prefix) and not os.path.exists(mpiexec):
mpi = BrokenMPI(prefix)
else:
sys.stderr.write("mpienv: [Warning] Directory '{}' "
"is registered as {} but no mpiexec "
"is found.\n".format(
os.path.realpath(prefix),
name))
continue # skip
mpi.name = name
self._installed[name] = mpi

Expand Down Expand Up @@ -137,7 +151,7 @@ def prefix(self, name):

def get_mpi_from_name(self, name):
if name not in self:
sys.stderr.write("mpienv-use: Error: "
sys.stderr.write("mpienv: Error: "
"unknown MPI installation: "
"'{}'\n".format(name))
exit(-1)
Expand Down Expand Up @@ -223,9 +237,6 @@ def add(self, prefix, name=None):
return name

def rm(self, name, prompt=False):
if name not in self:
raise RuntimeError("No such MPI: '{}'".format(name))

mpi = self.get_mpi_from_name(name)

if not mpi.is_broken and mpi.is_active:
Expand Down
24 changes: 21 additions & 3 deletions mpienv/mpi.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import os.path
import re
import shutil
from subprocess import call
from subprocess import PIPE
from subprocess import Popen
Expand Down Expand Up @@ -45,18 +46,35 @@ def _is_broken_symlink(path):


class BrokenMPI(object):
def __init__(self):
pass
def __init__(self, prefix, conf, name=None):
self._prefix = prefix
self._conf = conf
self._name = name

@property
def is_broken(self):
return True

def remove(self):
if os.path.islink(self._prefix):
os.remove(self._prefix)
else:
shutil.rmtree(self._prefix)


def MPI(mpiexec):
"""Return the class of the MPI"""
if not os.path.exists(mpiexec):
raise RuntimeError("Internal Error: mpiexec not found")
prefix = os.path.abspath(
os.path.join(os.path.dirname(mpiexec), os.pardir))
if os.path.isdir(prefix):
# prefix directory does exist but prefix/bin/mpiexec
# does not. --> It seems that the MPI has been
# uninstalled after registered to mpienv?
return BrokenMPI
else:
sys.stderr.write("mpienv [Error]: no such directory: {}"
.format(prefix))

if _is_broken_symlink(mpiexec):
return BrokenMPI
Expand Down

0 comments on commit cee7fa2

Please sign in to comment.