{"action":"created","comment":{"url":"https://api.github.com/repos/spack/spack/pulls/comments/230534472","pull_request_review_id":171296123,"id":230534472,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMDUzNDQ3Mg==","diff_hunk":"@@ -136,6 +158,12 @@ def do_uninstall(specs, force):\n             # want to uninstall.\n             spack.package.Package.uninstall_by_spec(item, force=True)\n \n+        if ev.active:\n+            try:\n+                ev.active.remove(item, force=True)\n+            except ev.EnvError:\n+                pass  # ignore errors from specs that are not roots","path":"lib/spack/spack/cmd/uninstall.py","position":142,"original_position":142,"commit_id":"c5383579a36a7b3cb9394eb251dea5f44c8c9af4","original_commit_id":"c5383579a36a7b3cb9394eb251dea5f44c8c9af4","user":{"login":"scheibelp","id":1659704,"node_id":"MDQ6VXNlcjE2NTk3MDQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1659704?v=4","gravatar_id":"","url":"https://api.github.com/users/scheibelp","html_url":"https://github.com/scheibelp","followers_url":"https://api.github.com/users/scheibelp/followers","following_url":"https://api.github.com/users/scheibelp/following{/other_user}","gists_url":"https://api.github.com/users/scheibelp/gists{/gist_id}","starred_url":"https://api.github.com/users/scheibelp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scheibelp/subscriptions","organizations_url":"https://api.github.com/users/scheibelp/orgs","repos_url":"https://api.github.com/users/scheibelp/repos","events_url":"https://api.github.com/users/scheibelp/events{/privacy}","received_events_url":"https://api.github.com/users/scheibelp/received_events","type":"User","site_admin":false},"body":"(clarification requested) The comment is tough for me to understand: `Environment.remove` complains if the specified Spec isn't in the environment, it seems like that should always be an error. Also it looks like `cmd.uninstall.find_matching_specs` will already complain if a Spec doesn't exist in an environment.","created_at":"2018-11-02T23:41:48Z","updated_at":"2018-11-02T23:49:31Z","html_url":"https://github.com/spack/spack/pull/9612#discussion_r230534472","pull_request_url":"https://api.github.com/repos/spack/spack/pulls/9612","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/spack/spack/pulls/comments/230534472"},"html":{"href":"https://github.com/spack/spack/pull/9612#discussion_r230534472"},"pull_request":{"href":"https://api.github.com/repos/spack/spack/pulls/9612"}}},"pull_request":{"url":"https://api.github.com/repos/spack/spack/pulls/9612","id":224962309,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI0OTYyMzA5","html_url":"https://github.com/spack/spack/pull/9612","diff_url":"https://github.com/spack/spack/pull/9612.diff","patch_url":"https://github.com/spack/spack/pull/9612.patch","issue_url":"https://api.github.com/repos/spack/spack/issues/9612","number":9612,"state":"open","locked":false,"title":"Spack Environments (part 4): command-line, spack.yaml, and spack.lock","user":{"login":"tgamblin","id":299842,"node_id":"MDQ6VXNlcjI5OTg0Mg==","avatar_url":"https://avatars3.githubusercontent.com/u/299842?v=4","gravatar_id":"","url":"https://api.github.com/users/tgamblin","html_url":"https://github.com/tgamblin","followers_url":"https://api.github.com/users/tgamblin/followers","following_url":"https://api.github.com/users/tgamblin/following{/other_user}","gists_url":"https://api.github.com/users/tgamblin/gists{/gist_id}","starred_url":"https://api.github.com/users/tgamblin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgamblin/subscriptions","organizations_url":"https://api.github.com/users/tgamblin/orgs","repos_url":"https://api.github.com/users/tgamblin/repos","events_url":"https://api.github.com/users/tgamblin/events{/privacy}","received_events_url":"https://api.github.com/users/tgamblin/received_events","type":"User","site_admin":false},"body":"This supersedes #8231, reworks the API, and adds a lot of features.\r\n\r\nSpack environments are fill a number of needs:\r\n\r\n1. Allow users to easily work with distinct sets of packages and configurations, e.g., for different projects or different types of deployments;\r\n2. Allow users to reproduce a set of packages someone else built, either:\r\n    a. Functionally, from the *abstract* specs of the prior installation (i.e., with an `spack.yaml` file)\r\n    b. Exactly, from the *concrete* specs that were previously installed (i.e., with what `bundler`, `npm`, `cargo`, and `pipenv` call a \"lockfile\")\r\n3. Allow users to interact with sets of specs easily on the command line;\r\n4. Allow users to easily version dependency and configuration information, e.g., in a git repository; and\r\n5. Provide an easier alternative to individually loading modules for packages with \"virtual environments\".\r\n\r\nI've attempted to refactor the code so that one basic `Environment` concept can provide all of these. This builds on the prior work by @scheibelp and @citibeth, and it attempts to integrate some of what is described at #7944.\r\n\r\nI think it is easiest to describe what's implemented here in terms of two workflows:\r\n\r\n## Command-line environment usage\r\n\r\nYou can use enviroments to work with a subset of packages, like you'd normally work with spack:\r\n\r\n```console\r\n$ spack env create myenv         # create an environment\r\n$ spack env list                 # what (named) environments are available?\r\n==> 3 environments\r\n    foo  my-env  my-project\r\n$ spack env activate -p myenv    # \"activate\" it (-p optionally sets the prompt)\r\n[myenv] $ spack find             # show packages that are in this environment\r\n==> 0 installed packages.\r\n[myenv] $ spack install libjpeg\r\n[myenv] $ spack find             # now one's installed\r\n==> 1 installed package.\r\n-- darwin-highsierra-x86_64 / clang@9.0.0-apple -----------------\r\nlibjpeg@9c\r\n[myenv] $ despacktivate          # deactivate (spack env deactivate also works :)\r\n$\r\n```\r\n\r\nYou can incrementally add things to environments:\r\n\r\n```console\r\n$ spack env create myenv\r\n$ spack env activate -p myenv\r\n[myenv] $ spack env add openmpi  # add some packages\r\n[myenv] $ spack env add hdf5\r\n[myenv] $ spack env add libelf\r\n[myenv] $ spack env status       # what've I done so far?\r\n==> In environment myenv\r\nadded:\r\n---- openmpi\r\n---- hdf5\r\n---- libelf\r\n[myenv] $ spack env install      # install the whole thing\r\n...\r\n[myenv] $ spack env status\r\n$ spack env status\r\n==> In environment my-env\r\nconcrete:\r\n---- libelf\r\n[+]  libelf@0.8.13%clang@9.0.0-apple arch=darwin-highsierra-x86_64\r\n---- openmpi\r\n[+]  openmpi@3.1.2%clang@9.0.0-apple~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=darwin-highsierra-x86_64\r\n---- hdf5\r\n[+]  hdf5@1.10.3%clang@9.0.0-apple~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=darwin-highsierra-x86_64\r\n[myenv] $ spack find\r\n-- darwin-highsierra-x86_64 / clang@9.0.0-apple -----------------\r\nhdf5@1.10.3  libelf@0.8.13  openmpi@3.1.2\r\n[myenv] $ despacktivate          # deactivate (spack env deactivate also works :)\r\n$\r\n```\r\n\r\nEnvironments also let you concretize groups of specs at the same time:\r\n\r\n```console\r\n$ spack env create myenv\r\n$ spack env activate -p myenv\r\n[myenv] $ spack env add openmpi  # add some packages\r\n[myenv] $ spack env add hdf5\r\n\r\n[myenv] $ spack env concretize.  # concretize everything that's added\r\n[myenv] $ spack env status\r\n$ spack env status\r\n==> In environment my-env\r\nconcrete:\r\n---- openmpi\r\n -   openmpi@3.1.2%clang@9.0.0-apple~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=darwin-highsierra-x86_64\r\n---- hdf5\r\n -   hdf5@1.10.3%clang@9.0.0-apple~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=darwin-highsierra-x86_64\r\n\r\n[myenv] $ spack env install      # install it all\r\n...\r\n[myenv] $ spack env status\r\n==> In environment my-env\r\nconcrete:\r\n---- openmpi\r\n[+]  openmpi@3.1.2%clang@9.0.0-apple~cuda+cxx_exceptions fabrics= ~java~legacylaunchers~memchecker~pmi schedulers= ~sqlite3~thread_multiple+vt arch=darwin-highsierra-x86_64\r\n---- hdf5\r\n[+]  hdf5@1.10.3%clang@9.0.0-apple~cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=darwin-highsierra-x86_64\r\n\r\n[myenv] $ despacktivate\r\n$\r\n```\r\n\r\nEnvironments are created, by default, in `$spack/var/spack/environments`, and you refer to them by name. You can also create environments external to Spack in directories:\r\n\r\n```console\r\nspack env create -d directory-environment\r\nspack env activate -d ./directory-environment   # -d isn't necessary unless ambiguous\r\n```\r\n\r\nAlso, you don't *have* to activate them to use them.  Spack has a new\r\n`-e` / `--env` option you can use to execute any Spack command in a\r\nspecific environment:\r\n\r\n```console\r\n$ spack -e myenv find\r\n-- darwin-highsierra-x86_64 / clang@9.0.0-apple -----------------\r\nhdf5@1.10.3  libelf@0.8.13  openmpi@3.1.2\r\n```\r\n\r\n## `spack.yaml` / `spack.lock`: environments in the filesystem\r\n\r\n\"Named\" environments in `var/spack/environments` and directory environments are both just directories with two special files: `spack.yaml` and `spack.lock`.\r\n\r\n### `spack.yaml`\r\n\r\n`spack.yaml` describes the specs you want in your environment.  It's created when you do `spack env create <name>`, and it describes the specs you've added so far:\r\n\r\n```yaml\r\n# This is a Spack Environment file.\r\n#\r\n# It describes a set of packages to be installed, along with\r\n# configuration settings.\r\nspack:\r\n  # add package specs to the `specs` list\r\n  specs:\r\n  - hdf5\r\n  - libelf\r\n  - openmpi\r\n```\r\n\r\nThis is what other project dependency managers call a *manifest* file --\r\na list of the things you want to install with a project.  You can\r\nmaintain it by hand, or `spack env create`, `spack env add`, and `spack\r\nenv remove`, `spack install`, etc. will all update the `spack.yaml` file\r\nwhen you use them.\r\n\r\nIn Spack, the `spack.yaml` file can also contain configuration:\r\n\r\n```yaml\r\n# This is a Spack Environment file.\r\n#\r\n# It describes a set of packages to be installed, along with\r\n# configuration settings.\r\nspack:\r\n  repos:\r\n  - file:///usr/local/spack-repo\r\n\r\n  # compiler locations for just this environment\r\n  compilers:\r\n    # ...\r\n\r\n  # set custom stage areas for the environment\r\n  config:\r\n    template_dirs:\r\n    - /path/to/my/local/module/templates\r\n    build_stage:\r\n    - /usr/workspace/myusername\r\n\r\n  # package settings\r\n  packages:\r\n    all:\r\n      compiler: [clang]\r\n      providers:\r\n        mpi: [openmpi]\r\n\r\n  # add package specs to the `specs` list\r\n  specs:\r\n  - hdf5\r\n  - libelf\r\n  - openmpi\r\n```\r\n\r\nThe sections in the file can be anything from the regular Spack\r\n[configuration files](https://spack.readthedocs.io/en/latest/configuration.html),\r\nso you can do some sophisticated things here if you're creative.  You can\r\nalso include configs from elsewhere:\r\n\r\n```yaml\r\nspack:\r\n  # include external configuration\r\n  include:\r\n  - ../special-config-directory/\r\n  - ./config-file.yaml\r\n\r\n  # add package specs to the `specs` list\r\n  specs:\r\n  - hdf5\r\n  - libelf\r\n  - openmpi\r\n```\r\n\r\nThe included items can either be Spack configuration scopes (directories\r\nwith `packages.yaml`, `config.yaml`, `compilers.yaml`, etc.) or files\r\nwith all of those config sections merged into a single file (like in the\r\n`spack.yaml` file above).\r\n\r\nNotice that you can have relative paths. Those are relative to the\r\n`spack.yaml` file, so you can put it and its associated configuration in\r\na git repository if you want to.\r\n\r\n`spack install`, `spack spec`, and other commands will use the\r\nconfiguration from your environment if it is active.  So you can easily\r\nmaintain multiple sets of configurations in environments, then switch\r\nquickly between them by activating the one you want to use..\r\n\r\n### `spack.yaml` in code repositories\r\n\r\nAs is common elsewhere in the dependnecy management world (Pipenv, Cargo,\r\nBundler, etc.), you can put a `spack.yaml` file *in* your project's\r\nrepository and use it to make bootstrapping dependencies easier for your\r\nusers:\r\n\r\n```\r\n$ git clone https://github.com/myproj/myproj.git\r\n$ cd myproj\r\n$ ls\r\nCONTRIBUTING.md  LICENSE  README.md  configure*  m4/  spack.yaml  src/\r\n$ spack install\r\n# ... all dependencies from spack.yaml are installed ...\r\n```\r\n\r\n`spack install`, when called without arguments in a repo that has a\r\n`spack.yaml`, will concretize and install all the specs in the\r\n`spack.yaml` file.\r\n\r\nWe chose the name `spack.yaml` to make it clear that this is a file that\r\nSpack understands, and so that it would be distinct from other files at\r\nthe top level of a repo.\r\n\r\n### `spack.lock` and reproducing environments\r\n\r\nThe `spack.lock` \"lockfile\" is created whenever you install or concretize\r\nan environment.  If you run `spack install` as suggested in the previous\r\nsection, it will produce a file called `spack.lock` alongside\r\n`spack.yaml`.  This contains *both* the abstract specs that were used to\r\ninstall the packages, *and* the full, concretized specs of these packages\r\nand their dependencies.  It's intended to allow you to reproduce an\r\nenvironment *exactly* as it was built by someone else.\r\n\r\nIf you send someone a `spack.yaml` or `spack.lock` file, they can create\r\na new environment from these files with commands like these:\r\n\r\n```console\r\nspack env create myenv spack.yaml\r\n```\r\n\r\nor:\r\n```\r\nspack env create myenv spack.lock\r\n```\r\n\r\nIf you create an environment from `spack.yaml`, you'll get a new\r\nenvironment with the same root specs (like a pip requirements file), and\r\nit will be re-concretized when you install it on a new machine. If you\r\ncreate it from `spack.lock`, you'll get that *and* the concrete specs to\r\nreproduce things exactly.  Currently that has to be *completely* exact,\r\nbut in the future we'll support generating something \"as close as\r\npossible\" to the original environment on a new host.\r\n\r\n### Using environments\r\n\r\nYou can currently use environments by running `spack env loads` and\r\nsourcing the resulting file:\r\n\r\n```console\r\n$ spack env loads myenv\r\nTo load this environment, type:\r\n   source /Users/spackuser/src/spack/var/spack/environments/myenv/loads\r\n```\r\n\r\n`spack env loads` generates a single file with `module load` calls for\r\nall packages in the environment.  You need a module system in your\r\nenvironment to use it.\r\n\r\n**TODO: views** We will *also* be adding a view to each environment. A\r\n  view is a single prefix with all packages symlinked into it, like a\r\n  Python virtual environment.  Activating an environment will add paths\r\n  for this directory. @scheibelp will be adding that after he reviews\r\n  this PR.\r\n\r\n## Some more technical details\r\n\r\nOn a technical level, this differs from the prior implementation in #8231 in a few important ways:\r\n1. There's only one manifest file format -- `spack.yaml`, and you can use it to initialize a new environment or to control an existing one.\r\n2. `spack.yaml` is updated with new abstract specs when you use `spack env add`, `spack env remove`, etc., and comments are preserved through these updates.\r\n3. `spack.lock` always contains the results of the last time the environment was concretized (both inputs and outputs).  `spack.yaml` is the human-editable file with inputs, and `spack.lock` is machine-readable and exact.  They're kept in sync.\r\n4. The command line is a bit different, but I hope that the activation concept along with embedding environment commands in regular Spack commands (`spack find`, `spack spec`, etc.) solves most of the issues.\r\n\r\n## Summary:\r\n\r\n- [x] Move the old `spack env` command to `spack build-env`\r\n- [x] Add a new `spack env` command:\r\n    - **creating and querying environments:**\r\n        - [x] `spack env create ENV`: create a new environment\r\n        - [x] `spack env destroy ENV`:  destroy an environment\r\n        - [x] `spack env list`: list available environments\r\n        - [x] `spack env status [ENV]` get a list of what's been added/installed to this environment\r\n    - **activating and deactivating environments:**\r\n        - [x] `spack env activate ENV`: activate the named environment (makes ENV args implicit)\r\n        - [x] `spack env deactivate` OR `despacktivate`: deactivate the currently activated environment\r\n    - **installing, adding/removing specs, etc:**\r\n        - [x] `spack env add SPEC`: add a spec to the current environment\r\n        - [x] `spack env remove SPEC`: remove a spec from the current environment\r\n        - [x] `spack env install`: concretize (see below) and install all specs in an environment (you can optionally just install *already* concretized specs)\r\n        - [x] `spack env concretize [ENV]`: concretize all specs in the environment and write a `spack.lock` file\r\n    - **environment functionality embedded in regular Spack commands:**\r\n        - [x] `spack install SPEC`: if an environment is activated, this now installs *into* the active environment\r\n        - [x] `spack install`: if a `spack.yaml` file is found in the current directory, this concretizes and installs all specs in that `yaml` file -- so you can keep an environment in a git repo outside Spack.\r\n        - [x] `spack find`: if an environment is active, `spack find` shows only specs installed in the current environment\r\n        - [x] `spack spec`: if an environment is active, `spack spec` and other commands concretize *using configuration from the active environment*\r\n    - **other, miscellaneous commands:**\r\n        - [x] `spack env loads [ENV]`: generate a script that loads all modules for an environment\r\n        - [x] `spack env stage [ENV]`: stage all specs in an environment\r\n        - [x] `spack location -e ENV`: get the location of an environment\r\n        - [x] `spack cd -e ENV`: cd to an environment's directory\r\n        - [x] `spack env uninstall`: uninstall all specs from an environment\r\n\r\n- [x] The `spack` command itself now has a `-e` option that you can use to specify an environment on the command line.  This takes precedence over the current environment from `spack env activate ENV`\r\n\r\n\r\nTODO:\r\n- [ ] add view to environment, add view directories to PATH, PYTHONPATH, etc. on activate (@scheibelp)\r\n- [ ] update documentation (docs still deal with old Spack environments)\r\n","created_at":"2018-10-23T09:27:38Z","updated_at":"2018-11-02T23:49:31Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6cdce276005e0d6a4704fded1c8ce82ce251e6a0","assignee":{"login":"tgamblin","id":299842,"node_id":"MDQ6VXNlcjI5OTg0Mg==","avatar_url":"https://avatars3.githubusercontent.com/u/299842?v=4","gravatar_id":"","url":"https://api.github.com/users/tgamblin","html_url":"https://github.com/tgamblin","followers_url":"https://api.github.com/users/tgamblin/followers","following_url":"https://api.github.com/users/tgamblin/following{/other_user}","gists_url":"https://api.github.com/users/tgamblin/gists{/gist_id}","starred_url":"https://api.github.com/users/tgamblin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgamblin/subscriptions","organizations_url":"https://api.github.com/users/tgamblin/orgs","repos_url":"https://api.github.com/users/tgamblin/repos","events_url":"https://api.github.com/users/tgamblin/events{/privacy}","received_events_url":"https://api.github.com/users/tgamblin/received_events","type":"User","site_admin":false},"assignees":[{"login":"tgamblin","id":299842,"node_id":"MDQ6VXNlcjI5OTg0Mg==","avatar_url":"https://avatars3.githubusercontent.com/u/299842?v=4","gravatar_id":"","url":"https://api.github.com/users/tgamblin","html_url":"https://github.com/tgamblin","followers_url":"https://api.github.com/users/tgamblin/followers","following_url":"https://api.github.com/users/tgamblin/following{/other_user}","gists_url":"https://api.github.com/users/tgamblin/gists{/gist_id}","starred_url":"https://api.github.com/users/tgamblin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgamblin/subscriptions","organizations_url":"https://api.github.com/users/tgamblin/orgs","repos_url":"https://api.github.com/users/tgamblin/repos","events_url":"https://api.github.com/users/tgamblin/events{/privacy}","received_events_url":"https://api.github.com/users/tgamblin/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"ax3l","id":1353258,"node_id":"MDQ6VXNlcjEzNTMyNTg=","avatar_url":"https://avatars3.githubusercontent.com/u/1353258?v=4","gravatar_id":"","url":"https://api.github.com/users/ax3l","html_url":"https://github.com/ax3l","followers_url":"https://api.github.com/users/ax3l/followers","following_url":"https://api.github.com/users/ax3l/following{/other_user}","gists_url":"https://api.github.com/users/ax3l/gists{/gist_id}","starred_url":"https://api.github.com/users/ax3l/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ax3l/subscriptions","organizations_url":"https://api.github.com/users/ax3l/orgs","repos_url":"https://api.github.com/users/ax3l/repos","events_url":"https://api.github.com/users/ax3l/events{/privacy}","received_events_url":"https://api.github.com/users/ax3l/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":446623646,"node_id":"MDU6TGFiZWw0NDY2MjM2NDY=","url":"https://api.github.com/repos/spack/spack/labels/concretization","name":"concretization","color":"006b75","default":false},{"id":446630669,"node_id":"MDU6TGFiZWw0NDY2MzA2Njk=","url":"https://api.github.com/repos/spack/spack/labels/dependencies","name":"dependencies","color":"c2e0c6","default":false},{"id":537065486,"node_id":"MDU6TGFiZWw1MzcwNjU0ODY=","url":"https://api.github.com/repos/spack/spack/labels/environments","name":"environments","color":"d4c5f9","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/spack/spack/pulls/9612/commits","review_comments_url":"https://api.github.com/repos/spack/spack/pulls/9612/comments","review_comment_url":"https://api.github.com/repos/spack/spack/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spack/spack/issues/9612/comments","statuses_url":"https://api.github.com/repos/spack/spack/statuses/c5383579a36a7b3cb9394eb251dea5f44c8c9af4","head":{"label":"spack:features/environments-4","ref":"features/environments-4","sha":"c5383579a36a7b3cb9394eb251dea5f44c8c9af4","user":{"login":"spack","id":25539161,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NTM5MTYx","avatar_url":"https://avatars2.githubusercontent.com/u/25539161?v=4","gravatar_id":"","url":"https://api.github.com/users/spack","html_url":"https://github.com/spack","followers_url":"https://api.github.com/users/spack/followers","following_url":"https://api.github.com/users/spack/following{/other_user}","gists_url":"https://api.github.com/users/spack/gists{/gist_id}","starred_url":"https://api.github.com/users/spack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spack/subscriptions","organizations_url":"https://api.github.com/users/spack/orgs","repos_url":"https://api.github.com/users/spack/repos","events_url":"https://api.github.com/users/spack/events{/privacy}","received_events_url":"https://api.github.com/users/spack/received_events","type":"Organization","site_admin":false},"repo":{"id":15730865,"node_id":"MDEwOlJlcG9zaXRvcnkxNTczMDg2NQ==","name":"spack","full_name":"spack/spack","private":false,"owner":{"login":"spack","id":25539161,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NTM5MTYx","avatar_url":"https://avatars2.githubusercontent.com/u/25539161?v=4","gravatar_id":"","url":"https://api.github.com/users/spack","html_url":"https://github.com/spack","followers_url":"https://api.github.com/users/spack/followers","following_url":"https://api.github.com/users/spack/following{/other_user}","gists_url":"https://api.github.com/users/spack/gists{/gist_id}","starred_url":"https://api.github.com/users/spack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spack/subscriptions","organizations_url":"https://api.github.com/users/spack/orgs","repos_url":"https://api.github.com/users/spack/repos","events_url":"https://api.github.com/users/spack/events{/privacy}","received_events_url":"https://api.github.com/users/spack/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/spack/spack","description":"A flexible package manager that supports multiple versions, configurations, platforms, and compilers.","fork":false,"url":"https://api.github.com/repos/spack/spack","forks_url":"https://api.github.com/repos/spack/spack/forks","keys_url":"https://api.github.com/repos/spack/spack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spack/spack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spack/spack/teams","hooks_url":"https://api.github.com/repos/spack/spack/hooks","issue_events_url":"https://api.github.com/repos/spack/spack/issues/events{/number}","events_url":"https://api.github.com/repos/spack/spack/events","assignees_url":"https://api.github.com/repos/spack/spack/assignees{/user}","branches_url":"https://api.github.com/repos/spack/spack/branches{/branch}","tags_url":"https://api.github.com/repos/spack/spack/tags","blobs_url":"https://api.github.com/repos/spack/spack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spack/spack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spack/spack/git/refs{/sha}","trees_url":"https://api.github.com/repos/spack/spack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spack/spack/statuses/{sha}","languages_url":"https://api.github.com/repos/spack/spack/languages","stargazers_url":"https://api.github.com/repos/spack/spack/stargazers","contributors_url":"https://api.github.com/repos/spack/spack/contributors","subscribers_url":"https://api.github.com/repos/spack/spack/subscribers","subscription_url":"https://api.github.com/repos/spack/spack/subscription","commits_url":"https://api.github.com/repos/spack/spack/commits{/sha}","git_commits_url":"https://api.github.com/repos/spack/spack/git/commits{/sha}","comments_url":"https://api.github.com/repos/spack/spack/comments{/number}","issue_comment_url":"https://api.github.com/repos/spack/spack/issues/comments{/number}","contents_url":"https://api.github.com/repos/spack/spack/contents/{+path}","compare_url":"https://api.github.com/repos/spack/spack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spack/spack/merges","archive_url":"https://api.github.com/repos/spack/spack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spack/spack/downloads","issues_url":"https://api.github.com/repos/spack/spack/issues{/number}","pulls_url":"https://api.github.com/repos/spack/spack/pulls{/number}","milestones_url":"https://api.github.com/repos/spack/spack/milestones{/number}","notifications_url":"https://api.github.com/repos/spack/spack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spack/spack/labels{/name}","releases_url":"https://api.github.com/repos/spack/spack/releases{/id}","deployments_url":"https://api.github.com/repos/spack/spack/deployments","created_at":"2014-01-08T09:22:12Z","updated_at":"2018-11-02T20:31:58Z","pushed_at":"2018-11-02T23:07:30Z","git_url":"git://github.com/spack/spack.git","ssh_url":"git@github.com:spack/spack.git","clone_url":"https://github.com/spack/spack.git","svn_url":"https://github.com/spack/spack","homepage":"https://spack.io","size":48135,"stargazers_count":694,"watchers_count":694,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":535,"mirror_url":null,"archived":false,"open_issues_count":1096,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":535,"open_issues":1096,"watchers":694,"default_branch":"develop"}},"base":{"label":"spack:develop","ref":"develop","sha":"a33d123e2eb3f3f4ab8f8c1a692a76b9f600d0aa","user":{"login":"spack","id":25539161,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NTM5MTYx","avatar_url":"https://avatars2.githubusercontent.com/u/25539161?v=4","gravatar_id":"","url":"https://api.github.com/users/spack","html_url":"https://github.com/spack","followers_url":"https://api.github.com/users/spack/followers","following_url":"https://api.github.com/users/spack/following{/other_user}","gists_url":"https://api.github.com/users/spack/gists{/gist_id}","starred_url":"https://api.github.com/users/spack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spack/subscriptions","organizations_url":"https://api.github.com/users/spack/orgs","repos_url":"https://api.github.com/users/spack/repos","events_url":"https://api.github.com/users/spack/events{/privacy}","received_events_url":"https://api.github.com/users/spack/received_events","type":"Organization","site_admin":false},"repo":{"id":15730865,"node_id":"MDEwOlJlcG9zaXRvcnkxNTczMDg2NQ==","name":"spack","full_name":"spack/spack","private":false,"owner":{"login":"spack","id":25539161,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1NTM5MTYx","avatar_url":"https://avatars2.githubusercontent.com/u/25539161?v=4","gravatar_id":"","url":"https://api.github.com/users/spack","html_url":"https://github.com/spack","followers_url":"https://api.github.com/users/spack/followers","following_url":"https://api.github.com/users/spack/following{/other_user}","gists_url":"https://api.github.com/users/spack/gists{/gist_id}","starred_url":"https://api.github.com/users/spack/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spack/subscriptions","organizations_url":"https://api.github.com/users/spack/orgs","repos_url":"https://api.github.com/users/spack/repos","events_url":"https://api.github.com/users/spack/events{/privacy}","received_events_url":"https://api.github.com/users/spack/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/spack/spack","description":"A flexible package manager that supports multiple versions, configurations, platforms, and compilers.","fork":false,"url":"https://api.github.com/repos/spack/spack","forks_url":"https://api.github.com/repos/spack/spack/forks","keys_url":"https://api.github.com/repos/spack/spack/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spack/spack/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spack/spack/teams","hooks_url":"https://api.github.com/repos/spack/spack/hooks","issue_events_url":"https://api.github.com/repos/spack/spack/issues/events{/number}","events_url":"https://api.github.com/repos/spack/spack/events","assignees_url":"https://api.github.com/repos/spack/spack/assignees{/user}","branches_url":"https://api.github.com/repos/spack/spack/branches{/branch}","tags_url":"https://api.github.com/repos/spack/spack/tags","blobs_url":"https://api.github.com/repos/spack/spack/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spack/spack/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spack/spack/git/refs{/sha}","trees_url":"https://api.github.com/repos/spack/spack/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spack/spack/statuses/{sha}","languages_url":"https://api.github.com/repos/spack/spack/languages","stargazers_url":"https://api.github.com/repos/spack/spack/stargazers","contributors_url":"https://api.github.com/repos/spack/spack/contributors","subscribers_url":"https://api.github.com/repos/spack/spack/subscribers","subscription_url":"https://api.github.com/repos/spack/spack/subscription","commits_url":"https://api.github.com/repos/spack/spack/commits{/sha}","git_commits_url":"https://api.github.com/repos/spack/spack/git/commits{/sha}","comments_url":"https://api.github.com/repos/spack/spack/comments{/number}","issue_comment_url":"https://api.github.com/repos/spack/spack/issues/comments{/number}","contents_url":"https://api.github.com/repos/spack/spack/contents/{+path}","compare_url":"https://api.github.com/repos/spack/spack/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spack/spack/merges","archive_url":"https://api.github.com/repos/spack/spack/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spack/spack/downloads","issues_url":"https://api.github.com/repos/spack/spack/issues{/number}","pulls_url":"https://api.github.com/repos/spack/spack/pulls{/number}","milestones_url":"https://api.github.com/repos/spack/spack/milestones{/number}","notifications_url":"https://api.github.com/repos/spack/spack/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spack/spack/labels{/name}","releases_url":"https://api.github.com/repos/spack/spack/releases{/id}","deployments_url":"https://api.github.com/repos/spack/spack/deployments","created_at":"2014-01-08T09:22:12Z","updated_at":"2018-11-02T20:31:58Z","pushed_at":"2018-11-02T23:07:30Z","git_url":"git://github.com/spack/spack.git","ssh_url":"git@github.com:spack/spack.git","clone_url":"https://github.com/spack/spack.git","svn_url":"https://github.com/spack/spack","homepage":"https://spack.io","size":48135,"stargazers_count":694,"watchers_count":694,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":535,"mirror_url":null,"archived":false,"open_issues_count":1096,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":535,"open_issues":1096,"watchers":694,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/spack/spack/pulls/9612"},"html":{"href":"https://github.com/spack/spack/pull/9612"},"issue":{"href":"https://api.github.com/repos/spack/spack/issues/9612"},"comments":{"href":"https://api.github.com/repos/spack/spack/issues/9612/comments"},"review_comments":{"href":"https://api.github.com/repos/spack/spack/pulls/9612/comments"},"review_comment":{"href":"https://api.github.com/repos/spack/spack/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spack/spack/pulls/9612/commits"},"statuses":{"href":"https://api.github.com/repos/spack/spack/statuses/c5383579a36a7b3cb9394eb251dea5f44c8c9af4"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"scheibelp"}}