{"action":"created","comment":{"url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/comments/44859031","id":44859031,"diff_hunk":"@@ -14,104 +14,141 @@ test_expect_success \"resolve: prepare files\" '\n \tc_hash=$(ipfs add -q -r a/b/c | tail -n1)\n '\n \n-test_resolve_setup_name() {\n-\tref=$1\n+TEST_COMMAND=test_expect_success\n \n-\ttest_expect_success \"resolve: prepare name\" '\n+test_name_publish() {\n+\tref=\"$1\"; shift\n+\tpublish_args=\"$(shellquote \"$@\")\"\n+\n+\t\"$TEST_COMMAND\" \"resolve: name publish $ref${1:+ ($publish_args)}\" '\n \t\tid_hash=$(ipfs id -f=\"<id>\") &&\n-\t\tipfs name publish \"$ref\" &&\n-\t\tprintf \"$ref\" >expected_nameval &&\n-\t\tipfs name resolve >actual_nameval &&\n-\t\ttest_cmp expected_nameval actual_nameval\n+\t\tipfs name publish '\"$publish_args\"' \"$ref\"\n \t'\n }\n \n-test_resolve_setup_name_fail() {\n-\tref=$1\n+test_name_resolve() {\n+\tref=\"$1\"\n \n-\ttest_expect_failure \"resolve: prepare name\" '\n-\t\tid_hash=$(ipfs id -f=\"<id>\") &&\n-\t\tipfs name publish \"$ref\" &&\n-\t\tprintf \"$ref\" >expected_nameval &&\n+\t\"$TEST_COMMAND\" \"resolve: name resolve $ref\" '\n+\t\tprintf \"%s\" \"$ref\" >expected_nameval &&\n \t\tipfs name resolve >actual_nameval &&\n \t\ttest_cmp expected_nameval actual_nameval\n \t'\n }\n \n test_resolve() {\n-\tsrc=$1\n-\tdst=$2\n+\tsrc=\"$1\"\n+\tdst=\"$2\"\n \n-\ttest_expect_success \"resolve succeeds: $src\" '\n+\t\"$TEST_COMMAND\" \"resolve succeeds: $src\" '\n \t\tipfs resolve -r \"$src\" >actual\n \t'\n \n-\ttest_expect_success \"resolved correctly: $src -> $dst\" '\n-\t\tprintf \"$dst\" >expected &&\n+\t\"$TEST_COMMAND\" \"resolved correctly: $src -> $dst\" '\n+\t\tprintf \"%s\" \"$dst\" >expected &&\n \t\ttest_cmp expected actual\n \t'\n }\n \n-test_resolve_cmd() {\n+# should work offline\n \n-\ttest_resolve \"/ipfs/$a_hash\" \"/ipfs/$a_hash\"\n-\ttest_resolve \"/ipfs/$a_hash/b\" \"/ipfs/$b_hash\"\n-\ttest_resolve \"/ipfs/$a_hash/b/c\" \"/ipfs/$c_hash\"\n-\ttest_resolve \"/ipfs/$b_hash/c\" \"/ipfs/$c_hash\"\n+test_resolve \"/ipfs/$a_hash\" \"/ipfs/$a_hash\"\n+test_resolve \"/ipfs/$a_hash/b\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipfs/$a_hash/b/c\" \"/ipfs/$c_hash\"\n+test_resolve \"/ipfs/$b_hash/c\" \"/ipfs/$c_hash\"\n \n-\ttest_resolve_setup_name \"/ipfs/$a_hash\"\n-\ttest_resolve \"/ipns/$id_hash\" \"/ipfs/$a_hash\"\n-\ttest_resolve \"/ipns/$id_hash/b\" \"/ipfs/$b_hash\"\n-\ttest_resolve \"/ipns/$id_hash/b/c\" \"/ipfs/$c_hash\"\n+# Cache should not be in effect despite using the default TTL.\n+test_name_publish \"/ipfs/$a_hash\"\n+test_name_resolve \"/ipfs/$a_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$a_hash\"\n+test_resolve \"/ipns/$id_hash/b\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/b/c\" \"/ipfs/$c_hash\"\n \n-\ttest_resolve_setup_name \"/ipfs/$b_hash\"\n-\ttest_resolve \"/ipns/$id_hash\" \"/ipfs/$b_hash\"\n-\ttest_resolve \"/ipns/$id_hash/c\" \"/ipfs/$c_hash\"\n+test_name_publish \"/ipfs/$b_hash\"\n+test_name_resolve \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/c\" \"/ipfs/$c_hash\"\n \n-\ttest_resolve_setup_name \"/ipfs/$c_hash\"\n-\ttest_resolve \"/ipns/$id_hash\" \"/ipfs/$c_hash\"\n-}\n+test_name_publish \"/ipfs/$c_hash\"\n+test_name_resolve \"/ipfs/$c_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$c_hash\"\n \n-#todo remove this once the online resolve is fixed\n-test_resolve_fail() {\n-\tsrc=$1\n-\tdst=$2\n-\n-\ttest_expect_failure \"resolve succeeds: $src\" '\n-\t\tipfs resolve \"$src\" >actual\n-\t'\n+# should work online\n+test_launch_ipfs_daemon\n \n-\ttest_expect_failure \"resolved correctly: $src -> $dst\" '\n-\t\tprintf \"$dst\" >expected &&\n-\t\ttest_cmp expected actual\n-\t'\n-}\n+test_resolve \"/ipfs/$a_hash\" \"/ipfs/$a_hash\"\n+test_resolve \"/ipfs/$a_hash/b\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipfs/$a_hash/b/c\" \"/ipfs/$c_hash\"\n+test_resolve \"/ipfs/$b_hash/c\" \"/ipfs/$c_hash\"\n+\n+# https://github.com/ipfs/go-ipfs/issues/1941 sharness suite: ipfs name\n+# publish: “Error: failed to find any peer in table”\n+TEST_COMMAND=test_expect_failure\n+\n+test_name_publish \"/ipfs/$a_hash\" --ttl=0s\n+test_name_resolve \"/ipfs/$a_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$a_hash\"\n+test_resolve \"/ipns/$id_hash/b\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/b/c\" \"/ipfs/$c_hash\"\n+\n+test_name_publish \"/ipfs/$b_hash\" --ttl=0s\n+test_name_resolve \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/c\" \"/ipfs/$c_hash\"\n+\n+test_name_publish \"/ipfs/$c_hash\" --ttl=0s\n+test_name_resolve \"/ipfs/$c_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$c_hash\"\n+\n+# The following tests test the caching by publishing a new name and expecting\n+# the previous resolve result to stay cached.  The first test_(name_)resolve\n+# after a test_name_publish will generate the cache entry and any subsequent\n+# test_resolve invocations will use that cache entry until the expiry timer\n+# finishes (test_timer_wait).\n+\n+TTL=10\n+\n+test_name_publish \"/ipfs/$a_hash\" --ttl=\"${TTL}s\"\n+test_name_resolve \"/ipfs/$a_hash\"\n+\n+# The cache entry has expired when this finishes.\n+test_timer_start EXPIRY_TIMER \"${TTL}s\"\n+# Publish a new version now, the previous version should still be cached.\n+test_name_publish \"/ipfs/$b_hash\" --ttl=\"${TTL}s\"\n+\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$a_hash\"\n+test_resolve \"/ipns/$id_hash/b\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/b/c\" \"/ipfs/$c_hash\"\n+\n+# Make sure the expiry timer is still running, otherwise the result might be\n+# wrong.  If this fails, we will need to increase TTL above to give enough time\n+# for the tests.\n+test_expect_success \"tests did not take too long\" '\n+  test_timer_is_running \"$EXPIRY_TIMER\"\n+'\n+test_expect_success \"previous version is no longer cached\" '\n+  test_timer_wait \"$EXPIRY_TIMER\"\n+'\n \n-test_resolve_cmd_fail() {\n-\ttest_resolve \"/ipfs/$a_hash\" \"/ipfs/$a_hash\"\n-\ttest_resolve \"/ipfs/$a_hash/b\" \"/ipfs/$b_hash\"\n-\ttest_resolve \"/ipfs/$a_hash/b/c\" \"/ipfs/$c_hash\"\n-\ttest_resolve \"/ipfs/$b_hash/c\" \"/ipfs/$c_hash\"\n+test_name_resolve \"/ipfs/$b_hash\"\n \n-\ttest_resolve_setup_name_fail \"/ipfs/$a_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash\" \"/ipfs/$a_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash/b\" \"/ipfs/$b_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash/b/c\" \"/ipfs/$c_hash\"\n+test_timer_start EXPIRY_TIMER \"${TTL}s\"\n+# Publish a new version now, the previous version should still be cached.\n+test_name_publish \"/ipfs/$c_hash\" # Default TTL for the final one.\n \n-\ttest_resolve_setup_name_fail \"/ipfs/$b_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash\" \"/ipfs/$b_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash/c\" \"/ipfs/$c_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$b_hash\"\n+test_resolve \"/ipns/$id_hash/c\" \"/ipfs/$c_hash\"\n \n-\ttest_resolve_setup_name_fail \"/ipfs/$c_hash\"\n-\ttest_resolve_fail \"/ipns/$id_hash\" \"/ipfs/$c_hash\"\n-}\n+test_expect_success \"tests did not take too long\" '\n+  test_timer_is_running \"$EXPIRY_TIMER\"\n+'\n+test_expect_success \"previous version is no longer cached\" '\n+  test_timer_wait \"$EXPIRY_TIMER\"\n+'\n \n-# should work offline\n-test_resolve_cmd\n+test_name_resolve \"/ipfs/$c_hash\"\n+test_resolve \"/ipns/$id_hash\" \"/ipfs/$c_hash\"\n \n-# should work online\n-test_launch_ipfs_daemon","path":"test/sharness/t0160-resolve.sh","position":180,"original_position":203,"commit_id":"e31212570238ea9347ed805035ee5ccc29f5bd3d","original_commit_id":"6ee526f373cd2296f69de9dcde33f90742e89eea","user":{"login":"ion1","id":39660,"avatar_url":"https://avatars.githubusercontent.com/u/39660?v=3","gravatar_id":"","url":"https://api.github.com/users/ion1","html_url":"https://github.com/ion1","followers_url":"https://api.github.com/users/ion1/followers","following_url":"https://api.github.com/users/ion1/following{/other_user}","gists_url":"https://api.github.com/users/ion1/gists{/gist_id}","starred_url":"https://api.github.com/users/ion1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ion1/subscriptions","organizations_url":"https://api.github.com/users/ion1/orgs","repos_url":"https://api.github.com/users/ion1/repos","events_url":"https://api.github.com/users/ion1/events{/privacy}","received_events_url":"https://api.github.com/users/ion1/received_events","type":"User","site_admin":false},"body":"Those lines explicitly test the caching done by the daemon in online mode. I can put them into a function but they will fail if executed while offline because there is no daemon to cache resolve results.","created_at":"2015-11-14T14:27:42Z","updated_at":"2015-11-14T14:27:42Z","html_url":"https://github.com/ipfs/go-ipfs/pull/1921#discussion_r44859031","pull_request_url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921","_links":{"self":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/comments/44859031"},"html":{"href":"https://github.com/ipfs/go-ipfs/pull/1921#discussion_r44859031"},"pull_request":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921"}}},"pull_request":{"url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921","id":49346580,"html_url":"https://github.com/ipfs/go-ipfs/pull/1921","diff_url":"https://github.com/ipfs/go-ipfs/pull/1921.diff","patch_url":"https://github.com/ipfs/go-ipfs/pull/1921.patch","issue_url":"https://api.github.com/repos/ipfs/go-ipfs/issues/1921","number":1921,"state":"open","locked":false,"title":"Gateway: Add Cache-Control/max-age and ETag to IPNS requests","user":{"login":"ion1","id":39660,"avatar_url":"https://avatars.githubusercontent.com/u/39660?v=3","gravatar_id":"","url":"https://api.github.com/users/ion1","html_url":"https://github.com/ion1","followers_url":"https://api.github.com/users/ion1/followers","following_url":"https://api.github.com/users/ion1/following{/other_user}","gists_url":"https://api.github.com/users/ion1/gists{/gist_id}","starred_url":"https://api.github.com/users/ion1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ion1/subscriptions","organizations_url":"https://api.github.com/users/ion1/orgs","repos_url":"https://api.github.com/users/ion1/repos","events_url":"https://api.github.com/users/ion1/events{/privacy}","received_events_url":"https://api.github.com/users/ion1/received_events","type":"User","site_admin":false},"body":"Based on https://github.com/ipfs/go-ipfs/pull/1887 “cache ipns entries to speed things up a little”.\r\n\r\nAddresses https://github.com/ipfs/go-ipfs/issues/1818.\r\n\r\nThis is my first time learning Go, I hope I’m doing things somewhat correctly.","created_at":"2015-10-31T10:27:45Z","updated_at":"2015-11-14T14:27:42Z","closed_at":null,"merged_at":null,"merge_commit_sha":"274b06092dfdf6dbd48524bbc4f9c916690cd363","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921/commits","review_comments_url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921/comments","review_comment_url":"https://api.github.com/repos/ipfs/go-ipfs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ipfs/go-ipfs/issues/1921/comments","statuses_url":"https://api.github.com/repos/ipfs/go-ipfs/statuses/e31212570238ea9347ed805035ee5ccc29f5bd3d","head":{"label":"ion1:feat/ipns-cache-resolve","ref":"feat/ipns-cache-resolve","sha":"e31212570238ea9347ed805035ee5ccc29f5bd3d","user":{"login":"ion1","id":39660,"avatar_url":"https://avatars.githubusercontent.com/u/39660?v=3","gravatar_id":"","url":"https://api.github.com/users/ion1","html_url":"https://github.com/ion1","followers_url":"https://api.github.com/users/ion1/followers","following_url":"https://api.github.com/users/ion1/following{/other_user}","gists_url":"https://api.github.com/users/ion1/gists{/gist_id}","starred_url":"https://api.github.com/users/ion1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ion1/subscriptions","organizations_url":"https://api.github.com/users/ion1/orgs","repos_url":"https://api.github.com/users/ion1/repos","events_url":"https://api.github.com/users/ion1/events{/privacy}","received_events_url":"https://api.github.com/users/ion1/received_events","type":"User","site_admin":false},"repo":{"id":45205538,"name":"go-ipfs","full_name":"ion1/go-ipfs","owner":{"login":"ion1","id":39660,"avatar_url":"https://avatars.githubusercontent.com/u/39660?v=3","gravatar_id":"","url":"https://api.github.com/users/ion1","html_url":"https://github.com/ion1","followers_url":"https://api.github.com/users/ion1/followers","following_url":"https://api.github.com/users/ion1/following{/other_user}","gists_url":"https://api.github.com/users/ion1/gists{/gist_id}","starred_url":"https://api.github.com/users/ion1/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ion1/subscriptions","organizations_url":"https://api.github.com/users/ion1/orgs","repos_url":"https://api.github.com/users/ion1/repos","events_url":"https://api.github.com/users/ion1/events{/privacy}","received_events_url":"https://api.github.com/users/ion1/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ion1/go-ipfs","description":"ipfs implementation in go","fork":true,"url":"https://api.github.com/repos/ion1/go-ipfs","forks_url":"https://api.github.com/repos/ion1/go-ipfs/forks","keys_url":"https://api.github.com/repos/ion1/go-ipfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ion1/go-ipfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ion1/go-ipfs/teams","hooks_url":"https://api.github.com/repos/ion1/go-ipfs/hooks","issue_events_url":"https://api.github.com/repos/ion1/go-ipfs/issues/events{/number}","events_url":"https://api.github.com/repos/ion1/go-ipfs/events","assignees_url":"https://api.github.com/repos/ion1/go-ipfs/assignees{/user}","branches_url":"https://api.github.com/repos/ion1/go-ipfs/branches{/branch}","tags_url":"https://api.github.com/repos/ion1/go-ipfs/tags","blobs_url":"https://api.github.com/repos/ion1/go-ipfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ion1/go-ipfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ion1/go-ipfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ion1/go-ipfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ion1/go-ipfs/statuses/{sha}","languages_url":"https://api.github.com/repos/ion1/go-ipfs/languages","stargazers_url":"https://api.github.com/repos/ion1/go-ipfs/stargazers","contributors_url":"https://api.github.com/repos/ion1/go-ipfs/contributors","subscribers_url":"https://api.github.com/repos/ion1/go-ipfs/subscribers","subscription_url":"https://api.github.com/repos/ion1/go-ipfs/subscription","commits_url":"https://api.github.com/repos/ion1/go-ipfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ion1/go-ipfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ion1/go-ipfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ion1/go-ipfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ion1/go-ipfs/contents/{+path}","compare_url":"https://api.github.com/repos/ion1/go-ipfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ion1/go-ipfs/merges","archive_url":"https://api.github.com/repos/ion1/go-ipfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ion1/go-ipfs/downloads","issues_url":"https://api.github.com/repos/ion1/go-ipfs/issues{/number}","pulls_url":"https://api.github.com/repos/ion1/go-ipfs/pulls{/number}","milestones_url":"https://api.github.com/repos/ion1/go-ipfs/milestones{/number}","notifications_url":"https://api.github.com/repos/ion1/go-ipfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ion1/go-ipfs/labels{/name}","releases_url":"https://api.github.com/repos/ion1/go-ipfs/releases{/id}","created_at":"2015-10-29T19:26:03Z","updated_at":"2015-10-29T19:26:07Z","pushed_at":"2015-11-13T18:15:18Z","git_url":"git://github.com/ion1/go-ipfs.git","ssh_url":"git@github.com:ion1/go-ipfs.git","clone_url":"https://github.com/ion1/go-ipfs.git","svn_url":"https://github.com/ion1/go-ipfs","homepage":"https://github.com/ipfs/ipfs","size":21156,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"ipfs:master","ref":"master","sha":"ca443b35d49ab5ca1da372764b5b2c02abd7c616","user":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"repo":{"id":21233191,"name":"go-ipfs","full_name":"ipfs/go-ipfs","owner":{"login":"ipfs","id":10536621,"avatar_url":"https://avatars.githubusercontent.com/u/10536621?v=3","gravatar_id":"","url":"https://api.github.com/users/ipfs","html_url":"https://github.com/ipfs","followers_url":"https://api.github.com/users/ipfs/followers","following_url":"https://api.github.com/users/ipfs/following{/other_user}","gists_url":"https://api.github.com/users/ipfs/gists{/gist_id}","starred_url":"https://api.github.com/users/ipfs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ipfs/subscriptions","organizations_url":"https://api.github.com/users/ipfs/orgs","repos_url":"https://api.github.com/users/ipfs/repos","events_url":"https://api.github.com/users/ipfs/events{/privacy}","received_events_url":"https://api.github.com/users/ipfs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ipfs/go-ipfs","description":"ipfs implementation in go","fork":false,"url":"https://api.github.com/repos/ipfs/go-ipfs","forks_url":"https://api.github.com/repos/ipfs/go-ipfs/forks","keys_url":"https://api.github.com/repos/ipfs/go-ipfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ipfs/go-ipfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ipfs/go-ipfs/teams","hooks_url":"https://api.github.com/repos/ipfs/go-ipfs/hooks","issue_events_url":"https://api.github.com/repos/ipfs/go-ipfs/issues/events{/number}","events_url":"https://api.github.com/repos/ipfs/go-ipfs/events","assignees_url":"https://api.github.com/repos/ipfs/go-ipfs/assignees{/user}","branches_url":"https://api.github.com/repos/ipfs/go-ipfs/branches{/branch}","tags_url":"https://api.github.com/repos/ipfs/go-ipfs/tags","blobs_url":"https://api.github.com/repos/ipfs/go-ipfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ipfs/go-ipfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ipfs/go-ipfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ipfs/go-ipfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ipfs/go-ipfs/statuses/{sha}","languages_url":"https://api.github.com/repos/ipfs/go-ipfs/languages","stargazers_url":"https://api.github.com/repos/ipfs/go-ipfs/stargazers","contributors_url":"https://api.github.com/repos/ipfs/go-ipfs/contributors","subscribers_url":"https://api.github.com/repos/ipfs/go-ipfs/subscribers","subscription_url":"https://api.github.com/repos/ipfs/go-ipfs/subscription","commits_url":"https://api.github.com/repos/ipfs/go-ipfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ipfs/go-ipfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ipfs/go-ipfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ipfs/go-ipfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ipfs/go-ipfs/contents/{+path}","compare_url":"https://api.github.com/repos/ipfs/go-ipfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ipfs/go-ipfs/merges","archive_url":"https://api.github.com/repos/ipfs/go-ipfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ipfs/go-ipfs/downloads","issues_url":"https://api.github.com/repos/ipfs/go-ipfs/issues{/number}","pulls_url":"https://api.github.com/repos/ipfs/go-ipfs/pulls{/number}","milestones_url":"https://api.github.com/repos/ipfs/go-ipfs/milestones{/number}","notifications_url":"https://api.github.com/repos/ipfs/go-ipfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ipfs/go-ipfs/labels{/name}","releases_url":"https://api.github.com/repos/ipfs/go-ipfs/releases{/id}","created_at":"2014-06-26T08:14:34Z","updated_at":"2015-11-14T14:04:41Z","pushed_at":"2015-11-13T22:38:37Z","git_url":"git://github.com/ipfs/go-ipfs.git","ssh_url":"git@github.com:ipfs/go-ipfs.git","clone_url":"https://github.com/ipfs/go-ipfs.git","svn_url":"https://github.com/ipfs/go-ipfs","homepage":"https://github.com/ipfs/ipfs","size":36810,"stargazers_count":1319,"watchers_count":1319,"language":"Go","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":232,"mirror_url":null,"open_issues_count":434,"forks":232,"open_issues":434,"watchers":1319,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921"},"html":{"href":"https://github.com/ipfs/go-ipfs/pull/1921"},"issue":{"href":"https://api.github.com/repos/ipfs/go-ipfs/issues/1921"},"comments":{"href":"https://api.github.com/repos/ipfs/go-ipfs/issues/1921/comments"},"review_comments":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921/comments"},"review_comment":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ipfs/go-ipfs/pulls/1921/commits"},"statuses":{"href":"https://api.github.com/repos/ipfs/go-ipfs/statuses/e31212570238ea9347ed805035ee5ccc29f5bd3d"}}}}