{"action":"created","comment":{"url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/comments/169682802","pull_request_review_id":98248528,"id":169682802,"diff_hunk":"@@ -0,0 +1,358 @@\n+################################################################################\n+SHORT DESCRIPTION:\n+################################################################################\n+Libxl patch to support blktap3\n+\n+################################################################################\n+LONG DESCRIPTION:\n+################################################################################\n+Modified libxl so as to be compatible with blktap3 for creation, operation and \n+destruction of tapdisk.\n+\n+################################################################################\n+CHANGELOG\n+################################################################################\n+Initial work from Thanos Makatos\n+https://github.com/qiaohaiming/blktap3/blob/master/libxl.diff\n+\n+Contributions by:\n+Mahantesh Salimath <salimathm@ainfosec.com>\n+\n+################################################################################\n+UPSTREAM PLAN\n+################################################################################\n+Could be upstreamed\n+\n+################################################################################\n+PATCHES\n+################################################################################\n+Index: xen-4.9.1/tools/libxl/libxl_blktap3.c\n+===================================================================\n+--- /dev/null\n++++ xen-4.9.1/tools/libxl/libxl_blktap3.c\n+@@ -0,0 +1,140 @@\n++/*\n++ * Copyright (C) 2012      Advanced Micro Devices\n++ * Author Christoph Egger <Christoph.Egger@amd.com>\n++ *\n++ * This program is free software; you can redistribute it and/or modify\n++ * it under the terms of the GNU Lesser General Public License as published\n++ * by the Free Software Foundation; version 2.1 only.\n++ *\n++ * This program is distributed in the hope that it will be useful,\n++ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n++ * GNU Lesser General Public License for more details.\n++ */\n++\n++#include \"libxl_osdeps.h\" /* must come before any other headers */\n++#include \"libxl_internal.h\"\n++\n++#include <tap-ctl.h>\n++\n++#include <list.h>   /* include for list_head structure */\n++\n++static int blktap_find(const char *type, const char *path, struct tap_list *tap)\n++{\n++    struct list_head list; /* Note: structure name updated */\n++    struct tap_list *entry, *next_t;\n++    int ret = -ENOENT, err;\n++\n++    /* TAILQ_INIT(&list);--> old function */\n++    INIT_LIST_HEAD(&list);\n++\n++    err = tap_ctl_list(&list);\n++    if (err)\n++        return err;\n++\n++    /* TAILQ_EMPTY(&list)--> old function */\n++    if (list_empty(&list))\n++        return ret;\n++\n++    tap_list_for_each_entry_safe(entry, next_t, &list) {\n++\n++        if (type && (!entry->type || strcmp(entry->type, type)))\n++            continue;\n++\n++        if (path && (!entry->path || strcmp(entry->path, path)))\n++            continue;\n++\n++        *tap = *entry;\n++\ttap->type = tap->path = NULL;\n++        ret = 0;\n++        break;\n++    }\n++\n++    tap_ctl_list_free(&list);\n++\n++    return ret;\n++}\n++\n++/**\n++ * blktap3 doesn't require blkback, so it's always available.\n++ */\n++int libxl__blktap_enabled(libxl__gc *gc)\n++{\n++    return 1;\n++}\n++\n++char *libxl__blktap_devpath(libxl__gc *gc, const char *disk,\n++\t\tlibxl_disk_format format)\n++{\n++    const char *type = NULL;\n++    char *params, *devname = NULL;\n++    struct tap_list tap;\n++    int err = 0;\n++    int flags = 0;\n++\n++    type = libxl__device_disk_string_of_format(format);\n++\n++    err = blktap_find(type, disk, &tap);\n++    if (!err) {\n++        LOG(DEBUG, \"found tapdisk\\n\");\n++\tdevname = libxl__sprintf(gc, \"/dev/xen/blktap-2/tapdev%d\", tap.minor);\n++        if (devname)\n++            return devname;\n++    }\n++\n++    LOG(DEBUG, \"tapdisk not found\\n\");\n++\n++\t/* TODO Should we worry about return codes other than ENOENT? */\n++\n++    params = libxl__sprintf(gc, \"%s:%s\", type, disk);\n++\n++    err = tap_ctl_create(params, &devname, flags, -1, 0, 0);\n++    if (!err) {\n++        LOG(DEBUG, \"created tapdisk\\n\");\n++        return devname;\n++    }\n++\n++    LOG(ERROR, \"error creating tapdisk: %s\\n\", strerror(err));\n++\n++    return NULL;\n++}\n++\n++int libxl__device_destroy_tapdisk(libxl__gc *gc, const char *params)\n++{\n++    char *type, *disk;\n++    int err;\n++    struct tap_list tap;\n++\n++    type = libxl__strdup(gc, params);\n++    disk = strchr(type, ':');\n++    if (!disk) {\n++        LOG(ERROR, \"Unable to parse params %s\", params);\n++        return ERROR_INVAL;\n++    }\n++\n++    *disk++ = '\\0';\n++\n++    err = blktap_find(type, disk, &tap);\n++    if (err < 0) {\n++        /* returns -errno */\n++        LOGEV(ERROR, -err, \"Unable to find type %s disk %s\", type, disk);\n++        return ERROR_FAIL;\n++    }\n++\n++    err = tap_ctl_destroy(tap.pid, tap.minor, 0, NULL);\n++    if (err < 0) {\n++        LOGEV(ERROR, -err, \"Failed to destroy tap device id %d minor %d\",\n++              tap.pid, tap.minor);\n++        return ERROR_FAIL;\n++    }\n++\n++    return 0;\n++}\n++\n++/*\n++ * Local variables:\n++ * mode: C\n++ * c-basic-offset: 4\n++ * indent-tabs-mode: nil\n++ * End:\n++ */\n+Index: xen-4.9.1/tools/libxl/Makefile\n+===================================================================\n+--- xen-4.9.1.orig/tools/libxl/Makefile\n++++ xen-4.9.1/tools/libxl/Makefile\n+@@ -20,17 +20,17 @@ LIBUUID_LIBS += -luuid\n+ endif\n+ \n+ LIBXL_LIBS =\n+-LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(LDLIBS_libblktapctl) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS)\n++LIBXL_LIBS = $(LDLIBS_libxentoollog) $(LDLIBS_libxenevtchn) $(LDLIBS_libxenctrl) $(LDLIBS_libxenguest) $(LDLIBS_libxenstore) $(PTYFUNCS_LIBS) $(LIBUUID_LIBS)\n+ ifeq ($(CONFIG_LIBNL),y)\n+ LIBXL_LIBS += $(LIBNL3_LIBS)\n+ endif\n+ \n++CFLAGS_LIBXL += -I/usr/include/blktap\n+ CFLAGS_LIBXL += $(CFLAGS_libxentoollog)\n+ CFLAGS_LIBXL += $(CFLAGS_libxenevtchn)\n+ CFLAGS_LIBXL += $(CFLAGS_libxenctrl)\n+ CFLAGS_LIBXL += $(CFLAGS_libxenguest)\n+ CFLAGS_LIBXL += $(CFLAGS_libxenstore)\n+-CFLAGS_LIBXL += $(CFLAGS_libblktapctl) \n+ ifeq ($(CONFIG_LIBNL),y)\n+ CFLAGS_LIBXL += $(LIBNL3_CFLAGS)\n+ endif\n+@@ -47,9 +47,9 @@ LIBXLU_LIBS = $(LDLIBS_libxenlight)\n+ \n+ LIBXL_OBJS-y = osdeps.o libxl_paths.o libxl_bootloader.o flexarray.o\n+ ifeq ($(LIBXL_BLKTAP),y)\n+-LIBXL_OBJS-y += libxl_blktap2.o\n++LIBXL_OBJS-y += libxl_blktap3.o\n+ else\n+-LIBXL_OBJS-y += libxl_noblktap2.o\n++LIBXL_OBJS-y += libxl_noblktap3.o\n+ endif\n+ \n+ ifeq ($(CONFIG_LIBNL),y)\n+Index: xen-4.9.1/tools/libxl/libxl_types_internal.idl\n+===================================================================\n+--- xen-4.9.1.orig/tools/libxl/libxl_types_internal.idl\n++++ xen-4.9.1/tools/libxl/libxl_types_internal.idl\n+@@ -27,6 +27,7 @@ libxl__device_kind = Enumeration(\"device\n+     (10, \"QUSB\"),\n+     (11, \"9PFS\"),\n+     (12, \"VWIF\"),\n++    (13, \"VBD3\"),\n+     ])\n+ \n+ libxl__console_backend = Enumeration(\"console_backend\", [\n+Index: xen-4.9.1/tools/libxl/libxl_device.c\n+===================================================================\n+--- xen-4.9.1.orig/tools/libxl/libxl_device.c\n++++ xen-4.9.1/tools/libxl/libxl_device.c\n+@@ -297,11 +297,6 @@ static int disk_try_backend(disk_try_bac\n+ \n+         /* Note: keep going if the disk is a cdrom. tapdisk can handle them as \"raw\" */\n+ \n+-        if (!libxl__blktap_enabled(a->gc)) {\n+-            LOG(DEBUG, \"Disk vdev=%s, backend tap unsuitable because blktap \"\n+-                       \"not available\", a->disk->vdev);\n+-            return 0;\n+-        }","path":"recipes-extended/xen/files/libxl-blktap3-support.patch","position":234,"original_position":234,"commit_id":"9bb0d5b535a5288ac252035936c73235b94a680e","original_commit_id":"9bb0d5b535a5288ac252035936c73235b94a680e","user":{"login":"mahantesh-ais","id":30120595,"avatar_url":"https://avatars3.githubusercontent.com/u/30120595?v=4","gravatar_id":"","url":"https://api.github.com/users/mahantesh-ais","html_url":"https://github.com/mahantesh-ais","followers_url":"https://api.github.com/users/mahantesh-ais/followers","following_url":"https://api.github.com/users/mahantesh-ais/following{/other_user}","gists_url":"https://api.github.com/users/mahantesh-ais/gists{/gist_id}","starred_url":"https://api.github.com/users/mahantesh-ais/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mahantesh-ais/subscriptions","organizations_url":"https://api.github.com/users/mahantesh-ais/orgs","repos_url":"https://api.github.com/users/mahantesh-ais/repos","events_url":"https://api.github.com/users/mahantesh-ais/events{/privacy}","received_events_url":"https://api.github.com/users/mahantesh-ais/received_events","type":"User","site_admin":false},"body":"This check is not required now as `libxl__blktap_enabled` always returns '1', because in blktap3 blkfront directly contacts tapdisk (unlike blktap2 where the path is blkfront --> blkback -->blktap2-kernel-module --> tapdisk). In blktap2 this check made sense as blktap2-kernel-module was involved in the path. However, this check is required by tapdisk/tap-ctl processes as blktap2-kernel-module is still used here and `tap_ctl_check_blktap` is being done in this place as required.\r\n\r\nP.S: This is in accordance with the base patch for blktap3, given here : https://github.com/qiaohaiming/blktap3/blob/master/libxl.diff","created_at":"2018-02-21T15:52:54Z","updated_at":"2018-02-21T15:52:54Z","html_url":"https://github.com/OpenXT/xenclient-oe/pull/815#discussion_r169682802","pull_request_url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/comments/169682802"},"html":{"href":"https://github.com/OpenXT/xenclient-oe/pull/815#discussion_r169682802"},"pull_request":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815"}},"in_reply_to_id":169387479},"pull_request":{"url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815","id":158444887,"html_url":"https://github.com/OpenXT/xenclient-oe/pull/815","diff_url":"https://github.com/OpenXT/xenclient-oe/pull/815.diff","patch_url":"https://github.com/OpenXT/xenclient-oe/pull/815.patch","issue_url":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/815","number":815,"state":"open","locked":false,"title":"Add blktap3 support","user":{"login":"mahantesh-ais","id":30120595,"avatar_url":"https://avatars3.githubusercontent.com/u/30120595?v=4","gravatar_id":"","url":"https://api.github.com/users/mahantesh-ais","html_url":"https://github.com/mahantesh-ais","followers_url":"https://api.github.com/users/mahantesh-ais/followers","following_url":"https://api.github.com/users/mahantesh-ais/following{/other_user}","gists_url":"https://api.github.com/users/mahantesh-ais/gists{/gist_id}","starred_url":"https://api.github.com/users/mahantesh-ais/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mahantesh-ais/subscriptions","organizations_url":"https://api.github.com/users/mahantesh-ais/orgs","repos_url":"https://api.github.com/users/mahantesh-ais/repos","events_url":"https://api.github.com/users/mahantesh-ais/events{/privacy}","received_events_url":"https://api.github.com/users/mahantesh-ais/received_events","type":"User","site_admin":false},"body":"OXT-1221","created_at":"2017-12-14T19:38:58Z","updated_at":"2018-02-21T15:52:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9a022ae1f8aa31dc92c4a3c4ffe0c7474fb67e0d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815/commits","review_comments_url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815/comments","review_comment_url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/815/comments","statuses_url":"https://api.github.com/repos/OpenXT/xenclient-oe/statuses/9bb0d5b535a5288ac252035936c73235b94a680e","head":{"label":"mahantesh-ais:prv4","ref":"prv4","sha":"9bb0d5b535a5288ac252035936c73235b94a680e","user":{"login":"mahantesh-ais","id":30120595,"avatar_url":"https://avatars3.githubusercontent.com/u/30120595?v=4","gravatar_id":"","url":"https://api.github.com/users/mahantesh-ais","html_url":"https://github.com/mahantesh-ais","followers_url":"https://api.github.com/users/mahantesh-ais/followers","following_url":"https://api.github.com/users/mahantesh-ais/following{/other_user}","gists_url":"https://api.github.com/users/mahantesh-ais/gists{/gist_id}","starred_url":"https://api.github.com/users/mahantesh-ais/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mahantesh-ais/subscriptions","organizations_url":"https://api.github.com/users/mahantesh-ais/orgs","repos_url":"https://api.github.com/users/mahantesh-ais/repos","events_url":"https://api.github.com/users/mahantesh-ais/events{/privacy}","received_events_url":"https://api.github.com/users/mahantesh-ais/received_events","type":"User","site_admin":false},"repo":{"id":101925729,"name":"xenclient-oe","full_name":"mahantesh-ais/xenclient-oe","owner":{"login":"mahantesh-ais","id":30120595,"avatar_url":"https://avatars3.githubusercontent.com/u/30120595?v=4","gravatar_id":"","url":"https://api.github.com/users/mahantesh-ais","html_url":"https://github.com/mahantesh-ais","followers_url":"https://api.github.com/users/mahantesh-ais/followers","following_url":"https://api.github.com/users/mahantesh-ais/following{/other_user}","gists_url":"https://api.github.com/users/mahantesh-ais/gists{/gist_id}","starred_url":"https://api.github.com/users/mahantesh-ais/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mahantesh-ais/subscriptions","organizations_url":"https://api.github.com/users/mahantesh-ais/orgs","repos_url":"https://api.github.com/users/mahantesh-ais/repos","events_url":"https://api.github.com/users/mahantesh-ais/events{/privacy}","received_events_url":"https://api.github.com/users/mahantesh-ais/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mahantesh-ais/xenclient-oe","description":"blktap, vhd","fork":true,"url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe","forks_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/forks","keys_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/teams","hooks_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/hooks","issue_events_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/issues/events{/number}","events_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/events","assignees_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/assignees{/user}","branches_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/branches{/branch}","tags_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/tags","blobs_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/git/refs{/sha}","trees_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/statuses/{sha}","languages_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/languages","stargazers_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/stargazers","contributors_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/contributors","subscribers_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/subscribers","subscription_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/subscription","commits_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/commits{/sha}","git_commits_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/git/commits{/sha}","comments_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/comments{/number}","issue_comment_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/issues/comments{/number}","contents_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/contents/{+path}","compare_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/merges","archive_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/downloads","issues_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/issues{/number}","pulls_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/pulls{/number}","milestones_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/milestones{/number}","notifications_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/labels{/name}","releases_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/releases{/id}","deployments_url":"https://api.github.com/repos/mahantesh-ais/xenclient-oe/deployments","created_at":"2017-08-30T20:28:03Z","updated_at":"2017-09-08T20:07:39Z","pushed_at":"2018-02-15T23:48:23Z","git_url":"git://github.com/mahantesh-ais/xenclient-oe.git","ssh_url":"git@github.com:mahantesh-ais/xenclient-oe.git","clone_url":"https://github.com/mahantesh-ais/xenclient-oe.git","svn_url":"https://github.com/mahantesh-ais/xenclient-oe","homepage":"","size":11778,"stargazers_count":0,"watchers_count":0,"language":"Shell","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"OpenXT:master","ref":"master","sha":"6eea1799cbeafdc6d09c44ba5be73d3429bf6be4","user":{"login":"OpenXT","id":7283187,"avatar_url":"https://avatars3.githubusercontent.com/u/7283187?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenXT","html_url":"https://github.com/OpenXT","followers_url":"https://api.github.com/users/OpenXT/followers","following_url":"https://api.github.com/users/OpenXT/following{/other_user}","gists_url":"https://api.github.com/users/OpenXT/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenXT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenXT/subscriptions","organizations_url":"https://api.github.com/users/OpenXT/orgs","repos_url":"https://api.github.com/users/OpenXT/repos","events_url":"https://api.github.com/users/OpenXT/events{/privacy}","received_events_url":"https://api.github.com/users/OpenXT/received_events","type":"Organization","site_admin":false},"repo":{"id":20779371,"name":"xenclient-oe","full_name":"OpenXT/xenclient-oe","owner":{"login":"OpenXT","id":7283187,"avatar_url":"https://avatars3.githubusercontent.com/u/7283187?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenXT","html_url":"https://github.com/OpenXT","followers_url":"https://api.github.com/users/OpenXT/followers","following_url":"https://api.github.com/users/OpenXT/following{/other_user}","gists_url":"https://api.github.com/users/OpenXT/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenXT/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenXT/subscriptions","organizations_url":"https://api.github.com/users/OpenXT/orgs","repos_url":"https://api.github.com/users/OpenXT/repos","events_url":"https://api.github.com/users/OpenXT/events{/privacy}","received_events_url":"https://api.github.com/users/OpenXT/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenXT/xenclient-oe","description":null,"fork":false,"url":"https://api.github.com/repos/OpenXT/xenclient-oe","forks_url":"https://api.github.com/repos/OpenXT/xenclient-oe/forks","keys_url":"https://api.github.com/repos/OpenXT/xenclient-oe/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenXT/xenclient-oe/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenXT/xenclient-oe/teams","hooks_url":"https://api.github.com/repos/OpenXT/xenclient-oe/hooks","issue_events_url":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/events{/number}","events_url":"https://api.github.com/repos/OpenXT/xenclient-oe/events","assignees_url":"https://api.github.com/repos/OpenXT/xenclient-oe/assignees{/user}","branches_url":"https://api.github.com/repos/OpenXT/xenclient-oe/branches{/branch}","tags_url":"https://api.github.com/repos/OpenXT/xenclient-oe/tags","blobs_url":"https://api.github.com/repos/OpenXT/xenclient-oe/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenXT/xenclient-oe/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenXT/xenclient-oe/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenXT/xenclient-oe/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenXT/xenclient-oe/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenXT/xenclient-oe/languages","stargazers_url":"https://api.github.com/repos/OpenXT/xenclient-oe/stargazers","contributors_url":"https://api.github.com/repos/OpenXT/xenclient-oe/contributors","subscribers_url":"https://api.github.com/repos/OpenXT/xenclient-oe/subscribers","subscription_url":"https://api.github.com/repos/OpenXT/xenclient-oe/subscription","commits_url":"https://api.github.com/repos/OpenXT/xenclient-oe/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenXT/xenclient-oe/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenXT/xenclient-oe/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenXT/xenclient-oe/contents/{+path}","compare_url":"https://api.github.com/repos/OpenXT/xenclient-oe/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenXT/xenclient-oe/merges","archive_url":"https://api.github.com/repos/OpenXT/xenclient-oe/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenXT/xenclient-oe/downloads","issues_url":"https://api.github.com/repos/OpenXT/xenclient-oe/issues{/number}","pulls_url":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenXT/xenclient-oe/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenXT/xenclient-oe/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenXT/xenclient-oe/labels{/name}","releases_url":"https://api.github.com/repos/OpenXT/xenclient-oe/releases{/id}","deployments_url":"https://api.github.com/repos/OpenXT/xenclient-oe/deployments","created_at":"2014-06-12T19:00:56Z","updated_at":"2018-01-09T19:45:26Z","pushed_at":"2018-02-19T16:12:05Z","git_url":"git://github.com/OpenXT/xenclient-oe.git","ssh_url":"git@github.com:OpenXT/xenclient-oe.git","clone_url":"https://github.com/OpenXT/xenclient-oe.git","svn_url":"https://github.com/OpenXT/xenclient-oe","homepage":null,"size":11757,"stargazers_count":10,"watchers_count":10,"language":"Shell","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":37,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":37,"open_issues":4,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815"},"html":{"href":"https://github.com/OpenXT/xenclient-oe/pull/815"},"issue":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/815"},"comments":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/issues/815/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/pulls/815/commits"},"statuses":{"href":"https://api.github.com/repos/OpenXT/xenclient-oe/statuses/9bb0d5b535a5288ac252035936c73235b94a680e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"mahantesh-ais"}}