From b7d4b7fe4faa066678983b7ff69a166bbf11886c Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Sun, 28 Jan 2007 18:55:53 +0000
Subject: [PATCH] Add features into our build process that can make use of the SVNKit library to interact with the Subversion workspace.  This includes three components:

---
 opends/build-tools/src/org/opends/build/tools/GetSubversionRevision.java |  140 ++++++
 opends/ext/svnkit/SEQUENCE-LICENSE                                       |   48 ++
 opends/build-tools/src/org/opends/build/tools/CheckCopyrightDates.java   |  300 +++++++++++++
 opends/ext/svnkit/GANYMED-LICENSE                                        |   57 ++
 opends/ext/svnkit/svnkit-cli.jar                                         |    0 
 opends/ext/svnkit/JAVAHL-LICENSE                                         |   55 ++
 opends/ext/svnkit/svn                                                    |   26 +
 opends/ext/svnkit/svnkit-javahl.jar                                      |    0 
 opends/ext/svnkit/svnsync                                                |   26 +
 opends/resource/DynamicConstants.java.stubs                              |    7 
 opends/src/server/org/opends/server/core/DirectoryServer.java            |    1 
 opends/ext/svnkit/ganymed.jar                                            |    0 
 opends/ext/svnkit/COPYING                                                |   47 ++
 opends/build.xml                                                         |   83 +++
 opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java |    4 
 opends/ext/svnkit/doc.tar.gz                                             |    0 
 opends/ext/svnkit/changelog.txt                                          |  288 +++++++++++++
 opends/ext/svnkit/svn.bat                                                |   11 
 opends/ext/svnkit/svnsync.bat                                            |   11 
 opends/ext/svnkit/svnkitsrc.zip                                          |    0 
 opends/build-tools/src/org/opends/build/tools/CoverageDiff.java          |  111 ++---
 opends/ext/svnkit/svnkit.jar                                             |    0 
 opends/ext/svnkit/README.txt                                             |   40 +
 opends/ext/svnkit/logging.properties.disabled                            |    9 
 24 files changed, 1,182 insertions(+), 82 deletions(-)

diff --git a/opends/build-tools/src/org/opends/build/tools/CheckCopyrightDates.java b/opends/build-tools/src/org/opends/build/tools/CheckCopyrightDates.java
new file mode 100644
index 0000000..31452f7
--- /dev/null
+++ b/opends/build-tools/src/org/opends/build/tools/CheckCopyrightDates.java
@@ -0,0 +1,300 @@
+/*
+ * 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.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.GregorianCalendar;
+import java.util.LinkedList;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.DirectoryScanner;
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.types.FileSet;
+
+import org.tmatesoft.svn.core.SVNException;
+import org.tmatesoft.svn.core.wc.SVNStatus;
+import org.tmatesoft.svn.core.wc.SVNStatusClient;
+import org.tmatesoft.svn.core.wc.SVNStatusType;
+
+
+
+/**
+ * This class provides an implementation of an Ant task that may be used to
+ * verify that the copyright dates of all modified files in the workspace have
+ * been updated to include the current year.  In particular, for all files in
+ * one of the specified filesets that have been created or modified in the
+ * local workspace, it will parse the file for any line which appears to be
+ * a comment and contains the word "copyright".  If the line does not also
+ * contain the current year, then it will be flagged as a potential violation to
+ * be addressed.
+ */
+public class CheckCopyrightDates
+       extends Task
+{
+  /**
+   * The name of the system property that may be used to prevent copyright date
+   * problems from failing the build.
+   */
+  public static final String IGNORE_ERRORS_PROPERTY =
+       "org.opends.server.IgnoreCopyrightDateErrors";
+
+
+
+  // A list of all the filesets to be checked.
+  private LinkedList<FileSet> filesetList = new LinkedList<FileSet>();
+
+  // The path to the root of the Subversion workspace for which to retrieve the
+  // revision number.
+  private String workspace = null;
+
+
+
+  /**
+   * Adds the provided fileset to the list of filesets that should be checked.
+   *
+   * @param  fileset  A fileset containing a list of files that should be
+   *                  checked.
+   */
+  public void addFileset(FileSet fileset)
+  {
+    filesetList.add(fileset);
+  }
+
+
+
+  /**
+   * Specifies the path to the root of the Subversion workspace for which to
+   * retrieve the revision number.
+   *
+   * @param  workspace  The path to the root of the Subversion workspace for
+   *                    which to retrieve the revision number.
+   */
+  public void setWorkspace(String workspace)
+  {
+    this.workspace = workspace;
+  }
+
+
+
+  /**
+   * 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
+   *
+   * the current revision number for the local
+   * workspace and store it in a specified property.
+   */
+  @Override()
+  public void execute()
+  {
+    // Make sure that at least one fileset was provided.
+    if (filesetList.isEmpty())
+    {
+      throw new BuildException("ERROR:  No filesets were specified to " +
+                               "indicate which files should be checked.");
+    }
+
+
+    File workspacePath;
+    if ((workspace == null) || (workspace.length() == 0))
+    {
+      workspacePath = getProject().getBaseDir();
+    }
+    else
+    {
+      workspacePath = new File(workspace);
+    }
+    String workspacePathString = workspacePath.getAbsolutePath() +
+                                 File.separator;
+
+
+    // Get the year to use in the determination.
+    GregorianCalendar calendar = new GregorianCalendar();
+    int year = calendar.get(GregorianCalendar.YEAR);
+    String yearString = String.valueOf(year);
+
+
+    // Get the current status for all files in the fileset.  For any files with
+    // local changes, see if there are any files that potentially have the wrong
+    // copyright year.
+    SVNStatusClient svnClient = new SVNStatusClient(null, null);
+
+    LinkedList<String> problemFiles = new LinkedList<String>();
+    for (FileSet fileSet : filesetList)
+    {
+      DirectoryScanner scanner = fileSet.getDirectoryScanner(getProject());
+      for (String relativePath : scanner.getIncludedFiles())
+      {
+        String filePath = scanner.getBasedir() + File.separator + relativePath;
+
+        try
+        {
+          SVNStatus svnStatus = svnClient.doStatus(new File(filePath), false);
+          if (svnStatus == null)
+          {
+            System.err.println("WARNING:  Could not determine Subversion " +
+                               "status for file " + filePath);
+            System.err.println("No further copyright date checking will be " +
+                               "performed.");
+            return;
+          }
+
+          SVNStatusType statusType = svnStatus.getContentsStatus();
+          if ((statusType == SVNStatusType.STATUS_ADDED) ||
+              (statusType == SVNStatusType.STATUS_MODIFIED) ||
+              (statusType == SVNStatusType.STATUS_UNVERSIONED))
+          {
+            BufferedReader reader = null;
+            try
+            {
+              boolean copyrightFound   = false;
+              boolean correctYearFound = false;
+              reader = new BufferedReader(new FileReader(filePath));
+              String line = reader.readLine();
+              while (line != null)
+              {
+                String lowerLine = line.toLowerCase().trim();
+                if (isCommentLine(lowerLine))
+                {
+                  int copyrightPos = lowerLine.indexOf("copyright");
+                  if (copyrightPos > 0)
+                  {
+                    copyrightFound = true;
+                    if (lowerLine.indexOf(yearString) > 0)
+                    {
+                      correctYearFound = true;
+                      break;
+                    }
+                  }
+                }
+
+                line = reader.readLine();
+              }
+
+              if (copyrightFound && (! correctYearFound))
+              {
+                if (filePath.startsWith(workspacePathString))
+                {
+                  problemFiles.add(filePath.substring(
+                                                 workspacePathString.length()));
+                }
+                else
+                {
+                  problemFiles.add(filePath);
+                }
+              }
+            }
+            catch (IOException ioe)
+            {
+              System.err.println("ERROR:  Could not read file " + filePath +
+                                 " to check copyright date.");
+              System.err.println("No further copyright date checking will be " +
+                                 "performed.");
+              return;
+            }
+            finally
+            {
+              try
+              {
+                if (reader != null)
+                {
+                  reader.close();
+                }
+              } catch (Exception e) {}
+            }
+          }
+        }
+        catch (SVNException svnException)
+        {
+          System.err.println("WARNING:  Could not determine Subversion " +
+                             "status for file " + filePath + ":  " +
+                             svnException);
+          System.err.println("No further copyright date checking will be " +
+                             "performed.");
+          return;
+        }
+      }
+    }
+
+
+    if (! problemFiles.isEmpty())
+    {
+      System.err.println("WARNING:  Potential copyright year updates needed " +
+                         "for the following files:");
+      for (String filename : problemFiles)
+      {
+        System.err.println("     " + filename);
+      }
+
+      String ignoreStr = getProject().getProperty(IGNORE_ERRORS_PROPERTY);
+      if ((ignoreStr == null) || (! ignoreStr.equalsIgnoreCase("true")))
+      {
+        throw new BuildException("Fix copyright date problems before " +
+                                 "proceeding, or use '-D" +
+                                 IGNORE_ERRORS_PROPERTY + "=true' to " +
+                                 "ignore copyright warnings.");
+      }
+    }
+  }
+
+
+
+  /**
+   * Indicates whether the provided line appears to be a comment line.  It will
+   * check for a number of common comment indicators in Java source files,
+   * shell scripts, XML files, and LDIF files.
+   *
+   * @param  lowerLine  The line to be checked.  It should have been coverted to
+   *                    all lowercase characters and any leading spaces
+   *                    removed.
+   *
+   * @return  {@code true} if it appears that the line is a comment line, or
+   *          {@code false} if not.
+   */
+  private static boolean isCommentLine(String lowerLine)
+  {
+    if (lowerLine.startsWith("/*") ||
+        lowerLine.startsWith("*") ||
+        lowerLine.startsWith("//") ||
+        lowerLine.startsWith("#") ||
+        lowerLine.startsWith("<!--") ||
+        lowerLine.startsWith("!"))
+    {
+      return true;
+    }
+    else
+    {
+      return false;
+    }
+  }
+}
+
diff --git a/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java b/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
index 3f1d287..4790385 100644
--- a/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
+++ b/opends/build-tools/src/org/opends/build/tools/CoverageDiff.java
@@ -1,3 +1,29 @@
+/*
+ * 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 com.vladium.emma.report.*;
@@ -11,6 +37,10 @@
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.BuildException;
 
+import org.tmatesoft.svn.core.SVNException;
+import org.tmatesoft.svn.core.wc.SVNDiffClient;
+import org.tmatesoft.svn.core.wc.SVNRevision;
+
 public class CoverageDiff extends Task {
 
 
@@ -78,7 +108,6 @@
   private File emmaDataPath;
   private File outputPath;
   private String diffPath;
-  private File svnPath;
 
   public void setEmmaDataPath(String file)
   {
@@ -95,11 +124,6 @@
     diffPath = diffArgs;
   }
 
-  public void setSvnPath(String file)
-  {
-    svnPath = new File(file);
-  }
-
   public void setVerbose(String bol)
   {
     verbose = bol.toLowerCase().equals("true");
@@ -120,7 +144,7 @@
     }
   }
 
-  private void innerExecute() throws BuildException
+  private void innerExecute() throws BuildException, SVNException
   {
     long start = System.currentTimeMillis();
     verboseOut("Starting to execute coveragediff.");
@@ -246,68 +270,21 @@
     return m_view;
   }
 
-  private BufferedReader getDiffOutputReader() throws IOException {
+  private BufferedReader getDiffOutputReader()
+          throws IOException, SVNException {
+    File workspaceRoot = getProject().getBaseDir();
 
-    StringBuilder svnExecCommand = new StringBuilder();
+    SVNDiffClient svnClient = new SVNDiffClient(null, null);
 
-    verboseOut("svnPath = " + svnPath);
-    if(svnPath != null && svnPath.isAbsolute() && svnPath.isFile())
-    {
-      svnExecCommand.append(svnPath.getAbsolutePath());
-    }
-    else
-    {
-      //Just hope its in the path.  On Windows, we need to look for svn.exe instead of just svn.
-      if (System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0) {
-        svnExecCommand.append("svn.exe");
-      } else {
-        svnExecCommand.append("svn");
-      }
-    }
+    File diffFile = File.createTempFile("coverage", "diff");
+    diffFile.deleteOnExit();
 
-    //First verify svn is in path
-    final Process checkChild = Runtime.getRuntime().exec(new String[]{svnExecCommand.toString(), "--version"});
+    svnClient.doDiff(workspaceRoot, SVNRevision.BASE, workspaceRoot,
+                     SVNRevision.WORKING, true, false,
+                     new FileOutputStream(diffFile));
 
-    verboseOut("Waiting for '" + svnExecCommand + " --version' to complete.");
-
-    try
-    {
-      // We have to consume the output of the process (at least on Windows).
-      BufferedReader reader =
-              new BufferedReader(new InputStreamReader(checkChild.getInputStream()));
-      while (reader.readLine() != null) {
-        // Skip over the output of the process
-      }
-
-      checkChild.waitFor();
-    }
-    catch(InterruptedException ie)
-    {
-      throw new IOException("svn --version process interrupted");
-    }
-
-    verboseOut("'" + svnExecCommand + " --version' has completed.");
-
-    if(checkChild.exitValue() != 0)
-    {
-      throw new IOException("Error returned from SVN call");
-    }
-    checkChild.destroy();
-
-    List<String> cmdArray = new ArrayList<String>();
-    // TODO: ideally, this should build up a command arg array instead of a single string
-    // to guard against svn having spaces in the path.  But that isn't too likely
-    svnExecCommand.append(" diff ");
-
-    if(diffPath != null)
-    {
-      svnExecCommand.append(diffPath);
-    }
-
-    verboseOut("About to execute " + svnExecCommand.toString());
-    final Process child = Runtime.getRuntime().exec(svnExecCommand.toString());
-    InputStream diffOutputStream = child.getInputStream();
-    return new BufferedReader(new InputStreamReader(diffOutputStream));
+    return new BufferedReader(new InputStreamReader(new FileInputStream(
+                                                             diffFile)));
   }
 
   private void processDiffOutput(BufferedReader diffOutput,
@@ -644,7 +621,7 @@
     int workingCopyRange;
     int otherCopyBegin;
     int otherCopyRange;
-    
+
     Double[] modCoverage = new Double[4];
     modCoverage[COVERED_MOD_EXE_LINES] = 0.0;
     modCoverage[MOD_EXE_LINES] = 0.0;
@@ -796,7 +773,7 @@
     {
       return null;
     }
-    
+
     for(Iterator packages = rootItem.getChildren(); packages.hasNext();)
     {
       IItem packageItem = (IItem)packages.next();
diff --git a/opends/build-tools/src/org/opends/build/tools/GetSubversionRevision.java b/opends/build-tools/src/org/opends/build/tools/GetSubversionRevision.java
new file mode 100644
index 0000000..2133080
--- /dev/null
+++ b/opends/build-tools/src/org/opends/build/tools/GetSubversionRevision.java
@@ -0,0 +1,140 @@
+/*
+ * 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.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Task;
+
+import org.tmatesoft.svn.core.SVNException;
+import org.tmatesoft.svn.core.wc.SVNInfo;
+import org.tmatesoft.svn.core.wc.SVNRevision;
+import org.tmatesoft.svn.core.wc.SVNWCClient;
+
+
+
+/**
+ * This class provides an implementation of an Ant task that may be used to
+ * determine the current Subversion revision number of the current working
+ * copy.  The value of the revision number will be stored in an Ant property.
+ */
+public class GetSubversionRevision
+       extends Task
+{
+  // The name of the property in which the revision number should be set.
+  private String propertyName = null;
+
+  // The path to the root of the Subversion workspace for which to retrieve the
+  // revision number.
+  private String workspace = null;
+
+
+
+  /**
+   * Specifies the name of the Ant property into which the Subversion revision
+   * number will be stored.
+   *
+   * @param  propertyName  The name of the Ant property into which the
+   *                       Subversion revision number will be stored.
+   */
+  public void setProperty(String propertyName)
+  {
+    this.propertyName = propertyName;
+  }
+
+
+
+  /**
+   * Specifies the path to the root of the Subversion workspace for which to
+   * retrieve the revision number.
+   *
+   * @param  workspace  The path to the root of the Subversion workspace for
+   *                    which to retrieve the revision number.
+   */
+  public void setWorkspace(String workspace)
+  {
+    this.workspace = workspace;
+  }
+
+
+
+  /**
+   * Performs the appropriate processing needed for this task.  In this case,
+   * it uses SVNKit to identify the current revision number for the local
+   * workspace and store it in a specified property.
+   */
+  @Override()
+  public void execute()
+  {
+    if ((propertyName == null) || (propertyName.length() == 0))
+    {
+      throw new BuildException("ERROR:  No property was specified for " +
+                               "storing the revision number value.");
+    }
+
+    File workspacePath;
+    if ((workspace == null) || (workspace.length() == 0))
+    {
+      workspacePath = getProject().getBaseDir();
+    }
+    else
+    {
+      workspacePath = new File(workspace);
+    }
+
+
+    SVNWCClient svnClient = new SVNWCClient(null, null);
+
+    try
+    {
+      SVNInfo svnInfo = svnClient.doInfo(workspacePath, SVNRevision.WORKING);
+      SVNRevision revision = svnInfo.getRevision();
+      if (revision == null)
+      {
+        System.err.println("WARNING:  Could not determine Subversion " +
+                           "revision number for current workspace.");
+        getProject().setNewProperty(propertyName, "-1");
+      }
+      else
+      {
+        getProject().setNewProperty(propertyName,
+                                    String.valueOf(revision.getNumber()));
+      }
+    }
+    catch (SVNException svnException)
+    {
+      System.err.println("WARNING:  Could not determine Subversion " +
+                         "revision number for current workspace:  " +
+                         svnException);
+      getProject().setNewProperty(propertyName, "-1");
+    }
+  }
+}
+
diff --git a/opends/build.xml b/opends/build.xml
index 8cd4294..01c1aba 100644
--- a/opends/build.xml
+++ b/opends/build.xml
@@ -22,7 +22,7 @@
  ! CDDL HEADER END
  !
  !
- !      Portions Copyright 2006 Sun Microsystems, Inc.
+ !      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  ! -->
 
 <project name="Directory Server" basedir="." default="package">
@@ -111,6 +111,9 @@
   <!-- Properties for the checkstyle tool.                         -->
   <property name="checkstyle.dir"  location="${ext.dir}/checkstyle" />
 
+  <!-- Properties for the SVNKit tool.                         -->
+  <property name="svnkit.dir"  location="${ext.dir}/svnkit" />
+
   <!-- Properties for Directory Server version information.              -->
   <property name="dynconstants.file"
        location="${src.dir}/org/opends/server/util/DynamicConstants.java" />
@@ -129,7 +132,7 @@
 
 
   <!-- The build target that should be used before committing code. -->
-  <target name="precommit" depends="checkstyle,clean,dsml,javadoc,testwithcoverage"
+  <target name="precommit" depends="checkstyle,clean,copyrightdates,dsml,javadoc,testwithcoverage"
        description="Perform all processing needed before committing code." />
 
 
@@ -152,7 +155,7 @@
 
   <!-- The build target that should be used to build everything. -->
   <target name="all"
-       depends="checkstyle,dsml,javadoc,testallwithcoverage"
+       depends="checkstyle,clean,copyrightdates,dsml,javadoc,testallwithcoverage"
        description="Build using all defined targets." />
 
 
@@ -208,13 +211,34 @@
         <isset property="JVM_VENDOR" />
       </not>
     </condition>
+  </target>
+
+
+
+
+  <!-- Build the DynamicConstants.java file and any of its dependencies. -->
+  <target name="dynamicconstants" depends="init,buildtools">
+    <!-- Get the revision number of the current Subversion workspace -->
+    <taskdef name="getsvnrevision"
+             classname="org.opends.build.tools.GetSubversionRevision">
+      <classpath>
+        <fileset dir="${build.dir}/build-tools">
+          <include name="*.jar" />
+        </fileset>
+        <fileset dir="${svnkit.dir}">
+          <include name="*.jar" />
+        </fileset>
+      </classpath>
+    </taskdef>
+
+    <getsvnrevision property="REVISION_NUMBER" />
 
 
     <!-- Generate the DynamicConstants.java file.
       Be warned that the .stubs file references the following properties
       PRODUCT_NAME, SHORT_NAME, MAJOR_VERSION, MINOR_VERSION, POINT_VERSION,
       VERSION_QUALIFIER, FIX_IDS, timestamp, user.name, java.version,
-      java.vendor, java.vm.version, JVM_VENDOR, DEBUG_BUILD
+      java.vendor, java.vm.version, JVM_VENDOR, DEBUG_BUILD, REVISION_NUMBER
       If you change the name of any of those properties in this build.xml
       you'll need to relfect the same change in the .stubs file
     -->
@@ -230,6 +254,37 @@
 
 
 
+  <!-- Check modified files to see any copyright updates are needed. -->
+  <target name="copyrightdates" depends="buildtools"
+       description="Ensure updated files have the correct copyright year" >
+    <taskdef name="checkcopyrightdates"
+             classname="org.opends.build.tools.CheckCopyrightDates">
+      <classpath>
+        <fileset dir="${build.dir}/build-tools">
+          <include name="*.jar" />
+        </fileset>
+        <fileset dir="${svnkit.dir}">
+          <include name="*.jar" />
+        </fileset>
+      </classpath>
+    </taskdef>
+
+    <checkcopyrightdates>
+      <fileset dir="${src.dir}" includes="**/*.java" />
+      <fileset dir="${quicksetup.src.dir}" includes="**/*.java" />
+      <fileset dir="${statuspanel.src.dir}" includes="**/*.java" />
+      <fileset dir="${unittest.testng.src.dir}" includes="**/*.java" />
+      <fileset dir="${functest.testng.src.dir}" includes="**/*.java" />
+      <fileset dir="${basedir}" includes="**/*.xml" excludes="build/**/*" />
+      <fileset dir="${basedir}" includes="**/*.sh" excludes="build/**/*" />
+      <fileset dir="${basedir}" includes="**/*.bat" excludes="build/**/* " />
+      <fileset dir="${basedir}" includes="**/*.ldif" excludes="build/**/*" />
+    </checkcopyrightdates>
+  </target>
+
+
+
+
   <!-- Ensure that the source code meets basic style requirements. -->
   <target name="checkstyle" description="Perform basic source style checks">
 
@@ -280,13 +335,14 @@
 
 
   <!-- Compile the Directory Server source files. -->
-  <target name="cleancompile" depends="cleaninit,compile,compilequicksetup,compilestatuspanel"
+  <target name="cleancompile"
+       depends="cleaninit,compile,compilequicksetup,compilestatuspanel"
        description="Recompile the Directory Server source files.">
   </target>
 
   <!-- Compile the Directory Server source files. -->
   <target name="compile"
-       depends="init"
+       depends="init,dynamicconstants"
        description="Compile the Directory Server source files.">
 
     <mkdir dir="${classes.dir}" />
@@ -815,12 +871,6 @@
       </not>
     </condition>
 
-    <condition property="test.diff.svnpath" value="">
-      <not>
-        <isset property="test.diff.svnpath" />
-      </not>
-    </condition>
-
     <condition property="test.diff.enabled" value="true">
       <not>
         <isset property="test.diff.disable" />
@@ -846,13 +896,15 @@
         <fileset dir="${emma.dir}">
           <include name="*.jar" />
         </fileset>
+        <fileset dir="${svnkit.dir}">
+          <include name="*.jar" />
+        </fileset>
       </classpath>
     </taskdef>
 
     <coveragediff emmadatapath="${coverage.data.dir}"
                   outputpath="${cvgdiff.report.dir}"
                   diffpath="${test.diff.srcpath}"
-                  svnpath="${test.diff.svnpath}"
                   enabled="${test.diff.enabled}"
                   verbose="${test.diff.verbose}" />
 
@@ -1081,6 +1133,11 @@
         <fileset dir="${emma.dir}">
           <include name="*.jar" />
         </fileset>
+
+        <fileset dir="${svnkit.dir}">
+          <include name="*.jar" />
+        </fileset>
+
         <path refid="run.classpath" />
       </classpath>
     </javac>
diff --git a/opends/ext/svnkit/COPYING b/opends/ext/svnkit/COPYING
new file mode 100644
index 0000000..2e7d2e3
--- /dev/null
+++ b/opends/ext/svnkit/COPYING
@@ -0,0 +1,47 @@
+The TMate License
+
+This license applies to all portions of TMate SVNKit library, which 
+are not externally-maintained libraries (e.g. Ganymed SSH library).
+
+All the source code and compiled classes in package org.trigris.subversion.javahl
+except SvnClient class are covered by the license in JAVAHL-LICENSE file
+
+Copyright (c) 2004-2006 TMate Software. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, 
+are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice, 
+      this list of conditions and the following disclaimer.
+      
+    * Redistributions in binary form must reproduce the above copyright notice, 
+      this list of conditions and the following disclaimer in the documentation 
+      and/or other materials provided with the distribution.
+      
+    * Redistributions in any form must be accompanied by information on how to 
+      obtain complete source code for the software that uses SVNKit and any 
+      accompanying software that uses the software that uses SVNKit. The source 
+      code must either be included in the distribution or be available for no 
+      more than the cost of distribution plus a nominal fee, and must be freely 
+      redistributable under reasonable conditions. For an executable file, complete 
+      source code means the source code for all modules it contains. It does not 
+      include source code for modules or files that typically accompany the major 
+      components of the operating system on which the executable file runs.
+      
+    * Redistribution in any form without redistributing source code for software 
+      that uses SVNKit is possible only when such redistribution is explictly permitted 
+      by TMate Software. Please, contact TMate Software at support@svnkit.com to 
+      get such permission.
+
+THIS SOFTWARE IS PROVIDED BY TMATE SOFTWARE ``AS IS'' AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE 
+DISCLAIMED. 
+
+IN NO EVENT SHALL TMATE SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/opends/ext/svnkit/GANYMED-LICENSE b/opends/ext/svnkit/GANYMED-LICENSE
new file mode 100644
index 0000000..ba93009
--- /dev/null
+++ b/opends/ext/svnkit/GANYMED-LICENSE
@@ -0,0 +1,57 @@
+Copyright (c) 2005 - 2006 Swiss Federal Institute of Technology (ETH Zurich),
+  Department of Computer Science (http://www.inf.ethz.ch),
+  Christian Plattner. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+a.) Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+b.) Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+c.) Neither the name of ETH Zurich nor the names of its contributors may
+    be used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+
+The Java implementations of the AES, Blowfish and 3DES ciphers have been
+taken (and slightly modified) from the cryptography package released by
+"The Legion Of The Bouncy Castle".
+
+Their license states the following:
+
+Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle
+(http://www.bouncycastle.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. 
+
diff --git a/opends/ext/svnkit/JAVAHL-LICENSE b/opends/ext/svnkit/JAVAHL-LICENSE
new file mode 100644
index 0000000..9c3e114
--- /dev/null
+++ b/opends/ext/svnkit/JAVAHL-LICENSE
@@ -0,0 +1,55 @@
+This license applies to all portions of Subversion which are not
+externally-maintained libraries (e.g. apr/, apr-util/, and neon/).
+Such libraries have their own licenses; we recommend you read them, as
+their terms may differ from the terms below.
+
+This is version 1 of this license.  It is also available online at
+http://subversion.tigris.org/license-1.html.  If newer versions of
+this license are posted there (the same URL, but with the version
+number incremented: .../license-2.html, .../license-3.html, and so
+on), you may use a newer version instead, at your option.
+
+====================================================================
+Copyright (c) 2000-2005 CollabNet.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if
+any, must include the following acknowledgment: "This product includes
+software developed by CollabNet (http://www.Collab.Net/)."
+Alternately, this acknowledgment may appear in the software itself, if
+and wherever such third-party acknowledgments normally appear.
+
+4. The hosted project names must not be used to endorse or promote
+products derived from this software without prior written
+permission. For written permission, please contact info@collab.net.
+
+5. Products derived from this software may not use the "Tigris" name
+nor may "Tigris" appear in their names without prior written
+permission of CollabNet.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL COLLABNET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+====================================================================
+
+This software consists of voluntary contributions made by many
+individuals on behalf of CollabNet.
+
diff --git a/opends/ext/svnkit/README.txt b/opends/ext/svnkit/README.txt
new file mode 100644
index 0000000..99ef74a
--- /dev/null
+++ b/opends/ext/svnkit/README.txt
@@ -0,0 +1,40 @@
+This is a README.txt file for SVNKit - pure Java Subversion client library.
+
+1. DESCRIPTION
+
+SVNKit is a pure Java Subversion client library. 
+
+2. LICENSING
+
+SVNKit is open source product. The complete source code, documentation, and files required 
+to build the library are available for download from our Web site at http://svnkit.com/
+
+The TMate open source license permits you to use SVNKit at no charge under the condition 
+that if you use the software in an application you redistribute, the complete source code for 
+your application must be available and freely redistributable under reasonable conditions. 
+If you do not want to release the source code for your application, you may purchase a license 
+from TMate Software. For pricing information, or if you have further questions on licensing, 
+please contact us at support@svnkit.com.
+
+You may find the TMate open source license in COPYING file that is located within the same 
+directory as this file or at http://svnkit.com/license.html
+
+3. FEATURES
+
+SVNKit allows to work with Subversion repositories and Subversion working copies. SVNKit features
+direct repository access as well as support for all high level Subversion operation that are 
+available with the command line Subversion client. 
+
+This version of SVNKit supports all Subversion 1.2 features and supports older Subversion repositories.
+
+4. RESOURCES
+
+SVNKit Web Site: http://svnkit.com/
+SVNKit Documentation: http://svnkit.com/kb/index.html
+
+SVNKit Mailing List: http://svnkit.com/kb/mailinglist.html
+SVNKit Issues Tracker: http://svnkit.com/tracker/
+
+5. CONTACTS
+
+On all questions related to SVNKit please contact us at support@svnkit.com
\ No newline at end of file
diff --git a/opends/ext/svnkit/SEQUENCE-LICENSE b/opends/ext/svnkit/SEQUENCE-LICENSE
new file mode 100644
index 0000000..d578624
--- /dev/null
+++ b/opends/ext/svnkit/SEQUENCE-LICENSE
@@ -0,0 +1,48 @@
+Sequence Library License
+
+This license applies to all portions of the Sequence library, which 
+are not externally-maintained libraries (e.g. junit or jsch).
+====================================================================
+Copyright (c) 2000-2005 SyntEvo GmbH, Bayerisch Gmain, GERMANY.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if
+any, must include the following acknowledgment: "This product includes
+software developed by SyntEvo GmbH, Bayerisch Gmain, GERMANY."
+Alternately, this acknowledgment may appear in the software itself, if
+and wherever such third-party acknowledgments normally appear.
+
+4. The hosted project names must not be used to endorse or promote
+products derived from this software without prior written
+permission. For written permission, please contact
+sequence-library@syntevo.com.
+
+5. Neither the name of SyntEvo GmbH nor the names of its contributors
+may be used to endorse or promote products derived from this
+software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL SyntEvo GmbH OR HIS CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+====================================================================
+
+
diff --git a/opends/ext/svnkit/changelog.txt b/opends/ext/svnkit/changelog.txt
new file mode 100644
index 0000000..440eb5b
--- /dev/null
+++ b/opends/ext/svnkit/changelog.txt
@@ -0,0 +1,288 @@
+= version 1.1.0
+
++ command line application and API to perform svnsync.
++ bugfixes.
+
+= version 1.1.0.beta5
+
++ support for Subversion 1.4 working copy and new fsfs repository format.
++ support for new features introduced by Subversion 1.4.
++ bugfixes.
+
+= version 1.1.0.beta4
+
++ bug introduced in beta3 version fixed: 
+  Eclipse keyring credentials storage support was broken.
+
+= version 1.1.0.beta3
+
++ Minor API improvements.
++ Minor bugfixes.
+
+= version 1.1.0.beta2
+
++ NTLM authentication method support.
++ Javadoc updated to match new SVNKit features.
++ Minor bugfixes.
+
+= version 1.1.0.beta
+
++ 'file' protocol support (for 'fsfs' repositories).
+
+= version 1.0.3
+
++ improved cancellation support
++ improved versioned symlinks handling
++ improved HTTP proxies support
++ bugfixes
+
+= version 1.0.2
+
++ full support of the new Subversion 1.3.0 features.
++ ssh 'keyboard-interactive' authentication support.
++ ssl client certificate prompt support.
++ error codes and error messages hierarchy support in the API.
++ utility classes to genereta operatios output in XML format.
++ faster delta generation and delta processing code.
++ utility API classes to process and generate deltas.
++ documentations improved, Commit and Export examples simplified.
++ bugfixes
+
+! Note: 
+  This version includes minor API changes and is not binary compatible 
+  with the previous versions. API changes are:
+  * String error messages replaced with SVNErrorMessage objects
+  * ISVNFileRevisionHanlder callback interface changed
+  * all callback interfaces methods now declared as throwing SVNException
+
+= version 1.0.1
+
++ bugfixes
+
+= version 1.0.0
+
++ documentation related improvements
++ bugfixes
+
+= version 0.9.3
+
++ licensing conditions changed
++ support for atomic commit from different working copies
++ persistent connections support
++ improvements in performance and memory consumption
++ bugfixes
+
+= version 0.9.2
+
++ RC2: bugfixes related to configuration handling and svn+ssh authentication
+
+= version 0.9.1
+
++ RC1: All features planned for 1.0 version are completed.
+
+= version 0.8.8.1
+
++ critical bug in SVNKit Eclipse plugin fixed.
+
+= version 0.8.8
+
++ http digest auth support (requires apache version > 2.0.48)
++ wc->url and url->wc copy operations
++ use-commit-times option support
++ bugfixes
+
+= version 0.8.7.2
+
++ Subclipse v0.9.30 compatible
+
+= version 0.8.7.1
+
++ Subclipse v0.9.29 compatible
+
+= version 0.8.7
+
++ http proxy support
++ svn "keywords" are expanded properly
++ different eol's in a file are handled correctly
++ other minor bugfixes
+
+= version 0.8.6
+
++ annotate (blame) operation is implemented.
++ http: server socket close detected properly and doesn't result in operation failure.
++ SVNClient: absolute paths are used in notifications.
++ SVNClient: fileContent method traces file renames.
++ SVNClient: list and logMessages methods return paths sorted alphabetically.
++ SVNClient: auth info is stored in Eclipse key ring when used within Eclipse.
+
+= version 0.8.5
+
++ SVNClient: WC copy and move operations work properly on Linux and OS X.
++ SVNClient: "conflicted" status is reported correctly during update
+             ("merged" was reported instead).
+
+= version 0.8.4
+
++ Subclipse Extension supports Subclipse 0.9.28
++ tabulations in externals definitions processed correctly.
+
+= version 0.8.3
+
++ children of copied or moved directories were not committed properly when
+  their wc revision was different from the parent's one.
++ http: all DAV requests (including commit comments) are sent in UTF-8 encoding.
++ SvnClient: add and remove methods didn't work for directories, fixed.
++ SvnClient: commit of single file deletion didn't work, fixed.
++ Eclipse: SVNKit features installed from update site supports automatic update
+
+= version 0.8.2
+
++ svn+ssh: persistent ssh connection is used to improve svn+ssh performance.
++ http: problems with accessing repository location that needs different credentials then
+  repository root is fixed.
++ http: all paths in requests are canonicalized, some svn server versions failed to 
+  process non-canonicalized paths.
++ wc: changes in externals were not committed correctly over http when using ISVNWorkspace.commit(...), fixed.
++ SvnClient: diff method implemented (so that Eclipse "generate patch" action works).  
++ SvnClient: copy and move methods fixed to work properly in Subclipse repository view.
++ SvnClient: setPrompt support, better notifications, "windows" paths are handled correctly.
++ logging: Pluggable loggers support and detailed http logging added (thanks to Marc Strapez). 
++ logging: Eclipse SVNKit version uses Eclipse logging facilities.
+
+= version 0.8.1
+
++ bugs with committing files within moved directories fixed
++ bugfixes related to operations over http connection
++ for subclipse users: more detailed console notifications on svn operations
+
+= version 0.8.0
+
++ new builds versioning schema introduced
++ update site with eclipse plugin and subclipse extension added 
+
+= build 20050131
+
++ import works properly with single file and when importing to
+  non-yet-existing directories
++ switch works properly when switching single file
++ more minor bugfixes
+
+= build 20050120
+
++ bugs with commiting locally copied files fixed
++ DAV '/' repository location handled correctly
+
+= build 20050112
+
++ lot of incompatibilities with native svn fixed
++ SVNClient supports remote deletion, copy and move operations
+
+= build 20050106
+
++ number of bugs in remote status implementation fixed
++ ISVNWorkspace.getFileContent method restored to keep binary compatibility 
++ Diff generators framework added, now SVNKit provides API for
+  generating diff in different formats ('unified' and 'normal') for arbitrary
+  input sources
+
+= build 20050105
+
++ svn+ssh authentication failed to work in some cases - fixed
++ revisions in working copy now updated correctly after update
++ got rid of number of minor inconsistences between SVNKit and native SVN
++ http and https protocols supports compressed data (gzip)
+
+= build 20041223
+
++ ISVNWorkspace.delete now accepts 'force' parameter
++ bug fixed that prevented Subclipse committing single 
+  file in non-windows systems
++ complete svn and svn+ssh protocol logging may be enabled 
+  with -Dsvnkit.log.svn=true command line switch
+
+= build 20041221
+
++ when using svn+ssh SVNKit takes private key path from the java property,
+  if it is not defined explicitly
++ svn+ssh bugfixes
++ bugfixes
+
+= build 20041219
+
++ infinite loop on commits that includes workspace root fixed
++ JavaHL: SVNClient accepts all revision kinds (DATE, HEAD, etc.)
+
+= build 20041217
+
++ bugfixes
+
+= build 20041216
+
++ bugfixes
+
+= build 20041211
+
++ command line svn client (status, import, checkout are implemented)
++ python tests launcher to reuse original svn python tests suite
++ bugfixes
+
+= build 20041209
+
++ bugfixes
+
+= build 20041204
+
++ bugfixes
++ SVNKit works with Subclipse 0.9.24
+
+= build 20041130
+
++ bugfixes
+
+= build 20041126
+
++ svn+shh protocol support (with the jsch library)
++ bugfixes
+
+= build 20041124
+
++ javahl copy, move and mkdir methods implementation
++ methods to manage global ignore added to ISVNWorkspace
++ bugfixes
+
+= build 20041123
+
++ recursive property set operation
++ ISVNWorkspace accepts credentials provider
++ SSLContext made pluggable
++ javahl replacement works with Subclipse
++ bugfixes
+
+= build 20041118
+
++ javahl implementation (SvnClient) is included into the library
++ workspace accepts credentials provider
+
+= build 20041116
+
++ bugfixes
+
+= build 20041110
+
++ svn:externals support
++ bugfixes
+
+= build 20041109
+
++ bug that prevents checkout sometimes fixed
+
+= build 20041108
+
++ authentication API simplified
++ performance improvements
++ bugfixes
+
+= build 20041105
+
++ switch and relocate operations
++ bugfixes
\ No newline at end of file
diff --git a/opends/ext/svnkit/doc.tar.gz b/opends/ext/svnkit/doc.tar.gz
new file mode 100644
index 0000000..672368e
--- /dev/null
+++ b/opends/ext/svnkit/doc.tar.gz
Binary files differ
diff --git a/opends/ext/svnkit/ganymed.jar b/opends/ext/svnkit/ganymed.jar
new file mode 100644
index 0000000..e3bde26
--- /dev/null
+++ b/opends/ext/svnkit/ganymed.jar
Binary files differ
diff --git a/opends/ext/svnkit/logging.properties.disabled b/opends/ext/svnkit/logging.properties.disabled
new file mode 100644
index 0000000..26c67f5
--- /dev/null
+++ b/opends/ext/svnkit/logging.properties.disabled
@@ -0,0 +1,9 @@
+svnkit.level=FINE
+handlers = java.util.logging.FileHandler
+
+java.util.logging.FileHandler.pattern = %h/.svnkit/svnkit.%u.log
+java.util.logging.FileHandler.limit = 0
+java.util.logging.FileHandler.count = 1
+java.util.logging.FileHandler.append = true
+java.util.logging.FileHandler.formatter = org.tmatesoft.svn.core.internal.util.DefaultSVNDebugFormatter
+
diff --git a/opends/ext/svnkit/svn b/opends/ext/svnkit/svn
new file mode 100755
index 0000000..1cad163
--- /dev/null
+++ b/opends/ext/svnkit/svn
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+cygwin=false;
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+esac
+
+SVNKIT_HOME=`dirname $0`
+SVNKIT_HOME=`cd "$SVNKIT_HOME" ; pwd`
+
+SVNKIT_CP=$SVNKIT_HOME/svnkit.jar:$SVNKIT_HOME/svnkit-cli.jar:$SVNKIT_HOME/ganymed.jar
+
+if $cygwin ; then
+  SVNKIT_CP=`cygpath --windows --path "$SVNKIT_CP"`
+  [ -n "$SVNKIT_LOGDIR" ] &&
+    SVNKIT_LOGDIR=`cygpath --unix "$SVNKIT_LOGDIR"`
+fi
+
+if [ ! -d $SVNKIT_LOGDIR ]; then
+	mkdir $SVNKIT_LOGDIR
+fi
+
+SVNKIT_VM_OPTIONS="-Dsun.io.useCanonCaches=false -Djava.util.logging.config.file=$SVNKIT_HOME/logging.properties"
+
+SVNKIT_MAINCLASS=org.tmatesoft.svn.cli.SVN
+$JAVA_HOME/bin/java $SVNKIT_VM_OPTIONS -cp $SVNKIT_CP $SVNKIT_MAINCLASS "$@"
diff --git a/opends/ext/svnkit/svn.bat b/opends/ext/svnkit/svn.bat
new file mode 100644
index 0000000..fceca79
--- /dev/null
+++ b/opends/ext/svnkit/svn.bat
@@ -0,0 +1,11 @@
+@echo off
+
+set DEFAULT_SVNKIT_HOME=%~dp0
+
+if "%SVNKIT_HOME%"=="" set SVNKIT_HOME=%DEFAULT_SVNKIT_HOME%
+
+set SVNKIT_CLASSPATH= "%SVNKIT_HOME%svnkit.jar";"%SVNKIT_HOME%svnkit-cli.jar";"%SVNKIT_HOME%ganymed.jar"
+set SVNKIT_MAINCLASS=org.tmatesoft.svn.cli.SVN
+set SVNKIT_OPTIONS=-Djava.util.logging.config.file="%SVNKIT_HOME%/logging.properties"
+
+"%JAVA_HOME%\bin\java" %SVNKIT_OPTIONS% -cp %SVNKIT_CLASSPATH% %SVNKIT_MAINCLASS% %*
\ No newline at end of file
diff --git a/opends/ext/svnkit/svnkit-cli.jar b/opends/ext/svnkit/svnkit-cli.jar
new file mode 100644
index 0000000..99e6233
--- /dev/null
+++ b/opends/ext/svnkit/svnkit-cli.jar
Binary files differ
diff --git a/opends/ext/svnkit/svnkit-javahl.jar b/opends/ext/svnkit/svnkit-javahl.jar
new file mode 100644
index 0000000..2ebb052
--- /dev/null
+++ b/opends/ext/svnkit/svnkit-javahl.jar
Binary files differ
diff --git a/opends/ext/svnkit/svnkit.jar b/opends/ext/svnkit/svnkit.jar
new file mode 100644
index 0000000..2e08b93
--- /dev/null
+++ b/opends/ext/svnkit/svnkit.jar
Binary files differ
diff --git a/opends/ext/svnkit/svnkitsrc.zip b/opends/ext/svnkit/svnkitsrc.zip
new file mode 100644
index 0000000..2d42a98
--- /dev/null
+++ b/opends/ext/svnkit/svnkitsrc.zip
Binary files differ
diff --git a/opends/ext/svnkit/svnsync b/opends/ext/svnkit/svnsync
new file mode 100644
index 0000000..d872810
--- /dev/null
+++ b/opends/ext/svnkit/svnsync
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+cygwin=false;
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+esac
+
+SVNKIT_HOME=`dirname $0`
+SVNKIT_HOME=`cd "$SVNKIT_HOME" ; pwd`
+
+SVNKIT_CP=$SVNKIT_HOME/svnkit.jar:$SVNKIT_HOME/svnkit-cli.jar:$SVNKIT_HOME/ganymed.jar
+
+if $cygwin ; then
+  SVNKIT_CP=`cygpath --windows --path "$SVNKIT_CP"`
+  [ -n "$SVNKIT_LOGDIR" ] &&
+    SVNKIT_LOGDIR=`cygpath --unix "$SVNKIT_LOGDIR"`
+fi
+
+if [ ! -d $SVNKIT_LOGDIR ]; then
+	mkdir $SVNKIT_LOGDIR
+fi
+
+SVNKIT_VM_OPTIONS="-Dsun.io.useCanonCaches=false -Djava.util.logging.config.file=$SVNKIT_HOME/logging.properties"
+
+SVNKIT_MAINCLASS=org.tmatesoft.svn.cli.SVNSync
+$JAVA_HOME/bin/java $SVNKIT_VM_OPTIONS -cp $SVNKIT_CP $SVNKIT_MAINCLASS "$@"
diff --git a/opends/ext/svnkit/svnsync.bat b/opends/ext/svnkit/svnsync.bat
new file mode 100644
index 0000000..b4f21a8
--- /dev/null
+++ b/opends/ext/svnkit/svnsync.bat
@@ -0,0 +1,11 @@
+@echo off
+
+set DEFAULT_SVNKIT_HOME=%~dp0
+
+if "%SVNKIT_HOME%"=="" set SVNKIT_HOME=%DEFAULT_SVNKIT_HOME%
+
+set SVNKIT_CLASSPATH= "%SVNKIT_HOME%svnkit.jar";"%SVNKIT_HOME%svnkit-cli.jar";"%SVNKIT_HOME%ganymed.jar"
+set SVNKIT_MAINCLASS=org.tmatesoft.svn.cli.SVNSync
+set SVNKIT_OPTIONS=-Djava.util.logging.config.file="%SVNKIT_HOME%/logging.properties"
+
+"%JAVA_HOME%\bin\java" %SVNKIT_OPTIONS% -cp %SVNKIT_CLASSPATH% %SVNKIT_MAINCLASS% %*
\ No newline at end of file
diff --git a/opends/resource/DynamicConstants.java.stubs b/opends/resource/DynamicConstants.java.stubs
index 7c371cb..5c19014 100644
--- a/opends/resource/DynamicConstants.java.stubs
+++ b/opends/resource/DynamicConstants.java.stubs
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2006 Sun Microsystems, Inc.
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.util;
 
@@ -112,6 +112,11 @@
   public static final boolean DEBUG_BUILD = ${DEBUG_BUILD};
 
   /**
+   * The Subversion revision number on which this build is based.
+   */
+  public static final long REVISION_NUMBER = ${REVISION_NUMBER};
+
+  /**
    * A compact version string for this product, suitable for use in path
    * names and similar cases.
    */
diff --git a/opends/src/server/org/opends/server/core/DirectoryServer.java b/opends/src/server/org/opends/server/core/DirectoryServer.java
index d4654fd..c438890 100644
--- a/opends/src/server/org/opends/server/core/DirectoryServer.java
+++ b/opends/src/server/org/opends/server/core/DirectoryServer.java
@@ -7915,6 +7915,7 @@
       System.out.println("Minor Version:       " + MINOR_VERSION);
       System.out.println("Point Version:       " + POINT_VERSION);
       System.out.println("Version Qualifier:   " + VERSION_QUALIFIER);
+      System.out.println("Revision Number:     " + REVISION_NUMBER);
       System.out.println("Fix IDs:             " + FIX_IDS);
       System.out.println("Debug Build:         " + DEBUG_BUILD);
       System.out.println("Build OS:            " + BUILD_OS);
diff --git a/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java b/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
index c19a45c..b372e86 100644
--- a/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
+++ b/opends/src/server/org/opends/server/monitors/VersionMonitorProvider.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2006 Sun Microsystems, Inc.
+ *      Portions Copyright 2007-2006 Sun Microsystems, Inc.
  */
 package org.opends.server.monitors;
 
@@ -174,6 +174,8 @@
                               String.valueOf(DynamicConstants.POINT_VERSION)));
     attrs.add(createAttribute("versionQualifier",
                               DynamicConstants.VERSION_QUALIFIER));
+    attrs.add(createAttribute("revisionNumber",
+                   String.valueOf(DynamicConstants.REVISION_NUMBER)));
     attrs.add(createAttribute("debugBuild",
                               String.valueOf(DynamicConstants.DEBUG_BUILD)));
     attrs.add(createAttribute("fixIDs", DynamicConstants.FIX_IDS));

--
Gitblit v1.10.0