{"action":"created","comment":{"url":"https://api.github.com/repos/solettaproject/soletta/pulls/comments/36533987","id":36533987,"diff_hunk":"@@ -0,0 +1,709 @@\n+/*\n+ * This file is part of the Soletta Project\n+ *\n+ * Copyright (C) 2015 Intel Corporation. All rights reserved.\n+ *\n+ * Redistribution and use in source and binary forms, with or without\n+ * modification, are permitted provided that the following conditions\n+ * are met:\n+ *\n+ *   * Redistributions of source code must retain the above copyright\n+ *     notice, this list of conditions and the following disclaimer.\n+ *   * Redistributions in binary form must reproduce the above copyright\n+ *     notice, this list of conditions and the following disclaimer in\n+ *     the documentation and/or other materials provided with the\n+ *     distribution.\n+ *   * Neither the name of Intel Corporation nor the names of its\n+ *     contributors may be used to endorse or promote products derived\n+ *     from this software without specific prior written permission.\n+ *\n+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#include \"flower-power-gen.h\"\n+#include \"sol-flow-internal.h\"\n+\n+#include <sol-http-client.h>\n+#include <sol-json.h>\n+#include <sol-util.h>\n+\n+#include <errno.h>\n+#include <float.h>\n+\n+\n+struct packet_type_flower_power_packet_data {\n+    struct sol_drange fertilizer;\n+    struct sol_drange light;\n+    struct sol_drange temperature;\n+    struct sol_drange water;\n+    /* TODO: maybe convert it to int */\n+    char *timestamp;\n+    char *id;\n+};\n+\n+static void\n+packet_type_flower_power_packet_dispose(const struct sol_flow_packet_type *packet_type,\n+                        void *mem)\n+{\n+    struct packet_type_flower_power_packet_data *packet_type_flower_power = mem;\n+    free(packet_type_flower_power->id);\n+}\n+\n+static int\n+packet_type_flower_power_packet_init(const struct sol_flow_packet_type *packet_type,\n+                     void *mem, const void *input)\n+{\n+    const struct packet_type_flower_power_packet_data *in = input;\n+    struct packet_type_flower_power_packet_data *packet_type_flower_power = mem;\n+\n+    SOL_NULL_CHECK(in->id, -EINVAL);\n+    packet_type_flower_power->id = strdup(in->id);\n+    SOL_NULL_CHECK(packet_type_flower_power->id, -ENOMEM);\n+\n+    SOL_NULL_CHECK(in->timestamp, -EINVAL);\n+    packet_type_flower_power->timestamp = strdup(in->timestamp);\n+    SOL_NULL_CHECK(packet_type_flower_power->timestamp, -ENOMEM);\n+\n+    packet_type_flower_power->fertilizer = in->fertilizer;\n+    packet_type_flower_power->light = in->light;\n+    packet_type_flower_power->temperature = in->temperature;\n+    packet_type_flower_power->water = in->water;\n+\n+    return 0;\n+}\n+\n+#define PACKET_TYPE_FLOWER_POWER_PACKET_TYPE_API_VERSION (1)\n+\n+static const struct sol_flow_packet_type _PACKET_TYPE_FLOWER_POWER = {\n+    .api_version = PACKET_TYPE_FLOWER_POWER_PACKET_TYPE_API_VERSION,\n+    .name = \"PACKET_TYPE_FLOWER_POWER\",\n+    .data_size = sizeof(struct packet_type_flower_power_packet_data),\n+    .init = packet_type_flower_power_packet_init,\n+    .dispose = packet_type_flower_power_packet_dispose,\n+};\n+static const struct sol_flow_packet_type *PACKET_TYPE_FLOWER_POWER =\n+    &_PACKET_TYPE_FLOWER_POWER;\n+\n+#undef PACKET_TYPE_FLOWER_POWER_PACKET_TYPE_API_VERSION\n+\n+static struct sol_flow_packet *\n+packet_new_packet_type_flower_power(const char *id,\n+        const char *timestamp,\n+        struct sol_drange *fertilizer, struct sol_drange *light,\n+        struct sol_drange *temperature, struct sol_drange *water)\n+{\n+    struct packet_type_flower_power_packet_data packet_type_flower_power;\n+\n+    SOL_NULL_CHECK(id, NULL);\n+    SOL_NULL_CHECK(timestamp, NULL);\n+    SOL_NULL_CHECK(fertilizer, NULL);\n+    SOL_NULL_CHECK(light, NULL);\n+    SOL_NULL_CHECK(temperature, NULL);\n+    SOL_NULL_CHECK(water, NULL);\n+\n+    packet_type_flower_power.id = (char *)id;\n+    packet_type_flower_power.timestamp = (char *)timestamp;\n+    packet_type_flower_power.fertilizer = *fertilizer;\n+    packet_type_flower_power.light = *light;\n+    packet_type_flower_power.temperature = *temperature;\n+    packet_type_flower_power.water= *water;\n+\n+    return sol_flow_packet_new(PACKET_TYPE_FLOWER_POWER,\n+        &packet_type_flower_power);\n+}\n+\n+static int\n+packet_get_packet_type_flower_power(const struct sol_flow_packet *packet,\n+    char **id, char **timestamp,\n+    struct sol_drange *fertilizer, struct sol_drange *light,\n+    struct sol_drange *temperature, struct sol_drange *water)\n+\n+{\n+    struct packet_type_flower_power_packet_data packet_type_flower_power;\n+    int ret;\n+\n+    SOL_NULL_CHECK(packet, -EINVAL);\n+    if (sol_flow_packet_get_type(packet) != PACKET_TYPE_FLOWER_POWER)\n+        return -EINVAL;\n+\n+    ret = sol_flow_packet_get(packet, &packet_type_flower_power);\n+    SOL_INT_CHECK(ret, != 0, ret);\n+\n+    if (id)\n+        *id = packet_type_flower_power.id;\n+    if (timestamp)\n+        *timestamp = packet_type_flower_power.timestamp;\n+    if (fertilizer)\n+        *fertilizer = packet_type_flower_power.fertilizer;\n+    if (light)\n+        *light = packet_type_flower_power.light;\n+    if (temperature)\n+        *temperature = packet_type_flower_power.temperature;\n+    if (water)\n+        *water = packet_type_flower_power.water;\n+\n+    return ret;\n+}\n+\n+static int\n+send_packet_type_flower_power_packet(struct sol_flow_node *src,\n+    uint16_t src_port, char *id, char *timestamp,\n+    struct sol_drange *fertilizer, struct sol_drange *light,\n+    struct sol_drange *temperature, struct sol_drange *water)\n+{\n+    struct sol_flow_packet *packet;\n+    int ret;\n+\n+    packet = packet_new_packet_type_flower_power(id, timestamp,\n+        fertilizer, light, temperature, water);\n+    SOL_NULL_CHECK(packet, -ENOMEM);\n+\n+    ret = sol_flow_send_packet(src, src_port, packet);\n+    if (ret != 0)\n+        sol_flow_packet_del(packet);\n+\n+    return ret;\n+}\n+\n+struct http_get_data {\n+    struct sol_flow_node *node;\n+    char *client_id;\n+    char *client_secret;\n+    char *username;\n+    char *password;\n+    char *token;\n+};\n+\n+struct filter_data {\n+    char *id;\n+};\n+\n+static int\n+http_get_open(struct sol_flow_node *node, void *data, const struct sol_flow_node_options *options)\n+{\n+    struct http_get_data *mdata = data;\n+    const struct sol_flow_node_type_flower_power_http_get_options *opts;\n+\n+    SOL_FLOW_NODE_OPTIONS_SUB_API_CHECK(options,\n+        SOL_FLOW_NODE_TYPE_FLOWER_POWER_HTTP_GET_OPTIONS_API_VERSION,\n+        -EINVAL);\n+    opts = (const struct sol_flow_node_type_flower_power_http_get_options *)options;\n+\n+    if (!opts->client_id || !strlen(opts->client_id) ||\n+        !opts->client_secret || !strlen(opts->client_secret)) {\n+        SOL_ERR(\"Valid client id and secret are required.\");\n+        return -EINVAL;\n+    }\n+\n+    mdata->client_id = strdup(opts->client_id);\n+    SOL_NULL_CHECK(opts->client_id, -ENOMEM);\n+    mdata->client_secret = strdup(opts->client_secret);\n+    SOL_NULL_CHECK(opts->client_secret, -ENOMEM);\n+\n+    mdata->node = node;\n+\n+    return 0;\n+}\n+\n+static void\n+http_get_close(struct sol_flow_node *node, void *data)\n+{\n+    struct http_get_data *mdata = data;\n+\n+    free(mdata->client_id);\n+    /* Zero memory used to store client secret and password */\n+    if (mdata->client_secret) {\n+        memset(mdata->client_secret, 0, strlen(mdata->client_secret) + 1);","path":"src/modules/flow/flower-power/flower-power.c","position":226,"original_position":226,"commit_id":"9ac7572f70de35c1e10c158e042de3387dfb0cbb","original_commit_id":"9ac7572f70de35c1e10c158e042de3387dfb0cbb","user":{"login":"lpereira","id":15001,"avatar_url":"https://avatars.githubusercontent.com/u/15001?v=3","gravatar_id":"","url":"https://api.github.com/users/lpereira","html_url":"https://github.com/lpereira","followers_url":"https://api.github.com/users/lpereira/followers","following_url":"https://api.github.com/users/lpereira/following{/other_user}","gists_url":"https://api.github.com/users/lpereira/gists{/gist_id}","starred_url":"https://api.github.com/users/lpereira/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lpereira/subscriptions","organizations_url":"https://api.github.com/users/lpereira/orgs","repos_url":"https://api.github.com/users/lpereira/repos","events_url":"https://api.github.com/users/lpereira/events{/privacy}","received_events_url":"https://api.github.com/users/lpereira/received_events","type":"User","site_admin":false},"body":"Not sure if this `memset()` will be called in high optimization levels, given that `free()` is called below. Maybe you need `explicit_bzero()`?\r\n\r\n(Regardless, there's no need to zero out the terminating NUL.)","created_at":"2015-08-07T16:10:11Z","updated_at":"2015-08-07T16:10:11Z","html_url":"https://github.com/solettaproject/soletta/pull/466#discussion_r36533987","pull_request_url":"https://api.github.com/repos/solettaproject/soletta/pulls/466","_links":{"self":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/comments/36533987"},"html":{"href":"https://github.com/solettaproject/soletta/pull/466#discussion_r36533987"},"pull_request":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/466"}}},"pull_request":{"url":"https://api.github.com/repos/solettaproject/soletta/pulls/466","id":41901882,"html_url":"https://github.com/solettaproject/soletta/pull/466","diff_url":"https://github.com/solettaproject/soletta/pull/466.diff","patch_url":"https://github.com/solettaproject/soletta/pull/466.patch","issue_url":"https://api.github.com/repos/solettaproject/soletta/issues/466","number":466,"state":"open","locked":false,"title":"modules/flower-power: Add module with 3 node types","user":{"login":"bdilly","id":22437,"avatar_url":"https://avatars.githubusercontent.com/u/22437?v=3","gravatar_id":"","url":"https://api.github.com/users/bdilly","html_url":"https://github.com/bdilly","followers_url":"https://api.github.com/users/bdilly/followers","following_url":"https://api.github.com/users/bdilly/following{/other_user}","gists_url":"https://api.github.com/users/bdilly/gists{/gist_id}","starred_url":"https://api.github.com/users/bdilly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdilly/subscriptions","organizations_url":"https://api.github.com/users/bdilly/orgs","repos_url":"https://api.github.com/users/bdilly/repos","events_url":"https://api.github.com/users/bdilly/events{/privacy}","received_events_url":"https://api.github.com/users/bdilly/received_events","type":"User","site_admin":false},"body":"Parrot Flower Power is a wireless plant monitor that measures\nand analyses the four elements crucial to plant's health:\nsunlight, temperature, soil moisture and fertilizer.\n\nInitial version provides node types to fetch data via\nHTTP, to filter packets per id, and to get measures\nvalues from packets.\n\nDetails can be obtained from its website,\n<http://developer.parrot.com/flowerpower.html/>\n\n@lpereira could you please take a look on this commit?\n\nSigned-off-by: Bruno Dilly <bruno.dilly@intel.com>","created_at":"2015-08-07T15:12:11Z","updated_at":"2015-08-07T16:10:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ec4a6061f2f102354b4de05529db0a8a42acad97","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/solettaproject/soletta/pulls/466/commits","review_comments_url":"https://api.github.com/repos/solettaproject/soletta/pulls/466/comments","review_comment_url":"https://api.github.com/repos/solettaproject/soletta/pulls/comments{/number}","comments_url":"https://api.github.com/repos/solettaproject/soletta/issues/466/comments","statuses_url":"https://api.github.com/repos/solettaproject/soletta/statuses/9ac7572f70de35c1e10c158e042de3387dfb0cbb","head":{"label":"bdilly:flower_power","ref":"flower_power","sha":"9ac7572f70de35c1e10c158e042de3387dfb0cbb","user":{"login":"bdilly","id":22437,"avatar_url":"https://avatars.githubusercontent.com/u/22437?v=3","gravatar_id":"","url":"https://api.github.com/users/bdilly","html_url":"https://github.com/bdilly","followers_url":"https://api.github.com/users/bdilly/followers","following_url":"https://api.github.com/users/bdilly/following{/other_user}","gists_url":"https://api.github.com/users/bdilly/gists{/gist_id}","starred_url":"https://api.github.com/users/bdilly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdilly/subscriptions","organizations_url":"https://api.github.com/users/bdilly/orgs","repos_url":"https://api.github.com/users/bdilly/repos","events_url":"https://api.github.com/users/bdilly/events{/privacy}","received_events_url":"https://api.github.com/users/bdilly/received_events","type":"User","site_admin":false},"repo":{"id":37600910,"name":"soletta","full_name":"bdilly/soletta","owner":{"login":"bdilly","id":22437,"avatar_url":"https://avatars.githubusercontent.com/u/22437?v=3","gravatar_id":"","url":"https://api.github.com/users/bdilly","html_url":"https://github.com/bdilly","followers_url":"https://api.github.com/users/bdilly/followers","following_url":"https://api.github.com/users/bdilly/following{/other_user}","gists_url":"https://api.github.com/users/bdilly/gists{/gist_id}","starred_url":"https://api.github.com/users/bdilly/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bdilly/subscriptions","organizations_url":"https://api.github.com/users/bdilly/orgs","repos_url":"https://api.github.com/users/bdilly/repos","events_url":"https://api.github.com/users/bdilly/events{/privacy}","received_events_url":"https://api.github.com/users/bdilly/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bdilly/soletta","description":"Soletta Project is a framework for making IoT devices.","fork":true,"url":"https://api.github.com/repos/bdilly/soletta","forks_url":"https://api.github.com/repos/bdilly/soletta/forks","keys_url":"https://api.github.com/repos/bdilly/soletta/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bdilly/soletta/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bdilly/soletta/teams","hooks_url":"https://api.github.com/repos/bdilly/soletta/hooks","issue_events_url":"https://api.github.com/repos/bdilly/soletta/issues/events{/number}","events_url":"https://api.github.com/repos/bdilly/soletta/events","assignees_url":"https://api.github.com/repos/bdilly/soletta/assignees{/user}","branches_url":"https://api.github.com/repos/bdilly/soletta/branches{/branch}","tags_url":"https://api.github.com/repos/bdilly/soletta/tags","blobs_url":"https://api.github.com/repos/bdilly/soletta/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bdilly/soletta/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bdilly/soletta/git/refs{/sha}","trees_url":"https://api.github.com/repos/bdilly/soletta/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bdilly/soletta/statuses/{sha}","languages_url":"https://api.github.com/repos/bdilly/soletta/languages","stargazers_url":"https://api.github.com/repos/bdilly/soletta/stargazers","contributors_url":"https://api.github.com/repos/bdilly/soletta/contributors","subscribers_url":"https://api.github.com/repos/bdilly/soletta/subscribers","subscription_url":"https://api.github.com/repos/bdilly/soletta/subscription","commits_url":"https://api.github.com/repos/bdilly/soletta/commits{/sha}","git_commits_url":"https://api.github.com/repos/bdilly/soletta/git/commits{/sha}","comments_url":"https://api.github.com/repos/bdilly/soletta/comments{/number}","issue_comment_url":"https://api.github.com/repos/bdilly/soletta/issues/comments{/number}","contents_url":"https://api.github.com/repos/bdilly/soletta/contents/{+path}","compare_url":"https://api.github.com/repos/bdilly/soletta/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bdilly/soletta/merges","archive_url":"https://api.github.com/repos/bdilly/soletta/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bdilly/soletta/downloads","issues_url":"https://api.github.com/repos/bdilly/soletta/issues{/number}","pulls_url":"https://api.github.com/repos/bdilly/soletta/pulls{/number}","milestones_url":"https://api.github.com/repos/bdilly/soletta/milestones{/number}","notifications_url":"https://api.github.com/repos/bdilly/soletta/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bdilly/soletta/labels{/name}","releases_url":"https://api.github.com/repos/bdilly/soletta/releases{/id}","created_at":"2015-06-17T14:45:11Z","updated_at":"2015-06-17T14:45:13Z","pushed_at":"2015-08-07T15:12:09Z","git_url":"git://github.com/bdilly/soletta.git","ssh_url":"git@github.com:bdilly/soletta.git","clone_url":"https://github.com/bdilly/soletta.git","svn_url":"https://github.com/bdilly/soletta","homepage":"","size":2128,"stargazers_count":0,"watchers_count":0,"language":"C","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":"solettaproject:master","ref":"master","sha":"cf4596269c5237534f1e55b1c86eb8d408883cb2","user":{"login":"solettaproject","id":12736897,"avatar_url":"https://avatars.githubusercontent.com/u/12736897?v=3","gravatar_id":"","url":"https://api.github.com/users/solettaproject","html_url":"https://github.com/solettaproject","followers_url":"https://api.github.com/users/solettaproject/followers","following_url":"https://api.github.com/users/solettaproject/following{/other_user}","gists_url":"https://api.github.com/users/solettaproject/gists{/gist_id}","starred_url":"https://api.github.com/users/solettaproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/solettaproject/subscriptions","organizations_url":"https://api.github.com/users/solettaproject/orgs","repos_url":"https://api.github.com/users/solettaproject/repos","events_url":"https://api.github.com/users/solettaproject/events{/privacy}","received_events_url":"https://api.github.com/users/solettaproject/received_events","type":"Organization","site_admin":false},"repo":{"id":37087063,"name":"soletta","full_name":"solettaproject/soletta","owner":{"login":"solettaproject","id":12736897,"avatar_url":"https://avatars.githubusercontent.com/u/12736897?v=3","gravatar_id":"","url":"https://api.github.com/users/solettaproject","html_url":"https://github.com/solettaproject","followers_url":"https://api.github.com/users/solettaproject/followers","following_url":"https://api.github.com/users/solettaproject/following{/other_user}","gists_url":"https://api.github.com/users/solettaproject/gists{/gist_id}","starred_url":"https://api.github.com/users/solettaproject/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/solettaproject/subscriptions","organizations_url":"https://api.github.com/users/solettaproject/orgs","repos_url":"https://api.github.com/users/solettaproject/repos","events_url":"https://api.github.com/users/solettaproject/events{/privacy}","received_events_url":"https://api.github.com/users/solettaproject/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/solettaproject/soletta","description":"Soletta Project is a framework for making IoT devices.  With Soletta Project's libraries developers can easily write software for devices that control actuators/sensors and communicate using standard technologies. It enables adding smartness even on the smallest edge devices.  ","fork":false,"url":"https://api.github.com/repos/solettaproject/soletta","forks_url":"https://api.github.com/repos/solettaproject/soletta/forks","keys_url":"https://api.github.com/repos/solettaproject/soletta/keys{/key_id}","collaborators_url":"https://api.github.com/repos/solettaproject/soletta/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/solettaproject/soletta/teams","hooks_url":"https://api.github.com/repos/solettaproject/soletta/hooks","issue_events_url":"https://api.github.com/repos/solettaproject/soletta/issues/events{/number}","events_url":"https://api.github.com/repos/solettaproject/soletta/events","assignees_url":"https://api.github.com/repos/solettaproject/soletta/assignees{/user}","branches_url":"https://api.github.com/repos/solettaproject/soletta/branches{/branch}","tags_url":"https://api.github.com/repos/solettaproject/soletta/tags","blobs_url":"https://api.github.com/repos/solettaproject/soletta/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/solettaproject/soletta/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/solettaproject/soletta/git/refs{/sha}","trees_url":"https://api.github.com/repos/solettaproject/soletta/git/trees{/sha}","statuses_url":"https://api.github.com/repos/solettaproject/soletta/statuses/{sha}","languages_url":"https://api.github.com/repos/solettaproject/soletta/languages","stargazers_url":"https://api.github.com/repos/solettaproject/soletta/stargazers","contributors_url":"https://api.github.com/repos/solettaproject/soletta/contributors","subscribers_url":"https://api.github.com/repos/solettaproject/soletta/subscribers","subscription_url":"https://api.github.com/repos/solettaproject/soletta/subscription","commits_url":"https://api.github.com/repos/solettaproject/soletta/commits{/sha}","git_commits_url":"https://api.github.com/repos/solettaproject/soletta/git/commits{/sha}","comments_url":"https://api.github.com/repos/solettaproject/soletta/comments{/number}","issue_comment_url":"https://api.github.com/repos/solettaproject/soletta/issues/comments{/number}","contents_url":"https://api.github.com/repos/solettaproject/soletta/contents/{+path}","compare_url":"https://api.github.com/repos/solettaproject/soletta/compare/{base}...{head}","merges_url":"https://api.github.com/repos/solettaproject/soletta/merges","archive_url":"https://api.github.com/repos/solettaproject/soletta/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/solettaproject/soletta/downloads","issues_url":"https://api.github.com/repos/solettaproject/soletta/issues{/number}","pulls_url":"https://api.github.com/repos/solettaproject/soletta/pulls{/number}","milestones_url":"https://api.github.com/repos/solettaproject/soletta/milestones{/number}","notifications_url":"https://api.github.com/repos/solettaproject/soletta/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/solettaproject/soletta/labels{/name}","releases_url":"https://api.github.com/repos/solettaproject/soletta/releases{/id}","created_at":"2015-06-08T19:13:18Z","updated_at":"2015-07-12T18:54:34Z","pushed_at":"2015-08-07T15:12:12Z","git_url":"git://github.com/solettaproject/soletta.git","ssh_url":"git@github.com:solettaproject/soletta.git","clone_url":"https://github.com/solettaproject/soletta.git","svn_url":"https://github.com/solettaproject/soletta","homepage":"","size":5873,"stargazers_count":39,"watchers_count":39,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":31,"mirror_url":null,"open_issues_count":26,"forks":31,"open_issues":26,"watchers":39,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/466"},"html":{"href":"https://github.com/solettaproject/soletta/pull/466"},"issue":{"href":"https://api.github.com/repos/solettaproject/soletta/issues/466"},"comments":{"href":"https://api.github.com/repos/solettaproject/soletta/issues/466/comments"},"review_comments":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/466/comments"},"review_comment":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/solettaproject/soletta/pulls/466/commits"},"statuses":{"href":"https://api.github.com/repos/solettaproject/soletta/statuses/9ac7572f70de35c1e10c158e042de3387dfb0cbb"}}}}