{"action":"created","comment":{"url":"https://api.github.com/repos/google/startup-os/pulls/comments/215060010","pull_request_review_id":152244961,"id":215060010,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxNTA2MDAxMA==","diff_hunk":"@@ -0,0 +1,450 @@\n+/*\n+ * Copyright 2018 The StartupOS Authors.\n+ *\n+ * Licensed under the Apache License, Version 2.0 (the \"License\");\n+ * you may not use this file except in compliance with the License.\n+ * You may obtain a copy of the License at\n+ *\n+ *    https://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ * Unless required by applicable law or agreed to in writing, software\n+ * distributed under the License is distributed on an \"AS IS\" BASIS,\n+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ * See the License for the specific language governing permissions and\n+ * limitations under the License.\n+ */\n+\n+package com.google.startupos.tools.reviewer.service.tests;\n+\n+import com.google.startupos.common.CommonModule;\n+import com.google.startupos.common.FileUtils;\n+import com.google.startupos.common.TextDifferencer;\n+import com.google.startupos.common.firestore.FirestoreClient;\n+import com.google.startupos.common.firestore.FirestoreClientFactory;\n+import com.google.startupos.common.flags.Flags;\n+import com.google.startupos.common.repo.GitRepo;\n+import com.google.startupos.common.repo.GitRepoFactory;\n+import com.google.startupos.tools.aa.AaModule;\n+import com.google.startupos.tools.aa.commands.InitCommand;\n+import com.google.startupos.tools.aa.commands.WorkspaceCommand;\n+import com.google.startupos.tools.localserver.service.AuthService;\n+import com.google.startupos.tools.reviewer.service.CodeReviewService;\n+import com.google.startupos.tools.reviewer.service.CodeReviewServiceGrpc;\n+import com.google.startupos.tools.reviewer.service.Protos;\n+import dagger.Component;\n+import dagger.Provides;\n+import io.grpc.ManagedChannel;\n+import io.grpc.Server;\n+import io.grpc.inprocess.InProcessChannelBuilder;\n+import io.grpc.inprocess.InProcessServerBuilder;\n+import org.junit.After;\n+import org.junit.Before;\n+import org.junit.Test;\n+import org.junit.runner.RunWith;\n+import org.junit.runners.JUnit4;\n+\n+import javax.inject.Named;\n+import javax.inject.Singleton;\n+import java.io.IOException;\n+import java.nio.file.FileSystems;\n+import java.nio.file.Files;\n+import java.nio.file.Paths;\n+import java.nio.file.StandardCopyOption;\n+import java.util.Collections;\n+import java.util.concurrent.TimeUnit;\n+\n+import static org.junit.Assert.assertEquals;\n+import static org.mockito.Mockito.mock;\n+import static org.mockito.Mockito.when;\n+\n+// TODO Add tests for copied and modified files\n+@RunWith(JUnit4.class)\n+public class CodeReviewServiceGetDiffFilesTest {\n+  private static final String TEST_FILE = \"test_file.txt\";\n+  private static final String TEST_FILE_CONTENTS = \"Some test file contents\\n\";\n+  private static final String FILE_IN_HEAD = \"im_in_head.txt\";\n+  private static final String TEST_WORKSPACE = \"ws1\";\n+  private static final String COMMIT_MESSAGE = \"Some commit message\";\n+  private static final String REPO_ID = \"startup-os\";\n+  private static final int DIFF_ID = 2;\n+\n+  private GitRepoFactory gitRepoFactory;\n+  private String aaBaseFolder;\n+  private String testFileCommitId;\n+  private String fileInHeadCommitId;\n+  private GitRepo repo;\n+  private FileUtils fileUtils;\n+  private CodeReviewServiceGetDiffFilesTest.TestComponent component;\n+  private Server server;\n+  private ManagedChannel channel;\n+  private CodeReviewServiceGrpc.CodeReviewServiceBlockingStub blockingStub;\n+  private CodeReviewService codeReviewService;\n+  // set by createAaWorkspace\n+  private String repoPath;\n+\n+  private FirestoreClientFactory firestoreClientFactory = mock(FirestoreClientFactory.class);\n+  private FirestoreClient firestoreClient = mock(FirestoreClient.class);\n+\n+  @Before\n+  public void setup() throws IOException {\n+    Flags.parse(\n+        new String[0], AuthService.class.getPackage(), CodeReviewService.class.getPackage());\n+    String testFolder = Files.createTempDirectory(\"temp\").toAbsolutePath().toString();\n+    String initialRepoFolder = joinPaths(testFolder, \"initial_repo\");\n+    aaBaseFolder = joinPaths(testFolder, \"base_folder\");\n+\n+    component =\n+        DaggerCodeReviewServiceGetDiffFilesTest_TestComponent.builder()\n+            .aaModule(\n+                new AaModule() {\n+                  @Provides\n+                  @Singleton\n+                  @Override\n+                  @Named(\"Base path\")\n+                  public String provideBasePath(FileUtils fileUtils) {\n+                    return aaBaseFolder;\n+                  }\n+                })\n+            .build();\n+    gitRepoFactory = component.getGitRepoFactory();\n+    fileUtils = component.getFileUtils();\n+\n+    String projectId = component.getAuthService().getProjectId();\n+    String token = component.getAuthService().getToken();\n+    when(firestoreClientFactory.create(projectId, token)).thenReturn(firestoreClient);\n+    firestoreClientFactory.create(projectId, token);\n+\n+    codeReviewService =\n+        new CodeReviewService(\n+            component.getAuthService(),\n+            fileUtils,\n+            aaBaseFolder,\n+            gitRepoFactory,\n+            component.getTextDifferencer(),\n+            firestoreClientFactory);\n+\n+    createInitialRepo(initialRepoFolder);\n+    initAaBase(initialRepoFolder, aaBaseFolder);\n+    createAaWorkspace(TEST_WORKSPACE);\n+    createBlockingStub();\n+    writeFile(TEST_FILE_CONTENTS);\n+    testFileCommitId = repo.commit(repo.getUncommittedFiles(), COMMIT_MESSAGE).getId();\n+    mockFirestoreClientMethods();\n+  }\n+\n+  private void mockFirestoreClientMethods() {\n+    when(firestoreClient.getDocument(\"reviewer/data/diff/2\", Protos.DiffFilesResponse.newBuilder()))\n+        .thenReturn(\n+            Protos.DiffFilesResponse.newBuilder()\n+                .addAllBranchInfo(\n+                    Collections.singleton(\n+                        com.google.startupos.common.repo.Protos.BranchInfo.newBuilder()\n+                            .setDiffId(DIFF_ID)\n+                            .setRepoId(REPO_ID)\n+                            .addCommit(\n+                                com.google.startupos.common.repo.Protos.Commit.newBuilder()\n+                                    .setId(fileInHeadCommitId))\n+                            .build()))\n+                .build());\n+\n+    when(firestoreClient.getDocument(\n+            \"/reviewer/data/last_diff_id\", Protos.DiffNumberResponse.newBuilder()))\n+        .thenReturn(Protos.DiffNumberResponse.newBuilder().setLastDiffId(1).build());\n+  }\n+\n+  @After\n+  public void after() throws InterruptedException {\n+    server.shutdownNow();\n+    server.awaitTermination();\n+    channel.shutdownNow();\n+    channel.awaitTermination(1, TimeUnit.SECONDS);\n+  }\n+\n+  @Singleton\n+  @Component(modules = {CommonModule.class, AaModule.class})\n+  interface TestComponent {\n+    AuthService getAuthService();\n+\n+    GitRepoFactory getGitRepoFactory();\n+\n+    InitCommand getInitCommand();\n+\n+    WorkspaceCommand getWorkspaceCommand();\n+\n+    FileUtils getFileUtils();\n+\n+    TextDifferencer getTextDifferencer();\n+  }\n+\n+  private void createInitialRepo(String initialRepoFolder) {\n+    fileUtils.mkdirs(initialRepoFolder);\n+    GitRepo repo = gitRepoFactory.create(initialRepoFolder);\n+    repo.init();\n+    repo.setFakeUsersData();\n+    fileUtils.writeStringUnchecked(\n+        TEST_FILE_CONTENTS, fileUtils.joinPaths(initialRepoFolder, FILE_IN_HEAD));\n+    fileInHeadCommitId = repo.commit(repo.getUncommittedFiles(), \"Initial commit\").getId();\n+  }\n+\n+  private void initAaBase(String initialRepoFolder, String aaBaseFolder) {\n+    InitCommand initCommand = component.getInitCommand();\n+    InitCommand.startuposRepo.resetValueForTesting();\n+    String[] args = {\n+      \"init\", aaBaseFolder,\n+      \"--startupos_repo\", initialRepoFolder,\n+    };\n+    initCommand.run(args);\n+  }\n+\n+  private void createAaWorkspace(String name) {\n+    WorkspaceCommand workspaceCommand = component.getWorkspaceCommand();\n+    String[] args = {\"workspace\", \"-f\", name};\n+    workspaceCommand.run(args);\n+    repoPath = fileUtils.joinPaths(getWorkspaceFolder(TEST_WORKSPACE), \"startup-os\");\n+    repo = gitRepoFactory.create(repoPath);\n+    repo.setFakeUsersData();\n+    repo.switchBranch(\"D\" + DIFF_ID);\n+  }\n+\n+  private void createBlockingStub() throws IOException {\n+    // Generate a unique in-process server name.\n+    String serverName = InProcessServerBuilder.generateName();\n+    server =\n+        InProcessServerBuilder.forName(serverName)\n+            .directExecutor()\n+            .addService(codeReviewService)\n+            .build()\n+            .start();\n+    channel = InProcessChannelBuilder.forName(serverName).directExecutor().build();\n+    blockingStub = CodeReviewServiceGrpc.newBlockingStub(channel);\n+  }\n+\n+  private String joinPaths(String first, String... more) {\n+    return FileSystems.getDefault().getPath(first, more).toAbsolutePath().toString();\n+  }\n+\n+  private String getWorkspaceFolder(String workspace) {\n+    return joinPaths(aaBaseFolder, \"ws\", workspace);\n+  }\n+\n+  private void writeFile(String contents) {\n+    writeFile(TEST_FILE, contents);\n+  }\n+\n+  private void writeFile(String filename, String contents) {\n+    fileUtils.writeStringUnchecked(\n+        contents, fileUtils.joinPaths(getWorkspaceFolder(TEST_WORKSPACE), \"startup-os\", filename));\n+  }\n+\n+  private Protos.DiffFilesResponse getResponse() {\n+    Protos.DiffFilesRequest request =\n+        Protos.DiffFilesRequest.newBuilder()\n+            .setWorkspace(TEST_WORKSPACE)\n+            .setDiffId(DIFF_ID)\n+            .build();\n+\n+    return blockingStub.getDiffFiles(request);\n+  }\n+\n+  private com.google.startupos.common.repo.Protos.BranchInfo getExpectedBranchInfo() {","path":"tools/reviewer/service/tests/CodeReviewServiceGetDiffFilesTest.java","position":249,"original_position":249,"commit_id":"3b138329070662398538d0869e8d6469f9c55b6a","original_commit_id":"3b138329070662398538d0869e8d6469f9c55b6a","user":{"login":"val-fed","id":24932505,"node_id":"MDQ6VXNlcjI0OTMyNTA1","avatar_url":"https://avatars0.githubusercontent.com/u/24932505?v=4","gravatar_id":"","url":"https://api.github.com/users/val-fed","html_url":"https://github.com/val-fed","followers_url":"https://api.github.com/users/val-fed/followers","following_url":"https://api.github.com/users/val-fed/following{/other_user}","gists_url":"https://api.github.com/users/val-fed/gists{/gist_id}","starred_url":"https://api.github.com/users/val-fed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/val-fed/subscriptions","organizations_url":"https://api.github.com/users/val-fed/orgs","repos_url":"https://api.github.com/users/val-fed/repos","events_url":"https://api.github.com/users/val-fed/events{/privacy}","received_events_url":"https://api.github.com/users/val-fed/received_events","type":"User","site_admin":false},"body":"Done.","created_at":"2018-09-04T20:42:08Z","updated_at":"2018-09-04T20:42:09Z","html_url":"https://github.com/google/startup-os/pull/249#discussion_r215060010","pull_request_url":"https://api.github.com/repos/google/startup-os/pulls/249","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/google/startup-os/pulls/comments/215060010"},"html":{"href":"https://github.com/google/startup-os/pull/249#discussion_r215060010"},"pull_request":{"href":"https://api.github.com/repos/google/startup-os/pulls/249"}},"in_reply_to_id":215037452},"pull_request":{"url":"https://api.github.com/repos/google/startup-os/pulls/249","id":208300249,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA4MzAwMjQ5","html_url":"https://github.com/google/startup-os/pull/249","diff_url":"https://github.com/google/startup-os/pull/249.diff","patch_url":"https://github.com/google/startup-os/pull/249.patch","issue_url":"https://api.github.com/repos/google/startup-os/issues/249","number":249,"state":"open","locked":false,"title":"Add getDiffFiles tests","user":{"login":"val-fed","id":24932505,"node_id":"MDQ6VXNlcjI0OTMyNTA1","avatar_url":"https://avatars0.githubusercontent.com/u/24932505?v=4","gravatar_id":"","url":"https://api.github.com/users/val-fed","html_url":"https://github.com/val-fed","followers_url":"https://api.github.com/users/val-fed/followers","following_url":"https://api.github.com/users/val-fed/following{/other_user}","gists_url":"https://api.github.com/users/val-fed/gists{/gist_id}","starred_url":"https://api.github.com/users/val-fed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/val-fed/subscriptions","organizations_url":"https://api.github.com/users/val-fed/orgs","repos_url":"https://api.github.com/users/val-fed/repos","events_url":"https://api.github.com/users/val-fed/events{/privacy}","received_events_url":"https://api.github.com/users/val-fed/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-08-14T14:25:43Z","updated_at":"2018-09-04T20:42:09Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c9b26bbf3e1041f92598f0ee59093f13112a3c7f","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/google/startup-os/pulls/249/commits","review_comments_url":"https://api.github.com/repos/google/startup-os/pulls/249/comments","review_comment_url":"https://api.github.com/repos/google/startup-os/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google/startup-os/issues/249/comments","statuses_url":"https://api.github.com/repos/google/startup-os/statuses/3b138329070662398538d0869e8d6469f9c55b6a","head":{"label":"google:get_diff_files_test","ref":"get_diff_files_test","sha":"3b138329070662398538d0869e8d6469f9c55b6a","user":{"login":"google","id":1342004,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":122602787,"node_id":"MDEwOlJlcG9zaXRvcnkxMjI2MDI3ODc=","name":"startup-os","full_name":"google/startup-os","owner":{"login":"google","id":1342004,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/startup-os","description":"Working examples of Google's Open Source stack and deployment to the cloud.","fork":false,"url":"https://api.github.com/repos/google/startup-os","forks_url":"https://api.github.com/repos/google/startup-os/forks","keys_url":"https://api.github.com/repos/google/startup-os/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/startup-os/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/startup-os/teams","hooks_url":"https://api.github.com/repos/google/startup-os/hooks","issue_events_url":"https://api.github.com/repos/google/startup-os/issues/events{/number}","events_url":"https://api.github.com/repos/google/startup-os/events","assignees_url":"https://api.github.com/repos/google/startup-os/assignees{/user}","branches_url":"https://api.github.com/repos/google/startup-os/branches{/branch}","tags_url":"https://api.github.com/repos/google/startup-os/tags","blobs_url":"https://api.github.com/repos/google/startup-os/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/startup-os/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/startup-os/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/startup-os/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/startup-os/statuses/{sha}","languages_url":"https://api.github.com/repos/google/startup-os/languages","stargazers_url":"https://api.github.com/repos/google/startup-os/stargazers","contributors_url":"https://api.github.com/repos/google/startup-os/contributors","subscribers_url":"https://api.github.com/repos/google/startup-os/subscribers","subscription_url":"https://api.github.com/repos/google/startup-os/subscription","commits_url":"https://api.github.com/repos/google/startup-os/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/startup-os/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/startup-os/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/startup-os/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/startup-os/contents/{+path}","compare_url":"https://api.github.com/repos/google/startup-os/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/startup-os/merges","archive_url":"https://api.github.com/repos/google/startup-os/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/startup-os/downloads","issues_url":"https://api.github.com/repos/google/startup-os/issues{/number}","pulls_url":"https://api.github.com/repos/google/startup-os/pulls{/number}","milestones_url":"https://api.github.com/repos/google/startup-os/milestones{/number}","notifications_url":"https://api.github.com/repos/google/startup-os/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/startup-os/labels{/name}","releases_url":"https://api.github.com/repos/google/startup-os/releases{/id}","deployments_url":"https://api.github.com/repos/google/startup-os/deployments","created_at":"2018-02-23T09:48:29Z","updated_at":"2018-09-04T17:12:59Z","pushed_at":"2018-09-04T19:03:02Z","git_url":"git://github.com/google/startup-os.git","ssh_url":"git@github.com:google/startup-os.git","clone_url":"https://github.com/google/startup-os.git","svn_url":"https://github.com/google/startup-os","homepage":"","size":1697,"stargazers_count":142,"watchers_count":142,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":34,"mirror_url":null,"archived":false,"open_issues_count":16,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":34,"open_issues":16,"watchers":142,"default_branch":"master"}},"base":{"label":"google:master","ref":"master","sha":"53b6f5d33f58ccdde3987d236e117a782b7123db","user":{"login":"google","id":1342004,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":122602787,"node_id":"MDEwOlJlcG9zaXRvcnkxMjI2MDI3ODc=","name":"startup-os","full_name":"google/startup-os","owner":{"login":"google","id":1342004,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzNDIwMDQ=","avatar_url":"https://avatars1.githubusercontent.com/u/1342004?v=4","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/startup-os","description":"Working examples of Google's Open Source stack and deployment to the cloud.","fork":false,"url":"https://api.github.com/repos/google/startup-os","forks_url":"https://api.github.com/repos/google/startup-os/forks","keys_url":"https://api.github.com/repos/google/startup-os/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/startup-os/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/startup-os/teams","hooks_url":"https://api.github.com/repos/google/startup-os/hooks","issue_events_url":"https://api.github.com/repos/google/startup-os/issues/events{/number}","events_url":"https://api.github.com/repos/google/startup-os/events","assignees_url":"https://api.github.com/repos/google/startup-os/assignees{/user}","branches_url":"https://api.github.com/repos/google/startup-os/branches{/branch}","tags_url":"https://api.github.com/repos/google/startup-os/tags","blobs_url":"https://api.github.com/repos/google/startup-os/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/startup-os/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/startup-os/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/startup-os/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/startup-os/statuses/{sha}","languages_url":"https://api.github.com/repos/google/startup-os/languages","stargazers_url":"https://api.github.com/repos/google/startup-os/stargazers","contributors_url":"https://api.github.com/repos/google/startup-os/contributors","subscribers_url":"https://api.github.com/repos/google/startup-os/subscribers","subscription_url":"https://api.github.com/repos/google/startup-os/subscription","commits_url":"https://api.github.com/repos/google/startup-os/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/startup-os/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/startup-os/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/startup-os/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/startup-os/contents/{+path}","compare_url":"https://api.github.com/repos/google/startup-os/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/startup-os/merges","archive_url":"https://api.github.com/repos/google/startup-os/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/startup-os/downloads","issues_url":"https://api.github.com/repos/google/startup-os/issues{/number}","pulls_url":"https://api.github.com/repos/google/startup-os/pulls{/number}","milestones_url":"https://api.github.com/repos/google/startup-os/milestones{/number}","notifications_url":"https://api.github.com/repos/google/startup-os/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/startup-os/labels{/name}","releases_url":"https://api.github.com/repos/google/startup-os/releases{/id}","deployments_url":"https://api.github.com/repos/google/startup-os/deployments","created_at":"2018-02-23T09:48:29Z","updated_at":"2018-09-04T17:12:59Z","pushed_at":"2018-09-04T19:03:02Z","git_url":"git://github.com/google/startup-os.git","ssh_url":"git@github.com:google/startup-os.git","clone_url":"https://github.com/google/startup-os.git","svn_url":"https://github.com/google/startup-os","homepage":"","size":1697,"stargazers_count":142,"watchers_count":142,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":34,"mirror_url":null,"archived":false,"open_issues_count":16,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":34,"open_issues":16,"watchers":142,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/google/startup-os/pulls/249"},"html":{"href":"https://github.com/google/startup-os/pull/249"},"issue":{"href":"https://api.github.com/repos/google/startup-os/issues/249"},"comments":{"href":"https://api.github.com/repos/google/startup-os/issues/249/comments"},"review_comments":{"href":"https://api.github.com/repos/google/startup-os/pulls/249/comments"},"review_comment":{"href":"https://api.github.com/repos/google/startup-os/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/google/startup-os/pulls/249/commits"},"statuses":{"href":"https://api.github.com/repos/google/startup-os/statuses/3b138329070662398538d0869e8d6469f9c55b6a"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"val-fed"}}