diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2016-01-28 20:51:44 -0700 |
---|---|---|
committer | Todd Gamblin <tgamblin@llnl.gov> | 2016-01-28 20:51:44 -0700 |
commit | dda16bfea60b4daaba889ab55bd6c6e2a5b27bef (patch) | |
tree | 0d783bbba9f72e6152f6423cb59108d0ef0d9846 | |
parent | 06535f25dc95c627bfdd01e383076daaba159a6c (diff) | |
parent | 824546d343917fb24c1b94af0eeaea79371efb46 (diff) | |
download | spack-dda16bfea60b4daaba889ab55bd6c6e2a5b27bef.tar.gz spack-dda16bfea60b4daaba889ab55bd6c6e2a5b27bef.tar.bz2 spack-dda16bfea60b4daaba889ab55bd6c6e2a5b27bef.tar.xz spack-dda16bfea60b4daaba889ab55bd6c6e2a5b27bef.zip |
Merge pull request #406 from epfl-scitas/enhancement/md5_urls
spack md5 on urls
-rw-r--r-- | lib/spack/spack/cmd/md5.py | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/lib/spack/spack/cmd/md5.py b/lib/spack/spack/cmd/md5.py index ef1e4f3475..879ef9f7b7 100644 --- a/lib/spack/spack/cmd/md5.py +++ b/lib/spack/spack/cmd/md5.py @@ -23,15 +23,31 @@ # Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## import os -import hashlib import argparse +import hashlib + +from contextlib import contextmanager import llnl.util.tty as tty from llnl.util.filesystem import * import spack.util.crypto +from spack.stage import Stage, FailedDownloadError + +description = "Calculate md5 checksums for files/urls." -description = "Calculate md5 checksums for files." +@contextmanager +def stager(url): + _cwd = os.getcwd() + _stager = Stage(url) + try: + _stager.fetch() + yield _stager + except FailedDownloadError: + tty.msg("Failed to fetch %s" % url) + finally: + _stager.destroy() + os.chdir(_cwd) # the Stage class changes the current working dir so it has to be restored def setup_parser(subparser): setup_parser.parser = subparser @@ -45,9 +61,12 @@ def md5(parser, args): for f in args.files: if not os.path.isfile(f): - tty.die("Not a file: %s" % f) - if not can_access(f): - tty.die("Cannot read file: %s" % f) + with stager(f) as stage: + checksum = spack.util.crypto.checksum(hashlib.md5, stage.archive_file) + print "%s %s" % (checksum, f) + else: + if not can_access(f): + tty.die("Cannot read file: %s" % f) - checksum = spack.util.crypto.checksum(hashlib.md5, f) - print "%s %s" % (checksum, f) + checksum = spack.util.crypto.checksum(hashlib.md5, f) + print "%s %s" % (checksum, f) |