Index: subversion/bindings/javahl/native/ListCallback.h
===================================================================
--- subversion/bindings/javahl/native/ListCallback.h	(revision 0)
+++ subversion/bindings/javahl/native/ListCallback.h	(revision 0)
@@ -0,0 +1,68 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Copyright (c) 2007 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ListCallback.h
+ * @brief Interface of the class ListCallback
+ */
+
+#if !defined(AFX_LISTCALLBACK_H__3BBF3F0F_C80C_45C9_8AC3_E1AF07E5B810__INCLUDED_)
+#define AFX_LISTCALLBACK_H__3BBF3F0F_C80C_45C9_8AC3_E1AF07E5B810__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include <jni.h>
+#include "svn_client.h"
+
+/**
+ * This class holds a Java callback object, which will receive every
+ * directory entry for which the callback information is requested.
+ */
+class ListCallback
+{
+public:
+  ListCallback(jobject jcallback);
+  ~ListCallback();
+
+  static svn_error_t *callback(void *baton,
+                               const char *path,
+                               const svn_dirent_t *dirent,
+                               const svn_lock_t *lock,
+                               const char *abs_path,
+                               apr_pool_t *pool);
+
+protected:
+  svn_error_t *doList(const char *path,
+                      const svn_dirent_t *dirent,
+                      const svn_lock_t *lock,
+                      const char *abs_path,
+                      apr_pool_t *pool);
+
+private:
+  /**
+   * This a local reference to the Java object.
+   */
+  jobject m_callback;
+
+  jobject createJavaDirEntry(const char *path,
+                             const char *absPath,
+                             const svn_dirent_t *dirent);
+};
+
+// !defined(AFX_LISTCALLBACK_H__3BBF3F0F_C80C_45C9_8AC3_E1AF07E5B810__INCLUDED_)
+#endif
Index: subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp
===================================================================
--- subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp	(revision 24688)
+++ subversion/bindings/javahl/native/org_tigris_subversion_javahl_SVNClient.cpp	(working copy)
@@ -40,6 +40,7 @@
 #include "LogMessageCallback.h"
 #include "InfoCallback.h"
 #include "StatusCallback.h"
+#include "ListCallback.h"
 #include "svn_version.h"
 #include "svn_private_config.h"
 #include "version.h"
@@ -126,29 +127,32 @@
   return JNIUtil::makeJString(ret);
 }
 
-JNIEXPORT jobjectArray JNICALL
+JNIEXPORT void JNICALL
 Java_org_tigris_subversion_javahl_SVNClient_list
 (JNIEnv *env, jobject jthis, jstring jurl, jobject jrevision,
- jobject jpegRevision, jboolean jrecurse)
+ jobject jpegRevision, jint jdepth, jboolean jfetchLocks,
+ jobject jcallback)
 {
   JNIEntry(SVNClient, list);
   SVNClient *cl = SVNClient::getCppObject(jthis);
   if (cl == NULL)
-    return NULL;
+    return;
 
   JNIStringHolder url(jurl);
   if (JNIUtil::isExceptionThrown())
-    return NULL;
+    return;
 
   Revision revision(jrevision);
   if (JNIUtil::isExceptionThrown())
-    return NULL;
+    return;
 
   Revision pegRevision(jpegRevision);
   if (JNIUtil::isExceptionThrown())
-    return NULL;
+    return;
 
-  return cl->list(url, revision, pegRevision, jrecurse ? true:false);
+  ListCallback callback(jcallback);
+  cl->list(url, revision, pegRevision, (svn_depth_t)jdepth,
+           jfetchLocks ? true : false, &callback);
 }
 
 JNIEXPORT void JNICALL
Index: subversion/bindings/javahl/native/SVNClient.h
===================================================================
--- subversion/bindings/javahl/native/SVNClient.h	(revision 24688)
+++ subversion/bindings/javahl/native/SVNClient.h	(working copy)
@@ -42,6 +42,7 @@
 class ProplistCallback;
 class LogMessageCallback;
 class InfoCallback;
+class ListCallback;
 class StatusCallback;
 class CommitMessage;
 #include "svn_client.h"
@@ -139,8 +140,8 @@
   void status(const char *path, svn_depth_t depth, bool onServer,
               bool getAll, bool noIgnore, bool ignoreExternals,
               StatusCallback *callback);
-  jobjectArray list(const char *url, Revision &revision,
-                    Revision &pegRevision, bool recurse);
+  void list(const char *url, Revision &revision, Revision &pegRevision,
+            svn_depth_t depth, bool fetchLocks, ListCallback *callback);
   jobject revProperty(jobject jthis, const char *path, const char *name,
                       Revision &rev);
   void setRevProperty(jobject jthis, const char *path, const char *name,
@@ -179,7 +180,6 @@
                    svn_revnum_t baseRevisionForURL);
   jobject createJavaProperty(jobject jthis, const char *path,
                              const char *name, svn_string_t *value);
-  jobject createJavaDirEntry(const char *path, svn_dirent_t *dirent);
   svn_client_ctx_t *getContext(const char *message);
   svn_stream_t *createReadStream(apr_pool_t *pool, const char *path,
                                  Revision &revision, Revision &pegRevision,
Index: subversion/bindings/javahl/native/SVNClient.cpp
===================================================================
--- subversion/bindings/javahl/native/SVNClient.cpp	(revision 24688)
+++ subversion/bindings/javahl/native/SVNClient.cpp	(working copy)
@@ -35,6 +35,7 @@
 #include "LogMessageCallback.h"
 #include "InfoCallback.h"
 #include "StatusCallback.h"
+#include "ListCallback.h"
 #include "JNIByteArray.h"
 #include "CommitMessage.h"
 #include "EnumMapper.h"
@@ -118,63 +119,29 @@
 /**
  * List directory entries of a URL.
  */
-jobjectArray SVNClient::list(const char *url, Revision &revision,
-                             Revision &pegRevision, bool recurse)
+void SVNClient::list(const char *url, Revision &revision,
+                             Revision &pegRevision, svn_depth_t depth,
+                             bool fetchLocks, ListCallback *callback)
 {
     Pool requestPool;
     svn_client_ctx_t *ctx = getContext(NULL);
     if (ctx == NULL)
-        return NULL;
+        return;
 
-    SVN_JNI_NULL_PTR_EX(url, "path or url", NULL);
+    SVN_JNI_NULL_PTR_EX(url, "path or url", );
 
     Path urlPath(url);
-    SVN_JNI_ERR(urlPath.error_occured(), NULL);
+    SVN_JNI_ERR(urlPath.error_occured(), );
 
-    apr_hash_t *dirents;
-    SVN_JNI_ERR(svn_client_ls3(&dirents, NULL, urlPath.c_str(),
-                               pegRevision.revision(),
-                               revision.revision(),
-                               recurse, ctx, requestPool.pool()),
-                NULL);
-
-    apr_array_header_t *array =
-        svn_sort__hash(dirents, svn_sort_compare_items_as_paths,
-                       requestPool.pool());
-
-    // create the array of DirEntry
-    JNIEnv *env = JNIUtil::getEnv();
-    jclass clazz = env->FindClass(JAVA_PACKAGE"/DirEntry");
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    jobjectArray ret = env->NewObjectArray(array->nelts, clazz, NULL);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    env->DeleteLocalRef(clazz);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    for (int i = 0; i < array->nelts; ++i)
-    {
-        const svn_sort__item_t *item;
-        svn_dirent_t *dirent = NULL;
-
-        item = &APR_ARRAY_IDX(array, i, const svn_sort__item_t);
-        dirent = (svn_dirent_t *) item->value;
-
-        jobject obj = createJavaDirEntry((const char *)item->key, dirent);
-        env->SetObjectArrayElement(ret, i, obj);
-        if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
-
-        env->DeleteLocalRef(obj);
-        if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
-    }
-
-    return ret;
+    SVN_JNI_ERR(svn_client_list2(urlPath.c_str(),
+                                 pegRevision.revision(),
+                                 revision.revision(),
+                                 depth,
+                                 SVN_DIRENT_ALL,
+                                 fetchLocks,
+                                 ListCallback::callback,
+                                 callback,
+                                 ctx, requestPool.pool()), );
 }
 
 void
@@ -1369,65 +1336,6 @@
     return read_stream;
 }
 
-
-/**
- * Create a DirEntry Java object from the svn_dirent_t structure.
- */
-jobject SVNClient::createJavaDirEntry(const char *path, svn_dirent_t *dirent)
-{
-    JNIEnv *env = JNIUtil::getEnv();
-    jclass clazz = env->FindClass(JAVA_PACKAGE"/DirEntry");
-    if (JNIUtil::isJavaExceptionThrown())
-    {
-        return NULL;
-    }
-    static jmethodID mid = 0;
-    if (mid == 0)
-    {
-        mid = env->GetMethodID(clazz, "<init>",
-                               "(Ljava/lang/String;IJZJJLjava/lang/String;)V");
-        if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
-
-    }
-
-    jstring jPath = JNIUtil::makeJString(path);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    jint jNodeKind = EnumMapper::mapNodeKind(dirent->kind);
-    jlong jSize = dirent->size;
-    jboolean jHasProps = (dirent->has_props? JNI_TRUE : JNI_FALSE);
-    jlong jLastChangedRevision = dirent->created_rev;
-    jlong jLastChanged = dirent->time;
-    jstring jLastAuthor = JNIUtil::makeJString(dirent->last_author);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    jobject ret = env->NewObject(clazz, mid, jPath, jNodeKind, jSize,
-                                 jHasProps, jLastChangedRevision,
-                                 jLastChanged, jLastAuthor);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    env->DeleteLocalRef(clazz);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    env->DeleteLocalRef(jPath);
-    if (JNIUtil::isJavaExceptionThrown())
-        return NULL;
-
-    if (jLastAuthor != NULL)
-    {
-        env->DeleteLocalRef(jLastAuthor);
-        if (JNIUtil::isJavaExceptionThrown())
-            return NULL;
-    }
-
-    return ret;
-}
-
 jobject SVNClient::revProperty(jobject jthis, const char *path,
                                const char *name, Revision &rev)
 {
Index: subversion/bindings/javahl/native/ListCallback.cpp
===================================================================
--- subversion/bindings/javahl/native/ListCallback.cpp	(revision 0)
+++ subversion/bindings/javahl/native/ListCallback.cpp	(revision 0)
@@ -0,0 +1,165 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Copyright (c) 2007 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file ListCallback.cpp
+ * @brief Implementation of the class ListCallback
+ */
+
+#include "ListCallback.h"
+#include "EnumMapper.h"
+#include "JNIUtil.h"
+#include "svn_time.h"
+/**
+ * Create a ListCallback object
+ * @param jcallback the Java callback object.
+ */
+ListCallback::ListCallback(jobject jcallback)
+{
+  m_callback = jcallback;
+}
+/**
+ * Destroy a ListCallback object
+ */
+ListCallback::~ListCallback()
+{
+  // the m_callback does not need to be destroyed, because it is the passed
+  // in parameter to the Java SVNClient.list method.
+}
+
+svn_error_t *
+ListCallback::callback(void *baton,
+                       const char *path,
+                       const svn_dirent_t *dirent,
+                       const svn_lock_t *lock,
+                       const char *abs_path,
+                       apr_pool_t *pool)
+{
+  if (baton)
+    return ((ListCallback *)baton)->doList(path, dirent, lock, abs_path,
+                                           pool);
+
+  return SVN_NO_ERROR;
+}
+
+/**
+ * Callback called for each directory entry.
+ */
+svn_error_t *
+ListCallback::doList(const char *path,
+                     const svn_dirent_t *dirent,
+                     const svn_lock_t *lock,
+                     const char *abs_path,
+                     apr_pool_t *pool)
+{
+  JNIEnv *env = JNIUtil::getEnv();
+
+  static jmethodID mid = 0; // the method id will not change during
+                            // the time this library is loaded, so
+                            // it can be cached.
+  if (mid == 0)
+    {
+      jclass clazz = env->FindClass(JAVA_PACKAGE"/ListCallback");
+      if (JNIUtil::isJavaExceptionThrown())
+        return SVN_NO_ERROR;
+
+      mid = env->GetMethodID(clazz, "doEntry",
+                             "(L"JAVA_PACKAGE"/DirEntry;)V");
+      if (JNIUtil::isJavaExceptionThrown() || mid == 0)
+        return SVN_NO_ERROR;
+
+      env->DeleteLocalRef(clazz);
+      if (JNIUtil::isJavaExceptionThrown())
+        return SVN_NO_ERROR;
+    }
+
+  // convert the parameters to their Java relatives
+  jobject jdirentry = createJavaDirEntry(path, abs_path, dirent);
+
+  // call the Java method
+  env->CallVoidMethod(m_callback, mid, jdirentry);
+  if (JNIUtil::isJavaExceptionThrown())
+    return SVN_NO_ERROR;
+
+  // cleanup the temporary Java objects
+  env->DeleteLocalRef(jdirentry);
+  // No need to check for exception here, because we'll just return anyway
+
+  return SVN_NO_ERROR;
+}
+
+/**
+ * Create a DirEntry Java object from the svn_dirent_t structure.
+ */
+jobject
+ListCallback::createJavaDirEntry(const char *path, const char *absPath,
+                                 const svn_dirent_t *dirent)
+{
+  JNIEnv *env = JNIUtil::getEnv();
+  jclass clazz = env->FindClass(JAVA_PACKAGE"/DirEntry");
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  static jmethodID mid = 0;
+  if (mid == 0)
+    {
+      mid = env->GetMethodID(clazz, "<init>",
+                               "(Ljava/lang/String;Ljava/lang/String;"
+                               "IJZJJLjava/lang/String;)V");
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  jstring jPath = JNIUtil::makeJString(path);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  jstring jAbsPath = JNIUtil::makeJString(absPath);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  jint jNodeKind = EnumMapper::mapNodeKind(dirent->kind);
+  jlong jSize = dirent->size;
+  jboolean jHasProps = (dirent->has_props? JNI_TRUE : JNI_FALSE);
+  jlong jLastChangedRevision = dirent->created_rev;
+  jlong jLastChanged = dirent->time;
+  jstring jLastAuthor = JNIUtil::makeJString(dirent->last_author);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  jobject ret = env->NewObject(clazz, mid, jPath, jAbsPath, jNodeKind,
+                               jSize, jHasProps, jLastChangedRevision,
+                               jLastChanged, jLastAuthor);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  env->DeleteLocalRef(clazz);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  env->DeleteLocalRef(jPath);
+  if (JNIUtil::isJavaExceptionThrown())
+    return NULL;
+
+  if (jLastAuthor != NULL)
+    {
+      env->DeleteLocalRef(jLastAuthor);
+      if (JNIUtil::isJavaExceptionThrown())
+        return NULL;
+    }
+
+  return ret;
+}
Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
===================================================================
--- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java	(revision 24688)
+++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java	(working copy)
@@ -144,6 +144,20 @@
             throws ClientException;
 
     /**
+     * Lists the directory entries of an url on the server.
+     * @param url       the url to list
+     * @param revision  the revision to list
+     * @param pegRevision the revision to interpret url
+     * @param depth     the depth to recurse into subdirectories
+     * @param fetchLocks whether to fetch lock information
+     * @param callback  the callback to receive the directory entries
+     * @since 1.5
+     */
+    void list(String url, Revision revision, Revision pegRevision,
+              int depth, boolean fetchLocks, ListCallback callback)
+            throws ClientException;
+
+    /**
      * Returns the status of a single file in the path.
      *
      * @param path      File to gather status.
Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/DirEntry.java
===================================================================
--- subversion/bindings/javahl/src/org/tigris/subversion/javahl/DirEntry.java	(revision 24688)
+++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/DirEntry.java	(working copy)
@@ -1,7 +1,7 @@
 /**
  * @copyright
  * ====================================================================
- * Copyright (c) 2003-2004 CollabNet.  All rights reserved.
+ * Copyright (c) 2003-2007 CollabNet.  All rights reserved.
  *
  * This software is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
@@ -59,10 +59,15 @@
      * the pathname of the entry
      */
     private String path;
+    /**
+     * the absolute path of the entry
+     */
+    private String absPath;
 
     /**
      * this constructor is only called from the JNI code
      * @param path                  the pathname of the entry
+     * @param absPath               the absolute path of the entry
      * @param nodeKind              the kind of entry (file or directory)
      * @param size                  the size of the file
      * @param hasProps              if the entry has properties managed by
@@ -71,10 +76,12 @@
      * @param lastChanged           the date of the last change
      * @param lastAuthor            the author of the last change
      */
-    DirEntry(String path, int nodeKind, long size, boolean hasProps,
-             long lastChangedRevision, long lastChanged, String lastAuthor)
+    DirEntry(String path, String absPath, int nodeKind, long size,
+             boolean hasProps, long lastChangedRevision, long lastChanged,
+             String lastAuthor)
     {
         this.path = path;
+        this.absPath = absPath;
         this.nodeKind = nodeKind;
         this.size = size;
         this.hasProps = hasProps;
@@ -93,6 +100,15 @@
     }
 
     /**
+     * Returns the absolute path of the entry.
+     * @return the absolute path of the entry.
+     */
+    public String getAbsPath()
+    {
+        return absPath;
+    }
+
+    /**
      * Returns the last time the file was changed.
      * @return the last time the file was changed.
      */
@@ -156,6 +172,14 @@
     }
 
     /**
+     * Set the path.  This should only be used by compatibility wrapper.
+     */
+    public void setPath(String path)
+    {
+        this.path = path;
+    }
+
+    /**
      * @return The path at its last changed revision.
      */
     public String toString()
Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
===================================================================
--- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java	(revision 24688)
+++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java	(working copy)
@@ -300,8 +300,31 @@
      * @return Array of DirEntry objects.
      * @since 1.2
      */
-    public native DirEntry[] list(String url, Revision revision,
+    public DirEntry[] list(String url, Revision revision,
                                   Revision pegRevision, boolean recurse)
+            throws ClientException
+    {
+        MyListCallback callback = new MyListCallback();
+
+        list(url, revision, pegRevision,
+             recurse ? Depth.infinity : Depth.immediates, false, callback);
+
+        return callback.getDirEntryArray();
+    }
+
+    /**
+     * Lists the directory entries of an url on the server.
+     * @param url       the url to list
+     * @param revision  the revision to list
+     * @param pegRevision the revision to interpret url
+     * @param depth     the depth to recurse into subdirectories
+     * @param fetchLocks whether to fetch lock information
+     * @param callback  the callback to receive the directory entries
+     * @since 1.5
+     */
+    public native void list(String url, Revision revision,
+                            Revision pegRevision, int depth,
+                            boolean fetchLocks, ListCallback callback)
             throws ClientException;
 
     /**
@@ -1915,4 +1938,46 @@
             return (Status[]) statuses.toArray(new Status[statuses.size()]);
         }
     }
+
+    /**
+     * A private list callback implementation used by thin wrappers.
+     * Instances of this class are not thread-safe.
+     */
+    private class MyListCallback implements ListCallback
+    {
+        private List dirents = new ArrayList();
+
+        public void doEntry(DirEntry dirent)
+        {
+            // All of this is meant to retain backward compatibility with
+            // the old svn_client_ls-style API.  For further information about
+            // what is going on here, see the comments in
+            // libsvn_client/list.c:store_dirent().
+
+            if (dirent.getPath().length() == 0)
+            {
+                if (dirent.getNodeKind() == NodeKind.file)
+                {
+                    String absPath = dirent.getAbsPath();
+                    int lastSeparator = absPath.lastIndexOf('/');
+                    String path = absPath.substring(lastSeparator,
+                                                    absPath.length());
+                    dirent.setPath(path);
+                }
+                else
+                {
+                    // It's the requested directory, which we don't want
+                    // to add.
+                    return;
+                }
+            }
+
+            dirents.add(dirent);
+        }
+
+        public DirEntry[] getDirEntryArray()
+        {
+            return (DirEntry[]) dirents.toArray(new DirEntry[dirents.size()]);
+        }
+    }
 }
Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java
===================================================================
--- subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java	(revision 24688)
+++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientSynchronized.java	(working copy)
@@ -232,6 +232,28 @@
     }
 
     /**
+     * Lists the directory entries of an url on the server.
+     * @param url       the url to list
+     * @param revision  the revision to list
+     * @param pegRevision the revision to interpret url
+     * @param depth     the depth to recurse into subdirectories
+     * @param fetchLocks whether to fetch lock information
+     * @param callback  the callback to receive the directory entries
+     * @since 1.5
+     */
+    public void list(String url, Revision revision, Revision pegRevision,
+                     int depth, boolean fetchLocks,
+                     ListCallback callback)
+            throws ClientException
+    {
+        synchronized (clazz)
+        {
+            worker.list(url, revision, pegRevision, depth, fetchLocks,
+                        callback);
+        }
+    }
+
+    /**
      * Returns the status of a single file in the path.
      *
      * @param path      File to gather status.
Index: subversion/bindings/javahl/src/org/tigris/subversion/javahl/ListCallback.java
===================================================================
--- subversion/bindings/javahl/src/org/tigris/subversion/javahl/ListCallback.java	(revision 0)
+++ subversion/bindings/javahl/src/org/tigris/subversion/javahl/ListCallback.java	(revision 0)
@@ -0,0 +1,32 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Copyright (c) 2007 CollabNet.  All rights reserved.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at http://subversion.tigris.org/license-1.html.
+ * If newer versions of this license are posted there, you may use a
+ * newer version instead, at your option.
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals.  For exact contribution history, see the revision
+ * history and logs, available at http://subversion.tigris.org/.
+ * ====================================================================
+ * @endcopyright
+ */
+package org.tigris.subversion.javahl;
+
+import java.util.Date;
+
+/**
+ * This interface is used to receive every single line for a file on a
+ * the SVNClientInterface.blame call.
+ */
+public interface ListCallback
+{
+    /**
+     * This method will be called for each directory entry.
+     */
+    public void doEntry(DirEntry dirent);
+}


