Ok thanks for your comment
I have attached the patch file this time
Cédric
>On Sun, Aug 17, 2003 at 10:33:43PM +0100, Cédric Chabanois wrote:
>[snip]
>
>
>>Index: native/SVNClient.cpp
>>===================================================================
>>--- native/SVNClient.cpp (revision 6771)
>>+++ native/SVNClient.cpp (working copy)
>>@@ -35,6 +35,7 @@
>>#include <svn_path.h>
>>#include "org_tigris_subversion_javahl_Status_Kind.h"
>>#include "org_tigris_subversion_javahl_Revision.h"
>>+#include "org_tigris_subversion_javahl_NodeKind.h"
>>#include <vector>
>>#include <iostream>
>>
>>
>[snip]
>
>This patch is broken. It's missing some spaces at the start of the
>lines. It should look more like this:
>
>Index: native/SVNClient.cpp
>===================================================================
>--- native/SVNClient.cpp (revision 6771)
>+++ native/SVNClient.cpp (working copy)
>@@ -35,6 +35,7 @@
> #include <svn_path.h>
> #include "org_tigris_subversion_javahl_Status_Kind.h"
> #include "org_tigris_subversion_javahl_Revision.h"
>+#include "org_tigris_subversion_javahl_NodeKind.h"
> #include <vector>
> #include <iostream>
>[...]
>
>
>
Index: native/SVNClient.cpp
===================================================================
--- native/SVNClient.cpp (revision 6771)
+++ native/SVNClient.cpp (working copy)
@@ -35,6 +35,7 @@
#include <svn_path.h>
#include "org_tigris_subversion_javahl_Status_Kind.h"
#include "org_tigris_subversion_javahl_Revision.h"
+#include "org_tigris_subversion_javahl_NodeKind.h"
#include <vector>
#include <iostream>
//////////////////////////////////////////////////////////////////////
@@ -126,6 +127,9 @@
return m_lastPath.c_str();
}
+/**
+ * List directory entries of a URL
+ */
jobjectArray SVNClient::list(const char *url, Revision &revision, bool recurse)
{
Pool subPool;
@@ -189,7 +193,7 @@
}
else
{
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
return NULL;
}
}
@@ -260,15 +264,13 @@
}
else
{
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
return NULL;
}
}
jobject SVNClient::singleStatus(const char *path, bool onServer)
{
- //JNIUtil::logMessage("entering singleStatus");
- //JNIUtil::logMessage(path);
Pool subPool;
apr_hash_t *status_hash;
svn_revnum_t youngest = SVN_INVALID_REVNUM;
@@ -279,13 +281,11 @@
return NULL;
}
- //JNIUtil::logMessage("after getContext");
svn_error_t *Err = svn_client_status (&status_hash, &youngest, path, false, TRUE,
onServer ? TRUE : FALSE, //update
FALSE, //no_ignore,
ctx,
subPool.pool());
- //JNIUtil::logMessage("after svn_client_status");
if(Err == NULL)
{
apr_array_header_t *statusarray =
@@ -297,12 +297,11 @@
item = &APR_ARRAY_IDX (statusarray, 0, const svn_item_t);
status = (svn_wc_status_t *) item->value;
- //JNIUtil::logMessage("before createJavaStatus");
return createJavaStatus((const char *) item->key, status);
}
else
{
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
return NULL;
}
}
@@ -383,7 +382,7 @@
}
else
{
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
return NULL;
}
}
@@ -409,7 +408,7 @@
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -419,24 +418,22 @@
m_notify = notify;
}
-void SVNClient::remove(const char *path, const char *message, bool force)
+void SVNClient::remove(Targets &targets, const char *message, bool force)
{
svn_client_commit_info_t *commit_info = NULL;
Pool subPool;
apr_pool_t * apr_pool = subPool.pool ();
- m_lastPath = path;
+// m_lastPath = path;
svn_client_ctx_t *ctx = getContext(message);
if(ctx == NULL)
{
return;
}
- Targets targets(path);
-
- svn_error_t *Err = svn_client_delete (&commit_info, targets.array(subPool), force,
+ svn_error_t *Err = svn_client_delete (&commit_info, (apr_array_header_t *)targets.array(subPool), force,
ctx, apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -453,7 +450,7 @@
svn_error_t *Err = svn_client_revert (m_lastPath.c_str (), recurse, ctx, apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -471,7 +468,7 @@
svn_error_t *Err = svn_client_add (m_lastPath.c_str (), recurse, ctx, apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -492,7 +489,7 @@
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -512,13 +509,12 @@
targets.array (subPool),
!recurse, ctx, apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
if(commit_info && SVN_IS_VALID_REVNUM (commit_info->revision))
return commit_info->revision;
return -1;
- return -1;
}
void SVNClient::copy(const char *srcPath, const char *destPath, const char *message, Revision &revision)
@@ -539,11 +535,10 @@
sourcePath.c_str (),
revision.revision(),
m_lastPath.c_str (),
- NULL,
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -569,29 +564,28 @@
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
-void SVNClient::mkdir(const char *path, const char *message)
+void SVNClient::mkdir(Targets &targets, const char *message)
{
Pool subPool;
apr_pool_t * apr_pool = subPool.pool ();
svn_client_commit_info_t *commit_info = NULL;
- m_lastPath = path;
+// m_lastPath = path;
svn_client_ctx_t *ctx = getContext(message);
if(ctx == NULL)
{
return;
}
- Targets targets(path);
svn_error_t *Err = svn_client_mkdir (&commit_info,
- targets.array(subPool),
+ (apr_array_header_t *)targets.array(subPool),
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -608,7 +602,7 @@
svn_error_t *Err = svn_client_cleanup (m_lastPath.c_str (), ctx, apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -628,11 +622,11 @@
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
-void SVNClient::doExport(const char *srcPath, const char *destPath, Revision &revision)
+void SVNClient::doExport(const char *srcPath, const char *destPath, Revision &revision,bool force)
{
Pool subPool;
apr_pool_t * apr_pool = subPool.pool ();
@@ -647,12 +641,12 @@
m_lastPath.c_str (),
const_cast<svn_opt_revision_t*>(
revision.revision ()),
- false, // force
+ force,
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -676,10 +670,10 @@
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
-void SVNClient::doImport(const char *path, const char *url, const char *newEntry, const char *message, bool recurse)
+void SVNClient::doImport(const char *path, const char *url, const char *message, bool recurse)
{
Pool subPool;
apr_pool_t * apr_pool = subPool.pool ();
@@ -694,13 +688,12 @@
svn_error_t *Err = svn_client_import (&commit_info,
m_lastPath.c_str (),
url,
- //newEntry,
!recurse,
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
@@ -723,17 +716,60 @@
revision2.revision (),
localPath,
recurse,
+ FALSE, // ignore_ancestry
force,
FALSE,
- FALSE,
ctx,
apr_pool);
if(Err != NULL)
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
}
+/**
+ * Get a property
+ */
+jobject SVNClient::propertyGet(jobject jthis, const char *path, const char *name)
+{
+ Pool subPool;
+ apr_pool_t * apr_pool = subPool.pool ();
+ m_lastPath = path;
+
+ Revision rev(Revision::START);
+ svn_client_ctx_t *ctx = getContext(NULL);
+ if(ctx == NULL)
+ {
+ return NULL;
+ }
+
+ apr_hash_t *props;
+ svn_error_t *Err = svn_client_propget(&props,
+ name,
+ m_lastPath.c_str(),
+ rev.revision(),
+ false,
+ ctx,
+ apr_pool);
+
+ if(Err != NULL)
+ {
+ JNIUtil::handleSVNError(Err);
+ return NULL;
+ }
+
+ apr_hash_index_t *hi;
+ hi = apr_hash_first (apr_pool, props); // only one element since we disabled recurse
+ if (hi == NULL)
+ return NULL; // no property with this name
+
+ const char *filename;
+ svn_string_t *propval;
+ apr_hash_this (hi, (const void **)&filename, NULL, (void**)&propval);
+
+ return createJavaProperty(jthis, path, name, propval);
+}
+
jobjectArray SVNClient::properties(jobject jthis, const char *path)
{
apr_array_header_t * props;
@@ -748,7 +784,6 @@
return NULL;
}
-
svn_error_t *Err = svn_client_proplist (&props,
m_lastPath.c_str (),
rev.revision(),
@@ -757,7 +792,7 @@
apr_pool);
if(Err != NULL)
{
- JNIUtil::handleSVNError(Err, NULL);
+ JNIUtil::handleSVNError(Err);
return NULL;
}
@@ -918,6 +953,7 @@
svn_auth_set_parameter(ab, SVN_AUTH_PARAM_DEFAULT_PASSWORD,
m_passWord.c_str());
+
ctx->auth_baton = ab;
ctx->prompt_func = NULL;
ctx->prompt_baton = NULL;
@@ -926,9 +962,9 @@
ctx->log_msg_func = getCommitMessage;
ctx->log_msg_baton = getCommitMessageBaton(message);
svn_error_t *err = NULL;
- if (( err = svn_config_get_config (&(ctx->config), JNIUtil::getRequestPool()->pool())))
+ if (( err = svn_config_get_config (&(ctx->config), NULL, JNIUtil::getRequestPool()->pool())))
{
- JNIUtil::handleSVNError(err, NULL);
+ JNIUtil::handleSVNError(err);
return NULL;
}
@@ -964,6 +1000,7 @@
}
return NULL;
}
+
jobject SVNClient::createJavaStatus(const char *path, svn_wc_status_t *status)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -972,45 +1009,41 @@
{
return NULL;
}
- //JNIUtil::logMessage("after FindClass");
static jmethodID mid = 0;
if(mid == 0)
{
- mid = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;ZJJLjava/lang/String;IIZZZIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J)V");
+ mid = env->GetMethodID(clazz, "<init>",
+ "(Ljava/lang/String;Ljava/lang/String;IJJJLjava/lang/String;IIIIZZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after MethodID");
}
jstring jPath = JNIUtil::makeJString(path);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(path)");
- jboolean jIsVersioned = JNI_FALSE;
- jboolean jIsDir = JNI_FALSE;
- jboolean jIsCopied = JNI_FALSE;
- jboolean jIsLocked = JNI_FALSE;
+ jstring jUrl = NULL;
+ jint jNodeKind = org_tigris_subversion_javahl_NodeKind_unknown;
jlong jRevision = org_tigris_subversion_javahl_Revision_SVN_INVALID_REVNUM;
- jlong jLastChanged = 0;
+ jlong jLastChangedRevision = org_tigris_subversion_javahl_Revision_SVN_INVALID_REVNUM;
+ jlong jLastChangedDate = 0;
jstring jLastCommitAuthor = NULL;
jint jTextType = org_tigris_subversion_javahl_Status_Kind_none;
jint jPropType = org_tigris_subversion_javahl_Status_Kind_none;
jint jRepositoryTextType = org_tigris_subversion_javahl_Status_Kind_none;
jint jRepositoryPropType = org_tigris_subversion_javahl_Status_Kind_none;
+ jboolean jIsLocked = JNI_FALSE;
+ jboolean jIsCopied = JNI_FALSE;
+ jstring jConflictOld = NULL;
jstring jConflictNew = NULL;
- jstring jConflictOld = NULL;
jstring jConflictWorking = NULL;
- jstring jURL = NULL;
- jstring jURLCopiedFrom = NULL;
- jlong jRevisionCopiedFrom = org_tigris_subversion_javahl_Revision_SVN_INVALID_REVNUM;
if(status != NULL)
{
- jIsVersioned = (status->text_status > svn_wc_status_unversioned) ? JNI_TRUE : JNI_FALSE;
+
jTextType = mapStatusKind(status->text_status);
jPropType = mapStatusKind(status->prop_status);
jRepositoryTextType = mapStatusKind(status->repos_text_status);
@@ -1018,72 +1051,67 @@
jIsCopied = (status->copied == 1) ? JNI_TRUE: JNI_FALSE;
jIsLocked = (status->locked == 1) ? JNI_TRUE: JNI_FALSE;
+
svn_wc_entry_t * entry = status->entry;
if (entry != NULL)
{
+ jUrl = JNIUtil::makeJString(entry->url);
+ if(JNIUtil::isJavaExceptionThrown())
+ {
+ return NULL;
+ }
+ jNodeKind = entry->kind;
jRevision = entry->revision;
- jLastChanged = entry->cmt_rev;
+ jLastChangedRevision = entry->cmt_rev;
+ jLastChangedDate = entry->cmt_date;
jLastCommitAuthor = JNIUtil::makeJString(entry->cmt_author);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->cmt_author)");
- jIsDir = (entry->kind == svn_node_dir) ? JNI_TRUE: JNI_FALSE;
+
jConflictNew = JNIUtil::makeJString(entry->conflict_new);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->conflict_new)");
jConflictOld = JNIUtil::makeJString(entry->conflict_old);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->conflict_old)");
jConflictWorking= JNIUtil::makeJString(entry->conflict_wrk);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->conflict_work)");
- jURL = JNIUtil::makeJString(entry->url);
+ }
+ }
+
+ jobject ret = env->NewObject(clazz, mid, jPath, jUrl, jNodeKind, jRevision, jLastChangedRevision, jLastChangedDate, jLastCommitAuthor,
+ jTextType, jPropType, jRepositoryTextType, jRepositoryPropType, jIsLocked, jIsCopied, jConflictOld, jConflictNew, jConflictWorking);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->conflict_work)");
- jURLCopiedFrom = JNIUtil::makeJString(entry->copyfrom_url);
+ env->DeleteLocalRef(clazz);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("after makeJString(entry->copyfrom_url)");
- jRevisionCopiedFrom = entry->copyfrom_rev;
- }
- }
-
- jobject ret = env->NewObject(clazz, mid, jPath, jIsDir, jRevision, jLastChanged, jLastCommitAuthor,
- jTextType, jPropType, jIsVersioned, jIsLocked, jIsCopied, jRepositoryTextType, jRepositoryPropType,
- jConflictOld, jConflictNew, jConflictWorking, jURL, jURLCopiedFrom, jRevisionCopiedFrom);
+ env->DeleteLocalRef(jPath);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("NewObject");
- env->DeleteLocalRef(clazz);
- if(JNIUtil::isJavaExceptionThrown())
+ if (jUrl != NULL)
{
- return NULL;
- }
- //JNIUtil::logMessage("DeleteLocalRef(clazz)");
- env->DeleteLocalRef(jPath);
+ env->DeleteLocalRef(jUrl);
if(JNIUtil::isJavaExceptionThrown())
{
return NULL;
}
- //JNIUtil::logMessage("DeleteLocalRef(jPath)");
+ }
if(jLastCommitAuthor != NULL)
{
env->DeleteLocalRef(jLastCommitAuthor);
@@ -1091,7 +1119,6 @@
{
return NULL;
}
- //JNIUtil::logMessage("DeleteLocalRef(jLastCommitAuthor)");
}
if(jConflictNew != NULL)
{
@@ -1100,7 +1127,6 @@
{
return NULL;
}
- //JNIUtil::logMessage("DeleteLocalRef(jConflictNew)");
}
if(jConflictOld != NULL)
{
@@ -1109,7 +1135,6 @@
{
return NULL;
}
- //JNIUtil::logMessage("DeleteLocalRef(jConflictOld)");
}
if(jConflictWorking != NULL)
{
@@ -1118,28 +1143,10 @@
{
return NULL;
}
- //JNIUtil::logMessage("DeleteLocalRef(jConflictWorking");
}
- if(jURL != NULL)
- {
- env->DeleteLocalRef(jURL);
- if(JNIUtil::isJavaExceptionThrown())
- {
- return NULL;
- }
- //JNIUtil::logMessage("DeleteLocalRef(jURL");
- }
- if(jURLCopiedFrom != NULL)
- {
- env->DeleteLocalRef(jURLCopiedFrom);
- if(JNIUtil::isJavaExceptionThrown())
- {
- return NULL;
- }
- //JNIUtil::logMessage("DeleteLocalRef(jURLCopiedFrom");
- }
return ret;
}
+
jint SVNClient::mapStatusKind(int svnKind)
{
switch(svnKind)
@@ -1165,8 +1172,12 @@
return org_tigris_subversion_javahl_Status_Kind_merged;
case svn_wc_status_conflicted:
return org_tigris_subversion_javahl_Status_Kind_conflicted;
+ case svn_wc_status_ignored:
+ return org_tigris_subversion_javahl_Status_Kind_ignored;
case svn_wc_status_obstructed:
return org_tigris_subversion_javahl_Status_Kind_obstructed;
+ case svn_wc_status_incomplete:
+ return org_tigris_subversion_javahl_Status_Kind_incomplete;
}
}
svn_error_t *SVNClient::messageReceiver (void *baton, apr_hash_t * changed_paths,
@@ -1318,7 +1329,7 @@
svn_error_t * error = svn_client_propset (name, value, path,
recurse, JNIUtil::getRequestPool()->pool());
if(error != NULL)
- JNIUtil::handleSVNError(error, NULL);
+ JNIUtil::handleSVNError(error);
}
jbyteArray SVNClient::fileContent(const char *path, Revision &revision)
@@ -1338,7 +1349,7 @@
pool.pool());
if(err != NULL)
{
- JNIUtil::handleSVNError(err, NULL);
+ JNIUtil::handleSVNError(err);
return NULL;
}
apr_file_t *file = NULL;
@@ -1372,7 +1383,7 @@
path, revision.revision(), ctx, pool.pool());
if(err != NULL)
{
- JNIUtil::handleSVNError(err, NULL);
+ JNIUtil::handleSVNError(err);
return NULL;
}
size = buf->len;
@@ -1399,7 +1410,7 @@
if(err != NULL)
{
env->ReleaseByteArrayElements(ret, retdata, 0);
- JNIUtil::handleSVNError(err, NULL);
+ JNIUtil::handleSVNError(err);
return NULL;
}
env->ReleaseByteArrayElements(ret, retdata, 0);
@@ -1412,6 +1423,9 @@
return ret;
}
+/**
+ * create a DirEntry java object from svn_dirent_t structure
+ */
jobject SVNClient::createJavaDirEntry(const char *path, svn_dirent_t *dirent)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -1489,14 +1503,14 @@
if(error != SVN_NO_ERROR)
{
- JNIUtil::handleSVNError(error, NULL);
+ JNIUtil::handleSVNError(error);
return NULL;
}
if(URL == NULL)
{
JNIUtil::handleSVNError(svn_error_create(SVN_ERR_UNVERSIONED_RESOURCE, NULL,
- "Either a URL or versioned item is required."), NULL);
+ "Either a URL or versioned item is required."));
return NULL;
}
@@ -1505,7 +1519,7 @@
&set_rev, ctx, apr_pool);
if(error != SVN_NO_ERROR)
{
- JNIUtil::handleSVNError(error, NULL);
+ JNIUtil::handleSVNError(error);
return NULL;
}
Index: native/JNIUtil.h
===================================================================
--- native/JNIUtil.h (revision 6771)
+++ native/JNIUtil.h (working copy)
@@ -56,7 +56,7 @@
static bool isExceptionThrown();
static void handleAPRError(int error, const char *op);
static void putFinalizedClient(SVNClient *cl);
- static void handleSVNError(svn_error *err, const char *message);
+ static void handleSVNError(svn_error *err);
static void throwError(const char *message);
static apr_pool_t * getPool();
static bool JNIInit(JNIEnv *env);
Index: native/svnjavahl.dsp
===================================================================
--- native/svnjavahl.dsp (revision 6771)
+++ native/svnjavahl.dsp (working copy)
@@ -55,7 +55,12 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 "C:\program files\microsoft sdk\lib\shfolder.lib" ws2_32.lib Rpcrt4.lib Mswsock.lib ../../../../../db4-win32\lib\libdb41.lib ../../../../../Release/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Release/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Release/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Release/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Release/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Release/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Release/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Release/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Release/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibR/apr.lib ../../../../../apr-iconv/LibR/apriconv.lib ../../../../../apr-util/LibR/aprutil.lib ../../../../../Release/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Release/subversion/libsvn_client/libsvn_client-1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 ../../../../../db4-win32\lib\libdb41.lib ../../../../../Release/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Release/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Release/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Release/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Release/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Release/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Release/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Release/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Release/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibR/apr.lib ../../../../../apr-iconv/LibR/apriconv.lib ../../../../../apr-util/LibR/aprutil.lib ../../../../../Release/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Release/subversion/libsvn_client/libsvn_client-1.lib shfolder.lib Rpcrt4.lib Mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=createJar
+PostBuild_Cmds=jar cvf javahl.jar -C ../cls .
+# End Special Build Tool
!ELSEIF "$(CFG)" == "svnjavahl - Win32 Debug"
@@ -81,7 +86,12 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 Rpcrt4.lib Mswsock.lib "C:\program files\microsoft sdk\lib\shfolder.lib" ../../../../../db4-win32\lib\libdb41d.lib ../../../../../Debug/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Debug/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Debug/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Debug/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Debug/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Debug/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Debug/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Debug/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibD/apr.lib ../../../../../apr-iconv/LibD/apriconv.lib ../../../../../apr-util/LibD/aprutil.lib ../../../../../Debug/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Debug/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Debug/subversion/libsvn_client/libsvn_client-1.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ../../../../../db4-win32\lib\libdb41d.lib ../../../../../Debug/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Debug/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Debug/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Debug/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Debug/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Debug/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Debug/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Debug/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibD/apr.lib ../../../../../apr-iconv/LibD/apriconv.lib ../../../../../apr-util/LibD/aprutil.lib ../../../../../Debug/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Debug/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Debug/subversion/libsvn_client/libsvn_client-1.lib shfolder.lib Rpcrt4.lib Mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=createJar
+PostBuild_Cmds=jar cvf javahl.jar -C ../cls .
+# End Special Build Tool
!ELSEIF "$(CFG)" == "svnjavahl - Win32 Release DB40"
@@ -108,8 +118,13 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 ws2_32.lib Rpcrt4.lib Mswsock.lib ../../../../../db4-win32\lib\libdb41.lib ../../../../../Release/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Release/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Release/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Release/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Release/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Release/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Release/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Release/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Release/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibR/apr.lib ../../../../../apr-iconv/LibR/apriconv.lib ../../../../../apr-util/LibR/aprutil.lib ../../../../../Release/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Release/subversion/libsvn_client/libsvn_client-1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 "C:\program files\microsoft sdk\lib\shfolder.lib" ws2_32.lib Rpcrt4.lib Mswsock.lib ../../../../../db4-win32\lib\libdb40.lib ../../../../../Release/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Release/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Release/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Release/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Release/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Release/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Release/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Release/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Release/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibR/apr.lib ../../../../../apr-iconv/LibR/apriconv.lib ../../../../../apr-util/LibR/aprutil.lib ../../../../../Release/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Release/subversion/libsvn_client/libsvn_client-1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 ../../../../../db4-win32\lib\libdb40.lib ../../../../../Release/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Release/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Release/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Release/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Release/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Release/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Release/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Release/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Release/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibR/apr.lib ../../../../../apr-iconv/LibR/apriconv.lib ../../../../../apr-util/LibR/aprutil.lib ../../../../../Release/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Release/subversion/libsvn_client/libsvn_client-1.lib shfolder.lib Rpcrt4.lib Mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=createJar
+PostBuild_Cmds=jar cvf ../javahl.jar -C ../cls org/tigris/subversion/javahl
+# End Special Build Tool
!ELSEIF "$(CFG)" == "svnjavahl - Win32 Debug DB40"
@@ -136,8 +151,13 @@
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 Rpcrt4.lib Mswsock.lib ../../../../../db4-win32\lib\libdb41d.lib ../../../../../Debug/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Debug/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Debug/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Debug/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Debug/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Debug/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Debug/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Debug/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibD/apr.lib ../../../../../apr-iconv/LibD/apriconv.lib ../../../../../apr-util/LibD/aprutil.lib ../../../../../Debug/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Debug/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Debug/subversion/libsvn_client/libsvn_client-1.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 "C:\program files\microsoft sdk\lib\shfolder.lib" Rpcrt4.lib Mswsock.lib ../../../../../db4-win32\lib\libdb40d.lib ../../../../../Debug/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Debug/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Debug/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Debug/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Debug/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Debug/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Debug/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Debug/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibD/apr.lib ../../../../../apr-iconv/LibD/apriconv.lib ../../../../../apr-util/LibD/aprutil.lib ../../../../../Debug/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Debug/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Debug/subversion/libsvn_client/libsvn_client-1.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 ../../../../../db4-win32\lib\libdb40d.lib ../../../../../Debug/subversion/libsvn_fs/libsvn_fs-1.lib ../../../../../Debug/subversion/libsvn_repos/libsvn_repos-1.lib ../../../../../Debug/subversion/libsvn_delta/libsvn_delta-1.lib ../../../../../Debug/subversion/libsvn_ra_dav/libsvn_ra_dav-1.lib ../../../../../Debug/subversion/libsvn_ra_svn/libsvn_ra_svn-1.lib ../../../../../Debug/subversion/libsvn_ra_local/libsvn_ra_local-1.lib ../../../../../Debug/subversion/libsvn_ra/libsvn_ra-1.lib ../../../../../Debug/subversion/libsvn_wc/libsvn_wc-1.lib ../../../../../apr/LibD/apr.lib ../../../../../apr-iconv/LibD/apriconv.lib ../../../../../apr-util/LibD/aprutil.lib ../../../../../Debug/subversion/libsvn_subr/libsvn_subr-1.lib ../../../../../Debug/subversion/libsvn_diff/libsvn_diff-1.lib ../../../../../Debug/subversion/libsvn_client/libsvn_client-1.lib shfolder.lib Rpcrt4.lib Mswsock.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=createJar
+PostBuild_Cmds=jar cvf javahl.jar -C ../cls .
+# End Special Build Tool
!ENDIF
Index: native/org_tigris_subversion_javahl_SVNClient.cpp
===================================================================
--- native/org_tigris_subversion_javahl_SVNClient.cpp (revision 6771)
+++ native/org_tigris_subversion_javahl_SVNClient.cpp (working copy)
@@ -332,7 +332,7 @@
* Signature: (Ljava/lang/String;Ljava/lang/String;Z)V
*/
JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_remove
- (JNIEnv *env, jobject jthis, jstring jpath, jstring jmessage, jboolean jforce)
+ (JNIEnv* env, jobject jthis, jobjectArray jtargets, jstring jmessage, jboolean jforce)
{
JNIEntry(SVNClient, remove);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -341,17 +341,13 @@
JNIUtil::throwError("bad c++ this");
return;
}
- JNIStringHolder path(jpath);
- if(JNIUtil::isExceptionThrown())
- {
- return;
- }
+ Targets targets(jtargets);
JNIStringHolder message(jmessage);
if(JNIUtil::isExceptionThrown())
{
return;
}
- cl->remove(path, message, jforce ? true : false);
+ cl->remove(targets, message, jforce ? true : false);
}
/*
@@ -534,7 +530,7 @@
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_mkdir
- (JNIEnv* env, jobject jthis, jstring jpath, jstring jmessage)
+ (JNIEnv* env, jobject jthis, jobjectArray jtargets, jstring jmessage)
{
JNIEntry(SVNClient, mkdir);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -543,17 +539,13 @@
JNIUtil::throwError("bad c++ this");
return;
}
- JNIStringHolder path(jpath);
- if(JNIUtil::isExceptionThrown())
- {
- return;
- }
+ Targets targets(jtargets);
JNIStringHolder message(jmessage);
if(JNIUtil::isExceptionThrown())
{
return;
}
- cl->mkdir(path, message);
+ cl->mkdir(targets, message);
}
/*
@@ -608,7 +600,7 @@
* Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/tigris/subversion/javahl/Revision;)V
*/
JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_doExport
- (JNIEnv* env, jobject jthis, jstring jsrcPath, jstring jdestPath, jobject jrevision)
+ (JNIEnv* env, jobject jthis, jstring jsrcPath, jstring jdestPath, jobject jrevision,jboolean jforce)
{
JNIEntry(SVNClient, doExport);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -632,7 +624,7 @@
{
return;
}
- cl->doExport(srcPath, destPath, revision);
+ cl->doExport(srcPath, destPath, revision, jforce ? true : false);
}
/*
@@ -674,7 +666,7 @@
* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
*/
JNIEXPORT void JNICALL Java_org_tigris_subversion_javahl_SVNClient_doImport
- (JNIEnv* env, jobject jthis, jstring jpath, jstring jurl, jstring jnewEntry, jstring jmessage, jboolean jrecurse)
+ (JNIEnv* env, jobject jthis, jstring jpath, jstring jurl, jstring jmessage, jboolean jrecurse)
{
JNIEntry(SVNClient, doImport);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -693,17 +685,12 @@
{
return;
}
- JNIStringHolder newEntry(jnewEntry);
- if(JNIUtil::isExceptionThrown())
- {
- return;
- }
JNIStringHolder message(jmessage);
if(JNIUtil::isExceptionThrown())
{
return;
}
- cl->doImport(path, url, newEntry, message, jrecurse ? true : false);
+ cl->doImport(path, url, message, jrecurse ? true : false);
}
/*
@@ -899,6 +886,7 @@
cl->propertyCreate(path, name, value, jrecurse ? true:false);
}
+
/*
* Class: org_tigris_subversion_javahl_SVNClient
* Method: propertyCreate
@@ -965,6 +953,34 @@
}
/*
* Class: org_tigris_subversion_javahl_SVNClient
+ * Method: propertyGet
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)Lorg/tigris/subversion/javahl/PropertyData;
+ */
+JNIEXPORT jobject JNICALL Java_org_tigris_subversion_javahl_SVNClient_propertyGet
+ (JNIEnv *env, jobject jthis, jstring jpath, jstring jname)
+{
+ JNIEntry(SVNClient, propertyGet);
+ SVNClient *cl = SVNClient::getCppObject(jthis);
+ if(cl == NULL)
+ {
+ JNIUtil::throwError("bad c++ this");
+ return NULL;
+ }
+ JNIStringHolder path(jpath);
+ if(JNIUtil::isExceptionThrown())
+ {
+ return NULL;
+ }
+ JNIStringHolder name(jname);
+ if(JNIUtil::isExceptionThrown())
+ {
+ return NULL;
+ }
+ return cl->propertyGet(jthis, path, name);
+}
+
+ /*
+ * Class: org_tigris_subversion_javahl_SVNClient
* Method: fileContent
* Signature: (Ljava/lang/String;Lorg/tigris/subversion/javahl/Revision;)[B
*/
Index: native/SVNClient.h
===================================================================
--- native/SVNClient.h (revision 6771)
+++ native/SVNClient.h (working copy)
@@ -38,8 +38,6 @@
class SVNClient
{
public:
- jobject revProperty(jobject jthis, const char *path, const char *name, Revision &rev);
- jobjectArray list(const char *url, Revision &revision, bool force);
jbyteArray fileContent(const char *path, Revision &revision);
void propertyCreate(const char *path, const char *name, JNIByteArray &value, bool recurse);
void propertyCreate(const char *path, const char *name, const char *value, bool recurse);
@@ -48,19 +46,19 @@
void propertySet(const char *path, const char *name, const char *value, bool recurse);
jobjectArray properties(jobject jthis, const char *path);
void merge(const char *path1, Revision &revision1, const char *path2, Revision &revision2,const char *localPath, bool force, bool recurse);
- void doImport(const char *path, const char *url, const char *newEntry, const char *message, bool recurse);
+ void doImport(const char *path, const char *url, const char *message, bool recurse);
void doSwitch(const char *path, const char *url, Revision &revision, bool recurse);
- void doExport(const char *srcPath, const char *destPath, Revision &revision);
+ void doExport(const char *srcPath, const char *destPath, Revision &revision, bool force);
void resolved(const char *path, bool recurse);
void cleanup(const char *path);
- void mkdir(const char *path, const char *message);
+ void mkdir(Targets &targets, const char *message);
void move(const char *srcPath, const char *destPath, const char *message, Revision &revision, bool force);
void copy(const char *srcPath, const char *destPath, const char *message, Revision &revision);
jlong commit(Targets &targets, const char *message, bool recurse);
void update(const char *path, Revision &revision, bool recurse);
void add(const char *path, bool recurse);
void revert(const char *path, bool recurse);
- void remove(const char *path, const char *message, bool force);
+ void remove(Targets &targets, const char *message,bool force);
void notification(Notify *notify);
void checkout(const char *moduleName, const char *destPath, Revision &revision, bool recurse);
jobjectArray logMessages(const char *path, Revision &revisionStart, Revision &revisionEnd);
@@ -69,6 +67,9 @@
void username(const char *username);
jobject singleStatus(const char *path, bool onServer);
jobjectArray status(const char *path, bool descend, bool onServer);
+ jobjectArray list(const char *url, Revision &revision, bool recurse);
+ jobject revProperty(jobject jthis, const char *path, const char *name, Revision &rev);
+ jobject propertyGet(jobject jthis, const char *path, const char *name);
const char * getLastPath();
void finalize();
void dispose(jobject jthis);
Index: native/JNIUtil.cpp
===================================================================
--- native/JNIUtil.cpp (revision 6771)
+++ native/JNIUtil.cpp (working copy)
@@ -100,11 +100,11 @@
/* Create our top-level pool. */
g_pool = svn_pool_create (NULL);
- svn_error *err = svn_config_ensure (g_pool);
+ svn_error *err = svn_config_ensure (NULL, g_pool); // we use the default directory for config files
if (err)
{
svn_pool_destroy (g_pool);
- handleSVNError(err, 0);
+ handleSVNError(err);
return false;
}
@@ -159,14 +159,14 @@
env->DeleteLocalRef(clazz);
}
-void JNIUtil::handleSVNError(svn_error *err, const char *message)
+void JNIUtil::handleSVNError(svn_error *err)
{
JNIEnv *env = getEnv();
jclass clazz = env->FindClass(JAVA_PACKAGE"/ClientException");
if(getLogLevel() >= exceptionLog)
{
JNICriticalSection cs(*g_logMutex);
- g_logStream << "Error SVN exception thrown message:<" << (message ? message : "#")<< "> description:<";
+ g_logStream << "Error SVN exception thrown message:<";
g_logStream << err->message << "> file:<" << err->file << "> apr-err:<" << err->apr_err;
g_logStream << ">" << std::endl;
}
@@ -178,15 +178,10 @@
std::string buffer;
assembleErrorMessage(err, 0, APR_SUCCESS, buffer);
jstring jmessage = makeJString(buffer.c_str());
- jstring jdescription = NULL;
if(isJavaExceptionThrown())
{
return;
}
- if(message)
- {
- jdescription = makeJString(message);
- }
if(isJavaExceptionThrown())
{
return;
@@ -196,12 +191,12 @@
{
return;
}
- jmethodID mid = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V");
+ jmethodID mid = env->GetMethodID(clazz, "<init>", "(Ljava/lang/String;Ljava/lang/String;I)V");
if(isJavaExceptionThrown())
{
return;
}
- jobject error = env->NewObject(clazz, mid, jmessage, jdescription, jfile, static_cast<jint>(err->apr_err));
+ jobject error = env->NewObject(clazz, mid, jmessage, jfile, static_cast<jint>(err->apr_err));
if(isJavaExceptionThrown())
{
return;
@@ -216,11 +211,6 @@
{
return;
}
- env->DeleteLocalRef(jdescription);
- if(isJavaExceptionThrown())
- {
- return;
- }
env->DeleteLocalRef(jfile);
if(isJavaExceptionThrown())
{
Index: src/org/tigris/subversion/javahl/DirEntry.java
===================================================================
--- src/org/tigris/subversion/javahl/DirEntry.java (revision 6771)
+++ src/org/tigris/subversion/javahl/DirEntry.java (working copy)
@@ -66,9 +66,9 @@
/**
* @return revision
*/
- public long getLastChangedRevision()
+ public Revision.Number getLastChangedRevision()
{
- return lastChangedRevision;
+ return new Revision.Number(lastChangedRevision);
}
public boolean getHasProps()
Index: src/org/tigris/subversion/javahl/Status.java
===================================================================
--- src/org/tigris/subversion/javahl/Status.java (revision 6771)
+++ src/org/tigris/subversion/javahl/Status.java (working copy)
@@ -16,191 +16,241 @@
* @endcopyright
*/
package org.tigris.subversion.javahl;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Date;
-
/**
* Subversion status API.
+ * @author Patrick Mayweg
+ * @author Cédric Chabanois
+ * <a href="mailto:cchabanois@ifrance.com">cchabanois@ifrance.com</a>
*/
public class Status
{
- Status(String p, boolean id, long r, long lc, String lca, int tt, int pt, boolean iv,
- boolean il, boolean ic, int rtt, int rpt, String coo, String con, String cow, String ur, String urcf, long recf)
+ private String url; // url in repository
+ private String path;
+ private int nodeKind; // node kind (file, dir, ...)
+ private long revision; // base revision
+ private long lastChangedRevision;// last revision this was changed
+ private long lastChangedDate; // last date this was changed
+ private String lastCommitAuthor; // last commit author of this item
+ private int textStatus;
+ private int propStatus;
+ private boolean locked;
+ private boolean copied; // in a copied state
+ private int repositoryTextStatus;
+ private int repositoryPropStatus;
+ private String conflictNew; // new version of conflicted file
+ private String conflictOld; // old version of conflicted file
+ private String conflictWorking; // working version of conflicted file
+
+
+
+ public Status(String path, String url, int nodeKind, long revision,
+ long lastChangedRevision, long lastChangedDate, String lastCommitAuthor,
+ int textStatus, int propStatus,
+ int repositoryTextStatus, int repositoryPropStatus,
+ boolean locked, boolean copied,
+ String conflictOld, String conflictNew, String conflictWorking)
{
- pa = p;
- idi = id;
- re = r;
- lch = lc;
- lcoa = lca;
- tty = tt;
- pty = pt;
- ive = iv;
- ilo = il;
- ico = ic;
- rtty = rtt;
- rpty = rpt;
- co = coo;
- cn = con;
- cw = cow;
- u = ur;
- ucf = urcf;
- rcf = recf;
+ this.path = path;
+ this.url = url;
+ this.nodeKind = nodeKind;
+ this.revision = revision;
+ this.lastChangedRevision = lastChangedRevision;
+ this.lastChangedDate = lastChangedDate;
+ this.lastCommitAuthor = lastCommitAuthor;
+ this.textStatus = textStatus;
+ this.propStatus = propStatus;
+ this.locked = locked;
+ this.copied = copied;
+ this.repositoryTextStatus = repositoryTextStatus;
+ this.repositoryPropStatus = repositoryPropStatus;
+ this.conflictOld = conflictOld;
+ this.conflictNew = conflictNew;
+ this.conflictWorking = conflictWorking;
}
- private String pa;
- private boolean idi;
- private long re;
- private long lch;
- private String lcoa;
- private int tty;
- private int pty;
- private boolean ive;
- private boolean ilo;
- private boolean ico;
- private int rtty;
- private int rpty;
- private String cn;
- private String co;
- private String cw;
- private String u;
- private String ucf;
- private long rcf;
+
/**
* @return path of status entry
*/
- public String path()
+ public String getPath()
{
- return pa;
+ return path;
}
+
/**
- * @return true if entry is a dir
- */
- public boolean isDir()
- {
- return idi;
- }
- /**
* @return revision if versioned, otherwise SVN_INVALID_REVNUM
*/
- public long revision()
+ public Revision.Number getRevision()
{
- return re;
+ return new Revision.Number(revision);
}
/**
- * Returns the last time the file was changed revision number.
+ * @return the last time the file was changed revision number.
+ * or null if not available
*/
- public long lastChanged()
+ public Date getLastChangedDate()
{
- return lch;
+ if (lastChangedDate == 0)
+ return null;
+ else
+ return new Date(lastChangedDate/1000);
}
/**
* @return name of author if versioned, NULL otherwise
*/
- public String lastCommitAuthor()
+ public String getLastCommitAuthor()
{
- return lcoa;
+ return lastCommitAuthor;
}
+
/**
- * @return file status of the "textual" component.
+ * @return file status property enum of the "textual" component.
*/
- public String textDescription()
+ public int getTextStatus()
{
- return Kind.getDescription(tty);
+ return textStatus;
}
+
/**
- * @return file status property enum of the "textual" component.
+ * @return file status property enum of the "property" component.
*/
- public int textType()
+ public int getPropStatus()
{
- return tty;
+ return propStatus;
}
+
/**
- * @return textual file status of the "property" component.
+ * @return file status property enum of the "textual" component im the repository.
*/
- public String propDescription()
+ public int getRepositoryTextStatus()
{
- return Kind.getDescription(pty);
+ return repositoryTextStatus;
}
+
/**
- * @return file status property enum of the "property" component.
+ * @return file status property enum of the "property" component im the repository.
*/
- public int propType()
+ public int getRepositoryPropStatus()
{
- return pty;
+ return repositoryPropStatus;
}
+
/**
- * @return file status of the "textual" component im the repository.
+ * @return true if locked
*/
- public String repositoryTextDescription()
+ public boolean isLocked()
{
- return Kind.getDescription(rtty);
+ return locked;
}
/**
- * @return file status property enum of the "textual" component im the repository.
+ * @return true if copied
*/
- public int repositoryTextType()
+ public boolean isCopied()
{
- return rtty;
+ return copied;
}
+ public String getConflictNew()
+ {
+ return conflictNew;
+ }
+ public String getConflictOld()
+ {
+ return conflictOld;
+ }
+ public String getConflictWorking()
+ {
+ return conflictWorking;
+ }
+
/**
- * @return textual file status of the "property" component im the repository.
+ * @return url in repository or null if not known
*/
- public String repositoryPropDescription()
+ public URL getUrl() {
+ if (url == null)
+ return null;
+ else
{
- return Kind.getDescription(rpty);
+ try {
+ return new URL(url);
+ } catch (MalformedURLException e)
+ {
+ return null;
+ }
}
+ }
+
+
/**
- * @return file status property enum of the "property" component im the repository.
+ * @return last changed revision
*/
- public int repositoryPropType()
- {
- return rpty;
+ public Revision.Number getLastChangedRevision() {
+ return new Revision.Number(lastChangedRevision);
}
+
/**
- * @return true if under version control
+ * @return the node kind
*/
- public boolean isVersioned()
- {
- return ive;
+ public int getNodeKind() {
+ return nodeKind;
}
+
/**
- * @return true if locked
+ * tells if is managed by svn (added, normal, modified ...)
+ * @return
*/
- public boolean isLocked()
- {
- return ilo;
+ public boolean isManaged() {
+ int textStatus = getTextStatus();
+ return ((textStatus != Status.Kind.unversioned) &&
+ (textStatus != Status.Kind.none) &&
+ (textStatus != Status.Kind.ignored));
}
+
/**
- * @return true if copied
+ * tells if the resource has a remote counter-part
+ * @return
*/
- public boolean isCopied()
- {
- return ico;
+ public boolean hasRemote() {
+ int textStatus = getTextStatus();
+ return ((isManaged()) && (textStatus != Status.Kind.added));
}
- public String conflictNew()
- {
- return cn;
+
+ public boolean isAdded() {
+ int textStatus = getTextStatus();
+ return textStatus == Status.Kind.added;
}
- public String conflictOld()
- {
- return co;
+
+ public boolean isDeleted() {
+ int textStatus = getTextStatus();
+ return textStatus == Status.Kind.deleted;
}
- public String conflictWorking()
- {
- return cw;
+
+ public boolean isMerged() {
+ int textStatus = getTextStatus();
+ return textStatus == Status.Kind.merged;
}
- public String url()
- {
- return u;
+
+ public boolean isIgnored() {
+ int textStatus = getTextStatus();
+ return textStatus == Status.Kind.ignored;
}
- public String urlCopiedFrom()
- {
- return ucf;
+
+
+
+ /**
+ * tells if it is modified
+ * @return
+ */
+ public boolean isModified() {
+ int textStatus = getTextStatus();
+ return textStatus == Status.Kind.modified;
}
- public long revisionCopiedFrom()
- {
- return rcf;
- }
+
+
public static final class Kind
{
/** does not exist */
@@ -236,6 +286,12 @@
/** an unversioned resource is in the way of the versioned resource */
public static final int obstructed = 10;
+ /** a resource marked as ignored */
+ public static final int ignored = 11;
+
+ /** a directory doesn't contain a complete entries list */
+ public static final int incomplete = 12;
+
public static final String getDescription(int kind)
{
switch (kind)
@@ -258,10 +314,17 @@
return "merged";
case conflicted:
return "conflicted";
+ case ignored:
+ return "ignored";
+ case incomplete:
+ return "incomplete";
case unversioned:
default:
return "unversioned";
}
}
}
+
+
}
+
Index: src/org/tigris/subversion/javahl/SVNClient.java
===================================================================
--- src/org/tigris/subversion/javahl/SVNClient.java (revision 6771)
+++ src/org/tigris/subversion/javahl/SVNClient.java (working copy)
@@ -59,22 +59,24 @@
*/
public native String getLastPath();
/**
+ * List directory entries of a URL.
*
+ * @param path Path to explore.
+ * @param descend Recurse into subdirectories if existant.
+ * @return Array of Status entries.
+ */
+ public native Status[]status(String path, boolean descend, boolean onServer) throws ClientException;
+
+ /**
+ *
* @param url
* @param revision
* @param recurse
* @return
*/
public native DirEntry[]list(String url, Revision revision, boolean recurse) throws ClientException;
+
/**
- * Enumerates all files/dirs at a given path.
- *
- * @param path Path to explore.
- * @param descend Recurse into subdirectories if existant.
- * @return Array of Status entries.
- */
- public native Status[]status(String path, boolean descend, boolean onServer) throws ClientException;
- /**
* Returns the status of a single file in the path.
*
* @param path File to gather status.
@@ -127,7 +129,7 @@
* Sets a file for deletion.
* @exception ClientException
*/
- public native void remove(String path, String message, boolean force)throws ClientException;
+ public native void remove(String[] path, String message, boolean force)throws ClientException;
/**
* Reverts a file to a pristine state.
* @exception ClientException
@@ -168,7 +170,7 @@
* Moves or renames a file.
* @exception ClientException
*/
- public native void move(String srcPath, String destPath, String Message, Revision revision, boolean force) throws ClientException;
+ public native void move(String srcPath, String destPath, String message, Revision revision, boolean force) throws ClientException;
/**
* Creates a directory directly in a repository or creates a
* directory on disk and schedules it for addition. If <i>path</i>
@@ -176,7 +178,7 @@
* @param message log message.
* @exception ClientException
*/
- public native void mkdir(String path, String message) throws ClientException;
+ public native void mkdir(String[] path, String message) throws ClientException;
/**
* Recursively cleans up a local directory, finishing any
* incomplete operations, removing lockfiles, etc.
@@ -196,7 +198,7 @@
* @exception ClientException
* @param destPath a destination path that must not already exist.
*/
- public native void doExport(String srcPath, String destPath, Revision revision) throws ClientException;
+ public native void doExport(String srcPath, String destPath, Revision revision,boolean force) throws ClientException;
/**
* Update local copy to mirror a new url. This excapsulates the
* svn_client_switch() client method.
@@ -207,11 +209,9 @@
* Import file or directory PATH into repository directory URL at
* head. This usually requires authentication, see Auth.
* @param message log message.
- * @param newEntry new directory in which the contents of <i>path</i> are
- * imported.
* @exception ClientException
*/
- public native void doImport(String path, String url, String newEntry, String message, boolean recurse) throws ClientException;
+ public native void doImport(String path, String url, String message, boolean recurse) throws ClientException;
/**
* Merge changes from two paths into a new local path.
* @exception ClientException
@@ -228,6 +228,12 @@
public native void propertyCreate(String path, String name, byte[] value, boolean recurse) throws ClientException;
public native PropertyData revProperty(String path, String name, Revision rev) throws ClientException;
+ /**
+ * get the given property
+ */
+ public native PropertyData propertyGet(String path, String name) throws ClientException;
+
+
public native byte[] fileContent(String path, Revision revision) throws ClientException;
public static native void enableLogging(int logLevel, String logFilePath);
public static native String version();
Index: src/org/tigris/subversion/javahl/LogMessage.java
===================================================================
--- src/org/tigris/subversion/javahl/LogMessage.java (revision 6771)
+++ src/org/tigris/subversion/javahl/LogMessage.java (working copy)
@@ -43,9 +43,9 @@
return date;
}
- public long getRevision()
+ public Revision.Number getRevision()
{
- return revision;
+ return new Revision.Number(revision);
}
public String getAuthor()
Index: src/org/tigris/subversion/javahl/ClientException.java
===================================================================
--- src/org/tigris/subversion/javahl/ClientException.java (revision 6771)
+++ src/org/tigris/subversion/javahl/ClientException.java (working copy)
@@ -25,49 +25,42 @@
{
/**
* The constructor is only used by the native library.
- * @param m message
- * @param d description
- * @param s source
- * @param a APR error code
+ * @param message message
+ * @param source source
+ * @param aprError APR error code
*/
- ClientException(String m, String d, String s, int a)
+ ClientException(String message, String source, int aprError)
{
- super(m);
- de = d;
- so = s;
- ap = a;
+ super(message);
+ this.source = source;
+ this.aprError = aprError;
}
/**
- * the error message
+ * the exception message
*/
- private String de;
+ private String message;
+
/**
* the error source
*/
- private String so;
+ private String source;
/**
* the APR error id
*/
- private int ap;
+ private int aprError;
+
/**
- * Returns the error message.
- */
- public String getDescription()
- {
- return de;
- }
- /**
* Returns the error source.
*/
public String getSource()
{
- return so;
+ return source;
}
/**
* Returns the APR error id.
*/
public int getAprError()
{
- return ap;
+ return aprError;
}
}
Index: src/org/tigris/subversion/javahl/Revision.java
===================================================================
--- src/org/tigris/subversion/javahl/Revision.java (revision 6771)
+++ src/org/tigris/subversion/javahl/Revision.java (working copy)
@@ -17,7 +17,9 @@
*/
package org.tigris.subversion.javahl;
+import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.Locale;
/**
* Class to specify a revision in a svn command.
@@ -38,29 +40,29 @@
public String toString()
{
- switch (revKind)
- {
- case Kind.unspecified:
- return "start revision";
- case Kind.committed:
- return "last commited revision";
- case Kind.previous:
- return "previous commited revision";
- case Kind.base:
- return "base of working revision";
- case Kind.working:
- return "working revision";
- case Kind.head:
- return "head revision";
- default:
- return "bad revision";
+ switch(revKind) {
+ case Kind.base : return "BASE";
+ case Kind.committed : return "COMMITTED";
+ case Kind.head : return "HEAD";
+ case Kind.previous : return "PREV";
+ case Kind.working : return "WORKING";
}
+ return super.toString();
}
+ public boolean equals(Object target) {
+ if (this == target)
+ return true;
+ if (!(target instanceof Revision))
+ return false;
+
+ return ((Revision)target).revKind == revKind;
+ }
+
public static final Revision HEAD = new Revision(Kind.head);
public static final Revision START = new Revision(Kind.unspecified);
public static final Revision COMMITTED = new Revision(Kind.committed);
- public static final Revision PREVISIOUS = new Revision(Kind.previous);
+ public static final Revision PREVIOUS = new Revision(Kind.previous);
public static final Revision BASE = new Revision(Kind.base);
public static final Revision WORKING = new Revision(Kind.working);
public static final int SVN_INVALID_REVNUM = -1;
@@ -80,31 +82,44 @@
return revNumber;
}
- public String toString()
- {
- return "Revision number " + revNumber;
+ public String toString() {
+ return Long.toString(revNumber);
}
+
+ public boolean equals(Object target) {
+ if (!super.equals(target))
+ return false;
+
+ return ((Revision.Number)target).revNumber == revNumber;
+ }
}
public static class DateSpec extends Revision
{
protected Date revDate;
-
public DateSpec(Date date)
{
super(Kind.date);
revDate = date;
}
-
public Date getDate()
{
return revDate;
}
- public String toString()
- {
- return "Revision date " + revDate.toString();
+ public String toString() {
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US);
+ return '{'+dateFormat.format(revDate)+'}';
}
+
+ public boolean equals(Object target) {
+ if (!super.equals(target))
+ return false;
+
+ return ((Revision.DateSpec)target).revDate.equals(revDate);
+ }
+
}
/** Various ways of specifying revisions.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
_____________________________________________________________________
Envie de discuter en "live" avec vos amis ? Tilicharger MSN Messenger
http://www.ifrance.com/_reloc/m la 1hre messagerie instantanie de France
Received on Mon Aug 18 19:21:59 2003