summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoralalazo <massimiliano.culpo@googlemail.com>2016-06-30 13:44:49 +0200
committeralalazo <massimiliano.culpo@googlemail.com>2016-06-30 13:44:49 +0200
commitba87937fffc5843b5f32246571b79d499dafeba3 (patch)
tree94e8aae88be58effa0e84d5f9342f1f6a857e205 /lib
parent1b7eedbb7df7c6dee9ab84217e75dc8ec54dcee1 (diff)
downloadspack-ba87937fffc5843b5f32246571b79d499dafeba3.tar.gz
spack-ba87937fffc5843b5f32246571b79d499dafeba3.tar.bz2
spack-ba87937fffc5843b5f32246571b79d499dafeba3.tar.xz
spack-ba87937fffc5843b5f32246571b79d499dafeba3.zip
module : added detection of file name clashes
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/cmd/module.py25
1 files changed, 23 insertions, 2 deletions
diff --git a/lib/spack/spack/cmd/module.py b/lib/spack/spack/cmd/module.py
index c71e615d1c..4f6b4764b6 100644
--- a/lib/spack/spack/cmd/module.py
+++ b/lib/spack/spack/cmd/module.py
@@ -25,6 +25,7 @@
import os
import shutil
import sys
+import collections
import llnl.util.tty as tty
import spack.cmd
@@ -100,12 +101,32 @@ def module_refresh(name, specs, args):
ask_for_confirmation('Do you want to proceed ? ')
cls = module_types[name]
+
+ # Detect name clashes
+ writers = [cls(spec) for spec in specs]
+ file2writer = collections.defaultdict(list)
+ for item in writers:
+ file2writer[item.file_name].append(item)
+
+ if len(file2writer) != len(writers):
+ message = 'Name clashes detected in module files:\n'
+ for filename, writer_list in file2writer.items():
+ if len(writer_list) > 1:
+ message += 'file : {0}\n'.format(filename)
+ for x in writer_list:
+ message += 'spec : {0}\n'.format(x.spec.format(color=True))
+ message += '\n'
+ tty.error(message)
+ tty.error('Operation aborted')
+ raise SystemExit(1)
+
+ # Proceed regenerating module files
tty.msg('Regenerating {name} module files'.format(name=name))
if os.path.isdir(cls.path) and args.delete_tree:
shutil.rmtree(cls.path, ignore_errors=False)
mkdirp(cls.path)
- for spec in specs:
- cls(spec).write()
+ for x in writers:
+ x.write(overwrite=True)
# Qualifiers to be used when querying the db for specs
constraint_qualifiers = {