You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/05/02 21:03:01 UTC

svn commit: r1098736 - in /subversion/trunk/subversion/bindings/javahl: native/CreateJ.cpp native/CreateJ.h native/EnumMapper.cpp native/EnumMapper.h src/org/apache/subversion/javahl/types/Info.java src/org/tigris/subversion/javahl/Info2.java

Author: hwright
Date: Mon May  2 19:03:00 2011
New Revision: 1098736

URL: http://svn.apache.org/viewvc?rev=1098736&view=rev
Log:
Fix the JavaHL build by returning a proper Checksum in the Info object.

[ in subversion/bindings/javahl/ ]
* native/CreateJ.cpp
  (Checksum): New.
  (Info): Create a real checksum from the wc_info checksum.
 
* native/EnumMapper.h
  (mapChecksumKind): New.

* native/EnumMapper.cpp
  (mapChecksumKind): New.

* native/CreateJ.h
  (Checksum): New.

* src/org/apache/subversion/javahl/types/Info.java
  (checksum, getChecksum): Update type.
  (Info): Take a Checksum as input.

* src/org/tigris/subversion/javahl/Info2.java
  (Info2): Avoid a null Checksum conversion.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
    subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
    subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
    subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
    subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java

Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp Mon May  2 19:03:00 2011
@@ -178,6 +178,53 @@ CreateJ::ConflictVersion(const svn_wc_co
 }
 
 jobject
+CreateJ::Checksum(const svn_checksum_t *checksum)
+{
+  if (!checksum)
+    return NULL;
+
+  JNIEnv *env = JNIUtil::getEnv();
+
+  // Create a local frame for our references
+  env->PushLocalFrame(LOCAL_FRAME_SIZE);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  jclass clazz = env->FindClass(JAVA_PACKAGE"/types/Checksum");
+  if (JNIUtil::isExceptionThrown())
+    POP_AND_RETURN_NULL;
+
+  // Get the method id for the CommitItem constructor.
+  static jmethodID midConstructor = 0;
+  if (midConstructor == 0)
+    {
+      midConstructor = env->GetMethodID(clazz, "<init>",
+                                        "([B"
+                                        "L"JAVA_PACKAGE"/types/Checksum$Kind;"
+                                        ")V");
+      if (JNIUtil::isExceptionThrown())
+        POP_AND_RETURN_NULL;
+    }
+
+  jbyteArray jdigest = JNIUtil::makeJByteArray(
+                            (const signed char *)checksum->digest,
+                            svn_checksum_size(checksum));
+  if (JNIUtil::isExceptionThrown())
+    POP_AND_RETURN_NULL;
+
+  jobject jkind = EnumMapper::mapChecksumKind(checksum->kind);
+  if (JNIUtil::isExceptionThrown())
+    POP_AND_RETURN_NULL;
+
+  // create the Java object
+  jobject jchecksum = env->NewObject(clazz, midConstructor, jdigest, jkind);
+  if (JNIUtil::isExceptionThrown())
+    POP_AND_RETURN_NULL;
+
+  return env->PopLocalFrame(jchecksum);
+}
+
+jobject
 CreateJ::Info(const char *path, const svn_info2_t *info)
 {
   JNIEnv *env = JNIUtil::getEnv();
@@ -202,7 +249,8 @@ CreateJ::Info(const char *path, const sv
                              "JJLjava/lang/String;"
                              "L"JAVA_PACKAGE"/types/Lock;Z"
                              "L"JAVA_PACKAGE"/types/Info$ScheduleKind;"
-                             "Ljava/lang/String;JJLjava/lang/String;"
+                             "Ljava/lang/String;JJ"
+                             "L"JAVA_PACKAGE"/types/Checksum;"
                              "Ljava/lang/String;JJ"
                              "L"JAVA_PACKAGE"/types/Depth;Ljava/util/Set;)V");
       if (mid == 0 || JNIUtil::isJavaExceptionThrown())
@@ -215,7 +263,7 @@ CreateJ::Info(const char *path, const sv
 
   jstring jwcroot = NULL;
   jstring jcopyFromUrl = NULL;
-  jstring jchecksum = NULL;
+  jobject jchecksum = NULL;
   jstring jchangelist = NULL;
   jobject jconflicts = NULL;
   jobject jscheduleKind = NULL;
@@ -233,7 +281,7 @@ CreateJ::Info(const char *path, const sv
       if (JNIUtil::isJavaExceptionThrown())
         POP_AND_RETURN_NULL;
 
-      jchecksum = JNIUtil::makeJString(info->wc_info->checksum);
+      jchecksum = Checksum(info->wc_info->checksum);
       if (JNIUtil::isJavaExceptionThrown())
         POP_AND_RETURN_NULL;
 

Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.h?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.h Mon May  2 19:03:00 2011
@@ -46,6 +46,9 @@ class CreateJ
   ConflictDescriptor(const svn_wc_conflict_description2_t *desc);
 
   static jobject
+  Checksum(const svn_checksum_t *checksum);
+
+  static jobject
   Info(const char *path, const svn_info2_t *info);
 
   static jobject

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.cpp Mon May  2 19:03:00 2011
@@ -145,6 +145,12 @@ jobject EnumMapper::mapStatusKind(svn_wc
   return mapEnum(JAVA_PACKAGE"/types/Status$Kind", ((int) svnKind) - 1);
 }
 
+jobject EnumMapper::mapChecksumKind(svn_checksum_kind_t kind)
+{
+  // We're assuming a valid value for the C enum above
+  return mapEnum(JAVA_PACKAGE"/types/Checksum$Kind", (int) kind);
+}
+
 jobject EnumMapper::mapConflictKind(svn_wc_conflict_kind_t kind)
 {
   // We're assuming a valid value for the C enum above

Modified: subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/EnumMapper.h Mon May  2 19:03:00 2011
@@ -60,6 +60,7 @@ class EnumMapper
   static jobject mapNotifyLockState(svn_wc_notify_lock_state_t state);
   static jobject mapStatusKind(svn_wc_status_kind svnKind);
   static jobject mapScheduleKind(svn_wc_schedule_t schedule);
+  static jobject mapChecksumKind(svn_checksum_kind_t kind);
   static jobject mapConflictKind(svn_wc_conflict_kind_t kind);
   static jobject mapConflictAction(svn_wc_conflict_action_t action);
   static jobject mapConflictReason(svn_wc_conflict_reason_t reason);

Modified: subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java Mon May  2 19:03:00 2011
@@ -127,7 +127,7 @@ public class Info implements java.io.Ser
     /**
      * the checksum of the item
      */
-    private String checksum;
+    private Checksum checksum;
 
     /**
      * The name of the changelist.
@@ -186,7 +186,7 @@ public class Info implements java.io.Ser
           String reposRootUrl, String reposUUID, long lastChangedRev,
           long lastChangedDate, String lastChangedAuthor, Lock lock,
           boolean hasWcInfo, ScheduleKind schedule, String copyFromUrl,
-          long copyFromRev, long textTime, String checksum,
+          long copyFromRev, long textTime, Checksum checksum,
           String changelistName, long workingSize, long reposSize, Depth depth,
           Set<ConflictDescriptor> conflict)
     {
@@ -351,7 +351,7 @@ public class Info implements java.io.Ser
     /**
      * return the checksum of the item
      */
-    public String getChecksum()
+    public Checksum getChecksum()
     {
         return checksum;
     }

Modified: subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java?rev=1098736&r1=1098735&r2=1098736&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java (original)
+++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java Mon May  2 19:03:00 2011
@@ -346,7 +346,8 @@ public class Info2 implements java.io.Se
              aInfo.getCopyFromUrl(), aInfo.getCopyFromRev(),
              aInfo.getTextTime() == null ? 0
                 : aInfo.getTextTime().getTime() * 1000,
-             0, aInfo.getChecksum(),
+             0, aInfo.getChecksum() == null ? null
+                    : new String(aInfo.getChecksum().getDigest()),
              getConflictOld(aInfo.getConflicts()),
              getConflictNew(aInfo.getConflicts()),
              getConflictWrk(aInfo.getConflicts()),



Re: svn commit: r1098736 - in /subversion/trunk/subversion/bindings/javahl: native/CreateJ.cpp native/CreateJ.h native/EnumMapper.cpp native/EnumMapper.h src/org/apache/subversion/javahl/types/Info.java src/org/tigris/subversion/javahl/Info2.java

Posted by Greg Stein <gs...@gmail.com>.
On Mon, May 2, 2011 at 15:03,  <hw...@apache.org> wrote:
>...
> +++ subversion/trunk/subversion/bindings/javahl/src/org/tigris/subversion/javahl/Info2.java Mon May  2 19:03:00 2011
> @@ -346,7 +346,8 @@ public class Info2 implements java.io.Se
>              aInfo.getCopyFromUrl(), aInfo.getCopyFromRev(),
>              aInfo.getTextTime() == null ? 0
>                 : aInfo.getTextTime().getTime() * 1000,
> -             0, aInfo.getChecksum(),
> +             0, aInfo.getChecksum() == null ? null
> +                    : new String(aInfo.getChecksum().getDigest()),

Per IRC, you're returning the raw bytes here, rather than the hexified
checksum string.

Cheers,
-g