You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2013/05/30 09:53:46 UTC

svn commit: r1487777 [2/50] - in /lucene/dev/branches/security: ./ dev-tools/ dev-tools/eclipse/dot.settings/ dev-tools/idea/.idea/ dev-tools/idea/.idea/libraries/ dev-tools/idea/lucene/replicator/ dev-tools/maven/ dev-tools/maven/lucene/ dev-tools/mav...

Modified: lucene/dev/branches/security/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/build.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/build.xml (original)
+++ lucene/dev/branches/security/build.xml Thu May 30 07:53:18 2013
@@ -210,7 +210,7 @@
 
     <echo>
       SUCCESS: You must right-click your project and choose Refresh.
-               Your project must use a Java 6 JRE.
+               Your project must use a Java 7 JRE.
     </echo>
   </target>
 
@@ -268,23 +268,20 @@
   <property name="fakeRelease" location="lucene/build/fakeRelease"/>
   <property name="fakeReleaseTmp" location="lucene/build/fakeReleaseTmp"/>
   <property name="fakeReleaseVersion" value="5.0.0"/> <!-- *not* -SNAPSHOT, the real version -->
+  <property name="smokeTestRelease.testArgs" value=""/>
 
   <target name="-load-env">
      <!-- load the properties only here, so not on every invocation /usr/bin/env is called: -->
      <property environment="env"/>
   </target>
   
-  <target name="-env-JAVA6_HOME" depends="-load-env" if="env.JAVA6_HOME">
-     <property name="JAVA6_HOME" value="${env.JAVA6_HOME}"/>
-  </target>
-  
   <target name="-env-JAVA7_HOME" depends="-load-env" if="env.JAVA7_HOME">
      <property name="JAVA7_HOME" value="${env.JAVA7_HOME}"/>
   </target>
   
-  <target name="nightly-smoke" description="Builds an unsigned release and smoke tests it" depends="clean,-env-JAVA6_HOME,-env-JAVA7_HOME">
-   <fail unless="JAVA6_HOME">JAVA6_HOME property or environment variable is not defined.</fail>
+  <target name="nightly-smoke" description="Builds an unsigned release and smoke tests it" depends="clean,-env-JAVA7_HOME">
    <fail unless="JAVA7_HOME">JAVA7_HOME property or environment variable is not defined.</fail>
+   <property name="svnversion.exe" value="svnversion" />
    <subant target="prepare-release-no-sign" inheritall="false" failonerror="true">
      <fileset dir="lucene" includes="build.xml" />
      <fileset dir="solr" includes="build.xml" />
@@ -306,10 +303,12 @@
      <arg value="-B"/>
      <arg file="dev-tools/scripts/smokeTestRelease.py"/>
      <arg value="${fakeRelease.uri}"/>
+     <arg value="skip"/>
      <arg value="${fakeReleaseVersion}"/>
      <arg file="${fakeReleaseTmp}"/>
      <arg value="false"/>
-     <env key="JAVA6_HOME" file="${JAVA6_HOME}"/>
+     <arg value="-testArgs"/>
+     <arg value="${smokeTestRelease.testArgs}"/>
      <env key="JAVA7_HOME" file="${JAVA7_HOME}"/>
    </exec>
    <delete dir="${fakeRelease}"/>

Modified: lucene/dev/branches/security/dev-tools/eclipse/dot.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/eclipse/dot.settings/org.eclipse.jdt.core.prefs?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/eclipse/dot.settings/org.eclipse.jdt.core.prefs (original)
+++ lucene/dev/branches/security/dev-tools/eclipse/dot.settings/org.eclipse.jdt.core.prefs Thu May 30 07:53:18 2013
@@ -1,7 +1,7 @@
 #Sun Sep 23 13:02:27 EDT 2012
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
@@ -18,7 +18,7 @@ org.eclipse.jdt.core.compiler.problem.mi
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.7
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0

Modified: lucene/dev/branches/security/dev-tools/idea/.idea/ant.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/idea/.idea/ant.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/idea/.idea/ant.xml (original)
+++ lucene/dev/branches/security/dev-tools/idea/.idea/ant.xml Thu May 30 07:53:18 2013
@@ -27,6 +27,7 @@
     <buildFile url="file://$PROJECT_DIR$/lucene/misc/build.xml" />
     <buildFile url="file://$PROJECT_DIR$/lucene/queries/build.xml" />
     <buildFile url="file://$PROJECT_DIR$/lucene/queryparser/build.xml" />
+    <buildFile url="file://$PROJECT_DIR$/lucene/replicator/build.xml" />
     <buildFile url="file://$PROJECT_DIR$/lucene/sandbox/build.xml" />
     <buildFile url="file://$PROJECT_DIR$/lucene/spatial/build.xml" />
     <buildFile url="file://$PROJECT_DIR$/lucene/suggest/build.xml" />

Modified: lucene/dev/branches/security/dev-tools/idea/.idea/libraries/JUnit.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/idea/.idea/libraries/JUnit.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/idea/.idea/libraries/JUnit.xml (original)
+++ lucene/dev/branches/security/dev-tools/idea/.idea/libraries/JUnit.xml Thu May 30 07:53:18 2013
@@ -2,7 +2,7 @@
   <library name="JUnit">
     <CLASSES>
       <root url="jar://$PROJECT_DIR$/lucene/test-framework/lib/junit-4.10.jar!/" />
-      <root url="jar://$PROJECT_DIR$/lucene/test-framework/lib/randomizedtesting-runner-2.0.8.jar!/" />
+      <root url="jar://$PROJECT_DIR$/lucene/test-framework/lib/randomizedtesting-runner-2.0.10.jar!/" />
     </CLASSES>
     <JAVADOC />
     <SOURCES />

Modified: lucene/dev/branches/security/dev-tools/idea/.idea/misc.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/idea/.idea/misc.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/idea/.idea/misc.xml (original)
+++ lucene/dev/branches/security/dev-tools/idea/.idea/misc.xml Thu May 30 07:53:18 2013
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6"/>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7"/>
 </project>
 

Modified: lucene/dev/branches/security/dev-tools/idea/.idea/modules.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/idea/.idea/modules.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/idea/.idea/modules.xml (original)
+++ lucene/dev/branches/security/dev-tools/idea/.idea/modules.xml Thu May 30 07:53:18 2013
@@ -31,6 +31,7 @@
       <module filepath="$PROJECT_DIR$/lucene/misc/misc.iml" />
       <module filepath="$PROJECT_DIR$/lucene/queries/queries.iml" />
       <module filepath="$PROJECT_DIR$/lucene/queryparser/queryparser.iml" />
+      <module filepath="$PROJECT_DIR$/lucene/replicator/replicator.iml" />
       <module filepath="$PROJECT_DIR$/lucene/sandbox/sandbox.iml" />
       <module filepath="$PROJECT_DIR$/lucene/spatial/spatial.iml" />
       <module filepath="$PROJECT_DIR$/lucene/suggest/suggest.iml" />

Modified: lucene/dev/branches/security/dev-tools/idea/.idea/workspace.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/idea/.idea/workspace.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/idea/.idea/workspace.xml (original)
+++ lucene/dev/branches/security/dev-tools/idea/.idea/workspace.xml Thu May 30 07:53:18 2013
@@ -144,6 +144,13 @@
       <option name="VM_PARAMETERS" value="-ea -DtempDir=temp" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
+    <configuration default="false" name="Module replicator" type="JUnit" factoryName="JUnit">
+      <module name="replicator" />
+      <option name="TEST_OBJECT" value="package" />
+      <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/idea-build/lucene/replicator" />
+      <option name="VM_PARAMETERS" value="-ea -DtempDir=temp" />
+      <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
+    </configuration>
     <configuration default="false" name="Module sandbox" type="JUnit" factoryName="JUnit">
       <module name="sandbox" />
       <option name="TEST_OBJECT" value="package" />
@@ -235,7 +242,7 @@
       <option name="VM_PARAMETERS" value="-ea" />
       <option name="TEST_SEARCH_SCOPE"><value defaultName="singleModule" /></option>
     </configuration>
-    <list size="33">
+    <list size="34">
       <item index="0" class="java.lang.String" itemvalue="JUnit.Lucene core" />
       <item index="1" class="java.lang.String" itemvalue="JUnit.Module analyzers-common" />
       <item index="2" class="java.lang.String" itemvalue="JUnit.Module analyzers-icu" />
@@ -256,19 +263,20 @@
       <item index="17" class="java.lang.String" itemvalue="JUnit.Module misc" />
       <item index="18" class="java.lang.String" itemvalue="JUnit.Module queries" />
       <item index="19" class="java.lang.String" itemvalue="JUnit.Module queryparser" />
-      <item index="20" class="java.lang.String" itemvalue="JUnit.Module sandbox" />
-      <item index="21" class="java.lang.String" itemvalue="JUnit.Module spatial" />
-      <item index="22" class="java.lang.String" itemvalue="JUnit.Module suggest" />
-      <item index="23" class="java.lang.String" itemvalue="JUnit.Solr core" />
-      <item index="24" class="java.lang.String" itemvalue="JUnit.Solr analysis-extras contrib" />
-      <item index="25" class="java.lang.String" itemvalue="JUnit.Solr clustering contrib" />
-      <item index="26" class="java.lang.String" itemvalue="JUnit.Solr dataimporthandler contrib" />
-      <item index="27" class="java.lang.String" itemvalue="JUnit.Solr dataimporthandler-extras contrib" />
-      <item index="28" class="java.lang.String" itemvalue="JUnit.Solr extraction contrib" />
-      <item index="29" class="java.lang.String" itemvalue="JUnit.Solr langid contrib" />
-      <item index="30" class="java.lang.String" itemvalue="JUnit.Solr uima contrib" />
-      <item index="31" class="java.lang.String" itemvalue="JUnit.Solr velocity contrib" />
-      <item index="32" class="java.lang.String" itemvalue="JUnit.Solrj" />
+      <item index="20" class="java.lang.String" itemvalue="JUnit.Module replicator" />
+      <item index="21" class="java.lang.String" itemvalue="JUnit.Module sandbox" />
+      <item index="22" class="java.lang.String" itemvalue="JUnit.Module spatial" />
+      <item index="23" class="java.lang.String" itemvalue="JUnit.Module suggest" />
+      <item index="24" class="java.lang.String" itemvalue="JUnit.Solr core" />
+      <item index="25" class="java.lang.String" itemvalue="JUnit.Solr analysis-extras contrib" />
+      <item index="26" class="java.lang.String" itemvalue="JUnit.Solr clustering contrib" />
+      <item index="27" class="java.lang.String" itemvalue="JUnit.Solr dataimporthandler contrib" />
+      <item index="28" class="java.lang.String" itemvalue="JUnit.Solr dataimporthandler-extras contrib" />
+      <item index="29" class="java.lang.String" itemvalue="JUnit.Solr extraction contrib" />
+      <item index="30" class="java.lang.String" itemvalue="JUnit.Solr langid contrib" />
+      <item index="31" class="java.lang.String" itemvalue="JUnit.Solr uima contrib" />
+      <item index="32" class="java.lang.String" itemvalue="JUnit.Solr velocity contrib" />
+      <item index="33" class="java.lang.String" itemvalue="JUnit.Solrj" />
     </list>
   </component>
 </project>

Modified: lucene/dev/branches/security/dev-tools/maven/README.maven
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/README.maven?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/README.maven (original)
+++ lucene/dev/branches/security/dev-tools/maven/README.maven Thu May 30 07:53:18 2013
@@ -36,7 +36,7 @@ A. How to use nightly Jenkins-built Luce
 
 B. How to generate Lucene/Solr Maven artifacts
 
-   Prerequisites: JDK 1.6+ and Ant 1.8.2+
+   Prerequisites: JDK 1.7+ and Ant 1.8.2+
 
    Run 'ant generate-maven-artifacts' to create an internal Maven
    repository, including POMs, binary .jars, source .jars, and javadoc
@@ -50,7 +50,7 @@ B. How to generate Lucene/Solr Maven art
 
 C. How to deploy Maven artifacts to a repository
 
-   Prerequisites: JDK 1.6+ and Ant 1.8.2+
+   Prerequisites: JDK 1.7+ and Ant 1.8.2+
 
    You can deploy targets for all of Lucene/Solr, only Lucene, or only Solr,
    as in B. above.  To deploy to a Maven repository, the command is the same
@@ -77,7 +77,7 @@ D. How to use Maven to build Lucene/Solr
 
    The details, followed by some example Maven commands:
 
-   1. Prerequisites: JDK 1.6+ and Maven 2.2.1 or 3.0.X
+   1. Prerequisites: JDK 1.7+ and Maven 2.2.1 or 3.0.X
 
    2. Make sure your sources are up to date.  If you checked your sources out
       from the Apache Subversion repository, run "svn update" from the top

Modified: lucene/dev/branches/security/dev-tools/maven/lucene/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/lucene/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/lucene/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/lucene/pom.xml.template Thu May 30 07:53:18 2013
@@ -55,6 +55,7 @@
     <module>misc</module>
     <module>queries</module>
     <module>queryparser</module>
+    <module>replicator</module>
     <module>sandbox</module>
     <module>spatial</module>
     <module>suggest</module>

Modified: lucene/dev/branches/security/dev-tools/maven/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/pom.xml.template Thu May 30 07:53:18 2013
@@ -43,9 +43,10 @@
     <vc-browse-base-url>http://svn.apache.org/viewvc/lucene/dev/trunk</vc-browse-base-url>
     <base.specification.version>5.0.0</base.specification.version>
     <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
-    <java.compat.version>1.6</java.compat.version>
-    <jetty.version>8.1.8.v20121106</jetty.version>
-    <slf4j.version>1.6.4</slf4j.version>
+    <java.compat.version>1.7</java.compat.version>
+    <jetty.version>8.1.10.v20130312</jetty.version>
+    <slf4j.version>1.6.6</slf4j.version>
+    <log4j.version>1.2.16</log4j.version>
     <tika.version>1.3</tika.version>
     <httpcomponents.version>4.2.3</httpcomponents.version>
     <commons-io.version>2.1</commons-io.version>
@@ -148,7 +149,7 @@
       <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
-        <version>13.0.1</version>
+        <version>14.0.1</version>
       </dependency>
       <dependency>
         <groupId>commons-codec</groupId>
@@ -198,6 +199,11 @@
         </exclusions>
       </dependency>
       <dependency>
+        <groupId>org.noggit</groupId>
+        <artifactId>noggit</artifactId>
+        <version>0.5</version>
+      </dependency>
+      <dependency>
         <groupId>commons-lang</groupId>
         <artifactId>commons-lang</artifactId>
         <version>2.6</version>
@@ -408,20 +414,25 @@
       </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-api</artifactId>
+        <artifactId>jul-to-slf4j</artifactId>
         <version>${slf4j.version}</version>
-      </dependency> 
+      </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-jdk14</artifactId>
+        <artifactId>slf4j-api</artifactId>
         <version>${slf4j.version}</version>
-      </dependency> 
+      </dependency>
       <dependency>
         <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-simple</artifactId>
+        <artifactId>slf4j-log4j12</artifactId>
         <version>${slf4j.version}</version>
       </dependency>
       <dependency>
+        <groupId>log4j</groupId>
+        <artifactId>log4j</artifactId>
+        <version>${log4j.version}</version>
+      </dependency>
+      <dependency>
         <groupId>org.eclipse.jetty.orbit</groupId>
         <artifactId>javax.servlet</artifactId>
         <version>3.0.0.v201112011016</version>
@@ -450,7 +461,7 @@
       <dependency>
         <groupId>com.carrotsearch.randomizedtesting</groupId>
         <artifactId>randomizedtesting-runner</artifactId>
-        <version>2.0.8</version>
+        <version>2.0.10</version>
       </dependency>
     </dependencies>
   </dependencyManagement>
@@ -476,10 +487,10 @@
         <plugin>
           <groupId>de.thetaphi</groupId>
           <artifactId>forbiddenapis</artifactId>
-          <version>1.2</version>
+          <version>1.3</version>
           <configuration>
             <!--
-              This is the default setting, we don't support Java 8 at the moment.
+              This is the default setting, we don't support too new Java versions.
               The checker simply passes by default and only prints a warning.
              -->
             <failOnUnsupportedJava>false</failOnUnsupportedJava>

Modified: lucene/dev/branches/security/dev-tools/maven/solr/core/src/java/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/solr/core/src/java/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/solr/core/src/java/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/solr/core/src/java/pom.xml.template Thu May 30 07:53:18 2013
@@ -71,6 +71,7 @@
       <groupId>org.apache.lucene</groupId>
       <artifactId>lucene-analyzers-morfologik</artifactId>
       <version>${project.version}</version>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>org.apache.lucene</groupId>
@@ -146,14 +147,6 @@
       <version>${restlet.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-    </dependency>
-    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>

Modified: lucene/dev/branches/security/dev-tools/maven/solr/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/solr/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/solr/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/solr/pom.xml.template Thu May 30 07:53:18 2013
@@ -86,12 +86,28 @@
   <dependencies>
     <dependency>
       <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jul-to-slf4j</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
+      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-      <scope>test</scope>
+      <artifactId>slf4j-log4j12</artifactId>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <optional>true</optional>
     </dependency>
   </dependencies>
   <build>

Modified: lucene/dev/branches/security/dev-tools/maven/solr/solrj/src/java/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/solr/solrj/src/java/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/solr/solrj/src/java/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/solr/solrj/src/java/pom.xml.template Thu May 30 07:53:18 2013
@@ -77,15 +77,14 @@
       </exclusions>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.noggit</groupId>
+      <artifactId>noggit</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <!-- HttpSolrServer requires this dependency. -->

Modified: lucene/dev/branches/security/dev-tools/maven/solr/webapp/pom.xml.template
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/maven/solr/webapp/pom.xml.template?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/maven/solr/webapp/pom.xml.template (original)
+++ lucene/dev/branches/security/dev-tools/maven/solr/webapp/pom.xml.template Thu May 30 07:53:18 2013
@@ -57,15 +57,6 @@
       <artifactId>javax.servlet</artifactId>
       <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-jdk14</artifactId>
-      <scope>runtime</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>jcl-over-slf4j</artifactId>
-    </dependency>
   </dependencies>
   <build>
     <directory>${build-directory}</directory>

Modified: lucene/dev/branches/security/dev-tools/scripts/buildAndPushRelease.py
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/scripts/buildAndPushRelease.py?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/scripts/buildAndPushRelease.py (original)
+++ lucene/dev/branches/security/dev-tools/scripts/buildAndPushRelease.py Thu May 30 07:53:18 2013
@@ -15,9 +15,11 @@
 
 import datetime
 import re
+import time
 import shutil
 import os
 import sys
+import subprocess
 
 # Usage: python3.2 -u buildAndPushRelease.py [-sign gpgKey(eg: 6E68DA61)] [-prepare] [-push userName] [-pushLocal dirName] [-smoke tmpDir] /path/to/checkout version(eg: 3.4.0) rcNum(eg: 0)
 #
@@ -43,6 +45,25 @@ def run(command):
     print(msg)
     raise RuntimeError(msg)
 
+def runAndSendGPGPassword(command, password):
+  p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
+  f = open(LOG, 'ab')
+  while True:
+    line = p.stdout.readline()
+    if len(line) == 0:
+      break
+    f.write(line)
+    if line.find(b'Enter GPG keystore password:') != -1:
+      time.sleep(1.0)
+      p.stdin.write((password + '\n').encode('UTF-8'))
+      p.stdin.write('\n'.encode('UTF-8'))
+
+  result = p.poll()
+  if result != 0:
+    msg = '    FAILED: %s [see log %s]' % (command, LOG)
+    print(msg)
+    raise RuntimeError(msg)
+
 def scrubCheckout():
   # removes any files not checked into svn
 
@@ -68,7 +89,7 @@ def getSVNRev():
   return rev
   
 
-def prepare(root, version, gpgKeyID, doTest):
+def prepare(root, version, gpgKeyID, gpgPassword, doTest):
   print()
   print('Prepare release...')
   if os.path.exists(LOG):
@@ -98,7 +119,11 @@ def prepare(root, version, gpgKeyID, doT
     cmd += ' -Dgpg.key=%s prepare-release' % gpgKeyID
   else:
     cmd += ' prepare-release-no-sign'
-  run(cmd)
+
+  if gpgPassword is not None:
+    runAndSendGPGPassword(cmd, gpgPassword)
+  else:
+    run(cmd)
   
   print('  solr prepare-release')
   os.chdir('../solr')
@@ -107,7 +132,12 @@ def prepare(root, version, gpgKeyID, doT
     cmd += ' -Dgpg.key=%s prepare-release' % gpgKeyID
   else:
     cmd += ' prepare-release-no-sign'
-  run(cmd)
+
+  if gpgPassword is not None:
+    runAndSendGPGPassword(cmd, gpgPassword)
+  else:
+    run(cmd)
+    
   print('  done!')
   print()
   return rev
@@ -115,7 +145,7 @@ def prepare(root, version, gpgKeyID, doT
 def push(version, root, rev, rcNum, username):
   print('Push...')
   dir = 'lucene-solr-%s-RC%d-rev%s' % (version, rcNum, rev)
-  s = os.popen('ssh %s@people.apache.org "ls -ld public_html/staging_area/%s" 2>&1' % (username, dir)).read().decode('UTF-8')
+  s = os.popen('ssh %s@people.apache.org "ls -ld public_html/staging_area/%s" 2>&1' % (username, dir)).read()
   if 'no such file or directory' not in s.lower():
     print('  Remove old dir...')
     run('ssh %s@people.apache.org "chmod -R u+rwX public_html/staging_area/%s; rm -rf public_html/staging_area/%s"' % 
@@ -253,12 +283,16 @@ def main():
     gpgKeyID = sys.argv[idx+1]
     del sys.argv[idx:idx+2]
 
+    sys.stdout.flush()
+    import getpass
+    gpgPassword = getpass.getpass('Enter GPG keystore password: ')
+
   root = os.path.abspath(sys.argv[1])
   version = sys.argv[2]
   rcNum = int(sys.argv[3])
 
   if doPrepare:
-    rev = prepare(root, version, gpgKeyID, smokeTmpDir is None)
+    rev = prepare(root, version, gpgKeyID, gpgPassword, smokeTmpDir is None)
   else:
     os.chdir(root)
     rev = open('rev.txt', encoding='UTF-8').read()
@@ -276,7 +310,7 @@ def main():
   if smokeTmpDir is not None:
     import smokeTestRelease
     smokeTestRelease.DEBUG = False
-    smokeTestRelease.smokeTest(url, version, smokeTmpDir, gpgKeyID is not None)
+    smokeTestRelease.smokeTest(url, rev, version, smokeTmpDir, gpgKeyID is not None, '')
 
 if __name__ == '__main__':
   try:

Modified: lucene/dev/branches/security/dev-tools/scripts/checkJavadocLinks.py
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/scripts/checkJavadocLinks.py?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/scripts/checkJavadocLinks.py (original)
+++ lucene/dev/branches/security/dev-tools/scripts/checkJavadocLinks.py Thu May 30 07:53:18 2013
@@ -65,7 +65,7 @@ class FindHyperlinks(HTMLParser):
             pass
           else:
             self.printFile()
-            print('    WARNING: anchor "%s" appears more than once' % name)
+            raise RuntimeError('anchor "%s" appears more than once' % name)
         else:
           self.anchors.add(name)
       elif href is not None:

Modified: lucene/dev/branches/security/dev-tools/scripts/poll-mirrors.pl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/scripts/poll-mirrors.pl?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/scripts/poll-mirrors.pl (original)
+++ lucene/dev/branches/security/dev-tools/scripts/poll-mirrors.pl Thu May 30 07:53:18 2013
@@ -51,7 +51,7 @@ my $previously_selected = select STDOUT;
 $| = 1; # turn off buffering of STDOUT, so status is printed immediately
 select $previously_selected;
 
-my $apache_url_suffix = "lucene/java/$version/lucene-$version.zip.asc";
+my $apache_url_suffix = "lucene/java/$version/KEYS";
 my $apache_mirrors_list_url = "http://www.apache.org/mirrors/";
 my $maven_url = "http://repo1.maven.org/maven2/org/apache/lucene/lucene-core/$version/lucene-core-$version.pom.asc";
 

Modified: lucene/dev/branches/security/dev-tools/scripts/smokeTestRelease.py
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/dev-tools/scripts/smokeTestRelease.py?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/dev-tools/scripts/smokeTestRelease.py (original)
+++ lucene/dev/branches/security/dev-tools/scripts/smokeTestRelease.py Thu May 30 07:53:18 2013
@@ -14,11 +14,14 @@
 # limitations under the License.
 
 import os
+import zipfile
 import codecs
 import tarfile
 import zipfile
 import threading
 import traceback
+import datetime
+import time
 import subprocess
 import signal
 import shutil
@@ -56,9 +59,7 @@ def unshortenURL(url):
   return url  
 
 def javaExe(version):
-  if version == '1.6':
-    path = JAVA6_HOME
-  elif version == '1.7':
+  if version == '1.7':
     path = JAVA7_HOME
   else:
     raise RuntimeError("unknown Java version '%s'" % version)
@@ -74,18 +75,11 @@ def verifyJavaVersion(version):
 # http://s.apache.org/lusolr32rc2
 env = os.environ
 try:
-  JAVA6_HOME = env['JAVA6_HOME']
-except KeyError:
-  JAVA6_HOME = '/usr/local/jdk1.6.0_27'
-print('JAVA6_HOME is %s' % JAVA6_HOME)
-
-try:
   JAVA7_HOME = env['JAVA7_HOME']
 except KeyError:
-  JAVA7_HOME = '/usr/local/jdk1.7.0_01'
+  raise RuntimeError('please set JAVA7_HOME in the env before running smokeTestRelease')
 print('JAVA7_HOME is %s' % JAVA7_HOME)
 
-verifyJavaVersion('1.6')
 verifyJavaVersion('1.7')
 
 # TODO
@@ -134,31 +128,37 @@ def getHREFs(urlString):
   return links
 
 def download(name, urlString, tmpDir, quiet=False):
+  startTime = time.time()
   fileName = '%s/%s' % (tmpDir, name)
   if not FORCE_CLEAN and os.path.exists(fileName):
     if not quiet and fileName.find('.asc') == -1:
       print('    already done: %.1f MB' % (os.path.getsize(fileName)/1024./1024.))
     return
-  fIn = urllib.request.urlopen(urlString)
-  fOut = open(fileName, 'wb')
-  success = False
   try:
-    while True:
-      s = fIn.read(65536)
-      if s == b'':
-        break
-      fOut.write(s)
-    fOut.close()
-    fIn.close()
-    success = True
-  finally:
-    fIn.close()
-    fOut.close()
-    if not success:
-      os.remove(fileName)
-  if not quiet and fileName.find('.asc') == -1:
-    print('    %.1f MB' % (os.path.getsize(fileName)/1024./1024.))
-    
+    fIn = urllib.request.urlopen(urlString)
+    fOut = open(fileName, 'wb')
+    success = False
+    try:
+      while True:
+        s = fIn.read(65536)
+        if s == b'':
+          break
+        fOut.write(s)
+      fOut.close()
+      fIn.close()
+      success = True
+    finally:
+      fIn.close()
+      fOut.close()
+      if not success:
+        os.remove(fileName)
+    if not quiet and fileName.find('.asc') == -1:
+      t = time.time()-startTime
+      sizeMB = os.path.getsize(fileName)/1024./1024.
+      print('    %.1f MB in %.2f sec (%.1f MB/sec)' % (sizeMB, t, sizeMB/t))
+  except Exception as e:
+    raise RuntimeError('failed to download url "%s"' % urlString) from e
+  
 def load(urlString):
   return urllib.request.urlopen(urlString).read().decode('utf-8')
 
@@ -175,7 +175,7 @@ MANIFEST_FILE_NAME = 'META-INF/MANIFEST.
 NOTICE_FILE_NAME = 'META-INF/NOTICE.txt'
 LICENSE_FILE_NAME = 'META-INF/LICENSE.txt'
 
-def checkJARMetaData(desc, jarFile, version):
+def checkJARMetaData(desc, jarFile, svnRevision, version):
 
   with zipfile.ZipFile(jarFile, 'r') as z:
     for name in (MANIFEST_FILE_NAME, NOTICE_FILE_NAME, LICENSE_FILE_NAME):
@@ -190,17 +190,28 @@ def checkJARMetaData(desc, jarFile, vers
     s = decodeUTF8(z.read(MANIFEST_FILE_NAME))
     
     for verify in (
+      'Specification-Vendor: The Apache Software Foundation',
       'Implementation-Vendor: The Apache Software Foundation',
-      # Make sure 1.6 compiler was used to build release bits:
-      'X-Compile-Source-JDK: 1.6',
-      # Make sure .class files are 1.6 format:
-      'X-Compile-Target-JDK: 1.6',
-      # Make sure this matches the version we think we are releasing:
-      'Specification-Version: %s' % version):
+      # Make sure 1.7 compiler was used to build release bits:
+      'X-Compile-Source-JDK: 1.7',
+      # Make sure 1.8 ant was used to build release bits: (this will match 1.8+)
+      'Ant-Version: Apache Ant 1.8',
+      # Make sure .class files are 1.7 format:
+      'X-Compile-Target-JDK: 1.7',
+      'Specification-Version: %s' % version,
+      # Make sure the release was compiled with 1.7:
+      'Created-By: 1.7'):
       if s.find(verify) == -1:
-        raise RuntimeError('%s is missing "%s" inside its META-INF/MANIFES.MF' % \
+        raise RuntimeError('%s is missing "%s" inside its META-INF/MANIFEST.MF' % \
                            (desc, verify))
 
+    if svnRevision != 'skip':
+      # Make sure this matches the version and svn revision we think we are releasing:
+      verifyRevision = 'Implementation-Version: %s %s ' % (version, svnRevision)
+      if s.find(verifyRevision) == -1:
+        raise RuntimeError('%s is missing "%s" inside its META-INF/MANIFEST.MF (wrong svn revision?)' % \
+                           (desc, verifyRevision))
+
     notice = decodeUTF8(z.read(NOTICE_FILE_NAME))
     license = decodeUTF8(z.read(LICENSE_FILE_NAME))
 
@@ -238,7 +249,7 @@ def checkJARMetaData(desc, jarFile, vers
 def normSlashes(path):
   return path.replace(os.sep, '/')
     
-def checkAllJARs(topDir, project, version):
+def checkAllJARs(topDir, project, svnRevision, version):
   print('    verify JAR/WAR metadata...')  
   for root, dirs, files in os.walk(topDir):
 
@@ -254,13 +265,16 @@ def checkAllJARs(topDir, project, versio
           if normRoot.endswith('/contrib/dataimporthandler/lib') and (file.startswith('mail-') or file.startswith('activation-')):
             print('      **WARNING**: skipping check of %s/%s: it has javax.* classes' % (root, file))
             continue
+        else:
+          if normRoot.endswith('/replicator/lib') and file.startswith('javax.servlet'):
+            continue
         fullPath = '%s/%s' % (root, file)
         noJavaPackageClasses('JAR file "%s"' % fullPath, fullPath)
         if file.lower().find('lucene') != -1 or file.lower().find('solr') != -1:
-          checkJARMetaData('JAR file "%s"' % fullPath, fullPath, version)
+          checkJARMetaData('JAR file "%s"' % fullPath, fullPath, svnRevision, version)
   
 
-def checkSolrWAR(warFileName, version):
+def checkSolrWAR(warFileName, svnRevision, version):
 
   """
   Crawls for JARs inside the WAR and ensures there are no classes
@@ -269,7 +283,7 @@ def checkSolrWAR(warFileName, version):
 
   print('    make sure WAR file has no javax.* or java.* classes...')
 
-  checkJARMetaData(warFileName, warFileName, version)
+  checkJARMetaData(warFileName, warFileName, svnRevision, version)
 
   with zipfile.ZipFile(warFileName, 'r') as z:
     for name in z.namelist():
@@ -279,6 +293,7 @@ def checkSolrWAR(warFileName, version):
         if name.lower().find('lucene') != -1 or name.lower().find('solr') != -1:
           checkJARMetaData('JAR file %s inside WAR file %s' % (name, warFileName),
                            io.BytesIO(z.read(name)),
+                           svnRevision,
                            version)
         
 def checkSigs(project, urlString, version, tmpDir, isSigned):
@@ -356,7 +371,7 @@ def checkSigs(project, urlString, versio
     shutil.rmtree(gpgHomeDir)
   os.makedirs(gpgHomeDir, 0o700)
   run('gpg --homedir %s --import %s' % (gpgHomeDir, keysFile),
-      '%s/%s.gpg.import.log 2>&1' % (tmpDir, project))
+      '%s/%s.gpg.import.log' % (tmpDir, project))
 
   if mavenURL is None:
     raise RuntimeError('%s is missing maven' % project)
@@ -389,7 +404,7 @@ def checkSigs(project, urlString, versio
 
       # Test trust (this is done with the real users config)
       run('gpg --import %s' % (keysFile),
-          '%s/%s.gpg.trust.import.log 2>&1' % (tmpDir, project))
+          '%s/%s.gpg.trust.import.log' % (tmpDir, project))
       print('    verify trust')
       logFile = '%s/%s.%s.gpg.trust.log' % (tmpDir, project, artifact)
       run('gpg --verify %s %s' % (sigFile, artifactFile), logFile)
@@ -422,7 +437,9 @@ def testChangesText(dir, version, projec
       fullPath = '%s/CHANGES.txt' % root
       #print 'CHECK %s' % fullPath
       checkChangesContent(open(fullPath, encoding='UTF-8').read(), version, fullPath, project, False)
-      
+
+reChangesSectionHREF = re.compile('<a id="(.*?)".*?>(.*?)</a>', re.IGNORECASE)
+
 def checkChangesContent(s, version, name, project, isHTML):
 
   if isHTML and s.find('Release %s' % version) == -1:
@@ -442,6 +459,23 @@ def checkChangesContent(s, version, name
       if name.find('/benchmark/') == -1:
         raise RuntimeError('did not see "%s" in %s' % (sub, name))
 
+  if isHTML:
+    # Make sure a section only appears once under each release:
+    seenIDs = set()
+    seenText = set()
+
+    release = None
+    for id, text in reChangesSectionHREF.findall(s):
+      if text.lower().startswith('release '):
+        release = text[8:].strip()
+        seenText.clear()
+      if id in seenIDs:
+        raise RuntimeError('%s has duplicate section "%s" under release "%s"' % (name, text, release))
+      seenIDs.add(id)
+      if text in seenText:
+        raise RuntimeError('%s has duplicate section "%s" under release "%s"' % (name, text, release))
+      seenText.add(text)
+
 reUnixPath = re.compile(r'\b[a-zA-Z_]+=(?:"(?:\\"|[^"])*"' + '|(?:\\\\.|[^"\'\\s])*' + r"|'(?:\\'|[^'])*')" \
                         + r'|(/(?:\\.|[^"\'\s])*)' \
                         + r'|("/(?:\\.|[^"])*")'   \
@@ -541,7 +575,7 @@ def getDirEntries(urlString):
       if text == 'Parent Directory' or text == '..':
         return links[(i+1):]
 
-def unpackAndVerify(project, tmpDir, artifact, version):
+def unpackAndVerify(project, tmpDir, artifact, svnRevision, version, testArgs):
   destDir = '%s/unpack' % tmpDir
   if os.path.exists(destDir):
     shutil.rmtree(destDir)
@@ -561,14 +595,14 @@ def unpackAndVerify(project, tmpDir, art
     raise RuntimeError('unpack produced entries %s; expected only %s' % (l, expected))
 
   unpackPath = '%s/%s' % (destDir, expected)
-  verifyUnpacked(project, artifact, unpackPath, version, tmpDir)
+  verifyUnpacked(project, artifact, unpackPath, svnRevision, version, testArgs)
 
 LUCENE_NOTICE = None
 LUCENE_LICENSE = None
 SOLR_NOTICE = None
 SOLR_LICENSE = None
 
-def verifyUnpacked(project, artifact, unpackPath, version, tmpDir):
+def verifyUnpacked(project, artifact, unpackPath, svnRevision, version, testArgs):
   global LUCENE_NOTICE
   global LUCENE_LICENSE
   global SOLR_NOTICE
@@ -617,7 +651,7 @@ def verifyUnpacked(project, artifact, un
 
   if project == 'lucene':
     # TODO: clean this up to not be a list of modules that we must maintain
-    extras = ('analysis', 'benchmark', 'classification', 'codecs', 'core', 'demo', 'docs', 'facet', 'grouping', 'highlighter', 'join', 'memory', 'misc', 'queries', 'queryparser', 'sandbox', 'spatial', 'suggest', 'test-framework', 'licenses')
+    extras = ('analysis', 'benchmark', 'classification', 'codecs', 'core', 'demo', 'docs', 'facet', 'grouping', 'highlighter', 'join', 'memory', 'misc', 'queries', 'queryparser', 'replicator', 'sandbox', 'spatial', 'suggest', 'test-framework', 'licenses')
     if isSrc:
       extras += ('build.xml', 'common-build.xml', 'module-build.xml', 'ivy-settings.xml', 'backwards', 'tools', 'site')
   else:
@@ -655,17 +689,8 @@ def verifyUnpacked(project, artifact, un
     run('%s; ant validate' % javaExe('1.7'), '%s/validate.log' % unpackPath)
 
     if project == 'lucene':
-      print('    run tests w/ Java 6...')
-      run('%s; ant test' % javaExe('1.6'), '%s/test.log' % unpackPath)
-      run('%s; ant jar' % javaExe('1.6'), '%s/compile.log' % unpackPath)
-      testDemo(isSrc, version, '1.6')
-      # test javadocs
-      print('    generate javadocs w/ Java 6...')
-      run('%s; ant javadocs' % javaExe('1.6'), '%s/javadocs.log' % unpackPath)
-      checkJavadocpath('%s/build/docs' % unpackPath)
-
-      print('    run tests w/ Java 7...')
-      run('%s; ant clean test' % javaExe('1.7'), '%s/test.log' % unpackPath)
+      print("    run tests w/ Java 7 and testArgs='%s'..." % testArgs)
+      run('%s; ant clean test %s' % (javaExe('1.7'), testArgs), '%s/test.log' % unpackPath)
       run('%s; ant jar' % javaExe('1.7'), '%s/compile.log' % unpackPath)
       testDemo(isSrc, version, '1.7')
 
@@ -675,28 +700,16 @@ def verifyUnpacked(project, artifact, un
 
     else:
       os.chdir('solr')
-      # DISABLED until solr tests consistently pass
-      #print('    run tests w/ Java 6...')
-      #run('%s; ant test' % javaExe('1.6'), '%s/test.log' % unpackPath)
-
-      # test javadocs
-      print('    generate javadocs w/ Java 6...')
-      run('%s; ant javadocs' % javaExe('1.6'), '%s/javadocs.log' % unpackPath)
-      checkJavadocpath('%s/solr/build/docs' % unpackPath, False)
 
       # DISABLED until solr tests consistently pass
-      #print('    run tests w/ Java 7...')
-      #run('%s; ant test' % javaExe('1.7'), '%s/test.log' % unpackPath)
+      #print("    run tests w/ Java 7 and testArgs='%s'..." % testArgs)
+      #run('%s; ant clean test %s' % (javaExe('1.7'), testArgs), '%s/test.log' % unpackPath)
  
       # test javadocs
       print('    generate javadocs w/ Java 7...')
       run('%s; ant clean javadocs' % javaExe('1.7'), '%s/javadocs.log' % unpackPath)
       checkJavadocpathFull('%s/solr/build/docs' % unpackPath, False)
 
-      print('    test solr example w/ Java 6...')
-      run('%s; ant clean example' % javaExe('1.6'), '%s/antexample.log' % unpackPath)
-      testSolrExample(unpackPath, JAVA6_HOME, True)
-
       print('    test solr example w/ Java 7...')
       run('%s; ant clean example' % javaExe('1.7'), '%s/antexample.log' % unpackPath)
       testSolrExample(unpackPath, JAVA7_HOME, True)
@@ -707,23 +720,13 @@ def verifyUnpacked(project, artifact, un
 
   else:
 
-    checkAllJARs(os.getcwd(), project, version)
+    checkAllJARs(os.getcwd(), project, svnRevision, version)
     
     if project == 'lucene':
-      testDemo(isSrc, version, '1.6')
       testDemo(isSrc, version, '1.7')
 
     else:
-      checkSolrWAR('%s/example/webapps/solr.war' % unpackPath, version)
-
-      print('    copying unpacked distribution for Java 6 ...')
-      java6UnpackPath = '%s-java6' %unpackPath
-      if os.path.exists(java6UnpackPath):
-        shutil.rmtree(java6UnpackPath)
-      shutil.copytree(unpackPath, java6UnpackPath)
-      os.chdir(java6UnpackPath)
-      print('    test solr example w/ Java 6...')
-      testSolrExample(java6UnpackPath, JAVA6_HOME, False)
+      checkSolrWAR('%s/example/webapps/solr.war' % unpackPath, svnRevision, version)
 
       print('    copying unpacked distribution for Java 7 ...')
       java7UnpackPath = '%s-java7' %unpackPath
@@ -761,7 +764,7 @@ def readSolrOutput(p, startupEvent, fail
   f = open(logFile, 'wb')
   try:
     while True:
-      line = p.stderr.readline()
+      line = p.stdout.readline()
       if len(line) == 0:
         p.poll()
         if not startupEvent.isSet():
@@ -795,7 +798,7 @@ def testSolrExample(unpackPath, javaPath
   env.update(os.environ)
   env['JAVA_HOME'] = javaPath
   env['PATH'] = '%s/bin:%s' % (javaPath, env['PATH'])
-  server = subprocess.Popen(['java', '-jar', 'start.jar'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE, env=env)
+  server = subprocess.Popen(['java', '-jar', 'start.jar'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE, env=env)
 
   startupEvent = threading.Event()
   failureEvent = threading.Event()
@@ -803,19 +806,21 @@ def testSolrExample(unpackPath, javaPath
   serverThread.setDaemon(True)
   serverThread.start()
 
-  # Make sure Solr finishes startup:
-  if not startupEvent.wait(1800):
-    raise RuntimeError('startup took more than 30 minutes')
-  if failureEvent.isSet():
-    logFile = os.path.abspath(logFile)
-    print
-    print('Startup failed; see log %s' % logFile)
-    printFileContents(logFile)
-    raise RuntimeError('failure on startup; see log %s' % logFile)
-    
-  print('      startup done')
-  
   try:
+
+    # Make sure Solr finishes startup:
+    if not startupEvent.wait(1800):
+      raise RuntimeError('startup took more than 30 minutes')
+
+    if failureEvent.isSet():
+      logFile = os.path.abspath(logFile)
+      print
+      print('Startup failed; see log %s' % logFile)
+      printFileContents(logFile)
+      raise RuntimeError('failure on startup; see log %s' % logFile)
+
+    print('      startup done')
+
     print('      test utf8...')
     run('sh ./exampledocs/test_utf8.sh', 'utf8.log')
     print('      index example docs...')
@@ -897,7 +902,7 @@ def testDemo(isSrc, version, jdk):
       raise RuntimeError('lucene demo\'s SearchFiles found too few results: %s' % numHits)
     print('      got %d hits for query "lucene"' % numHits)
 
-def checkMaven(baseURL, tmpDir, version, isSigned):
+def checkMaven(baseURL, tmpDir, svnRevision, version, isSigned):
   # Locate the release branch in subversion
   m = re.match('(\d+)\.(\d+)', version) # Get Major.minor version components
   releaseBranchText = 'lucene_solr_%s_%s/' % (m.group(1), m.group(2))
@@ -946,8 +951,8 @@ def checkMaven(baseURL, tmpDir, version,
   print('    verify that Maven artifacts are same as in the binary distribution...')
   checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts, version)
 
-  checkAllJARs('%s/maven/org/apache/lucene' % tmpDir, 'lucene', version)
-  checkAllJARs('%s/maven/org/apache/solr' % tmpDir, 'solr', version)
+  checkAllJARs('%s/maven/org/apache/lucene' % tmpDir, 'lucene', svnRevision, version)
+  checkAllJARs('%s/maven/org/apache/solr' % tmpDir, 'solr', svnRevision, version)
 
 def getDistributionsForMavenChecks(tmpDir, version, baseURL):
   distributionFiles = defaultdict()
@@ -977,7 +982,7 @@ def getDistributionsForMavenChecks(tmpDi
 def checkJavadocAndSourceArtifacts(nonMavenizedDeps, artifacts, version):
   for project in ('lucene', 'solr'):
     for artifact in artifacts[project]:
-      if artifact.endswith(version + '.jar') and artifact not in list(nonMavenizedDeps.keys()):
+      if artifact.endswith(version + '.jar') and artifact not in nonMavenizedDeps:
         javadocJar = artifact[:-4] + '-javadoc.jar'
         if javadocJar not in artifacts[project]:
           raise RuntimeError('missing: %s' % javadocJar)
@@ -990,7 +995,7 @@ def checkIdenticalNonMavenizedDeps(distr
     distFilenames = dict()
     for file in distributionFiles[project]:
       distFilenames[os.path.basename(file)] = file
-    for dep in list(nonMavenizedDeps.keys()):
+    for dep in nonMavenizedDeps.keys():
       if ('/%s/' % project) in dep:
         depOrigFilename = os.path.basename(nonMavenizedDeps[dep])
         if not depOrigFilename in distFilenames:
@@ -1000,6 +1005,15 @@ def checkIdenticalNonMavenizedDeps(distr
           raise RuntimeError('Deployed non-mavenized dep %s differs from distribution dep %s'
                             % (dep, distFilenames[depOrigFilename]))
 
+def getZipFileEntries(fileName):
+  entries = []
+  with zipfile.ZipFile(fileName) as zf:
+    for zi in zf.infolist():
+      entries.append(zi.filename)
+  # Sort by name:
+  entries.sort()
+  return entries
+
 def checkIdenticalMavenArtifacts(distributionFiles, nonMavenizedDeps, artifacts, version):
   reJarWar = re.compile(r'%s\.[wj]ar$' % version) # exclude *-javadoc.jar and *-sources.jar
   for project in ('lucene', 'solr'):
@@ -1009,11 +1023,20 @@ def checkIdenticalMavenArtifacts(distrib
       distFilenames[baseName] = file
     for artifact in artifacts[project]:
       if reJarWar.search(artifact):
-        if artifact not in list(nonMavenizedDeps.keys()):
+        entries = getZipFileEntries(artifact)
+        if artifact not in nonMavenizedDeps:
           artifactFilename = os.path.basename(artifact)
-          if artifactFilename not in list(distFilenames.keys()):
+          if artifactFilename not in distFilenames:
             raise RuntimeError('Maven artifact %s is not present in %s binary distribution'
                               % (artifact, project))
+          else:
+            binaryEntries = getZipFileEntries(distFilenames[artifactFilename])
+            if binaryEntries != entries:
+              raise RuntimeError('Maven artifact %s has different contents than binary distribution\n  maven:\n%s\n  binary:\n%s\n' % \
+                    (artifactFilename,
+                     '\n'.join(entries),
+                     '\n'.join(binaryEntries)))
+          
          # TODO: Either fix the build to ensure that maven artifacts *are* identical, or recursively compare contents
          # identical = filecmp.cmp(artifact, distFilenames[artifactFilename], shallow=False)
          # if not identical:
@@ -1284,27 +1307,56 @@ reAllowedVersion = re.compile(r'^\d+\.\d
 
 def main():
 
-  if len(sys.argv) < 4:
+  if len(sys.argv) < 5:
     print()
-    print('Usage python -u %s BaseURL version tmpDir' % sys.argv[0])
+    print('Usage python -u %s BaseURL SvnRevision version tmpDir [ isSigned ] [ -testArgs "-Dwhat=ever [ ... ]" ]'
+          % sys.argv[0])
+    print()
+    print('  example: python3.2 -u dev-tools/scripts/smokeTestRelease.py http://people.apache.org/~whoever/staging_area/lucene-solr-4.3.0-RC1-rev1469340 1469340 4.3.0 /path/to/a/tmp/dir')
     print()
     sys.exit(1)
 
   baseURL = sys.argv[1]
-  version = sys.argv[2]
+  svnRevision = sys.argv[2]
+  version = sys.argv[3]
 
   if not reAllowedVersion.match(version):
     raise RuntimeError('version "%s" does not match format X.Y.Z[-ALPHA|-BETA]' % version)
   
-  tmpDir = os.path.abspath(sys.argv[3])
-  isSigned = True 
-  if len(sys.argv) == 5:
-    isSigned = (sys.argv[4] == "True")
+  tmpDirArgNum = 4
+  tmpDir = os.path.abspath(sys.argv[tmpDirArgNum])
+
+  # TODO: yuck: positional-only args with more than one optional arg totally sucks
+  # TODO: consider naming all args
+  isSigned = True
+  testArgs = ''
+  lastArgNum = len(sys.argv) - 1
+  if lastArgNum > tmpDirArgNum:
+    nextArgNum = tmpDirArgNum + 1
+    if sys.argv[nextArgNum] == '-testArgs':
+      if nextArgNum == lastArgNum:
+        raise RuntimeError('missing expected argument to -testArgs')
+      else:
+        # TODO: should there be arg validation here?  E.g. starts with '-D'?
+        testArgs = sys.argv[nextArgNum + 1]
+        nextArgNum += 2
+    if nextArgNum <= lastArgNum:
+      isSigned = (sys.argv[nextArgNum] == "True")
+      nextArgNum += 1
+    if nextArgNum <= lastArgNum and testArgs == '':
+      if sys.argv[nextArgNum] == '-testArgs':
+        if nextArgNum == lastArgNum:
+          raise RuntimeError('missing expected argument to -testArgs')
+        else:
+          # TODO: should there be arg validation here?  E.g. starts with '-D'?
+          testArgs = sys.argv[nextArgNum + 1]
 
-  smokeTest(baseURL, version, tmpDir, isSigned)
+  smokeTest(baseURL, svnRevision, version, tmpDir, isSigned, testArgs)
 
-def smokeTest(baseURL, version, tmpDir, isSigned):
+def smokeTest(baseURL, svnRevision, version, tmpDir, isSigned, testArgs):
 
+  startTime = datetime.datetime.now()
+  
   if FORCE_CLEAN:
     if os.path.exists(tmpDir):
       raise RuntimeError('temp dir %s exists; please remove first' % tmpDir)
@@ -1336,21 +1388,21 @@ def smokeTest(baseURL, version, tmpDir, 
   print('Test Lucene...')
   checkSigs('lucene', lucenePath, version, tmpDir, isSigned)
   for artifact in ('lucene-%s.tgz' % version, 'lucene-%s.zip' % version):
-    unpackAndVerify('lucene', tmpDir, artifact, version)
-  unpackAndVerify('lucene', tmpDir, 'lucene-%s-src.tgz' % version, version)
+    unpackAndVerify('lucene', tmpDir, artifact, svnRevision, version, testArgs)
+  unpackAndVerify('lucene', tmpDir, 'lucene-%s-src.tgz' % version, svnRevision, version, testArgs)
 
   print()
   print('Test Solr...')
   checkSigs('solr', solrPath, version, tmpDir, isSigned)
   for artifact in ('solr-%s.tgz' % version, 'solr-%s.zip' % version):
-    unpackAndVerify('solr', tmpDir, artifact, version)
-  unpackAndVerify('solr', tmpDir, 'solr-%s-src.tgz' % version, version)
+    unpackAndVerify('solr', tmpDir, artifact, svnRevision, version, testArgs)
+  unpackAndVerify('solr', tmpDir, 'solr-%s-src.tgz' % version, svnRevision, version, testArgs)
 
   print()
   print('Test Maven artifacts for Lucene and Solr...')
-  checkMaven(baseURL, tmpDir, version, isSigned)
+  checkMaven(baseURL, tmpDir, svnRevision, version, isSigned)
 
-  print('\nSUCCESS!\n')
+  print('\nSUCCESS! [%s]\n' % (datetime.datetime.now() - startTime))
 
 if __name__ == '__main__':
   print('NOTE: output encoding is %s' % sys.stdout.encoding)

Modified: lucene/dev/branches/security/extra-targets.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/extra-targets.xml?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/extra-targets.xml (original)
+++ lucene/dev/branches/security/extra-targets.xml Thu May 30 07:53:18 2013
@@ -89,7 +89,7 @@
       statusClient.doStatus(basedir, SVNRevision.WORKING, SVNDepth.fromRecurse(true), false, true, false, false, {
         status ->
         SVNStatusType nodeStatus = status.getNodeStatus();
-        if (nodeStatus == SVNStatusType.STATUS_UNVERSIONED) {
+        if (nodeStatus == SVNStatusType.STATUS_UNVERSIONED || nodeStatus == SVNStatusType.STATUS_MISSING) {
           unversioned.add(convertRelative(status.getFile()));
         } else if (status.getKind() == SVNNodeKind.FILE && nodeStatus != SVNStatusType.STATUS_DELETED) {
           missingProps.add(convertRelative(status.getFile()));

Modified: lucene/dev/branches/security/lucene/BUILD.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/BUILD.txt?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/BUILD.txt (original)
+++ lucene/dev/branches/security/lucene/BUILD.txt Thu May 30 07:53:18 2013
@@ -1,19 +1,19 @@
 Lucene Build Instructions
 
 Basic steps:
-  0) Install JDK 1.6 (or greater), Ant 1.8.2+, Ivy 2.2.0
+  0) Install JDK 1.7 (or greater), Ant 1.8.2+, Ivy 2.2.0
   1) Download Lucene from Apache and unpack it
   2) Connect to the top-level of your Lucene installation
   3) Install JavaCC (optional)
   4) Run ant
 
-Step 0) Set up your development environment (JDK 1.6 or greater,
+Step 0) Set up your development environment (JDK 1.7 or greater,
 Ant 1.8.2+, Ivy 2.2.0)
 
 We'll assume that you know how to get and set up the JDK - if you
 don't, then we suggest starting at http://java.sun.com and learning
 more about Java, before returning to this README. Lucene runs with
-JDK 1.6 and later.
+JDK 1.7 and later.
 
 Like many Open Source java projects, Lucene uses Apache Ant for build
 control.  Specifically, you MUST use Ant version 1.8.2+.

Modified: lucene/dev/branches/security/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/CHANGES.txt?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/security/lucene/CHANGES.txt Thu May 30 07:53:18 2013
@@ -19,6 +19,559 @@ Changes in backwards compatibility polic
   (Nikola Tanković, Uwe Schindler, Chris Male, Mike McCandless,
   Robert Muir)
 
+* LUCENE-4924: DocIdSetIterator.docID() must now return -1 when the iterator is
+  not positioned. This change affects all classes that inherit from
+  DocIdSetIterator, including DocsEnum and DocsAndPositionsEnum. (Adrien Grand)
+
+New Features
+
+* LUCENE-4747: Move to Java 7 as minimum Java version.
+  (Robert Muir, Uwe Schindler)
+
+Optimizations
+
+* LUCENE-4848: Use Java 7 NIO2-FileChannel instead of RandomAccessFile
+  for NIOFSDirectory and MMapDirectory. This allows to delete open files
+  on Windows if NIOFSDirectory is used, mmapped files are still locked.
+  (Michael Poindexter, Robert Muir, Uwe Schindler)
+
+======================= Lucene 4.4.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4955: NGramTokenFilter now emits all n-grams for the same token at the
+  same position and preserves the position length and the offsets of the
+  original token. (Simon Willnauer, Adrien Grand)
+
+* LUCENE-4955: NGramTokenizer now emits n-grams in a different order
+  (a, ab, b, bc, c) instead of (a, b, c, ab, bc) and doesn't trim trailing
+  whitespaces. (Adrien Grand)
+
+* LUCENE-4967: NRTManager is replaced by
+  ControlledRealTimeReopenThread, for controlling which requests must
+  see which indexing changes, so that it can work with any
+  ReferenceManager (Mike McCandless)
+
+* LUCENE-4973: SnapshotDeletionPolicy no longer requires a unique
+  String id (Mike McCandless, Shai Erera)
+
+* LUCENE-4946: The internal sorting API (SorterTemplate, now Sorter) has been
+  completely refactored to allow for a better implementation of TimSort.
+  (Adrien Grand, Uwe Schindler, Dawid Weiss)
+
+* LUCENE-4963: Some TokenFilter options that generate broken TokenStreams have
+  been deprecated: updateOffsets=true on TrimFilter and
+  enablePositionIncrements=false on all classes that inherit from
+  FilteringTokenFilter: JapanesePartOfSpeechStopFilter, KeepWordFilter,
+  LengthFilter, StopFilter and TypeTokenFilter. (Adrien Grand)
+
+* LUCENE-4963: In order not to take position increments into account in
+  suggesters, you now need to call setPreservePositionIncrements(false) instead
+  of configuring the token filters to not increment positions. (Adrien Grand)
+
+* LUCENE-3907: EdgeNGramTokenizer now supports maxGramSize > 1024, doesn't trim
+  the input, sets position increment = 1 for all tokens and doesn't support
+  backward grams anymore. (Adrien Grand)
+
+* LUCENE-3907: EdgeNGramTokenFilter does not support backward grams and does
+  not update offsets anymore. (Adrien Grand)
+
+* LUCENE-4981: PositionFilter is now deprecated as it can corrupt token stream
+  graphs. Since it main use-case was to make query parsers generate boolean
+  queries instead of phrase queries, it is now advised to use
+  QueryParser.setAutoGeneratePhraseQueries(false) (for simple cases) or to
+  override QueryParser.newFieldQuery. (Adrien Grand, Steve Rowe)
+
+* LUCENE-5018: CompoundWordTokenFilterBase and its children
+  DictionaryCompoundWordTokenFilter and HyphenationCompoundWordTokenFilter don't
+  update offsets anymore. (Adrien Grand)
+
+* LUCENE-5015: SamplingAccumulator no longer corrects the counts of the sampled 
+  categories. You should set TakmiSampleFixer on SamplingParams if required (but 
+  notice that this means slower search). (Rob Audenaerde, Gilad Barkai, Shai Erera)
+
+Bug Fixes
+
+* LUCENE-4997: Internal test framework's tests are sensitive to previous 
+  test failures and tests.failfast. (Dawid Weiss, Shai Erera)
+
+* LUCENE-4955: NGramTokenizer now supports inputs larger than 1024 chars.
+  (Adrien Grand)
+
+* LUCENE-4959: Fix incorrect return value in
+  SimpleNaiveBayesClassifier.assignClass. (Alexey Kutin via Adrien Grand)
+
+* LUCENE-4972: DirectoryTaxonomyWriter created empty commits even if no changes
+  were made. (Shai Erera, Michael McCandless)
+  
+* LUCENE-949: AnalyzingQueryParser can't work with leading wildcards.
+  (Tim Allison, Robert Muir, Steve Rowe)
+
+* LUCENE-4980: Fix issues preventing mixing of RangeFacetRequest and
+  non-RangeFacetRequest when using DrillSideways.  (Mike McCandless,
+  Shai Erera)
+
+* LUCENE-4996: Ensure DocInverterPerField always includes field name
+  in exception messages.  (Markus Jelsma via Robert Muir)
+
+* LUCENE-4992: Fix constructor of CustomScoreQuery to take FunctionQuery
+  for scoringQueries. Instead use QueryValueSource to safely wrap arbitrary 
+  queries and use them with CustomScoreQuery.  (John Wang, Robert Muir)
+
+Optimizations
+
+* LUCENE-4936: Improve numeric doc values compression in case all values share
+  a common divisor. In particular, this improves the compression ratio of dates
+  without time when they are encoded as milliseconds since Epoch. Also support
+  TABLE compressed numerics in the Disk codec.  (Robert Muir, Adrien Grand)
+
+* LUCENE-4951: DrillSideways uses the new Scorer.cost() method to make
+  better decisions about which scorer to use internally.  (Mike McCandless)
+  
+* LUCENE-4976: PersistentSnapshotDeletionPolicy writes its state to a
+  single snapshots_N file, and no longer requires closing (Mike
+  McCandless, Shai Erera)
+
+New Features
+
+* LUCENE-4766: Added a PatternCaptureGroupTokenFilter that uses Java regexes to 
+  emit multiple tokens one for each capture group in one or more patterns.
+  (Simon Willnauer, Clinton Gormley)
+
+* LUCENE-4952: Expose control (protected method) in DrillSideways to
+  force all sub-scorers to be on the same document being collected.
+  This is necessary when using collectors like
+  ToParentBlockJoinCollector with DrillSideways.  (Mike McCandless)
+
+* SOLR-4761: Add SimpleMergedSegmentWarmer, which just initializes terms,
+  norms, docvalues, and so on. (Mark Miller, Mike McCandless, Robert Muir)
+
+* LUCENE-4964: Allow arbitrary Query for per-dimension drill-down to
+  DrillDownQuery and DrillSideways, to support future dynamic faceting
+  methods (Mike McCandless)
+
+* LUCENE-4966: Add CachingWrapperFilter.sizeInBytes() (Mike McCandless)
+
+* LUCENE-4965: Add dynamic (no taxonomy index used) numeric range
+  faceting to Lucene's facet module (Mike McCandless, Shai Erera)
+
+* LUCENE-4979: LiveFieldFields can work with any ReferenceManager, not
+  just ReferenceManager<IndexSearcher> (Mike McCandless).
+
+* LUCENE-4975: Added a new Replicator module which can replicate index 
+  revisions between server and client. (Shai Erera, Mike McCandless)
+
+* LUCENE-5022: Added FacetResult.mergeHierarchies to merge multiple
+  FacetResult of the same dimension into a single one with the reconstructed
+  hierarchy. (Shai Erera)
+  
+Build
+
+* LUCENE-4987: Upgrade randomized testing to version 2.0.10: 
+  Test framework may fail internally due to overly aggresive J9 optimizations. 
+  (Dawid Weiss, Shai Erera)
+
+Tests
+
+* LUCENE-4901: TestIndexWriterOnJRECrash should work on any 
+  JRE vendor via Runtime.halt().
+  (Mike McCandless, Robert Muir, Uwe Schindler, Rodrigo Trujillo, Dawid Weiss)
+
+======================= Lucene 4.3.1 =======================
+
+Bug Fixes
+
+* SOLR-4813: Fix SynonymFilterFactory to allow init parameters for
+  tokenizer factory used when parsing synonyms file.  (Shingo Sasaki, hossman)
+
+* LUCENE-4935: CustomScoreQuery wrongly applied its query boost twice
+  (boost^2).  (Robert Muir)
+
+* LUCENE-4948: Fixed ArrayIndexOutOfBoundsException in PostingsHighlighter
+  if you had a 64-bit JVM without compressed OOPS: IBM J9, or Oracle with
+  large heap/explicitly disabled.  (Mike McCandless, Uwe Schindler, Robert Muir)
+
+* LUCENE-4953: Fixed ParallelCompositeReader to inform ReaderClosedListeners of
+  its synthetic subreaders. FieldCaches keyed on the atomic childs will be purged
+  earlier and FC insanity prevented.  In addition, ParallelCompositeReader's
+  toString() was changed to better reflect the reader structure.
+  (Mike McCandless, Uwe Schindler)
+
+* LUCENE-4968: Fixed ToParentBlockJoinQuery/Collector: correctly handle parent
+  hits that had no child matches, don't throw IllegalArgumentEx when
+  the child query has no hits, more aggressively catch cases where childQuery
+  incorrectly matches parent documents (Mike McCandless)
+
+* LUCENE-4970: Fix boost value of rewritten NGramPhraseQuery.
+  (Shingo Sasaki via Adrien Grand)
+
+* LUCENE-4974: CommitIndexTask was broken if no params were set. (Shai Erera)
+
+* LUCENE-4986: Fixed case where a newly opened near-real-time reader
+  fails to reflect a delete from IndexWriter.tryDeleteDocument (Reg,
+  Mike McCandless)
+
+* LUCENE-4994: Fix PatternKeywordMarkerFilter to have public constructor.
+  (Uwe Schindler)
+
+* LUCENE-4993: Fix BeiderMorseFilter to preserve custom attributes when
+  inserting tokens with position increment 0.  (Uwe Schindler)
+
+* LUCENE-4991: Fix handling of synonyms in classic QueryParser.getFieldQuery for
+  terms not separated by whitespace. PositionIncrementAttribute was ignored, so with
+  default AND synonyms wrongly became mandatory clauses, and with OR, the
+  coordination factor was wrong.  (李威, Robert Muir)
+
+* LUCENE-5002: IndexWriter#deleteAll() caused a deadlock in DWPT / DWSC if a
+  DwPT was flushing concurrently while deleteAll() aborted all DWPT. The IW
+  should never wait on DWPT via the flush control while holding on to the IW
+  Lock. (Simon Willnauer)
+
+Optimizations
+
+* LUCENE-4938: Don't use an unnecessarily large priority queue in IndexSearcher
+  methods that take top-N.  (Uwe Schindler, Mike McCandless, Robert Muir)
+
+
+======================= Lucene 4.3.0 =======================
+
+Changes in backwards compatibility policy
+
+* LUCENE-4810: EdgeNGramTokenFilter no longer increments position for
+  multiple ngrams derived from the same input token. (Walter Underwood
+  via Mike McCandless)
+
+* LUCENE-4822: KeywordTokenFilter is now an abstract class. Subclasses
+  need to implement #isKeyword() in order to mark terms as keywords. 
+  The existing functionality has been factored out into a new 
+  SetKeywordTokenFilter class. (Simon Willnauer, Uwe Schindler)
+  
+* LUCENE-4642: Remove Tokenizer's and subclasses' ctors taking
+  AttributeSource. (Renaud Delbru, Uwe Schindler, Steve Rowe)
+
+* LUCENE-4833: IndexWriterConfig used to use LogByteSizeMergePolicy when
+  calling setMergePolicy(null) although the default merge policy is
+  TieredMergePolicy. IndexWriterConfig setters now throw an exception when
+  passed null if null is not a valid value. (Adrien Grand)
+
+* LUCENE-4849: Made ParallelTaxonomyArrays abstract with a concrete
+  implementation for DirectoryTaxonomyWriter/Reader. Also moved it under
+  o.a.l.facet.taxonomy. (Shai Erera)
+
+* LUCENE-4876: IndexDeletionPolicy is now an abstract class instead of an
+  interface. IndexDeletionPolicy, MergeScheduler and InfoStream now implement
+  Cloneable. (Adrien Grand)
+
+* LUCENE-4874: FilterAtomicReader and related classes (FilterTerms,
+  FilterDocsEnum, ...) don't forward anymore to the filtered instance when the
+  method has a default implementation through other abstract methods.
+  (Adrien Grand, Robert Muir)
+
+* LUCENE-4642, LUCENE-4877: Implementors of TokenizerFactory, TokenFilterFactory,
+  and CharFilterFactory now need to provide at least one constructor taking
+  Map<String,String> to be able to be loaded by the SPI framework (e.g., from Solr).
+  In addition, TokenizerFactory needs to implement the abstract
+  create(AttributeFactory,Reader) method.  (Renaud Delbru, Uwe Schindler,
+  Steve Rowe, Robert Muir)
+
+API Changes
+
+* LUCENE-4896: Made PassageFormatter abstract in PostingsHighlighter, made
+  members of DefaultPassageFormatter protected.  (Luca Cavanna via Robert Muir)
+
+* LUCENE-4844: removed TaxonomyReader.getParent(), you should use
+  TaxonomyReader.getParallelArrays().parents() instead. (Shai Erera)
+
+* LUCENE-4742: Renamed spatial 'Node' to 'Cell', along with any method names
+  and variables using this terminology. (David Smiley)
+
+New Features
+
+* LUCENE-4815: DrillSideways now allows more than one FacetRequest per
+  dimension (Mike McCandless)
+  
+* LUCENE-3918: IndexSorter has been ported to 4.3 API and now supports
+  sorting documents by a numeric DocValues field, or reverse the order of
+  the documents in the index. Additionally, apps can implement their own
+  sort criteria. (Anat Hashavit, Shai Erera)
+
+* LUCENE-4817: Added KeywordRepeatFilter that allows to emit a token twice
+  once as a keyword and once as an ordinary token allow stemmers to emit
+  a stemmed version along with the un-stemmed version. (Simon Willnauer)
+
+* LUCENE-4822: PatternKeywordTokenFilter can mark tokens as keywords based
+  on regular expressions. (Simon Willnauer, Uwe Schindler)
+
+* LUCENE-4821: AnalyzingSuggester now uses the ending offset to
+  determine whether the last token was finished or not, so that a
+  query "i " will no longer suggest "Isla de Muerta" for example.
+  (Mike McCandless)
+  
+* LUCENE-4642: Add create(AttributeFactory) to TokenizerFactory and
+  subclasses with ctors taking AttributeFactory. 
+  (Renaud Delbru, Uwe Schindler, Steve Rowe)
+
+* LUCENE-4820: Add payloads to Analyzing/FuzzySuggester, to record an
+  arbitrary byte[] per suggestion (Mike McCandless)
+
+* LUCENE-4816: Add WholeBreakIterator to PostingsHighlighter
+  for treating the entire content as a single Passage.  (Robert
+  Muir, Mike McCandless)
+
+* LUCENE-4827: Add additional ctor to PostingsHighlighter PassageScorer
+  to provide bm25 k1,b,avgdl parameters. (Robert Muir)
+
+* LUCENE-4607: Add DocIDSetIterator.cost() and Spans.cost() for optimizing
+  scoring.  (Simon Willnauer, Robert Muir)
+
+* LUCENE-4795: Add SortedSetDocValuesFacetFields and
+  SortedSetDocValuesAccumulator, to compute topK facet counts from a
+  field's SortedSetDocValues.  This method only supports flat
+  (dim/label) facets, is a bit (~25%) slower, has added cost
+  per-IndexReader-open to compute its ordinal map, but it requires no
+  taxonomy index and it tie-breaks facet labels in an understandable
+  (by Unicode sort order) way.  (Robert Muir, Mike McCandless)
+  
+* LUCENE-4843: Add LimitTokenPositionFilter: don't emit tokens with 
+  positions that exceed the configured limit.  (Steve Rowe)
+
+* LUCENE-4832: Add ToParentBlockJoinCollector.getTopGroupsWithAllChildDocs, to retrieve
+  all children in each group.  (Aleksey Aleev via Mike McCandless)
+
+* LUCENE-4846: PostingsHighlighter subclasses can override where the
+  String values come from (it still defaults to pulling from stored
+  fields).  (Robert Muir, Mike McCandless)
+
+* LUCENE-4853: Add PostingsHighlighter.highlightFields method that
+  takes int[] docIDs instead of TopDocs.  (Robert Muir, Mike
+  McCandless)
+
+* LUCENE-4856: If there are no matches for a given field, return the
+  first maxPassages sentences (Robert Muir, Mike McCandless)
+
+* LUCENE-4859: IndexReader now exposes Terms statistics: getDocCount,
+  getSumDocFreq, getSumTotalTermFreq. (Shai Erera)
+
+* LUCENE-4862: It is now possible to terminate collection of a single
+  IndexReader leaf by throwing a CollectionTerminatedException in
+  Collector.collect. (Adrien Grand, Shai Erera)
+
+* LUCENE-4752: New SortingMergePolicy (in lucene/misc) that sorts documents
+  before merging segments. (Adrien Grand, Shai Erera, David Smiley)
+
+* LUCENE-4860: Customize scoring and formatting per-field in
+  PostingsHighlighter by subclassing and overriding the getFormatter
+  and/or getScorer methods.  This also changes Passage.getMatchTerms()
+  to return BytesRef[] instead of Term[].  (Robert Muir, Mike
+  McCandless)
+
+* LUCENE-4839: Added SorterTemplate.timSort, a O(n log n) stable sort algorithm
+  that performs well on partially sorted data. (Adrien Grand)
+
+* LUCENE-4644: Added support for the "IsWithin" spatial predicate for
+  RecursivePrefixTreeStrategy. It's for matching non-point indexed shapes; if
+  you only have points (1/doc) then "Intersects" is equivalent and faster.
+  See the javadocs.  (David Smiley)
+
+* LUCENE-4861: Make BreakIterator per-field in PostingsHighlighter. This means
+  you can override getBreakIterator(String field) to use different mechanisms
+  for e.g. title vs. body fields.  (Mike McCandless, Robert Muir)
+
+* LUCENE-4645: Added support for the "Contains" spatial predicate for
+  RecursivePrefixTreeStrategy.  (David Smiley)
+
+* LUCENE-4898: DirectoryReader.openIfChanged now allows opening a reader
+  on an IndexCommit starting from a near-real-time reader (previously
+  this would throw IllegalArgumentException).  (Mike McCandless)
+
+* LUCENE-4905: Made the maxPassages parameter per-field in PostingsHighlighter.
+  (Robert Muir)
+
+* LUCENE-4897: Added TaxonomyReader.getChildren for traversing a category's 
+  children. (Shai Erera)
+
+* LUCENE-4902: Added FilterDirectoryReader to allow easy filtering of a
+  DirectoryReader's subreaders. (Alan Woodward, Adrien Grand, Uwe Schindler)
+
+* LUCENE-4858: Added EarlyTerminatingSortingCollector to be used in conjunction
+  with SortingMergePolicy, which allows to early terminate queries on sorted
+  indexes, when the sort order matches the index order. (Adrien Grand, Shai Erera)
+
+* LUCENE-4904: Added descending sort order to NumericDocValuesSorter. (Shai Erera)
+
+* LUCENE-3786: Added SearcherTaxonomyManager, to manage access to both
+  IndexSearcher and DirectoryTaxonomyReader for near-real-time
+  faceting.  (Shai Erera, Mike McCandless)
+
+* LUCENE-4915: DrillSideways now allows drilling down on fields that
+  are not faceted. (Mike McCandless)
+
+* LUCENE-4895: Added support for the "IsDisjointTo" spatial predicate for
+  RecursivePrefixTreeStrategy.  (David Smiley)
+
+* LUCENE-4774: Added FieldComparator that allows sorting parent documents based on
+  fields on the child / nested document level. (Martijn van Groningen)
+
+Optimizations
+
+* LUCENE-4839: SorterTemplate.merge can now be overridden in order to replace
+  the default implementation which merges in-place by a faster implementation
+  that could require fewer swaps at the expense of some extra memory.
+  ArrayUtil and CollectionUtil override it so that their mergeSort and timSort
+  methods are faster but only require up to 1% of extra memory. (Adrien Grand)
+
+* LUCENE-4571: Speed up BooleanQuerys with minNrShouldMatch to use
+  skipping.  (Stefan Pohl via Robert Muir)
+
+* LUCENE-4863: StemmerOverrideFilter now uses a FST to represent its overrides
+  in memory. (Simon Willnauer)
+
+* LUCENE-4889: UnicodeUtil.codePointCount implementation replaced with a
+  non-array-lookup version. (Dawid Weiss)
+
+* LUCENE-4923: Speed up BooleanQuerys processing of in-order disjunctions.
+  (Robert Muir)
+
+* LUCENE-4926: Speed up DisjunctionMatchQuery.  (Robert Muir)
+
+* LUCENE-4930: Reduce contention in older/buggy JVMs when using
+  AttributeSource#addAttribute() because java.lang.ref.ReferenceQueue#poll()
+  is implemented using synchronization.  (Christian Ziech, Karl Wright,
+  Uwe Schindler)
+
+Bug Fixes
+
+* LUCENE-4868: SumScoreFacetsAggregator used an incorrect index into
+  the scores array. (Shai Erera)
+
+* LUCENE-4882: FacetsAccumulator did not allow to count ROOT category (i.e.
+  count dimensions). (Shai Erera)
+
+* LUCENE-4876: IndexWriterConfig.clone() now clones its MergeScheduler,
+  IndexDeletionPolicy and InfoStream in order to make an IndexWriterConfig and
+  its clone fully independent. (Adrien Grand)
+
+* LUCENE-4893: Facet counts were multiplied as many times as 
+  FacetsCollector.getFacetResults() is called. (Shai Erera)
+
+* LUCENE-4888: Fixed SloppyPhraseScorer, MultiDocs(AndPositions)Enum and
+  MultiSpansWrapper which happened to sometimes call DocIdSetIterator.advance
+  with target<=current (in this case the behavior of advance is undefined).
+  (Adrien Grand)
+
+* LUCENE-4899: FastVectorHighlighter failed with StringIndexOutOfBoundsException
+  if a single highlight phrase or term was greater than the fragCharSize producing
+  negative string offsets. (Simon Willnauer)
+
+* LUCENE-4877: Throw exception for invalid arguments in analysis factories.
+  (Steve Rowe, Uwe Schindler, Robert Muir)
+
+* LUCENE-4914: SpatialPrefixTree's Node/Cell.reset() forgot to reset the 'leaf'
+  flag.  It affects SpatialRecursivePrefixTreeStrategy on non-point indexed
+  shapes, as of Lucene 4.2. (David Smiley)
+
+* LUCENE-4913: FacetResultNode.ordinal was always 0 when all children
+  are returned. (Mike McCandless)
+
+* LUCENE-4918: Highlighter closes the given IndexReader if QueryScorer
+  is used with an external IndexReader. (Simon Willnauer, Sirvan Yahyaei)
+
+* LUCENE-4880: Fix MemoryIndex to consume empty terms from the tokenstream consistent
+  with IndexWriter. Previously it discarded them.  (Timothy Allison via Robert Muir)
+
+* LUCENE-4885: FacetsAccumulator did not set the correct value for
+  FacetResult.numValidDescendants. (Mike McCandless, Shai Erera)
+
+* LUCENE-4925: Fixed IndexSearcher.search when the argument list contains a Sort
+  and one of the sort fields is the relevance score. Only IndexSearchers created
+  with an ExecutorService are concerned. (Adrien Grand)
+
+* LUCENE-4738, LUCENE-2727, LUCENE-2812: Simplified
+  DirectoryReader.indexExists so that it's more robust to transient
+  IOExceptions (e.g. due to issues like file descriptor exhaustion),
+  but this will also cause it to err towards returning true for
+  example if the directory contains a corrupted index or an incomplete
+  initial commit.  In addition, IndexWriter with OpenMode.CREATE will
+  now succeed even if the directory contains a corrupted index (Billow
+  Gao, Robert Muir, Mike McCandless)
+
+* LUCENE-4928: Stored fields and term vectors could become super slow in case
+  of tiny documents (a few bytes). This is especially problematic when switching
+  codecs since bulk-merge strategies can't be applied and the same chunk of
+  documents can end up being decompressed thousands of times. A hard limit on
+  the number of documents per chunk has been added to fix this issue.
+  (Robert Muir, Adrien Grand)
+
+* LUCENE-4934: Fix minor equals/hashcode problems in facet/DrillDownQuery, 
+  BoostingQuery, MoreLikeThisQuery, FuzzyLikeThisQuery, and block join queries.
+  (Robert Muir, Uwe Schindler)
+
+* LUCENE-4504: Fix broken sort comparator in ValueSource.getSortField,
+  used when sorting by a function query.  (Tom Shally via Robert Muir)
+
+* LUCENE-4937: Fix incorrect sorting of float/double values (+/-0, NaN).
+  (Robert Muir, Uwe Schindler)
+
+Documentation
+
+* LUCENE-4841: Added example SimpleSortedSetFacetsExample to show how
+  to use the new SortedSetDocValues backed facet implementation.
+  (Shai Erera, Mike McCandless)
+
+Build
+
+* LUCENE-4879: Upgrade randomized testing to version 2.0.9: 
+  Filter stack traces on console output. (Dawid Weiss, Robert Muir)
+
+
+======================= Lucene 4.2.1 =======================
+
+Bug Fixes
+
+* LUCENE-4713: The SPI components used to load custom codecs or analysis
+  components were fixed to also scan the Lucene ClassLoader in addition
+  to the context ClassLoader, so Lucene is always able to find its own
+  codecs. The special case of a null context ClassLoader is now also
+  supported.  (Christian Kohlschütter, Uwe Schindler)
+
+* LUCENE-4819: seekExact(BytesRef, boolean) did not work correctly with
+  Sorted[Set]DocValuesTermsEnum.  (Robert Muir)
+
+* LUCENE-4826: PostingsHighlighter was not returning the top N best
+  scoring passages. (Robert Muir, Mike McCandless)
+
+* LUCENE-4854: Fix DocTermOrds.getOrdTermsEnum() to not return negative
+  ord on initial next().  (Robert Muir)
+
+* LUCENE-4836: Fix SimpleRateLimiter#pause to return the actual time spent
+  sleeping instead of the wakeup timestamp in nano seconds. (Simon Willnauer)
+
+* LUCENE-4828: BooleanQuery no longer extracts terms from its MUST_NOT
+  clauses.  (Mike McCandless)
+
+* SOLR-4589: Fixed CPU spikes and poor performance in lazy field loading 
+  of multivalued fields. (hossman)
+
+* LUCENE-4870: Fix bug where an entire index might be deleted by the IndexWriter
+  due to false detection if an index exists in the directory when
+  OpenMode.CREATE_OR_APPEND is used. This might also affect application that set
+  the open mode manually using DirectoryReader#indexExists. (Simon Willnauer)
+
+* LUCENE-4878: Override getRegexpQuery in MultiFieldQueryParser to prefent
+  NullPointerException when regular expression syntax is used with
+  MultiFieldQueryParser. (Simon Willnauer, Adam Rauch)
+
+Optimizations
+
+* LUCENE-4819: Added Sorted[Set]DocValues.termsEnum(), and optimized the
+  default codec for improved enumeration performance.  (Robert Muir)
+
+* LUCENE-4854: Speed up TermsEnum of FieldCache.getDocTermOrds.
+  (Robert Muir)
+
+* LUCENE-4857: Don't unnecessarily copy stem override map in
+  StemmerOverrideFilter. (Simon Willnauer)
+
 ======================= Lucene 4.2.0 =======================
 
 Changes in backwards compatibility policy
@@ -525,9 +1078,6 @@ Bug Fixes
   romaji even for out-of-vocabulary kana cases (e.g. half-width forms).
   (Robert Muir)
 
-* LUCENE-4504: Fix broken sort comparator in ValueSource.getSortField,
-  used when sorting by a function query.  (Tom Shally via Robert Muir)
-
 * LUCENE-4511: TermsFilter might return wrong results if a field is not 
   indexed or doesn't exist in the index. (Simon Willnauer)
 

Modified: lucene/dev/branches/security/lucene/NOTICE.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/NOTICE.txt?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/NOTICE.txt (original)
+++ lucene/dev/branches/security/lucene/NOTICE.txt Thu May 30 07:53:18 2013
@@ -27,11 +27,6 @@ Jean-Philippe Barrette-LaPierre. This li
 see http://sites.google.com/site/rrettesite/moman and 
 http://bitbucket.org/jpbarrette/moman/overview/
 
-The class org.apache.lucene.util.SorterTemplate was inspired by CGLIB's class
-with the same name. The implementation part is mainly done using pre-existing
-Lucene sorting code. In-place stable mergesort was borrowed from CGLIB,
-which is Apache-licensed.
-
 The class org.apache.lucene.util.WeakIdentityMap was derived from
 the Apache CXF project and is Apache License 2.0.
 
@@ -109,8 +104,8 @@ LGPL and Creative Commons ShareAlike.
 Morfologic includes data from BSD-licensed dictionary of Polish (SGJP)
 (http://sgjp.pl/morfeusz/)
 
-Servlet-api.jar is under the CDDL license, the original source
-code for this can be found at http://www.eclipse.org/jetty/downloads.php
+Servlet-api.jar and javax.servlet-*.jar are under the CDDL license, the original
+source code for this can be found at http://www.eclipse.org/jetty/downloads.php
 
 ===========================================================================
 Kuromoji Japanese Morphological Analyzer - Apache Lucene Integration

Modified: lucene/dev/branches/security/lucene/SYSTEM_REQUIREMENTS.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/SYSTEM_REQUIREMENTS.txt?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/SYSTEM_REQUIREMENTS.txt (original)
+++ lucene/dev/branches/security/lucene/SYSTEM_REQUIREMENTS.txt Thu May 30 07:53:18 2013
@@ -1,11 +1,11 @@
 # System Requirements 
 
-Apache Lucene runs of Java 6 or greater. When using Java 7, be sure to 
+Apache Lucene runs of Java 7 or greater. When using Java 7, be sure to 
 install at least Update 1! With all Java versions it is strongly 
 recommended to not use experimental `-XX` JVM options. It is also 
 recommended to always use the latest update version of your Java VM, 
 because bugs may affect Lucene. An overview of known JVM bugs can be 
-found on http://wiki.apache.org/lucene-java/SunJavaBugs. 
+found on http://wiki.apache.org/lucene-java/JavaBugs. 
 
 CPU, disk and memory requirements are based on the many choices made in 
 implementing Lucene (document size, number of documents, and number of 

Modified: lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java (original)
+++ lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicAnalyzer.java Thu May 30 07:53:18 2013
@@ -23,7 +23,7 @@ import java.io.Reader;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.core.LowerCaseFilter;
 import org.apache.lucene.analysis.core.StopFilter;
-import org.apache.lucene.analysis.miscellaneous.KeywordMarkerFilter;
+import org.apache.lucene.analysis.miscellaneous.SetKeywordMarkerFilter;
 import org.apache.lucene.analysis.standard.StandardTokenizer;
 import org.apache.lucene.analysis.util.CharArraySet;
 import org.apache.lucene.analysis.util.StopwordAnalyzerBase;
@@ -107,7 +107,7 @@ public final class ArabicAnalyzer extend
 
   /**
    * Builds an analyzer with the given stop word. If a none-empty stem exclusion set is
-   * provided this analyzer will add a {@link KeywordMarkerFilter} before
+   * provided this analyzer will add a {@link SetKeywordMarkerFilter} before
    * {@link ArabicStemFilter}.
    * 
    * @param matchVersion
@@ -131,7 +131,7 @@ public final class ArabicAnalyzer extend
    * @return {@link org.apache.lucene.analysis.Analyzer.TokenStreamComponents}
    *         built from an {@link StandardTokenizer} filtered with
    *         {@link LowerCaseFilter}, {@link StopFilter},
-   *         {@link ArabicNormalizationFilter}, {@link KeywordMarkerFilter}
+   *         {@link ArabicNormalizationFilter}, {@link SetKeywordMarkerFilter}
    *         if a stem exclusion set is provided and {@link ArabicStemFilter}.
    */
   @Override
@@ -144,7 +144,7 @@ public final class ArabicAnalyzer extend
     // TODO maybe we should make ArabicNormalization filter also KeywordAttribute aware?!
     result = new ArabicNormalizationFilter(result);
     if(!stemExclusionSet.isEmpty()) {
-      result = new KeywordMarkerFilter(result, stemExclusionSet);
+      result = new SetKeywordMarkerFilter(result, stemExclusionSet);
     }
     return new TokenStreamComponents(source, new ArabicStemFilter(result));
   }

Modified: lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicNormalizationFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicNormalizationFilterFactory.java?rev=1487777&r1=1487776&r2=1487777&view=diff
==============================================================================
--- lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicNormalizationFilterFactory.java (original)
+++ lucene/dev/branches/security/lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/ArabicNormalizationFilterFactory.java Thu May 30 07:53:18 2013
@@ -17,26 +17,34 @@ package org.apache.lucene.analysis.ar;
  * limitations under the License.
  */
 
+import java.util.Map;
+
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.ar.ArabicNormalizationFilter;
 import org.apache.lucene.analysis.util.AbstractAnalysisFactory;
 import org.apache.lucene.analysis.util.MultiTermAwareComponent;
 import org.apache.lucene.analysis.util.TokenFilterFactory;
 
-
 /**
  * Factory for {@link ArabicNormalizationFilter}.
- * <pre class="prettyprint" >
+ * <pre class="prettyprint">
  * &lt;fieldType name="text_arnormal" class="solr.TextField" positionIncrementGap="100"&gt;
  *   &lt;analyzer&gt;
  *     &lt;tokenizer class="solr.StandardTokenizerFactory"/&gt;
  *     &lt;filter class="solr.ArabicNormalizationFilterFactory"/&gt;
  *   &lt;/analyzer&gt;
  * &lt;/fieldType&gt;</pre>
- *
  */
 public class ArabicNormalizationFilterFactory extends TokenFilterFactory implements MultiTermAwareComponent {
 
+  /** Creates a new ArabicNormalizationFilterFactory */
+  public ArabicNormalizationFilterFactory(Map<String,String> args) {
+    super(args);
+    if (!args.isEmpty()) {
+      throw new IllegalArgumentException("Unknown parameters: " + args);
+    }
+  }
+
   @Override
   public ArabicNormalizationFilter create(TokenStream input) {
     return new ArabicNormalizationFilter(input);