From 7c21be35088d22e3efcba541b51d2286a1ac97e9 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Fri, 09 Mar 2007 18:44:33 +0000
Subject: [PATCH] Update the build process so that the current configuration and schema are saved in a config/upgrade directory that may be used as a reference when identifying changes to apply to the base configuration when performing an upgrade from one version to another.
---
opends/build-tools/src/org/opends/build/tools/ConcatSchema.java | 272 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
opends/build.xml | 16 +++
2 files changed, 288 insertions(+), 0 deletions(-)
diff --git a/opends/build-tools/src/org/opends/build/tools/ConcatSchema.java b/opends/build-tools/src/org/opends/build/tools/ConcatSchema.java
new file mode 100644
index 0000000..e28be56
--- /dev/null
+++ b/opends/build-tools/src/org/opends/build/tools/ConcatSchema.java
@@ -0,0 +1,272 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2007 Sun Microsystems, Inc.
+ */
+package org.opends.build.tools;
+
+
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.util.LinkedList;
+import java.util.TreeSet;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+
+
+/**
+ * This class provides an implementation of an Ant task that concatenates the
+ * contents of the files in the schema directory to create a base schema that
+ * may be used during the upgrade process. Each element will also include the
+ * X-SCHEMA-FILE extension to indicate the source schema file.
+ */
+public class ConcatSchema
+ extends Task
+{
+ // The path to the directory containing the schema files.
+ private String schemaDirectory;
+
+ // The path to the concatenated schema file to create.
+ private String toFile;
+
+
+
+ /**
+ * Specifies the path to the directory containing the schema files.
+ *
+ * @param schemaDirectory The path to the directory containing the schema
+ * files.
+ */
+ public void setSchemaDirectory(String schemaDirectory)
+ {
+ this.schemaDirectory = schemaDirectory;
+ }
+
+
+
+ /**
+ * Specifies the path to the file to create containing the concatenated schema
+ * elements.
+ *
+ * @param toFile The path to the file containing the concatenated schema
+ * elements.
+ */
+ public void setToFile(String toFile)
+ {
+ this.toFile = toFile;
+ }
+
+
+
+ /**
+ * Performs the appropriate processing needed for this task. In this case,
+ * it uses SVNKit to identify all modified files in the current workspace.
+ * For all source files, look for comment lines containing the word
+ * "copyright" and make sure at least one of them contains the current year.
+ */
+ @Override()
+ public void execute()
+ {
+ // Get a sorted list of the files in the schema directory.
+ TreeSet<String> schemaFileNames = new TreeSet<String>();
+ for (File f : new File(schemaDirectory).listFiles())
+ {
+ if (f.isFile())
+ {
+ schemaFileNames.add(f.getName());
+ }
+ }
+
+
+ // Create a set of lists that will hold the schema elements read from the
+ // files.
+ LinkedList<String> attributeTypes = new LinkedList<String>();
+ LinkedList<String> objectClasses = new LinkedList<String>();
+ LinkedList<String> nameForms = new LinkedList<String>();
+ LinkedList<String> ditContentRules = new LinkedList<String>();
+ LinkedList<String> ditStructureRules = new LinkedList<String>();
+ LinkedList<String> matchingRuleUses = new LinkedList<String>();
+
+
+ // Open each of the files in order and read the elements that they contain,
+ // appending them to the appropriate lists.
+ for (String name : schemaFileNames)
+ {
+ // Read the contents of the file into a list with one schema element per
+ // list element.
+ LinkedList<StringBuilder> lines = new LinkedList<StringBuilder>();
+ try
+ {
+ BufferedReader reader = new BufferedReader(new FileReader(
+ new File(schemaDirectory, name)));
+
+ while (true)
+ {
+ String line = reader.readLine();
+ if (line == null)
+ {
+ break;
+ }
+ else if (line.startsWith("#") || (line.length() == 0))
+ {
+ continue;
+ }
+ else if (line.startsWith(" "))
+ {
+ lines.getLast().append(line.substring(1));
+ }
+ else
+ {
+ lines.add(new StringBuilder(line));
+ }
+ }
+
+ reader.close();
+ }
+ catch (Exception e)
+ {
+ throw new BuildException("Error while reading schema file " + name +
+ ": " + e, e);
+ }
+
+
+ // Iterate through each line in the list. Find the colon and get the
+ // attribute name at the beginning. If it's someting that we don't
+ // recognize, then skip it. Otherwise, add the X-SCHEMA-FILE extension
+ // and add it to the appropriate schema element list.
+ for (StringBuilder buffer : lines)
+ {
+ // Get the line and add the X-SCHEMA-FILE extension to the end of it.
+ // All of them should end with " )" but some might have the parenthesis
+ // crammed up against the last character so deal with that as well.
+ String line = buffer.toString().trim();
+ if (line.endsWith(" )"))
+ {
+ line = line.substring(0, line.length()-1) + "X-SCHEMA-FILE '" + name +
+ "' )";
+ }
+ else if (line.endsWith(")"))
+ {
+ line = line.substring(0, line.length()-1) + " X-SCHEMA-FILE '" + name +
+ "' )";
+ }
+ else
+ {
+ continue;
+ }
+
+ String lowerLine = line.toLowerCase();
+ if (lowerLine.startsWith("attributetypes:"))
+ {
+ attributeTypes.add(line);
+ }
+ else if (lowerLine.startsWith("objectclasses:"))
+ {
+ objectClasses.add(line);
+ }
+ else if (lowerLine.startsWith("nameforms:"))
+ {
+ nameForms.add(line);
+ }
+ else if (lowerLine.startsWith("ditcontentrules:"))
+ {
+ ditContentRules.add(line);
+ }
+ else if (lowerLine.startsWith("ditstructurerules:"))
+ {
+ ditStructureRules.add(line);
+ }
+ else if (lowerLine.startsWith("matchingruleuse:"))
+ {
+ matchingRuleUses.add(line);
+ }
+ }
+ }
+
+
+ // Write the resulting output to the merged schema file.
+ try
+ {
+ BufferedWriter writer = new BufferedWriter(new FileWriter(toFile));
+ writer.write("dn: cn=schema");
+ writer.newLine();
+ writer.write("objectClass: top");
+ writer.newLine();
+ writer.write("objectClass: ldapSubentry");
+ writer.newLine();
+ writer.write("objectClass: subschema");
+ writer.newLine();
+
+ for (String line : attributeTypes)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ for (String line : objectClasses)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ for (String line : nameForms)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ for (String line : ditContentRules)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ for (String line : ditStructureRules)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ for (String line : matchingRuleUses)
+ {
+ writer.write(line);
+ writer.newLine();
+ }
+
+ writer.close();
+ }
+ catch (Exception e)
+ {
+ throw new BuildException("Error while writing concatenated schema file " +
+ toFile + ": " + e, e);
+ }
+ }
+}
+
diff --git a/opends/build.xml b/opends/build.xml
index 2d45b20..c65453e 100644
--- a/opends/build.xml
+++ b/opends/build.xml
@@ -591,6 +591,7 @@
<mkdir dir="${pdir}/bin" />
<mkdir dir="${pdir}/classes" />
<mkdir dir="${pdir}/config" />
+ <mkdir dir="${pdir}/config/upgrade" />
<mkdir dir="${pdir}/config/schema" />
<mkdir dir="${pdir}/config/messages" />
<mkdir dir="${pdir}/config/MakeLDIF" />
@@ -628,6 +629,21 @@
<fileset file="${config.dir}/*" />
</copy>
+ <copy file="${pdir}/config/config.ldif"
+ tofile="${pdir}/config/upgrade/config.ldif.${REVISION_NUMBER}" />
+
+ <taskdef name="concatschema"
+ classname="org.opends.build.tools.ConcatSchema">
+ <classpath>
+ <fileset dir="${build.dir}/build-tools">
+ <include name="*.jar" />
+ </fileset>
+ </classpath>
+ </taskdef>
+
+ <concatschema schemaDirectory="${resource.dir}/schema"
+ toFile="${pdir}/config/upgrade/schema.ldif.${REVISION_NUMBER}" />
+
<copy todir="${pdir}/config/schema">
<fileset dir="${resource.dir}/schema" />
</copy>
--
Gitblit v1.10.0