Author: brane
Date: Mon Mar 31 14:26:40 2014
New Revision: 1583335

URL: http://svn.apache.org/r1583335
Log:
On the remote-only-status branch: Update implementation to match description.

* subversion/include/svn_client.h
  (svn_client_status6): Rename parameter ignore_local_mods to
   check_working_copy, inverting the semantics of the value.
   Update all uses to the new semantics of the parameter.
* subversion/include/private/svn_wc_private.h
  (svn_wc__get_status_editor): Likewise.
* subversion/libsvn_client/status.c
  (do_external_status, svn_client_status6): Likewise.
* subversion/svn/status-cmd.c
  (svn_cl__status): Likewise.

* subversion/libsvn_wc/status.c:
   Apply the ignore_local_mods -> check_working_copy change.
  (read_base_node_info): Removed.
  (get_dir_status): Account for all status info in the wc-db, but ignore
   locally added files.
  (internal_status): Likewise.

* subversion/tests/libsvn_client/client-test.c
  (test_remote_only_status): Update test case.

[in subversion/bindings/javahl]
* native/SVNClient.h, native/SVNClient.cpp (SVNClient::status):
   Rename parameter ignoreLocal to onDisk, in line with the core API change.
* native/org_apache_subversion_javahl_SVNClient.cpp
  (Java_org_apache_subversion_javahl_SVNClient_status): Likewise.
* src/org/apache/subversion/javahl/ISVNClient.java
  (ISVNClient.status): Likewise.
* src/org/apache/subversion/javahl/SVNClient.java
  (ISVNClient.status): Likewise, and fix deprecated wrapper.

* tests/org/apache/subversion/javahl/BasicTests.java:
   Update all uses of ISVNClient.status().

Modified:
    
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.cpp
    
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.h
    
subversion/branches/remote-only-status/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
    
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
    
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
    
subversion/branches/remote-only-status/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
    
subversion/branches/remote-only-status/subversion/include/private/svn_wc_private.h
    subversion/branches/remote-only-status/subversion/include/svn_client.h
    subversion/branches/remote-only-status/subversion/libsvn_client/status.c
    subversion/branches/remote-only-status/subversion/libsvn_wc/status.c
    subversion/branches/remote-only-status/subversion/svn/status-cmd.c
    
subversion/branches/remote-only-status/subversion/tests/libsvn_client/client-test.c
    subversion/branches/remote-only-status/subversion/tests/svn_test.h
    subversion/branches/remote-only-status/subversion/tests/svn_test_main.c

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.cpp?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.cpp
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.cpp
 Mon Mar 31 14:26:40 2014
@@ -187,7 +187,7 @@ void SVNClient::list(const char *url, Re
 
 void
 SVNClient::status(const char *path, svn_depth_t depth,
-                  bool onServer, bool ignoreLocal, bool getAll,
+                  bool onServer, bool onDisk, bool getAll,
                   bool noIgnore, bool ignoreExternals,
                   bool depthAsSticky, StringArray &changelists,
                   StatusCallback *callback)
@@ -210,7 +210,7 @@ SVNClient::status(const char *path, svn_
 
     SVN_JNI_ERR(svn_client_status6(&youngest, ctx, checkedPath.c_str(),
                                    &rev, depth,
-                                   getAll, onServer, ignoreLocal,
+                                   getAll, onServer, onDisk,
                                    noIgnore, ignoreExternals, depthAsSticky,
                                    changelists.array(subPool),
                                    StatusCallback::callback, callback,

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.h?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.h
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/SVNClient.h
 Mon Mar 31 14:26:40 2014
@@ -170,7 +170,7 @@ class SVNClient :public SVNBase
   void getChangelists(const char *path, StringArray *changelists,
                       svn_depth_t depth, ChangelistCallback *callback);
   void status(const char *path, svn_depth_t depth,
-              bool onServer, bool ignoreLocal, bool getAll,
+              bool onServer, bool onDisk, bool getAll,
               bool noIgnore, bool ignoreExternals,
               bool depthAsSticky, StringArray &changelists,
               StatusCallback *callback);

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
 Mon Mar 31 14:26:40 2014
@@ -184,7 +184,7 @@ Java_org_apache_subversion_javahl_SVNCli
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_status
 (JNIEnv *env, jobject jthis, jstring jpath, jobject jdepth,
- jboolean jonServer, jboolean jignoreLocal, jboolean jgetAll,
+ jboolean jonServer, jboolean jonDisk, jboolean jgetAll,
  jboolean jnoIgnore, jboolean jignoreExternals,
  jboolean jdepthAsSticky, jobject jchangelists,
  jobject jstatusCallback)
@@ -204,7 +204,7 @@ Java_org_apache_subversion_javahl_SVNCli
 
   StatusCallback callback(jstatusCallback);
   cl->status(path, EnumMapper::toDepth(jdepth),
-             bool(jonServer), bool(jignoreLocal), bool(jgetAll),
+             bool(jonServer), bool(jonDisk), bool(jgetAll),
              bool(jnoIgnore), bool(jignoreExternals),
              bool(jdepthAsSticky), changelists, &callback);
 }

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
 Mon Mar 31 14:26:40 2014
@@ -84,8 +84,10 @@ public interface ISVNClient
      * @param path        Path to explore.
      * @param depth       How deep to recurse into subdirectories.
      * @param onServer    Request status information from server.
-     * @param ignoreLocal Ignore local modifications; only used when
-     *                    <code>onServer</code> is set.
+     * @param onDisk       Check the working copy for modified or missing
+     *                    items. A value of <code>false</code> only
+     *                    has effect when <code>onServer</code> is
+     *                    <code>true</code>.
      * @param getAll      get status for uninteresting (unchanged) files.
      * @param noIgnore    get status for normaly ignored files and directories.
      * @param ignoreExternals if externals are ignored during status
@@ -106,7 +108,7 @@ public interface ISVNClient
      * maybe repository.
      * <p>
      * Behaves like the 1.9 version with
-     *     <code>ignoreLocal = * false</code> and
+     *     <code>onDisk = true</code> and
      *     <code>depthAsSticky = false</code>.
      * @deprecated
      */

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
 Mon Mar 31 14:26:40 2014
@@ -122,7 +122,7 @@ public class SVNClient implements ISVNCl
     public native String getLastPath();
 
     public native void status(String path, Depth depth,
-                              boolean onServer, boolean ignoreLocal,
+                              boolean onServer, boolean onDisk,
                               boolean getAll, boolean noIgnore,
                               boolean ignoreExternals, boolean depthAsSticky,
                               Collection<String> changelists,
@@ -137,7 +137,7 @@ public class SVNClient implements ISVNCl
                        StatusCallback callback)
             throws ClientException
     {
-        status(path, depth, onServer, false, getAll, noIgnore,
+        status(path, depth, onServer, true, getAll, noIgnore,
                ignoreExternals, false, changelists, callback);
     }
 

Modified: 
subversion/branches/remote-only-status/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 (original)
+++ 
subversion/branches/remote-only-status/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
 Mon Mar 31 14:26:40 2014
@@ -316,7 +316,7 @@ public class BasicTests extends SVNTests
 
         MyStatusCallback statusCallback = new MyStatusCallback();
         client.status(fileToSVNPath(fileC, false), Depth.unknown,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
 
         final int statusCount = statusCallback.getStatusArray().length;
@@ -402,7 +402,7 @@ public class BasicTests extends SVNTests
 
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/D/G/rho", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long rhoCommitDate = status.getLastChangedDate().getTime();
@@ -440,7 +440,7 @@ public class BasicTests extends SVNTests
                 + "modification to tau");
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/D/G/tau", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long tauCommitDate = status.getLastChangedDate().getTime();
@@ -470,7 +470,7 @@ public class BasicTests extends SVNTests
         thisTest.getWc().addItem("A/B/I", null);
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/B/I", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long ICommitDate = status.getLastChangedDate().getTime();
@@ -506,7 +506,7 @@ public class BasicTests extends SVNTests
         thisTest.getWc().addItem("A/D/H/nu", "This is the file 'nu'.");
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/D/H/nu", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long nuCommitDate = status.getLastChangedDate().getTime();
@@ -524,7 +524,7 @@ public class BasicTests extends SVNTests
         thisTest.getWc().setItemWorkingCopyRevision("A/B/F", rev);
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/B/F", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long FCommitDate = status.getLastChangedDate().getTime();
@@ -556,7 +556,7 @@ public class BasicTests extends SVNTests
                                  "This is the replacement file 'chi'.");
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/D/H/chi", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long chiCommitDate = status.getLastChangedDate().getTime();
@@ -608,7 +608,7 @@ public class BasicTests extends SVNTests
         assertEquals("wrong revision number from commit", rev, expectedRev++);
         statusCallback = new MyStatusCallback();
         client.status(thisTest.getWCPath() + "/A/D/H/psi", Depth.immediates,
-                      false, false, true, false, false, false,
+                      false, true, true, false, false, false,
                       null, statusCallback);
         status = statusCallback.getStatusArray()[0];
         long psiCommitDate = status.getLastChangedDate().getTime();
@@ -1084,7 +1084,7 @@ public class BasicTests extends SVNTests
         MyStatusCallback statusCallback = new MyStatusCallback();
         String statusPath = fileToSVNPath(new File(thisTest.getWCPath() + 
"/A/B"), true);
         client.status(statusPath, Depth.infinity,
-                      false, false, false, false, true, false,
+                      false, true, false, false, true, false,
                       null, statusCallback);
         Status[] statusList = statusCallback.getStatusArray();
         assertEquals(statusPath + "/F/alpha",
@@ -2355,7 +2355,7 @@ public class BasicTests extends SVNTests
         // Does status report this changelist?
         MyStatusCallback statusCallback = new MyStatusCallback();
         client.status(path, Depth.immediates,
-                      false, false, false, false, false, false,
+                      false, true, false, false, false, false,
                       null, statusCallback);
         Status[] status = statusCallback.getStatusArray();
         assertEquals(status[0].getChangelist(), changelistName);

Modified: 
subversion/branches/remote-only-status/subversion/include/private/svn_wc_private.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/include/private/svn_wc_private.h?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/include/private/svn_wc_private.h
 (original)
+++ 
subversion/branches/remote-only-status/subversion/include/private/svn_wc_private.h
 Mon Mar 31 14:26:40 2014
@@ -1322,9 +1322,8 @@ svn_wc__resolve_relative_external_url(co
  *     If the given @a depth is incompatible with the depth found in a
  *     working copy directory, the found depth always governs.
  *
- * If @a ignore_local_mods is set, local modifications will be ignored
- * and only the difference between the @c BASE version and the remote
- * repository will be reported.
+ * If @a check_working_copy is not set, do not scan the working copy
+ * for locally modified and missing files.
  * ### TODO: describe interaction with @a get_all.
  *
  * If @a no_ignore is set, statuses that would typically be ignored
@@ -1361,7 +1360,7 @@ svn_wc__get_status_editor(const svn_delt
                           const char *target_basename,
                           svn_depth_t depth,
                           svn_boolean_t get_all,
-                          svn_boolean_t ignore_local_mods,
+                          svn_boolean_t check_working_copy,
                           svn_boolean_t no_ignore,
                           svn_boolean_t depth_as_sticky,
                           svn_boolean_t server_performs_filtering,

Modified: subversion/branches/remote-only-status/subversion/include/svn_client.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/include/svn_client.h?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/include/svn_client.h 
(original)
+++ subversion/branches/remote-only-status/subversion/include/svn_client.h Mon 
Mar 31 14:26:40 2014
@@ -2509,9 +2509,9 @@ typedef svn_error_t *(*svn_client_status
  *      *result_rev is not meaningful unless @a check_out_of_date is
  *      set).
  *
- *    - If @a ignore_local_mods is set, do not take local
- *      modifications into account. This parameter will be ignored
- *      unless @a check_out_of_date is also set.
+ *    - If @a check_working_copy is not set, do not scan the working
+ *      copy for locally modified and missing files. This parameter
+ *      will be ignored unless @a check_out_of_date is set.
  *
  * If @a no_ignore is @c FALSE, don't report any file or directory (or
  * recurse into any directory) that is found by recursion (as opposed to
@@ -2551,8 +2551,8 @@ svn_client_status6(svn_revnum_t *result_
                    const svn_opt_revision_t *revision,
                    svn_depth_t depth,
                    svn_boolean_t get_all,
-                   svn_boolean_t check_out_of_date, /* RENAMED FROM: 'update' 
*/
-                   svn_boolean_t ignore_local_mods, /* NEW */
+                   svn_boolean_t check_out_of_date,
+                   svn_boolean_t check_working_copy,
                    svn_boolean_t no_ignore,
                    svn_boolean_t ignore_externals,
                    svn_boolean_t depth_as_sticky,
@@ -2564,7 +2564,7 @@ svn_client_status6(svn_revnum_t *result_
 
 /**
  * Same as svn_client_status6(), but with @a check_out_of_date set to
- * @a update and @a ignore_local_mods set to @c FALSE.
+ * @a update and @a check_working_copy set to @c TRUE.
  *
  * @since New in 1.7.
  * @deprecated Provided for backward compatibility with the 1.8 API.

Modified: 
subversion/branches/remote-only-status/subversion/libsvn_client/status.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/libsvn_client/status.c?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/libsvn_client/status.c 
(original)
+++ subversion/branches/remote-only-status/subversion/libsvn_client/status.c 
Mon Mar 31 14:26:40 2014
@@ -248,7 +248,7 @@ do_external_status(svn_client_ctx_t *ctx
                    svn_depth_t depth,
                    svn_boolean_t get_all,
                    svn_boolean_t check_out_of_date,
-                   svn_boolean_t ignore_local_mods,
+                   svn_boolean_t check_working_copy,
                    svn_boolean_t no_ignore,
                    const apr_array_header_t *changelists,
                    const char *anchor_abspath,
@@ -318,7 +318,7 @@ do_external_status(svn_client_ctx_t *ctx
       /* And then do the status. */
       SVN_ERR(svn_client_status6(NULL, ctx, status_path, &opt_rev, depth,
                                  get_all, check_out_of_date,
-                                 ignore_local_mods, no_ignore,
+                                 check_working_copy, no_ignore,
                                  FALSE /* ignore_exernals */,
                                  FALSE /* depth_as_sticky */,
                                  changelists, status_func, status_baton,
@@ -342,7 +342,7 @@ svn_client_status6(svn_revnum_t *result_
                    svn_depth_t depth,
                    svn_boolean_t get_all,
                    svn_boolean_t check_out_of_date,
-                   svn_boolean_t ignore_local_mods,
+                   svn_boolean_t check_working_copy,
                    svn_boolean_t no_ignore,
                    svn_boolean_t ignore_externals,
                    svn_boolean_t depth_as_sticky,
@@ -359,6 +359,9 @@ svn_client_status6(svn_revnum_t *result_
   svn_error_t *err;
   apr_hash_t *changelist_hash = NULL;
 
+  if (!check_out_of_date)
+    check_working_copy = TRUE;
+
   if (svn_path_is_url(path))
     return svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
                              _("'%s' is not a local path"), path);
@@ -477,7 +480,7 @@ svn_client_status6(svn_revnum_t *result_
       SVN_ERR(svn_wc__get_status_editor(&editor, &edit_baton, &set_locks_baton,
                                         &edit_revision, ctx->wc_ctx,
                                         dir_abspath, target_basename,
-                                        depth, get_all, ignore_local_mods,
+                                        depth, get_all, check_working_copy,
                                         no_ignore, depth_as_sticky,
                                         server_supports_depth,
                                         ignores, tweak_status, &sb,
@@ -617,7 +620,7 @@ svn_client_status6(svn_revnum_t *result_
 
       SVN_ERR(do_external_status(ctx, external_map,
                                  depth, get_all,
-                                 check_out_of_date, ignore_local_mods,
+                                 check_out_of_date, check_working_copy,
                                  no_ignore, changelists,
                                  sb.anchor_abspath, sb.anchor_relpath,
                                  status_func, status_baton, pool));

Modified: subversion/branches/remote-only-status/subversion/libsvn_wc/status.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/libsvn_wc/status.c?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/libsvn_wc/status.c 
(original)
+++ subversion/branches/remote-only-status/subversion/libsvn_wc/status.c Mon 
Mar 31 14:26:40 2014
@@ -71,9 +71,8 @@ struct walk_status_baton
   /* Should we ignore text modifications? */
   svn_boolean_t ignore_text_mods;
 
-  /* Ignore all local modifications; only check for differences
-     between the BASE tree and the repository. */
-  svn_boolean_t ignore_local_mods;
+  /* Scan the working copy for local modifications and missing nodes. */
+  svn_boolean_t check_working_copy;
 
   /* Externals info harvested during the status run. */
   apr_hash_t *externals;
@@ -339,7 +338,7 @@ static svn_error_t *
 internal_status(svn_wc_status3_t **status,
                 svn_wc__db_t *db,
                 const char *local_abspath,
-                svn_boolean_t ignore_local_mods,
+                svn_boolean_t check_working_copy,
                 apr_pool_t *result_pool,
                 apr_pool_t *scratch_pool);
 
@@ -357,7 +356,8 @@ internal_status(svn_wc_status3_t **statu
    *STATUS will be set to NULL.  If GET_ALL is non-zero, then *STATUS will be
    allocated and returned no matter what.  If IGNORE_TEXT_MODS is TRUE then
    don't check for text mods, assume there are none and set and *STATUS
-   returned to reflect that assumption.
+   returned to reflect that assumption. If CHECK_WORKING_COPY is FALSE,
+   do not adjust the result for missing working copy files.
 
    The status struct's repos_lock field will be set to REPOS_LOCK.
 */
@@ -372,7 +372,7 @@ assemble_status(svn_wc_status3_t **statu
                 const svn_io_dirent2_t *dirent,
                 svn_boolean_t get_all,
                 svn_boolean_t ignore_text_mods,
-                svn_boolean_t ignore_local_mods,
+                svn_boolean_t check_working_copy,
                 const svn_lock_t *repos_lock,
                 apr_pool_t *result_pool,
                 apr_pool_t *scratch_pool)
@@ -430,7 +430,7 @@ assemble_status(svn_wc_status3_t **statu
             copied = TRUE; /* Working deletion */
         }
     }
-  else if (!ignore_local_mods)
+  else if (check_working_copy)
     {
       /* Examine whether our target is missing or obstructed. To detect
        * obstructions, we have to look at the on-disk status in DIRENT. */
@@ -826,7 +826,7 @@ send_status_structure(const struct walk_
                           parent_repos_root_url, parent_repos_relpath,
                           parent_repos_uuid,
                           info, dirent, get_all,
-                          wb->ignore_text_mods, wb->ignore_local_mods,
+                          wb->ignore_text_mods, wb->check_working_copy,
                           repos_lock, scratch_pool, scratch_pool));
 
   if (statstruct && status_func)
@@ -1183,51 +1183,6 @@ one_child_status(const struct walk_statu
   return SVN_NO_ERROR;
 }
 
-/*
- */
-static svn_error_t *
-read_base_node_info(const struct svn_wc__db_info_t **info,
-                    svn_wc__db_t *db,
-                    const char *local_abspath,
-                    apr_pool_t *result_pool,
-                    apr_pool_t *scratch_pool)
-{
-  svn_depth_t depth;
-  const svn_checksum_t *checksum;
-  struct svn_wc__db_info_t *bi = apr_pcalloc(scratch_pool, sizeof(*bi));
-
-  SVN_ERR(svn_wc__db_base_get_info(&bi->status,
-                                   &bi->kind,
-                                   &bi->revnum,
-                                   &bi->repos_relpath,
-                                   &bi->repos_root_url,
-                                   &bi->repos_uuid,
-                                   &bi->changed_rev,
-                                   &bi->changed_date,
-                                   &bi->changed_author,
-                                   &depth, &checksum,
-                                   NULL /* target */,
-                                   &bi->lock,
-                                   &bi->had_props,
-                                   NULL /* props */,
-                                   NULL /* update_root */,
-                                   db, local_abspath,
-                                   result_pool, scratch_pool));
-  if (bi->kind != svn_node_dir)
-    bi->depth = svn_depth_unknown;
-  else
-    bi->depth = depth;
-  if (bi->kind == svn_node_file && checksum != NULL)
-    bi->has_checksum = TRUE;
-  else
-    bi->has_checksum = FALSE;
-  bi->have_base = TRUE;
-
-  *info = bi;
-  return SVN_NO_ERROR;
-}
-
-
 /* Send svn_wc_status3_t * structures for the directory LOCAL_ABSPATH and
    for all its child nodes (according to DEPTH) through STATUS_FUNC /
    STATUS_BATON.
@@ -1285,7 +1240,7 @@ get_dir_status(const struct walk_status_
 
   iterpool = svn_pool_create(scratch_pool);
 
-  if (!wb->ignore_local_mods)
+  if (wb->check_working_copy)
     {
       err = svn_io_get_dirents3(&dirents, local_abspath, FALSE, scratch_pool,
                                 iterpool);
@@ -1303,14 +1258,8 @@ get_dir_status(const struct walk_status_
     dirents = apr_hash_make(scratch_pool);
 
   if (!dir_info)
-    {
-      if (!wb->ignore_local_mods)
-        SVN_ERR(svn_wc__db_read_single_info(&dir_info, wb->db, local_abspath,
-                                            scratch_pool, iterpool));
-      else
-        SVN_ERR(read_base_node_info(&dir_info, wb->db, local_abspath,
-                                    scratch_pool, iterpool));
-    }
+    SVN_ERR(svn_wc__db_read_single_info(&dir_info, wb->db, local_abspath,
+                                        scratch_pool, iterpool));
 
   SVN_ERR(get_repos_root_url_relpath(&dir_repos_relpath, &dir_repos_root_url,
                                      &dir_repos_uuid, dir_info,
@@ -1322,24 +1271,13 @@ get_dir_status(const struct walk_status_
   /* Create a hash containing all children.  The source hashes
      don't all map the same types, but only the keys of the result
      hash are subsequently used. */
-  if (!wb->ignore_local_mods)
-    {
-      sorted_children = NULL;
-      SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts,
-                                            wb->db, local_abspath,
-                                            scratch_pool, iterpool));
-
-      all_children = apr_hash_overlay(scratch_pool, nodes, dirents);
-      if (apr_hash_count(conflicts) > 0)
-        all_children = apr_hash_overlay(scratch_pool, conflicts, all_children);
-    }
-  else
-    {
-      all_children = NULL;
-      SVN_ERR(svn_wc__db_base_get_children(
-                  (const apr_array_header_t **)&sorted_children,
-                  wb->db, local_abspath, scratch_pool, iterpool));
-    }
+  SVN_ERR(svn_wc__db_read_children_info(&nodes, &conflicts,
+                                        wb->db, local_abspath,
+                                        scratch_pool, iterpool));
+
+  all_children = apr_hash_overlay(scratch_pool, nodes, dirents);
+  if (apr_hash_count(conflicts) > 0)
+    all_children = apr_hash_overlay(scratch_pool, conflicts, all_children);
 
   /* Handle "this-dir" first. */
   if (! skip_this_dir)
@@ -1391,53 +1329,33 @@ get_dir_status(const struct walk_status_
     return SVN_NO_ERROR;
 
   /* Walk all the children of this directory. */
-  if (all_children)
-    sorted_children = svn_sort__hash(all_children,
-                                     svn_sort_compare_items_lexically,
-                                     scratch_pool);
-  else
-    {
-      SVN_ERR_ASSERT(sorted_children != NULL);
-      qsort(sorted_children->elts,
-            sorted_children->nelts,
-            sorted_children->elt_size,
-            svn_sort_compare_paths);
-    }
+  sorted_children = svn_sort__hash(all_children,
+                                   svn_sort_compare_items_lexically,
+                                   scratch_pool);
 
   for (i = 0; i < sorted_children->nelts; i++)
     {
-      svn_boolean_t unversioned_tree_conflicted;
       const char *child_abspath;
       svn_io_dirent2_t *child_dirent;
       const struct svn_wc__db_info_t *child_info;
+      const void *key;
+      apr_ssize_t klen;
+      svn_sort__item_t item;
 
       svn_pool_clear(iterpool);
 
-      if (all_children)
-        {
-          const void *key;
-          apr_ssize_t klen;
-          svn_sort__item_t item;
-
-          item = APR_ARRAY_IDX(sorted_children, i, svn_sort__item_t);
-          key = item.key;
-          klen = item.klen;
-
-          child_abspath = svn_dirent_join(local_abspath, key, iterpool);
-          child_dirent = apr_hash_get(dirents, key, klen);
-          child_info = apr_hash_get(nodes, key, klen);
-          unversioned_tree_conflicted =
-            (apr_hash_get(conflicts, key, klen) != NULL);
-        }
-      else
-        {
-          const char *name = APR_ARRAY_IDX(sorted_children, i, const char*);
-          child_abspath = svn_dirent_join(local_abspath, name, iterpool);
-          child_dirent = NULL;
-          SVN_ERR(read_base_node_info(&child_info, wb->db, child_abspath,
-                                      scratch_pool, iterpool));
-          unversioned_tree_conflicted = FALSE;
-        }
+      item = APR_ARRAY_IDX(sorted_children, i, svn_sort__item_t);
+      key = item.key;
+      klen = item.klen;
+
+      child_abspath = svn_dirent_join(local_abspath, key, iterpool);
+      child_dirent = apr_hash_get(dirents, key, klen);
+      child_info = apr_hash_get(nodes, key, klen);
+
+      /* If this is a remote-only status walk, ignore locally added nodes. */
+      if (!wb->check_working_copy && child_info
+          && child_info->status == svn_wc__db_status_added)
+        continue;
 
       SVN_ERR(one_child_status(wb,
                                child_abspath,
@@ -1447,7 +1365,7 @@ get_dir_status(const struct walk_status_
                                dir_repos_root_url,
                                dir_repos_relpath,
                                dir_repos_uuid,
-                               unversioned_tree_conflicted,
+                               (apr_hash_get(conflicts, key, klen) != NULL),
                                &collected_ignore_patterns,
                                ignore_patterns,
                                depth,
@@ -1602,7 +1520,7 @@ tweak_statushash(void *baton,
                  void *this_dir_baton,
                  svn_boolean_t is_dir_baton,
                  svn_wc__db_t *db,
-                 svn_boolean_t ignore_local_mods,
+                 svn_boolean_t check_working_copy,
                  const char *local_abspath,
                  enum svn_wc_status_kind repos_node_status,
                  enum svn_wc_status_kind repos_text_status,
@@ -1643,7 +1561,7 @@ tweak_statushash(void *baton,
 
       /* Use the public API to get a statstruct, and put it into the hash. */
       SVN_ERR(internal_status(&statstruct, db, local_abspath,
-                              ignore_local_mods, pool, scratch_pool));
+                              check_working_copy, pool, scratch_pool));
       statstruct->repos_lock = repos_lock;
       svn_hash_sets(statushash, apr_pstrdup(pool, local_abspath), statstruct);
     }
@@ -2102,7 +2020,7 @@ delete_entry(const char *path,
      statushash immediately.  No need to wait until close_file or
      close_dir, because there's no risk of having to honor the 'added'
      flag.  We already know this item exists in the working copy. */
-  SVN_ERR(tweak_statushash(db, db, TRUE, eb->db, eb->wb.ignore_local_mods,
+  SVN_ERR(tweak_statushash(db, db, TRUE, eb->db, eb->wb.check_working_copy,
                            local_abspath,
                            svn_wc_status_deleted, 0, 0, revision, NULL, pool));
 
@@ -2111,7 +2029,7 @@ delete_entry(const char *path,
      node).  */
   if (db->parent_baton && (! *eb->target_basename))
     SVN_ERR(tweak_statushash(db->parent_baton, db, TRUE,
-                             eb->db, eb->wb.ignore_local_mods,
+                             eb->db, eb->wb.check_working_copy,
                              db->local_abspath,
                              svn_wc_status_modified, svn_wc_status_modified,
                              0, SVN_INVALID_REVNUM, NULL, pool));
@@ -2236,7 +2154,7 @@ close_directory(void *dir_baton,
           /* ### When we add directory locking, we need to find a
              ### directory lock here. */
           SVN_ERR(tweak_statushash(pb, db, TRUE,
-                                   eb->db,  eb->wb.ignore_local_mods,
+                                   eb->db,  eb->wb.check_working_copy,
                                    db->local_abspath,
                                    repos_node_status, repos_text_status,
                                    repos_prop_status, SVN_INVALID_REVNUM, NULL,
@@ -2489,7 +2407,7 @@ close_file(void *file_baton,
     }
 
   return tweak_statushash(fb, NULL, FALSE, fb->edit_baton->db,
-                          fb->edit_baton->wb.ignore_local_mods,
+                          fb->edit_baton->wb.check_working_copy,
                           fb->local_abspath, repos_node_status,
                           repos_text_status, repos_prop_status,
                           SVN_INVALID_REVNUM, repos_lock, pool);
@@ -2538,7 +2456,7 @@ svn_wc__get_status_editor(const svn_delt
                           const char *target_basename,
                           svn_depth_t depth,
                           svn_boolean_t get_all,
-                          svn_boolean_t ignore_local_mods,
+                          svn_boolean_t check_working_copy,
                           svn_boolean_t no_ignore,
                           svn_boolean_t depth_as_sticky,
                           svn_boolean_t server_performs_filtering,
@@ -2578,8 +2496,8 @@ svn_wc__get_status_editor(const svn_delt
 
   eb->wb.db               = wc_ctx->db;
   eb->wb.target_abspath   = eb->target_abspath;
-  eb->wb.ignore_text_mods = ignore_local_mods;
-  eb->wb.ignore_local_mods = ignore_local_mods;
+  eb->wb.ignore_text_mods = !check_working_copy;
+  eb->wb.check_working_copy = check_working_copy;
   eb->wb.repos_locks      = NULL;
   eb->wb.repos_root       = NULL;
 
@@ -2604,7 +2522,7 @@ svn_wc__get_status_editor(const svn_delt
   /* The edit baton's status structure maps to PATH, and the editor
      have to be aware of whether that is the anchor or the target. */
   SVN_ERR(internal_status(&(eb->anchor_status), wc_ctx->db, anchor_abspath,
-                          ignore_local_mods, result_pool, scratch_pool));
+                          check_working_copy, result_pool, scratch_pool));
 
   /* Construct an editor. */
   tree_editor->set_target_revision = set_target_revision;
@@ -2710,7 +2628,7 @@ svn_wc__internal_walk_status(svn_wc__db_
   wb.db = db;
   wb.target_abspath = local_abspath;
   wb.ignore_text_mods = ignore_text_mods;
-  wb.ignore_local_mods = FALSE;
+  wb.check_working_copy = TRUE;
   wb.repos_root = NULL;
   wb.repos_locks = NULL;
 
@@ -2876,11 +2794,11 @@ static svn_error_t *
 internal_status(svn_wc_status3_t **status,
                 svn_wc__db_t *db,
                 const char *local_abspath,
-                svn_boolean_t ignore_local_mods,
+                svn_boolean_t check_working_copy,
                 apr_pool_t *result_pool,
                 apr_pool_t *scratch_pool)
 {
-  const svn_io_dirent2_t *dirent;
+  const svn_io_dirent2_t *dirent = NULL;
   const char *parent_repos_relpath;
   const char *parent_repos_root_url;
   const char *parent_repos_uuid;
@@ -2890,32 +2808,24 @@ internal_status(svn_wc_status3_t **statu
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
-  if (!ignore_local_mods)
-    {
-      err = svn_wc__db_read_single_info(&info, db, local_abspath,
-                                        scratch_pool, scratch_pool);
-      if (err)
-        {
-          if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
-            return svn_error_trace(err);
-
-          svn_error_clear(err);
-          info = NULL;
+  err = svn_wc__db_read_single_info(&info, db, local_abspath,
+                                    scratch_pool, scratch_pool);
 
-          SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, TRUE,
-                                      scratch_pool, scratch_pool));
-        }
-      else
-        SVN_ERR(stat_wc_dirent_case_sensitive(&dirent, db, local_abspath,
-                                              scratch_pool, scratch_pool));
-    }
-  else
+  if (err)
     {
-      SVN_ERR(read_base_node_info(&info, db, local_abspath,
-                                  scratch_pool, scratch_pool));
-      dirent = NULL;
-    }
+      if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
+        return svn_error_trace(err);
+
+      svn_error_clear(err);
+      info = NULL;
 
+      if (check_working_copy)
+        SVN_ERR(svn_io_stat_dirent2(&dirent, local_abspath, FALSE, TRUE,
+                                    scratch_pool, scratch_pool));
+    }
+  else if (check_working_copy)
+    SVN_ERR(stat_wc_dirent_case_sensitive(&dirent, db, local_abspath,
+                                          scratch_pool, scratch_pool));
 
   if (!info
       || info->kind == svn_node_unknown
@@ -2940,25 +2850,15 @@ internal_status(svn_wc_status3_t **statu
     {
       const char *parent_abspath = svn_dirent_dirname(local_abspath,
                                                       scratch_pool);
-      if (!ignore_local_mods)
-        SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL,
-                                     &parent_repos_relpath,
-                                     &parent_repos_root_url,
-                                     &parent_repos_uuid, NULL, NULL, NULL,
-                                     NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                                     NULL, NULL, NULL, NULL, NULL, NULL, NULL,
-                                     NULL, NULL, NULL, NULL,
-                                     db, parent_abspath,
-                                     result_pool, scratch_pool));
-      else
-        SVN_ERR(svn_wc__db_base_get_info(NULL, NULL, NULL,
-                                         &parent_repos_relpath,
-                                         &parent_repos_root_url,
-                                         &parent_repos_uuid,
-                                         NULL, NULL, NULL, NULL, NULL,
-                                         NULL, NULL, NULL, NULL, NULL,
-                                         db, parent_abspath,
-                                         result_pool, scratch_pool));
+      SVN_ERR(svn_wc__db_read_info(NULL, NULL, NULL,
+                                   &parent_repos_relpath,
+                                   &parent_repos_root_url,
+                                   &parent_repos_uuid, NULL, NULL, NULL,
+                                   NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                   NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                                   NULL, NULL, NULL, NULL,
+                                   db, parent_abspath,
+                                   result_pool, scratch_pool));
     }
   else
     {
@@ -2974,7 +2874,7 @@ internal_status(svn_wc_status3_t **statu
                                          info,
                                          dirent,
                                          TRUE /* get_all */,
-                                         FALSE, ignore_local_mods,
+                                         FALSE, check_working_copy,
                                          NULL /* repos_lock */,
                                          result_pool, scratch_pool));
 }

Modified: subversion/branches/remote-only-status/subversion/svn/status-cmd.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/svn/status-cmd.c?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/svn/status-cmd.c 
(original)
+++ subversion/branches/remote-only-status/subversion/svn/status-cmd.c Mon Mar 
31 14:26:40 2014
@@ -349,7 +349,7 @@ svn_cl__status(apr_getopt_t *os,
                                              opt_state->depth,
                                              opt_state->verbose,
                                              opt_state->update,
-                                             FALSE /* ignore_local_mods */,
+                                             TRUE /* check_working_copy */,
                                              opt_state->no_ignore,
                                              opt_state->ignore_externals,
                                              FALSE /* depth_as_sticky */,

Modified: 
subversion/branches/remote-only-status/subversion/tests/libsvn_client/client-test.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/libsvn_client/client-test.c?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- 
subversion/branches/remote-only-status/subversion/tests/libsvn_client/client-test.c
 (original)
+++ 
subversion/branches/remote-only-status/subversion/tests/libsvn_client/client-test.c
 Mon Mar 31 14:26:40 2014
@@ -852,7 +852,6 @@ status_to_char(enum svn_wc_status_kind s
     }
 }
 
-/* FIXME: temporary */
 static int
 compare_status_paths(const void *a, const void *b)
 {
@@ -875,20 +874,40 @@ remote_only_status_receiver(void *baton,
 static svn_error_t *
 test_remote_only_status(const svn_test_opts_t *opts, apr_pool_t *pool)
 {
+  static const struct remote_only_status_result
+  {
+    const char *relpath;
+    svn_revnum_t revision;
+    enum svn_wc_status_kind node_status;
+    svn_revnum_t ood_changed_rev;
+    enum svn_wc_status_kind repos_node_status;
+  } expected[] = {
+    { ".",        1, svn_wc_status_normal,   2, svn_wc_status_modified },
+    { "B",        1, svn_wc_status_normal,   2, svn_wc_status_none },
+    { "C",        1, svn_wc_status_normal,   2, svn_wc_status_deleted },
+    { "D",        1, svn_wc_status_normal,   2, svn_wc_status_none },
+    { "epsilon", -1, svn_wc_status_none,     2, svn_wc_status_added },
+    { "mu",       1, svn_wc_status_normal,   2, svn_wc_status_modified },
+
+    { NULL }
+  };
+
   const char *repos_url;
   const char *wc_path;
-  const char *zeta_path;
+  const char *local_path;
+  apr_file_t *local_file;
   svn_client_ctx_t *ctx;
   svn_client_mtcc_t *mtcc;
-  apr_array_header_t *results;
   svn_opt_revision_t rev;
   svn_revnum_t result_rev;
-  svn_stream_t *contents = svn_stream_from_string(
-      svn_string_create("modified\n", pool), pool);
+  svn_string_t *contents = svn_string_create("modified\n", pool);
+  svn_stream_t *contentstream = svn_stream_from_string(contents, pool);
+  const struct remote_only_status_result *ex;
   svn_stream_mark_t *start;
+  apr_array_header_t *results;
   int i;
 
-  SVN_ERR(svn_stream_mark(contents, &start, pool));
+  SVN_ERR(svn_stream_mark(contentstream, &start, pool));
 
   /* Create a filesytem and repository containing the Greek tree. */
   SVN_ERR(create_greek_repos(&repos_url, "test-remote-only-status", opts, 
pool));
@@ -897,14 +916,21 @@ test_remote_only_status(const svn_test_o
 
   /* Make some modifications in the repository, creating revision 2. */
   SVN_ERR(svn_client_mtcc_create(&mtcc, repos_url, -1, ctx, pool, pool));
-  SVN_ERR(svn_stream_seek(contents, start));
-  SVN_ERR(svn_client_mtcc_add_update_file("iota",
-                                          contents, NULL, NULL, NULL,
+  SVN_ERR(svn_stream_seek(contentstream, start));
+  SVN_ERR(svn_client_mtcc_add_add_file("A/epsilon", contentstream, NULL,
+                                       mtcc, pool));
+  SVN_ERR(svn_stream_seek(contentstream, start));
+  SVN_ERR(svn_client_mtcc_add_update_file("A/mu",
+                                          contentstream, NULL, NULL, NULL,
                                           mtcc, pool));
-  SVN_ERR(svn_stream_seek(contents, start));
+  SVN_ERR(svn_stream_seek(contentstream, start));
+  SVN_ERR(svn_client_mtcc_add_add_file("A/D/epsilon", contentstream, NULL,
+                                       mtcc, pool));
+  SVN_ERR(svn_stream_seek(contentstream, start));
   SVN_ERR(svn_client_mtcc_add_update_file("A/B/lambda",
-                                          contents, NULL, NULL, NULL,
+                                          contentstream, NULL, NULL, NULL,
                                           mtcc, pool));
+  SVN_ERR(svn_client_mtcc_add_delete("A/C", mtcc, pool));
   SVN_ERR(svn_client_mtcc_commit(NULL, NULL, NULL, mtcc, pool));
 
   /* Check out a sparse root @r1 of the repository */
@@ -914,31 +940,48 @@ test_remote_only_status(const svn_test_o
 
   rev.kind = svn_opt_revision_number;
   rev.value.number = 1;
-  SVN_ERR(svn_client_checkout3(NULL, repos_url, wc_path,
-                               &rev, &rev, svn_depth_immediates,
+  SVN_ERR(svn_client_checkout3(NULL,
+                               apr_pstrcat(pool, repos_url, "/A", SVN_VA_NULL),
+                               wc_path, &rev, &rev, svn_depth_immediates,
                                FALSE, FALSE, ctx, pool));
 
   /* Add a local file; this is a double-check to make sure that
      remote-only status ignores local changes. */
-  zeta_path = svn_dirent_join(wc_path, "zeta", pool);
-  SVN_ERR(svn_io_file_create_empty(zeta_path, pool));
-  SVN_ERR(svn_client_add5(zeta_path, svn_depth_unknown,
+  local_path = svn_dirent_join(wc_path, "zeta", pool);
+  SVN_ERR(svn_io_file_create_empty(local_path, pool));
+  SVN_ERR(svn_client_add5(local_path, svn_depth_unknown,
                           FALSE, FALSE, FALSE, FALSE,
                           ctx, pool));
 
-  /* Now run the remote-only status. */
+  /* Modify a local file, but don't tell the working copy about it. */
+  local_path = svn_dirent_join(wc_path, "mu", pool);
+  SVN_ERR(svn_io_file_open(&local_file, local_path,
+                           APR_FOPEN_WRITE | APR_FOPEN_TRUNCATE,
+                           0, pool));
+  SVN_ERR(svn_io_file_write_full(local_file,
+                                 contents->data, contents->len,
+                                 NULL, pool));
+  SVN_ERR(svn_io_file_close(local_file, pool));
+
+  /* Run the remote-only status. */
   results = apr_array_make(pool, 3, sizeof(const svn_client_status_t *));
   rev.kind = svn_opt_revision_head;
   SVN_ERR(svn_client_status6(
               &result_rev, ctx, wc_path, &rev, svn_depth_unknown,
-              TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, NULL,
+              TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, NULL,
               remote_only_status_receiver, results, pool));
 
   SVN_TEST_ASSERT(result_rev == 2);
-  SVN_TEST_ASSERT(results->nelts == 3);
 
-  qsort(results->elts, results->nelts, results->elt_size,
-        compare_status_paths);
+  /* Compare the number of results with the expected results */
+  for (i = 0, ex = expected; ex->relpath; ++ex, ++i)
+    ;
+  SVN_TEST_ASSERT(results->nelts == i);
+
+  if (opts->verbose)
+    qsort(results->elts, results->nelts, results->elt_size,
+          compare_status_paths);
+
   for (i = 0; i < results->nelts; ++i)
     {
       const svn_client_status_t *st =
@@ -948,28 +991,32 @@ test_remote_only_status(const svn_test_o
         svn_dirent_skip_ancestor(wc_path, st->local_abspath);
       if (!relpath)
         relpath = st->local_abspath;
+      if (!*relpath)
+        relpath = ".";
 
-      /* FIXME: temporary */
-      printf("%c%c%c %2ld  %c%c%c %2ld  %s\n",
-             status_to_char(st->node_status),
-             status_to_char(st->text_status),
-             status_to_char(st->prop_status),
-             (long)st->revision,
-
-             status_to_char(st->repos_node_status),
-             status_to_char(st->repos_text_status),
-             status_to_char(st->repos_prop_status),
-             (long)st->ood_changed_rev,
-
-             (*relpath ? relpath : "."));
-
-      SVN_TEST_ASSERT(st->revision == 1);
-      SVN_TEST_ASSERT(st->ood_changed_rev == 2);
-      SVN_TEST_ASSERT(st->node_status == svn_wc_status_normal);
-      if (0 == strcmp(relpath, "iota"))
-        SVN_TEST_ASSERT(st->repos_node_status == svn_wc_status_modified);
-      else
-        SVN_TEST_ASSERT(st->repos_node_status == svn_wc_status_none);
+      for (ex = expected; ex->relpath; ++ex)
+        {
+          if (0 == strcmp(relpath, ex->relpath))
+            break;
+        }
+      SVN_TEST_ASSERT(ex->relpath != NULL);
+
+      if (opts->verbose)
+        printf("%c%c%c %2ld  %c%c%c %2ld  %s\n",
+               status_to_char(st->node_status),
+               status_to_char(st->text_status),
+               status_to_char(st->prop_status),
+               (long)st->revision,
+               status_to_char(st->repos_node_status),
+               status_to_char(st->repos_text_status),
+               status_to_char(st->repos_prop_status),
+               (long)st->ood_changed_rev,
+               relpath);
+
+      SVN_TEST_ASSERT(st->revision == ex->revision);
+      SVN_TEST_ASSERT(st->ood_changed_rev == ex->ood_changed_rev);
+      SVN_TEST_ASSERT(st->node_status == ex->node_status);
+      SVN_TEST_ASSERT(st->repos_node_status == ex->repos_node_status);
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/remote-only-status/subversion/tests/svn_test.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/svn_test.h?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/svn_test.h 
(original)
+++ subversion/branches/remote-only-status/subversion/tests/svn_test.h Mon Mar 
31 14:26:40 2014
@@ -109,6 +109,7 @@ typedef struct svn_test_opts_t
   /* Minor version to use for servers and FS backends, or zero to use
      the current latest version. */
   int server_minor_version;
+  svn_boolean_t verbose;
   /* Add future "arguments" here. */
 } svn_test_opts_t;
 

Modified: 
subversion/branches/remote-only-status/subversion/tests/svn_test_main.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/remote-only-status/subversion/tests/svn_test_main.c?rev=1583335&r1=1583334&r2=1583335&view=diff
==============================================================================
--- subversion/branches/remote-only-status/subversion/tests/svn_test_main.c 
(original)
+++ subversion/branches/remote-only-status/subversion/tests/svn_test_main.c Mon 
Mar 31 14:26:40 2014
@@ -819,6 +819,7 @@ svn_test_main(int argc, const char *argv
 #endif
       }
     }
+  opts.verbose = verbose_mode;
 
   /* Disable sleeping for timestamps, to speed up the tests. */
   apr_env_set(


Reply via email to