Author: brane
Date: Wed Jul 31 21:54:59 2013
New Revision: 1509045
URL: http://svn.apache.org/r1509045
Log:
Implement svn_rangelist_remove wrapper in JavaHL.
* build.conf (private-built-includes):
Add org_apache_subversion_javahl_types_RevisionRangeList.h.
[in subversion/bindings/javahl/src/org/apache/subversion/javahl]
* types/RevisionRangeList.java (RevisionRangeList.remove):
Mark overload native and return the same type as the argument.
[in subversion/bindings/javahl/native]
* RevisionRangeList.h (RevisionRangeList::create): New factory method.
(RevisionRangeList::RevisionRangeList): Make constructor explicit.
* RevisionRangeList.cpp (RevisionRangeList::create): Implement conversion
from the Java class RevisionRangeList.
* org_apache_subversion_javahl_types_RevisionRangeList.cpp: New file.
(Java_org_apache_subversion_javahl_types_RevisionRangeList_remove):
Native implementation of RevisionRangeList.remove.
[in subversion/bindings/javahl/tests/org/apache/subversion/javahl]
* BasicTests.java (BasicTests.testRevisionRangeListRemove):
New test case; exercises both overloads of RevisionRangeList.remove.
Added:
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
Modified:
subversion/trunk/build.conf
subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Modified: subversion/trunk/build.conf
URL:
http://svn.apache.org/viewvc/subversion/trunk/build.conf?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/build.conf (original)
+++ subversion/trunk/build.conf Wed Jul 31 21:54:59 2013
@@ -69,6 +69,7 @@ private-built-includes =
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLib.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_VersionExtended_LoadedLibIterator.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_Revision.h
+
subversion/bindings/javahl/include/org_apache_subversion_javahl_types_RevisionRangeList.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_callback_UserPasswordCallback.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteSession.h
subversion/bindings/javahl/include/org_apache_subversion_javahl_remote_RemoteFactory.h
Modified:
subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.cpp
Wed Jul 31 21:54:59 2013
@@ -24,6 +24,7 @@
* @brief Implementat of the class RevisionRangeList
*/
+#include "JNIUtil.h"
#include "Iterator.h"
#include "RevisionRange.h"
#include "RevisionRangeList.h"
@@ -48,6 +49,33 @@ RevisionRangeList::RevisionRangeList(job
}
}
+RevisionRangeList RevisionRangeList::create(jobject jthis, SVN::Pool &pool)
+{
+ jobject jrangelist = NULL;
+
+ if (jthis)
+ {
+ JNIEnv *env = JNIUtil::getEnv();
+
+ jmethodID mid = 0;
+ if (mid == 0)
+ {
+ jclass cls = env->FindClass(JAVA_PACKAGE"/types/RevisionRangeList");
+ if (JNIUtil::isJavaExceptionThrown())
+ return RevisionRangeList(NULL, pool);
+
+ mid = env->GetMethodID(cls, "getRanges", "()Ljava/util/List;");
+ if (JNIUtil::isJavaExceptionThrown())
+ return RevisionRangeList(NULL, pool);
+ }
+
+ jrangelist = env->CallObjectMethod(jthis, mid);
+ if (JNIUtil::isJavaExceptionThrown())
+ return RevisionRangeList(NULL, pool);
+ }
+ return RevisionRangeList(jrangelist, pool);
+}
+
jobject RevisionRangeList::toList() const
{
JNIEnv *env = JNIUtil::getEnv();
Modified: subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h
(original)
+++ subversion/trunk/subversion/bindings/javahl/native/RevisionRangeList.h Wed
Jul 31 21:54:59 2013
@@ -44,9 +44,14 @@ class RevisionRangeList
RevisionRangeList(jobject jrangelist, SVN::Pool &pool);
/**
+ * Create a RevisionRangeList object from a Java RevisionRangeList.
+ */
+ static RevisionRangeList create(jobject jthis, SVN::Pool &pool);
+
+ /**
* Wrap an svn_rangelist_t.
*/
- RevisionRangeList(svn_rangelist_t* ranges)
+ explicit RevisionRangeList(svn_rangelist_t* ranges)
: m_rangelist(ranges)
{}
Added:
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp?rev=1509045&view=auto
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
(added)
+++
subversion/trunk/subversion/bindings/javahl/native/org_apache_subversion_javahl_types_RevisionRangeList.cpp
Wed Jul 31 21:54:59 2013
@@ -0,0 +1,58 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file org_apache_subversion_javahl_types_RevisionRangeList.cpp
+ * @brief Implementation of the native methods in the Java class
+ * RevisionRangeList.
+ */
+
+
+#include "../include/org_apache_subversion_javahl_types_RevisionRangeList.h"
+#include "JNIStackElement.h"
+#include "RevisionRangeList.h"
+#include "Pool.h"
+
+#include "svn_mergeinfo.h"
+#include "svn_private_config.h"
+
+JNIEXPORT jobject JNICALL
+Java_org_apache_subversion_javahl_types_RevisionRangeList_remove(
+ JNIEnv* env, jobject jthis, jobject jeraser,
+ jboolean jconsider_inheritance)
+{
+ JNIEntry(RevisionRangeList, remove);
+
+ SVN::Pool request_pool;
+
+ RevisionRangeList rangelist = RevisionRangeList::create(jthis, request_pool);
+ CPPADDR_NULL_PTR(rangelist.get(), NULL);
+
+ RevisionRangeList eraser(jeraser, request_pool);
+ CPPADDR_NULL_PTR(eraser.get(), NULL);
+
+ svn_rangelist_t *output;
+ SVN_JNI_ERR(svn_rangelist_remove(&output, eraser.get(), rangelist.get(),
+ bool(jconsider_inheritance),
+ request_pool.getPool()),
+ NULL);
+ return RevisionRangeList(output).toList();
+}
Modified:
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/RevisionRangeList.java
Wed Jul 31 21:54:59 2013
@@ -65,12 +65,9 @@ public class RevisionRangeList implement
* {@link RevisionRange#isInherited} property when comparing
* revision ranges for equality.
*/
- public /*native*/ RevisionRangeList remove(List<RevisionRange> eraser,
- boolean considerInheritance)
- throws ClientException
- {
- throw new RuntimeException("Not implemented:
RevisionRangeListl.remove");
- }
+ public native List<RevisionRange> remove(List<RevisionRange> eraser,
+ boolean considerInheritance)
+ throws ClientException;
/**
* Remove revisions in <code>eraser</code> from the current object
@@ -84,7 +81,8 @@ public class RevisionRangeList implement
boolean considerInheritance)
throws ClientException
{
- return remove(eraser.ranges, considerInheritance);
+ return new RevisionRangeList
+ (remove(eraser.ranges, considerInheritance));
}
// TODO: More svn_rangelist_t operations
Modified:
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1509045&r1=1509044&r2=1509045&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
(original)
+++
subversion/trunk/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Wed Jul 31 21:54:59 2013
@@ -3744,6 +3744,39 @@ public class BasicTests extends SVNTests
}
/**
+ * Test RevisionRangeList.remove
+ */
+ public void testRevisionRangeListRemove() throws Throwable
+ {
+ RevisionRangeList ranges =
+ new RevisionRangeList(new ArrayList<RevisionRange>());
+ ranges.getRanges()
+ .add(new RevisionRange(Revision.getInstance(1),
+ Revision.getInstance(5),
+ true));
+ ranges.getRanges()
+ .add(new RevisionRange(Revision.getInstance(7),
+ Revision.getInstance(9),
+ false));
+ RevisionRangeList eraser =
+ new RevisionRangeList(new ArrayList<RevisionRange>());
+ eraser.getRanges()
+ .add(new RevisionRange(Revision.getInstance(7),
+ Revision.getInstance(9),
+ true));
+
+ List<RevisionRange> result = ranges.remove(eraser, true).getRanges();
+ assertEquals(2, ranges.getRanges().size());
+ assertEquals(1, eraser.getRanges().size());
+ assertEquals(2, result.size());
+
+ result = ranges.remove(eraser.getRanges(), false);
+ assertEquals(2, ranges.getRanges().size());
+ assertEquals(1, eraser.getRanges().size());
+ assertEquals(1, result.size());
+ }
+
+ /**
* @return <code>file</code> converted into a -- possibly
* <code>canonical</code>-ized -- Subversion-internal path
* representation.