{"action":"created","comment":{"url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/comments/184585023","pull_request_review_id":115812013,"id":184585023,"diff_hunk":"@@ -0,0 +1,890 @@\n+/**\n+ * capi.c\n+ *\n+ * capi module for c.\n+ */\n+#include <stdio.h>\n+#include <stdlib.h>\n+#include <string.h>\n+#include <unistd.h>\n+#include <limits.h>\n+#include <sys/types.h>\n+#include <signal.h>\n+#include <errno.h>\n+\n+#include \"capi.h\"\n+\n+\n+#define st_capi_validate_lib_state(lib_state) do {                            \\\n+    st_must((lib_state) != NULL, ST_ARG_INVALID);                             \\\n+    st_must((lib_state)->init_state >= ST_CAPI_INIT_NONE, ST_ARG_INVALID);    \\\n+    st_must((lib_state)->init_state <= ST_CAPI_INIT_DONE, ST_ARG_INVALID);    \\\n+} while (0)\n+\n+#define st_capi_validate_pstate(pstate) do {                                   \\\n+    st_typeof(pstate) _pstate = pstate;                                        \\\n+                                                                               \\\n+    st_must(_pstate != NULL, ST_UNINITED);                                     \\\n+    st_must(_pstate->inited == 1, ST_UNINITED);                                \\\n+    st_must(_pstate->pid != 0, ST_UNINITED);                                   \\\n+    st_must(_pstate->root != NULL, ST_UNINITED);                               \\\n+                                                                               \\\n+    st_must(_pstate->lib_state != NULL, ST_UNINITED);                          \\\n+    st_must(_pstate->lib_state->init_state == ST_CAPI_INIT_DONE, ST_UNINITED); \\\n+} while (0)\n+\n+\n+/** by default, run gc periodically */\n+#define ST_CAPI_GC_PERIODICALLY    1\n+\n+#define ST_CAPI_PROCESS_EMPTY {    \\\n+    .pid       = 0,                \\\n+    .root      = NULL,             \\\n+    .inited    = 0,                \\\n+    .lib_state = NULL,             \\\n+}\n+\n+#define st_capi_add_table_ref(addr_as_key, table_addr)    \\\n+    st_capi_handle_table_ref((addr_as_key), (table_addr))\n+\n+#define st_capi_remove_table_ref(addr_as_key)             \\\n+    st_capi_handle_table_ref((addr_as_key), (NULL))\n+\n+/**\n+ * used to store info used by worker process regularly\n+ */\n+static st_capi_process_t process_state = ST_CAPI_PROCESS_EMPTY;\n+\n+\n+st_capi_process_t *\n+st_capi_get_process_state(void)\n+{\n+    return &process_state;\n+}\n+\n+\n+/**\n+ * the address where cvalue points to is used as the buffer for st_tvalue_t,\n+ * so its lifecycle must not be shorter than the returned st_tvalue_t.\n+ *\n+ * src is used to hold the pointer to value and value type only.\n+ */\n+int\n+st_capi_init_tvalue(st_tvalue_t *tvalue, st_tvalue_t src)\n+{\n+    st_must(tvalue != NULL, ST_ARG_INVALID);\n+    st_must(src.type != ST_TYPES_UNKNOWN, ST_UNSUPPORTED);\n+    st_must(src.bytes != NULL, ST_ARG_INVALID);\n+\n+    int64_t len = 0;\n+\n+    switch (src.type) {\n+        case ST_TYPES_STRING:\n+            src.bytes = (uint8_t *)(*((char **)src.bytes));\n+            len = strlen((char *)src.bytes) + 1;\n+\n+            break;\n+        case ST_TYPES_CHAR_ARRAY:\n+            len = strlen((char *)src.bytes) + 1;\n+\n+            break;\n+        case ST_TYPES_NUMBER:\n+            len = sizeof(double);\n+\n+            break;\n+        case ST_TYPES_BOOLEAN:\n+            len = sizeof(st_bool);\n+\n+            break;\n+        case ST_TYPES_TABLE:\n+            /** src.bytes is type of st_table_t **) */\n+            len = sizeof(st_table_t *);\n+\n+            break;\n+        case ST_TYPES_INTEGER:\n+            len = sizeof(int);\n+\n+            break;\n+        case ST_TYPES_U64:\n+            len = sizeof(uint64_t);\n+\n+            break;\n+        default:\n+\n+            return ST_ARG_INVALID;\n+    }\n+\n+    *tvalue = (st_tvalue_t)st_str_wrap_common(src.bytes, src.type, len);\n+\n+    return ST_OK;\n+}\n+\n+\n+static int\n+st_capi_remove_gc_root(st_capi_t *state, st_table_t *table)\n+{\n+    st_must(state != NULL, ST_ARG_INVALID);\n+    st_must(table != NULL, ST_ARG_INVALID);\n+\n+    int ret = st_table_remove_all(table);\n+    if (ret != ST_OK) {\n+        derr(\"failed to remove all from root: %d\", ret);\n+\n+        return ret;\n+    }\n+\n+    return st_gc_remove_root(&state->table_pool.gc, &table->gc_head);\n+}\n+\n+\n+static int\n+st_capi_foreach_nolock(st_table_t *table,\n+                       st_tvalue_t *init_key,\n+                       int expected_side,\n+                       st_capi_foreach_cb_t foreach_cb,\n+                       void *args)\n+{\n+    st_tvalue_t     key;\n+    st_tvalue_t     value;\n+    st_table_iter_t iter;\n+\n+    int ret = st_table_iter_init(table, &iter, init_key, expected_side);\n+    if (ret != ST_OK) {\n+        derr(\"failed to init iter: %d\", ret);\n+\n+        return ret;\n+    }\n+\n+    while (ret == ST_OK) {\n+        ret = st_table_iter_next(table, &iter, &key, &value);\n+\n+        if (ret == ST_TABLE_MODIFIED) {\n+            break;\n+        }\n+\n+        if (ret == ST_OK) {\n+            /** ST_ITER_STOP would stop iterating normally */\n+            ret = foreach_cb(&key, &value, args);\n+        }\n+    }\n+\n+    return (ret == ST_NOT_FOUND ? ST_OK : ret);\n+}\n+\n+\n+int\n+st_capi_foreach(st_table_t *table,\n+                st_tvalue_t *init_key,\n+                int expected_side,\n+                st_capi_foreach_cb_t foreach_cb,\n+                void *args)\n+{\n+    int ret = st_robustlock_lock(&table->lock);\n+    if (ret != ST_OK) {\n+        derr(\"failed to lock table: %d\", ret);\n+\n+        return ret;\n+    }\n+\n+    ret = st_capi_foreach_nolock(table,\n+                                 init_key,\n+                                 expected_side,\n+                                 foreach_cb,\n+                                 args);\n+\n+    st_robustlock_unlock_err_abort(&table->lock);\n+\n+    return ret;\n+}\n+\n+\n+static int\n+st_capi_remove_gc_root_cb(const st_tvalue_t *key,\n+                          st_tvalue_t *value,\n+                          void *roots)\n+{\n+    st_assert(ST_TYPES_INTEGER == key->type);\n+\n+    st_table_t *proot = st_table_get_table_addr_from_value(*value);\n+    pid_t pid = *((pid_t *)key->bytes);\n+\n+    errno = 0;\n+    int ret = kill(pid, 0);\n+    if (ret != -1 || errno != ESRCH) {","path":"src/capi/capi.c","position":199,"original_position":213,"commit_id":"fa36b26a76559914f9fef3efe7f4465d4888348e","original_commit_id":"057cec898afc10a4f9e4d8bdc8e2a4e743540f1c","user":{"login":"lishulong","id":13903162,"avatar_url":"https://avatars2.githubusercontent.com/u/13903162?v=4","gravatar_id":"","url":"https://api.github.com/users/lishulong","html_url":"https://github.com/lishulong","followers_url":"https://api.github.com/users/lishulong/followers","following_url":"https://api.github.com/users/lishulong/following{/other_user}","gists_url":"https://api.github.com/users/lishulong/gists{/gist_id}","starred_url":"https://api.github.com/users/lishulong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lishulong/subscriptions","organizations_url":"https://api.github.com/users/lishulong/orgs","repos_url":"https://api.github.com/users/lishulong/repos","events_url":"https://api.github.com/users/lishulong/events{/privacy}","received_events_url":"https://api.github.com/users/lishulong/received_events","type":"User","site_admin":false},"body":"OK，这里调整成使用robustlock了","created_at":"2018-04-27T03:36:53Z","updated_at":"2018-04-27T03:36:53Z","html_url":"https://github.com/bsc-s2/lua-sharedtable/pull/91#discussion_r184585023","pull_request_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/comments/184585023"},"html":{"href":"https://github.com/bsc-s2/lua-sharedtable/pull/91#discussion_r184585023"},"pull_request":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91"}},"in_reply_to_id":182359139},"pull_request":{"url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91","id":181377508,"html_url":"https://github.com/bsc-s2/lua-sharedtable/pull/91","diff_url":"https://github.com/bsc-s2/lua-sharedtable/pull/91.diff","patch_url":"https://github.com/bsc-s2/lua-sharedtable/pull/91.patch","issue_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/91","number":91,"state":"open","locked":false,"title":"sharetable: interface for c","user":{"login":"lishulong","id":13903162,"avatar_url":"https://avatars2.githubusercontent.com/u/13903162?v=4","gravatar_id":"","url":"https://api.github.com/users/lishulong","html_url":"https://github.com/lishulong","followers_url":"https://api.github.com/users/lishulong/followers","following_url":"https://api.github.com/users/lishulong/following{/other_user}","gists_url":"https://api.github.com/users/lishulong/gists{/gist_id}","starred_url":"https://api.github.com/users/lishulong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lishulong/subscriptions","organizations_url":"https://api.github.com/users/lishulong/orgs","repos_url":"https://api.github.com/users/lishulong/repos","events_url":"https://api.github.com/users/lishulong/events{/privacy}","received_events_url":"https://api.github.com/users/lishulong/received_events","type":"User","site_admin":false},"body":"sharetable 的 C 接口","created_at":"2018-04-13T03:27:36Z","updated_at":"2018-04-27T03:36:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"82b4c264f94ee5cf68d7f2a22675041950f71c60","assignee":null,"assignees":[],"requested_reviewers":[{"login":"pengsven","id":6927668,"avatar_url":"https://avatars3.githubusercontent.com/u/6927668?v=4","gravatar_id":"","url":"https://api.github.com/users/pengsven","html_url":"https://github.com/pengsven","followers_url":"https://api.github.com/users/pengsven/followers","following_url":"https://api.github.com/users/pengsven/following{/other_user}","gists_url":"https://api.github.com/users/pengsven/gists{/gist_id}","starred_url":"https://api.github.com/users/pengsven/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pengsven/subscriptions","organizations_url":"https://api.github.com/users/pengsven/orgs","repos_url":"https://api.github.com/users/pengsven/repos","events_url":"https://api.github.com/users/pengsven/events{/privacy}","received_events_url":"https://api.github.com/users/pengsven/received_events","type":"User","site_admin":false},{"login":"liubaohai","id":26271283,"avatar_url":"https://avatars2.githubusercontent.com/u/26271283?v=4","gravatar_id":"","url":"https://api.github.com/users/liubaohai","html_url":"https://github.com/liubaohai","followers_url":"https://api.github.com/users/liubaohai/followers","following_url":"https://api.github.com/users/liubaohai/following{/other_user}","gists_url":"https://api.github.com/users/liubaohai/gists{/gist_id}","starred_url":"https://api.github.com/users/liubaohai/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liubaohai/subscriptions","organizations_url":"https://api.github.com/users/liubaohai/orgs","repos_url":"https://api.github.com/users/liubaohai/repos","events_url":"https://api.github.com/users/liubaohai/events{/privacy}","received_events_url":"https://api.github.com/users/liubaohai/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91/commits","review_comments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91/comments","review_comment_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/comments{/number}","comments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/91/comments","statuses_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/statuses/fa36b26a76559914f9fef3efe7f4465d4888348e","head":{"label":"bsc-s2:lsl-lua-sharetable-c-interface","ref":"lsl-lua-sharetable-c-interface","sha":"fa36b26a76559914f9fef3efe7f4465d4888348e","user":{"login":"bsc-s2","id":36946445,"avatar_url":"https://avatars3.githubusercontent.com/u/36946445?v=4","gravatar_id":"","url":"https://api.github.com/users/bsc-s2","html_url":"https://github.com/bsc-s2","followers_url":"https://api.github.com/users/bsc-s2/followers","following_url":"https://api.github.com/users/bsc-s2/following{/other_user}","gists_url":"https://api.github.com/users/bsc-s2/gists{/gist_id}","starred_url":"https://api.github.com/users/bsc-s2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsc-s2/subscriptions","organizations_url":"https://api.github.com/users/bsc-s2/orgs","repos_url":"https://api.github.com/users/bsc-s2/repos","events_url":"https://api.github.com/users/bsc-s2/events{/privacy}","received_events_url":"https://api.github.com/users/bsc-s2/received_events","type":"Organization","site_admin":false},"repo":{"id":98276035,"name":"lua-sharedtable","full_name":"bsc-s2/lua-sharedtable","owner":{"login":"bsc-s2","id":36946445,"avatar_url":"https://avatars3.githubusercontent.com/u/36946445?v=4","gravatar_id":"","url":"https://api.github.com/users/bsc-s2","html_url":"https://github.com/bsc-s2","followers_url":"https://api.github.com/users/bsc-s2/followers","following_url":"https://api.github.com/users/bsc-s2/following{/other_user}","gists_url":"https://api.github.com/users/bsc-s2/gists{/gist_id}","starred_url":"https://api.github.com/users/bsc-s2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsc-s2/subscriptions","organizations_url":"https://api.github.com/users/bsc-s2/orgs","repos_url":"https://api.github.com/users/bsc-s2/repos","events_url":"https://api.github.com/users/bsc-s2/events{/privacy}","received_events_url":"https://api.github.com/users/bsc-s2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/bsc-s2/lua-sharedtable","description":null,"fork":false,"url":"https://api.github.com/repos/bsc-s2/lua-sharedtable","forks_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/forks","keys_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/teams","hooks_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/hooks","issue_events_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/events{/number}","events_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/events","assignees_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/assignees{/user}","branches_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/branches{/branch}","tags_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/tags","blobs_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/refs{/sha}","trees_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/statuses/{sha}","languages_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/languages","stargazers_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/stargazers","contributors_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/contributors","subscribers_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/subscribers","subscription_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/subscription","commits_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/commits{/sha}","git_commits_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/commits{/sha}","comments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/comments{/number}","issue_comment_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/comments{/number}","contents_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/contents/{+path}","compare_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/merges","archive_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/downloads","issues_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues{/number}","pulls_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls{/number}","milestones_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/milestones{/number}","notifications_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/labels{/name}","releases_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/releases{/id}","deployments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/deployments","created_at":"2017-07-25T07:12:18Z","updated_at":"2018-04-25T07:49:44Z","pushed_at":"2018-04-25T07:57:53Z","git_url":"git://github.com/bsc-s2/lua-sharedtable.git","ssh_url":"git@github.com:bsc-s2/lua-sharedtable.git","clone_url":"https://github.com/bsc-s2/lua-sharedtable.git","svn_url":"https://github.com/bsc-s2/lua-sharedtable","homepage":null,"size":245,"stargazers_count":8,"watchers_count":8,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":9,"license":null,"forks":0,"open_issues":9,"watchers":8,"default_branch":"master"}},"base":{"label":"bsc-s2:master","ref":"master","sha":"22d3dd3eb11d783723f464bcc7d47e5de89d3bff","user":{"login":"bsc-s2","id":36946445,"avatar_url":"https://avatars3.githubusercontent.com/u/36946445?v=4","gravatar_id":"","url":"https://api.github.com/users/bsc-s2","html_url":"https://github.com/bsc-s2","followers_url":"https://api.github.com/users/bsc-s2/followers","following_url":"https://api.github.com/users/bsc-s2/following{/other_user}","gists_url":"https://api.github.com/users/bsc-s2/gists{/gist_id}","starred_url":"https://api.github.com/users/bsc-s2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsc-s2/subscriptions","organizations_url":"https://api.github.com/users/bsc-s2/orgs","repos_url":"https://api.github.com/users/bsc-s2/repos","events_url":"https://api.github.com/users/bsc-s2/events{/privacy}","received_events_url":"https://api.github.com/users/bsc-s2/received_events","type":"Organization","site_admin":false},"repo":{"id":98276035,"name":"lua-sharedtable","full_name":"bsc-s2/lua-sharedtable","owner":{"login":"bsc-s2","id":36946445,"avatar_url":"https://avatars3.githubusercontent.com/u/36946445?v=4","gravatar_id":"","url":"https://api.github.com/users/bsc-s2","html_url":"https://github.com/bsc-s2","followers_url":"https://api.github.com/users/bsc-s2/followers","following_url":"https://api.github.com/users/bsc-s2/following{/other_user}","gists_url":"https://api.github.com/users/bsc-s2/gists{/gist_id}","starred_url":"https://api.github.com/users/bsc-s2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bsc-s2/subscriptions","organizations_url":"https://api.github.com/users/bsc-s2/orgs","repos_url":"https://api.github.com/users/bsc-s2/repos","events_url":"https://api.github.com/users/bsc-s2/events{/privacy}","received_events_url":"https://api.github.com/users/bsc-s2/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/bsc-s2/lua-sharedtable","description":null,"fork":false,"url":"https://api.github.com/repos/bsc-s2/lua-sharedtable","forks_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/forks","keys_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/teams","hooks_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/hooks","issue_events_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/events{/number}","events_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/events","assignees_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/assignees{/user}","branches_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/branches{/branch}","tags_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/tags","blobs_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/refs{/sha}","trees_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/statuses/{sha}","languages_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/languages","stargazers_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/stargazers","contributors_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/contributors","subscribers_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/subscribers","subscription_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/subscription","commits_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/commits{/sha}","git_commits_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/git/commits{/sha}","comments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/comments{/number}","issue_comment_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/comments{/number}","contents_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/contents/{+path}","compare_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/merges","archive_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/downloads","issues_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues{/number}","pulls_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls{/number}","milestones_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/milestones{/number}","notifications_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/labels{/name}","releases_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/releases{/id}","deployments_url":"https://api.github.com/repos/bsc-s2/lua-sharedtable/deployments","created_at":"2017-07-25T07:12:18Z","updated_at":"2018-04-25T07:49:44Z","pushed_at":"2018-04-25T07:57:53Z","git_url":"git://github.com/bsc-s2/lua-sharedtable.git","ssh_url":"git@github.com:bsc-s2/lua-sharedtable.git","clone_url":"https://github.com/bsc-s2/lua-sharedtable.git","svn_url":"https://github.com/bsc-s2/lua-sharedtable","homepage":null,"size":245,"stargazers_count":8,"watchers_count":8,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":9,"license":null,"forks":0,"open_issues":9,"watchers":8,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91"},"html":{"href":"https://github.com/bsc-s2/lua-sharedtable/pull/91"},"issue":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/91"},"comments":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/issues/91/comments"},"review_comments":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91/comments"},"review_comment":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/pulls/91/commits"},"statuses":{"href":"https://api.github.com/repos/bsc-s2/lua-sharedtable/statuses/fa36b26a76559914f9fef3efe7f4465d4888348e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"lishulong"}}