{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/44875690","id":44875690,"diff_hunk":"@@ -0,0 +1,498 @@\n+/*\n+ * Copyright 2015, Google Inc. All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions are\n+ * met:\n+ *\n+ *    * Redistributions of source code must retain the above copyright\n+ * notice, this list of conditions and the following disclaimer.\n+ *    * Redistributions in binary form must reproduce the above\n+ * copyright notice, this list of conditions and the following disclaimer\n+ * in the documentation and/or other materials provided with the\n+ * distribution.\n+ *\n+ *    * Neither the name of Google Inc. nor the names of its\n+ * contributors may be used to endorse or promote products derived from\n+ * this software without specific prior written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+/*\n+ * EDITING INSTRUCTIONS\n+ * This file was generated from the file google/pubsub/v1/pubsub.proto,\n+ * and updates to that file get reflected here through a regular refresh process.\n+ * However, manual additions are allowed because the refresh process performs\n+ * a 3-way merge in order to preserve those manual additions. In order to not\n+ * break the refresh process, only certain types of modifications are\n+ * allowed.\n+ *\n+ * Allowed modifications - currently there is only one type allowed:\n+ * 1. New methods (these should be added to the end of the class)\n+ *\n+ * Happy editing!\n+ */\n+package com.google.gcloud.pubsub.spi;\n+\n+import com.google.protobuf.Empty;\n+import com.google.pubsub.v1.DeleteTopicRequest;\n+import com.google.pubsub.v1.GetTopicRequest;\n+import com.google.pubsub.v1.ListTopicSubscriptionsRequest;\n+import com.google.pubsub.v1.ListTopicSubscriptionsResponse;\n+import com.google.pubsub.v1.ListTopicsRequest;\n+import com.google.pubsub.v1.ListTopicsResponse;\n+import com.google.pubsub.v1.PublishRequest;\n+import com.google.pubsub.v1.PublishResponse;\n+import com.google.pubsub.v1.PublisherGrpc;\n+import com.google.pubsub.v1.PubsubMessage;\n+import com.google.pubsub.v1.Topic;\n+\n+import io.gapi.gax.grpc.ApiCallable;\n+import io.gapi.gax.grpc.PageDescriptor;\n+import io.gapi.gax.grpc.ServiceApiSettings;\n+import io.gapi.gax.internal.ApiUtils;\n+import io.gapi.gax.protobuf.PathTemplate;\n+import io.grpc.Channel;\n+import io.grpc.ManagedChannel;\n+\n+import java.io.IOException;\n+import java.util.List;\n+\n+// Manually-added imports: add custom (non-generated) imports after this point.\n+\n+\n+\n+// AUTO-GENERATED DOCUMENTATION AND SERVICE - see instructions at the top of the file for editing.\n+/**\n+ * The service that an application uses to manipulate topics, and to send\n+ * messages to a topic.\n+ */\n+@javax.annotation.Generated(\"by the veneer generator\")\n+public class PublisherApi implements AutoCloseable {\n+\n+  // =========\n+  // Constants\n+  // =========\n+\n+  /**\n+   * The default address of the service.\n+   */\n+  public static final String SERVICE_ADDRESS = \"pubsub-experimental.googleapis.com\";\n+\n+  /**\n+   * The default port of the service.\n+   */\n+  public static final int DEFAULT_SERVICE_PORT = 443;\n+\n+\n+  public static final ApiCallable<Topic, Topic>\n+      CREATE_TOPIC = ApiCallable.create(PublisherGrpc.METHOD_CREATE_TOPIC);\n+  public static final ApiCallable<PublishRequest, PublishResponse>\n+      PUBLISH = ApiCallable.create(PublisherGrpc.METHOD_PUBLISH);\n+  public static final ApiCallable<GetTopicRequest, Topic>\n+      GET_TOPIC = ApiCallable.create(PublisherGrpc.METHOD_GET_TOPIC);\n+  public static final ApiCallable<ListTopicsRequest, ListTopicsResponse>\n+      LIST_TOPICS = ApiCallable.create(PublisherGrpc.METHOD_LIST_TOPICS);\n+  public static final ApiCallable<ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse>\n+      LIST_TOPIC_SUBSCRIPTIONS = ApiCallable.create(PublisherGrpc.METHOD_LIST_TOPIC_SUBSCRIPTIONS);\n+  public static final ApiCallable<DeleteTopicRequest, Empty>\n+      DELETE_TOPIC = ApiCallable.create(PublisherGrpc.METHOD_DELETE_TOPIC);\n+\n+\n+\n+\n+  private static PageDescriptor<ListTopicsRequest, ListTopicsResponse, Topic> LIST_TOPICS_PAGE_DESC =\n+      new PageDescriptor<ListTopicsRequest, ListTopicsResponse, Topic>() {\n+        @Override public Object emptyToken() {\n+          return \"\";\n+        }\n+        @Override public ListTopicsRequest injectToken(\n+            ListTopicsRequest payload, Object token) {\n+          return ListTopicsRequest\n+            .newBuilder(payload)\n+            .setPageToken((String) token)\n+            .build();\n+        }\n+        @Override\n+        public Object extractNextToken(ListTopicsResponse payload) {\n+          return payload.getNextPageToken();\n+        }\n+        @Override\n+        public Iterable<Topic> extractResources(ListTopicsResponse payload) {\n+          return payload.getTopicsList();\n+        }\n+      };\n+  private static PageDescriptor<ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse, String> LIST_TOPIC_SUBSCRIPTIONS_PAGE_DESC =\n+      new PageDescriptor<ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse, String>() {\n+        @Override public Object emptyToken() {\n+          return \"\";\n+        }\n+        @Override public ListTopicSubscriptionsRequest injectToken(\n+            ListTopicSubscriptionsRequest payload, Object token) {\n+          return ListTopicSubscriptionsRequest\n+            .newBuilder(payload)\n+            .setPageToken((String) token)\n+            .build();\n+        }\n+        @Override\n+        public Object extractNextToken(ListTopicSubscriptionsResponse payload) {\n+          return payload.getNextPageToken();\n+        }\n+        @Override\n+        public Iterable<String> extractResources(ListTopicSubscriptionsResponse payload) {\n+          return payload.getSubscriptionsList();\n+        }\n+      };\n+\n+  private static String ALL_SCOPES[] = {\n+    \"https://www.googleapis.com/auth/pubsub\"\n+  };\n+\n+  public static final PathTemplate PROJECT_PATH_TEMPLATE =\n+      PathTemplate.create(\"/projects/{project}\");\n+  public static final PathTemplate TOPIC_PATH_TEMPLATE =\n+      PathTemplate.create(\"/projects/{project}/topics/{topic}\");\n+\n+  // ========\n+  // Members\n+  // ========\n+\n+  private final ManagedChannel channel;\n+  private final ServiceApiSettings settings;\n+\n+  // ===============\n+  // Factory Methods\n+  // ===============\n+\n+  /**\n+   * Constructs an instance of PublisherApi with default settings.\n+   */\n+  public static PublisherApi create() throws IOException {\n+    return create(new ServiceApiSettings());\n+  }\n+\n+  /**\n+   * Constructs an instance of PublisherApi, using the given settings. The channels are created based\n+   * on the settings passed in, or defaults for any settings that are not set.\n+   */\n+  public static PublisherApi create(ServiceApiSettings settings) throws IOException {\n+    return new PublisherApi(settings);\n+  }\n+\n+  private PublisherApi(ServiceApiSettings settings) throws IOException {\n+    ServiceApiSettings internalSettings = ApiUtils.settingsWithChannels(settings,\n+        SERVICE_ADDRESS, DEFAULT_SERVICE_PORT, ALL_SCOPES);\n+    this.settings = internalSettings;\n+    this.channel = internalSettings.getChannel();\n+  }\n+\n+  // ==============================\n+  // Resource Name Helper Functions\n+  // ==============================\n+\n+  public static final String createProject(String project) {\n+    return PROJECT_PATH_TEMPLATE.instantiate(\n+        \"project\", project);\n+  }\n+\n+  public static final String createTopic(String project, String topic) {\n+    return TOPIC_PATH_TEMPLATE.instantiate(\n+        \"project\", project,\"topic\", topic);\n+  }\n+\n+\n+  // ========\n+  // Getters\n+  // ========\n+\n+  public Channel getChannel() {\n+    return channel;\n+  }\n+\n+\n+  // =============\n+  // Service Calls\n+  // =============\n+\n+  // ----- createTopic -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Creates the given topic with the given name.\n+   *\n+   * @param name The name of the topic. It must have the format\n+   * `\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\n+   * and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\n+   * underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\n+   * signs (`%`). It must be between 3 and 255 characters in length, and it\n+   * must not start with `\"goog\"`.\n+   */\n+  public Topic createTopic(String name) {\n+    Topic request =\n+        Topic.newBuilder()\n+        .setName(name)\n+        .build();\n+\n+    return createTopic(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Creates the given topic with the given name.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public Topic createTopic(Topic request) {\n+    return createTopicCallable().call(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Creates the given topic with the given name.\n+   */\n+  public ApiCallable<Topic, Topic> createTopicCallable() {\n+    return ApiUtils.prepareIdempotentCallable(CREATE_TOPIC, settings).bind(channel);\n+  }\n+\n+  // ----- publish -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Adds one or more messages to the topic. Returns NOT_FOUND if the topic does\n+   * not exist. The message payload must not be empty; it must contain either a\n+   * non-empty data field, or at least one attribute.\n+   *\n+   * @param topic The messages in the request will be published on this topic.\n+   * @param messages The messages to publish.\n+   */\n+  public PublishResponse publish(String topic, List<PubsubMessage> messages) {\n+    PublishRequest request =\n+        PublishRequest.newBuilder()\n+        .setTopic(topic)\n+        .addAllMessages(messages)\n+        .build();\n+\n+    return publish(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Adds one or more messages to the topic. Returns NOT_FOUND if the topic does\n+   * not exist. The message payload must not be empty; it must contain either a\n+   * non-empty data field, or at least one attribute.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public PublishResponse publish(PublishRequest request) {\n+    return publishCallable().call(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Adds one or more messages to the topic. Returns NOT_FOUND if the topic does\n+   * not exist. The message payload must not be empty; it must contain either a\n+   * non-empty data field, or at least one attribute.\n+   */\n+  public ApiCallable<PublishRequest, PublishResponse> publishCallable() {\n+    return PUBLISH.bind(channel);\n+  }\n+\n+  // ----- getTopic -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Gets the configuration of a topic.\n+   *\n+   * @param topic The name of the topic to get.\n+   */\n+  public Topic getTopic(String topic) {\n+    GetTopicRequest request =\n+        GetTopicRequest.newBuilder()\n+        .setTopic(topic)\n+        .build();\n+\n+    return getTopic(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Gets the configuration of a topic.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public Topic getTopic(GetTopicRequest request) {\n+    return getTopicCallable().call(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Gets the configuration of a topic.\n+   */\n+  public ApiCallable<GetTopicRequest, Topic> getTopicCallable() {\n+    return ApiUtils.prepareIdempotentCallable(GET_TOPIC, settings).bind(channel);\n+  }\n+\n+  // ----- listTopics -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists matching topics.\n+   */\n+  public Iterable<Topic> listTopics(String project) {\n+    ListTopicsRequest request =\n+        ListTopicsRequest.newBuilder()\n+        .setProject(project)\n+        .build();\n+    return listTopics(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists matching topics.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public Iterable<Topic> listTopics(ListTopicsRequest request) {\n+    return listTopicsStreamingCallable()\n+        .iterableResponseStreamCall(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists matching topics.\n+   */\n+  public ApiCallable<ListTopicsRequest, Topic> listTopicsStreamingCallable() {\n+    return listTopicsCallable().pageStreaming(LIST_TOPICS_PAGE_DESC);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists matching topics.\n+   */\n+  public ApiCallable<ListTopicsRequest, ListTopicsResponse> listTopicsCallable() {\n+    return ApiUtils.prepareIdempotentCallable(LIST_TOPICS, settings).bind(channel);\n+  }\n+\n+  // ----- listTopicSubscriptions -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists the name of the subscriptions for this topic.\n+   */\n+  public Iterable<String> listTopicSubscriptions(String topic) {\n+    ListTopicSubscriptionsRequest request =\n+        ListTopicSubscriptionsRequest.newBuilder()\n+        .setTopic(topic)\n+        .build();\n+    return listTopicSubscriptions(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists the name of the subscriptions for this topic.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public Iterable<String> listTopicSubscriptions(ListTopicSubscriptionsRequest request) {\n+    return listTopicSubscriptionsStreamingCallable()\n+        .iterableResponseStreamCall(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists the name of the subscriptions for this topic.\n+   */\n+  public ApiCallable<ListTopicSubscriptionsRequest, String> listTopicSubscriptionsStreamingCallable() {\n+    return listTopicSubscriptionsCallable().pageStreaming(LIST_TOPIC_SUBSCRIPTIONS_PAGE_DESC);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Lists the name of the subscriptions for this topic.\n+   */\n+  public ApiCallable<ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse> listTopicSubscriptionsCallable() {\n+    return ApiUtils.prepareIdempotentCallable(LIST_TOPIC_SUBSCRIPTIONS, settings).bind(channel);\n+  }\n+\n+  // ----- deleteTopic -----\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Deletes the topic with the given name. Returns NOT_FOUND if the topic does\n+   * not exist. After a topic is deleted, a new topic may be created with the\n+   * same name; this is an entirely new topic with none of the old\n+   * configuration or subscriptions. Existing subscriptions to this topic are\n+   * not deleted, but their `topic` field is set to `_deleted-topic_`.\n+   *\n+   * @param topic Name of the topic to delete.\n+   */\n+  public void deleteTopic(String topic) {\n+    DeleteTopicRequest request =\n+        DeleteTopicRequest.newBuilder()\n+        .setTopic(topic)\n+        .build();\n+\n+    deleteTopic(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Deletes the topic with the given name. Returns NOT_FOUND if the topic does\n+   * not exist. After a topic is deleted, a new topic may be created with the\n+   * same name; this is an entirely new topic with none of the old\n+   * configuration or subscriptions. Existing subscriptions to this topic are\n+   * not deleted, but their `topic` field is set to `_deleted-topic_`.\n+   *\n+   * @param request The request object containing all of the parameters for the API call.\n+   */\n+  public void deleteTopic(DeleteTopicRequest request) {\n+    deleteTopicCallable().call(request);\n+  }\n+\n+  // AUTO-GENERATED DOCUMENTATION AND METHOD - see instructions at the top of the file for editing.\n+  /**\n+   * Deletes the topic with the given name. Returns NOT_FOUND if the topic does\n+   * not exist. After a topic is deleted, a new topic may be created with the\n+   * same name; this is an entirely new topic with none of the old\n+   * configuration or subscriptions. Existing subscriptions to this topic are\n+   * not deleted, but their `topic` field is set to `_deleted-topic_`.\n+   */\n+  public ApiCallable<DeleteTopicRequest, Empty> deleteTopicCallable() {\n+    return ApiUtils.prepareIdempotentCallable(DELETE_TOPIC, settings).bind(channel);\n+  }\n+\n+\n+  // ========\n+  // Cleanup\n+  // ========\n+\n+  /**\n+   * Initiates an orderly shutdown in which preexisting calls continue but new calls are immediately\n+   * cancelled.\n+   */\n+  @Override public void close() {\n+    // Manually-added shutdown code\n+\n+    // Auto-generated shutdown code\n+    channel.shutdown();","path":"gcloud-java-pubsub/src/main/java/com/google/gcloud/pubsub/spi/PublisherApi.java","position":488,"original_position":488,"commit_id":"5068e1b7bbeea191f078ef85e9a45673b4abf158","original_commit_id":"5068e1b7bbeea191f078ef85e9a45673b4abf158","user":{"login":"aozarov","id":8921691,"avatar_url":"https://avatars.githubusercontent.com/u/8921691?v=3","gravatar_id":"","url":"https://api.github.com/users/aozarov","html_url":"https://github.com/aozarov","followers_url":"https://api.github.com/users/aozarov/followers","following_url":"https://api.github.com/users/aozarov/following{/other_user}","gists_url":"https://api.github.com/users/aozarov/gists{/gist_id}","starred_url":"https://api.github.com/users/aozarov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aozarov/subscriptions","organizations_url":"https://api.github.com/users/aozarov/orgs","repos_url":"https://api.github.com/users/aozarov/repos","events_url":"https://api.github.com/users/aozarov/events{/privacy}","received_events_url":"https://api.github.com/users/aozarov/received_events","type":"User","site_admin":false},"body":"Yes, actually I just noticed that you already mention in `ServiceApiSettings.setChannel` (which\r\nI think it is the right place) that you will close the channel but javadoc is wrong as it says \"when the instance of LoggingServiceApi is shut down\"). Also, saying that \"this typically used for testing\" would be good.","created_at":"2015-11-15T18:42:54Z","updated_at":"2015-11-15T18:42:54Z","html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345#discussion_r44875690","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments/44875690"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345#discussion_r44875690"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345","id":50297352,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345","diff_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345.diff","patch_url":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/345","number":345,"state":"open","locked":false,"title":"Generated Pub/Sub client classes and unit tests","user":{"login":"garrettjonesgoogle","id":13341017,"avatar_url":"https://avatars.githubusercontent.com/u/13341017?v=3","gravatar_id":"","url":"https://api.github.com/users/garrettjonesgoogle","html_url":"https://github.com/garrettjonesgoogle","followers_url":"https://api.github.com/users/garrettjonesgoogle/followers","following_url":"https://api.github.com/users/garrettjonesgoogle/following{/other_user}","gists_url":"https://api.github.com/users/garrettjonesgoogle/gists{/gist_id}","starred_url":"https://api.github.com/users/garrettjonesgoogle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garrettjonesgoogle/subscriptions","organizations_url":"https://api.github.com/users/garrettjonesgoogle/orgs","repos_url":"https://api.github.com/users/garrettjonesgoogle/repos","events_url":"https://api.github.com/users/garrettjonesgoogle/events{/privacy}","received_events_url":"https://api.github.com/users/garrettjonesgoogle/received_events","type":"User","site_admin":false},"body":"Note: This version doesn't have timeout support. I'd like to defer that for a later submission, because some design work is necessary to close that out. \r\n","created_at":"2015-11-10T19:15:04Z","updated_at":"2015-11-15T18:42:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1c4c41480c8e8375cadb922b9c51d38583cc88d8","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/345/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/5068e1b7bbeea191f078ef85e9a45673b4abf158","head":{"label":"garrettjonesgoogle:pubsub-alpha","ref":"pubsub-alpha","sha":"5068e1b7bbeea191f078ef85e9a45673b4abf158","user":{"login":"garrettjonesgoogle","id":13341017,"avatar_url":"https://avatars.githubusercontent.com/u/13341017?v=3","gravatar_id":"","url":"https://api.github.com/users/garrettjonesgoogle","html_url":"https://github.com/garrettjonesgoogle","followers_url":"https://api.github.com/users/garrettjonesgoogle/followers","following_url":"https://api.github.com/users/garrettjonesgoogle/following{/other_user}","gists_url":"https://api.github.com/users/garrettjonesgoogle/gists{/gist_id}","starred_url":"https://api.github.com/users/garrettjonesgoogle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garrettjonesgoogle/subscriptions","organizations_url":"https://api.github.com/users/garrettjonesgoogle/orgs","repos_url":"https://api.github.com/users/garrettjonesgoogle/repos","events_url":"https://api.github.com/users/garrettjonesgoogle/events{/privacy}","received_events_url":"https://api.github.com/users/garrettjonesgoogle/received_events","type":"User","site_admin":false},"repo":{"id":41181033,"name":"gcloud-java","full_name":"garrettjonesgoogle/gcloud-java","owner":{"login":"garrettjonesgoogle","id":13341017,"avatar_url":"https://avatars.githubusercontent.com/u/13341017?v=3","gravatar_id":"","url":"https://api.github.com/users/garrettjonesgoogle","html_url":"https://github.com/garrettjonesgoogle","followers_url":"https://api.github.com/users/garrettjonesgoogle/followers","following_url":"https://api.github.com/users/garrettjonesgoogle/following{/other_user}","gists_url":"https://api.github.com/users/garrettjonesgoogle/gists{/gist_id}","starred_url":"https://api.github.com/users/garrettjonesgoogle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/garrettjonesgoogle/subscriptions","organizations_url":"https://api.github.com/users/garrettjonesgoogle/orgs","repos_url":"https://api.github.com/users/garrettjonesgoogle/repos","events_url":"https://api.github.com/users/garrettjonesgoogle/events{/privacy}","received_events_url":"https://api.github.com/users/garrettjonesgoogle/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/garrettjonesgoogle/gcloud-java","description":"Google Cloud Client Library for Java","fork":true,"url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java","forks_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/forks","keys_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/teams","hooks_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/events","assignees_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/tags","blobs_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/subscription","commits_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/merges","archive_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/downloads","issues_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/garrettjonesgoogle/gcloud-java/releases{/id}","created_at":"2015-08-21T23:00:59Z","updated_at":"2015-08-21T23:00:59Z","pushed_at":"2015-11-10T19:13:55Z","git_url":"git://github.com/garrettjonesgoogle/gcloud-java.git","ssh_url":"git@github.com:garrettjonesgoogle/gcloud-java.git","clone_url":"https://github.com/garrettjonesgoogle/gcloud-java.git","svn_url":"https://github.com/garrettjonesgoogle/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/site/0.0.6/","size":15169,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:pubsub-alpha","ref":"pubsub-alpha","sha":"9e3b1e480c179d4042a192a96124a06129e237e6","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":26181278,"name":"gcloud-java","full_name":"GoogleCloudPlatform/gcloud-java","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/gcloud-java","description":"Google Cloud Client Library for Java","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/releases{/id}","created_at":"2014-11-04T17:57:16Z","updated_at":"2015-11-14T01:02:42Z","pushed_at":"2015-11-14T02:19:00Z","git_url":"git://github.com/GoogleCloudPlatform/gcloud-java.git","ssh_url":"git@github.com:GoogleCloudPlatform/gcloud-java.git","clone_url":"https://github.com/GoogleCloudPlatform/gcloud-java.git","svn_url":"https://github.com/GoogleCloudPlatform/gcloud-java","homepage":"http://googlecloudplatform.github.io/gcloud-java/","size":207796,"stargazers_count":43,"watchers_count":43,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":24,"mirror_url":null,"open_issues_count":80,"forks":24,"open_issues":80,"watchers":43,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345"},"html":{"href":"https://github.com/GoogleCloudPlatform/gcloud-java/pull/345"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/345"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/issues/345/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/pulls/345/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/gcloud-java/statuses/5068e1b7bbeea191f078ef85e9a45673b4abf158"}}}}