{"action":"created","comment":{"url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/comments/337518443","pull_request_review_id":305208467,"id":337518443,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDMzNzUxODQ0Mw==","diff_hunk":"@@ -0,0 +1,212 @@\n+/*\n+ * Sonatype Nexus (TM) Open Source Version\n+ * Copyright (c) 2017-present Sonatype, Inc.\n+ * All rights reserved. Includes the third-party code listed at http://links.sonatype.com/products/nexus/oss/attributions.\n+ *\n+ * This program and the accompanying materials are made available under the terms of the Eclipse Public License Version 1.0,\n+ * which accompanies this distribution and is available at http://www.eclipse.org/legal/epl-v10.html.\n+ *\n+ * Sonatype Nexus (TM) Professional Version is available from Sonatype, Inc. \"Sonatype\" and \"Sonatype Nexus\" are trademarks\n+ * of Sonatype, Inc. Apache Maven is a trademark of the Apache Software Foundation. M2eclipse is a trademark of the\n+ * Eclipse Foundation. All other trademarks are the property of their respective owners.\n+ */\n+package org.sonatype.nexus.repository.r.internal;\n+\n+import java.io.IOException;\n+import java.io.UncheckedIOException;\n+\n+import javax.inject.Inject;\n+import javax.inject.Named;\n+\n+import org.sonatype.nexus.common.event.EventAware.Asynchronous;\n+import org.sonatype.nexus.common.event.EventManager;\n+import org.sonatype.nexus.common.stateguard.Guarded;\n+import org.sonatype.nexus.repository.FacetSupport;\n+import org.sonatype.nexus.repository.r.RHostedFacet;\n+import org.sonatype.nexus.repository.r.RPackagesBuilderFacet;\n+import org.sonatype.nexus.repository.storage.Asset;\n+import org.sonatype.nexus.repository.storage.AssetCreatedEvent;\n+import org.sonatype.nexus.repository.storage.AssetDeletedEvent;\n+import org.sonatype.nexus.repository.storage.AssetEvent;\n+import org.sonatype.nexus.repository.storage.AssetUpdatedEvent;\n+import org.sonatype.nexus.repository.storage.StorageFacet;\n+import org.sonatype.nexus.repository.storage.TempBlob;\n+import org.sonatype.nexus.transaction.UnitOfWork;\n+\n+import com.google.common.eventbus.AllowConcurrentEvents;\n+import com.google.common.eventbus.Subscribe;\n+\n+import static com.google.common.base.Preconditions.checkNotNull;\n+import static org.sonatype.nexus.common.stateguard.StateGuardLifecycleSupport.State.STARTED;\n+import static org.sonatype.nexus.repository.r.internal.AssetKind.ARCHIVE;\n+import static org.sonatype.nexus.repository.r.internal.RPathUtils.PACKAGES_GZ_FILENAME;\n+import static org.sonatype.nexus.repository.r.internal.RPathUtils.buildPath;\n+import static org.sonatype.nexus.repository.r.internal.RPathUtils.getBasePath;\n+\n+/**\n+ * Implementation of {@link RPackagesBuilderFacet} targeted for use with hosted repositories. Uses event dispatching to\n+ * ensure that we do not have race conditions when processing and rebuilding metadata, and also imposes a waiting period\n+ * to batch metadata updates.\n+ */\n+@Named\n+public class RPackagesBuilderFacetImpl\n+    extends FacetSupport\n+    implements RPackagesBuilderFacet, Asynchronous\n+{\n+  /**\n+   * The event manager to use when posting new events.\n+   */\n+  private final EventManager eventManager;\n+\n+  /**\n+   * The interval in milliseconds to wait between rebuilds.\n+   */\n+  private final long interval;\n+\n+  /**\n+   * The flag indicating if we are currently waiting to rebuild.\n+   */\n+  private boolean waiting;\n+\n+  /**\n+   * Constructor.\n+   *\n+   * @param eventManager The event manager to use when posting new events.\n+   * @param interval     The interval in milliseconds to wait between rebuilds.\n+   */\n+  @Inject\n+  public RPackagesBuilderFacetImpl(\n+      final EventManager eventManager,\n+      @Named(\"${nexus.r.packagesBuilder.interval:-1000}\") final long interval)\n+  {\n+    this.eventManager = checkNotNull(eventManager);\n+    this.interval = interval;\n+  }\n+\n+  /**\n+   * Handles {@code AssetDeletedEvent} events concurrently, requesting a metadata invalidation and rebuild if warranted\n+   * by the event contents.\n+   *\n+   * @param deleted The deletion event to handle.\n+   */\n+  @Subscribe\n+  @Guarded(by = STARTED)\n+  @AllowConcurrentEvents\n+  public void on(final AssetDeletedEvent deleted) {\n+    if (shouldInvalidate(deleted)) {\n+      invalidateMetadata(getBasePath(deleted.getAsset().name()));\n+    }\n+  }\n+\n+  /**\n+   * Handles {@code AssetCreatedEvent} events concurrently, requesting a metadata invalidation and rebuild if warranted\n+   * by the event contents.\n+   *\n+   * @param created The creation event to handle.\n+   */\n+  @Subscribe\n+  @Guarded(by = STARTED)\n+  @AllowConcurrentEvents\n+  public void on(final AssetCreatedEvent created) {\n+    if (shouldInvalidate(created)) {\n+      invalidateMetadata(getBasePath(created.getAsset().name()));\n+    }\n+  }\n+\n+  /**\n+   * Handles {@code AssetUpdatedEvent} events concurrently, requesting a metadata invalidation and rebuild if warranted\n+   * by the event contents.\n+   *\n+   * @param updated The update event to handle.\n+   */\n+  @Subscribe\n+  @Guarded(by = STARTED)\n+  @AllowConcurrentEvents\n+  public void on(final AssetUpdatedEvent updated) {\n+    if (shouldInvalidate(updated)) {\n+      invalidateMetadata(getBasePath(updated.getAsset().name()));\n+    }\n+  }\n+\n+  /**\n+   * Handles metadata invalidation for this repository given the specified base path. Internally this is handled by\n+   * posting a {@code RMetadataInvalidationEvent} to the event manager which then triggers the actual metadata\n+   * regeneration. Note that the regeneration may not be instantaneous (and that the waiting period is configurable).\n+   *\n+   * @param basePath The base path of the PACKAGES.gz file to invalidate.\n+   */\n+  @Override\n+  public void invalidateMetadata(final String basePath) {\n+    if (!waiting) {\n+      eventManager.post(new RMetadataInvalidationEvent(getRepository().getName(), basePath));\n+    }\n+  }\n+\n+  /**\n+   * Listen for invalidation of the metadata, wait a configured time and then rebuild. The waiting allows throwing away\n+   * of subsequent events to reduce the number of rebuilds if multiple RPMs are being uploaded. This method must NOT be\n+   * allowed to process concurrent events as race conditions may result when rebuilding the data.\n+   */\n+  @Subscribe\n+  public void on(final RMetadataInvalidationEvent event) {\n+    if (getRepository().getName().equals(event.getRepositoryName())) {\n+      try {\n+        waiting = true;\n+        Thread.sleep(interval);\n+      }\n+      catch (InterruptedException e) {\n+        log.warn(\"R invalidation thread interrupted on repository {}, proceeding with invalidation\",\n+            getRepository().getName());","path":"nexus-repository-r/src/main/java/org/sonatype/nexus/repository/r/internal/RPackagesBuilderFacetImpl.java","position":159,"original_position":159,"commit_id":"ed4f13fe223cdff2a4e750cca1cc41fbc1f95601","original_commit_id":"eb7a5956bd2fc296dc4a110b62a92bfe99bf458e","user":{"login":"chernikovmaksym","id":15105120,"node_id":"MDQ6VXNlcjE1MTA1MTIw","avatar_url":"https://avatars0.githubusercontent.com/u/15105120?v=4","gravatar_id":"","url":"https://api.github.com/users/chernikovmaksym","html_url":"https://github.com/chernikovmaksym","followers_url":"https://api.github.com/users/chernikovmaksym/followers","following_url":"https://api.github.com/users/chernikovmaksym/following{/other_user}","gists_url":"https://api.github.com/users/chernikovmaksym/gists{/gist_id}","starred_url":"https://api.github.com/users/chernikovmaksym/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chernikovmaksym/subscriptions","organizations_url":"https://api.github.com/users/chernikovmaksym/orgs","repos_url":"https://api.github.com/users/chernikovmaksym/repos","events_url":"https://api.github.com/users/chernikovmaksym/events{/privacy}","received_events_url":"https://api.github.com/users/chernikovmaksym/received_events","type":"User","site_admin":false},"body":"done in ed4f13fe223cdff2a4e750cca1cc41fbc1f95601","created_at":"2019-10-22T13:33:50Z","updated_at":"2019-10-22T13:33:50Z","html_url":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97#discussion_r337518443","pull_request_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/comments/337518443"},"html":{"href":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97#discussion_r337518443"},"pull_request":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97"}},"in_reply_to_id":337452945},"pull_request":{"url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97","id":330347961,"node_id":"MDExOlB1bGxSZXF1ZXN0MzMwMzQ3OTYx","html_url":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97","diff_url":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97.diff","patch_url":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97.patch","issue_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/97","number":97,"state":"open","locked":false,"title":"NEXUS-21591: Event-driven metadata creation","user":{"login":"chernikovmaksym","id":15105120,"node_id":"MDQ6VXNlcjE1MTA1MTIw","avatar_url":"https://avatars0.githubusercontent.com/u/15105120?v=4","gravatar_id":"","url":"https://api.github.com/users/chernikovmaksym","html_url":"https://github.com/chernikovmaksym","followers_url":"https://api.github.com/users/chernikovmaksym/followers","following_url":"https://api.github.com/users/chernikovmaksym/following{/other_user}","gists_url":"https://api.github.com/users/chernikovmaksym/gists{/gist_id}","starred_url":"https://api.github.com/users/chernikovmaksym/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chernikovmaksym/subscriptions","organizations_url":"https://api.github.com/users/chernikovmaksym/orgs","repos_url":"https://api.github.com/users/chernikovmaksym/repos","events_url":"https://api.github.com/users/chernikovmaksym/events{/privacy}","received_events_url":"https://api.github.com/users/chernikovmaksym/received_events","type":"User","site_admin":false},"body":"https://issues.sonatype.org/browse/NEXUS-21591\r\n\r\nUpdated https://github.com/sonatype-nexus-community/nexus-repository-r/pull/37 PR\r\n\r\nRelates to https://github.com/sonatype-nexus-community/nexus-repository-r/issues/10","created_at":"2019-10-21T11:07:27Z","updated_at":"2019-10-22T13:33:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"64914e4c00940f70aef9fe9aee86c894b8020777","assignee":null,"assignees":[],"requested_reviewers":[{"login":"DarthHater","id":5544326,"node_id":"MDQ6VXNlcjU1NDQzMjY=","avatar_url":"https://avatars1.githubusercontent.com/u/5544326?v=4","gravatar_id":"","url":"https://api.github.com/users/DarthHater","html_url":"https://github.com/DarthHater","followers_url":"https://api.github.com/users/DarthHater/followers","following_url":"https://api.github.com/users/DarthHater/following{/other_user}","gists_url":"https://api.github.com/users/DarthHater/gists{/gist_id}","starred_url":"https://api.github.com/users/DarthHater/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DarthHater/subscriptions","organizations_url":"https://api.github.com/users/DarthHater/orgs","repos_url":"https://api.github.com/users/DarthHater/repos","events_url":"https://api.github.com/users/DarthHater/events{/privacy}","received_events_url":"https://api.github.com/users/DarthHater/received_events","type":"User","site_admin":false},{"login":"aornatovskyy","id":8549071,"node_id":"MDQ6VXNlcjg1NDkwNzE=","avatar_url":"https://avatars1.githubusercontent.com/u/8549071?v=4","gravatar_id":"","url":"https://api.github.com/users/aornatovskyy","html_url":"https://github.com/aornatovskyy","followers_url":"https://api.github.com/users/aornatovskyy/followers","following_url":"https://api.github.com/users/aornatovskyy/following{/other_user}","gists_url":"https://api.github.com/users/aornatovskyy/gists{/gist_id}","starred_url":"https://api.github.com/users/aornatovskyy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aornatovskyy/subscriptions","organizations_url":"https://api.github.com/users/aornatovskyy/orgs","repos_url":"https://api.github.com/users/aornatovskyy/repos","events_url":"https://api.github.com/users/aornatovskyy/events{/privacy}","received_events_url":"https://api.github.com/users/aornatovskyy/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":609093617,"node_id":"MDU6TGFiZWw2MDkwOTM2MTc=","url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/labels/review","name":"review","color":"bfd4f2","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97/commits","review_comments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97/comments","review_comment_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/comments{/number}","comments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/97/comments","statuses_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/statuses/ed4f13fe223cdff2a4e750cca1cc41fbc1f95601","head":{"label":"sonatype-nexus-community:NEXUS-21591_event_driven_metadata","ref":"NEXUS-21591_event_driven_metadata","sha":"ed4f13fe223cdff2a4e750cca1cc41fbc1f95601","user":{"login":"sonatype-nexus-community","id":33330803,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzMzMwODAz","avatar_url":"https://avatars0.githubusercontent.com/u/33330803?v=4","gravatar_id":"","url":"https://api.github.com/users/sonatype-nexus-community","html_url":"https://github.com/sonatype-nexus-community","followers_url":"https://api.github.com/users/sonatype-nexus-community/followers","following_url":"https://api.github.com/users/sonatype-nexus-community/following{/other_user}","gists_url":"https://api.github.com/users/sonatype-nexus-community/gists{/gist_id}","starred_url":"https://api.github.com/users/sonatype-nexus-community/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonatype-nexus-community/subscriptions","organizations_url":"https://api.github.com/users/sonatype-nexus-community/orgs","repos_url":"https://api.github.com/users/sonatype-nexus-community/repos","events_url":"https://api.github.com/users/sonatype-nexus-community/events{/privacy}","received_events_url":"https://api.github.com/users/sonatype-nexus-community/received_events","type":"Organization","site_admin":false},"repo":{"id":91826174,"node_id":"MDEwOlJlcG9zaXRvcnk5MTgyNjE3NA==","name":"nexus-repository-r","full_name":"sonatype-nexus-community/nexus-repository-r","private":false,"owner":{"login":"sonatype-nexus-community","id":33330803,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzMzMwODAz","avatar_url":"https://avatars0.githubusercontent.com/u/33330803?v=4","gravatar_id":"","url":"https://api.github.com/users/sonatype-nexus-community","html_url":"https://github.com/sonatype-nexus-community","followers_url":"https://api.github.com/users/sonatype-nexus-community/followers","following_url":"https://api.github.com/users/sonatype-nexus-community/following{/other_user}","gists_url":"https://api.github.com/users/sonatype-nexus-community/gists{/gist_id}","starred_url":"https://api.github.com/users/sonatype-nexus-community/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonatype-nexus-community/subscriptions","organizations_url":"https://api.github.com/users/sonatype-nexus-community/orgs","repos_url":"https://api.github.com/users/sonatype-nexus-community/repos","events_url":"https://api.github.com/users/sonatype-nexus-community/events{/privacy}","received_events_url":"https://api.github.com/users/sonatype-nexus-community/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/sonatype-nexus-community/nexus-repository-r","description":"R, v data science, much functional programming, doge","fork":false,"url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r","forks_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/forks","keys_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/teams","hooks_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/hooks","issue_events_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/events{/number}","events_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/events","assignees_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/assignees{/user}","branches_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/branches{/branch}","tags_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/tags","blobs_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/refs{/sha}","trees_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/statuses/{sha}","languages_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/languages","stargazers_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/stargazers","contributors_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/contributors","subscribers_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/subscribers","subscription_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/subscription","commits_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/commits{/sha}","git_commits_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/commits{/sha}","comments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/comments{/number}","issue_comment_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/comments{/number}","contents_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/contents/{+path}","compare_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/merges","archive_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/downloads","issues_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues{/number}","pulls_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls{/number}","milestones_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/milestones{/number}","notifications_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/labels{/name}","releases_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/releases{/id}","deployments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/deployments","created_at":"2017-05-19T16:40:22Z","updated_at":"2019-10-11T14:07:49Z","pushed_at":"2019-10-22T13:33:39Z","git_url":"git://github.com/sonatype-nexus-community/nexus-repository-r.git","ssh_url":"git@github.com:sonatype-nexus-community/nexus-repository-r.git","clone_url":"https://github.com/sonatype-nexus-community/nexus-repository-r.git","svn_url":"https://github.com/sonatype-nexus-community/nexus-repository-r","homepage":"","size":7164,"stargazers_count":24,"watchers_count":24,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":17,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":22,"license":{"key":"epl-1.0","name":"Eclipse Public License 1.0","spdx_id":"EPL-1.0","url":"https://api.github.com/licenses/epl-1.0","node_id":"MDc6TGljZW5zZTc="},"forks":17,"open_issues":22,"watchers":24,"default_branch":"master"}},"base":{"label":"sonatype-nexus-community:NEXUS-20439_r_format_support","ref":"NEXUS-20439_r_format_support","sha":"5fb38efbaccc6e36592b88570d9196bd154737a4","user":{"login":"sonatype-nexus-community","id":33330803,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzMzMwODAz","avatar_url":"https://avatars0.githubusercontent.com/u/33330803?v=4","gravatar_id":"","url":"https://api.github.com/users/sonatype-nexus-community","html_url":"https://github.com/sonatype-nexus-community","followers_url":"https://api.github.com/users/sonatype-nexus-community/followers","following_url":"https://api.github.com/users/sonatype-nexus-community/following{/other_user}","gists_url":"https://api.github.com/users/sonatype-nexus-community/gists{/gist_id}","starred_url":"https://api.github.com/users/sonatype-nexus-community/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonatype-nexus-community/subscriptions","organizations_url":"https://api.github.com/users/sonatype-nexus-community/orgs","repos_url":"https://api.github.com/users/sonatype-nexus-community/repos","events_url":"https://api.github.com/users/sonatype-nexus-community/events{/privacy}","received_events_url":"https://api.github.com/users/sonatype-nexus-community/received_events","type":"Organization","site_admin":false},"repo":{"id":91826174,"node_id":"MDEwOlJlcG9zaXRvcnk5MTgyNjE3NA==","name":"nexus-repository-r","full_name":"sonatype-nexus-community/nexus-repository-r","private":false,"owner":{"login":"sonatype-nexus-community","id":33330803,"node_id":"MDEyOk9yZ2FuaXphdGlvbjMzMzMwODAz","avatar_url":"https://avatars0.githubusercontent.com/u/33330803?v=4","gravatar_id":"","url":"https://api.github.com/users/sonatype-nexus-community","html_url":"https://github.com/sonatype-nexus-community","followers_url":"https://api.github.com/users/sonatype-nexus-community/followers","following_url":"https://api.github.com/users/sonatype-nexus-community/following{/other_user}","gists_url":"https://api.github.com/users/sonatype-nexus-community/gists{/gist_id}","starred_url":"https://api.github.com/users/sonatype-nexus-community/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sonatype-nexus-community/subscriptions","organizations_url":"https://api.github.com/users/sonatype-nexus-community/orgs","repos_url":"https://api.github.com/users/sonatype-nexus-community/repos","events_url":"https://api.github.com/users/sonatype-nexus-community/events{/privacy}","received_events_url":"https://api.github.com/users/sonatype-nexus-community/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/sonatype-nexus-community/nexus-repository-r","description":"R, v data science, much functional programming, doge","fork":false,"url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r","forks_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/forks","keys_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/teams","hooks_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/hooks","issue_events_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/events{/number}","events_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/events","assignees_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/assignees{/user}","branches_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/branches{/branch}","tags_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/tags","blobs_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/refs{/sha}","trees_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/statuses/{sha}","languages_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/languages","stargazers_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/stargazers","contributors_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/contributors","subscribers_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/subscribers","subscription_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/subscription","commits_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/commits{/sha}","git_commits_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/git/commits{/sha}","comments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/comments{/number}","issue_comment_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/comments{/number}","contents_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/contents/{+path}","compare_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/merges","archive_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/downloads","issues_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues{/number}","pulls_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls{/number}","milestones_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/milestones{/number}","notifications_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/labels{/name}","releases_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/releases{/id}","deployments_url":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/deployments","created_at":"2017-05-19T16:40:22Z","updated_at":"2019-10-11T14:07:49Z","pushed_at":"2019-10-22T13:33:39Z","git_url":"git://github.com/sonatype-nexus-community/nexus-repository-r.git","ssh_url":"git@github.com:sonatype-nexus-community/nexus-repository-r.git","clone_url":"https://github.com/sonatype-nexus-community/nexus-repository-r.git","svn_url":"https://github.com/sonatype-nexus-community/nexus-repository-r","homepage":"","size":7164,"stargazers_count":24,"watchers_count":24,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":17,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":22,"license":{"key":"epl-1.0","name":"Eclipse Public License 1.0","spdx_id":"EPL-1.0","url":"https://api.github.com/licenses/epl-1.0","node_id":"MDc6TGljZW5zZTc="},"forks":17,"open_issues":22,"watchers":24,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97"},"html":{"href":"https://github.com/sonatype-nexus-community/nexus-repository-r/pull/97"},"issue":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/97"},"comments":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/issues/97/comments"},"review_comments":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97/comments"},"review_comment":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/pulls/97/commits"},"statuses":{"href":"https://api.github.com/repos/sonatype-nexus-community/nexus-repository-r/statuses/ed4f13fe223cdff2a4e750cca1cc41fbc1f95601"}},"author_association":"NONE"}}
{"actor":{"display_login":"chernikovmaksym"}}