{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/78624539","id":78624539,"diff_hunk":"@@ -465,96 +491,108 @@ private boolean processBatch(CatalogFacade catalog, ArrayList<Metacard> metacard\n     }\n \n     private void moveToFailedIngestDirectory(File source) {\n-        File destination = new File(failedIngestDirectory.getAbsolutePath() + File.separator + source.getName());\n+        File destination = new File(\n+                failedIngestDirectory.getAbsolutePath() + File.separator + source.getName());\n \n         if (!source.renameTo(destination)) {\n             printErrorMessage(\"Unable to move source file [\" + source.getAbsolutePath() + \"] to [\"\n                     + failedIngestDirectory + \"].\");\n         }\n     }\n \n-    private void buildQueue(Stream<Path> ingestStream, ArrayBlockingQueue<Metacard> metacardQueue,\n+    private void buildQueue(File inputFile, ArrayBlockingQueue<Metacard> metacardQueue,\n             long start) {\n+        try {\n+            if (includeContent) {\n+                processIncludeContent(metacardQueue);\n+            } else {\n+                try {\n+                    Stream<Path> ingestStream = Files.walk(inputFile.toPath(),\n+                            FileVisitOption.FOLLOW_LINKS);\n+                    ingestStream.map(Path::toFile)\n+                            .filter(file -> !file.isDirectory())\n+                            .forEach(file -> addFileToQueue(metacardQueue, start, file));\n+                } catch (IOException e) {\n+                    throw new UncheckedIOException(e);\n+                }\n+            }\n+        } finally {\n+            phaser.arriveAndDeregister();\n+        }\n+    }\n \n-        if (includeContent) {\n-            File inputFile = new File(filePath);\n-            Map<String, Serializable> arguments = new HashMap<>();\n-            arguments.put(DumpCommand.FILE_PATH, inputFile.getParent() + File.separator);\n-            arguments.put(FILE_NAME, inputFile.getName());\n+    private void addFileToQueue(ArrayBlockingQueue<Metacard> metacardQueue, long start, File file) {\n+        if (file.isHidden()) {\n+            ignoreCount.incrementAndGet();\n+            return;\n+        }\n \n-            ByteSource byteSource = com.google.common.io.Files.asByteSource(inputFile);\n+        String extension = \".\" + FilenameUtils.getExtension(file.getName());\n+        if (ignoreList != null && (ignoreList.contains(extension)\n+                || ignoreList.contains(file.getName()))) {\n+            ignoreCount.incrementAndGet();\n+            printProgressAndFlush(start, fileCount.get(), ingestCount.get() + ignoreCount.get());\n+            return;\n+        }\n \n-            zipDecompression = getZipDecompression();\n-            if (zipDecompression != null) {\n+        Metacard result = null;\n+        try {\n+            result = readMetacard(file);\n+        } catch (IngestException e) {\n+            logIngestException(e, file);\n+            if (failedIngestDirectory != null) {\n+                moveToFailedIngestDirectory(file);\n+            }\n+            printErrorMessage(String.format(\"Failed to ingest file [%s].\", file.getAbsolutePath()));\n+            INGEST_LOGGER.warn(\"Failed to ingest file [{}].\", file.getAbsolutePath());\n+        }\n+\n+        if (result != null) {\n+            try {\n+                metacardQueue.put(result);\n+                phaser.register();","path":"catalog/core/catalog-core-commands/src/main/java/org/codice/ddf/commands/catalog/IngestCommand.java","position":369,"original_position":369,"commit_id":"8a2b465e0069db44086e60f609e943fc8f7e102a","original_commit_id":"8a2b465e0069db44086e60f609e943fc8f7e102a","user":{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},"body":"I think you need to move this register before adding to the queue.","created_at":"2016-09-13T19:10:28Z","updated_at":"2016-09-13T19:10:28Z","html_url":"https://github.com/codice/ddf/pull/1253#discussion_r78624539","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/1253","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/78624539"},"html":{"href":"https://github.com/codice/ddf/pull/1253#discussion_r78624539"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/1253"}}},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/1253","id":84769779,"html_url":"https://github.com/codice/ddf/pull/1253","diff_url":"https://github.com/codice/ddf/pull/1253.diff","patch_url":"https://github.com/codice/ddf/pull/1253.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/1253","number":1253,"state":"open","locked":false,"title":"DDF-2474 Fixes issue with ingesting a large zip file with more metacards than space in blocking queue.","user":{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false},"body":"#### What does this PR do?\r\nFixes bug where some records might not be ingested with no error logged if the zip file to be ingested contained more than `--batchsize` * `--multithreaded` metacards.\r\n\r\nThis also cleans up the threading logic, relying on a Phaser used as a CountUp/DownLatch instead of flags and Thread.sleeps().\r\n\r\nThis needs to be backported to 2.9.x but might require a slightly more complex cherrypick as some other changes have been introduced to master and not backported.\r\n\r\n#### Who is reviewing it (please choose AT LEAST two reviewers that need to approve the PR before it can get merged; if a component team is listed, at least one of its members needs to approve)?\r\n@bdeining @rzwiefel @tbatie \r\n\r\n#### Choose 2 committers to review/merge the PR (please choose ONLY two committers from below, delete the rest).\r\n@kcwire\r\n@pklinef\r\n\r\n#### How should this be tested?\r\n- Full build/test run.\r\n- Threading tests\r\n    - Get some metacards to be ingested by any transformer and put them into a directory. I would recommend at least 100.\r\n    - Ingest through the karaf command line (include the `-p` flag to speed the tests, passing various values for the `-b` (`--batchsize`) flag to test different possible edge cases. e.g.\r\n        - `-b 1`\r\n        - `-b [number of metacards in test]`\r\n        - `-b [factor of metacard count]` (For 100, using 10 or 20 would be good for this)\r\n        - `-b [factor of metacard count - 1]`\r\n        - `-b [factor of metacard count + 1]`\r\n        - `-b [metacard count/2]`\r\n        - `-b [metacard count/2 - 1]`\r\n        - `-b [metacard count/2 + 1]`\r\n        - `-b [metacard count - 1]`\r\n        - `-b [metacard count + 1]`\r\n        - `-b [prime number less than metacard count]`\r\n    - Run each of the above tests several times to ensure there are no timing issues. There is no need to remove the records from the catalog between tests. If the threading is going to fail, it's going to do so whether the records are already present of not.\r\n- Zip ingest test\r\n    - Create zip file of metacards to ingest, either manually or through `catalog:dump`\r\n    - Sign the zip file. This can be accomplished by running `jarsigner -keystore $DDF_HOME/etc/keystores/serverKeystore.jks [zipfile] localhost`, assuming your DDF instance is named `localhost`.\r\n    - Ingest the zip file, first with default batch and thread size, then by adjusting those parameters so their product is smaller than the number of metacards in the zip file. e.g.\r\n        - `ingest --include-content [zipfile]`\r\n        - `ingest --include-content -b 2 -m 2 [zipfile]` (If you have more than four metacards in your zip, these values would trigger the error prior to this fix.)\r\n\r\n#### Any background context you want to provide?\r\nN/A\r\n\r\n#### What are the relevant tickets?\r\nDDF-2474\r\n\r\n#### Screenshots (if appropriate)\r\nN/A\r\n\r\n#### Checklist:\r\n- [ ] Documentation Updated\r\n- [ ] Update / Add Unit Tests\r\n- [ ] Update / Add Integration Tests","created_at":"2016-09-10T22:23:52Z","updated_at":"2016-09-13T19:10:28Z","closed_at":null,"merged_at":null,"merge_commit_sha":"df14ba0ec45d10228db58b85ebc310a2f082a640","assignee":{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},"assignees":[{"login":"pklinef","id":700518,"avatar_url":"https://avatars.githubusercontent.com/u/700518?v=3","gravatar_id":"","url":"https://api.github.com/users/pklinef","html_url":"https://github.com/pklinef","followers_url":"https://api.github.com/users/pklinef/followers","following_url":"https://api.github.com/users/pklinef/following{/other_user}","gists_url":"https://api.github.com/users/pklinef/gists{/gist_id}","starred_url":"https://api.github.com/users/pklinef/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pklinef/subscriptions","organizations_url":"https://api.github.com/users/pklinef/orgs","repos_url":"https://api.github.com/users/pklinef/repos","events_url":"https://api.github.com/users/pklinef/events{/privacy}","received_events_url":"https://api.github.com/users/pklinef/received_events","type":"User","site_admin":false},{"login":"kcwire","id":4631300,"avatar_url":"https://avatars.githubusercontent.com/u/4631300?v=3","gravatar_id":"","url":"https://api.github.com/users/kcwire","html_url":"https://github.com/kcwire","followers_url":"https://api.github.com/users/kcwire/followers","following_url":"https://api.github.com/users/kcwire/following{/other_user}","gists_url":"https://api.github.com/users/kcwire/gists{/gist_id}","starred_url":"https://api.github.com/users/kcwire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kcwire/subscriptions","organizations_url":"https://api.github.com/users/kcwire/orgs","repos_url":"https://api.github.com/users/kcwire/repos","events_url":"https://api.github.com/users/kcwire/events{/privacy}","received_events_url":"https://api.github.com/users/kcwire/received_events","type":"User","site_admin":false}],"milestone":{"url":"https://api.github.com/repos/codice/ddf/milestones/3","html_url":"https://github.com/codice/ddf/milestones/2.9.3","labels_url":"https://api.github.com/repos/codice/ddf/milestones/3/labels","id":1924404,"number":3,"title":"2.9.3","description":"","creator":{"login":"shaundmorris","id":4359166,"avatar_url":"https://avatars.githubusercontent.com/u/4359166?v=3","gravatar_id":"","url":"https://api.github.com/users/shaundmorris","html_url":"https://github.com/shaundmorris","followers_url":"https://api.github.com/users/shaundmorris/followers","following_url":"https://api.github.com/users/shaundmorris/following{/other_user}","gists_url":"https://api.github.com/users/shaundmorris/gists{/gist_id}","starred_url":"https://api.github.com/users/shaundmorris/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shaundmorris/subscriptions","organizations_url":"https://api.github.com/users/shaundmorris/orgs","repos_url":"https://api.github.com/users/shaundmorris/repos","events_url":"https://api.github.com/users/shaundmorris/events{/privacy}","received_events_url":"https://api.github.com/users/shaundmorris/received_events","type":"User","site_admin":false},"open_issues":4,"closed_issues":14,"state":"open","created_at":"2016-08-04T21:44:03Z","updated_at":"2016-09-13T13:19:01Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/codice/ddf/pulls/1253/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/1253/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/1253/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/8a2b465e0069db44086e60f609e943fc8f7e102a","head":{"label":"coyotesqrl:DDF-2474","ref":"DDF-2474","sha":"8a2b465e0069db44086e60f609e943fc8f7e102a","user":{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false},"repo":{"id":64254932,"name":"ddf","full_name":"coyotesqrl/ddf","owner":{"login":"coyotesqrl","id":1469860,"avatar_url":"https://avatars.githubusercontent.com/u/1469860?v=3","gravatar_id":"","url":"https://api.github.com/users/coyotesqrl","html_url":"https://github.com/coyotesqrl","followers_url":"https://api.github.com/users/coyotesqrl/followers","following_url":"https://api.github.com/users/coyotesqrl/following{/other_user}","gists_url":"https://api.github.com/users/coyotesqrl/gists{/gist_id}","starred_url":"https://api.github.com/users/coyotesqrl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coyotesqrl/subscriptions","organizations_url":"https://api.github.com/users/coyotesqrl/orgs","repos_url":"https://api.github.com/users/coyotesqrl/repos","events_url":"https://api.github.com/users/coyotesqrl/events{/privacy}","received_events_url":"https://api.github.com/users/coyotesqrl/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/coyotesqrl/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":true,"url":"https://api.github.com/repos/coyotesqrl/ddf","forks_url":"https://api.github.com/repos/coyotesqrl/ddf/forks","keys_url":"https://api.github.com/repos/coyotesqrl/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coyotesqrl/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coyotesqrl/ddf/teams","hooks_url":"https://api.github.com/repos/coyotesqrl/ddf/hooks","issue_events_url":"https://api.github.com/repos/coyotesqrl/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/coyotesqrl/ddf/events","assignees_url":"https://api.github.com/repos/coyotesqrl/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/coyotesqrl/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/coyotesqrl/ddf/tags","blobs_url":"https://api.github.com/repos/coyotesqrl/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coyotesqrl/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coyotesqrl/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/coyotesqrl/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coyotesqrl/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/coyotesqrl/ddf/languages","stargazers_url":"https://api.github.com/repos/coyotesqrl/ddf/stargazers","contributors_url":"https://api.github.com/repos/coyotesqrl/ddf/contributors","subscribers_url":"https://api.github.com/repos/coyotesqrl/ddf/subscribers","subscription_url":"https://api.github.com/repos/coyotesqrl/ddf/subscription","commits_url":"https://api.github.com/repos/coyotesqrl/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/coyotesqrl/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/coyotesqrl/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/coyotesqrl/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/coyotesqrl/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/coyotesqrl/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coyotesqrl/ddf/merges","archive_url":"https://api.github.com/repos/coyotesqrl/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coyotesqrl/ddf/downloads","issues_url":"https://api.github.com/repos/coyotesqrl/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/coyotesqrl/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/coyotesqrl/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/coyotesqrl/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coyotesqrl/ddf/labels{/name}","releases_url":"https://api.github.com/repos/coyotesqrl/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/coyotesqrl/ddf/deployments","created_at":"2016-07-26T21:09:49Z","updated_at":"2016-07-26T21:10:03Z","pushed_at":"2016-09-13T17:35:50Z","git_url":"git://github.com/coyotesqrl/ddf.git","ssh_url":"git@github.com:coyotesqrl/ddf.git","clone_url":"https://github.com/coyotesqrl/ddf.git","svn_url":"https://github.com/coyotesqrl/ddf","homepage":"http://ddf.codice.org","size":274578,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codice:master","ref":"master","sha":"9ebb3471b5920832b8bc566776e96b0ebe0b868d","user":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"repo":{"id":15173563,"name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codice/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":false,"url":"https://api.github.com/repos/codice/ddf","forks_url":"https://api.github.com/repos/codice/ddf/forks","keys_url":"https://api.github.com/repos/codice/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codice/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codice/ddf/teams","hooks_url":"https://api.github.com/repos/codice/ddf/hooks","issue_events_url":"https://api.github.com/repos/codice/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/codice/ddf/events","assignees_url":"https://api.github.com/repos/codice/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/codice/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/codice/ddf/tags","blobs_url":"https://api.github.com/repos/codice/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codice/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codice/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/codice/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/codice/ddf/languages","stargazers_url":"https://api.github.com/repos/codice/ddf/stargazers","contributors_url":"https://api.github.com/repos/codice/ddf/contributors","subscribers_url":"https://api.github.com/repos/codice/ddf/subscribers","subscription_url":"https://api.github.com/repos/codice/ddf/subscription","commits_url":"https://api.github.com/repos/codice/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/codice/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/codice/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/codice/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/codice/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/codice/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codice/ddf/merges","archive_url":"https://api.github.com/repos/codice/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codice/ddf/downloads","issues_url":"https://api.github.com/repos/codice/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/codice/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/codice/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/codice/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codice/ddf/labels{/name}","releases_url":"https://api.github.com/repos/codice/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/codice/ddf/deployments","created_at":"2013-12-13T20:38:28Z","updated_at":"2016-08-30T00:53:22Z","pushed_at":"2016-09-13T17:35:50Z","git_url":"git://github.com/codice/ddf.git","ssh_url":"git@github.com:codice/ddf.git","clone_url":"https://github.com/codice/ddf.git","svn_url":"https://github.com/codice/ddf","homepage":"http://ddf.codice.org","size":286958,"stargazers_count":44,"watchers_count":44,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":90,"mirror_url":null,"open_issues_count":44,"forks":90,"open_issues":44,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/1253"},"html":{"href":"https://github.com/codice/ddf/pull/1253"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/1253"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/1253/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/1253/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/1253/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/8a2b465e0069db44086e60f609e943fc8f7e102a"}}}}
{"actor":{"display_login":"pklinef"}}