From ec607a3e5de1f970df2d09843fc63c0e3c975845 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Jul 21 2020 15:18:16 +0000 Subject: import lucene-8.4.1-4.module+el8.2.1+6727+059d025f --- diff --git a/.gitignore b/.gitignore index d23ba53..65328f5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/solr-8.1.1-src.tgz +SOURCES/solr-8.4.1-src.tgz diff --git a/.lucene.metadata b/.lucene.metadata index ed36f32..3e830ec 100644 --- a/.lucene.metadata +++ b/.lucene.metadata @@ -1 +1 @@ -47e53290e1f5db5d0ee769d38d64e3875f2578d7 SOURCES/solr-8.1.1-src.tgz +7531a8e6e5e0b289bf781e1e0a80de79ee0176d0 SOURCES/solr-8.4.1-src.tgz diff --git a/SOURCES/0001-Disable-ivy-settings.patch b/SOURCES/0001-Disable-ivy-settings.patch index 717e5ab..68ecb0b 100644 --- a/SOURCES/0001-Disable-ivy-settings.patch +++ b/SOURCES/0001-Disable-ivy-settings.patch @@ -11,7 +11,7 @@ diff --git a/lucene/common-build.xml b/lucene/common-build.xml index 0bbd19a..6767ffe 100644 --- a/lucene/common-build.xml +++ b/lucene/common-build.xml -@@ -419,7 +419,6 @@ +@@ -438,7 +438,6 @@ you have an idea, fix it. unless="ivy.settings.uptodate" --> diff --git a/SOURCES/0002-Dependency-generation.patch b/SOURCES/0002-Dependency-generation.patch index 07be6eb..e90a4dc 100644 --- a/SOURCES/0002-Dependency-generation.patch +++ b/SOURCES/0002-Dependency-generation.patch @@ -9,40 +9,46 @@ Subject: [PATCH 2/3] Dependency generation .../lucene/dependencies/GetMavenDependenciesTask.java | 2 ++ 3 files changed, 8 insertions(+), 4 deletions(-) +diff --git a/build.xml b/build.xml +index 3d7ee87..33e5f07 100644 +--- a/build.xml ++++ b/build.xml +@@ -615,7 +615,6 @@ File | Project Structure | Platform Settings | SDKs): + + + +- + + + diff --git a/lucene/build.xml b/lucene/build.xml -index 3c1439c..23d291a 100644 +index e3cf905..facc19b 100644 --- a/lucene/build.xml +++ b/lucene/build.xml -@@ -425,12 +425,14 @@ +@@ -427,12 +427,8 @@ - - + -+ -+ +- +- +- diff --git a/lucene/common-build.xml b/lucene/common-build.xml -index 6767ffe..75f6579 100644 +index 41da3f2..d2f9d16 100644 --- a/lucene/common-build.xml +++ b/lucene/common-build.xml -@@ -1855,9 +1855,9 @@ ${ant.project.name}.test.dependencies=${test.classpath.list} - - +@@ -1876,7 +1876,7 @@ ${ant.project.name}.test.dependencies=${test.classpath.list} -- -+ + @@ -50,7 +56,7 @@ diff --git a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDepend index 610323f..13bde29 100644 --- a/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java +++ b/lucene/tools/src/java/org/apache/lucene/dependencies/GetMavenDependenciesTask.java -@@ -535,6 +535,7 @@ public class GetMavenDependenciesTask extends Task { +@@ -537,6 +537,7 @@ public class GetMavenDependenciesTask extends Task { private Collection getTransitiveDependenciesFromIvyCache (String groupId, String artifactId, String version) { SortedSet transitiveDependencies = new TreeSet<>(); @@ -58,7 +64,7 @@ index 610323f..13bde29 100644 // E.g. ~/.ivy2/cache/xerces/xercesImpl/ivy-2.9.1.xml File ivyXmlFile = new File(new File(new File(ivyCacheDir, groupId), artifactId), "ivy-" + version + ".xml"); if ( ! ivyXmlFile.exists()) { -@@ -556,6 +557,7 @@ public class GetMavenDependenciesTask extends Task { +@@ -558,6 +559,7 @@ public class GetMavenDependenciesTask extends Task { + groupId + ':' + artifactId + ':' + version + " from " + ivyXmlFile.getAbsolutePath(), e); } diff --git a/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch b/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch deleted file mode 100644 index 8a65efb..0000000 --- a/SOURCES/0003-Remove-dep-on-missing-google-geometry-library.patch +++ /dev/null @@ -1,1337 +0,0 @@ -From 9101a214c2b38c1a7bb154c3b48f4a1b3ce63ea4 Mon Sep 17 00:00:00 2001 -From: Mat Booth -Date: Thu, 14 Feb 2019 18:25:01 +0000 -Subject: [PATCH 3/3] Remove dep on missing google geometry library - ---- - lucene/CHANGES.txt | 5 - - .../s2-geometry-library-java-1.0.0.jar.sha1 | 1 - - .../s2-geometry-library-java-LICENSE-ASL.txt | 202 ------------ - .../s2-geometry-library-java-NOTICE.txt | 0 - lucene/spatial-extras/ivy.xml | 2 - - .../spatial/prefix/tree/S2PrefixTree.java | 157 --------- - .../spatial/prefix/tree/S2PrefixTreeCell.java | 297 ------------------ - .../spatial/prefix/tree/S2ShapeFactory.java | 40 --- - .../prefix/tree/SpatialPrefixTreeFactory.java | 2 - - .../spatial/spatial4j/Geo3dShapeFactory.java | 24 +- - .../spatial/prefix/tree/S2PrefixTreeTest.java | 113 ------- - .../spatial/spatial4j/Geo3dRptTest.java | 23 +- - .../lucene/spatial3d/geom/GeoS2Shape.java | 202 ------------ - .../spatial3d/geom/GeoS2ShapeFactory.java | 50 --- - .../spatial3d/geom/StandardObjects.java | 1 - - 15 files changed, 7 insertions(+), 1112 deletions(-) - delete mode 100644 lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 - delete mode 100644 lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt - delete mode 100644 lucene/licenses/s2-geometry-library-java-NOTICE.txt - delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java - delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java - delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java - delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java - delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java - delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java - -diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt -index 67aba94..eeee301 100644 ---- a/lucene/CHANGES.txt -+++ b/lucene/CHANGES.txt -@@ -690,11 +690,6 @@ New Features - (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau, - Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe) - --* LUCENE-8126: Add new spatial prefix tree (SPT) based on google S2 geometry. -- It can only be used currently with Geo3D spatial context and it provides -- improvements on indexing time for non-points shapes and on query performance. -- (Ignacio Vera, David Smiley). -- - Improvements - - * LUCENE-8081: Allow IndexWriter to opt out of flushing on indexing threads -diff --git a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 b/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 -deleted file mode 100644 -index ef4e3ee..0000000 ---- a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 -+++ /dev/null -@@ -1 +0,0 @@ --f95b25589b40b5b0965deb592445073ff3efa299 -diff --git a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt b/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt -deleted file mode 100644 -index 03c7bfc..0000000 ---- a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt -+++ /dev/null -@@ -1,202 +0,0 @@ -- -- Apache License -- Version 2.0, January 2004 -- http://www.apache.org/licenses/ -- -- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -- -- 1. Definitions. -- -- "License" shall mean the terms and conditions for use, reproduction, -- and distribution as defined by Sections 1 through 9 of this document. -- -- "Licensor" shall mean the copyright owner or entity authorized by -- the copyright owner that is granting the License. -- -- "Legal Entity" shall mean the union of the acting entity and all -- other entities that control, are controlled by, or are under common -- control with that entity. For the purposes of this definition, -- "control" means (i) the power, direct or indirect, to cause the -- direction or management of such entity, whether by contract or -- otherwise, or (ii) ownership of fifty percent (50%) or more of the -- outstanding shares, or (iii) beneficial ownership of such entity. -- -- "You" (or "Your") shall mean an individual or Legal Entity -- exercising permissions granted by this License. -- -- "Source" form shall mean the preferred form for making modifications, -- including but not limited to software source code, documentation -- source, and configuration files. -- -- "Object" form shall mean any form resulting from mechanical -- transformation or translation of a Source form, including but -- not limited to compiled object code, generated documentation, -- and conversions to other media types. -- -- "Work" shall mean the work of authorship, whether in Source or -- Object form, made available under the License, as indicated by a -- copyright notice that is included in or attached to the work -- (an example is provided in the Appendix below). -- -- "Derivative Works" shall mean any work, whether in Source or Object -- form, that is based on (or derived from) the Work and for which the -- editorial revisions, annotations, elaborations, or other modifications -- represent, as a whole, an original work of authorship. For the purposes -- of this License, Derivative Works shall not include works that remain -- separable from, or merely link (or bind by name) to the interfaces of, -- the Work and Derivative Works thereof. -- -- "Contribution" shall mean any work of authorship, including -- the original version of the Work and any modifications or additions -- to that Work or Derivative Works thereof, that is intentionally -- submitted to Licensor for inclusion in the Work by the copyright owner -- or by an individual or Legal Entity authorized to submit on behalf of -- the copyright owner. For the purposes of this definition, "submitted" -- means any form of electronic, verbal, or written communication sent -- to the Licensor or its representatives, including but not limited to -- communication on electronic mailing lists, source code control systems, -- and issue tracking systems that are managed by, or on behalf of, the -- Licensor for the purpose of discussing and improving the Work, but -- excluding communication that is conspicuously marked or otherwise -- designated in writing by the copyright owner as "Not a Contribution." -- -- "Contributor" shall mean Licensor and any individual or Legal Entity -- on behalf of whom a Contribution has been received by Licensor and -- subsequently incorporated within the Work. -- -- 2. Grant of Copyright License. Subject to the terms and conditions of -- this License, each Contributor hereby grants to You a perpetual, -- worldwide, non-exclusive, no-charge, royalty-free, irrevocable -- copyright license to reproduce, prepare Derivative Works of, -- publicly display, publicly perform, sublicense, and distribute the -- Work and such Derivative Works in Source or Object form. -- -- 3. Grant of Patent License. Subject to the terms and conditions of -- this License, each Contributor hereby grants to You a perpetual, -- worldwide, non-exclusive, no-charge, royalty-free, irrevocable -- (except as stated in this section) patent license to make, have made, -- use, offer to sell, sell, import, and otherwise transfer the Work, -- where such license applies only to those patent claims licensable -- by such Contributor that are necessarily infringed by their -- Contribution(s) alone or by combination of their Contribution(s) -- with the Work to which such Contribution(s) was submitted. If You -- institute patent litigation against any entity (including a -- cross-claim or counterclaim in a lawsuit) alleging that the Work -- or a Contribution incorporated within the Work constitutes direct -- or contributory patent infringement, then any patent licenses -- granted to You under this License for that Work shall terminate -- as of the date such litigation is filed. -- -- 4. Redistribution. You may reproduce and distribute copies of the -- Work or Derivative Works thereof in any medium, with or without -- modifications, and in Source or Object form, provided that You -- meet the following conditions: -- -- (a) You must give any other recipients of the Work or -- Derivative Works a copy of this License; and -- -- (b) You must cause any modified files to carry prominent notices -- stating that You changed the files; and -- -- (c) You must retain, in the Source form of any Derivative Works -- that You distribute, all copyright, patent, trademark, and -- attribution notices from the Source form of the Work, -- excluding those notices that do not pertain to any part of -- the Derivative Works; and -- -- (d) If the Work includes a "NOTICE" text file as part of its -- distribution, then any Derivative Works that You distribute must -- include a readable copy of the attribution notices contained -- within such NOTICE file, excluding those notices that do not -- pertain to any part of the Derivative Works, in at least one -- of the following places: within a NOTICE text file distributed -- as part of the Derivative Works; within the Source form or -- documentation, if provided along with the Derivative Works; or, -- within a display generated by the Derivative Works, if and -- wherever such third-party notices normally appear. The contents -- of the NOTICE file are for informational purposes only and -- do not modify the License. You may add Your own attribution -- notices within Derivative Works that You distribute, alongside -- or as an addendum to the NOTICE text from the Work, provided -- that such additional attribution notices cannot be construed -- as modifying the License. -- -- You may add Your own copyright statement to Your modifications and -- may provide additional or different license terms and conditions -- for use, reproduction, or distribution of Your modifications, or -- for any such Derivative Works as a whole, provided Your use, -- reproduction, and distribution of the Work otherwise complies with -- the conditions stated in this License. -- -- 5. Submission of Contributions. Unless You explicitly state otherwise, -- any Contribution intentionally submitted for inclusion in the Work -- by You to the Licensor shall be under the terms and conditions of -- this License, without any additional terms or conditions. -- Notwithstanding the above, nothing herein shall supersede or modify -- the terms of any separate license agreement you may have executed -- with Licensor regarding such Contributions. -- -- 6. Trademarks. This License does not grant permission to use the trade -- names, trademarks, service marks, or product names of the Licensor, -- except as required for reasonable and customary use in describing the -- origin of the Work and reproducing the content of the NOTICE file. -- -- 7. Disclaimer of Warranty. Unless required by applicable law or -- agreed to in writing, Licensor provides the Work (and each -- Contributor provides its Contributions) on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -- implied, including, without limitation, any warranties or conditions -- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -- PARTICULAR PURPOSE. You are solely responsible for determining the -- appropriateness of using or redistributing the Work and assume any -- risks associated with Your exercise of permissions under this License. -- -- 8. Limitation of Liability. In no event and under no legal theory, -- whether in tort (including negligence), contract, or otherwise, -- unless required by applicable law (such as deliberate and grossly -- negligent acts) or agreed to in writing, shall any Contributor be -- liable to You for damages, including any direct, indirect, special, -- incidental, or consequential damages of any character arising as a -- result of this License or out of the use or inability to use the -- Work (including but not limited to damages for loss of goodwill, -- work stoppage, computer failure or malfunction, or any and all -- other commercial damages or losses), even if such Contributor -- has been advised of the possibility of such damages. -- -- 9. Accepting Warranty or Additional Liability. While redistributing -- the Work or Derivative Works thereof, You may choose to offer, -- and charge a fee for, acceptance of support, warranty, indemnity, -- or other liability obligations and/or rights consistent with this -- License. However, in accepting such obligations, You may act only -- on Your own behalf and on Your sole responsibility, not on behalf -- of any other Contributor, and only if You agree to indemnify, -- defend, and hold each Contributor harmless for any liability -- incurred by, or claims asserted against, such Contributor by reason -- of your accepting any such warranty or additional liability. -- -- END OF TERMS AND CONDITIONS -- -- APPENDIX: How to apply the Apache License to your work. -- -- To apply the Apache License to your work, attach the following -- boilerplate notice, with the fields enclosed by brackets "[]" -- replaced with your own identifying information. (Don't include -- the brackets!) The text should be enclosed in the appropriate -- comment syntax for the file format. We also recommend that a -- file or class name and description of purpose be included on the -- same "printed page" as the copyright notice for easier -- identification within third-party archives. -- -- Copyright [yyyy] [name of copyright owner] -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and --limitations under the License. -\ No newline at end of file -diff --git a/lucene/licenses/s2-geometry-library-java-NOTICE.txt b/lucene/licenses/s2-geometry-library-java-NOTICE.txt -deleted file mode 100644 -index e69de29..0000000 -diff --git a/lucene/spatial-extras/ivy.xml b/lucene/spatial-extras/ivy.xml -index c3d982f..df67503 100644 ---- a/lucene/spatial-extras/ivy.xml -+++ b/lucene/spatial-extras/ivy.xml -@@ -25,8 +25,6 @@ - - - -- -- - - - -diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java -deleted file mode 100644 -index f77c578..0000000 ---- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java -+++ /dev/null -@@ -1,157 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial.prefix.tree; -- --import java.util.ArrayList; --import java.util.List; -- --import com.google.common.geometry.S2CellId; --import com.google.common.geometry.S2LatLng; --import com.google.common.geometry.S2Projections; --import org.apache.lucene.util.BytesRef; --import org.locationtech.spatial4j.context.SpatialContext; --import org.locationtech.spatial4j.distance.DistanceUtils; --import org.locationtech.spatial4j.shape.Point; --import org.locationtech.spatial4j.shape.Shape; -- --/** -- * Spatial prefix tree for S2 Geometry. Shape factories -- * for the given {@link SpatialContext} must implement the interface {@link S2ShapeFactory}. -- * -- * The tree can be configured on how it divided itself by providing an arity. The default arity is 1 -- * which divided every sub-cell in 4 (except the first level that is always divided by 6) . Arity 2 -- * divides sub-cells in 16 and arity 3 in 64 sub-cells. -- * -- * @lucene.experimental -- */ --public class S2PrefixTree extends SpatialPrefixTree { -- -- -- /** -- * Factory for creating {@link S2PrefixTree} instances with useful defaults -- */ -- protected static class Factory extends SpatialPrefixTreeFactory { -- -- @Override -- protected int getLevelForDistance(double degrees) { -- S2PrefixTree grid = new S2PrefixTree(ctx, S2PrefixTree.getMaxLevels(1)); -- return grid.getLevelForDistance(degrees); -- } -- -- @Override -- protected SpatialPrefixTree newSPT() { -- return new S2PrefixTree(ctx, -- maxLevels != null ? maxLevels : S2PrefixTree.getMaxLevels(1)); -- } -- -- } -- -- //factory to generate S2 cell shapes -- protected final S2ShapeFactory s2ShapeFactory; -- protected final int arity; -- -- /** -- * Creates a S2 spatial tree with arity 1. -- * -- * @param ctx The provided spatial context. The shape factor of the spatial context -- * must implement {@link S2ShapeFactory} -- * @param maxLevels The provided maximum level for this tree. -- */ -- public S2PrefixTree(SpatialContext ctx, int maxLevels) { -- this(ctx, maxLevels, 1); -- } -- -- /** -- * Creates a S2 spatial tree with provided arity. -- * -- * @param ctx The provided spatial context. The shape factor of the spatial context -- * must implement {@link S2ShapeFactory} -- * @param maxLevels The provided maximum level for this tree. -- * @param arity The arity of the tree. -- */ -- public S2PrefixTree(SpatialContext ctx, int maxLevels, int arity) { -- super(ctx, maxLevels); -- if (!(ctx.getShapeFactory() instanceof S2ShapeFactory)) { -- throw new IllegalArgumentException("Spatial context does not support S2 spatial index."); -- } -- this.s2ShapeFactory = (S2ShapeFactory) ctx.getShapeFactory(); -- if (arity <1 || arity > 3) { -- throw new IllegalArgumentException("Invalid value for S2 tree arity. Possible values are 1, 2 or 3. Provided value is " + arity + "."); -- } -- this.arity = arity; -- } -- -- /** -- * Get max levels for this spatial tree. -- * -- * @param arity The arity of the tree. -- * @return The maximum number of levels by the provided arity. -- */ -- public static int getMaxLevels(int arity) { -- return S2CellId.MAX_LEVEL/arity + 1; -- } -- -- @Override -- public int getLevelForDistance(double dist) { -- if (dist == 0){ -- return maxLevels; -- } -- int level = S2Projections.MAX_WIDTH.getMinLevel(dist * DistanceUtils.DEGREES_TO_RADIANS); -- int roundLevel = level % arity != 0 ? 1 : 0; -- level = level/arity + roundLevel; -- return Math.min(maxLevels, level + 1); -- } -- -- @Override -- public double getDistanceForLevel(int level) { -- if (level == 0) { -- return 180; -- } -- return S2Projections.MAX_WIDTH.getValue(arity * (level - 1)) * DistanceUtils.RADIANS_TO_DEGREES; -- } -- -- @Override -- public Cell getWorldCell() { -- return new S2PrefixTreeCell(this, null); -- } -- -- @Override -- public Cell readCell(BytesRef term, Cell scratch) { -- S2PrefixTreeCell cell = (S2PrefixTreeCell) scratch; -- if (cell == null) { -- cell = (S2PrefixTreeCell) getWorldCell(); -- } -- cell.readCell(this, term); -- return cell; -- } -- -- @Override -- public CellIterator getTreeCellIterator(Shape shape, int detailLevel) { -- if (!(shape instanceof Point)) { -- return super.getTreeCellIterator(shape, detailLevel); -- } -- Point p = (Point) shape; -- S2CellId id = S2CellId.fromLatLng(S2LatLng.fromDegrees(p.getY(), p.getX())).parent(arity * (detailLevel - 1)); -- List cells = new ArrayList<>(detailLevel); -- for (int i=0; i < detailLevel - 1; i++) { -- cells.add(new S2PrefixTreeCell(this, id.parent(i * arity))); -- } -- cells.add(new S2PrefixTreeCell(this, id)); -- return new FilterCellIterator(cells.iterator(), null); -- } --} -\ No newline at end of file -diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java -deleted file mode 100644 -index e9b5818..0000000 ---- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java -+++ /dev/null -@@ -1,297 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial.prefix.tree; -- --import java.util.ArrayList; --import java.util.HashMap; --import java.util.List; --import java.util.Map; --import java.util.Objects; -- --import com.google.common.geometry.S2CellId; --import org.apache.lucene.util.BytesRef; --import org.locationtech.spatial4j.shape.Shape; --import org.locationtech.spatial4j.shape.SpatialRelation; -- --/** -- * This class represents a S2 pixel in the RPT. -- * -- * @lucene.internal -- */ --class S2PrefixTreeCell implements CellCanPrune { -- -- //Faces of S2 Geometry -- private static S2CellId[] FACES = new S2CellId[6]; -- -- static { -- FACES[0] = S2CellId.fromFacePosLevel(0, 0, 0); -- FACES[1] = S2CellId.fromFacePosLevel(1, 0, 0); -- FACES[2] = S2CellId.fromFacePosLevel(2, 0, 0); -- FACES[3] = S2CellId.fromFacePosLevel(3, 0, 0); -- FACES[4] = S2CellId.fromFacePosLevel(4, 0, 0); -- FACES[5] = S2CellId.fromFacePosLevel(5, 0, 0); -- } -- -- /*Special character to define a cell leaf*/ -- private static final byte LEAF = '+'; -- /*Tokens are used to serialize cells*/ -- private static final byte[] TOKENS = {'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', -- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; -- /*Map containing mapping between tokens and integer values*/ -- private static final Map PIXELS; -- -- static { -- PIXELS = new HashMap<>(TOKENS.length); -- for (int i = 0; i < TOKENS.length; i++) { -- PIXELS.put(TOKENS[i], i); -- } -- } -- -- S2CellId cellId; -- int level; //cache level -- S2PrefixTree tree; -- -- SpatialRelation shapeRel = null; -- boolean isLeaf; -- Shape shape = null; -- -- S2PrefixTreeCell(S2PrefixTree tree, S2CellId cellId) { -- this.cellId = cellId; -- this.tree = tree; -- setLevel(); -- if (getLevel() == tree.getMaxLevels()) { -- setLeaf(); -- } -- } -- -- void readCell(S2PrefixTree tree, BytesRef ref) { -- isLeaf = false; -- shape = null; -- shapeRel = null; -- this.tree = tree; -- cellId = getS2CellIdFromBytesRef(ref); -- setLevel(); -- if (isLeaf(ref) || getLevel() == tree.getMaxLevels()) { -- setLeaf(); -- } -- } -- -- @Override -- public SpatialRelation getShapeRel() { -- return shapeRel; -- } -- -- @Override -- public void setShapeRel(SpatialRelation rel) { -- shapeRel = rel; -- } -- -- @Override -- public boolean isLeaf() { -- return isLeaf; -- } -- -- @Override -- public void setLeaf() { -- isLeaf = true; -- } -- -- @Override -- public BytesRef getTokenBytesWithLeaf(BytesRef result) { -- result = getTokenBytesNoLeaf(result); -- //max levels do not have leaf -- if (isLeaf() && !(getLevel() == tree.getMaxLevels())) { -- //Add leaf byte -- result.bytes[result.offset + result.length] = LEAF; -- result.length++; -- } -- return result; -- } -- -- @Override -- public BytesRef getTokenBytesNoLeaf(BytesRef result) { -- if (result == null) { -- result = new BytesRef(); -- } -- getBytesRefFromS2CellId(cellId, result); -- return result; -- } -- -- @Override -- public int getLevel() { -- return this.level; -- } -- -- /** -- * Cache level of cell. -- */ -- private void setLevel() { -- if (this.cellId == null) { -- this.level = 0; -- } else { -- assert cellId.level() % tree.arity == 0; -- this.level = (this.cellId.level() / tree.arity) + 1; -- } -- } -- -- @Override -- public CellIterator getNextLevelCells(Shape shapeFilter) { -- S2CellId[] children; -- if (cellId == null) { // this is the world cell -- children = FACES; -- } else { -- int nChildren = (int) Math.pow(4, tree.arity); -- children = new S2CellId[nChildren]; -- children[0] = cellId.childBegin(cellId.level() + tree.arity); -- for (int i = 1; i < nChildren; i++) { -- children[i] = children[i - 1].next(); -- } -- } -- List cells = new ArrayList<>(children.length); -- for (S2CellId pixel : children) { -- cells.add(new S2PrefixTreeCell(tree, pixel)); -- } -- return new FilterCellIterator(cells.iterator(), shapeFilter); -- } -- -- @Override -- public Shape getShape() { -- if (shape == null) { -- if (cellId == null) { //World cell -- shape = tree.getSpatialContext().getWorldBounds(); -- } else { -- shape = tree.s2ShapeFactory.getS2CellShape(cellId); -- } -- } -- return shape; -- } -- -- @Override -- public boolean isPrefixOf(Cell c) { -- if (cellId == null) { -- return true; -- } -- S2PrefixTreeCell cell = (S2PrefixTreeCell) c; -- return cellId.contains(cell.cellId); -- } -- -- @Override -- public int compareToNoLeaf(Cell fromCell) { -- if (cellId == null) { -- return 1; -- } -- S2PrefixTreeCell cell = (S2PrefixTreeCell) fromCell; -- return cellId.compareTo(cell.cellId); -- } -- -- /** -- * Check if a cell is a leaf. -- * -- * @param ref The Byteref of the leaf -- * @return true if it is a leaf, e.g last byte is the special Character. -- */ -- private boolean isLeaf(BytesRef ref) { -- return (ref.bytes[ref.offset + ref.length - 1] == LEAF); -- } -- -- /** -- * Get the {@link S2CellId} from the {@link BytesRef} representation. -- * -- * @param ref The bytes. -- * @return the corresponding S2 cell. -- */ -- private S2CellId getS2CellIdFromBytesRef(BytesRef ref) { -- int length = ref.length; -- if (isLeaf(ref)) { -- length--; -- } -- if (length == 0) { -- return null; //world cell -- } -- int face = PIXELS.get(ref.bytes[ref.offset]); -- S2CellId cellId = FACES[face]; -- long id = cellId.id(); -- for (int i = ref.offset + 1; i < ref.offset + length; i++) { -- int thisLevel = i - ref.offset; -- int pos = PIXELS.get(ref.bytes[i]); -- // first child at level -- id = id - (id & -id) + (1L << (2 * (S2CellId.MAX_LEVEL - thisLevel * tree.arity))); -- // next until pos -- id = id + pos * ((id & -id) << 1); -- } -- return new S2CellId(id); -- } -- -- /** -- * Codify a {@link S2CellId} into its {@link BytesRef} representation. -- * -- * @param cellId The S2 Cell id to codify. -- * @param bref The byteref representation. -- */ -- private void getBytesRefFromS2CellId(S2CellId cellId, BytesRef bref) { -- if (cellId == null) {//world cell -- bref.length = 0; -- return; -- } -- int length = getLevel() + 1; -- byte[] b = bref.bytes.length >= length ? bref.bytes : new byte[length]; -- b[0] = TOKENS[cellId.face()]; -- for (int i = 1; i < getLevel(); i++) { -- int offset = 0; -- int level = tree.arity * i; -- for (int j = 1; j < tree.arity; j++) { -- offset = 4 * offset + cellId.childPosition(level - tree.arity + j); -- } -- b[i] = TOKENS[4 * offset + cellId.childPosition(level)]; -- } -- bref.bytes = b; -- bref.length = getLevel(); -- bref.offset = 0; -- } -- -- @Override -- public int getSubCellsSize() { -- if (cellId == null) { //root node -- return 6; -- } -- return (int) Math.pow(4, tree.arity); -- } -- -- @Override -- public int hashCode() { -- if (cellId == null) { -- return super.hashCode(); -- } -- return this.cellId.hashCode(); -- } -- -- @Override -- public boolean equals(Object o) { -- S2PrefixTreeCell cell = (S2PrefixTreeCell) o; -- return Objects.equals(cellId, cell.cellId); -- } -- -- @Override -- public String toString() { -- if (cellId == null) { -- return "0"; -- } -- return cellId.toString(); -- } --} -\ No newline at end of file -diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java -deleted file mode 100644 -index 1306f60..0000000 ---- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java -+++ /dev/null -@@ -1,40 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial.prefix.tree; -- -- --import com.google.common.geometry.S2CellId; --import org.locationtech.spatial4j.shape.Shape; --import org.locationtech.spatial4j.shape.ShapeFactory; -- --/** -- * Shape factory for Spatial contexts that support S2 geometry. It is an extension of -- * Spatial4j {@link ShapeFactory}. -- * -- * @lucene.experimental -- */ --public interface S2ShapeFactory extends ShapeFactory{ -- -- /** -- * Factory method for S2 cell shapes. -- * -- * @param cellId The S2 cell id -- * @return the shape representing the cell. -- */ -- Shape getS2CellShape(S2CellId cellId); --} -diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java -index d88e41a..6e537dd 100644 ---- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java -+++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java -@@ -54,8 +54,6 @@ public abstract class SpatialPrefixTreeFactory { - instance = new QuadPrefixTree.Factory(); - else if ("packedQuad".equalsIgnoreCase(cname)) - instance = new PackedQuadPrefixTree.Factory(); -- else if ("s2".equalsIgnoreCase(cname)) -- instance = new S2PrefixTree.Factory(); - else { - try { - Class c = classLoader.loadClass(cname); -diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java -index 071c775..5c03f20 100644 ---- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java -+++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java -@@ -20,10 +20,6 @@ package org.apache.lucene.spatial.spatial4j; - import java.util.ArrayList; - import java.util.List; - --import com.google.common.geometry.S2Cell; --import com.google.common.geometry.S2CellId; --import com.google.common.geometry.S2Point; --import org.apache.lucene.spatial.prefix.tree.S2ShapeFactory; - import org.apache.lucene.spatial3d.geom.GeoBBox; - import org.apache.lucene.spatial3d.geom.GeoBBoxFactory; - import org.apache.lucene.spatial3d.geom.GeoCircle; -@@ -36,7 +32,6 @@ import org.apache.lucene.spatial3d.geom.GeoPointShape; - import org.apache.lucene.spatial3d.geom.GeoPointShapeFactory; - import org.apache.lucene.spatial3d.geom.GeoPolygon; - import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; --import org.apache.lucene.spatial3d.geom.GeoS2ShapeFactory; - import org.apache.lucene.spatial3d.geom.PlanetModel; - import org.locationtech.spatial4j.context.SpatialContext; - import org.locationtech.spatial4j.context.SpatialContextFactory; -@@ -47,13 +42,14 @@ import org.locationtech.spatial4j.shape.Point; - import org.locationtech.spatial4j.shape.Rectangle; - import org.locationtech.spatial4j.shape.Shape; - import org.locationtech.spatial4j.shape.ShapeCollection; -+import org.locationtech.spatial4j.shape.ShapeFactory; - - /** -- * Geo3d implementation of {@link S2ShapeFactory} -+ * Geo3d implementation of {@link ShapeFactory} - * - * @lucene.experimental - */ --public class Geo3dShapeFactory implements S2ShapeFactory { -+public class Geo3dShapeFactory implements ShapeFactory { - - private final boolean normWrapLongitude; - private SpatialContext context; -@@ -241,20 +237,6 @@ public class Geo3dShapeFactory implements S2ShapeFactory { - return new Geo3dMultiPolygonBuilder(); - } - -- @Override -- public Shape getS2CellShape(S2CellId cellId) { -- S2Cell cell = new S2Cell(cellId); -- GeoPoint point1 = getGeoPoint(cell.getVertexRaw(0)); -- GeoPoint point2 = getGeoPoint(cell.getVertexRaw(1)); -- GeoPoint point3 = getGeoPoint(cell.getVertexRaw(2)); -- GeoPoint point4 = getGeoPoint(cell.getVertexRaw(3)); -- return new Geo3dShape<>(GeoS2ShapeFactory.makeGeoS2Shape(planetModel, point1, point2, point3, point4), context); -- } -- -- private GeoPoint getGeoPoint(S2Point point) { -- return planetModel.createSurfacePoint(point.get(0), point.get(1), point.get(2)); -- } -- - /** - * Geo3d implementation of {@link org.locationtech.spatial4j.shape.ShapeFactory.PointsBuilder} interface to - * generate {@link GeoPoint}. -diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java -deleted file mode 100644 -index f3bfe3e..0000000 ---- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java -+++ /dev/null -@@ -1,113 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial.prefix.tree; -- --import com.carrotsearch.randomizedtesting.annotations.Repeat; --import com.google.common.geometry.S2CellId; --import com.google.common.geometry.S2Projections; --import org.apache.lucene.spatial.spatial4j.Geo3dSpatialContextFactory; --import org.apache.lucene.util.BytesRef; --import org.apache.lucene.util.LuceneTestCase; --import org.junit.Test; --import org.locationtech.spatial4j.context.SpatialContext; --import org.locationtech.spatial4j.shape.Point; -- --/** -- * Test for S2 Spatial prefix tree. -- */ --public class S2PrefixTreeTest extends LuceneTestCase{ -- -- @Test -- @Repeat(iterations = 10) -- public void testCells() { -- int face = random().nextInt(6); -- S2CellId id = S2CellId.fromFacePosLevel(face, 0, 0); -- int arity = random().nextInt(3) + 1; -- int level = random().nextInt(S2PrefixTree.getMaxLevels(arity)); -- level = level * arity; -- for (int i = 0; i < level; i++) { -- int pos = random().nextInt(4); -- id = id.childBegin(); -- if (pos == 0) continue; -- id = id.next(); -- if (pos == 1) continue; -- id = id.next(); -- if (pos == 2) continue; -- id = id.next(); -- } -- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(arity), arity); -- S2PrefixTreeCell cell = new S2PrefixTreeCell(tree, id); -- BytesRef ref = cell.getTokenBytesWithLeaf(null); -- if (random().nextBoolean()) { -- int newOffset = random().nextInt(10) + 1; -- byte[] newBytes = new byte[ref.bytes.length + newOffset]; -- for (int i = 0; i < ref.bytes.length; i++) { -- newBytes[i + newOffset] = ref.bytes[i]; -- } -- ref.bytes = newBytes; -- ref.offset = ref.offset + newOffset; -- } -- S2PrefixTreeCell cell2 = new S2PrefixTreeCell(tree, null); -- cell2.readCell(tree, ref); -- assertEquals(cell, cell2); -- } -- -- @Test -- @Repeat(iterations = 10) -- public void testDistanceAndLevels() { -- S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(1), 1); -- -- double randomDist = random().nextDouble() * 5; -- int levelDistance = tree.getLevelForDistance(randomDist); -- double distanceLevel = tree.getDistanceForLevel(levelDistance); -- assertTrue(randomDist > distanceLevel); -- -- -- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(2), 2); -- -- levelDistance = tree.getLevelForDistance(randomDist); -- distanceLevel = tree.getDistanceForLevel(levelDistance); -- assertTrue(randomDist > distanceLevel); -- -- tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(3), 3); -- -- levelDistance = tree.getLevelForDistance(randomDist); -- distanceLevel = tree.getDistanceForLevel(levelDistance); -- assertTrue(randomDist > distanceLevel); -- -- } -- -- @Test -- @Repeat(iterations = 10) -- public void testPrecision() { -- int arity = random().nextInt(3) +1; -- SpatialContext context = new Geo3dSpatialContextFactory().newSpatialContext(); -- S2PrefixTree tree = new S2PrefixTree(context, S2PrefixTree.getMaxLevels(arity), arity); -- double precision = random().nextDouble(); -- int level = tree.getLevelForDistance(precision); -- Point point = context.getShapeFactory().pointXY(0, 0); -- CellIterator iterator = tree.getTreeCellIterator(point, level); -- S2PrefixTreeCell cell = null; -- while (iterator.hasNext()) { -- cell = (S2PrefixTreeCell)iterator.next(); -- } -- assertTrue(cell.getLevel() == level); -- double precisionCell = S2Projections.MAX_WIDTH.getValue(cell.cellId.level()); -- assertTrue(precision > precisionCell); -- } --} -\ No newline at end of file -diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java -index 327b65c..cc4cd31 100644 ---- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java -+++ b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java -@@ -27,8 +27,6 @@ import org.apache.lucene.spatial.composite.CompositeSpatialStrategy; - import org.apache.lucene.spatial.prefix.RandomSpatialOpStrategyTestCase; - import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy; - import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree; --import org.apache.lucene.spatial.prefix.tree.QuadPrefixTree; --import org.apache.lucene.spatial.prefix.tree.S2PrefixTree; - import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree; - import org.apache.lucene.spatial.query.SpatialOperation; - import org.apache.lucene.spatial.serialized.SerializedDVStrategy; -@@ -36,7 +34,6 @@ import org.apache.lucene.spatial3d.geom.GeoAreaShape; - import org.apache.lucene.spatial3d.geom.GeoPath; - import org.apache.lucene.spatial3d.geom.GeoPathFactory; - import org.apache.lucene.spatial3d.geom.GeoPoint; --import org.apache.lucene.spatial3d.geom.GeoPointShape; - import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; - import org.apache.lucene.spatial3d.geom.PlanetModel; - import org.apache.lucene.spatial3d.geom.RandomGeo3dShapeGenerator; -@@ -53,18 +50,9 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { - private SpatialPrefixTree grid; - private RecursivePrefixTreeStrategy rptStrategy; - -- private void setupGrid() { -- int type = random().nextInt(4); -- if (type == 0) { -- this.grid = new GeohashPrefixTree(ctx, 2); -- } else if (type == 1) { -- this.grid = new QuadPrefixTree(ctx, 5); -- } else { -- int arity = random().nextInt(3) + 1; -- this.grid = new S2PrefixTree(ctx, 5 - arity, arity); -- } -+ private void setupGeohashGrid() { -+ this.grid = new GeohashPrefixTree(ctx, 2);//A fairly shallow grid - this.rptStrategy = newRPT(); -- this.rptStrategy.setPruneLeafyBranches(random().nextBoolean()); - } - - protected RecursivePrefixTreeStrategy newRPT() { -@@ -81,7 +69,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { - factory.planetModel = planetModel; - ctx = factory.newSpatialContext(); - -- setupGrid(); -+ setupGeohashGrid(); - - SerializedDVStrategy serializedDVStrategy = new SerializedDVStrategy(ctx, getClass().getSimpleName() + "_sdv"); - this.strategy = new CompositeSpatialStrategy("composite_" + getClass().getSimpleName(), -@@ -123,7 +111,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { - } - - @Test -- @Repeat(iterations = 30) -+ @Repeat(iterations = 10) - public void testOperations() throws IOException { - setupStrategy(); - -@@ -134,9 +122,6 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { - protected Shape randomIndexedShape() { - int type = shapeGenerator.randomShapeType(); - GeoAreaShape areaShape = shapeGenerator.randomGeoAreaShape(type, planetModel); -- if (areaShape instanceof GeoPointShape) { -- return new Geo3dPointShape((GeoPointShape) areaShape, ctx); -- } - return new Geo3dShape<>(areaShape, ctx); - } - -diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java -deleted file mode 100644 -index b4c5d06..0000000 ---- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java -+++ /dev/null -@@ -1,202 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial3d.geom; -- --import java.io.IOException; --import java.io.InputStream; --import java.io.OutputStream; -- --/** -- * Fast implementation of a polygon representing S2 geometry cell. There are no checks validating that -- * points are convex therefore users must be provide four points in CCW or the logic will fail. -- * -- * @lucene.internal -- */ --class GeoS2Shape extends GeoBasePolygon { -- -- /** The first point */ -- protected final GeoPoint point1; -- /** The second point */ -- protected final GeoPoint point2; -- /** The third point */ -- protected final GeoPoint point3; -- /** The fourth point */ -- protected final GeoPoint point4; -- -- /** The first plane */ -- protected final SidedPlane plane1; -- /** The second plane */ -- protected final SidedPlane plane2; -- /** The third plane */ -- protected final SidedPlane plane3; -- /** The fourth plane */ -- protected final SidedPlane plane4; -- -- /** Notable points for the first plane */ -- protected final GeoPoint[] plane1Points; -- /** Notable points for second plane */ -- protected final GeoPoint[] plane2Points; -- /** Notable points for third plane */ -- protected final GeoPoint[] plane3Points; -- /** Notable points for fourth plane */ -- protected final GeoPoint[] plane4Points; -- -- /** Edge point for this S2 cell */ -- protected final GeoPoint[] edgePoints; -- -- /** -- * It builds from 4 points given in CCW. It must be convex or logic will fail. -- * -- *@param planetModel is the planet model. -- *@param point1 the first point. -- *@param point2 the second point. -- *@param point3 the third point. -- *@param point4 the four point. -- */ -- public GeoS2Shape(final PlanetModel planetModel, GeoPoint point1, GeoPoint point2, GeoPoint point3, GeoPoint point4) { -- super(planetModel); -- this.point1 = point1; -- this.point2 = point2; -- this.point3 = point3; -- this.point4 = point4; -- -- // Now build the four planes -- this.plane1 = new SidedPlane(point4, point1, point2); -- this.plane2 = new SidedPlane(point1, point2, point3); -- this.plane3 = new SidedPlane(point2, point3, point4); -- this.plane4 = new SidedPlane(point3, point4, point1); -- -- //collect the notable points for the planes -- this.plane1Points = new GeoPoint[]{point1, point2}; -- this.plane2Points = new GeoPoint[]{point2, point3}; -- this.plane3Points = new GeoPoint[]{point3, point4}; -- this.plane4Points = new GeoPoint[]{point4, point1}; -- -- this.edgePoints = new GeoPoint[]{point1}; -- } -- -- /** -- * Constructor for deserialization. -- * @param planetModel is the planet model. -- * @param inputStream is the input stream. -- */ -- public GeoS2Shape(final PlanetModel planetModel, final InputStream inputStream) throws IOException { -- this(planetModel, -- (GeoPoint) SerializableObject.readObject(inputStream), -- (GeoPoint) SerializableObject.readObject(inputStream), -- (GeoPoint) SerializableObject.readObject(inputStream), -- (GeoPoint) SerializableObject.readObject(inputStream)); -- } -- -- @Override -- public void write(final OutputStream outputStream) throws IOException { -- SerializableObject.writeObject(outputStream, point1); -- SerializableObject.writeObject(outputStream, point2); -- SerializableObject.writeObject(outputStream, point3); -- SerializableObject.writeObject(outputStream, point4); -- } -- -- -- @Override -- public boolean isWithin(final double x, final double y, final double z) { -- return plane1.isWithin(x, y, z) && -- plane2.isWithin(x, y, z) && -- plane3.isWithin(x, y, z) && -- plane4.isWithin(x, y, z); -- } -- -- -- @Override -- public GeoPoint[] getEdgePoints() { -- return edgePoints; -- } -- -- @Override -- public boolean intersects(final Plane p, final GeoPoint[] notablePoints, final Membership... bounds) { -- return p.intersects(planetModel, plane1, notablePoints, plane1Points, bounds, plane2, plane4) || -- p.intersects(planetModel, plane2, notablePoints, plane2Points, bounds, plane3, plane1) || -- p.intersects(planetModel, plane3, notablePoints, plane3Points, bounds, plane4, plane2) || -- p.intersects(planetModel, plane4, notablePoints, plane4Points, bounds, plane1, plane3); -- } -- -- @Override -- public boolean intersects(GeoShape geoShape) { -- return geoShape.intersects(plane1, plane1Points, plane2, plane4) || -- geoShape.intersects(plane2, plane2Points, plane3, plane1) || -- geoShape.intersects(plane3, plane3Points, plane4, plane2) || -- geoShape.intersects(plane4, plane4Points, plane1, plane3); -- } -- -- @Override -- public void getBounds(Bounds bounds) { -- super.getBounds(bounds); -- bounds.addPlane(planetModel, plane1, plane2, plane4) -- .addPlane(planetModel, plane2, plane3, plane1) -- .addPlane(planetModel, plane3, plane4, plane2) -- .addPlane(planetModel, plane4, plane1, plane3) -- .addPoint(point1).addPoint(point2).addPoint(point3).addPoint(point4); -- } -- -- @Override -- public double outsideDistance(DistanceStyle distanceStyle, double x, double y, double z) { -- final double planeDistance1 = distanceStyle.computeDistance(planetModel, plane1, x,y,z, plane2, plane4); -- final double planeDistance2 = distanceStyle.computeDistance(planetModel, plane2, x,y,z, plane3, plane1); -- final double planeDistance3 = distanceStyle.computeDistance(planetModel, plane3, x,y,z, plane4, plane2); -- final double planeDistance4 = distanceStyle.computeDistance(planetModel, plane4, x,y,z, plane1, plane3); -- -- final double pointDistance1 = distanceStyle.computeDistance(point1, x,y,z); -- final double pointDistance2 = distanceStyle.computeDistance(point2, x,y,z); -- final double pointDistance3 = distanceStyle.computeDistance(point3, x,y,z); -- final double pointDistance4 = distanceStyle.computeDistance(point4, x,y,z); -- -- return Math.min( -- Math.min( -- Math.min(planeDistance1, planeDistance2), -- Math.min(planeDistance3, planeDistance4)), -- Math.min( -- Math.min(pointDistance1, pointDistance2), -- Math.min(pointDistance3, pointDistance4))); -- } -- -- @Override -- public boolean equals(Object o) { -- if (!(o instanceof GeoS2Shape)) -- return false; -- GeoS2Shape other = (GeoS2Shape) o; -- return super.equals(other) && other.point1.equals(point1) -- && other.point2.equals(point2) && other.point3.equals(point3) -- && other.point4.equals(point4); -- } -- -- @Override -- public int hashCode() { -- int result = super.hashCode(); -- result = 31 * result + point1.hashCode(); -- result = 31 * result + point2.hashCode(); -- result = 31 * result + point3.hashCode(); -- result = 31 * result + point4.hashCode(); -- return result; -- } -- -- @Override -- public String toString() { -- return "GeoS2Shape: {planetmodel="+planetModel+", point1=" + point1 +", point2=" + point2 +", point3=" + point3 +", point4=" + point4+ "}"; -- } -- --} -- -diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java -deleted file mode 100644 -index 848b2e6..0000000 ---- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java -+++ /dev/null -@@ -1,50 +0,0 @@ --/* -- * Licensed to the Apache Software Foundation (ASF) under one or more -- * contributor license agreements. See the NOTICE file distributed with -- * this work for additional information regarding copyright ownership. -- * The ASF licenses this file to You under the Apache License, Version 2.0 -- * (the "License"); you may not use this file except in compliance with -- * the License. You may obtain a copy of the License at -- * -- * http://www.apache.org/licenses/LICENSE-2.0 -- * -- * Unless required by applicable law or agreed to in writing, software -- * distributed under the License is distributed on an "AS IS" BASIS, -- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- * See the License for the specific language governing permissions and -- * limitations under the License. -- */ -- --package org.apache.lucene.spatial3d.geom; -- --/** -- * Class which constructs a GeoPolygon representing S2 google pixel. -- * -- * @lucene.experimental -- */ --public class GeoS2ShapeFactory { -- -- private GeoS2ShapeFactory() { -- } -- -- /** -- * Creates a convex polygon with 4 planes by providing 4 points in CCW. -- * This is a very fast shape and there are no checks that the points currently define -- * a convex shape. -- * -- * @param planetModel The planet model -- * @param point1 the first point. -- * @param point2 the second point. -- * @param point3 the third point. -- * @param point4 the four point. -- * @return the generated shape. -- */ -- public static GeoPolygon makeGeoS2Shape(final PlanetModel planetModel, -- final GeoPoint point1, -- final GeoPoint point2, -- final GeoPoint point3, -- final GeoPoint point4) { -- return new GeoS2Shape(planetModel, point1, point2, point3, point4); -- } --} -- -diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java -index 4e0acae..bcebf43 100644 ---- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java -+++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java -@@ -75,7 +75,6 @@ class StandardObjects { - classRegsitry.put(PlanetModel.class, 35); - classRegsitry.put(GeoDegeneratePath.class, 36); - classRegsitry.put(GeoExactCircle.class, 37); -- classRegsitry.put(GeoS2Shape.class, 38); - - for (Class clazz : classRegsitry.keySet()){ - codeRegsitry.put(classRegsitry.get(clazz), clazz); --- -2.20.1 - diff --git a/SPECS/lucene.spec b/SPECS/lucene.spec index 61bff07..fc05447 100644 --- a/SPECS/lucene.spec +++ b/SPECS/lucene.spec @@ -2,8 +2,8 @@ Summary: High-performance, full-featured text search engine Name: lucene -Version: 8.1.1 -Release: 2%{?dist} +Version: 8.4.1 +Release: 4%{?dist} Epoch: 0 License: ASL 2.0 URL: http://lucene.apache.org/ @@ -13,40 +13,25 @@ Source0: https://archive.apache.org/dist/lucene/solr/%{version}/solr-%{ve Patch0: 0001-Disable-ivy-settings.patch Patch1: 0002-Dependency-generation.patch -# io.sgr:s2-geometry-library-java is not present on Fedora -# This patch reverts these two commits: -# https://github.com/apache/lucene-solr/commit/e3032dd3fcc28570c5f9d2dab4961b5b07555912 -# https://github.com/apache/lucene-solr/commit/e0d6465af94b6c6f7b8d570dee97c98de572c876 -Patch2: 0003-Remove-dep-on-missing-google-geometry-library.patch - BuildRequires: ant BuildRequires: ivy-local BuildRequires: maven-local +BuildRequires: mvn(com.ibm.icu:icu4j) BuildRequires: mvn(org.apache:apache:pom:) BuildRequires: mvn(org.apache.felix:maven-bundle-plugin) %if %{without jp_minimal} -BuildRequires: mvn(com.carrotsearch.randomizedtesting:randomizedtesting-runner) -BuildRequires: mvn(com.ibm.icu:icu4j) BuildRequires: mvn(commons-codec:commons-codec) -BuildRequires: mvn(commons-logging:commons-logging) BuildRequires: mvn(javax.servlet:javax.servlet-api) BuildRequires: mvn(javax.servlet:servlet-api) BuildRequires: mvn(junit:junit) -BuildRequires: mvn(net.sourceforge.nekohtml:nekohtml) BuildRequires: mvn(org.antlr:antlr4-runtime) BuildRequires: mvn(org.apache.commons:commons-compress) -BuildRequires: mvn(org.apache.httpcomponents:httpclient) -BuildRequires: mvn(org.apache.httpcomponents:httpcore) -BuildRequires: mvn(org.carrot2:morfologik-fsa) -BuildRequires: mvn(org.carrot2:morfologik-polish) -BuildRequires: mvn(org.carrot2:morfologik-stemming) BuildRequires: mvn(org.eclipse.jetty:jetty-continuation) BuildRequires: mvn(org.eclipse.jetty:jetty-http) BuildRequires: mvn(org.eclipse.jetty:jetty-io) BuildRequires: mvn(org.eclipse.jetty:jetty-server) BuildRequires: mvn(org.eclipse.jetty:jetty-servlet) BuildRequires: mvn(org.eclipse.jetty:jetty-util) -BuildRequires: mvn(org.locationtech.spatial4j:spatial4j) BuildRequires: mvn(org.ow2.asm:asm) BuildRequires: mvn(org.ow2.asm:asm-commons) BuildRequires: mvn(xerces:xercesImpl) @@ -54,6 +39,29 @@ BuildRequires: mvn(xerces:xercesImpl) Provides: %{name}-core = %{epoch}:%{version}-%{release} +# Obsolete since F32 +# Required deps were removed from fedora +Obsoletes: %{name}-benchmark < 8.1.1-3 +Obsoletes: %{name}-demo < 8.1.1-3 +Obsoletes: %{name}-facet < 8.1.1-3 +Obsoletes: %{name}-replicator < 8.1.1-3 +Obsoletes: %{name}-spatial < 8.1.1-3 +Obsoletes: %{name}-spatial-extras < 8.1.1-3 +Obsoletes: %{name}-spatial3d < 8.1.1-3 +Obsoletes: %{name}-test-framework < 8.4.1-4 + +%if %{with jp_minimal} +# Remove left-over packages that would have broken deps when built in minimal mode +Obsoletes: %{name}-parent < %{version}-%{release} +Obsoletes: %{name}-solr-grandparent < %{version}-%{release} +Obsoletes: %{name}-expressions < %{version}-%{release} +Obsoletes: %{name}-analyzers-phonetic < %{version}-%{release} +Obsoletes: %{name}-analyzers-icu < %{version}-%{release} +Obsoletes: %{name}-analyzers-nori < %{version}-%{release} +Obsoletes: %{name}-analyzers-kuromoji < %{version}-%{release} +Obsoletes: %{name}-analyzers-stempel < %{version}-%{release} +%endif + BuildArch: noarch %description @@ -64,9 +72,12 @@ cross-platform. %package analysis Summary: Lucene Common Analyzers -# Obsoletes added in F30 +# Obsoletes since F30 # This module was removed upstream and no replacement exists -Obsoletes: %{name}-analyzers-uima < %{version}-%{release} +Obsoletes: %{name}-analyzers-uima < 8.1.1-3 +# Obsolete since F32 +# Required deps were removed from fedora +Obsoletes: %{name}-analyzers-morfologik < 8.1.1-3 %description analysis Lucene Common Analyzers. @@ -131,49 +142,11 @@ Summary: Lucene Backward Codecs Module %description backward-codecs Codecs for older versions of Lucene. -%if %{without jp_minimal} -%package parent -Summary: Parent POM for Lucene - -%description parent -Parent POM for Lucene. - -%package solr-grandparent -Summary: Lucene Solr grandparent POM - -%description solr-grandparent -Lucene Solr grandparent POM. - -%package benchmark -Summary: Lucene Benchmarking Module - -%description benchmark -Lucene Benchmarking Module. - -%package replicator -Summary: Lucene Replicator Module - -%description replicator -Lucene Replicator Module. - -%package test-framework -Summary: Apache Lucene Java Test Framework - -%description test-framework -Apache Lucene Java Test Framework. - -%package expressions -Summary: Lucene Expressions Module - -%description expressions -Dynamically computed values to sort/facet/search on based on a pluggable -grammar. - -%package demo -Summary: Lucene Demo Module +%package codecs +Summary: Codecs and postings formats for Apache Lucene -%description demo -Demo for Apache Lucene Java. +%description codecs +Codecs and postings formats for Apache Lucene. %package classification Summary: Lucene Classification Module @@ -187,35 +160,31 @@ Summary: Lucene Suggest Module %description suggest Lucene Suggest Module. -%package facet -Summary: Lucene Facets Module - -%description facet -Package for Faceted Indexing and Search. - -%package spatial -Summary: Geospatial indexing APIs for Apache Lucene +%package monitor +Summary: Lucene Monitor Module -%description spatial -Geospatial indexing APIs for Apache Lucene. +%description monitor +Lucene Monitor Module. -%package spatial-extras -Summary: Spatial Strategies for Apache Lucene +%if %{without jp_minimal} +%package parent +Summary: Parent POM for Lucene -%description spatial-extras -Spatial Strategies for Apache Lucene. +%description parent +Parent POM for Lucene. -%package spatial3d -Summary: Lucene Spatial 3D +%package solr-grandparent +Summary: Lucene Solr grandparent POM -%description spatial3d -Spatial shapes implemented using 3D planar geometry +%description solr-grandparent +Lucene Solr grandparent POM. -%package codecs -Summary: Codecs and postings formats for Apache Lucene +%package expressions +Summary: Lucene Expressions Module -%description codecs -Codecs and postings formats for Apache Lucene. +%description expressions +Dynamically computed values to sort/facet/search on based on a pluggable +grammar. %package analyzers-phonetic Summary: Lucene Phonetic Filters @@ -230,13 +199,6 @@ Summary: Lucene ICU Analysis Components Provides integration with ICU (International Components for Unicode) for stronger Unicode and internationalization support. -%package analyzers-morfologik -Summary: Lucene Morfologik Polish Lemmatizer - -%description analyzers-morfologik -A dictionary-driven lemmatizer for Polish (includes morphosyntactic -annotations). - %package analyzers-nori Summary: An analyzer with morphological analysis for Korean @@ -255,7 +217,7 @@ Summary: Lucene Stempel Analyzer %description analyzers-stempel Lucene Stempel Analyzer. -%endif # without jp_minimal +%endif %package javadoc Summary: Javadoc for Lucene @@ -268,21 +230,16 @@ Summary: Javadoc for Lucene %patch0 -p1 %patch1 -p1 -%patch2 -p1 rm -rf solr find -name "*.jar" -delete +mkdir -p lucene/build/analysis/{kuromoji,nori} + # don't generate uses clauses in osgi metadata sed -i -e "//a<_nouses>true" dev-tools/maven/pom.xml.template -# make the target public -sed -i 's/-filter-pom-templates/filter-pom-templates/' lucene/common-build.xml - -# suggest provides spellchecker -%mvn_alias :%{name}-suggest :%{name}-spellchecker - # compatibility with existing packages %mvn_alias :%{name}-analyzers-common :%{name}-analyzers @@ -293,8 +250,9 @@ sed -i 's/-filter-pom-templates/filter-pom-templates/' lucene/common-build.xml %build pushd %{name} find -maxdepth 2 -type d -exec mkdir -p '{}/lib' \; -# generate dependencies -ant -f common-build.xml filter-pom-templates -Divy.mode=local -Dversion=%{version} -Divy.available=true + +# generate maven dependencies +ant -f build.xml generate-maven-artifacts -Divy.mode=local -Dversion=%{version} -Divy.available=true # fix source dir + move to expected place for pom in `find build/poms/%{name} -name pom.xml`; do @@ -303,15 +261,6 @@ done %pom_disable_module src/test core %pom_disable_module src/test codecs -# unresolvable test dep -%pom_remove_dep org.locationtech.spatial4j:spatial4j::test spatial-extras - -# currently unavailable in Fedora -%pom_remove_dep ua.net.nlp:morfologik-ukrainian-search analysis/morfologik - -# test deps -%pom_add_dep org.antlr:antlr-runtime::test demo - popd mv lucene/build/poms/pom.xml . @@ -344,24 +293,26 @@ mv lucene/build/poms/pom.xml . %pom_remove_plugin -r :forbiddenapis %pom_remove_plugin -r :buildnumber-maven-plugin -%if %{with jp_minimal} +# don't build modules for which deps are not in fedora or not new enough in fedora pushd lucene -%pom_disable_module codecs -%pom_disable_module test-framework %pom_disable_module benchmark -%pom_disable_module classification %pom_disable_module demo -%pom_disable_module expressions +%pom_disable_module test-framework %pom_disable_module facet %pom_disable_module replicator %pom_disable_module spatial %pom_disable_module spatial-extras %pom_disable_module spatial3d -%pom_disable_module suggest +%pom_disable_module opennlp analysis +%pom_disable_module morfologik analysis +popd + +%if %{with jp_minimal} +pushd lucene +%pom_disable_module expressions %pom_disable_module icu analysis %pom_disable_module kuromoji analysis -%pom_disable_module morfologik analysis %pom_disable_module phonetic analysis %pom_disable_module stempel analysis %pom_disable_module nori analysis @@ -371,11 +322,6 @@ popd %mvn_package :lucene-solr-grandparent __noinstall %endif -# OpenNLP is not new enough in Fedora, always disable for now -pushd lucene -%pom_disable_module opennlp analysis -popd - # For some reason TestHtmlParser.testTurkish fails when building inside SCLs %mvn_build -s -f @@ -401,24 +347,16 @@ popd %files queryparser -f .mfiles-%{name}-queryparser %files sandbox -f .mfiles-%{name}-sandbox %files backward-codecs -f .mfiles-%{name}-backward-codecs +%files codecs -f .mfiles-%{name}-codecs +%files classification -f .mfiles-%{name}-classification +%files suggest -f .mfiles-%{name}-suggest +%files monitor -f .mfiles-%{name}-monitor %if %{without jp_minimal} %files parent -f .mfiles-%{name}-parent %files solr-grandparent -f .mfiles-%{name}-solr-grandparent -%files benchmark -f .mfiles-%{name}-benchmark -%files replicator -f .mfiles-%{name}-replicator -%files test-framework -f .mfiles-%{name}-test-framework %files expressions -f .mfiles-%{name}-expressions -%files demo -f .mfiles-%{name}-demo -%files classification -f .mfiles-%{name}-classification -%files suggest -f .mfiles-%{name}-suggest -%files facet -f .mfiles-%{name}-facet -%files spatial -f .mfiles-%{name}-spatial -%files spatial-extras -f .mfiles-%{name}-spatial-extras -%files spatial3d -f .mfiles-%{name}-spatial3d -%files codecs -f .mfiles-%{name}-codecs %files analyzers-phonetic -f .mfiles-%{name}-analyzers-phonetic %files analyzers-icu -f .mfiles-%{name}-analyzers-icu -%files analyzers-morfologik -f .mfiles-%{name}-analyzers-morfologik %files analyzers-nori -f .mfiles-%{name}-analyzers-nori %files analyzers-kuromoji -f .mfiles-%{name}-analyzers-kuromoji %files analyzers-stempel -f .mfiles-%{name}-analyzers-stempel @@ -428,6 +366,25 @@ popd %license lucene/LICENSE.txt lucene/NOTICE.txt %changelog +* Wed May 06 2020 Mat Booth - 0:8.4.1-4 +- Fix jp_minimal mode + +* Tue May 5 2020 Alexander Kurtakov - 0:8.4.1-3 +- Disable test-framework as its dependency (randomizedtesting) is removed. + +* Sat Mar 21 2020 Mat Booth - 0:8.4.1-2 +- Fix deps for minimal mode + +* Sat Mar 21 2020 Mat Booth - 0:8.4.1-1 +- Update to latest upstream release + +* Wed Jan 29 2020 Fedora Release Engineering - 0:8.1.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Nov 28 2019 Mat Booth - 0:8.1.1-3 +- Drop spatial, morfologik, replicator, demo and benchmark modules due to missing deps +- Fix obsoletes when built in minimal mode + * Thu Jun 13 2019 Mat Booth - 0:8.1.1-2 - Enable additional module in jp_minimal mode