{"action":"created","comment":{"url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/comments/181409548","pull_request_review_id":112037365,"id":181409548,"diff_hunk":"@@ -0,0 +1,68 @@\n+/*\n+ * Hibernate Search, full-text search for your domain model\n+ *\n+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later\n+ * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.\n+ */\n+package org.hibernate.search.v6poc.entity.pojo.model.path.impl;\n+\n+import org.hibernate.search.v6poc.entity.pojo.extractor.impl.BoundContainerValueExtractorPath;\n+import org.hibernate.search.v6poc.entity.pojo.extractor.impl.ContainerValueExtractorPath;\n+\n+/**\n+ * @param <T> The property holder type of this node, i.e. the type from which the property is retrieved.\n+ * @param <P> The property type of this node, i.e. the type of the property from which the values are extracted.\n+ * @param <V> The value type of this node, i.e. the type of values extracted from the property.\n+ */\n+public class BoundPojoModelPathValueNode<T, P, V> extends BoundPojoModelPath {\n+\n+\tprivate final BoundPojoModelPathPropertyNode<T, P> parent;\n+\tprivate final BoundContainerValueExtractorPath<P, V> boundExtractorPath;\n+\tprivate BoundPojoModelPathTypeNode<V> elementTypePathNode;\n+\n+\tBoundPojoModelPathValueNode(BoundPojoModelPathPropertyNode<T, P> parent,\n+\t\t\tBoundContainerValueExtractorPath<P, V> boundExtractorPath) {\n+\t\tthis.parent = parent;\n+\t\tthis.boundExtractorPath = boundExtractorPath;\n+\t}\n+\n+\t/**\n+\t * @return The model path to the property from which the value represented by this node is extracted.\n+\t */\n+\t@Override\n+\tpublic BoundPojoModelPathPropertyNode<T, P> parent() {","path":"mapper-pojo/src/main/java/org/hibernate/search/v6poc/entity/pojo/model/path/impl/BoundPojoModelPathValueNode.java","position":null,"original_position":33,"commit_id":"dc2822b46b93d4feea527b5b180a63d753676a7d","original_commit_id":"b1489bcd8a8f7c8e0a84d398f9691ec4641a907e","user":{"login":"yrodiere","id":412878,"avatar_url":"https://avatars1.githubusercontent.com/u/412878?v=4","gravatar_id":"","url":"https://api.github.com/users/yrodiere","html_url":"https://github.com/yrodiere","followers_url":"https://api.github.com/users/yrodiere/followers","following_url":"https://api.github.com/users/yrodiere/following{/other_user}","gists_url":"https://api.github.com/users/yrodiere/gists{/gist_id}","starred_url":"https://api.github.com/users/yrodiere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yrodiere/subscriptions","organizations_url":"https://api.github.com/users/yrodiere/orgs","repos_url":"https://api.github.com/users/yrodiere/repos","events_url":"https://api.github.com/users/yrodiere/events{/privacy}","received_events_url":"https://api.github.com/users/yrodiere/received_events","type":"User","site_admin":false},"body":"Ok; done for `parent` only then.\r\nFYI the same naming conventions seem to be used in `java.nio.file.Path`: \"get\" prefix for actualy getters, but not for more complex methods.","created_at":"2018-04-13T14:40:31Z","updated_at":"2018-04-13T14:40:32Z","html_url":"https://github.com/hibernate/hibernate-search-6-poc/pull/38#discussion_r181409548","pull_request_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/comments/181409548"},"html":{"href":"https://github.com/hibernate/hibernate-search-6-poc/pull/38#discussion_r181409548"},"pull_request":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38"}},"in_reply_to_id":180346537},"pull_request":{"url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38","id":180306407,"html_url":"https://github.com/hibernate/hibernate-search-6-poc/pull/38","diff_url":"https://github.com/hibernate/hibernate-search-6-poc/pull/38.diff","patch_url":"https://github.com/hibernate/hibernate-search-6-poc/pull/38.patch","issue_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/38","number":38,"state":"open","locked":false,"title":"Automatic reindexing - without fine-grained dirty checking","user":{"login":"yrodiere","id":412878,"avatar_url":"https://avatars1.githubusercontent.com/u/412878?v=4","gravatar_id":"","url":"https://api.github.com/users/yrodiere","html_url":"https://github.com/yrodiere","followers_url":"https://api.github.com/users/yrodiere/followers","following_url":"https://api.github.com/users/yrodiere/following{/other_user}","gists_url":"https://api.github.com/users/yrodiere/gists{/gist_id}","starred_url":"https://api.github.com/users/yrodiere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yrodiere/subscriptions","organizations_url":"https://api.github.com/users/yrodiere/orgs","repos_url":"https://api.github.com/users/yrodiere/repos","events_url":"https://api.github.com/users/yrodiere/events{/privacy}","received_events_url":"https://api.github.com/users/yrodiere/received_events","type":"User","site_admin":false},"body":"~~Based on #37, please merge that one first.~~ => Done\r\n\r\nThis implements the equivalent of \"ContainedIn\" in Search 6, i.e. it makes sure that whenever a contained entity is modified in Hibernate ORM, the containing entities will be reindexed on-the-fly (in the same Session).\r\n\r\n## What changed compared to Search 5\r\n\r\n### For the users\r\n\r\nThe main change is that users are not expected to add `@ContainedIn` anymore. Hibernate Search will compute the set of dependencies of a given indexed type (A), and from there will infer the entities (B) that, when modified, should trigger reindexing of the indexed type. Then, Hibernate Search will use every available metadata to infer the path from B to A that represents the inverse side of the original association from A to B.\r\n\r\nIn general, the \"available metadata\" will be Hibernate ORM's \"mappedBy\" attributes on the `@OneToMany`, `@OneToOne`, etc, so the users won't have anything to do, except making sure to update both sides of its associations consistently whenever he changes one side at runtime.\r\n\r\nIn some cases, the fact that an association from A to B is the inverse side of another from B to A might not be modeled in Hibernate ORM. If a user want to proceed, he may add the metadata explicitly using the `org.hibernate.search.v6poc.entity.pojo.mapping.definition.annotation.AssociationInverseSide` annotation, or the corresponding methods in the programmatic mapping API.\r\n\r\nIf the necessary metadata is missing, and the inverse side of an association used during indexing cannot be found, Hibernate Search's bootstrap will fail by default. This is another major change compared to Search 5: we want users (especially new users) to be aware that something is missing in their model, and that some parts of their index may not be updated correctly when changes occur in Hibernate ORM. In Search 5, automatic reindexing of containing types is disabled by default, and can be enabled on a case-by-case basis. In Search 6, it will be enabled by default, and it should be possible to disable it on a case-by case basis.\r\n\r\n### Internally\r\n\r\nThe major difference with Search 5 is that I tried to build an explicit, static dependency tree at boot time (`org.hibernate.search.v6poc.entity.pojo.dirtiness.impl.PojoImplicitReindexingResolver`), while in Search 5 we merely stored metadata that would allow to infer the tree at runtime (`org.hibernate.search.engine.metadata.impl.ContainedInMetadata`).\r\n\r\nSome advantages of this approach:\r\n\r\n* It allows for better resolution of the inverse side of associations. For instance, the older algorigthm used to fall back to a \"no-limit\" mode whenever a `@ContainedIn` couldn't be matched to an IndexedEmbedded; see `org.hibernate.search.engine.metadata.impl.AnnotationMetadataProvider#createContainedInMetadata`, it just creates no-limit metadata when the property on the opposite side is not found, which could happen in various cases. For example it would happen if the targeted entity is abstract and the inverse side of the association is defined in concrete subclasses. Or when the user simply forgot to model the inverse side of the association.\r\n* We will be able to avoid reindexing entities that were not affected by a certain change in a contained entity. E.g. if \"A.property1\" is embedded in B, but not in C, only B will be reindexed. This is not the case with the older algorithm.\r\n* Debugging user issues will probably be easier, especially to identify what Hibernate Search is doing wrong at runtime: the reindexing resolver tree is computed at bootstrap and can be logged, and runtime is dead simple, basically following the structure of the reindexing resolver tree.\r\n* We may be able to hijack the dependency collection interfaces in order to also build a \"fetch graph\" for use in the ORM \"MassIndexer\", allowing to load each batch of entities eagerly, with all the associations we know will be needed. This is, however, a task for another day.\r\n\r\nDrawbacks:\r\n\r\n* The main drawback is that we need much more code to implement the feature. I believe it is justified, given the more \"correct\" approach that handles more corner cases. I also believe debugging the new code should not prove much more complex than debugging the older code, given we had very few metadata in the older code, so it was difficult to know what Hibernate Search was *trying* to do to begin with. Now, at least, we have the logs to tell us at bootstrap time what Hibernate Search will try to do at runtime.\r\n\r\nAnother change that you may notice: most of the code is independent from Hibernate ORM. Only the contribution of metadata from Hibernate ORM isn't. This should allow to address [HSEARCH-1800](https://hibernate.atlassian.net/browse/HSEARCH-1800) more easily.\r\n\r\n## Next...\r\n\r\nI tried to sum up what's still missing [here](https://docs.google.com/document/d/16PAa__LsxyLZcbW3q1MvgyIznh4ZnCYLupbNMXKMRds/edit?pli=1#heading=h.9gs65jj9df61). Essentially, we lack:\r\n\r\n* Fine-grained dirty detection. Currently \"dirtiness\" is all-or-nothing: an indexed entity will be reindexed automatically whenever any of its properties (or of the properties of its contained entities) changes, even if the property is not indexed. Eventually we want to handle fine-grained dirtyness on the indexed entity (Search 5 does this already) and even on the contained entities (Search 5 does not).\r\n* The ability to selectively mark an association as \"to be ignored\", for example because the inverse side of the association would return thousand of entities and we must use another approach (periodic reindexing).\r\n* The ability for users to implement complex, dynamic reindexing resolvers. For example if a type or property bridge walks through every leaf in an entity tree, we might want to implement a reindexing resolver on the opposite site that would fetch the root of the tree and mark it for reindexing whenever a leaf changes. This is not possible with just the \"static tree\" approach, we need to plug in some user-implemented components.\r\n* And also support for transient properties, but that's a separate problem in my opinion, since it's not well supported in Search 5 either.\r\n\r\n## Structure of the PR\r\n\r\nI had to implement many little fixes before I could even start working on reindexing proper. Here are the commits implementing automatic reindexing:\r\n\r\n* \"Implement basic automatic reindexing across entities\"\r\n* \"Support polymorphic inverse associations in automatic reindexing\"\r\n* \"Support associations in embeddables when the inverse side information is declared on the non-embeddable side in automatic reindexing\"\r\n* \"Support associations in embeddables when the inverse side information is declared on the embeddable side in automatic reindexing\"\r\n\r\nOther commits are only changes that are necessary for the following commits, or new tests.","created_at":"2018-04-09T13:12:19Z","updated_at":"2018-04-13T14:40:32Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8a46983f2e9f70a5665d29f358c3828ac2a144b8","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38/commits","review_comments_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38/comments","review_comment_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/comments{/number}","comments_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/38/comments","statuses_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/statuses/dc2822b46b93d4feea527b5b180a63d753676a7d","head":{"label":"yrodiere:automaticindexing","ref":"automaticindexing","sha":"dc2822b46b93d4feea527b5b180a63d753676a7d","user":{"login":"yrodiere","id":412878,"avatar_url":"https://avatars1.githubusercontent.com/u/412878?v=4","gravatar_id":"","url":"https://api.github.com/users/yrodiere","html_url":"https://github.com/yrodiere","followers_url":"https://api.github.com/users/yrodiere/followers","following_url":"https://api.github.com/users/yrodiere/following{/other_user}","gists_url":"https://api.github.com/users/yrodiere/gists{/gist_id}","starred_url":"https://api.github.com/users/yrodiere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yrodiere/subscriptions","organizations_url":"https://api.github.com/users/yrodiere/orgs","repos_url":"https://api.github.com/users/yrodiere/repos","events_url":"https://api.github.com/users/yrodiere/events{/privacy}","received_events_url":"https://api.github.com/users/yrodiere/received_events","type":"User","site_admin":false},"repo":{"id":120935282,"name":"hibernate-search-6-poc","full_name":"yrodiere/hibernate-search-6-poc","owner":{"login":"yrodiere","id":412878,"avatar_url":"https://avatars1.githubusercontent.com/u/412878?v=4","gravatar_id":"","url":"https://api.github.com/users/yrodiere","html_url":"https://github.com/yrodiere","followers_url":"https://api.github.com/users/yrodiere/followers","following_url":"https://api.github.com/users/yrodiere/following{/other_user}","gists_url":"https://api.github.com/users/yrodiere/gists{/gist_id}","starred_url":"https://api.github.com/users/yrodiere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yrodiere/subscriptions","organizations_url":"https://api.github.com/users/yrodiere/orgs","repos_url":"https://api.github.com/users/yrodiere/repos","events_url":"https://api.github.com/users/yrodiere/events{/privacy}","received_events_url":"https://api.github.com/users/yrodiere/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/yrodiere/hibernate-search-6-poc","description":"A proof of concept of what Hibernate Search 6 could be. WARNING: NOT FOR USE IN PRODUCTION ENVIRONMENT!","fork":true,"url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc","forks_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/forks","keys_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/teams","hooks_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/hooks","issue_events_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/issues/events{/number}","events_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/events","assignees_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/assignees{/user}","branches_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/branches{/branch}","tags_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/tags","blobs_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/git/refs{/sha}","trees_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/statuses/{sha}","languages_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/languages","stargazers_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/stargazers","contributors_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/contributors","subscribers_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/subscribers","subscription_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/subscription","commits_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/commits{/sha}","git_commits_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/git/commits{/sha}","comments_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/comments{/number}","issue_comment_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/issues/comments{/number}","contents_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/contents/{+path}","compare_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/merges","archive_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/downloads","issues_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/issues{/number}","pulls_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/pulls{/number}","milestones_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/milestones{/number}","notifications_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/labels{/name}","releases_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/releases{/id}","deployments_url":"https://api.github.com/repos/yrodiere/hibernate-search-6-poc/deployments","created_at":"2018-02-09T17:29:24Z","updated_at":"2018-04-06T10:51:47Z","pushed_at":"2018-04-13T14:32:05Z","git_url":"git://github.com/yrodiere/hibernate-search-6-poc.git","ssh_url":"git@github.com:yrodiere/hibernate-search-6-poc.git","clone_url":"https://github.com/yrodiere/hibernate-search-6-poc.git","svn_url":"https://github.com/yrodiere/hibernate-search-6-poc","homepage":"","size":2210,"stargazers_count":0,"watchers_count":0,"language":"Java","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":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"hibernate:master","ref":"master","sha":"7dbe1d74db6b98b54397a576cc03b4298ba567d4","user":{"login":"hibernate","id":348262,"avatar_url":"https://avatars1.githubusercontent.com/u/348262?v=4","gravatar_id":"","url":"https://api.github.com/users/hibernate","html_url":"https://github.com/hibernate","followers_url":"https://api.github.com/users/hibernate/followers","following_url":"https://api.github.com/users/hibernate/following{/other_user}","gists_url":"https://api.github.com/users/hibernate/gists{/gist_id}","starred_url":"https://api.github.com/users/hibernate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hibernate/subscriptions","organizations_url":"https://api.github.com/users/hibernate/orgs","repos_url":"https://api.github.com/users/hibernate/repos","events_url":"https://api.github.com/users/hibernate/events{/privacy}","received_events_url":"https://api.github.com/users/hibernate/received_events","type":"Organization","site_admin":false},"repo":{"id":95552020,"name":"hibernate-search-6-poc","full_name":"hibernate/hibernate-search-6-poc","owner":{"login":"hibernate","id":348262,"avatar_url":"https://avatars1.githubusercontent.com/u/348262?v=4","gravatar_id":"","url":"https://api.github.com/users/hibernate","html_url":"https://github.com/hibernate","followers_url":"https://api.github.com/users/hibernate/followers","following_url":"https://api.github.com/users/hibernate/following{/other_user}","gists_url":"https://api.github.com/users/hibernate/gists{/gist_id}","starred_url":"https://api.github.com/users/hibernate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hibernate/subscriptions","organizations_url":"https://api.github.com/users/hibernate/orgs","repos_url":"https://api.github.com/users/hibernate/repos","events_url":"https://api.github.com/users/hibernate/events{/privacy}","received_events_url":"https://api.github.com/users/hibernate/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/hibernate/hibernate-search-6-poc","description":"A proof of concept of what Hibernate Search 6 could be. WARNING: NOT FOR USE IN PRODUCTION ENVIRONMENT!","fork":false,"url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc","forks_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/forks","keys_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/teams","hooks_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/hooks","issue_events_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/events{/number}","events_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/events","assignees_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/assignees{/user}","branches_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/branches{/branch}","tags_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/tags","blobs_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/git/refs{/sha}","trees_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/statuses/{sha}","languages_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/languages","stargazers_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/stargazers","contributors_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/contributors","subscribers_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/subscribers","subscription_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/subscription","commits_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/commits{/sha}","git_commits_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/git/commits{/sha}","comments_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/comments{/number}","issue_comment_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/comments{/number}","contents_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/contents/{+path}","compare_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/merges","archive_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/downloads","issues_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues{/number}","pulls_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls{/number}","milestones_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/milestones{/number}","notifications_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/labels{/name}","releases_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/releases{/id}","deployments_url":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/deployments","created_at":"2017-06-27T11:39:10Z","updated_at":"2018-04-10T11:22:10Z","pushed_at":"2018-04-13T11:28:23Z","git_url":"git://github.com/hibernate/hibernate-search-6-poc.git","ssh_url":"git@github.com:hibernate/hibernate-search-6-poc.git","clone_url":"https://github.com/hibernate/hibernate-search-6-poc.git","svn_url":"https://github.com/hibernate/hibernate-search-6-poc","homepage":"","size":1811,"stargazers_count":1,"watchers_count":1,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":2,"open_issues":2,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38"},"html":{"href":"https://github.com/hibernate/hibernate-search-6-poc/pull/38"},"issue":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/38"},"comments":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/issues/38/comments"},"review_comments":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38/comments"},"review_comment":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/pulls/38/commits"},"statuses":{"href":"https://api.github.com/repos/hibernate/hibernate-search-6-poc/statuses/dc2822b46b93d4feea527b5b180a63d753676a7d"}},"author_association":"OWNER"}}
{"actor":{"display_login":"yrodiere"}}