From 7d230eabe0c6192a7c6a74d176048ac9c91bc2d2 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 28 Feb 2013 16:20:30 +0000
Subject: [PATCH] OPENDJ-778 (CR-1341) ldif-diff should exit with different values w.r.t files are identical or not

---
 opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java |   54 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
index 5406f7b..9f63284 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/tools/LDIFDiff.java
@@ -43,7 +43,21 @@
 import org.opends.messages.Message;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.ConfigFileHandler;
-import org.opends.server.types.*;
+import org.opends.server.types.Attribute;
+import org.opends.server.types.AttributeBuilder;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.AttributeValues;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.Entry;
+import org.opends.server.types.ExistingFileBehavior;
+import org.opends.server.types.LDIFExportConfig;
+import org.opends.server.types.LDIFImportConfig;
+import org.opends.server.types.Modification;
+import org.opends.server.types.ModificationType;
+import org.opends.server.types.NullOutputStream;
+import org.opends.server.types.ObjectClass;
 import org.opends.server.util.LDIFReader;
 import org.opends.server.util.LDIFWriter;
 import org.opends.server.util.args.ArgumentException;
@@ -153,6 +167,7 @@
 
     BooleanArgument overwriteExisting;
     BooleanArgument showUsage;
+    BooleanArgument useCompareResultCode;
     BooleanArgument singleValueChanges;
     BooleanArgument doCheckSchema;
     StringArgument  configClass;
@@ -238,11 +253,17 @@
                                       OPTION_LONG_HELP,
                                       INFO_DESCRIPTION_USAGE.get());
       argParser.addArgument(showUsage);
+
+      useCompareResultCode =
+          new BooleanArgument("usecompareresultcode", 'r',
+              "useCompareResultCode", INFO_ENCPW_DESCRIPTION_USE_COMPARE_RESULT
+                  .get());
+      argParser.addArgument(useCompareResultCode);
+
       argParser.setUsageArgument(showUsage);
     }
     catch (ArgumentException ae)
     {
-
       Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return OPERATIONS_ERROR;
@@ -256,9 +277,7 @@
     }
     catch (ArgumentException ae)
     {
-
       Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
-
       err.println(message);
       err.println(argParser.getUsage());
       return CLIENT_SIDE_PARAM_ERROR;
@@ -550,15 +569,15 @@
 
     try
     {
+      boolean differenceFound;
+
       // Check to see if either or both of the source and target maps are empty.
       if (sourceMap.isEmpty())
       {
         if (targetMap.isEmpty())
         {
           // They're both empty, so there are no differences.
-          Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
-          writer.writeComment(message, 0);
-          return SUCCESS;
+          differenceFound = false;
         }
         else
         {
@@ -568,7 +587,7 @@
           {
             writeAdd(writer, targetMap.get(targetIterator.next()));
           }
-          return SUCCESS;
+          differenceFound = true;
         }
       }
       else if (targetMap.isEmpty())
@@ -579,10 +598,11 @@
         {
           writeDelete(writer, sourceMap.get(sourceIterator.next()));
         }
-        return SUCCESS;
+        differenceFound = true;
       }
       else
       {
+        differenceFound = false;
         // Iterate through all the entries in the source and target maps and
         // identify the differences.
         Iterator<DN> sourceIterator  = sourceMap.keySet().iterator();
@@ -591,7 +611,6 @@
         DN           targetDN        = targetIterator.next();
         Entry        sourceEntry     = sourceMap.get(sourceDN);
         Entry        targetEntry     = targetMap.get(targetDN);
-        boolean      differenceFound = false;
 
         while (true)
         {
@@ -705,13 +724,16 @@
             }
           }
         }
+      }
 
-
-        if (! differenceFound)
-        {
-          Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
-          writer.writeComment(message, 0);
-        }
+      if (!differenceFound)
+      {
+        Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
+        writer.writeComment(message, 0);
+      }
+      if (useCompareResultCode.isPresent())
+      {
+        return !differenceFound ? COMPARE_TRUE : COMPARE_FALSE;
       }
     }
     catch (IOException e)

--
Gitblit v1.10.0