[ARVADOS] updated: 1db007eb53d0401a7a0ba168add7c4a094790fa5

git at public.curoverse.com git at public.curoverse.com
Fri May 23 12:04:30 EDT 2014


Summary of changes:
 .gitignore                                         |   2 +
 apps/workbench/.gitignore                          |   7 +
 apps/workbench/Gemfile                             |  23 +-
 apps/workbench/Gemfile.lock                        | 155 ++--
 .../api_client_authorizations.js.coffee            |   3 -
 .../assets/javascripts/authorized_keys.js.coffee   |   3 -
 .../app/assets/javascripts/collections.js          |   1 -
 .../app/assets/javascripts/folders.js.coffee       |   3 -
 .../app/assets/javascripts/groups.js.coffee        |   3 -
 .../app/assets/javascripts/humans.js.coffee        |   3 -
 .../app/assets/javascripts/job_tasks.js.coffee     |   3 -
 .../app/assets/javascripts/jobs.js.coffee          |   3 -
 .../app/assets/javascripts/keep_disks.js.coffee    |  31 +-
 .../app/assets/javascripts/links.js.coffee         |   3 -
 .../app/assets/javascripts/logs.js.coffee          |   3 -
 .../app/assets/javascripts/nodes.js.coffee         |   3 -
 .../app/assets/javascripts/pipeline_instances.js   |   1 -
 .../javascripts/pipeline_templates.js.coffee       |   3 -
 .../app/assets/javascripts/repositories.js.coffee  |   3 -
 .../app/assets/javascripts/sessions.js.coffee      |   3 -
 apps/workbench/app/assets/javascripts/sizing.js    |   2 +-
 .../app/assets/javascripts/specimens.js.coffee     |   3 -
 .../app/assets/javascripts/traits.js.coffee        |   3 -
 .../assets/javascripts/user_agreements.js.coffee   |   3 -
 .../app/assets/javascripts/users.js.coffee         |   3 -
 .../assets/javascripts/virtual_machines.js.coffee  |   3 -
 .../app/assets/stylesheets/collections.css.scss    |  46 ++
 .../app/assets/stylesheets/keep_disks.css.scss     |   8 +
 .../app/controllers/actions_controller.rb          |   2 +-
 .../api_client_authorizations_controller.rb        |  13 -
 .../app/controllers/application_controller.rb      |  42 +-
 .../app/controllers/collections_controller.rb      | 157 ++--
 apps/workbench/app/controllers/jobs_controller.rb  |   7 +-
 .../app/controllers/keep_disks_controller.rb       |  47 ++
 .../app/controllers/keep_services_controller.rb    |   2 +
 .../controllers/pipeline_instances_controller.rb   |   2 +-
 .../app/controllers/sessions_controller.rb         |   2 +-
 apps/workbench/app/controllers/users_controller.rb |  10 +-
 apps/workbench/app/helpers/application_helper.rb   |  13 +
 .../app/helpers/arvados_api_client_helper.rb       |  13 +
 apps/workbench/app/models/arvados_api_client.rb    |  43 +-
 apps/workbench/app/models/arvados_base.rb          |  60 +-
 apps/workbench/app/models/arvados_resource_list.rb |   7 +-
 apps/workbench/app/models/collection.rb            |  25 +-
 apps/workbench/app/models/group.rb                 |   4 +-
 apps/workbench/app/models/job.rb                   |   4 +
 .../app/models/{keep_disk.rb => keep_service.rb}   |   2 +-
 apps/workbench/app/models/pipeline_instance.rb     |   3 +-
 apps/workbench/app/models/user.rb                  |  26 +-
 apps/workbench/app/models/user_agreement.rb        |   8 +-
 .../application/_pipeline_status_label.html.erb    |   6 +-
 .../app/views/application/_show_metadata.html.erb  |   4 +-
 .../app/views/collections/_sharing_button.html.erb |  17 +
 .../app/views/collections/_sharing_popup.html.erb  |  37 -
 .../app/views/collections/_show_files.html.erb     | 114 ++-
 .../app/views/collections/_show_jobs.html.erb      |  64 --
 .../views/collections/_show_provenance.html.erb    |  84 --
 .../views/collections/_show_source_data.html.erb   |  44 -
 .../app/views/collections/sharing_popup.js.erb     |   1 -
 apps/workbench/app/views/collections/show.html.erb | 111 +++
 .../app/views/collections/show_file_links.html.erb |  82 ++
 apps/workbench/app/views/folders/show.html.erb     |  60 +-
 .../workbench/app/views/jobs/_show_recent.html.erb |   6 +-
 .../app/views/keep_disks/_content_layout.html.erb  |  21 +
 .../app/views/layouts/application.html.erb         |  13 +-
 apps/workbench/app/views/links/_recent.html.erb    |   2 +-
 .../pipeline_instances/_show_components.html.erb   |  27 +-
 .../views/pipeline_instances/_show_recent.html.erb |   8 +-
 .../app/views/pipeline_instances/show.js.erb       |   6 +-
 .../workbench/app/views/users/_show_admin.html.erb |   2 +-
 apps/workbench/app/views/users/_tables.html.erb    |   2 +-
 apps/workbench/app/views/users/welcome.html.erb    |   2 +-
 apps/workbench/app/views/websocket/index.html.erb  |   2 +-
 apps/workbench/config/application.default.yml      |  14 +-
 apps/workbench/config/application.rb               |  15 +-
 .../config/environments/development.rb.example     |  12 +-
 .../config/environments/production.rb.example      |   6 +-
 apps/workbench/config/environments/test.rb.example |   6 -
 .../config/initializers/zzz_arvados_api_client.rb  |   8 -
 .../zza_load_config.rb => load_config.rb}          |   0
 apps/workbench/config/routes.rb                    |  12 +-
 apps/workbench/public/robots.txt                   |   2 -
 .../test/functional/collections_controller_test.rb |  80 +-
 .../workbench/test/integration/collections_test.rb |  36 +-
 apps/workbench/test/integration/folders_test.rb    |   4 +-
 apps/workbench/test/integration/users_test.rb      |   7 +-
 apps/workbench/test/integration_helper.rb          |  19 +
 apps/workbench/test/test_helper.rb                 | 116 ++-
 apps/workbench/test/unit/collection_test.rb        |  27 +
 .../test/unit/helpers/collections_helper_test.rb   |   8 +
 doc/_config.yml                                    |   7 +-
 doc/api/index.html.textile.liquid                  |   2 -
 doc/api/methods.html.textile.liquid                |  39 +-
 doc/api/methods/keep_services.html.textile.liquid  |  75 ++
 doc/api/methods/logs.html.textile.liquid           |  22 +-
 doc/api/schema/Collection.html.textile.liquid      |   2 +-
 doc/api/schema/Job.html.textile.liquid             |   1 +
 doc/api/schema/KeepDisk.html.textile.liquid        |   4 +-
 doc/api/schema/KeepService.html.textile.liquid     |  24 +
 doc/install/index.html.md.liquid                   |  18 -
 doc/install/index.html.textile.liquid              |  18 +
 doc/install/install-api-server.html.textile.liquid |   5 +-
 .../install-crunch-dispatch.html.textile.liquid    |  44 +-
 doc/install/install-sso.html.textile.liquid        |   3 +-
 .../install-workbench-app.html.textile.liquid      |  41 +-
 doc/sdk/index.html.textile.liquid                  |   3 +-
 doc/sdk/java/index.html.textile.liquid             | 140 ++++
 doc/sdk/perl/index.html.textile.liquid             |   2 +-
 doc/sdk/python/sdk-python.html.textile.liquid      |  11 +-
 doc/sdk/ruby/index.html.textile.liquid             |   2 +-
 docker/build_tools/Makefile                        |  10 +
 docker/jobs/Dockerfile                             |  20 +
 sdk/cli/arvados-cli.gemspec                        |   1 +
 sdk/cli/bin/arv                                    |  11 +-
 sdk/cli/bin/arv-run-pipeline-instance              |  88 +-
 sdk/cli/bin/crunch-job                             |  82 +-
 sdk/cli/test/test_arv-run-pipeline-instance.rb     |  33 +
 {services/keep => sdk/go}/build.sh                 |   9 +-
 sdk/go/src/arvados.org/keepclient/hashcheck.go     |  77 ++
 .../src/arvados.org/keepclient/hashcheck_test.go   |  85 ++
 sdk/go/src/arvados.org/keepclient/keepclient.go    | 206 +++++
 .../src/arvados.org/keepclient/keepclient_test.go  | 677 ++++++++++++++++
 sdk/go/src/arvados.org/keepclient/support.go       | 255 ++++++
 sdk/go/src/arvados.org/streamer/streamer.go        | 130 +++
 sdk/go/src/arvados.org/streamer/streamer_test.go   | 366 +++++++++
 sdk/go/src/arvados.org/streamer/transfer.go        | 308 +++++++
 sdk/java/.classpath                                |  21 +
 sdk/java/.project                                  |  14 +
 sdk/java/.settings/org.eclipse.jdt.core.prefs      |   5 +
 sdk/java/ArvadosSDKJavaExample.java                |  80 ++
 sdk/java/ArvadosSDKJavaExampleWithPrompt.java      | 123 +++
 sdk/java/README                                    |   4 +
 sdk/java/pom.xml                                   | 106 +++
 .../main/java/org/arvados/sdk/java/Arvados.java    | 403 ++++++++++
 .../java/org/arvados/sdk/java/MethodDetails.java   |  22 +
 sdk/java/src/main/resources/log4j.properties       |  11 +
 .../java/org/arvados/sdk/java/ArvadosTest.java     | 420 ++++++++++
 sdk/java/src/test/resources/first_pipeline.json    |  16 +
 sdk/perl/lib/Arvados.pm                            |   2 +-
 sdk/perl/lib/Arvados/Request.pm                    |   9 +-
 sdk/python/.gitignore                              |   1 -
 sdk/python/arvados/api.py                          |   7 +-
 sdk/python/arvados/events.py                       |  33 +
 sdk/python/arvados/fuse.py                         | 317 --------
 sdk/python/arvados/keep.py                         |  38 +-
 sdk/python/bin/arv-mount                           |  67 --
 sdk/python/build.sh                                |  16 -
 sdk/python/requirements.txt                        |  11 +-
 sdk/python/run_test_server.py                      | 221 +++++
 sdk/python/{setup.py.src => setup.py}              |   8 +-
 sdk/python/test_keep_client.py                     |  23 +-
 sdk/python/test_mount.py                           | 153 ----
 sdk/python/test_pipeline_template.py               |  18 +-
 sdk/python/test_websockets.py                      |  32 +
 sdk/ruby/.gitignore                                |   1 +
 sdk/ruby/Gemfile.lock                              |  58 --
 sdk/ruby/arvados.gemspec                           |   1 +
 sdk/ruby/lib/arvados.rb                            |   7 +-
 services/api/.gitignore                            |   6 +
 services/api/Gemfile                               |   6 +-
 services/api/Gemfile.lock                          |  20 +-
 services/api/Rakefile                              |   6 +
 .../arvados/v1/collections_controller.rb           |  62 +-
 .../arvados/v1/keep_services_controller.rb         |  21 +
 .../controllers/arvados/v1/schema_controller.rb    |  15 +-
 .../app/controllers/user_sessions_controller.rb    |   3 +-
 services/api/app/models/api_client.rb              |   2 +-
 services/api/app/models/arvados_model.rb           |  29 +-
 services/api/app/models/authorized_key.rb          |   2 +-
 services/api/app/models/collection.rb              |   2 +-
 services/api/app/models/group.rb                   |   5 +-
 services/api/app/models/human.rb                   |   2 +-
 services/api/app/models/job.rb                     |   2 +-
 services/api/app/models/job_task.rb                |   2 +-
 services/api/app/models/keep_disk.rb               |  20 +-
 services/api/app/models/keep_service.rb            |  15 +
 services/api/app/models/link.rb                    |   2 +-
 services/api/app/models/locator.rb                 |  84 ++
 services/api/app/models/log.rb                     |   2 +-
 services/api/app/models/node.rb                    |   2 +-
 services/api/app/models/pipeline_instance.rb       |  93 ++-
 services/api/app/models/pipeline_template.rb       |   2 +-
 services/api/app/models/repository.rb              |   2 +-
 services/api/app/models/specimen.rb                |   2 +-
 services/api/app/models/trait.rb                   |   2 +-
 services/api/app/models/user.rb                    |  10 +-
 services/api/app/models/virtual_machine.rb         |   2 +-
 services/api/config/application.default.yml        |  15 +
 services/api/config/application.yml.example        |  18 +-
 services/api/config/initializers/assign_uuid.rb    |   1 -
 services/api/config/initializers/eventbus.rb       |   6 +-
 services/api/config/initializers/secret_token.rb   |   7 -
 services/api/config/routes.rb                      |   3 +
 .../20140422011506_pipeline_instance_state.rb      |   2 +
 .../migrate/20140519205916_create_keep_services.rb |  51 ++
 services/api/db/schema.rb                          |  23 +-
 services/api/lib/assign_uuid.rb                    |  31 -
 services/api/lib/can_be_an_owner.rb                |  47 ++
 services/api/lib/has_uuid.rb                       |  42 +
 services/api/lib/record_filters.rb                 |  17 +-
 services/api/script/crunch-dispatch.rb             |  20 +-
 services/api/script/import_commits.rb              |   9 -
 .../test/fixtures/api_client_authorizations.yml    |   7 +
 services/api/test/fixtures/collections.yml         |  21 +
 services/api/test/fixtures/jobs.yml                |   2 +-
 services/api/test/fixtures/keep_disks.yml          |  12 +-
 services/api/test/fixtures/keep_services.yml       |  23 +
 services/api/test/fixtures/links.yml               |  30 +
 services/api/test/fixtures/logs.yml                |   5 +
 services/api/test/fixtures/pipeline_instances.yml  |   3 +
 .../arvados/v1/collections_controller_test.rb      | 216 +++++
 .../api/test/functional/arvados/v1/filters_test.rb |  16 +
 .../functional/arvados/v1/jobs_controller_test.rb  |  34 +
 .../arvados/v1/keep_disks_controller_test.rb       |  34 +-
 .../arvados/v1/keep_services_controller_test.rb    |  23 +
 services/api/test/integration/keep_proxy_test.rb   |  25 +
 .../api/test/integration/user_sessions_test.rb     |  28 +
 services/api/test/test_helper.rb                   |  21 +
 services/api/test/unit/arvados_model_test.rb       |  34 +
 .../api/test/unit/keep_service_test.rb             |   2 +-
 services/api/test/unit/link_test.rb                |  14 +-
 services/api/test/unit/owner_test.rb               | 126 +++
 services/api/test/unit/pipeline_instance_test.rb   |  26 +-
 services/datamanager/experimental/datamanager.py   | 887 +++++++++++++++++++++
 .../datamanager/experimental/datamanager_test.py   |  41 +
 services/fuse/.gitignore                           |   1 +
 services/fuse/arvados_fuse/__init__.py             | 588 ++++++++++++++
 services/fuse/bin/arv-mount                        |  88 ++
 {sdk/python => services/fuse}/readme.llfuse        |   0
 services/fuse/requirements.txt                     |   3 +
 services/fuse/run_test_server.py                   |   1 +
 services/fuse/setup.py                             |  22 +
 services/fuse/test_mount.py                        | 332 ++++++++
 services/keep/src/keep/handler_test.go             | 438 ++++++++++
 services/keep/src/keep/keep.go                     | 304 +++++--
 services/keep/src/keep/keep_test.go                |   5 +-
 services/keep/src/keep/perms.go                    |  11 +-
 237 files changed, 9256 insertions(+), 1860 deletions(-)
 delete mode 100644 apps/workbench/app/assets/javascripts/api_client_authorizations.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/authorized_keys.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/folders.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/groups.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/humans.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/job_tasks.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/jobs.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/links.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/logs.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/nodes.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/pipeline_templates.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/repositories.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/sessions.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/specimens.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/traits.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/user_agreements.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/users.js.coffee
 delete mode 100644 apps/workbench/app/assets/javascripts/virtual_machines.js.coffee
 create mode 100644 apps/workbench/app/controllers/keep_services_controller.rb
 create mode 100644 apps/workbench/app/helpers/arvados_api_client_helper.rb
 copy apps/workbench/app/models/{keep_disk.rb => keep_service.rb} (70%)
 create mode 100644 apps/workbench/app/views/collections/_sharing_button.html.erb
 delete mode 100644 apps/workbench/app/views/collections/_sharing_popup.html.erb
 delete mode 100644 apps/workbench/app/views/collections/_show_jobs.html.erb
 delete mode 100644 apps/workbench/app/views/collections/_show_provenance.html.erb
 delete mode 100644 apps/workbench/app/views/collections/_show_source_data.html.erb
 create mode 100644 apps/workbench/app/views/collections/show.html.erb
 create mode 100644 apps/workbench/app/views/collections/show_file_links.html.erb
 create mode 100644 apps/workbench/app/views/keep_disks/_content_layout.html.erb
 delete mode 100644 apps/workbench/config/initializers/zzz_arvados_api_client.rb
 rename apps/workbench/config/{initializers/zza_load_config.rb => load_config.rb} (100%)
 create mode 100644 doc/api/methods/keep_services.html.textile.liquid
 create mode 100644 doc/api/schema/KeepService.html.textile.liquid
 delete mode 100644 doc/install/index.html.md.liquid
 create mode 100644 doc/install/index.html.textile.liquid
 create mode 100644 doc/sdk/java/index.html.textile.liquid
 create mode 100644 docker/jobs/Dockerfile
 create mode 100644 sdk/cli/test/test_arv-run-pipeline-instance.rb
 copy {services/keep => sdk/go}/build.sh (85%)
 create mode 100644 sdk/go/src/arvados.org/keepclient/hashcheck.go
 create mode 100644 sdk/go/src/arvados.org/keepclient/hashcheck_test.go
 create mode 100644 sdk/go/src/arvados.org/keepclient/keepclient.go
 create mode 100644 sdk/go/src/arvados.org/keepclient/keepclient_test.go
 create mode 100644 sdk/go/src/arvados.org/keepclient/support.go
 create mode 100644 sdk/go/src/arvados.org/streamer/streamer.go
 create mode 100644 sdk/go/src/arvados.org/streamer/streamer_test.go
 create mode 100644 sdk/go/src/arvados.org/streamer/transfer.go
 create mode 100644 sdk/java/.classpath
 create mode 100644 sdk/java/.project
 create mode 100644 sdk/java/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 sdk/java/ArvadosSDKJavaExample.java
 create mode 100644 sdk/java/ArvadosSDKJavaExampleWithPrompt.java
 create mode 100644 sdk/java/README
 create mode 100644 sdk/java/pom.xml
 create mode 100644 sdk/java/src/main/java/org/arvados/sdk/java/Arvados.java
 create mode 100644 sdk/java/src/main/java/org/arvados/sdk/java/MethodDetails.java
 create mode 100644 sdk/java/src/main/resources/log4j.properties
 create mode 100644 sdk/java/src/test/java/org/arvados/sdk/java/ArvadosTest.java
 create mode 100644 sdk/java/src/test/resources/first_pipeline.json
 create mode 100644 sdk/python/arvados/events.py
 delete mode 100644 sdk/python/arvados/fuse.py
 delete mode 100755 sdk/python/bin/arv-mount
 delete mode 100755 sdk/python/build.sh
 create mode 100644 sdk/python/run_test_server.py
 rename sdk/python/{setup.py.src => setup.py} (82%)
 delete mode 100644 sdk/python/test_mount.py
 create mode 100644 sdk/python/test_websockets.py
 delete mode 100644 sdk/ruby/Gemfile.lock
 create mode 100644 services/api/app/controllers/arvados/v1/keep_services_controller.rb
 create mode 100644 services/api/app/models/keep_service.rb
 create mode 100644 services/api/app/models/locator.rb
 delete mode 100644 services/api/config/initializers/assign_uuid.rb
 delete mode 100644 services/api/config/initializers/secret_token.rb
 create mode 100644 services/api/db/migrate/20140519205916_create_keep_services.rb
 delete mode 100644 services/api/lib/assign_uuid.rb
 create mode 100644 services/api/lib/can_be_an_owner.rb
 create mode 100644 services/api/lib/has_uuid.rb
 delete mode 100755 services/api/script/import_commits.rb
 create mode 100644 services/api/test/fixtures/keep_services.yml
 create mode 100644 services/api/test/functional/arvados/v1/filters_test.rb
 create mode 100644 services/api/test/functional/arvados/v1/keep_services_controller_test.rb
 create mode 100644 services/api/test/integration/keep_proxy_test.rb
 create mode 100644 services/api/test/integration/user_sessions_test.rb
 create mode 100644 services/api/test/unit/arvados_model_test.rb
 copy apps/workbench/test/unit/job_task_test.rb => services/api/test/unit/keep_service_test.rb (61%)
 create mode 100644 services/api/test/unit/owner_test.rb
 create mode 100755 services/datamanager/experimental/datamanager.py
 create mode 100755 services/datamanager/experimental/datamanager_test.py
 create mode 120000 services/fuse/.gitignore
 create mode 100644 services/fuse/arvados_fuse/__init__.py
 create mode 100755 services/fuse/bin/arv-mount
 rename {sdk/python => services/fuse}/readme.llfuse (100%)
 create mode 100644 services/fuse/requirements.txt
 create mode 120000 services/fuse/run_test_server.py
 create mode 100644 services/fuse/setup.py
 create mode 100644 services/fuse/test_mount.py
 create mode 100644 services/keep/src/keep/handler_test.go

       via  1db007eb53d0401a7a0ba168add7c4a094790fa5 (commit)
       via  675794872a5d064cf0a8177d662555c04b0dae51 (commit)
       via  d5823126a51b7c31915e01fee100abe9468014e5 (commit)
       via  c2e70e05178c9569e9de2ac5b3ef47440c49efc5 (commit)
       via  3ba5aa15ea0156a4fce63dcb43b7f972b4c760df (commit)
       via  d54a48fa6fe94e9b80bf32c1d357e4dc3b3d67c3 (commit)
       via  1b3750c9ffbec7a76b374023188c5c13882dc651 (commit)
       via  25bdeb97230abe28b9d5d7b13aa72549d93df87b (commit)
       via  45216b83b108a3c48cdd8b1aaf898ccd93188507 (commit)
       via  32eafceeb044696ac7db49bbe1d6329e0e3785c0 (commit)
       via  64d339fa3eb693908ea107a10a4c376ba3b51d7b (commit)
       via  1f43dd857829bd1134837c43a8ac5d653c0c68b1 (commit)
       via  123ce64a39849224481a67cc400a04c5022b639f (commit)
       via  52056c365c8936e34bc6b22a01bcacb556737914 (commit)
       via  83277602806099428b859b88745ad85836cd6ee4 (commit)
       via  a2c261dada5b47077c7930a2133bb000631fab66 (commit)
       via  dffa580d39b977746f6950b835b78b949a862c9d (commit)
       via  1924b28c8f715bc08752fb219d1fd8145ccfe84f (commit)
       via  0bec8ec8a130cb3af013b6097cf322938fce5671 (commit)
       via  fa6b0b65fb71b66e36f982f4f25e9751672d0834 (commit)
       via  661b2bcd6269fae643fd7d0c46649715716959eb (commit)
       via  f876a32276a73d89ab695e5954c9ea3816b38db9 (commit)
       via  2dc7f15f81ea7f460114482614d8ec5814c36fbf (commit)
       via  35cd1ab03e06910a2536bb473529511b8af20b94 (commit)
       via  49d953403625ca145081f9ccd914e70d49e51d49 (commit)
       via  ebf002120164e185691b6bf418a17b23124614a8 (commit)
       via  1bb9f9ca3ffe077f2d90d7de65fbee37a717ef23 (commit)
       via  e1d71c83e17ba6d06e2442ed775f7efd4ea32d84 (commit)
       via  735a268880783acc77a2b99a5ac32c819c154ad9 (commit)
       via  46e29d7fbf2628a01cb31ff7117732293129fd65 (commit)
       via  ea4b289bea3baebde1d23bbf38ded4e8da7ff298 (commit)
       via  8cc0ba260202de5627af49691d259928ad7ffcc6 (commit)
       via  43f38dbf96127a4036be5e8b01f9e82d825ad949 (commit)
       via  4b6ae0c2b418fd3192b8248b3e8a614502c47060 (commit)
       via  e5b3a58e1106fe71d781995560f8b197dbaecbca (commit)
       via  e817beda3c9aefd99b1ce9b9c77cd2f346e14a01 (commit)
       via  fc16a366bf1061bfc2dc08ab1477c7febf8c3c5a (commit)
       via  9a86712b5b6ca3490739e5b75d809be4c853e9a3 (commit)
       via  c6a6693dc36615effca5e3363b81199362007c59 (commit)
       via  38cef39fbdfeb8176e4c755d12e43a450e868439 (commit)
       via  2f32f3483d18e9a89a8b5c13e022495c8681db04 (commit)
       via  3986815ae5e7e61c48f3ed979c32358710ef7e20 (commit)
       via  a2273675f29a0f85cb80e62b3742e82d63c365e9 (commit)
       via  64aac6153e1819738d9d80e156572aeb9bf07f97 (commit)
       via  2768b056f5d99952d2d2c4ba8cd1dfbb898901e3 (commit)
       via  c965f26c02b0f358eccf6989e49703d173206486 (commit)
       via  f1a04b3e3c61cc92501d18863ccf0abb162f9855 (commit)
       via  6d1b822d5a168166deb44d4256bf0abcfd618c67 (commit)
       via  9cdf7a2f51489403a488c3d06cf252a36b8e4198 (commit)
       via  040f1c94dfa1a53356d24e77afdbc0f2e5cfe91c (commit)
       via  ab710b74b2751f9a0d4eb5c5f950c6bb04865e79 (commit)
       via  10bcbe8343f6f91f3c8e338a4a53766f7ba26ef1 (commit)
       via  286c3627d978a7862b7f7eea366aa48ab930786d (commit)
       via  2f27ee200f6cc4c97d30084e34330efef2068ebf (commit)
       via  9c3beb526fe3bdfd6769abd0def5a1634074d353 (commit)
       via  ce2d2f5807822534756e52ac04bc272dd572d13d (commit)
       via  50a277569ad6277d95b7e3be83ddefc7b92661f4 (commit)
       via  aad9cd74e61cff985944c400c40fe3f85907a1e7 (commit)
       via  efb58099eebde5bebb4cbfba9ce4ba70a142fc56 (commit)
       via  c3367d7b827035d0cfc3418bc028a67142696e13 (commit)
       via  941bcf698f1cfb498510a13f23d3c9d403b0435f (commit)
       via  7ed1dcf8b0bfa8fc78f228a07b2318094b68abea (commit)
       via  9482cf9f326ce64f9ea100aa34680278bdd6018e (commit)
       via  5da718633e3663073a624db78274cd69e5dfe6e0 (commit)
       via  4e9567a57ed7af343e24eeb4dc403a1eb73b1f81 (commit)
       via  90744f405977dcfac40d5dea3dbe79391080b80d (commit)
       via  471cc718e0cf5a1846feb444887c35c285f33cdf (commit)
       via  043002e8d0dfd2a5dbb3cfc135ac21732c199c05 (commit)
       via  278fe7048f9035b350a60e032432c9119f151add (commit)
       via  7a873b4adfd0a7f94a4e7dfa64eb088caece46df (commit)
       via  7b4d7faff279490a40190208bd571a86090e2bf5 (commit)
       via  d3b11ddc2506de37b8e6538be69237d6d2a60a4a (commit)
       via  c3a88cbf511aa0954dac271ce6bda9c6e4f3191c (commit)
       via  4ec57745d2106e955fea4442c9eccb2fce7246c4 (commit)
       via  83c873af757aea4217648cc5a909fcadcf3e93e4 (commit)
       via  949c388c5ec3bc4f8cc6b3d503c11dcd20e5bbd4 (commit)
       via  03395937ba05b9e3192e346a355c691f45cc7c85 (commit)
       via  cff5301bbc1e1c8f8421fb56dca5a76dfebb058c (commit)
       via  2d9f17f33a9d8737d97705b8b77e3e1c05f7b411 (commit)
       via  67176a2637ca895015908c7c3bdb1ab7688c1b2c (commit)
       via  a797b27604a0f5a277d73e2d3522dec033fd4ecf (commit)
       via  6ebfb077cbe7357aadccc7ae4f803c61d66d0279 (commit)
       via  a792aabc3159439c66098935fea2da685eee7ed2 (commit)
       via  7ec5dedd6301ae84db941de986f2f0eacc4532e7 (commit)
       via  130bd6ec07cf6844861e49602d33b07dd2402595 (commit)
       via  a46e35694b573fd5c9b355c51323992670fc87b4 (commit)
       via  93842871ab5266e45fb6a29da89462af102a6384 (commit)
       via  85ab544a82c685a74d814a0e10c48624810be0af (commit)
       via  bfa9ee952c1ae3f03fe2f9fa781a132411963030 (commit)
       via  ce5b843c32f6ee74f02a40044073dd4288d16dee (commit)
       via  fba37ca64631be9e0bdfd17ca70d85dd2c896bfa (commit)
       via  ea9592e911a3ccdbbbfeed8812b67e968fe1cc5f (commit)
       via  3dccfa028282d8b667a7b447ea061b7eecc8618f (commit)
       via  b12f667daa270a4e3c656d16f30620ca763f9578 (commit)
       via  27f5c1635d56c3f3cb6c5ef069c28db939eec2a1 (commit)
       via  b534e4a2b167185e59ca657369fee06e5effa6cc (commit)
       via  7ca81caa537132acf4be86811e300b8a6ed3baac (commit)
       via  e678f2a0e5d223ddd5b2a6c6a8d14a8afa6d463d (commit)
       via  2b19cf9f9522dd0e8774031a54ce695e73fb72fe (commit)
       via  fb8dd22df54d0c8f87e97f41e1a1677741a47892 (commit)
       via  96b9b6b0a45ffb1965412fe9a12e23d10260ea8e (commit)
       via  900f179c96733c2ce9140b2d7767f97feb9eaff6 (commit)
       via  b093bbdccf67d895337e47bf32b0ab6f22bea632 (commit)
       via  f71c9e59bfff91da4b89050ceae27dbe3edcdb6c (commit)
       via  b91db14a4dced9d6ea124e86be3c796e6f2c8e8c (commit)
       via  a6c79a723f05e11c3b40d459e902eeca894c27b8 (commit)
       via  fb7f238945e33b07f1c80b0623315c1ecf86bca2 (commit)
       via  ff60e33ff3d9ad8144b9c269d12d1e5f18455416 (commit)
       via  09559ebbb9f52c8b8a47e21d0a9c5720f3a2b7c6 (commit)
       via  99cd188a0cbd9143b690750e21abc8d8d5e6dbad (commit)
       via  e5f3ce60249a14f4fafdd9e0f31be45d1886a888 (commit)
       via  e6e94ca43f788b28d61c03f81b15ab5647f22d4c (commit)
       via  acef63e2e3e629da8b6825f33e6de7bf6bcc4fc2 (commit)
       via  b08f16445f02a02ea9246094657e93b354999b38 (commit)
       via  3e6368d077fa4831f93255e271a18842788183fb (commit)
       via  f54395a1b98c4146a795ce7b18e04c23630ab631 (commit)
       via  4742810338ec15a0654d18532f97f5ae41d48c5a (commit)
       via  67f17818338153fc6f7b0c65f51e97bbb16f0cc7 (commit)
       via  d0b6bb76a0a7478794faebd3e1e5ab94b717596d (commit)
       via  82393afcb6101fe6f601f6a752589d10b0909f8f (commit)
       via  8ef62a19514b4cc0dd886b01902016f19be09ccf (commit)
       via  2a493a9215f604c63ab7bc6f0e0956d10af8ef10 (commit)
       via  66d5cdb1f34d614e5ecf1da5ef6efcad3a5a51ab (commit)
       via  a6f78c31607b37d207dcebada38ee05335deac50 (commit)
       via  d836cb04ab7e577b3f7896d6b49e78b97ed832f8 (commit)
       via  7ff85869345089297f5196c4be3cee6f7ee03c6b (commit)
       via  100e1ab71d64e21f1c21de2fc305a6f92fa244dc (commit)
       via  8aaf3a61c6981160eaa779fb32064895de00e5a6 (commit)
       via  d455c8373cf39f4310d2b0e13e7a9d02aca0b2ab (commit)
       via  81b517450a657fc56b91b25426505bf9b3937db7 (commit)
       via  90bf8cae5f1ba931c7cc3be7864cad8ecca1ca5e (commit)
       via  95db3bc262b44b508462e1b2d9ce7a55c5ba1ffc (commit)
       via  fb95d0d2d09c9537f5bdc503e51cf4f091d02c46 (commit)
       via  def9a846a5d9dd91cc0a1ed9c50dee35b81425c0 (commit)
       via  33d63c6d42e824744305df3e720f8e9cbcc87d78 (commit)
       via  fadf2b0fe1240f607fc91d65d6831621262afeb1 (commit)
       via  cf32ef421c037692e7ae896f695c61d8e3670f01 (commit)
       via  6022ddd1b07217b9b4f31e73493fc259bd19b696 (commit)
       via  28195ca73b4c86e0f17ce2db74f3d5669d344e23 (commit)
       via  717bee7044a2cd44678e13e116ec1be2a83cfe60 (commit)
       via  952599738f3c9f8901c895858865fc90b5e30c1d (commit)
       via  34ac761cb1fd2b7b9438765d14ded85dfab0453b (commit)
       via  e19b02f69914c086f979ec31eb603bb3b456cd15 (commit)
       via  e7ebb0cb4f642fbb2297e1ed54591244cc886f81 (commit)
       via  eef1936a73c7c85ba530cca028230241f5171333 (commit)
       via  8dea7244cf5e50b9fa70bec15b1db3fd2cdd03bf (commit)
       via  9da4a83c2cb602e872bb606503fa438dd3296864 (commit)
       via  2d79630f56a010aa0b7544b876c7c31b122c70af (commit)
       via  3c3bc28bc6c991d8111dd66bfef6fe310e00f232 (commit)
       via  949e27e0dd0a97cf78f0b90636df387fa0d65be3 (commit)
       via  b20333af04a3507b85c52cc4e50a0e2c3fc04433 (commit)
       via  a7100af369a892a7f38eb2875320a7c742ec4da8 (commit)
       via  60c604d8e89501af180487ae7b39c1e25a66c8f3 (commit)
       via  faf355bede4c4a9b01ef5658fa925cec6e4b503f (commit)
       via  7c21045a213c5cc8846a263124271c93d38d78b1 (commit)
       via  b249529bb02dd34e54f8816222ebf81d778c957b (commit)
       via  568d941d3fe4bc554af0bca6c1dc4d9fc66ce999 (commit)
       via  179c431787943f3711f2127d127c33a831378b06 (commit)
       via  4556f61d8f4ec294afa7980d1b00882e2a1ffdfa (commit)
       via  1a844d06238368c9d5c946a34c0c52485de1c435 (commit)
       via  dc068f04e966c35eee87af8da280bbbeb9ba3595 (commit)
       via  8fa8b34bcc334388d8c885e3f0e192503fdb7616 (commit)
       via  04ec74cf7dedfbb0becea0e0cb5018ccf55a31eb (commit)
       via  1ca9c477ffa476305a920a0df7ae1e8d5b69c8b2 (commit)
       via  087773f25a3df2d35e402f1afc6c7204a0852727 (commit)
       via  bfd037dee4c82f355816c449dd25921fc2923837 (commit)
       via  ef47dfeb871015d9da6d5e2e0a04100c2e9e8eee (commit)
       via  383aa9f906c32876a71599024084283627070adb (commit)
       via  f990e6880050eafaf3b6bfd063e36aa016e8682a (commit)
       via  28fe4303b1c04142bf0939b05280749e590673f0 (commit)
       via  f900ccf514a3653a64002fe07d9ce5b16adcfd51 (commit)
       via  a87ad3026e4f7e1cc2e22082a523fa7143388c88 (commit)
       via  b2a8e117cd2a02851c69136f76a1e63005386f1d (commit)
       via  97d8fa64264069fe6d8ae6c8131fd3cc2f347189 (commit)
       via  2a3f67fa270b9660d4dc17b55c48fa781bdba4bb (commit)
       via  c501af3c5d3216c2ca56ab77f4f05bd74198c622 (commit)
       via  5a977746e6df04e3ce1578299e98ed7ec645fcdd (commit)
       via  0c1af8806516569044c7354ff58f7371a510594d (commit)
       via  16af0b22def5b80a1861788907a2fc45b14e3273 (commit)
       via  15945ebab4fc71980b2c6ddceb149a3d7365c29e (commit)
       via  a9eaabb02fe7110f0e16bcd7f27d1a0cd5eab08b (commit)
       via  3aaf11c2dd372b5d34ba317a1a4b761d263f86d6 (commit)
       via  6132d8efbc522b71d0084160abaaa87031678bdc (commit)
       via  eed7af8f901adb263c870a2277ec166467a28d77 (commit)
       via  d97e3de81c48673b0e1d3927edaaf0e560a9a2ba (commit)
       via  14c312c452e0e010d617c02a33b94a178632ac26 (commit)
       via  06a0c1d9f2e6cf1d5a9fd00b53071d857252f9fa (commit)
       via  5c3c04ad25cfabaa860bb0ea3f3dc078a9562008 (commit)
       via  5e968d7875c62a6145b7aefc39f070d14f4c97e8 (commit)
       via  eff3277fa6800bbc4ac81654f8883bbfd3a85d30 (commit)
       via  002f863605469cee7e112f4c16a78e3b6278672c (commit)
       via  6c2a704b7a2d721087976b2b8ec4f22cdaf44178 (commit)
       via  cdf7b162906cb37d4ecf88ff6c72433bcdd8fc84 (commit)
       via  722862465129f1f30cbb2432132140883d31b4ca (commit)
       via  27fa0d391eb95008acf41ba207bc13b8c4fe794c (commit)
       via  f7f61eca36d66a723b02ac34db888f5fbdc63fc8 (commit)
       via  2de827e57ae9ba1b0d322199d071ae900a5b7e0c (commit)
       via  d9aa5decc6edce30285df049277de2cf2c138c26 (commit)
       via  222ce386e36b3d146e718a5d2f64a95fb30996bb (commit)
       via  26d69329e87e343b84a132a4754068aca66ad132 (commit)
       via  036a701b45399e0114eed5b0e1ce6b478c614534 (commit)
       via  b4516edf0a7cd1b584442953a8c965fc65104906 (commit)
       via  a3cd0039e84373541d6648b76647457be5a7e098 (commit)
       via  8fcba3783d9a79bb18a00d339f9b3222f1eccd7f (commit)
       via  1c6bc4bcac86195a120e6be564703e7d2133dbe7 (commit)
       via  71143e41dbc8755d5ccb97990525bbb05aad69e9 (commit)
       via  31c711afc4ff8a1728aeb3e5f405a131047671c9 (commit)
       via  88590483c4d24904267b550cbb3af7d5a11d8953 (commit)
       via  5b252752cdfd8b129d10913f7e2ec7b47f544ead (commit)
       via  2376147b3d039acf08456a53015d59f04eabbf82 (commit)
       via  fde1e4f00e82c7a776892c1ab9c5edacf05dc1c3 (commit)
       via  97252f1f34486073c778c0a1c9de25f2f275cacd (commit)
       via  ff6a6fb89b42d17693786be6405c267bee445c4d (commit)
       via  7fb83a3380e62721801a4980c48ba78208c7b2e2 (commit)
       via  45938e41f983ce41d8b55c3f980b7f31bc269124 (commit)
       via  f91c73aba940adf1e9fbd530d102931af45a63c5 (commit)
       via  d5c8f2dc3faf77da783c2016630808f6351a4d6f (commit)
       via  1a4846b2e916d3cf3958cf77117d710f72fa61cf (commit)
       via  297f48f2e6233da1e61cda57af30c9c6b64f0908 (commit)
       via  11b48e1b182cef419918d4df1a4998001d665a9a (commit)
       via  d70ff3d064c9a6da8b8678b249abf7f4b93b6370 (commit)
       via  1d5b46697b5d7c68b0bb159fc570ed63c1e3acc3 (commit)
       via  9736526e7abfd50eb8f18293f8ac312bf61937e4 (commit)
       via  52a3016af3ff21b8fb5402bf70d0aab07f5ee486 (commit)
       via  69141a18be1821daf4816046e65b2aea75a975be (commit)
       via  e65b2e685833e1d850c8d671fd1df9d4e4fea4a3 (commit)
       via  fdbea9e3c225a3184f8f7c2fac52abde643603c6 (commit)
       via  a04d67ef0823d6c87e8515cfe6cf88793ef5e3bb (commit)
       via  df2ce01533175ff7190a5d13fdca4b61f22befd3 (commit)
       via  638d136057f4d9ed19f132075079da396217d6fd (commit)
       via  f493dd4dfab89c228fab05e2b46851211c7fc586 (commit)
       via  ba764a7a0878b9cf0dd8d22ad4e12774d8e5f550 (commit)
       via  b63b4b51a7bdaa38960e0b4428141c16c0a07d7a (commit)
       via  2b8857f631f58df2baa93077185fb7a5a29c6aad (commit)
       via  facf07110e28fe552342fbad623d621b43e22b99 (commit)
       via  6f3853aef989e8c2243159bbf0ea352948ae4878 (commit)
       via  67b4630e47e0f70e3cdbcaa8a7d039543e3c6a34 (commit)
       via  7e049a91425a51398f38e6b1ee839a4070483267 (commit)
       via  b2979b0db0b6b5ee7ad3001ffcc8f76ff4d96f05 (commit)
       via  733269172b6b9802c2a00a8f8d19d6a520546a67 (commit)
       via  a2104e385abe47470dd42836a66360bf62afa57b (commit)
       via  17b0eecaa5dd1e0ac006b6ba757f6aee251a139e (commit)
       via  f45ce8083a98e29720cfba01e8043f6465327c40 (commit)
       via  35fb8a1cd59d1dc0ad4be89c64e8b48c750faaeb (commit)
       via  0ab985ff1da223e4065273fd1a549284ff3454ee (commit)
       via  e6aa5b48be1209d74c4c69be3eeca549f02418f3 (commit)
       via  2e524eb008f8b70ca1263ccde460365109c66a90 (commit)
       via  bdc9139d17c184a58e5088270f2ce6ba361fb8a7 (commit)
       via  3ac9fd0c91fe202a59e7c3611156bb1a9b8118fe (commit)
       via  01436e8b76300759ef4bfea30d7798445d50bf60 (commit)
       via  eee2c981d6a29eb7f15b8957570bbf8515d3d947 (commit)
       via  b5f193aa657134822d4df67cabc25c631926395b (commit)
       via  ff1e29f702d4f3036f5af014ad6e423b886ed0bb (commit)
       via  66f1ae7a9be590461592199c6d3646dbc4eba786 (commit)
       via  4bd14ccfa216fe1d115772508ac7d7c64ec59a48 (commit)
       via  7c8bfeb8d19db4f27b5fb5fd78e0afa3b7d07a89 (commit)
       via  1b8120689041941db937883c3132a9c6819b56c5 (commit)
       via  cbf0429a8a5edd2f8a8d9b01ce39334e07e56bf8 (commit)
       via  121fb6bdcdf3731903ce3d21c0a284c20e6a6fca (commit)
       via  6abcf1f6bdb82b176a9fbb48b6c7cefa64970a9d (commit)
       via  8624ad6e91ed73876bd4f12fe8df2387e3e6330e (commit)
       via  cbcb69fcbf73a1bde0ae78be8c0ad25f84c3f7c3 (commit)
       via  611223d58fcdf5cc6ba434efed2c1ee9234b29a7 (commit)
       via  c6c3d3d23d1cca50381570d0558470d47e71fd95 (commit)
       via  2b03b05de753509c026b4c67857cd49a11f44dcf (commit)
       via  ccdaeb4b5b55c0e97e4fccc21445e5b9cc53dbe2 (commit)
       via  17d83fff53eea039e1483f86efd4a66056fed647 (commit)
       via  67fef1f4bec2d314c9d37bb05c55ff1067ba7b49 (commit)
       via  a998a520deb859216271567f1bf3623f310cf2d6 (commit)
       via  51928265eaf8ca6b6319dd231d74604ceb3af287 (commit)
       via  181fead894b660893e0e09274e609ec8ee4230a1 (commit)
       via  647c8b8c47ef521046bea7675af84b621c235e0f (commit)
       via  6f6235983d91e0b9fb5660d0a2825f510bbdac73 (commit)
       via  54897c8f978f127a44c0a9d20c1e87cea840b21f (commit)
       via  51af13e97bc4725e8cc010c72bbedb667b0a0e0f (commit)
       via  e9359f96365d629a688cbbc2f7d063fabf535a9f (commit)
       via  228f1ecbb98438fcd5bbe59465c830be637d38ce (commit)
       via  ee056b0ceb9ce569e0ee9a64b41ead728636772a (commit)
       via  3e237c89424489bad02cde9be33f715269e0c6b8 (commit)
       via  00ba956a67072f8b4a77fe71d3dc1e4dd8f70e98 (commit)
       via  98fd371d846022d8ccc25e8234d913e436ecce69 (commit)
       via  9c444153e80d3a872e11ca5898491c747a881a4d (commit)
       via  0f7fa46c1311ddd2aa6e7f0c280b98a6d69d4ec8 (commit)
       via  2e04dd8e9f872506922744dd449cccb99b55a847 (commit)
       via  752bd0d292c7fd6eb55b39cdc9d7373c7f35e0ec (commit)
       via  67c754c065dbe79e14a3c60640e6e604af32d0bd (commit)
       via  77c4def0b319e3720dba05a3c1fb0ab78323f227 (commit)
       via  65c155b7f691ce6a885125618bde3c9d68f6b47e (commit)
       via  d433ba0f548414219b3d976125e1ea530e1ba9ef (commit)
       via  d17ef1d036b4262f6c6c40324cc56d04d26581d3 (commit)
       via  c436da861845723ab18f56dba96052cf2569e539 (commit)
       via  6a7ffd91ec95950588b95d3f29599d07d8447c16 (commit)
       via  22233bfa18060d000e303d7734ec3016f7e80c8e (commit)
       via  ebddfbe7fbca80ecf852bbb20af9c6b584394691 (commit)
       via  603bccd66ac868c2accf9dff9c3ca6b7feeed962 (commit)
       via  1f763a5b1ad5c65a3265b4284958ecc0fe336f50 (commit)
       via  9143c3ec039d6c89512055f70c2fcc6e1065f1d7 (commit)
       via  415347a3354031b48c22cae56c7bbfdcb76d607c (commit)
       via  a8918e636507200148758302dc6b9a081dc2f206 (commit)
       via  a74ae790b5a0682fa00423626103482c145e1b91 (commit)
       via  66d12ae6dc72d45cc3cb3fcc007cb41371371616 (commit)
       via  f1b5f32b00d481e06d600cd6009d0995ecd19699 (commit)
       via  e419f135d46050250fdeb10b6e2a2a254caa85d4 (commit)
       via  aade22d7587e9f5921edb18ad76792a60eaa92fb (commit)
       via  2e9a14d193db2948e14804539494f3b2384a87b8 (commit)
       via  ba4fcbd29b2615d9cc64010d756de49eac5109a5 (commit)
       via  8ee3fe6685a716918a403f559c626c3b38e411f2 (commit)
       via  2e273679fbf3f73ac7b7cfcf9ef8380047e959a0 (commit)
       via  ab5ded7cdf302ad156c58d47f59ab07e3a14ec69 (commit)
       via  abcde4a0bed9e80fc0925e70d151c7893043bc82 (commit)
       via  c13b9d5300b7f778e2fc05f9d043db4122d15aa1 (commit)
       via  c7fed8bfbd8a0e6edf83142b50bed4fe53c10c5c (commit)
       via  d28bf64e878b8d45e1ace6409e94027a039d3909 (commit)
       via  72493a2fef971fc685ecef42c2b697338da69d2c (commit)
       via  4d1481ed38e238e2e39d37775cb8cd86150bd04e (commit)
       via  c4fcddbe2a01ebbc3a4898dfa8744eb6fc45227e (commit)
       via  84c471b1cfb20116b2d7d26215c2517cb57ba53f (commit)
       via  a5034fccf4a829a36d6e2670a9f62e4f7a545f2f (commit)
       via  72c312b352a88740a44fba9e274d72bbabb489a7 (commit)
       via  ba4693cda66632d3da1a711b6910441958ecee01 (commit)
       via  2e5fef753892523984f18c26fc16cfd599115f34 (commit)
       via  a0a7b1a0c6f43a80449a76c00fb0c30858d38233 (commit)
       via  bfb190a4c3f5bd995ccae37536c3234b14eaf3ed (commit)
       via  389f092ce9dc3a08245530fcf70d535783e62813 (commit)
       via  de9903cfc08ea7c3da459e7c4ee5a744d52a7c89 (commit)
       via  d034adbaf26a19e8fd48124cadd5108d2d3de642 (commit)
       via  a3650fa043500139ac36587a4b61ffed1a2dc1a3 (commit)
       via  f7538ca2df4a43ff60f87675f52a59edacfcdc7e (commit)
       via  f4925bb0e7d9de484579b71087f181b9dbea5bff (commit)
       via  ab66542f7c9c2dd4909e1bf3d03ef5df5f95a6f9 (commit)
       via  ec4e2b3707c030dab6081db499adc5ac369e61bd (commit)
       via  b189f5ed7a6fd3585535b9d9d3d587115cf383e7 (commit)
       via  2fce84531f36daa2323276f0c6b147efe82852ec (commit)
       via  5254bebf574f0f72bb0321e944d089ad6f6c25e2 (commit)
       via  42c9be2a3187291502efcebefc09ce603fd31106 (commit)
       via  b586267c7ff0a5973ecf2f83b3fa5eb452669cfc (commit)
       via  4efaeba6eb371d03aa8c8f052b63c2b3404de063 (commit)
       via  f76947a7c1ba973a11e563b0977d54a2ece2ce38 (commit)
       via  e3ce426fda2e7d2283d7092f988245c6900c8949 (commit)
       via  cd2672dc235efaacd533aadeef489994fe684a25 (commit)
       via  40cc2b01c2a3ff911549c2d31c8195905109633d (commit)
       via  74236320d68bf092f7f76f7ccf4f7a974735c6ab (commit)
       via  d0bf7a1ff103285e54433d3bcb67c2138b534542 (commit)
       via  bb6f6fb4021045b86ef58b3a975cf60b58807fa2 (commit)
       via  264c7fdb6c651ef73cfe4f0a280bf6672846eada (commit)
       via  1ea7294edb4aa80f13d805ef29875a39caab471c (commit)
      from  8b030cb82d414bfa0559a205c150f4bfe792caba (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


commit 1db007eb53d0401a7a0ba168add7c4a094790fa5
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri May 23 12:04:19 2014 -0400

    2044: Sharing link now shown in "Sharing and permissions" panel, no longer uses
    a modal popup.  Produces download link that is confirmed works.

diff --git a/apps/workbench/app/controllers/collections_controller.rb b/apps/workbench/app/controllers/collections_controller.rb
index 3e981e1..1d71041 100644
--- a/apps/workbench/app/controllers/collections_controller.rb
+++ b/apps/workbench/app/controllers/collections_controller.rb
@@ -171,6 +171,12 @@ class CollectionsController < ApplicationController
     end
   end
 
+  helper_method :download_link
+
+  def download_link
+    collections_url + "/download/#{@object.uuid}/#{@search_sharing.first.api_token}"
+  end
+
   def share
     a = ApiClientAuthorization.create(scopes: sharing_scopes)
     @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
diff --git a/apps/workbench/app/views/collections/_sharing_button.html.erb b/apps/workbench/app/views/collections/_sharing_button.html.erb
index 36952d6..b2ed43a 100644
--- a/apps/workbench/app/views/collections/_sharing_button.html.erb
+++ b/apps/workbench/app/views/collections/_sharing_button.html.erb
@@ -1,8 +1,17 @@
 <% if @search_sharing.any? %>
-  <% linktext = "Shared" %>
-  <% btnstyle = "btn-success" %>
+  <div>Shared at:
+    <span class="pull-right">
+  <%= link_to "Unshare", unshare_collection_url, {
+        class: 'btn-xs btn-info',
+        remote: true,
+        method: 'post'
+      } %></span>
+  <div class="smaller-text" style="word-break: break-all"><%= link_to download_link, download_link %></div>
+</div>
 <% else %>
-  <% linktext = "Share" %>
-  <% btnstyle = "btn-info" %>
+  <%= link_to "Create sharing link", share_collection_url, {
+        class: 'btn-xs btn-info',
+        remote: true,
+        method: 'post'
+      } %>
 <% end %>
-<%= link_to linktext, sharing_popup_collection_url(id: @object.uuid),  {class: "btn #{btnstyle}", :remote => true, 'data-toggle' =>  "modal", 'data-target' => '#collection-sharing-modal-window'}  %>
diff --git a/apps/workbench/app/views/collections/_sharing_popup.html.erb b/apps/workbench/app/views/collections/_sharing_popup.html.erb
deleted file mode 100644
index f7f0555..0000000
--- a/apps/workbench/app/views/collections/_sharing_popup.html.erb
+++ /dev/null
@@ -1,37 +0,0 @@
-
-<div class="modal-dialog">
-  <div class="modal-content">
-    <div class="modal-header">
-      <button type="button" class="close" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">×</button>
-      <h4 class="modal-title">Sharing</h4>
-    </div>
-    <div class="modal-body">
-      <div id="sharing-text" style="text-align: center; word-wrap: break-word">
-        <% if @search_sharing.any? %>
-          Use this link to share this collection:<br>
-          <big>
-          <% link = collections_url + "/download/#{@object.uuid}/#{@search_sharing.first.api_token}" %>
-          <%= link_to link, link %>
-          </big>
-        <% else %>
-          Not shared.
-        <% end %>
-      </div>
-      <div style="text-align: center; padding-top: 1em">
-      <% if @search_sharing and @search_sharing.any? %>
-        <%= link_to "Unshare", unshare_collection_url, {
-            class: 'btn btn-success',
-              remote: true,
-            method: 'post'
-            } %>
-      <% else %>
-        <%= link_to "Share", share_collection_url, {
-              class: 'btn btn-info',
-              remote: true,
-              method: 'post'
-            } %>
-      <% end %>
-      </div>
-    </div>
-  </div>
-</div>
diff --git a/apps/workbench/app/views/collections/sharing_popup.js.erb b/apps/workbench/app/views/collections/sharing_popup.js.erb
index 933f08d..d2e0d9f 100644
--- a/apps/workbench/app/views/collections/sharing_popup.js.erb
+++ b/apps/workbench/app/views/collections/sharing_popup.js.erb
@@ -1,2 +1 @@
-$("#collection-sharing-modal-window").html("<%= escape_javascript(render partial: 'sharing_popup') %>");
 $("#sharing-button").html("<%= escape_javascript(render partial: 'sharing_button') %>");
diff --git a/apps/workbench/app/views/collections/show.html.erb b/apps/workbench/app/views/collections/show.html.erb
index c26b74c..0be6705 100644
--- a/apps/workbench/app/views/collections/show.html.erb
+++ b/apps/workbench/app/views/collections/show.html.erb
@@ -79,7 +79,7 @@
 	<input type="text" class="form-control" placeholder="Search"/>
         -->
 
-        <div id="sharing-button" style="text-align: center">
+        <div id="sharing-button">
           <%= render partial: 'sharing_button' %>
         </div>
 

commit 675794872a5d064cf0a8177d662555c04b0dae51
Merge: 06a0c1d d582312
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu May 22 16:30:34 2014 -0400

    Merge remote-tracking branch 'origin/master' into 2044-share-button

diff --cc apps/workbench/app/controllers/collections_controller.rb
index 509b9f4,3b4943f..3e981e1
--- a/apps/workbench/app/controllers/collections_controller.rb
+++ b/apps/workbench/app/controllers/collections_controller.rb
@@@ -110,99 -120,44 +120,76 @@@ class CollectionsController < Applicati
      self.response_body = file_enumerator opts
    end
  
++  def sharing_scopes
++    ["GET /arvados/v1/collections/#{@object.uuid}", "GET /arvados/v1/keep_services"]
++  end
++
 +  def search_scopes
-     ApiClientAuthorization.where(filters: [['scopes', '=', ["GET /arvados/v1/collections/#{@object.uuid}", "GET /arvados/v1/collections/#{@object.uuid}/"]]])
++    ApiClientAuthorization.where(filters: [['scopes', '=', sharing_scopes]])
 +  end
 +
    def show
      return super if !@object
-     @provenance = []
-     @output2job = {}
-     @output2colorindex = {}
-     @sourcedata = {params[:uuid] => {uuid: params[:uuid]}}
-     @protected = {}
-     @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
- 
-     colorindex = -1
-     any_hope_left = true
-     while any_hope_left
-       any_hope_left = false
-       Job.where(output: @sourcedata.keys).sort_by { |a| a.finished_at || a.created_at }.reverse.each do |job|
-         if !@output2colorindex[job.output]
-           any_hope_left = true
-           @output2colorindex[job.output] = (colorindex += 1) % 10
-           @provenance << {job: job, output: job.output}
-           @sourcedata.delete job.output
-           @output2job[job.output] = job
-           job.dependencies.each do |new_source_data|
-             unless @output2colorindex[new_source_data]
-               @sourcedata[new_source_data] = {uuid: new_source_data}
-             end
-           end
-         end
-       end
-     end
- 
-     Link.where(head_uuid: @sourcedata.keys | @output2job.keys).each do |link|
-       if link.link_class == 'resources' and link.name == 'wants'
-         @protected[link.head_uuid] = true
-         if link.tail_uuid == current_user.uuid
-           @is_persistent = true
-         end
+     if current_user
+       jobs_with = lambda do |conds|
+         Job.limit(RELATION_LIMIT).where(conds)
+           .results.sort_by { |j| j.finished_at || j.created_at }
        end
+       @output_of = jobs_with.call(output: @object.uuid)
+       @log_of = jobs_with.call(log: @object.uuid)
+       folder_links = Link.limit(RELATION_LIMIT).order("modified_at DESC")
+         .where(head_uuid: @object.uuid, link_class: 'name').results
+       folder_hash = Group.where(uuid: folder_links.map(&:tail_uuid)).to_hash
+       @folders = folder_links.map { |link| folder_hash[link.tail_uuid] }
+       @permissions = Link.limit(RELATION_LIMIT).order("modified_at DESC")
+         .where(head_uuid: @object.uuid, link_class: 'permission',
+                name: 'can_read').results
+       @logs = Log.limit(RELATION_LIMIT).order("created_at DESC")
+         .where(object_uuid: @object.uuid).results
+       @is_persistent = Link.limit(1)
+         .where(head_uuid: @object.uuid, tail_uuid: current_user.uuid,
+                link_class: 'resources', name: 'wants')
+         .results.any?
++      @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
      end
-     Link.where(tail_uuid: @sourcedata.keys).each do |link|
-       if link.link_class == 'data_origin'
-         @sourcedata[link.tail_uuid][:data_origins] ||= []
-         @sourcedata[link.tail_uuid][:data_origins] << [link.name, link.head_uuid]
-       end
-     end
-     Collection.where(uuid: @sourcedata.keys).each do |collection|
-       if @sourcedata[collection.uuid]
-         @sourcedata[collection.uuid][:collection] = collection
-       end
-     end
- 
-     Collection.where(uuid: @object.uuid).each do |u|
-       @prov_svg = ProvenanceHelper::create_provenance_graph(u.provenance, "provenance_svg",
-                                                             {:request => request,
-                                                               :direction => :bottom_up,
-                                                               :combine_jobs => :script_only}) rescue nil
-       @used_by_svg = ProvenanceHelper::create_provenance_graph(u.used_by, "used_by_svg",
-                                                                {:request => request,
-                                                                  :direction => :top_down,
-                                                                  :combine_jobs => :script_only,
-                                                                  :pdata_only => true}) rescue nil
-     end
+     @prov_svg = ProvenanceHelper::create_provenance_graph(@object.provenance, "provenance_svg",
+                                                           {:request => request,
+                                                             :direction => :bottom_up,
+                                                             :combine_jobs => :script_only}) rescue nil
+     @used_by_svg = ProvenanceHelper::create_provenance_graph(@object.used_by, "used_by_svg",
+                                                              {:request => request,
+                                                                :direction => :top_down,
+                                                                :combine_jobs => :script_only,
+                                                                :pdata_only => true}) rescue nil
    end
  
 +  def sharing_popup
 +    @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
 +    respond_to do |format|
 +      format.html
 +      format.js
 +    end
 +  end
 +
 +  def share
-     a = ApiClientAuthorization.create(scopes: ["GET /arvados/v1/collections/#{@object.uuid}", "GET /arvados/v1/collections/#{@object.uuid}/"])
++    a = ApiClientAuthorization.create(scopes: sharing_scopes)
 +    @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
 +    render 'sharing_popup'
 +  end
 +
 +  def unshare
 +    @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
 +    @search_sharing.each do |s|
 +      s.destroy
 +    end
 +    @search_sharing = search_scopes.select { |s| s.scopes != ['all'] }
 +    render 'sharing_popup'
 +  end
 +
    protected
  
-   def find_usable_token
-     # Iterate over every token available to make it the current token and
+   def find_usable_token(token_list)
+     # Iterate over every given token to make it the current token and
      # yield the given block.
      # If the block succeeds, return the token it used.
      # Otherwise, render an error response based on the most specific
diff --cc apps/workbench/app/views/collections/_sharing_button.html.erb
index b4f59f7,0000000..36952d6
mode 100644,000000..100644
--- a/apps/workbench/app/views/collections/_sharing_button.html.erb
+++ b/apps/workbench/app/views/collections/_sharing_button.html.erb
@@@ -1,8 -1,0 +1,8 @@@
 +<% if @search_sharing.any? %>
 +  <% linktext = "Shared" %>
 +  <% btnstyle = "btn-success" %>
 +<% else %>
 +  <% linktext = "Share" %>
 +  <% btnstyle = "btn-info" %>
 +<% end %>
- <%= link_to linktext, sharing_popup_collection_url(id: @object.uuid),  {class: "btn-xs #{btnstyle}", :remote => true, 'data-toggle' =>  "modal", 'data-target' => '#collection-sharing-modal-window'}  %>
++<%= link_to linktext, sharing_popup_collection_url(id: @object.uuid),  {class: "btn #{btnstyle}", :remote => true, 'data-toggle' =>  "modal", 'data-target' => '#collection-sharing-modal-window'}  %>
diff --cc apps/workbench/app/views/collections/_sharing_popup.html.erb
index 719f8fb,0000000..f7f0555
mode 100644,000000..100644
--- a/apps/workbench/app/views/collections/_sharing_popup.html.erb
+++ b/apps/workbench/app/views/collections/_sharing_popup.html.erb
@@@ -1,37 -1,0 +1,37 @@@
 +
 +<div class="modal-dialog">
 +  <div class="modal-content">
 +    <div class="modal-header">
 +      <button type="button" class="close" onClick="reset_form()" data-dismiss="modal" aria-hidden="true">×</button>
 +      <h4 class="modal-title">Sharing</h4>
 +    </div>
 +    <div class="modal-body">
 +      <div id="sharing-text" style="text-align: center; word-wrap: break-word">
 +        <% if @search_sharing.any? %>
 +          Use this link to share this collection:<br>
 +          <big>
-           <% link = collection_url + "?reader_tokens[]=#{@search_sharing.first.api_token}" %>
++          <% link = collections_url + "/download/#{@object.uuid}/#{@search_sharing.first.api_token}" %>
 +          <%= link_to link, link %>
 +          </big>
 +        <% else %>
 +          Not shared.
 +        <% end %>
 +      </div>
 +      <div style="text-align: center; padding-top: 1em">
 +      <% if @search_sharing and @search_sharing.any? %>
 +        <%= link_to "Unshare", unshare_collection_url, {
 +            class: 'btn btn-success',
 +              remote: true,
 +            method: 'post'
 +            } %>
 +      <% else %>
 +        <%= link_to "Share", share_collection_url, {
 +              class: 'btn btn-info',
 +              remote: true,
 +              method: 'post'
 +            } %>
 +      <% end %>
 +      </div>
 +    </div>
 +  </div>
 +</div>
diff --cc apps/workbench/app/views/collections/_show_files.html.erb
index 28c3396,c5c1279..74e02f7
--- a/apps/workbench/app/views/collections/_show_files.html.erb
+++ b/apps/workbench/app/views/collections/_show_files.html.erb
@@@ -10,12 -3,8 +3,9 @@@
    <div class="col-md-6"></div>
    <div class="col-md-6">
      <div class="pull-right">
-       <span id="sharing-button">
-         <%= render partial: 'sharing_button' %>
-       </span>
 -      Collection storage status:
 +      <span style="padding-left: 1em">Collection storage status:</span>
        <%= render partial: 'toggle_persist', locals: { uuid: @object.uuid, current_state: (@is_persistent ? 'persistent' : 'cache') } %>
 +
      </div>
    </div>
  </div>
@@@ -46,38 -38,31 +39,35 @@@
                  :class => 'persistent-selection',
                  :friendly_type => "File",
                  :friendly_name => "#{@object.uuid}/#{file_path}",
-                 :href => "#{url_for controller: 'collections', action: 'show', id: @object.uuid }/#{file_path}",
-                 :title => "Click to add this item to your selection list"
+                 :href => url_for(controller: 'collections', action: 'show_file',
+                                  uuid: @object.uuid, file: file_path),
+                 :title => "Include #{file_path} in your selections",
                } %>
-         </td>
-         <td>
-           <%= file[0] %>
-         </td>
- 
-       <td>
-         <%= link_to (if CollectionsHelper::is_image file[1]
-                        image_tag "#{url_for @object}/#{file_path}", class: "file-list-inline-image"
-                      else
-                        file[1]
-                      end),
-             {controller: 'collections', action: 'show_file', uuid: @object.uuid, file: file_path, size: file[2], disposition: 'inline'},
-             {title: file_path} %>
-       </td>
- 
-         <td style="text-align:right">
-           <%= raw(human_readable_bytes_html(file[2])) %>
-         </td>
- 
-         <td>
-           <div style="display:inline-block">
-             <%= link_to raw('<i class="glyphicon glyphicon-download-alt"></i>'), {controller: 'collections', action: 'show_file', uuid: @object.uuid, file: file_path, size: file[2], disposition: 'attachment'}, {class: 'btn btn-info btn-sm', title: 'Download'} %>
-           </div>
-         </td>
-       </tr>
-     <% end; end %>
-   </tbody>
- </table>
+           <%= link_to(raw('<i class="fa fa-search"></i>'),
+                       link_params.merge(disposition: 'inline'),
+                       {title: "View #{file_path}", class: "btn btn-info btn-sm"}) %>
+           <%= link_to(raw('<i class="fa fa-download"></i>'),
+                       link_params.merge(disposition: 'attachment'),
+                       {title: "Download #{file_path}", class: "btn btn-info btn-sm"}) %>
+         </div>
+       <% if CollectionsHelper::is_image(filename) %>
+         <div class="collection_files_name"><i class="fa fa-fw fa-bar-chart-o"></i> <%= filename %></div>
+        </div>
+         <div class="collection_files_inline">
+           <%= link_to(image_tag("#{url_for @object}/#{file_path}"),
+                       link_params.merge(disposition: 'inline'),
+                       {title: file_path}) %>
+         </div>
+       <% else %>
+         <div class="collection_files_name"><i class="fa fa-fw fa-file"></i> <%= filename %></div>
+        </div>
+       <% end %>
+       </li>
+     <% end  # if file or directory %>
+   <% end  # file_tree.each %>
+   <%= raw(dirstack.map { |_| "</ul>" }.join("</li>")) %>
+ <% end  # if file_tree %>
 +
 +<% content_for :footer_html do %>
 +<div id="collection-sharing-modal-window" class="modal fade" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>
 +<% end %>
diff --cc apps/workbench/app/views/collections/show.html.erb
index 0000000,9fc67ac..c26b74c
mode 000000,100644..100644
--- a/apps/workbench/app/views/collections/show.html.erb
+++ b/apps/workbench/app/views/collections/show.html.erb
@@@ -1,0 -1,105 +1,111 @@@
+ <div class="row row-fill-height">
+   <div class="col-md-6">
+     <div class="panel panel-info">
+       <div class="panel-heading">
+ 	<h3 class="panel-title">
+           <% default_name = "Collection #{@object.uuid}" %>
+ 	  <% name_html = render_editable_attribute @object, 'name', nil, {data: {emptytext: default_name}} %>
+           <%= (/\S/.match(name_html)) ? name_html : default_name %>
+ 	</h3>
+       </div>
+       <div class="panel-body">
+         <img src="/favicon.ico" class="pull-right" alt="" style="opacity: 0.3"/>
+         <% if not (@output_of.andand.any? or @log_of.andand.any?) %>
+           <p><i>No source information available.</i></p>
+         <% end %>
+ 
+         <% if @output_of.andand.any? %>
+           <p>Output of jobs:<br />
+           <%= render_arvados_object_list_start(@output_of, 'Show all jobs',
+                 jobs_path(filter: [['output', '=', @object.uuid]].to_json)) do |job| %>
+           <%= link_to_if_arvados_object(job, friendly_name: true) %><br />
+           <% end %>
+           </p>
+         <% end %>
+ 
+         <% if @log_of.andand.any? %>
+           <p>Log of jobs:<br />
+           <%= render_arvados_object_list_start(@log_of, 'Show all jobs',
+                 jobs_path(filter: [['log', '=', @object.uuid]].to_json)) do |job| %>
+           <%= link_to_if_arvados_object(job, friendly_name: true) %><br />
+           <% end %>
+           </p>
+         <% end %>
+       </div>
+     </div>
+   </div>
+   <div class="col-md-3">
+     <div class="panel panel-default">
+       <div class="panel-heading">
+ 	<h3 class="panel-title">
+ 	  Activity
+ 	</h3>
+       </div>
+       <div class="panel-body smaller-text">
+         <!--
+ 	<input type="text" class="form-control" placeholder="Search"/>
+         -->
+ 	<div style="height:0.5em;"></div>
+         <% if not @logs.andand.any? %>
+           <p>
+             Created: <%= @object.created_at.to_s(:long) %>
+           </p>
+           <p>
+             Last modified: <%= @object.modified_at.to_s(:long) %> by <%= link_to_if_arvados_object @object.modified_by_user_uuid, friendly_name: true %>
+           </p>
+         <% else %>
+           <%= render_arvados_object_list_start(@logs, 'Show all activity',
+                 logs_path(filters: [['object_uuid','=', at object.uuid]].to_json)) do |log| %>
+           <p>
+           <%= time_ago_in_words(log.event_at) %> ago: <%= log.summary %>
+             <% if log.object_uuid %>
+             <%= link_to_if_arvados_object log.object_uuid, link_text: raw('<i class="fa fa-hand-o-right"></i>') %>
+             <% end %>
+           </p>
+           <% end %>
+         <% end %>
+       </div>
+     </div>
+   </div>
+   <div class="col-md-3">
+     <div class="panel panel-default">
+       <div class="panel-heading">
+ 	<h3 class="panel-title">
+ 	  Sharing and permissions
+ 	</h3>
+       </div>
+       <div class="panel-body">
+         <!--
+ 	<input type="text" class="form-control" placeholder="Search"/>
+         -->
++
++        <div id="sharing-button" style="text-align: center">
++          <%= render partial: 'sharing_button' %>
++        </div>
++
+ 	<div style="height:0.5em;"></div>
+         <% if @folders.andand.any? %>
+           <p>Included in folders:<br />
+           <%= render_arvados_object_list_start(@folders, 'Show all folders',
+                 links_path(filter: [['head_uuid', '=', @object.uuid],
+                                     ['link_class', '=', 'name']].to_json)) do |folder| %>
+           <%= link_to_if_arvados_object(folder, friendly_name: true) %><br />
+           <% end %>
+           </p>
+         <% end %>
+         <% if @permissions.andand.any? %>
+           <p>Readable by:<br />
+           <%= render_arvados_object_list_start(@permissions, 'Show all permissions',
+                 links_path(filter: [['head_uuid', '=', @object.uuid],
+                                     ['link_class', '=', 'permission']].to_json)) do |link| %>
+           <%= link_to_if_arvados_object(link.tail_uuid, friendly_name: true) %><br />
+           <% end %>
+           </p>
+         <% end %>
++
+       </div>
+     </div>
+   </div>
+ </div>
+ 
+ <%= render file: 'application/show.html.erb' %>
diff --cc apps/workbench/config/routes.rb
index 43eb7ae,c12cc98..6e3d66b
--- a/apps/workbench/config/routes.rb
+++ b/apps/workbench/config/routes.rb
@@@ -39,13 -40,13 +40,16 @@@ ArvadosWorkbench::Application.routes.dr
      get 'compare', on: :collection
    end
    resources :links
-   match '/collections/graph' => 'collections#graph'
+   get '/collections/graph' => 'collections#graph'
    resources :collections do
      post 'set_persistent', on: :member
 +    get 'sharing_popup', :on => :member
 +    post 'share', :on => :member
 +    post 'unshare', :on => :member
    end
+   get('/collections/download/:uuid/:reader_token/*file' => 'collections#show_file',
+       format: false)
+   get '/collections/download/:uuid/:reader_token' => 'collections#show_file_links'
    get '/collections/:uuid/*file' => 'collections#show_file', :format => false
    resources :folders do
      match 'remove/:item_uuid', on: :member, via: :delete, action: :remove_item
diff --cc services/api/app/models/arvados_model.rb
index 290e156,bfd228e..adff09d
--- a/services/api/app/models/arvados_model.rb
+++ b/services/api/app/models/arvados_model.rb
@@@ -187,26 -187,15 +187,17 @@@ class ArvadosModel < ActiveRecord::Bas
  
    def ensure_owner_uuid_is_permitted
      raise PermissionDeniedError if !current_user
-     if self.respond_to? :owner_uuid=
+     if respond_to? :owner_uuid=
        self.owner_uuid ||= current_user.uuid
-       if self.owner_uuid_changed?
-         if current_user.uuid == self.owner_uuid or
-             current_user.can? write: self.owner_uuid
-           # current_user is, or has :write permission on, the new owner
-         else
-           logger.warn "User #{current_user.uuid} tried to change owner_uuid of #{self.class.to_s} #{self.uuid} to #{self.owner_uuid} but does not have permission to write to #{self.owner_uuid}"
-           raise PermissionDeniedError
-         end
-       end
+     end
+     if self.owner_uuid_changed?
 -      if current_user.uuid == self.owner_uuid or
 +      if new_record?
 +        return true
-       elsif current_user.uuid == self.owner_uuid_was or
-           current_user.uuid == self.uuid or
-           current_user.can? write: self.owner_uuid_was
-         # current user is, or has :write permission on, the previous owner
-         return true
++      elsif current_user.uuid == self.owner_uuid or
+           current_user.can? write: self.owner_uuid
+         # current_user is, or has :write permission on, the new owner
        else
 -        logger.warn "User #{current_user.uuid} tried to change owner_uuid of #{self.class.to_s} #{self.uuid} to #{self.owner_uuid} but does not have permission to write to #{self.owner_uuid}"
 +        logger.warn "User #{current_user.uuid} tried to modify #{self.class.to_s} #{self.uuid} but does not have permission to write #{self.owner_uuid_was}"
          raise PermissionDeniedError
        end
      end

commit 06a0c1d9f2e6cf1d5a9fd00b53071d857252f9fa
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Thu May 8 09:34:27 2014 -0400

    Adding missing file.

diff --git a/apps/workbench/app/views/collections/_sharing_button.html.erb b/apps/workbench/app/views/collections/_sharing_button.html.erb
new file mode 100644
index 0000000..b4f59f7
--- /dev/null
+++ b/apps/workbench/app/views/collections/_sharing_button.html.erb
@@ -0,0 +1,8 @@
+<% if @search_sharing.any? %>
+  <% linktext = "Shared" %>
+  <% btnstyle = "btn-success" %>
+<% else %>
+  <% linktext = "Share" %>
+  <% btnstyle = "btn-info" %>
+<% end %>
+<%= link_to linktext, sharing_popup_collection_url(id: @object.uuid),  {class: "btn-xs #{btnstyle}", :remote => true, 'data-toggle' =>  "modal", 'data-target' => '#collection-sharing-modal-window'}  %>

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list