{"action":"created","comment":{"url":"https://api.github.com/repos/Carthage/Carthage/pulls/comments/53492877","id":53492877,"diff_hunk":"@@ -0,0 +1,216 @@\n+import Quick\n+import Nimble\n+import Result\n+import ReactiveCocoa\n+import CarthageKit\n+\n+class GitHubSpec: QuickSpec {\n+\toverride func spec() {\n+\n+\t\tdescribe(\"releaseForTag:repository:authorizationHeaderValue:urlSession:\") {\n+\t\t\tit(\"makes a request to the specified server\") {\n+\t\t\t\tlet gitHubEnterpriseRepository = GitHubRepository(server: GitHubRepository.Server.Enterprise(scheme: \"https\", hostname: \"example.com\"), owner: \"Carthage\", name: \"Carthage\")\n+\n+\t\t\t\tlet urlSession = FakeURLSession()\n+\t\t\t\t_ = releaseForTag(\"v1.0.0\", gitHubEnterpriseRepository, \"example\", urlSession).start()\n+\n+\t\t\t\texpect(urlSession.dataTaskWithRequestArgs.count) == 1\n+\t\t\t\tlet (request, _, task) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\texpect(task.started) == true\n+\t\t\t\texpect(request.URL) == NSURL(string: \"https://example.com/api/v3/repos/Carthage/Carthage/releases/tags/v1.0.0\")\n+\t\t\t\texpect(request.valueForHTTPHeaderField(\"Accept\")) == \"application/vnd.github.v3+json\"\n+\t\t\t\texpect(request.valueForHTTPHeaderField(\"User-Agent\")) == \"CarthageKit-unknown/unknown\"\n+\t\t\t\texpect(request.valueForHTTPHeaderField(\"Authorization\")) == \"example\"\n+\t\t\t}\n+\n+\t\t\tdescribe(\"for a standard github repo\") {\n+\t\t\t\tlet gitHubRepository = GitHubRepository(owner: \"Example\", name: \"Carthage\")\n+\n+\t\t\t\tvar releaseProducer: SignalProducer<GitHubRelease, CarthageError>!\n+\t\t\t\tvar urlSession: FakeURLSession!\n+\t\t\t\tvar events: [Event<GitHubRelease, CarthageError>] = []\n+\n+\t\t\t\tbeforeEach {\n+\t\t\t\t\turlSession = FakeURLSession()\n+\t\t\t\t\treleaseProducer = releaseForTag(\"v1.0.0\", gitHubRepository, \"example\", urlSession)\n+\n+\t\t\t\t\tevents = []\n+\t\t\t\t\treleaseProducer.on(event: { event in\n+\t\t\t\t\t\tevents.append(event)\n+\t\t\t\t\t}).start()\n+\t\t\t\t}\n+\n+\t\t\t\tit(\"makes a request to github\") {\n+\t\t\t\t\texpect(urlSession.dataTaskWithRequestArgs.count) == 1\n+\t\t\t\t\tlet (request, _, task) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\texpect(task.started) == true\n+\t\t\t\t\texpect(request.URL) == NSURL(string: \"https://api.github.com/repos/Example/Carthage/releases/tags/v1.0.0\")\n+\t\t\t\t\texpect(request.valueForHTTPHeaderField(\"Accept\")) == \"application/vnd.github.v3+json\"\n+\t\t\t\t\texpect(request.valueForHTTPHeaderField(\"User-Agent\")) == \"CarthageKit-unknown/unknown\"\n+\t\t\t\t\texpect(request.valueForHTTPHeaderField(\"Authorization\")) == \"example\"\n+\t\t\t\t}\n+\n+\t\t\t\tcontext(\"when the request succeeds\") {\n+\t\t\t\t\tit(\"returns a GitHubRelease object when given a valid GitHubRelease dictionary data\") {\n+\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\tlet responseDictionary = [\n+\t\t\t\t\t\t\t\"id\": 1,\n+\t\t\t\t\t\t\t\"name\": \"example release\",\n+\t\t\t\t\t\t\t\"tag_name\": \"v1.0.0\",\n+\t\t\t\t\t\t\t\"draft\": false,\n+\t\t\t\t\t\t\t\"prerelease\": false,\n+\t\t\t\t\t\t\t\"assets\": [\n+\t\t\t\t\t\t\t\t[\n+\t\t\t\t\t\t\t\t\t\"id\": 2,\n+\t\t\t\t\t\t\t\t\t\"name\": \"example asset\",\n+\t\t\t\t\t\t\t\t\t\"content_type\": \"text/text\",\n+\t\t\t\t\t\t\t\t\t\"url\": \"https://example.com/asset\"\n+\t\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t\t]\n+\t\t\t\t\t\t]\n+\t\t\t\t\t\tlet data = try? NSJSONSerialization.dataWithJSONObject(responseDictionary, options: [])\n+\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 200, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\tcompletion(data, response, nil)\n+\n+\t\t\t\t\t\tlet asset = GitHubRelease.Asset(ID: 2, name: \"example asset\", contentType: \"text/text\", URL: NSURL(string: \"https://example.com/asset\")!)\n+\t\t\t\t\t\tlet release = GitHubRelease(ID: 1, name: \"example release\", tag: \"v1.0.0\", draft: false, prerelease: false, assets: [asset])\n+\n+\t\t\t\t\t\texpect(events.count) == 2\n+\t\t\t\t\t\texpect(events[0].error).to(beNil())\n+\t\t\t\t\t\texpect(events[0].value) == release\n+\t\t\t\t\t\texpect(events[1] == Event.Completed) == true\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tit(\"returns nothing when given a valid json object, but not decodeable to a GitHubRelease object\") {\n+\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\tlet data = \"{}\".dataUsingEncoding(NSUTF8StringEncoding)\n+\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 200, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\tcompletion(data, response, nil)\n+\n+\t\t\t\t\t\texpect(events.count) == 1\n+\t\t\t\t\t\texpect(events[0] == Event.Completed) == true\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tit(\"returns an error when not given a valid json object\") {\n+\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\tlet data = \"example string\".dataUsingEncoding(NSUTF8StringEncoding)\n+\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 200, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\tcompletion(data, response, nil)\n+\n+\t\t\t\t\t\texpect(events.count) == 1\n+\t\t\t\t\t\texpect(events[0].value).to(beNil())\n+\t\t\t\t\t\texpect(events[0].error) == CarthageError.ParseError(description: \"Invalid JSON in releases for tag v1.0.0\")\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\n+\t\t\t\tcontext(\"when the request fails\") {\n+\t\t\t\t\tcontext(\"with a 400 or 500 level error that is not a 404\") {\n+\t\t\t\t\t\tit(\"returns a parse error if it cannot parse the error message json\") {\n+\t\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\t\tlet data = \"example string\".dataUsingEncoding(NSUTF8StringEncoding)\n+\t\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 401, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\t\tlet error = NSError(domain: NSURLErrorDomain, code: NSURLErrorUnknown, userInfo: nil)\n+\t\t\t\t\t\t\tcompletion(data, response, error)\n+\n+\t\t\t\t\t\t\texpect(events.count) == 1\n+\t\t\t\t\t\t\texpect(events[0].value).to(beNil())\n+\t\t\t\t\t\t\texpect(events[0].error) == CarthageError.GitHubAPIRequestFailed(\"Parse error: Invalid JSON in API error response 'example string'\")\n+\t\t\t\t\t\t}\n+\n+\t\t\t\t\t\tit(\"returns a network error when not given a data object\") {\n+\t\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 401, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\t\tlet error = NSError(domain: NSURLErrorDomain, code: NSURLErrorUnknown, userInfo: nil)\n+\t\t\t\t\t\t\tcompletion(nil, response, error)\n+\n+\t\t\t\t\t\t\texpect(events.count) == 1\n+\t\t\t\t\t\t\texpect(events[0].value).to(beNil())\n+\t\t\t\t\t\t\texpect(events[0].error) == CarthageError.NetworkError(error)\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\n+\t\t\t\t\tcontext(\"with a 404 error\") {\n+\t\t\t\t\t\tit(\"returns a network error\") {\n+\t\t\t\t\t\t\tlet (request, completion, _) = urlSession.dataTaskWithRequestArgs[0]\n+\n+\t\t\t\t\t\t\tlet response = NSHTTPURLResponse(URL: request.URL!, statusCode: 404, HTTPVersion: nil, headerFields: nil)\n+\t\t\t\t\t\t\tlet error = NSError(domain: NSURLErrorDomain, code: NSURLErrorUnknown, userInfo: nil)\n+\t\t\t\t\t\t\tcompletion(nil, response, error)\n+\n+\t\t\t\t\t\t\texpect(events.count) == 1\n+\t\t\t\t\t\t\texpect(events[0].value).to(beNil())\n+\t\t\t\t\t\t\texpect(events[0].error) == CarthageError.NetworkError(error)\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\n+\t\tfdescribe(\"downloadAsset:authorizationHeaderValue:urlSession:\") {","path":"Source/CarthageKitTests/GitHubSpec.swift","position":156,"original_position":156,"commit_id":"27f7983ff5416d3853cbcc7076a394d52574f215","original_commit_id":"27f7983ff5416d3853cbcc7076a394d52574f215","user":{"login":"younata","id":285321,"avatar_url":"https://avatars.githubusercontent.com/u/285321?v=3","gravatar_id":"","url":"https://api.github.com/users/younata","html_url":"https://github.com/younata","followers_url":"https://api.github.com/users/younata/followers","following_url":"https://api.github.com/users/younata/following{/other_user}","gists_url":"https://api.github.com/users/younata/gists{/gist_id}","starred_url":"https://api.github.com/users/younata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/younata/subscriptions","organizations_url":"https://api.github.com/users/younata/orgs","repos_url":"https://api.github.com/users/younata/repos","events_url":"https://api.github.com/users/younata/events{/privacy}","received_events_url":"https://api.github.com/users/younata/received_events","type":"User","site_admin":false},"body":"Oops.","created_at":"2016-02-19T17:48:59Z","updated_at":"2016-02-19T17:48:59Z","html_url":"https://github.com/Carthage/Carthage/pull/1136#discussion_r53492877","pull_request_url":"https://api.github.com/repos/Carthage/Carthage/pulls/1136","_links":{"self":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/comments/53492877"},"html":{"href":"https://github.com/Carthage/Carthage/pull/1136#discussion_r53492877"},"pull_request":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/1136"}}},"pull_request":{"url":"https://api.github.com/repos/Carthage/Carthage/pulls/1136","id":59838546,"html_url":"https://github.com/Carthage/Carthage/pull/1136","diff_url":"https://github.com/Carthage/Carthage/pull/1136.diff","patch_url":"https://github.com/Carthage/Carthage/pull/1136.patch","issue_url":"https://api.github.com/repos/Carthage/Carthage/issues/1136","number":1136,"state":"open","locked":false,"title":"Inject instances of NSURLSession in GitHub.swift","user":{"login":"younata","id":285321,"avatar_url":"https://avatars.githubusercontent.com/u/285321?v=3","gravatar_id":"","url":"https://api.github.com/users/younata","html_url":"https://github.com/younata","followers_url":"https://api.github.com/users/younata/followers","following_url":"https://api.github.com/users/younata/following{/other_user}","gists_url":"https://api.github.com/users/younata/gists{/gist_id}","starred_url":"https://api.github.com/users/younata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/younata/subscriptions","organizations_url":"https://api.github.com/users/younata/orgs","repos_url":"https://api.github.com/users/younata/repos","events_url":"https://api.github.com/users/younata/events{/privacy}","received_events_url":"https://api.github.com/users/younata/received_events","type":"User","site_admin":false},"body":"Also test our calls to the network using a faked-out network interface.\r\n\r\nI found a bit of unused code while doing this. `fetchAllPages()` in GitHub.swift is only called twice - recursively in `fetchAllPages()`, and in `releaseForTag()`. According to the github api v3 docs, `GET /repos/:owner/:repo/releases/tags/:tag` (the underlying url in `releaseForTag()`) won't ever page. So, unless I'm mistaken, the logic to recursively fetch additional pages is entirely unnecessary. Removing it, however, is outside the scope of this pull request.\r\n\r\nAnyway, this is another pull request meant to clean up the code, improve test coverage, and improve test runtime. It doesn't do the last (the only major improvements to the test runtime will come when I can fake out all calls to xcodebuild), but it certainly does the previous two.","created_at":"2016-02-18T18:02:08Z","updated_at":"2016-02-19T17:48:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3b3526985ff2cd0c55cd83cb8cb5efbb5483086f","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Carthage/Carthage/pulls/1136/commits","review_comments_url":"https://api.github.com/repos/Carthage/Carthage/pulls/1136/comments","review_comment_url":"https://api.github.com/repos/Carthage/Carthage/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Carthage/Carthage/issues/1136/comments","statuses_url":"https://api.github.com/repos/Carthage/Carthage/statuses/27f7983ff5416d3853cbcc7076a394d52574f215","head":{"label":"younata:inject_nsurlsession_github","ref":"inject_nsurlsession_github","sha":"27f7983ff5416d3853cbcc7076a394d52574f215","user":{"login":"younata","id":285321,"avatar_url":"https://avatars.githubusercontent.com/u/285321?v=3","gravatar_id":"","url":"https://api.github.com/users/younata","html_url":"https://github.com/younata","followers_url":"https://api.github.com/users/younata/followers","following_url":"https://api.github.com/users/younata/following{/other_user}","gists_url":"https://api.github.com/users/younata/gists{/gist_id}","starred_url":"https://api.github.com/users/younata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/younata/subscriptions","organizations_url":"https://api.github.com/users/younata/orgs","repos_url":"https://api.github.com/users/younata/repos","events_url":"https://api.github.com/users/younata/events{/privacy}","received_events_url":"https://api.github.com/users/younata/received_events","type":"User","site_admin":false},"repo":{"id":45412405,"name":"Carthage","full_name":"younata/Carthage","owner":{"login":"younata","id":285321,"avatar_url":"https://avatars.githubusercontent.com/u/285321?v=3","gravatar_id":"","url":"https://api.github.com/users/younata","html_url":"https://github.com/younata","followers_url":"https://api.github.com/users/younata/followers","following_url":"https://api.github.com/users/younata/following{/other_user}","gists_url":"https://api.github.com/users/younata/gists{/gist_id}","starred_url":"https://api.github.com/users/younata/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/younata/subscriptions","organizations_url":"https://api.github.com/users/younata/orgs","repos_url":"https://api.github.com/users/younata/repos","events_url":"https://api.github.com/users/younata/events{/privacy}","received_events_url":"https://api.github.com/users/younata/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/younata/Carthage","description":"A simple, decentralized dependency manager for Cocoa","fork":true,"url":"https://api.github.com/repos/younata/Carthage","forks_url":"https://api.github.com/repos/younata/Carthage/forks","keys_url":"https://api.github.com/repos/younata/Carthage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/younata/Carthage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/younata/Carthage/teams","hooks_url":"https://api.github.com/repos/younata/Carthage/hooks","issue_events_url":"https://api.github.com/repos/younata/Carthage/issues/events{/number}","events_url":"https://api.github.com/repos/younata/Carthage/events","assignees_url":"https://api.github.com/repos/younata/Carthage/assignees{/user}","branches_url":"https://api.github.com/repos/younata/Carthage/branches{/branch}","tags_url":"https://api.github.com/repos/younata/Carthage/tags","blobs_url":"https://api.github.com/repos/younata/Carthage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/younata/Carthage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/younata/Carthage/git/refs{/sha}","trees_url":"https://api.github.com/repos/younata/Carthage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/younata/Carthage/statuses/{sha}","languages_url":"https://api.github.com/repos/younata/Carthage/languages","stargazers_url":"https://api.github.com/repos/younata/Carthage/stargazers","contributors_url":"https://api.github.com/repos/younata/Carthage/contributors","subscribers_url":"https://api.github.com/repos/younata/Carthage/subscribers","subscription_url":"https://api.github.com/repos/younata/Carthage/subscription","commits_url":"https://api.github.com/repos/younata/Carthage/commits{/sha}","git_commits_url":"https://api.github.com/repos/younata/Carthage/git/commits{/sha}","comments_url":"https://api.github.com/repos/younata/Carthage/comments{/number}","issue_comment_url":"https://api.github.com/repos/younata/Carthage/issues/comments{/number}","contents_url":"https://api.github.com/repos/younata/Carthage/contents/{+path}","compare_url":"https://api.github.com/repos/younata/Carthage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/younata/Carthage/merges","archive_url":"https://api.github.com/repos/younata/Carthage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/younata/Carthage/downloads","issues_url":"https://api.github.com/repos/younata/Carthage/issues{/number}","pulls_url":"https://api.github.com/repos/younata/Carthage/pulls{/number}","milestones_url":"https://api.github.com/repos/younata/Carthage/milestones{/number}","notifications_url":"https://api.github.com/repos/younata/Carthage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/younata/Carthage/labels{/name}","releases_url":"https://api.github.com/repos/younata/Carthage/releases{/id}","deployments_url":"https://api.github.com/repos/younata/Carthage/deployments","created_at":"2015-11-02T18:05:34Z","updated_at":"2016-01-21T03:02:55Z","pushed_at":"2016-02-19T00:33:46Z","git_url":"git://github.com/younata/Carthage.git","ssh_url":"git@github.com:younata/Carthage.git","clone_url":"https://github.com/younata/Carthage.git","svn_url":"https://github.com/younata/Carthage","homepage":"","size":9793,"stargazers_count":0,"watchers_count":0,"language":"Swift","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":"Carthage:master","ref":"master","sha":"a65c148ae31ca56b3851658967e27c9c0296b852","user":{"login":"Carthage","id":9146792,"avatar_url":"https://avatars.githubusercontent.com/u/9146792?v=3","gravatar_id":"","url":"https://api.github.com/users/Carthage","html_url":"https://github.com/Carthage","followers_url":"https://api.github.com/users/Carthage/followers","following_url":"https://api.github.com/users/Carthage/following{/other_user}","gists_url":"https://api.github.com/users/Carthage/gists{/gist_id}","starred_url":"https://api.github.com/users/Carthage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Carthage/subscriptions","organizations_url":"https://api.github.com/users/Carthage/orgs","repos_url":"https://api.github.com/users/Carthage/repos","events_url":"https://api.github.com/users/Carthage/events{/privacy}","received_events_url":"https://api.github.com/users/Carthage/received_events","type":"Organization","site_admin":false},"repo":{"id":25050844,"name":"Carthage","full_name":"Carthage/Carthage","owner":{"login":"Carthage","id":9146792,"avatar_url":"https://avatars.githubusercontent.com/u/9146792?v=3","gravatar_id":"","url":"https://api.github.com/users/Carthage","html_url":"https://github.com/Carthage","followers_url":"https://api.github.com/users/Carthage/followers","following_url":"https://api.github.com/users/Carthage/following{/other_user}","gists_url":"https://api.github.com/users/Carthage/gists{/gist_id}","starred_url":"https://api.github.com/users/Carthage/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Carthage/subscriptions","organizations_url":"https://api.github.com/users/Carthage/orgs","repos_url":"https://api.github.com/users/Carthage/repos","events_url":"https://api.github.com/users/Carthage/events{/privacy}","received_events_url":"https://api.github.com/users/Carthage/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Carthage/Carthage","description":"A simple, decentralized dependency manager for Cocoa","fork":false,"url":"https://api.github.com/repos/Carthage/Carthage","forks_url":"https://api.github.com/repos/Carthage/Carthage/forks","keys_url":"https://api.github.com/repos/Carthage/Carthage/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Carthage/Carthage/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Carthage/Carthage/teams","hooks_url":"https://api.github.com/repos/Carthage/Carthage/hooks","issue_events_url":"https://api.github.com/repos/Carthage/Carthage/issues/events{/number}","events_url":"https://api.github.com/repos/Carthage/Carthage/events","assignees_url":"https://api.github.com/repos/Carthage/Carthage/assignees{/user}","branches_url":"https://api.github.com/repos/Carthage/Carthage/branches{/branch}","tags_url":"https://api.github.com/repos/Carthage/Carthage/tags","blobs_url":"https://api.github.com/repos/Carthage/Carthage/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Carthage/Carthage/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Carthage/Carthage/git/refs{/sha}","trees_url":"https://api.github.com/repos/Carthage/Carthage/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Carthage/Carthage/statuses/{sha}","languages_url":"https://api.github.com/repos/Carthage/Carthage/languages","stargazers_url":"https://api.github.com/repos/Carthage/Carthage/stargazers","contributors_url":"https://api.github.com/repos/Carthage/Carthage/contributors","subscribers_url":"https://api.github.com/repos/Carthage/Carthage/subscribers","subscription_url":"https://api.github.com/repos/Carthage/Carthage/subscription","commits_url":"https://api.github.com/repos/Carthage/Carthage/commits{/sha}","git_commits_url":"https://api.github.com/repos/Carthage/Carthage/git/commits{/sha}","comments_url":"https://api.github.com/repos/Carthage/Carthage/comments{/number}","issue_comment_url":"https://api.github.com/repos/Carthage/Carthage/issues/comments{/number}","contents_url":"https://api.github.com/repos/Carthage/Carthage/contents/{+path}","compare_url":"https://api.github.com/repos/Carthage/Carthage/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Carthage/Carthage/merges","archive_url":"https://api.github.com/repos/Carthage/Carthage/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Carthage/Carthage/downloads","issues_url":"https://api.github.com/repos/Carthage/Carthage/issues{/number}","pulls_url":"https://api.github.com/repos/Carthage/Carthage/pulls{/number}","milestones_url":"https://api.github.com/repos/Carthage/Carthage/milestones{/number}","notifications_url":"https://api.github.com/repos/Carthage/Carthage/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Carthage/Carthage/labels{/name}","releases_url":"https://api.github.com/repos/Carthage/Carthage/releases{/id}","deployments_url":"https://api.github.com/repos/Carthage/Carthage/deployments","created_at":"2014-10-10T19:54:55Z","updated_at":"2016-02-19T16:10:08Z","pushed_at":"2016-02-19T06:34:09Z","git_url":"git://github.com/Carthage/Carthage.git","ssh_url":"git@github.com:Carthage/Carthage.git","clone_url":"https://github.com/Carthage/Carthage.git","svn_url":"https://github.com/Carthage/Carthage","homepage":"","size":11039,"stargazers_count":6067,"watchers_count":6067,"language":"Swift","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":393,"mirror_url":null,"open_issues_count":134,"forks":393,"open_issues":134,"watchers":6067,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/1136"},"html":{"href":"https://github.com/Carthage/Carthage/pull/1136"},"issue":{"href":"https://api.github.com/repos/Carthage/Carthage/issues/1136"},"comments":{"href":"https://api.github.com/repos/Carthage/Carthage/issues/1136/comments"},"review_comments":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/1136/comments"},"review_comment":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Carthage/Carthage/pulls/1136/commits"},"statuses":{"href":"https://api.github.com/repos/Carthage/Carthage/statuses/27f7983ff5416d3853cbcc7076a394d52574f215"}}}}