[prev in list] [next in list] [prev in thread] [next in thread] 

List:       subversion-commits
Subject:    svn commit: r1518577 - in /subversion/trunk/subversion/bindings/javahl: native/ src/org/apache/subve
From:       brane () apache ! org
Date:       2013-08-29 10:45:44
Message-ID: 20130829104545.2978E23888E7 () eris ! apache ! org
[Download RAW message or body]

Author: brane
Date: Thu Aug 29 10:45:44 2013
New Revision: 1518577

URL: http://svn.apache.org/r1518577
Log:
Updated JavaHL diff utilities to return useful values from the diff and merge
functions. Incidentally, attempted to fix the related tests on Windows.

[in subversion/bindings/javahl/src/org/apache/subversion/javahl]
* SVNUtil.java (SVNUtil.fileDiff): Return a boolean value indicating
   that there were differences between the files.
  (SVNUtil.fileMerge): Return a boolean value indicating that
   the merge produced conflicts.

* util/DiffLib.java
   (DiffLib.fileDiff, DiffLib.fileMerge,
    DiffLib.nativeFileDiff, DiffLib.nativeFileMerge):
    Same changes as above.

[in subversion/bindings/javahl/native]
* org_apache_subversion_javahl_util_DiffLib.cpp
  (Java_org_apache_subversion_javahl_util_DiffLib_nativeFileDiff,
   Java_org_apache_subversion_javahl_util_DiffLib_nativeFileMerge):
   Calculate and and return the boolean return value.

[in subversion/bindings/javahl/tests/org/apache/subversion/javahl]
* UtilTests.java (UtilTests.testFileDiff): Check return value from
   SVNUtil.fileDiff, and adjust expected output for platform-specific
   end-of-line sequences.
  (UtilTests.testFileMerge): Similar changes as above.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp
  subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java
  subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java
  subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java


Modified: subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp
                
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/o \
rg_apache_subversion_javahl_util_DiffLib.cpp?rev=1518577&r1=1518576&r2=1518577&view=diff
 ==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp \
                (original)
+++ subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_util_DiffLib.cpp \
Thu Aug 29 10:45:44 2013 @@ -35,7 +35,7 @@
 
 #include "svn_diff.h"
 
-JNIEXPORT void JNICALL
+JNIEXPORT jboolean JNICALL
 Java_org_apache_subversion_javahl_util_DiffLib_nativeFileDiff(
     JNIEnv* env, jobject jthis,
     jstring joriginal_file,
@@ -60,13 +60,13 @@ Java_org_apache_subversion_javahl_util_D
 
   Path original(joriginal_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(original.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(original.error_occurred(), false);
 
   Path modified(jmodified_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(modified.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(modified.error_occurred(), false);
 
   svn_diff_t* diff;
   svn_diff_file_options_t* diff_options =
@@ -79,24 +79,27 @@ Java_org_apache_subversion_javahl_util_D
                                    original.c_str(),
                                    modified.c_str(),
                                    diff_options,
-                                   pool.getPool()),);
+                                   pool.getPool()),
+              false);
+
+  const jboolean diffs = svn_diff_contains_diffs(diff);
 
   JNIStringHolder original_header(joriginal_header);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder modified_header(jmodified_header);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder header_encoding(jheader_encoding);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder relative_to_dir(jrelative_to_dir);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  
+    return false;
+
   OutputStream result_stream(jresult_stream);
 
   SVN_JNI_ERR(svn_diff_file_output_unified3(
@@ -105,10 +108,13 @@ Java_org_apache_subversion_javahl_util_D
                   original_header.c_str(), modified_header.c_str(),
                   header_encoding.c_str(), relative_to_dir.c_str(),
                   diff_options->show_c_function,
-                  pool.getPool()),);
+                  pool.getPool()),
+              false);
+
+  return diffs;
 }
 
-JNIEXPORT void JNICALL
+JNIEXPORT jboolean JNICALL
 Java_org_apache_subversion_javahl_util_DiffLib_nativeFileMerge(
     JNIEnv* env, jobject jthis,
     jstring joriginal_file,
@@ -135,18 +141,18 @@ Java_org_apache_subversion_javahl_util_D
 
   Path original(joriginal_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(original.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(original.error_occurred(), false);
 
   Path modified(jmodified_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(modified.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(modified.error_occurred(), false);
 
   Path latest(jlatest_file, pool);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  SVN_JNI_ERR(latest.error_occurred(),);
+    return false;
+  SVN_JNI_ERR(latest.error_occurred(), false);
 
   svn_diff_t* diff;
   svn_diff_file_options_t* diff_options =
@@ -160,24 +166,27 @@ Java_org_apache_subversion_javahl_util_D
                                     modified.c_str(),
                                     latest.c_str(),
                                     diff_options,
-                                    pool.getPool()),);
+                                    pool.getPool()),
+              false);
+
+  const jboolean conflicts = svn_diff_contains_conflicts(diff);
 
   JNIStringHolder conflict_original(jconflict_original);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_modified(jconflict_modified);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_latest(jconflict_latest);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
+    return false;
 
   JNIStringHolder conflict_separator(jconflict_separator);
   if (JNIUtil::isJavaExceptionThrown())
-    return;
-  
+    return false;
+
   OutputStream result_stream(jresult_stream);
 
   SVN_JNI_ERR(svn_diff_file_output_merge2(
@@ -188,5 +197,8 @@ Java_org_apache_subversion_javahl_util_D
                   conflict_latest.c_str(),
                   conflict_separator.c_str(),
                   svn_diff_conflict_display_style_t(jconflict_style_ordinal),
-                  pool.getPool()),);
+                  pool.getPool()),
+              false);
+
+  return conflicts;
 }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java
                
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/ \
apache/subversion/javahl/SVNUtil.java?rev=1518577&r1=1518576&r2=1518577&view=diff \
                ==============================================================================
                
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java \
                (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNUtil.java \
Thu Aug 29 10:45:44 2013 @@ -131,23 +131,25 @@ public class SVNUtil
      *        This path will be stripped from the beginning of those
      *        file names if they are used in the unidiff index header.
      * @param resultStream The stream that receives the merged output.
+     * @return <code>true</code> if there were differences between the files.
      * @throws ClientException
      */
-    public static void FileDiff(String originalFile,
-                                String modifiedFile,
-                                SVNUtil.DiffOptions diffOptions,
-
-                                String originalHeader,
-                                String modifiedHeader,
-                                String headerEncoding,
-                                String relativeToDir,
+    public static boolean fileDiff(String originalFile,
+                                   String modifiedFile,
+                                   SVNUtil.DiffOptions diffOptions,
+
+                                   String originalHeader,
+                                   String modifiedHeader,
+                                   String headerEncoding,
+                                   String relativeToDir,
 
-                                OutputStream resultStream)
+                                   OutputStream resultStream)
         throws ClientException
     {
-        new DiffLib().FileDiff(originalFile, modifiedFile, diffOptions,
-                               originalHeader, modifiedHeader, headerEncoding,
-                               relativeToDir, resultStream);
+        return new DiffLib().fileDiff(originalFile, modifiedFile, diffOptions,
+                                      originalHeader, modifiedHeader,
+                                      headerEncoding,
+                                      relativeToDir, resultStream);
     }
 
 
@@ -171,26 +173,27 @@ public class SVNUtil
      * @param conflictSeparator Optional custom conflict separator.
      * @param conflictStyle Determines how conflicts are displayed.
      * @param resultStream The stream that receives the merged output.
+     * @return <code>true</code> if there were any conflicts.
      * @throws ClientException
      */
-    public static void FileMerge(String originalFile,
-                                 String modifiedFile,
-                                 String latestFile,
-                                 DiffOptions diffOptions,
-
-                                 String conflictOriginal,
-                                 String conflictModified,
-                                 String conflictLatest,
-                                 String conflictSeparator,
-                                 ConflictDisplayStyle conflictStyle,
+    public static boolean fileMerge(String originalFile,
+                                    String modifiedFile,
+                                    String latestFile,
+                                    DiffOptions diffOptions,
+
+                                    String conflictOriginal,
+                                    String conflictModified,
+                                    String conflictLatest,
+                                    String conflictSeparator,
+                                    ConflictDisplayStyle conflictStyle,
 
-                                 OutputStream resultStream)
+                                    OutputStream resultStream)
         throws ClientException
     {
-        new DiffLib().FileMerge(originalFile, modifiedFile, latestFile,
-                                diffOptions,
-                                conflictOriginal, conflictModified,
-                                conflictLatest, conflictSeparator,
-                                conflictStyle, resultStream);
+        return new DiffLib().fileMerge(originalFile, modifiedFile, latestFile,
+                                       diffOptions,
+                                       conflictOriginal, conflictModified,
+                                       conflictLatest, conflictSeparator,
+                                       conflictStyle, resultStream);
     }
-}
\ No newline at end of file
+}

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java
                
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/ \
apache/subversion/javahl/util/DiffLib.java?rev=1518577&r1=1518576&r2=1518577&view=diff
 ==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java \
                (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/util/DiffLib.java \
Thu Aug 29 10:45:44 2013 @@ -43,42 +43,10 @@ public class DiffLib
         NativeResources.loadNativeLibrary();
     }
 
-    /** @see ISVNUtil.FileDiff */
-    public void FileDiff(String originalFile,
-                         String modifiedFile,
-                         SVNUtil.DiffOptions diffOptions,
-
-                         String originalHeader,
-                         String modifiedHeader,
-                         String headerEncoding,
-                         String relativeToDir,
-
-                         OutputStream resultStream)
-        throws ClientException
-    {
-        nativeFileDiff(originalFile, modifiedFile,
-
-                       // Interpret the diff options
-                       (diffOptions == null
-                        ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
-                        : diffOptions.ignoreSpace.ordinal()),
-                       (diffOptions == null ? false
-                        : diffOptions.ignoreEolStyle),
-                       (diffOptions == null ? false
-                        : diffOptions.showCFunction),
-
-                       originalHeader, modifiedHeader, headerEncoding,
-                       relativeToDir, resultStream);
-    }
-
-    private native
-        void nativeFileDiff(String originalFile,
+    /** @see ISVNUtil.fileDiff */
+    public boolean fileDiff(String originalFile,
                             String modifiedFile,
-
-                            // Interpreted diff options
-                            int ignoreSpace,
-                            boolean ignoreEolStyle,
-                            boolean showCFunction,
+                            SVNUtil.DiffOptions diffOptions,
 
                             String originalHeader,
                             String modifiedHeader,
@@ -86,61 +54,93 @@ public class DiffLib
                             String relativeToDir,
 
                             OutputStream resultStream)
-        throws ClientException;
-
-    /** @see ISVNUtil.FileMerge */
-    public void FileMerge(String originalFile,
-                          String modifiedFile,
-                          String latestFile,
-                          SVNUtil.DiffOptions diffOptions,
-
-                          String conflictOriginal,
-                          String conflictModified,
-                          String conflictLatest,
-                          String conflistSeparator,
-                          SVNUtil.ConflictDisplayStyle conflictStyle,
-
-                          OutputStream resultStream)
         throws ClientException
     {
-        nativeFileMerge(originalFile, modifiedFile, latestFile,
+        return nativeFileDiff(originalFile, modifiedFile,
 
-                        // Interpret the diff options
-                        (diffOptions == null
-                         ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
-                         : diffOptions.ignoreSpace.ordinal()),
-                        (diffOptions == null ? false
-                         : diffOptions.ignoreEolStyle),
-                        (diffOptions == null ? false
-                         : diffOptions.showCFunction),
+                              // Interpret the diff options
+                              (diffOptions == null
+                               ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
+                               : diffOptions.ignoreSpace.ordinal()),
+                              (diffOptions == null ? false
+                               : diffOptions.ignoreEolStyle),
+                              (diffOptions == null ? false
+                               : diffOptions.showCFunction),
 
-                        conflictOriginal, conflictModified, conflictLatest,
-                        conflistSeparator,
-
-                        // Interpret the conflict style
-                        conflictStyle.ordinal(),
-
-                        resultStream);
+                              originalHeader, modifiedHeader, headerEncoding,
+                              relativeToDir, resultStream);
     }
 
     private native
-        void nativeFileMerge(String originalFile,
+        boolean nativeFileDiff(String originalFile,
+                               String modifiedFile,
+
+                               // Interpreted diff options
+                               int ignoreSpace,
+                               boolean ignoreEolStyle,
+                               boolean showCFunction,
+
+                               String originalHeader,
+                               String modifiedHeader,
+                               String headerEncoding,
+                               String relativeToDir,
+
+                               OutputStream resultStream)
+        throws ClientException;
+
+    /** @see ISVNUtil.fileMerge */
+    public boolean fileMerge(String originalFile,
                              String modifiedFile,
                              String latestFile,
-
-                             // Interpreted diff options
-                             int ignoreSpace,
-                             boolean ignoreEolStyle,
-                             boolean showCFunction,
+                             SVNUtil.DiffOptions diffOptions,
 
                              String conflictOriginal,
                              String conflictModified,
                              String conflictLatest,
                              String conflistSeparator,
-
-                             // Interpreted conflict display style
-                             int conflictStyle,
+                             SVNUtil.ConflictDisplayStyle conflictStyle,
 
                              OutputStream resultStream)
+        throws ClientException
+    {
+        return nativeFileMerge(originalFile, modifiedFile, latestFile,
+
+                               // Interpret the diff options
+                               (diffOptions == null
+                                ? SVNUtil.DiffOptions.IgnoreSpace.none.ordinal()
+                                : diffOptions.ignoreSpace.ordinal()),
+                               (diffOptions == null ? false
+                                : diffOptions.ignoreEolStyle),
+                               (diffOptions == null ? false
+                                : diffOptions.showCFunction),
+
+                               conflictOriginal, conflictModified,
+                               conflictLatest, conflistSeparator,
+
+                               // Interpret the conflict style
+                               conflictStyle.ordinal(),
+
+                               resultStream);
+    }
+
+    private native
+        boolean nativeFileMerge(String originalFile,
+                                String modifiedFile,
+                                String latestFile,
+
+                                // Interpreted diff options
+                                int ignoreSpace,
+                                boolean ignoreEolStyle,
+                                boolean showCFunction,
+
+                                String conflictOriginal,
+                                String conflictModified,
+                                String conflictLatest,
+                                String conflistSeparator,
+
+                                // Interpreted conflict display style
+                                int conflictStyle,
+
+                                OutputStream resultStream)
         throws ClientException;
 }

Modified: subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java
                
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/or \
g/apache/subversion/javahl/UtilTests.java?rev=1518577&r1=1518576&r2=1518577&view=diff \
                ==============================================================================
                
--- subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java \
                (original)
+++ subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/UtilTests.java \
Thu Aug 29 10:45:44 2013 @@ -35,6 +35,8 @@ import org.junit.Assert;
  */
 public class UtilTests extends SVNTests
 {
+    private final static String NL = System.getProperty("line.separator");
+
     /**
      * Base name of all our tests.
      */
@@ -85,14 +87,15 @@ public class UtilTests extends SVNTests
         writeFileContents(modified, "\nmodified\n\n");
 
         ByteArrayOutputStream result = new ByteArrayOutputStream();
-        SVNUtil.FileDiff(original.getAbsolutePath(),
-                         modified.getAbsolutePath(),
-                         null, "original", "modified", "UTF-8", null,
-                         result);
-
-        final byte[] expected = ("--- original\n" +
-                                 "+++ modified\n" +
-                                 "@@ -3,7 +3,7 @@\n" +
+        boolean diffs =  SVNUtil.fileDiff(original.getAbsolutePath(),
+                                          modified.getAbsolutePath(),
+                                          null, "original", "modified", "UTF-8",
+                                          null, result);
+        assertTrue(diffs);
+
+        final byte[] expected = ("--- original" + NL +
+                                 "+++ modified" + NL +
+                                 "@@ -3,7 +3,7 @@" + NL +
                                  " 3\n 4\n \n" +
                                  "-original\n" +
                                  "+modified\n" +
@@ -111,26 +114,27 @@ public class UtilTests extends SVNTests
         writeFileContents(latest, "\nlatest\n\n");
 
         ByteArrayOutputStream result = new ByteArrayOutputStream();
-        SVNUtil.FileMerge(original.getAbsolutePath(),
-                          modified.getAbsolutePath(),
-                          latest.getAbsolutePath(),
-                          null,
-                          "||||||| base",
-                          "<<<<<<< branch",
-                          ">>>>>>> local",
-                          "=======",
-                          SVNUtil.ConflictDisplayStyle.modified_original_latest,
-                          result);
+        boolean conflicts = SVNUtil.fileMerge(original.getAbsolutePath(),
+                                              modified.getAbsolutePath(),
+                                              latest.getAbsolutePath(),
+                                              null,
+                                              "||||||| base",
+                                              "<<<<<<< branch",
+                                              ">>>>>>> local",
+                                              "=======",
+                                              \
SVNUtil.ConflictDisplayStyle.modified_original_latest, +                              \
result); +        assertTrue(conflicts);
 
         final byte[] expected = ("1\n2\n3\n4\n\n" +
-                                 "<<<<<<< branch\n" +
+                                 "<<<<<<< branch" + NL +
                                  "modified\n" +
-                                 "||||||| base\n" +
+                                 "||||||| base" + NL +
                                  "original\n" +
-                                 "=======\n" +
+                                 "=======" + NL +
                                  "latest\n" +
-                                 ">>>>>>> local\n\n" +
-                                 "N-3\nN-2\nN-1\nN\n").getBytes();
+                                 ">>>>>>> local" + NL +
+                                 "\nN-3\nN-2\nN-1\nN\n").getBytes();
         Assert.assertArrayEquals(expected, result.toByteArray());
     }
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic