Author: brane
Date: Tue May 12 12:25:01 2026
New Revision: 1934141
Log:
On the javahl-1.15 branch: Add working copy metadata (compatibility
version and the store-pristine flag) to info results.
* BRANCH-README: Update the DONE list.
[in subversion/bindings/javahl/src/org/apache/subversion/javahl/types/]
* Info.java
(Info.wcVersion, Info.storePristine): New private members.
(Info.Info): Deprecate public constructor and add a new private constructor.
(Info.getWorkingCopyVersion,
Info.getStorePristine): New accessor methods.
[in subversion/bindings/javahl/tests/org/apache/subversion/javahl/]
* BasicTests.java
(BasicTests.testBasicInfo): check the new flags in the Info object.
[in subversion/bindings/javahl/native/]
* CreateJ.h
(CreateJ::Info) Add pool parameter to the prototype.
* CreateJ.cpp
(CreateJ::Info): Convert the working copy version and store-pristine flag
from the info structure and call the new Java Info constructor.
* InfoCallback.cpp
(InfoCallback::singleInfo): Pass the pool to CreateJ::Info.
Modified:
subversion/branches/javahl-1.15/BRANCH-README
subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.cpp
subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.h
subversion/branches/javahl-1.15/subversion/bindings/javahl/native/InfoCallback.cpp
subversion/branches/javahl-1.15/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
subversion/branches/javahl-1.15/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
Modified: subversion/branches/javahl-1.15/BRANCH-README
==============================================================================
--- subversion/branches/javahl-1.15/BRANCH-README Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/BRANCH-README Tue May 12 12:25:01 2026 (r1934141)
@@ -20,3 +20,4 @@ DONE:
- SVNClient.checkout
- SVNClient.list, .callback.ListCallback
* Update SVNClient.diff to capture stderr.
+ * Add working copy metadata to SVNClient.info() results.
Modified: subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.cpp
==============================================================================
--- subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.cpp Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.cpp Tue May 12 12:25:01 2026 (r1934141)
@@ -24,6 +24,7 @@
* @brief Implementation of the class CreateJ.
*/
+#include "svn_client.h"
#include "svn_error.h"
#include "JNIUtil.h"
@@ -32,6 +33,7 @@
#include "RevisionRange.h"
#include "RevisionRangeList.h"
#include "CreateJ.h"
+#include "Version.hpp"
#include "../include/org_apache_subversion_javahl_types_Revision.h"
#include "../include/org_apache_subversion_javahl_CommitItemStateFlags.h"
@@ -318,7 +320,7 @@ CreateJ::DirEntry(const char *path, cons
}
jobject
-CreateJ::Info(const char *path, const svn_client_info2_t *info)
+CreateJ::Info(const char *path, const svn_client_info2_t *info, apr_pool_t *pool)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -346,6 +348,7 @@ CreateJ::Info(const char *path, const sv
JAVAHL_ARG("/types/Checksum;")
"Ljava/lang/String;JJ"
JAVAHL_ARG("/types/Depth;Ljava/util/Set;")
+ JAVAHL_ARG("/types/Version;Z")
")V");
if (mid == 0 || JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -365,6 +368,8 @@ CreateJ::Info(const char *path, const sv
jlong jworkingSize = -1;
jlong jcopyfrom_rev = -1;
jlong jtext_time = -1;
+ jobject jwc_version = NULL;
+ jboolean jstore_pristine = JNI_TRUE;
if (info->wc_info)
{
jwcroot = JNIUtil::makeJString(info->wc_info->wcroot_abspath);
@@ -418,6 +423,16 @@ CreateJ::Info(const char *path, const sv
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
}
+
+ if (info->wc_info->wc_format > 0)
+ {
+ const svn_version_t *wc_ver
+ = svn_client_wc_version_from_format(info->wc_info->wc_format, pool);
+ if (wc_ver != NULL)
+ jwc_version = ::JavaHL::Version::getInstance(::Java::Env(env), *wc_ver);
+ }
+
+ jstore_pristine = info->wc_info->store_pristine ? JNI_TRUE : JNI_FALSE;
}
jstring jurl = JNIUtil::makeJString(info->URL);
@@ -455,7 +470,8 @@ CreateJ::Info(const char *path, const sv
jscheduleKind, jcopyFromUrl,
jcopyfrom_rev, jtext_time, jchecksum,
jchangelist, jworkingSize,
- (jlong) info->size, jdepth, jconflicts);
+ (jlong) info->size, jdepth, jconflicts,
+ jwc_version, jstore_pristine);
return env->PopLocalFrame(jinfo2);
}
Modified: subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.h
==============================================================================
--- subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.h Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/subversion/bindings/javahl/native/CreateJ.h Tue May 12 12:25:01 2026 (r1934141)
@@ -54,7 +54,7 @@ class CreateJ
const svn_dirent_t *dirent);
static jobject
- Info(const char *path, const svn_client_info2_t *info);
+ Info(const char *path, const svn_client_info2_t *info, apr_pool_t *pool);
static jobject
Lock(const svn_lock_t *lock);
Modified: subversion/branches/javahl-1.15/subversion/bindings/javahl/native/InfoCallback.cpp
==============================================================================
--- subversion/branches/javahl-1.15/subversion/bindings/javahl/native/InfoCallback.cpp Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/subversion/bindings/javahl/native/InfoCallback.cpp Tue May 12 12:25:01 2026 (r1934141)
@@ -90,7 +90,7 @@ InfoCallback::singleInfo(const char *pat
POP_AND_RETURN(SVN_NO_ERROR);
}
- jobject jinfo2 = CreateJ::Info(path, info);
+ jobject jinfo2 = CreateJ::Info(path, info, pool);
if (jinfo2 == NULL || JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
Modified: subversion/branches/javahl-1.15/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java
==============================================================================
--- subversion/branches/javahl-1.15/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/subversion/bindings/javahl/src/org/apache/subversion/javahl/types/Info.java Tue May 12 12:25:01 2026 (r1934141)
@@ -155,6 +155,19 @@ public class Info implements java.io.Ser
private Set<ConflictDescriptor> conflict;
/**
+ * The working copy compatibility version.
+ * May be <code>null</code>.
+ * @since 1.15
+ */
+ private Version wcVersion;
+
+ /**
+ * True if the working copy stores pristine files.
+ * @since 1.15
+ */
+ private boolean storePristine = true;
+
+ /**
* constructor to build the object by native code. See fields for
* parameters
* @param path
@@ -175,8 +188,10 @@ public class Info implements java.io.Ser
* @param textTime
* @param checksum
* @param depth
- * @param treeConflict
+ * @param conflict
+ * @deprecated
*/
+ @Deprecated
public Info(String path, String wcroot, String url, long rev, NodeKind kind,
String reposRootUrl, String reposUUID, long lastChangedRev,
long lastChangedDate, String lastChangedAuthor, Lock lock,
@@ -210,6 +225,32 @@ public class Info implements java.io.Ser
}
/**
+ * Constructor to build the object by native code.
+ * <p>
+ * Behaves like the deprecated version with additional arguments:
+ * @param wcVersion
+ * @param storePristine
+ * @since 1.15
+ */
+ @SuppressWarnings("deprecation") // because we call the deprecated ctor
+ private Info(String path, String wcroot, String url, long rev, NodeKind kind,
+ String reposRootUrl, String reposUUID, long lastChangedRev,
+ long lastChangedDate, String lastChangedAuthor, Lock lock,
+ boolean hasWcInfo, ScheduleKind schedule, String copyFromUrl,
+ long copyFromRev, long textTime, Checksum checksum,
+ String changelistName, long workingSize, long reposSize, Depth depth,
+ Set<ConflictDescriptor> conflict, Version wcVersion, boolean storePristine)
+ {
+ this(path, wcroot, url, rev, kind, reposRootUrl, reposUUID,
+ lastChangedRev, lastChangedDate, lastChangedAuthor,
+ lock, hasWcInfo, schedule, copyFromUrl, copyFromRev,
+ textTime, checksum, changelistName, workingSize,
+ reposSize, depth, conflict);
+ this.wcVersion = wcVersion;
+ this.storePristine = storePristine;
+ }
+
+ /**
* return the path of the item
*/
public String getPath()
@@ -400,7 +441,7 @@ public class Info implements java.io.Ser
}
/**
- * @return the tree conflict of which this node is a victim, or null if none
+ * @return The tree conflict of which this node is a victim, or null if none
*/
public Set<ConflictDescriptor> getConflicts()
{
@@ -408,6 +449,24 @@ public class Info implements java.io.Ser
}
/**
+ * @return The working copy compatibility version.
+ * @since 1.15
+ */
+ public Version getWorkingCopyVersion()
+ {
+ return wcVersion;
+ }
+
+ /**
+ * @return True if the working copy stores pristine content.
+ * @since 1.15
+ */
+ public boolean getStorePristine()
+ {
+ return storePristine;
+ }
+
+ /**
* @return A string representation of this info.
*/
public String toString()
Modified: subversion/branches/javahl-1.15/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
==============================================================================
--- subversion/branches/javahl-1.15/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Tue May 12 12:10:04 2026 (r1934140)
+++ subversion/branches/javahl-1.15/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Tue May 12 12:25:01 2026 (r1934141)
@@ -2607,6 +2607,13 @@ public class BasicTests extends SVNTests
Info.ScheduleKind.normal, info.getSchedule());
assertEquals("wrong node kind from info", NodeKind.file,
info.getKind());
+ assertTrue("unexpected store-pristine", info.getStorePristine());
+
+ Version current = info.getWorkingCopyVersion();
+ assertNotNull("WC version not available", current);
+ Version expected = client.defaultWcVersion();
+ assertTrue("unexpected WC version", current.isAtLeast(expected));
+ assertTrue("unexpected WC version", expected.isAtLeast(current));
}
/**
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.