{"action":"created","comment":{"url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/comments/28128386","id":28128386,"diff_hunk":"@@ -1973,6 +2051,270 @@ static oval_syschar_collection_flag_t _oval_component_evaluate_ESCAPE_REGEX(oval\n \treturn flag;\n }\n \n+#define INITIAL_CAPACITY 64\n+\n+typedef enum {\n+\tSTART,\n+\tNORMAL,\n+\tLEFT_BRACKET,\n+\tCLASS,\n+\tESCAPE,\n+\tSLASH\n+} states;\n+\n+typedef struct string {\n+\tchar *str;\n+\tunsigned int length;\n+\tunsigned int capacity;\n+} t_string;\n+\n+static t_string *_string_new() {\n+\tt_string *s;\n+\ts = malloc(sizeof(t_string));\n+\tif (s == NULL)\n+\t\treturn NULL;\n+\ts->str = malloc(INITIAL_CAPACITY);\n+\tif (s->str == NULL) {\n+\t\tfree(s);\n+\t\treturn NULL;\n+\t}\n+\ts->str[0] = '\\0';\n+\ts->length = 0;\n+\ts->capacity = INITIAL_CAPACITY;\n+\treturn s;\n+}\n+\n+static void _string_append_char(t_string *s, char c)\n+{\n+\tif (s->length + 1 >= s->capacity) {\n+\t\tif(realloc(s->str, s->capacity + INITIAL_CAPACITY) == NULL)\n+\t\t\treturn;\n+\t\ts->capacity += INITIAL_CAPACITY;\n+\t}\n+\ts->str[s->length++] = c;\n+\ts->str[s->length] = '\\0';\n+}\n+\n+static void _string_append_string(t_string *s, const char *t)\n+{\n+\tint append_length = strlen(t);\n+\tif (s->length + append_length >= s->capacity)  {\n+\t\tif(realloc(s->str, s->capacity + append_length) == NULL)\n+\t\t\treturn;\n+\t\ts->capacity += append_length;\n+\t}\n+\tfor (int i = 0; t[i] != '\\0'; i++) {\n+\t\ts->str[s->length++] = t[i];\n+\t}\n+\ts->str[s->length] = '\\0';\n+}\n+\n+static char *_glob_to_regex (const char *glob, int noescape)\n+{\n+\tt_string *regex;\n+\tchar * result;\n+\tchar c;\n+\tint i = 0;\n+\tint state = START;\n+\tregex = _string_new();\n+\tif (regex == NULL) {\n+\t\treturn NULL;\n+\t}\n+\t_string_append_char(regex, '^'); // regex must match whole string\n+\twhile(1) {\n+\t\tc = glob[i++];\n+\t\tswitch (state) {\n+\t\tcase START:\n+\t\t\tif (c == '\\0') {\n+\t\t\t\tgoto finish;\n+\t\t\t} else if (c== '/') {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = SLASH;\n+\t\t\t} else if (c == '?') {\n+\t\t\t\t// a ? matches any single character, but\n+\t\t\t\t// a ? at the begining of glob pattern can't match a .\n+\t\t\t\t// a ? never matches a / (see man 7 glob - Pathnames)\n+\t\t\t\t_string_append_string(regex, \"[^./]\");\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '*') {\n+\t\t\t\t// a * matches any string, but\n+\t\t\t\t// a * at the begining of glob pattern can't match a .\n+\t\t\t\t// a * never matches a / (see man 7 glob - Pathnames)\n+\t\t\t\t_string_append_string(regex, \"(?=[^.])[^/]*\");\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '.' || c == '|' || c == '^' || c == '(' || c == ')'\n+\t\t\t\t\t|| c == '{' || c == '}' || c == '+' || c == '$') {\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '[') {\n+\t\t\t\t_string_append_char(regex,'[');\n+\t\t\t\tstate = LEFT_BRACKET;\n+\t\t\t} else if (c == '\\\\') {\n+\t\t\t\tif (noescape) {\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t\tstate = NORMAL;\n+\t\t\t\t} else {\n+\t\t\t\t\tstate = ESCAPE;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = NORMAL;\n+\t\t\t}\n+\t\t\tbreak;\n+\t\tcase NORMAL:\n+\t\t\tif (c == '\\0') {\n+\t\t\t\tgoto finish;\n+\t\t\t} else if (c== '/') {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = SLASH;\n+\t\t\t} else if (c == '?') {\n+\t\t\t\t// a ? matches any single character, but\n+\t\t\t\t// it can never match a /\n+\t\t\t\t_string_append_string(regex, \"[^/]\");\n+\t\t\t} else if (c == '*') {\n+\t\t\t\t// a * matches any string, but\n+\t\t\t\t// it can never match a /\n+\t\t\t\t_string_append_string(regex, \"[^/]*\");\n+\t\t\t} else if (c == '.' || c == '|' || c == '^' || c == '(' || c == ')'\n+\t\t\t\t\t|| c == '{' || c == '}' || c == '+' || c == '$' ) {\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t} else if (c == '[') {\n+\t\t\t\t_string_append_char(regex,'[');\n+\t\t\t\tstate = LEFT_BRACKET;\n+\t\t\t} else if (c == '\\\\') {\n+\t\t\t\tif (noescape) {\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t} else {\n+\t\t\t\t\tstate = ESCAPE;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t}\n+\t\t\tbreak;\n+\t\tcase LEFT_BRACKET:\n+\t\t\tif (c == '!') {\n+\t\t\t\t_string_append_char(regex, '^');\n+\t\t\t} else if (c == '\\0') {\n+\t\t\t\tfree(regex->str);\n+\t\t\t\tfree(regex);\n+\t\t\t\treturn NULL;\n+\t\t\t} else {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t}\n+\t\t\tstate = CLASS;\n+\t\t\tbreak;\n+\t\tcase CLASS:\n+\t\t\tif (c == '\\\\') {\n+\t\t\t\tif (noescape) {\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t}\n+\t\t\t} else if (c == ']') {\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '\\0') {\n+\t\t\t\tfree(regex->str);\n+\t\t\t\tfree(regex);\n+\t\t\t\treturn NULL;\n+\t\t\t}\n+\t\t\t_string_append_char(regex, c);\n+\t\t\tbreak;\n+\t\tcase ESCAPE:\n+\t\t\t// Only ?, *, [ and ] are escaped by a backslash\n+\t\t\t// Meaning of other characters is not affected by a backslash\n+\t\t\tif (c == '?' || c == '*' || c == '[' || c == ']') {\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t} else if (c == '\\0') {\n+\t\t\t\tfree(regex->str);\n+\t\t\t\tfree(regex);\n+\t\t\t\treturn NULL;\n+\t\t\t} else {\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t}\n+\t\t\tstate = NORMAL;\n+\t\t\tbreak;\n+\t\tcase SLASH:\n+\t\t\tif (c == '\\0') {\n+\t\t\t\tgoto finish;\n+\t\t\t} else if (c == '?') {\n+\t\t\t\t// a ? matches any single character, but\n+\t\t\t\t// a ? at the begining of glob pattern can't match a .\n+\t\t\t\t// a ? never matches a / (see man 7 glob - Pathnames)\n+\t\t\t\t_string_append_string(regex, \"[^./]\");\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '*') {\n+\t\t\t\t// a * matches any string, but\n+\t\t\t\t// a * at the begining of glob pattern can't match a .\n+\t\t\t\t// a * never matches a / (see man 7 glob - Pathnames)\n+\t\t\t\t_string_append_string(regex, \"(?=[^.])[^/]*\");\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '.' || c == '|' || c == '^' || c == '(' || c == ')'\n+\t\t\t\t\t|| c == '{' || c == '}' || c == '+' || c == '$' ) {\n+\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = NORMAL;\n+\t\t\t} else if (c == '[') {\n+\t\t\t\tstate = LEFT_BRACKET;\n+\t\t\t} else if (c == '\\\\') {\n+\t\t\t\tif (noescape) {\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t\t_string_append_char(regex, '\\\\');\n+\t\t\t\t\tstate = NORMAL;\n+\t\t\t\t} else {\n+\t\t\t\t\tstate = ESCAPE;\n+\t\t\t\t}\n+\t\t\t} else {\n+\t\t\t\t_string_append_char(regex, c);\n+\t\t\t\tstate = NORMAL;\n+\t\t\t}\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tbreak;\n+\t\t}\n+\t}\n+finish:\n+\t_string_append_char(regex, '$'); // regex must match only whole string\n+\tresult = regex->str;\n+\tfree(regex);\n+\treturn result;\n+}","path":"src/OVAL/oval_component.c","position":383,"original_position":383,"commit_id":"2be46ae77fbabf3cd2cf3e23dc8a6f4645313417","original_commit_id":"2be46ae77fbabf3cd2cf3e23dc8a6f4645313417","user":{"login":"isimluk","id":6666052,"avatar_url":"https://avatars.githubusercontent.com/u/6666052?v=3","gravatar_id":"","url":"https://api.github.com/users/isimluk","html_url":"https://github.com/isimluk","followers_url":"https://api.github.com/users/isimluk/followers","following_url":"https://api.github.com/users/isimluk/following{/other_user}","gists_url":"https://api.github.com/users/isimluk/gists{/gist_id}","starred_url":"https://api.github.com/users/isimluk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/isimluk/subscriptions","organizations_url":"https://api.github.com/users/isimluk/orgs","repos_url":"https://api.github.com/users/isimluk/repos","events_url":"https://api.github.com/users/isimluk/events{/privacy}","received_events_url":"https://api.github.com/users/isimluk/received_events","type":"User","site_admin":false},"body":"Could you please move `_glob_to_regex` to a separate file?\r\n\r\nThis file (`oval_component.c`) already holds numerous responsibilities. Some of the core concepts of `oval_component.c` are getting buried into the sand of static functions.\r\n\r\nThe `_glob_to_regex` function together with its static dependencies form a nice and straight forward module (even with only a single accessible function).\r\n\r\n","created_at":"2015-04-10T08:18:34Z","updated_at":"2015-04-10T08:18:34Z","html_url":"https://github.com/OpenSCAP/openscap/pull/67#discussion_r28128386","pull_request_url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67","_links":{"self":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/comments/28128386"},"html":{"href":"https://github.com/OpenSCAP/openscap/pull/67#discussion_r28128386"},"pull_request":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67"}}},"pull_request":{"url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67","id":32767894,"html_url":"https://github.com/OpenSCAP/openscap/pull/67","diff_url":"https://github.com/OpenSCAP/openscap/pull/67.diff","patch_url":"https://github.com/OpenSCAP/openscap/pull/67.patch","issue_url":"https://api.github.com/repos/OpenSCAP/openscap/issues/67","number":67,"state":"open","locked":false,"title":"Glob2regex","user":{"login":"jan-cerny","id":9050916,"avatar_url":"https://avatars.githubusercontent.com/u/9050916?v=3","gravatar_id":"","url":"https://api.github.com/users/jan-cerny","html_url":"https://github.com/jan-cerny","followers_url":"https://api.github.com/users/jan-cerny/followers","following_url":"https://api.github.com/users/jan-cerny/following{/other_user}","gists_url":"https://api.github.com/users/jan-cerny/gists{/gist_id}","starred_url":"https://api.github.com/users/jan-cerny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jan-cerny/subscriptions","organizations_url":"https://api.github.com/users/jan-cerny/orgs","repos_url":"https://api.github.com/users/jan-cerny/repos","events_url":"https://api.github.com/users/jan-cerny/events{/privacy}","received_events_url":"https://api.github.com/users/jan-cerny/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-04-07T14:17:20Z","updated_at":"2015-04-10T08:18:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e02c7d34054f05fd537716131424756ba3c937bc","assignee":{"login":"mpreisler","id":753153,"avatar_url":"https://avatars.githubusercontent.com/u/753153?v=3","gravatar_id":"","url":"https://api.github.com/users/mpreisler","html_url":"https://github.com/mpreisler","followers_url":"https://api.github.com/users/mpreisler/followers","following_url":"https://api.github.com/users/mpreisler/following{/other_user}","gists_url":"https://api.github.com/users/mpreisler/gists{/gist_id}","starred_url":"https://api.github.com/users/mpreisler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpreisler/subscriptions","organizations_url":"https://api.github.com/users/mpreisler/orgs","repos_url":"https://api.github.com/users/mpreisler/repos","events_url":"https://api.github.com/users/mpreisler/events{/privacy}","received_events_url":"https://api.github.com/users/mpreisler/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67/commits","review_comments_url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67/comments","review_comment_url":"https://api.github.com/repos/OpenSCAP/openscap/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenSCAP/openscap/issues/67/comments","statuses_url":"https://api.github.com/repos/OpenSCAP/openscap/statuses/2be46ae77fbabf3cd2cf3e23dc8a6f4645313417","head":{"label":"jan-cerny:glob2regex","ref":"glob2regex","sha":"2be46ae77fbabf3cd2cf3e23dc8a6f4645313417","user":{"login":"jan-cerny","id":9050916,"avatar_url":"https://avatars.githubusercontent.com/u/9050916?v=3","gravatar_id":"","url":"https://api.github.com/users/jan-cerny","html_url":"https://github.com/jan-cerny","followers_url":"https://api.github.com/users/jan-cerny/followers","following_url":"https://api.github.com/users/jan-cerny/following{/other_user}","gists_url":"https://api.github.com/users/jan-cerny/gists{/gist_id}","starred_url":"https://api.github.com/users/jan-cerny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jan-cerny/subscriptions","organizations_url":"https://api.github.com/users/jan-cerny/orgs","repos_url":"https://api.github.com/users/jan-cerny/repos","events_url":"https://api.github.com/users/jan-cerny/events{/privacy}","received_events_url":"https://api.github.com/users/jan-cerny/received_events","type":"User","site_admin":false},"repo":{"id":24889498,"name":"openscap","full_name":"jan-cerny/openscap","owner":{"login":"jan-cerny","id":9050916,"avatar_url":"https://avatars.githubusercontent.com/u/9050916?v=3","gravatar_id":"","url":"https://api.github.com/users/jan-cerny","html_url":"https://github.com/jan-cerny","followers_url":"https://api.github.com/users/jan-cerny/followers","following_url":"https://api.github.com/users/jan-cerny/following{/other_user}","gists_url":"https://api.github.com/users/jan-cerny/gists{/gist_id}","starred_url":"https://api.github.com/users/jan-cerny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jan-cerny/subscriptions","organizations_url":"https://api.github.com/users/jan-cerny/orgs","repos_url":"https://api.github.com/users/jan-cerny/repos","events_url":"https://api.github.com/users/jan-cerny/events{/privacy}","received_events_url":"https://api.github.com/users/jan-cerny/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jan-cerny/openscap","description":"NIST Certified SCAP 1.2 toolkit","fork":true,"url":"https://api.github.com/repos/jan-cerny/openscap","forks_url":"https://api.github.com/repos/jan-cerny/openscap/forks","keys_url":"https://api.github.com/repos/jan-cerny/openscap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jan-cerny/openscap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jan-cerny/openscap/teams","hooks_url":"https://api.github.com/repos/jan-cerny/openscap/hooks","issue_events_url":"https://api.github.com/repos/jan-cerny/openscap/issues/events{/number}","events_url":"https://api.github.com/repos/jan-cerny/openscap/events","assignees_url":"https://api.github.com/repos/jan-cerny/openscap/assignees{/user}","branches_url":"https://api.github.com/repos/jan-cerny/openscap/branches{/branch}","tags_url":"https://api.github.com/repos/jan-cerny/openscap/tags","blobs_url":"https://api.github.com/repos/jan-cerny/openscap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jan-cerny/openscap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jan-cerny/openscap/git/refs{/sha}","trees_url":"https://api.github.com/repos/jan-cerny/openscap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jan-cerny/openscap/statuses/{sha}","languages_url":"https://api.github.com/repos/jan-cerny/openscap/languages","stargazers_url":"https://api.github.com/repos/jan-cerny/openscap/stargazers","contributors_url":"https://api.github.com/repos/jan-cerny/openscap/contributors","subscribers_url":"https://api.github.com/repos/jan-cerny/openscap/subscribers","subscription_url":"https://api.github.com/repos/jan-cerny/openscap/subscription","commits_url":"https://api.github.com/repos/jan-cerny/openscap/commits{/sha}","git_commits_url":"https://api.github.com/repos/jan-cerny/openscap/git/commits{/sha}","comments_url":"https://api.github.com/repos/jan-cerny/openscap/comments{/number}","issue_comment_url":"https://api.github.com/repos/jan-cerny/openscap/issues/comments{/number}","contents_url":"https://api.github.com/repos/jan-cerny/openscap/contents/{+path}","compare_url":"https://api.github.com/repos/jan-cerny/openscap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jan-cerny/openscap/merges","archive_url":"https://api.github.com/repos/jan-cerny/openscap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jan-cerny/openscap/downloads","issues_url":"https://api.github.com/repos/jan-cerny/openscap/issues{/number}","pulls_url":"https://api.github.com/repos/jan-cerny/openscap/pulls{/number}","milestones_url":"https://api.github.com/repos/jan-cerny/openscap/milestones{/number}","notifications_url":"https://api.github.com/repos/jan-cerny/openscap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jan-cerny/openscap/labels{/name}","releases_url":"https://api.github.com/repos/jan-cerny/openscap/releases{/id}","created_at":"2014-10-07T12:36:34Z","updated_at":"2015-01-28T14:52:57Z","pushed_at":"2015-04-09T12:49:38Z","git_url":"git://github.com/jan-cerny/openscap.git","ssh_url":"git@github.com:jan-cerny/openscap.git","clone_url":"https://github.com/jan-cerny/openscap.git","svn_url":"https://github.com/jan-cerny/openscap","homepage":"http://open-scap.org","size":17032,"stargazers_count":0,"watchers_count":0,"language":"XSLT","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":"OpenSCAP:maint-1.2","ref":"maint-1.2","sha":"89cc5f31542612f7df72f8ef160c8b44820e3062","user":{"login":"OpenSCAP","id":7439934,"avatar_url":"https://avatars.githubusercontent.com/u/7439934?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenSCAP","html_url":"https://github.com/OpenSCAP","followers_url":"https://api.github.com/users/OpenSCAP/followers","following_url":"https://api.github.com/users/OpenSCAP/following{/other_user}","gists_url":"https://api.github.com/users/OpenSCAP/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenSCAP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenSCAP/subscriptions","organizations_url":"https://api.github.com/users/OpenSCAP/orgs","repos_url":"https://api.github.com/users/OpenSCAP/repos","events_url":"https://api.github.com/users/OpenSCAP/events{/privacy}","received_events_url":"https://api.github.com/users/OpenSCAP/received_events","type":"Organization","site_admin":false},"repo":{"id":19279199,"name":"openscap","full_name":"OpenSCAP/openscap","owner":{"login":"OpenSCAP","id":7439934,"avatar_url":"https://avatars.githubusercontent.com/u/7439934?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenSCAP","html_url":"https://github.com/OpenSCAP","followers_url":"https://api.github.com/users/OpenSCAP/followers","following_url":"https://api.github.com/users/OpenSCAP/following{/other_user}","gists_url":"https://api.github.com/users/OpenSCAP/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenSCAP/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenSCAP/subscriptions","organizations_url":"https://api.github.com/users/OpenSCAP/orgs","repos_url":"https://api.github.com/users/OpenSCAP/repos","events_url":"https://api.github.com/users/OpenSCAP/events{/privacy}","received_events_url":"https://api.github.com/users/OpenSCAP/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenSCAP/openscap","description":"NIST Certified SCAP 1.2 toolkit","fork":false,"url":"https://api.github.com/repos/OpenSCAP/openscap","forks_url":"https://api.github.com/repos/OpenSCAP/openscap/forks","keys_url":"https://api.github.com/repos/OpenSCAP/openscap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenSCAP/openscap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenSCAP/openscap/teams","hooks_url":"https://api.github.com/repos/OpenSCAP/openscap/hooks","issue_events_url":"https://api.github.com/repos/OpenSCAP/openscap/issues/events{/number}","events_url":"https://api.github.com/repos/OpenSCAP/openscap/events","assignees_url":"https://api.github.com/repos/OpenSCAP/openscap/assignees{/user}","branches_url":"https://api.github.com/repos/OpenSCAP/openscap/branches{/branch}","tags_url":"https://api.github.com/repos/OpenSCAP/openscap/tags","blobs_url":"https://api.github.com/repos/OpenSCAP/openscap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenSCAP/openscap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenSCAP/openscap/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenSCAP/openscap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenSCAP/openscap/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenSCAP/openscap/languages","stargazers_url":"https://api.github.com/repos/OpenSCAP/openscap/stargazers","contributors_url":"https://api.github.com/repos/OpenSCAP/openscap/contributors","subscribers_url":"https://api.github.com/repos/OpenSCAP/openscap/subscribers","subscription_url":"https://api.github.com/repos/OpenSCAP/openscap/subscription","commits_url":"https://api.github.com/repos/OpenSCAP/openscap/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenSCAP/openscap/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenSCAP/openscap/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenSCAP/openscap/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenSCAP/openscap/contents/{+path}","compare_url":"https://api.github.com/repos/OpenSCAP/openscap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenSCAP/openscap/merges","archive_url":"https://api.github.com/repos/OpenSCAP/openscap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenSCAP/openscap/downloads","issues_url":"https://api.github.com/repos/OpenSCAP/openscap/issues{/number}","pulls_url":"https://api.github.com/repos/OpenSCAP/openscap/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenSCAP/openscap/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenSCAP/openscap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenSCAP/openscap/labels{/name}","releases_url":"https://api.github.com/repos/OpenSCAP/openscap/releases{/id}","created_at":"2014-04-29T14:23:34Z","updated_at":"2015-04-09T13:48:17Z","pushed_at":"2015-04-09T13:48:10Z","git_url":"git://github.com/OpenSCAP/openscap.git","ssh_url":"git@github.com:OpenSCAP/openscap.git","clone_url":"https://github.com/OpenSCAP/openscap.git","svn_url":"https://github.com/OpenSCAP/openscap","homepage":"http://open-scap.org","size":22340,"stargazers_count":22,"watchers_count":22,"language":"XSLT","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":15,"mirror_url":null,"open_issues_count":4,"forks":15,"open_issues":4,"watchers":22,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67"},"html":{"href":"https://github.com/OpenSCAP/openscap/pull/67"},"issue":{"href":"https://api.github.com/repos/OpenSCAP/openscap/issues/67"},"comments":{"href":"https://api.github.com/repos/OpenSCAP/openscap/issues/67/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenSCAP/openscap/pulls/67/commits"},"statuses":{"href":"https://api.github.com/repos/OpenSCAP/openscap/statuses/2be46ae77fbabf3cd2cf3e23dc8a6f4645313417"}}}}