Commit graph

135 commits

Author SHA1 Message Date
Todd Gamblin
094d47bff1 Allow user to specify profile sort column on the command line. (#4056)
- Add -P <STAT> argument so that caller can specify a sort column for
  cProfile. Can specify multiple columns with commas. e.g.:
      spack -P cumtime,module

- Add --lines option to Spack spec to control number of profile lines
  displayed

- Sort by time by default (because it works in all Python versions)

- Show sort column options in command help.

- Do a short profile run in the unit tests.
2017-05-01 14:32:33 -07:00
Todd Gamblin
a8bcc23fe7 Spack works with Python 3
- Update version guard in spack script to allow python 3
- Update min required version in the docs
2017-03-31 13:40:41 -07:00
Todd Gamblin
1d1a14dbe9 Convert Python 2 idioms to Python 2/3-compatible ones.
- convert print, StringIO, except as, octals, izip
- convert print statement to print function
- convert StringIO to six.StringIO
  - remove usage of csv reader in Spec, in favor of simple regex
  - csv reader only does byte strings
- convert 0755 octal literals to 0o755
- convert `except Foo, e` to `except Foo as e`
- fix a few places `str` is used.
  - may need to switch everything to str later.
- convert iteritems usages to use six.iteritems
- fix urllib and HTMLParser
- port metaclasses to use six.with_metaclass
- More octal literal conversions for Python 2/3
- Fix a new octal literal.
- Convert `basestring` to `six.string_types`
- Convert xrange -> range
- Fix various issues with encoding, iteritems, and Python3 semantics.
- Convert contextlib.nested to explicitly nexted context managers.
- Convert use of filter() to list comprehensions.
- Replace reduce() with list comprehensions.
-  Clean up composite: replace inspect.ismethod() with callable()
- Python 3 doesn't have "method" objects; inspect.ismethod returns False.
- Need to use callable in Composite to make it work.
- Update colify to use future division.
- Fix zip() usages that need to be lists.
- Python3: Use line-buffered logging instead of unbuffered.
- Python3 raises an error with unbuffered I/O
  - See https://bugs.python.org/issue17404
2017-03-31 13:40:41 -07:00
Todd Gamblin
0331b08c64 Update externals to work with Python 3
- Update YAML version to support Python 3
- Python 3 support for ordereddict backport
- Exclude Python3 YAML from version tests.
- Vendor six into Spack.
- Make Python version-check tests work with Python 3
- Add ability to add version check exceptions with '# nopyqver' line
  comments.
2017-03-31 13:40:41 -07:00
Adam J. Stewart
897d0f3f3e Fix unexpected keyword error in Python 2.6 (#2954) 2017-03-03 15:24:44 -06:00
Adam J. Stewart
6158115ca8 Standardize argparse help messages (#2847) 2017-01-26 02:33:01 -08:00
Todd Gamblin
d6390c159f Fix issues related to the switchover to pytest. (#2685)
- Remove stale reference to `import nose` from `bin/spack` script.
- Add `py` to externals (missing dependency for `pytest`)
2016-12-29 11:59:45 -08:00
Massimiliano Culpo
7ea10e768e unit tests: replace nose with pytest (#2502)
* Porting: substitute nose with ytest

This huge commit substitutes nose with pytest as a testing system. Things done here:

* deleted external/nose as it is no longer used
* moved mock resources in their own directory 'test/mock/'
* ported two tests (cmd/find, build_system) to pytest native syntax as an example
* build_environment, log: used monkeypatch instead of try/catch
* moved global mocking of fetch_cache to an auto-used fixture
* moved global mocking from test/__init__.py to conftest.py
* made `spack test` a wrapper around pytest
* run-unit-tests: avoid running python 2.6 tests under coverage to speed them up
* use `pytest --cov` instead of coverage run to cut down testing time

* mock/packages_test: moved mock yaml configuration to files instead of leaving it in the code as string literals

* concretize.py: ported tests to native pytest, reverted multiprocessing in pytest.ini as it was creating the wrong report for coveralls

* conftest.py, fixtures: added docstrings

* concretize_preferences.py: uses fixtures instead of subclassing MockPackagesTest

* directory_layout.py: uses fixtures instead of subclassing MockPackagesTest

* install.py: uses fixtures instead of subclassing MockPackagesTest

* optional_deps.py: uses fixtures instead of subclassing MockPackagesTest

optional_deps.py: uses fixtures instead of subclassing MockPackagesTest

* packages.py: uses fixtures instead of subclassing MockPackagesTest

* provider_index.py: uses fixtures instead of subclassing MockPackagesTest

* spec_yaml.py: uses fixtures instead of subclassing MockPackagesTest

* multimethod.py: uses fixtures instead of subclassing MockPackagesTest

* install.py: now uses mock_archive_url

* git_fetch.py: uses fixtures instead of subclassing MockPackagesTest

* hg_fetch.py: uses fixtures instead of subclassing MockPackagesTest

* svn_fetch.py, mirror.py: uses fixtures instead of subclassing MockPackagesTest
repo.py: deleted

* test_compiler_cmd.py: uses fixtures instead of subclassing MockPackagesTest

* cmd/module.py, cmd/uninstall.py: uses fixtures instead of subclassing MockDatabase

* database.py: uses fixtures instead of subclassing MockDatabase, removed mock/database

* pytest: uncluttering fixture implementations

* database: changing the scope to 'module'

* config.py: uses fixtures instead of subclassing MockPackagesTest

* spec_dag.py, spec_semantics.py: uses fixtures instead of subclassing MockPackagesTest

* stage.py: uses fixtures instead of subclassing MockPackagesTest. Removed mock directory

* pytest: added docstrings to all the fixtures

* pytest: final cleanup

* build_system_guess.py: fixed naming and docstrings as suggested by @scheibelp

* spec_syntax.py: added expected failure on parsing multiple specs closes #1976

* Add pytest and pytest-cov to Spack externals.

* Make `spack flake8` ignore externals.

* run-unit-tests runs spack test and not pytest.

* Remove all the special stuff for `spack test`

- Remove `conftest.py` magic and all the special case stuff in `bin/spack`

- Spack commands can optionally take unknown arguments, if they want to
  handle them.

- `spack test` is now a command like the others.

- `spack test` now just delegates its arguments to `pytest`, but it does
  it by receiving unknown arguments and NOT taking an explicit
  help argument.

* Fix error in fixtures.

* Improve `spack test` command a bit.

- Now supports an approximation of the old simple interface
- Also supports full pytest options if you want them.

* Use external coverage instead of pytest-cov

* Make coverage use parallel-mode.

* change __init__.py docs to include pytest
2016-12-29 07:48:48 -08:00
Todd Gamblin
8496d8ff77 Add a test to ensure package names have the right case. (#2562) 2016-12-13 01:23:40 -08:00
Todd Gamblin
41b8f31bcd Use JSON for the database instead of YAML. (#2189)
* Use JSON for the database instead of YAML.

- JSON is much faster than YAML *and* can preserve ordered keys.
  - 170x+ faster than Python YAML when using unordered dicts
  - 55x faster than Python YAML (both using OrderedDicts)
  - 8x faster than C YAML (with OrderedDicts)

- JSON is built into Python, unlike C YAML, so doesn't add a dependency.
- Don't need human readability for the package database.
- JSON requires no major changes to the code -- same object model as YAML.
- add to_json, from_json methods to spec.

* Add tests to ensure JSON and YAML don't need to be ordered in DB.

* Write index.json first time it's not found instead of requiring reindex.

* flake8 bug.
2016-12-05 10:03:58 -08:00
Matthew Krafczyk
8e6d890a19 -s now includes the file and line number with info
The option -s now causes file and line number information to be printed
along with any invocation of msg, info, etc...

This will greatly ease debugging.
2016-11-16 11:58:36 -05:00
Todd Gamblin
8f21332fec Bugfix: '::' only worked on top-level key in config.
- generalized and fixed to work with any key in YAML file
- simplified schema writing, as well
- add more unit tests for the config system
- Rename test/yaml.py to test/spack_yaml.py
  - Add test/yaml.pyc to ignored pyc files.
2016-10-30 23:55:00 -07:00
Todd Gamblin
d861a52ebe Use cYAML if it is available in Python. (#2010) 2016-10-12 18:25:18 -07:00
Todd Gamblin
488e1bab2c Make insecure option work with curl AND git. (#1786) 2016-10-11 23:13:40 -07:00
Elizabeth Fischer
9aa77178f3 Prohibit Python3 in Python version check. (#1872) 2016-09-28 12:36:25 -04:00
Eric
025b779a30 Fix sbang for perl (#1802)
* Perform shebang fix for all files

* Fix sbang for perl scripts

Otherwise perl would look at the #! line and call sbang again, resulting
in an infinite loop.
2016-09-22 00:43:47 -07:00
Adam J. Stewart
cc7df29e81 Keep dashes in command names, translate to underscores 2016-08-30 15:37:23 -05:00
Adam J. Stewart
ae2a803496 Make subcommands importable, '-' -> '_', fixes #1642 2016-08-30 15:36:33 -05:00
Todd Gamblin
2850ca60be Change spack --profile sort key for 2.6 compatibility. (#1656) 2016-08-29 09:56:54 -07:00
Todd Gamblin
bf1072c902 Make Spack core PEP8 compliant. 2016-08-10 16:33:37 -07:00
Todd Gamblin
ece72e5337 Merge pull request #1030 from opoplawski/external
Remove last two remaining from external imports
2016-06-26 22:41:58 -07:00
Todd Gamblin
27e9bc6d02 Make sbang handle lua
- use --! instead of #! for patched lua scripts.
2016-06-23 00:03:23 -07:00
Orion Poplawski
4952c4c7de Also remove from external from bin/spack 2016-06-08 14:22:26 -06:00
Gregory Becker
a2f90453f4 Fixed backwards compatibility for compilers.yaml config file 2016-05-26 20:30:05 -07:00
Todd Gamblin
e7ced54369 Correct LLNL LGPL license template for clarity. 2016-05-11 21:22:25 -07:00
alalazo
80678b2188 fix : proper update of config file (before it was discarding architectures that were not the current one) fixes #774 2016-04-12 16:54:51 +02:00
Todd Gamblin
fc6aa7374a Fix #104, #54: issues with overlong shebang in deep directories.
This does several things:

- Add `sbang`: a script to run scripts with long shebang lines.
  - Documentation for `sbang` is in `bin/sbang`.

- Add an `sbang` hook that filters the `bin` directory after install
  and modifies any scripts wtih shebangs that are too long to use
  `sbang` instead.

- `sbang` is at the top level, so it should be runnable (not much we
  can do if spack itself is too deep for shebang)
  - `sbang`, when used as the interpreter, runs the *second* shebang
    line it finds in a script.
  - shoud fix issues with too long shebang paths.
2016-03-05 04:18:48 -08:00
Adam J. Stewart
323bba99f1 Fix variable name bug 2016-01-25 09:29:51 -06:00
Todd Gamblin
8d6342c53d Merge branch 'mplegendre-multi_pkgsrc_roots' into develop
- This moves var/spack/packages to var/spack/repos/builtin/packages.

- Packages that did not exist in the source branch, or were changed in
  develop, were moved into var/spack/repos/builtin/packages as part of
  the integration.

Conflicts:
	lib/spack/spack/test/unit_install.py
	var/spack/repos/builtin/packages/clang/package.py
2016-01-19 01:16:08 -08:00
Todd Gamblin
c1e57e49ae Merge pull request #202 from scheibelp/features/unittest-xml-output-nose
Features/unittest xml output nose
2016-01-17 19:14:49 -08:00
Todd Gamblin
c65fd3a289 Merge branch 'develop' into mplegendre-multi_pkgsrc_roots
Conflicts:
	lib/spack/spack/cmd/create.py
	lib/spack/spack/cmd/extensions.py
	lib/spack/spack/cmd/fetch.py
	lib/spack/spack/cmd/uninstall.py
	lib/spack/spack/config.py
	lib/spack/spack/database.py
	lib/spack/spack/directory_layout.py
	lib/spack/spack/packages.py
	lib/spack/spack/spec.py
2015-12-25 16:35:55 -08:00
Mike Nolta
61f07b0c4d fix a few comment typos 2015-12-21 19:24:16 -05:00
Gregory L. Lee
107c0dd1a8 added option to enable pdb debug 2015-12-16 15:54:15 -08:00
Todd Gamblin
c41b9b7ddc Change github.com/scalability-llnl to github.com/llnl everywhere. 2015-12-09 01:24:15 -08:00
Peter Scheibel
b98b612204 Try to be more careful to only suppress the warning about nose already being
imported. Other warnings should be output.
2015-12-02 18:10:28 -08:00
Todd Gamblin
a338e0efd5 Fix spack.db -> spack.repo in bin/spack 2015-11-28 16:21:31 -08:00
Peter Scheibel
c5ed7e2a15 On systems which have already installed nose (perhaps an older version)
importing nose (which is also in Spack's external/ directory) outputs a warning
(since there is more than one nose package). This avoids printing the warning
to the user.
2015-11-25 18:33:52 -08:00
Todd Gamblin
894fcd90e7 Add a fix/warning so that stale .pyc files don't kill Spack.
- Can't think of a better way to do this.
- The externals integration will cause spack to die in weird ways for
  users who just pull from develop.
2015-11-23 17:49:39 -08:00
Todd Gamblin
55662eca69 Merge branch 'develop' into mplegendre-multi_pkgsrc_roots
Conflicts:
	lib/spack/spack/__init__.py
	lib/spack/spack/directives.py
	lib/spack/spack/packages.py
2015-11-12 15:16:06 -08:00
Peter Scheibel
6d7b26d4e0 Insert lib/spack/external into sys.path. This avoids cases where the system
python install and lib/spack/external have the same library installed. This
requires modifying the names of some modules in lib/spack/external in cases
where both the system python and backported features of future python versions
(i.e. after 2.6) are used (previously distinguished by "from external import X"
and "import X").
2015-11-11 18:04:22 -08:00
Todd Gamblin
58c5373890 update warning message for spack -k.
- warning said it didn't do checksums; really does.
2015-10-08 00:14:44 -07:00
Todd Gamblin
6dff42be09 WIP for Matt's branch 2015-09-17 00:21:33 -07:00
Todd Gamblin
53feb12ea0 Cleanup and consolidate error handling 2015-06-06 15:50:01 -07:00
Todd Gamblin
f813d823a1 Merge branch 'features/optional-deps' into develop
This includes:
- Much better variant support (+debug/-debug)
- Optional dependency support (depends_on(... , when='<condition>')
- New config file format (YAML in ~/.spack)
- New Spec format (YAML in $prefix/.spack/spec.yaml)
2015-05-18 16:16:20 -07:00
Todd Gamblin
76cb3eb7d2 Add help on specs to top of spack -h 2015-05-17 22:29:48 -07:00
Todd Gamblin
095ff1cb4a Add debug handler to print a stacktrace on Ctrl-C in debug mode. 2015-05-12 14:52:41 -07:00
Todd Gamblin
203fd861aa Allow spack install -j to throttle make jobs. 2015-04-07 22:21:19 -07:00
Todd Gamblin
93067d0d63 Add profile option to spack script. 2015-02-15 01:45:05 -08:00
Todd Gamblin
935eba2357 Allow commands to return error codes. 2015-01-05 02:33:15 -05:00
Todd Gamblin
ab3bf61903 Fix for SPACK-50
Bad format string in version check.
2014-12-19 11:09:37 -08:00
Todd Gamblin
55bf243f16 Improved website scraping. 2014-11-07 00:17:25 -08:00
Todd Gamblin
6fdfd83e6b Add test cases for mirroring. 2014-10-15 21:07:41 -04:00
Todd Gamblin
8cc2298181 Merge branch 'features/python-2.6-compatibility' into develop
- Changed 'import argparse' to 'from external import argparse' in conflicts.

Conflicts:
	lib/spack/spack/cmd/dotkit.py
	lib/spack/spack/cmd/unuse.py
	lib/spack/spack/cmd/use.py
2014-08-20 09:30:40 -07:00
Todd Gamblin
221cf6acb9 Consolidate most module code into spack.modules and spack.cmd.module
- One file with all the module classes (spack/modules.py)
  - Has an EnvModule superclass that does most of the work and consolidates common code
  - Subclasses have specializations for different module systems (TclModule, Dotkit)

- One command (spack module) for all the types of modules to use
  - the one command is used by the scripts, only need to maintain in one place
  - has some subcommands for different module types, but they're handled mostly generically.

- Consolidate zsh support into a single setup-env.sh script.
2014-08-16 14:53:57 -07:00
Todd Gamblin
48d5281e3a Test cases pass; Spack supports Python 2.6! 2014-08-10 18:07:20 -07:00
Todd Gamblin
7714d08e2e Remvoe dependence on v2.7 argparse by including argparse. 2014-08-10 11:48:07 -07:00
Todd Gamblin
0551638944 Add TAU package and routines to filter files, fix sed calls.
- TAU doesn't install to directories with '@' in the name.
- Need to fix up its scripts.
- routines to filter files as sed would, but using python regular expressions.
  - TAU package uses this.
2014-07-02 23:24:10 -07:00
Todd Gamblin
3c3f272280 spack mirror now checksums fetched archives. 2014-06-24 11:53:44 -07:00
Todd Gamblin
b6740cf1d1 Make debug and verbose output work properly. 2014-06-22 12:50:34 -07:00
Todd Gamblin
f784757113 Initial ability to swap compilers.
Fixes SPACK-16 and forces compiler script to build using compiler wrappers.

- works with gcc and clang on laptop.
2014-06-22 12:49:34 -07:00
Todd Gamblin
59a3b8dc67 Make SSL verification failures recommend spack -k
- Adds optional long message to SpackError
- tty now wraps long message text.
2014-04-13 16:38:15 -07:00
Todd Gamblin
81dc27bf41 Move packages and mock packages to /var/spack 2014-03-16 17:05:15 -07:00
Todd Gamblin
b8b334e86c New, more consistent package directory structure.
- Packages now live in <package_name>/package.py

- spack.packages refactored to use a PackageDB object instead of
  monolithic module.

- Implementation of mock_packages_test.py is greatly simplified

- Added test to exercise install/uninstall code because that wasn't
  covered by existing tests and kept breaking.
2014-03-16 14:51:03 -07:00
Todd Gamblin
9d01df9e8a Moving utilities to a common LLNL package. 2014-03-14 16:21:15 -07:00
Todd Gamblin
77aeac6501 Support github URLs 2014-03-13 14:51:28 -07:00
Todd Gamblin
0e38a9d16d Added a -k/--insecure option to make curl not check certs. 2014-03-13 14:24:47 -07:00
Todd Gamblin
3a152ed923 Script to make 'spack python' usable across platforms in shebang scripts. 2014-01-13 04:59:23 +01:00
Todd Gamblin
ce9b3511d0 Add license to python files and spack script. 2014-01-08 10:21:35 +01:00
Todd Gamblin
c9e40b725d Start of basic documentation 2013-12-12 04:25:31 -08:00
Todd Gamblin
9ef471420d Tweak for help output 2013-12-09 20:14:47 -08:00
Todd Gamblin
389fa1792d Added web spider capability for listing versions. 2013-11-23 13:04:36 -08:00
Todd Gamblin
618571b807 Checkpoint commit: much-improved spec class.
Still organizing things.
2013-10-07 17:57:27 -07:00
Todd Gamblin
5c761aafab Add checks for version 2.7 2013-06-02 13:54:46 -07:00
Todd Gamblin
340fe565d4 Use realpath in addition to expanduser to locate spack directory. 2013-05-15 16:47:50 -07:00
Todd Gamblin
453471cb05 Better help formatting. 2013-04-08 23:00:42 -07:00
Todd Gamblin
422d291b11 This adds support for multi-platform methods.
You can now do this:
class MyPackage(Package):
    def install(self):
        ...default install...

    @platform('bgqos_0')
    def install(self):
        ...specialized install for bgq...

This works on functions other than install, as well (as long as they're in a Package)
2013-04-04 10:22:49 -07:00
Todd Gamblin
e1551de976 Moved install-spack to its own simpler command. 2013-03-25 15:27:28 -07:00
Todd Gamblin
b224d249bb Print files that are in the way of install. 2013-03-25 11:30:11 -07:00
Todd Gamblin
3229e47e5d Adding install script 2013-03-25 11:25:27 -07:00
Todd Gamblin
27b9204785 Better spack -h: added cmd descriptions.
- each cmd has a desscription attribute that is used for the help strign in argparse.
2013-02-22 00:20:24 -08:00
Todd Gamblin
bd59689fdc Minor changes; loosened up parallel build for dwarf. 2013-02-21 19:27:27 -08:00
Todd Gamblin
2a908d6a0e Added help command and purge command. 2013-02-21 19:05:56 -08:00
Todd Gamblin
5d81cfdac6 Require python2.7 2013-02-18 23:52:50 -08:00
Todd Gamblin
38becacace Dependencies now work. Added libelf, libdwarf. 2013-02-18 23:46:04 -08:00
Todd Gamblin
cc76c0f5f9 Initial version of spack with one package: cmake 2013-02-13 17:50:44 -08:00