{"action":"created","comment":{"url":"https://api.github.com/repos/eclipse/omr/pulls/comments/235581901","pull_request_review_id":177477986,"id":235581901,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNTU4MTkwMQ==","diff_hunk":"@@ -0,0 +1,372 @@\n+###############################################################################\n+# Copyright (c) 2018, 2018 IBM Corp. and others\n+#\n+# This program and the accompanying materials are made available under\n+# the terms of the Eclipse Public License 2.0 which accompanies this\n+# distribution and is available at http://eclipse.org/legal/epl-2.0\n+# or the Apache License, Version 2.0 which accompanies this distribution\n+# and is available at https://www.apache.org/licenses/LICENSE-2.0.\n+#\n+# This Source Code may also be made available under the following Secondary\n+# Licenses when the conditions for such availability set forth in the\n+# Eclipse Public License, v. 2.0 are satisfied: GNU General Public License,\n+# version 2 with the GNU Classpath Exception [1] and GNU General Public\n+# License, version 2 with the OpenJDK Assembly Exception [2].\n+#\n+# [1] https://www.gnu.org/software/classpath/license.html\n+# [2] http://openjdk.java.net/legal/assembly-exception.html\n+#\n+# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception\n+#############################################################################\n+\n+#[==========[ .rst\n+\n+OmrOption\n+---------\n+\n+OmrOption is a module which provides a declarative syntax for specifying\n+and validating on/off build options. Options are stored as ``BOOL`` cmake\n+cache variables, and revalidated on every cmake run. Validation for an\n+options group is manually invoked, after all options and other\n+prerequisites have been initialized.\n+\n+The general syntax is:\n+::\n+  omr_add_option_group(<group>)\n+\n+  omr_add_option(<option> <group>\n+    COMMENT <comment>\n+    DEFAULT <expression>\n+    REQUIRES <option>...\n+    REQUIRES_EXPR <expr>\n+    CONFLICTS <option>...\n+  )\n+\n+  omr_validate_option_group(<group>)\n+\n+The Basic API\n+^^^^^^^^^^^^^\n+\n+Every option is associated with a group. A group has to be manually\n+created and validated.\n+\n+::\n+  omr_add_option_group(<group>...)\n+\n+Create an option group. A global property called ``<group>`` contains a\n+list of all options in the group.\n+\n+::\n+  omr_validate_option_group(<group>...)\n+\n+Validate the options registered to ``<group>``. A validation error causes\n+a ``FATAL_ERROR``. A group can be validated multiple times. It is best to\n+delay validation until after all options have been set.\n+\n+::\n+  omr_add_option(<option> <group>\n+    COMMENT <comment>\n+    DEFAULT <expression>\n+    REQUIRES <option>...\n+    REQUIRES_EXPR <expr>\n+    CONFLICTS <option>...\n+  )\n+\n+Create a new option. The new option is a ``BOOL`` cache variable.\n+The option will be registered in ``<group>``. When ``<group>`` is\n+validated, this options requirements will be tested.\n+\n+``DEFAULT`` is an expression, which is evaluated as an if-expression and\n+coerced to an on/off value. The default value is only evaluated on the\n+first run, and cached in subsequent runs. Since options are regular cmake\n+cache variables, the value can be manually overridden by users at any\n+point. A default value must always be provided.\n+\n+``REQUIRES`` allows users to pass a list of required flags or variables,\n+which must be ``ON`` if the option is ``ON``.\n+\n+Similarly, ``CONFLICTS`` is a list of options which must be ``OFF``, if the\n+option is ON.\n+\n+``REQUIRES_EXPR`` is an expression which must be ``TRUE``, if the option is\n+ON. This can be used for expressing more complex option requirements.\n+Each option can have only one associated ``REQUIRES_EXPR``.\n+\n+Registering Additional Requirements\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+In addition to the :command:`omr_add_option`, requirements can be\n+registered to an option later.\n+\n+::\n+  omr_option_requires(<option> [<requirement>...])\n+\n+Add requirements to ``<option>``. If the option is ``ON``, each variable\n+named in the requirements must also be true.\n+\n+::\n+  omr_option_conflicts(<option> [<conflict>...])\n+\n+Add conflicts to ``<option>``. If the option is ``ON``, each variable named\n+in the conflicts must _not_ be true.\n+\n+::\n+  omr_option_requires_expr(<option> <expr>)\n+\n+Add a \"requirement expression\" to an option. The expression will be\n+evaluated as an if-expr. The expression must be true if ``<option>`` is\n+``ON``.\n+\n+Low level Options API\n+^^^^^^^^^^^^^^^^^^^^^\n+\n+::\n+  omr_declare_option(<option>)\n+\n+Declare an option, without creating a cache variable or registering the\n+option into a group. This function will defines the three properties:\n+\n+- ``option_REQUIRES``\n+- ``option_CONFLICTS``\n+- ``option_REQUIRES_EXPR``\n+\n+At this point, it is possible to register requirements on the option,\n+put the option into a group, or validate the option (despite having no\n+requirements).\n+\n+::\n+  omr_group_options(<group> <option>...)\n+\n+Register a set of options into an options group. Options must have already\n+been declared. It's possible (but not recommended) to register an option in\n+to multiple groups.\n+\n+::\n+  omr_validate_option(<option>)\n+\n+Validate a single option. If the option is false or not declared, do\n+nothing.\n+\n+An Example\n+^^^^^^^^^^\n+\n+::\n+\n+  omr_add_option_group(JS_OPTIONS)\n+\n+  omr_add_option(JS_LOW_TAGGED_INTEGERS JS_OPTIONS\n+    COMMENT \"Encode properties as either pointers or low-tagged integer immediates.\"\n+    DEFAULT ON\n+    CONFLICTS JS_NUNBOXED_VALUES\n+  )\n+\n+  omr_add_option(JS_NUNBOXED_VALUES JS_OPTIONS\n+    COMMENT \"Encode properties as double immediates, exploiting the format of NaNs to embed additional types.\"\n+    DEFAULT NOT JS_LOW_TAGGED_INTEGERS\n+    REQUIRES OMR_ENV64 IEEE_754\n+    CONFLICTS JS_LOW_TAGGED_INTEGERS\n+    REQUIRES_EXPR OMR_HOST_CPU IN_LIST \"X86\" \"x86_64\"\n+  )\n+\n+  omr_validate_option_group(JS_OPTIONS)\n+\n+  if(JS_LOW_TAGGED_INTEGERS)\n+    message(STATUS \"tagging integer values\")\n+  elseif(JS_NUNBOXED_VALUES)\n+    message(STATUS \"Using NunBoxing to represent values\")\n+  else()\n+    message(STATUS \"not encoding immediate values\")\n+  endif()\n+\n+Comparison to :module:`DependentOptions`\n+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n+\n+There is a similar module built in to cmake called DependentOption.\n+This module was not used because:\n+\n+1. A dependent option is only show to the user if it's dependencies are\n+   satisfied. OmrOption makes the choice to always present ALL flags in\n+   the cache.\n+2. A dependent option will revert to it's default value if it's\n+   requirements aren't satisfied, overriding any user provided value.\n+   OmrOption never tries to override the user, and relies on option\n+   validation instead.\n+3. OmrOption provides an easier to read, more obvious syntax.\n+   The default value in OmrOption is an expression, rather than a simple\n+   on/off constant. This gives us a succinct way to implement implicitly\n+   enabled/disabled flags, while still being user overridable.\n+   Dependent options have a dependency expression, but the default value\n+   is a constant, which cannot be overridden by the user.\n+\n+]==========]\n+\n+# include once\n+if(OMR_OPTION_)\n+\treturn()\n+endif()\n+set(OMR_OPTION_ 1)\n+\n+include(OmrAssert)\n+\n+function(omr_add_option_group)\n+\tforeach (group IN LISTS ARGN)\n+\t\tdefine_property(GLOBAL PROPERTY ${group}\n+\t\t\tBRIEF_DOCS \"A list of user-decideable options.\"\n+\t\t\tFULL_DOCS \"A list of options which can be validated after the project has been configured.\"\n+\t\t)\n+\t\tset_property(GLOBAL PROPERTY ${group} \"\")\n+\tendforeach(group)\n+endfunction(omr_add_option_group)\n+\n+# _omr_assert_is_option_group(<group>)\n+# Assert that <group> has been defined as an options group. Will FATAL_ERROR if\n+# group is not defined.\n+function(_omr_assert_is_option_group group)\n+\tget_property(is_option_group GLOBAL PROPERTY ${group} SET)\n+\tomr_assert(\n+\t\tTEST is_option_group\n+\t\tMESSAGE \"${group} is not an options group\"\n+\t)\n+endfunction(_omr_assert_is_option_group)\n+\n+function(omr_group_options group)\n+\t_omr_assert_is_option_group(${group})\n+\tset_property(GLOBAL APPEND PROPERTY ${group} ${ARGN})\n+endfunction(omr_group_options)\n+\n+# omr_get_options_group(<output> <group>)\n+# Store the list of options in <group> into the variable <output>.\n+function(_omr_get_option_group output group)\n+\t_omr_assert_is_option_group(${group})\n+\tget_property(${output} GLOBAL PROPERTY ${group})\n+\tset(${output} ${${output}} PARENT_SCOPE)\n+endfunction()\n+\n+function(omr_declare_option option)\n+\tdefine_property(GLOBAL PROPERTY ${option}_REQUIRES\n+\t\tBRIEF_DOCS \"A list of required options for ${option}\"\n+\t\tFULL_DOCS \"A list of variables which must be true if ${option} is true-ish\"\n+\t)\n+\tdefine_property(GLOBAL PROPERTY ${option}_CONFLICTS\n+\t\tBRIEF_DOCS \"A list of conflicting options for ${option}\"\n+\t\tFULL_DOCS \"A list of variables which must be false if ${option} is true-ish\"\n+\t)\n+\tdefine_property(GLOBAL PROPERTY ${option}_REQUIRES_EXPR\n+\t\tBRIEF_DOCS \"An expression which must be true if ${option} is enabled.\"\n+\t\tFULL_DOCS \" \"\n+\t)\n+endfunction(omr_declare_option)\n+\n+function(omr_option_requires option)\n+\tset_property(GLOBAL APPEND PROPERTY ${option}_REQUIRES ${ARGN})\n+endfunction(omr_option_requires)\n+\n+function(omr_option_conflicts option)\n+\tset_property(GLOBAL APPEND PROPERTY ${option}_CONFLICTS ${ARGN})\n+endfunction(omr_option_conflicts)\n+\n+function(omr_option_requires_expr option)\n+\tget_property(expr_set GLOBAL PROPERTY ${option}_REQUIRES_EXPR SET)\n+\tomr_assert(\n+\t\tTEST NOT expr_set\n+\t\tMESSAGE \"More than one REQUIRES_EXPR defined for option ${option}\"\n+\t)\n+\tset_property(GLOBAL PROPERTY ${option}_REQUIRES_EXPR ${ARGN})\n+endfunction(omr_option_requires_expr)\n+\n+function(omr_add_option option group)\n+\tcmake_parse_arguments(ARG \"\" \"COMMENT\" \"DEFAULT;REQUIRES;CONFLICTS;REQUIRES_EXPR\" ${ARGN})\n+\n+\tif (DEFINED ARG_COMMENT)\n+\t\tset(comment ${ARG_COMMENT})\n+\telse()\n+\t\tset(comment \"OMR: undocumented public option\")\n+\tendif()\n+\n+\tomr_assert(\n+\t\tTEST DEFINED ARG_DEFAULT\n+\t\tMESSAGE \"Missing DEFAULT value for ${option}\"\n+\t)\n+\n+\t# Evaluate the default value as an if expression\n+\tif(${ARG_DEFAULT})\n+\t\tset(default ON)\n+\telse()\n+\t\tset(default OFF)\n+\tendif()\n+\n+\t# Option setup and initialization\n+\n+\tomr_declare_option(${option} ${group})\n+\tomr_group_options(${group} ${option})\n+\tset(${option} ${default} CACHE BOOL \"${comment}\")\n+\n+\t# Register validation properties\n+\n+\tif(DEFINED ARG_REQUIRES)\n+\t\tomr_option_requires(${option} ${ARG_REQUIRES})\n+\tendif()\n+\n+\tif(DEFINED ARG_CONFLICTS)\n+\t\tomr_option_conflicts(${option} ${ARG_CONFLICTS})\n+\tendif()\n+\n+\tif(DEFINED ARG_REQUIRES_EXPR)\n+\t\tomr_option_requires_expr(${option} ${ARG_REQUIRES_EXPR})\n+\tendif()\n+endfunction(omr_add_option)\n+\n+# omr_check_option_requirements(<option>)\n+# Assert that every required option is enabled.\n+function(_omr_check_option_requirements option)\n+\tget_property(requirements GLOBAL PROPERTY ${option}_REQUIRES)\n+\tforeach(requirement IN LISTS requirements)\n+\t\tomr_assert(\n+\t\t\tTEST ${requirement}\n+\t\t\tMESSAGE \"option ${option} requires ${requirement}\"\n+\t\t)\n+\tendforeach(requirement)\n+endfunction(_omr_check_option_requirements)\n+\n+# omr_check_option_conflicts(<option>)","path":"cmake/modules/OmrOption.cmake","position":331,"original_position":331,"commit_id":"4153405d7a0d4d1f27595e278fbf4ae78a4dc92f","original_commit_id":"4153405d7a0d4d1f27595e278fbf4ae78a4dc92f","user":{"login":"Leonardo2718","id":6710130,"node_id":"MDQ6VXNlcjY3MTAxMzA=","avatar_url":"https://avatars0.githubusercontent.com/u/6710130?v=4","gravatar_id":"","url":"https://api.github.com/users/Leonardo2718","html_url":"https://github.com/Leonardo2718","followers_url":"https://api.github.com/users/Leonardo2718/followers","following_url":"https://api.github.com/users/Leonardo2718/following{/other_user}","gists_url":"https://api.github.com/users/Leonardo2718/gists{/gist_id}","starred_url":"https://api.github.com/users/Leonardo2718/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Leonardo2718/subscriptions","organizations_url":"https://api.github.com/users/Leonardo2718/orgs","repos_url":"https://api.github.com/users/Leonardo2718/repos","events_url":"https://api.github.com/users/Leonardo2718/events{/privacy}","received_events_url":"https://api.github.com/users/Leonardo2718/received_events","type":"User","site_admin":false},"body":"```suggestion\r\n# _omr_check_option_conflicts(<option>)\r\n```","created_at":"2018-11-22T01:46:02Z","updated_at":"2018-11-22T01:49:57Z","html_url":"https://github.com/eclipse/omr/pull/3221#discussion_r235581901","pull_request_url":"https://api.github.com/repos/eclipse/omr/pulls/3221","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/eclipse/omr/pulls/comments/235581901"},"html":{"href":"https://github.com/eclipse/omr/pull/3221#discussion_r235581901"},"pull_request":{"href":"https://api.github.com/repos/eclipse/omr/pulls/3221"}}},"pull_request":{"url":"https://api.github.com/repos/eclipse/omr/pulls/3221","id":232434021,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMyNDM0MDIx","html_url":"https://github.com/eclipse/omr/pull/3221","diff_url":"https://github.com/eclipse/omr/pull/3221.diff","patch_url":"https://github.com/eclipse/omr/pull/3221.patch","issue_url":"https://api.github.com/repos/eclipse/omr/issues/3221","number":3221,"state":"open","locked":false,"title":"cmake: Add OmrOption, a util for declaring build options","user":{"login":"rwy0717","id":2774689,"node_id":"MDQ6VXNlcjI3NzQ2ODk=","avatar_url":"https://avatars2.githubusercontent.com/u/2774689?v=4","gravatar_id":"","url":"https://api.github.com/users/rwy0717","html_url":"https://github.com/rwy0717","followers_url":"https://api.github.com/users/rwy0717/followers","following_url":"https://api.github.com/users/rwy0717/following{/other_user}","gists_url":"https://api.github.com/users/rwy0717/gists{/gist_id}","starred_url":"https://api.github.com/users/rwy0717/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rwy0717/subscriptions","organizations_url":"https://api.github.com/users/rwy0717/orgs","repos_url":"https://api.github.com/users/rwy0717/repos","events_url":"https://api.github.com/users/rwy0717/events{/privacy}","received_events_url":"https://api.github.com/users/rwy0717/received_events","type":"User","site_admin":false},"body":"OmrOption is a module which provides a declarative syntax for specifying\r\nand validating ON/OFF build options. The long-term goal is to declare\r\nand validate all OMR build options using this module.\r\n\r\nThe general syntax is:\r\n```\r\n  omr_add_option_group(<group>)\r\n\r\n  omr_add_option(<option> <option-group>\r\n    COMMENT <comment>\r\n    DEFAULT <expression>\r\n    REQUIRES <option>...\r\n    REQUIRES_EXPR <expr>\r\n    CONFLICTS <option>...\r\n  )\r\n\r\n  omr_validate_option_group(<group>)\r\n```\r\nOptions are defined as BOOL cache variables.\r\n\r\nDEFAULT is an expression, which is evaluated and coerced to an on/off\r\nvalue. The default value is only evaluated on the first run, and cached\r\nin subsequent runs. Since options are regular cmake cache variables, the\r\nvalue can be manually overridden by users at any point. A default value\r\nmust always be provided.\r\n\r\nREQUIRES allows users to pass a list of required flags or variables,\r\nwhich must be ON if the option is ON.\r\n\r\nSimilarly, CONFLICTS is a list of options which must be OFF, if the\r\noption is ON.\r\n\r\nREQUIRES_EXPR is an expression which must be TRUE, if the option is\r\nON. This can be used for expressing more complex option requirements.\r\nEach option can have only one associated REQUIRES_EXPR.\r\n\r\nOptions are registered into a group, which must be explicitly validated\r\nwith a call to omr_validate_option_group. Option groups allow consuming\r\nprojects to create and validate their own option sets. By making\r\nvalidation explicit, we allow the user (us OMR developers) to delay\r\nvalidation until after all configuration variables have been set.\r\nOptions are validated on every run of cmake, which ensures that the user\r\nnever puts OMR into an illegal configuration.\r\n\r\nThe phrasing \"option\" was chosen over \"flag\" to follow existing cmake\r\nconventions, where add_option / add_dependent_option create ON/OFF\r\nbool cache variables.\r\n\r\nThere is a similar module built in to cmake called DependentOption.\r\nThis module was not used because:\r\n1. A dependent option is only show to the user if it's dependencies are\r\n   satisfied. OmrOption makes the choice to always present ALL flags in\r\n   the cache.\r\n2. A dependent option will revert to it's default value if it's\r\n   requirements aren't satisfied, overriding any user provided value.\r\n   OmrOption never tries to override the user, and relies on option\r\n   validation instead.\r\n3. OmrOption provides an easier to read, more obvious syntax.\r\n4. The default value in OmrOption is an expression, rather than a simple\r\n   on/off constant. This gives us a succinct way to implement implicitly\r\n   enabled/disabled flags, while still being user overridable.\r\n   Dependent options have a dependency expression, but the default value\r\n   is a constant, which cannot be overridden by the user.\r\n\r\nSigned-off-by: Robert Young <rwy0717@gmail.com>","created_at":"2018-11-20T19:29:31Z","updated_at":"2018-11-22T01:49:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"eabd6bfb1f28a5158037efbab01a01ff5a5479e2","assignee":null,"assignees":[],"requested_reviewers":[{"login":"youngar","id":2892549,"node_id":"MDQ6VXNlcjI4OTI1NDk=","avatar_url":"https://avatars0.githubusercontent.com/u/2892549?v=4","gravatar_id":"","url":"https://api.github.com/users/youngar","html_url":"https://github.com/youngar","followers_url":"https://api.github.com/users/youngar/followers","following_url":"https://api.github.com/users/youngar/following{/other_user}","gists_url":"https://api.github.com/users/youngar/gists{/gist_id}","starred_url":"https://api.github.com/users/youngar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/youngar/subscriptions","organizations_url":"https://api.github.com/users/youngar/orgs","repos_url":"https://api.github.com/users/youngar/repos","events_url":"https://api.github.com/users/youngar/events{/privacy}","received_events_url":"https://api.github.com/users/youngar/received_events","type":"User","site_admin":false},{"login":"charliegracie","id":15161849,"node_id":"MDQ6VXNlcjE1MTYxODQ5","avatar_url":"https://avatars3.githubusercontent.com/u/15161849?v=4","gravatar_id":"","url":"https://api.github.com/users/charliegracie","html_url":"https://github.com/charliegracie","followers_url":"https://api.github.com/users/charliegracie/followers","following_url":"https://api.github.com/users/charliegracie/following{/other_user}","gists_url":"https://api.github.com/users/charliegracie/gists{/gist_id}","starred_url":"https://api.github.com/users/charliegracie/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/charliegracie/subscriptions","organizations_url":"https://api.github.com/users/charliegracie/orgs","repos_url":"https://api.github.com/users/charliegracie/repos","events_url":"https://api.github.com/users/charliegracie/events{/privacy}","received_events_url":"https://api.github.com/users/charliegracie/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":650663178,"node_id":"MDU6TGFiZWw2NTA2NjMxNzg=","url":"https://api.github.com/repos/eclipse/omr/labels/cmake","name":"cmake","color":"ff087f","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/eclipse/omr/pulls/3221/commits","review_comments_url":"https://api.github.com/repos/eclipse/omr/pulls/3221/comments","review_comment_url":"https://api.github.com/repos/eclipse/omr/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eclipse/omr/issues/3221/comments","statuses_url":"https://api.github.com/repos/eclipse/omr/statuses/4153405d7a0d4d1f27595e278fbf4ae78a4dc92f","head":{"label":"rwy0717:cmake-options","ref":"cmake-options","sha":"4153405d7a0d4d1f27595e278fbf4ae78a4dc92f","user":{"login":"rwy0717","id":2774689,"node_id":"MDQ6VXNlcjI3NzQ2ODk=","avatar_url":"https://avatars2.githubusercontent.com/u/2774689?v=4","gravatar_id":"","url":"https://api.github.com/users/rwy0717","html_url":"https://github.com/rwy0717","followers_url":"https://api.github.com/users/rwy0717/followers","following_url":"https://api.github.com/users/rwy0717/following{/other_user}","gists_url":"https://api.github.com/users/rwy0717/gists{/gist_id}","starred_url":"https://api.github.com/users/rwy0717/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rwy0717/subscriptions","organizations_url":"https://api.github.com/users/rwy0717/orgs","repos_url":"https://api.github.com/users/rwy0717/repos","events_url":"https://api.github.com/users/rwy0717/events{/privacy}","received_events_url":"https://api.github.com/users/rwy0717/received_events","type":"User","site_admin":false},"repo":{"id":53353883,"node_id":"MDEwOlJlcG9zaXRvcnk1MzM1Mzg4Mw==","name":"omr","full_name":"rwy0717/omr","private":false,"owner":{"login":"rwy0717","id":2774689,"node_id":"MDQ6VXNlcjI3NzQ2ODk=","avatar_url":"https://avatars2.githubusercontent.com/u/2774689?v=4","gravatar_id":"","url":"https://api.github.com/users/rwy0717","html_url":"https://github.com/rwy0717","followers_url":"https://api.github.com/users/rwy0717/followers","following_url":"https://api.github.com/users/rwy0717/following{/other_user}","gists_url":"https://api.github.com/users/rwy0717/gists{/gist_id}","starred_url":"https://api.github.com/users/rwy0717/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rwy0717/subscriptions","organizations_url":"https://api.github.com/users/rwy0717/orgs","repos_url":"https://api.github.com/users/rwy0717/repos","events_url":"https://api.github.com/users/rwy0717/events{/privacy}","received_events_url":"https://api.github.com/users/rwy0717/received_events","type":"User","site_admin":false},"html_url":"https://github.com/rwy0717/omr","description":"OMR project","fork":true,"url":"https://api.github.com/repos/rwy0717/omr","forks_url":"https://api.github.com/repos/rwy0717/omr/forks","keys_url":"https://api.github.com/repos/rwy0717/omr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rwy0717/omr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rwy0717/omr/teams","hooks_url":"https://api.github.com/repos/rwy0717/omr/hooks","issue_events_url":"https://api.github.com/repos/rwy0717/omr/issues/events{/number}","events_url":"https://api.github.com/repos/rwy0717/omr/events","assignees_url":"https://api.github.com/repos/rwy0717/omr/assignees{/user}","branches_url":"https://api.github.com/repos/rwy0717/omr/branches{/branch}","tags_url":"https://api.github.com/repos/rwy0717/omr/tags","blobs_url":"https://api.github.com/repos/rwy0717/omr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rwy0717/omr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rwy0717/omr/git/refs{/sha}","trees_url":"https://api.github.com/repos/rwy0717/omr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rwy0717/omr/statuses/{sha}","languages_url":"https://api.github.com/repos/rwy0717/omr/languages","stargazers_url":"https://api.github.com/repos/rwy0717/omr/stargazers","contributors_url":"https://api.github.com/repos/rwy0717/omr/contributors","subscribers_url":"https://api.github.com/repos/rwy0717/omr/subscribers","subscription_url":"https://api.github.com/repos/rwy0717/omr/subscription","commits_url":"https://api.github.com/repos/rwy0717/omr/commits{/sha}","git_commits_url":"https://api.github.com/repos/rwy0717/omr/git/commits{/sha}","comments_url":"https://api.github.com/repos/rwy0717/omr/comments{/number}","issue_comment_url":"https://api.github.com/repos/rwy0717/omr/issues/comments{/number}","contents_url":"https://api.github.com/repos/rwy0717/omr/contents/{+path}","compare_url":"https://api.github.com/repos/rwy0717/omr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rwy0717/omr/merges","archive_url":"https://api.github.com/repos/rwy0717/omr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rwy0717/omr/downloads","issues_url":"https://api.github.com/repos/rwy0717/omr/issues{/number}","pulls_url":"https://api.github.com/repos/rwy0717/omr/pulls{/number}","milestones_url":"https://api.github.com/repos/rwy0717/omr/milestones{/number}","notifications_url":"https://api.github.com/repos/rwy0717/omr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rwy0717/omr/labels{/name}","releases_url":"https://api.github.com/repos/rwy0717/omr/releases{/id}","deployments_url":"https://api.github.com/repos/rwy0717/omr/deployments","created_at":"2016-03-07T19:46:21Z","updated_at":"2018-04-17T18:47:21Z","pushed_at":"2018-11-21T21:55:42Z","git_url":"git://github.com/rwy0717/omr.git","ssh_url":"git@github.com:rwy0717/omr.git","clone_url":"https://github.com/rwy0717/omr.git","svn_url":"https://github.com/rwy0717/omr","homepage":null,"size":29977,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"eclipse:master","ref":"master","sha":"6945416caf88d917083ca8b421303f76dc1ec816","user":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"repo":{"id":53077478,"node_id":"MDEwOlJlcG9zaXRvcnk1MzA3NzQ3OA==","name":"omr","full_name":"eclipse/omr","private":false,"owner":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/eclipse/omr","description":"Eclipse OMR™ Cross platform components for building reliable, high performance language runtimes","fork":false,"url":"https://api.github.com/repos/eclipse/omr","forks_url":"https://api.github.com/repos/eclipse/omr/forks","keys_url":"https://api.github.com/repos/eclipse/omr/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eclipse/omr/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eclipse/omr/teams","hooks_url":"https://api.github.com/repos/eclipse/omr/hooks","issue_events_url":"https://api.github.com/repos/eclipse/omr/issues/events{/number}","events_url":"https://api.github.com/repos/eclipse/omr/events","assignees_url":"https://api.github.com/repos/eclipse/omr/assignees{/user}","branches_url":"https://api.github.com/repos/eclipse/omr/branches{/branch}","tags_url":"https://api.github.com/repos/eclipse/omr/tags","blobs_url":"https://api.github.com/repos/eclipse/omr/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eclipse/omr/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eclipse/omr/git/refs{/sha}","trees_url":"https://api.github.com/repos/eclipse/omr/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eclipse/omr/statuses/{sha}","languages_url":"https://api.github.com/repos/eclipse/omr/languages","stargazers_url":"https://api.github.com/repos/eclipse/omr/stargazers","contributors_url":"https://api.github.com/repos/eclipse/omr/contributors","subscribers_url":"https://api.github.com/repos/eclipse/omr/subscribers","subscription_url":"https://api.github.com/repos/eclipse/omr/subscription","commits_url":"https://api.github.com/repos/eclipse/omr/commits{/sha}","git_commits_url":"https://api.github.com/repos/eclipse/omr/git/commits{/sha}","comments_url":"https://api.github.com/repos/eclipse/omr/comments{/number}","issue_comment_url":"https://api.github.com/repos/eclipse/omr/issues/comments{/number}","contents_url":"https://api.github.com/repos/eclipse/omr/contents/{+path}","compare_url":"https://api.github.com/repos/eclipse/omr/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eclipse/omr/merges","archive_url":"https://api.github.com/repos/eclipse/omr/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eclipse/omr/downloads","issues_url":"https://api.github.com/repos/eclipse/omr/issues{/number}","pulls_url":"https://api.github.com/repos/eclipse/omr/pulls{/number}","milestones_url":"https://api.github.com/repos/eclipse/omr/milestones{/number}","notifications_url":"https://api.github.com/repos/eclipse/omr/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eclipse/omr/labels{/name}","releases_url":"https://api.github.com/repos/eclipse/omr/releases{/id}","deployments_url":"https://api.github.com/repos/eclipse/omr/deployments","created_at":"2016-03-03T19:34:17Z","updated_at":"2018-11-20T15:21:32Z","pushed_at":"2018-11-21T21:55:43Z","git_url":"git://github.com/eclipse/omr.git","ssh_url":"git@github.com:eclipse/omr.git","clone_url":"https://github.com/eclipse/omr.git","svn_url":"https://github.com/eclipse/omr","homepage":"http://www.eclipse.org/omr","size":29203,"stargazers_count":586,"watchers_count":586,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":236,"mirror_url":null,"archived":false,"open_issues_count":537,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":236,"open_issues":537,"watchers":586,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eclipse/omr/pulls/3221"},"html":{"href":"https://github.com/eclipse/omr/pull/3221"},"issue":{"href":"https://api.github.com/repos/eclipse/omr/issues/3221"},"comments":{"href":"https://api.github.com/repos/eclipse/omr/issues/3221/comments"},"review_comments":{"href":"https://api.github.com/repos/eclipse/omr/pulls/3221/comments"},"review_comment":{"href":"https://api.github.com/repos/eclipse/omr/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eclipse/omr/pulls/3221/commits"},"statuses":{"href":"https://api.github.com/repos/eclipse/omr/statuses/4153405d7a0d4d1f27595e278fbf4ae78a4dc92f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Leonardo2718"}}