[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Adding --depth support to the status command

From: Karl Fogel <kfogel_at_red-bean.com>
Date: 2007-04-01 07:42:40 CEST

Lieven Govaerts <lgo@mobsol.be> writes:
> "The -N option becomes a synonym for --depth=files for these commands.
> * checkout
> * switch
> * update
> * status
> * info "
>
> First of all, info doesn't accept -N, so unless there's a reason I don't
> know about, we can remove that from this list.

But 'info' does accept -R (and currently --depth), because it is
non-recursive by default.

> Second, the current behavior of status -N is to show the status of both
> files and directories in the target. In 'depth' terms, this is the
> equivalent of --depth=immediates.
>
> So should I map status -N to 'status --depth=immediates' to match the
> current behavior? Or to 'status --depth=files' to make it consistent
> over all commands?
>
> Given -N is now obsolete, I prefer to just match current behavior and
> get rid of that flag asap. Anyone who disagrees?

I think your proposal makes sense. The empty immediate subdir in a
--depth=immediates checkout still has a .svn dir, and a this-dir entry
in its entries file, so we can talk about its status.

FWIW, here's the patch I was working on before we merged. It doesn't
quite apply cleanly anymore, but the conflicts are probably trivial.
This patch focuses on API upgrading, not behavior; it's one of the API
upgrades listed at the end of notes/sparse-directories.txt. I'm still
working on this, but feel free to carry it farther, I'll make sure to
log into IRC next time I'm hacking on it, to check :-).

[[[
Upgrade svn_wc_get_status_editor() interface to use depth instead of recurse.

     *** PATCH IN PROGRESS -- SEE NOTE ABOUT FAILING TESTS BELOW ***

* subversion/include/svn_wc.h
  (svn_wc_get_status_editor3): New prototype.
  (svn_wc_get_status_editor2): Deprecate.
  (svn_wc_status_set_repos_locks): Doc tweak.

* subversion/libsvn_wc/status.c
  (struct edit_baton): Replace 'descend' field with 'depth'.
  (struct dir_baton): Add new 'depth' field.
  (make_dir_baton): Set and use new 'depth' field in dir_baton.
  (get_dir_status, handle_dir_entry, handle_statii): Take 'depth'
    instead of 'descend'. All callers changed.
  (svn_wc_get_status_editor3): New function.
  (svn_wc_get_status_editor2, svn_wc_get_status_editor): Implement via
    svn_wc_get_status_editor3.

* subversion/libsvn_wc/revision_status.c
  (svn_wc_revision_status): Update caller.

* subversion/libsvn_client/status.c
  (svn_client_status3): Update caller.

* subversion/include/svn_types.h
  (svn_depth_t): Note that order of depths is important, and take the
    tentativity markers off svn_depth_unknown and svn_depth_exclude.

* notes/sparse-directories.txt: Remove this item from the API TODO list.

-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-

With this patch, the sparse-directories branch fails 16 tests right now:

  FAIL: diff_tests.py 33: nonrecursive diff + deleted directories
  FAIL: stat_tests.py 7: status -u with new files in the repository
  FAIL: stat_tests.py 10: status -u indicates out-of-dateness
  FAIL: stat_tests.py 15: status -u in partially non-recursive wc
  FAIL: stat_tests.py 18: status on ignored directory
  FAIL: stat_tests.py 20: status on missing directory
  FAIL: stat_tests.py 24: run 'status -u' variations w/ incoming propchanges
  FAIL: stat_tests.py 25: run 'status -uv' w/ incoming propchanges
  FAIL: depth_tests.py 1: depth-empty checkout
  FAIL: depth_tests.py 2: depth-files checkout
  FAIL: depth_tests.py 3: non-recursive checkout equals depth-files
  FAIL: depth_tests.py 4: update depth-empty wc shouldn't receive file mod
  FAIL: depth_tests.py 5: update depth-immediates wc gets top file mod only
  FAIL: depth_tests.py 7: act on a file in a depth-empty working copy
  FAIL: depth_tests.py 8: bring a dir into a depth-empty working copy
  FAIL: depth_tests.py 13: depth-empty working copy ignores a deletion

I believe that the diff_tests.py 33 failure may be due to r23782 ('do
input validation when reading working-size from .svn/entries'), rather
than to anything in the patch below. The rest of the failures are
probably due to the patch, though.

-*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*-
]]]

Index: notes/sparse-directories.txt
===================================================================
--- notes/sparse-directories.txt (revision 23863)
+++ notes/sparse-directories.txt (working copy)
@@ -394,7 +394,6 @@
          svn_client_info() # I don't think this needs to take depth.
          svn_client_add3() # I don't think this needs to take depth.
 
- svn_wc_get_status_editor2() # Yes, probably should take depth.
          svn_wc_get_switch_editor3() # Yes, probably should take depth.
          svn_wc_revert2() # Really not sure about this one.
          svn_wc_resolved_conflict2() # Really not sure about this one.
Index: subversion/include/svn_types.h
===================================================================
--- subversion/include/svn_types.h (revision 23863)
+++ subversion/include/svn_types.h (working copy)
@@ -208,12 +208,14 @@
  */
 typedef enum
 {
- /* Depth undetermined or ignored.
- ### TODO(sd): This depth may turn out to be unnecessary. ### */
+ /* The order of these depths is important: the higher the number,
+ the deeper it descends. This allows us to compare two depths
+ numerically to decide which should govern. */
+
+ /* Depth undetermined or ignored. */
   svn_depth_unknown = -2,
 
- /* Exclude (remove, whatever) directory D.
- ### TODO(sd): This depth may turn out to be unnecessary. ### */
+ /* Exclude (i.e., don't descend into) directory D. */
   svn_depth_exclude = -1,
 
   /* Just the named directory D, no entries. Updates will not pull in
Index: subversion/include/svn_wc.h
===================================================================
--- subversion/include/svn_wc.h (revision 23863)
+++ subversion/include/svn_wc.h (working copy)
@@ -2040,10 +2040,19 @@
  * - If @a get_all is false, then only locally-modified entries will be
  * returned. If true, then all entries will be returned.
  *
- * - If @a recurse is false, status structures will be returned only
- * for the target and its immediate children. Otherwise, this
- * operation is fully recursive.
+ * - If @a depth is @c svn_depth_empty, a status structure will
+ * be returned for the target only; if @c svn_depth_files, for the
+ * target and its immediate file children; if
+ * @c svn_depth_immediates, for the target and its immediate
+ * children; if @c svn_depth_infinity, for the target and
+ * everything underneath it, fully recursively.
  *
+ * If @a depth is @c svn_depth_unknown, take depths from the
+ * working copy and behave as above in each directory's case.
+ *
+ * If the given @a depth is incompatible with the depth found in a
+ * working copy directory, the found depth always governs.
+ *
  * If @a no_ignore is set, statuses that would typically be ignored
  * will instead be reported.
  *
@@ -2057,7 +2066,32 @@
  * Allocate the editor itself in @a pool, but the editor does temporary
  * allocations in a subpool of @a pool.
  *
+ * @since New in 1.5.
+ */
+svn_error_t *svn_wc_get_status_editor3(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ void **set_locks_baton,
+ svn_revnum_t *edit_revision,
+ svn_wc_adm_access_t *anchor,
+ const char *target,
+ apr_hash_t *config,
+ svn_depth_t depth,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_wc_status_func2_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_traversal_info_t *traversal_info,
+ apr_pool_t *pool);
+
+/*
+ * Like svn_wc_get_status_editor3(), but with @a recurse instead of @a depth.
+ * If @a recurse is true, behave as if for @c svn_depth_infinity; else
+ * if @a recurse is false, behave as if for @c svn_depth_files.
+ *
  * @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.4 API.
  */
 svn_error_t *svn_wc_get_status_editor2(const svn_delta_editor_t **editor,
                                        void **edit_baton,
@@ -2076,7 +2110,6 @@
                                        svn_wc_traversal_info_t *traversal_info,
                                        apr_pool_t *pool);
 
-
 /**
  * Same as svn_wc_get_status_editor2(), but with @a set_locks_baton set
  * to @c NULL, and taking a deprecated svn_wc_status_func_t argument.
@@ -2104,7 +2137,7 @@
  * Associate @a locks, a hash table mapping <tt>const char*</tt>
  * absolute repository paths to <tt>svn_lock_t</tt> objects, with a
  * @a set_locks_baton returned by an earlier call to
- * svn_wc_get_status_editor2(). @a repos_root is the repository root URL.
+ * svn_wc_get_status_editor3(). @a repos_root is the repository root URL.
  * Perform all allocations in @a pool.
  *
  * @note @a locks will not be copied, so it must be valid throughout the
Index: subversion/libsvn_wc/revision_status.c
===================================================================
--- subversion/libsvn_wc/revision_status.c (revision 23863)
+++ subversion/libsvn_wc/revision_status.c (working copy)
@@ -108,10 +108,10 @@
                                  cancel_func, cancel_baton,
                                  pool));
 
- SVN_ERR(svn_wc_get_status_editor2(&editor, &edit_baton, NULL,
+ SVN_ERR(svn_wc_get_status_editor3(&editor, &edit_baton, NULL,
                                     &edit_revision, anchor_access, target,
                                     NULL /* config */,
- TRUE /* recurse */,
+ svn_depth_infinity,
                                     TRUE /* get_all */,
                                     FALSE /* no_ignore */,
                                     analyze_status, &sb,
Index: subversion/libsvn_wc/status.c
===================================================================
--- subversion/libsvn_wc/status.c (revision 23863)
+++ subversion/libsvn_wc/status.c (working copy)
@@ -46,13 +46,21 @@
 
 struct edit_baton
 {
- /* For status, the "destination" of the edit and whether to honor
- any paths that are 'below'. */
+ /* For status, the "destination" of the edit. */
   const char *anchor;
   const char *target;
   svn_wc_adm_access_t *adm_access;
- svn_boolean_t descend;
 
+ /* The overall depth of this edit (a dir baton may override this).
+ *
+ * If this is svn_depth_unknown, the depths found in the working
+ * copy will govern the edit; or if the edit depth indicates a
+ * descent deeper than the found depths are capable of, the found
+ * depths also govern, of course (there's no point descending into
+ * something that's not there).
+ */
+ svn_depth_t depth;
+
   /* Do we want all statuses (instead of just the interesting ones) ? */
   svn_boolean_t get_all;
  
@@ -111,6 +119,14 @@
      directory. */
   struct dir_baton *parent_baton;
 
+ /* The ambient requested depth below this point in the edit. This
+ can differ from the parent baton's depth (with the edit baton
+ considered the ultimate parent baton). For example, if the
+ parent baton has svn_depth_immediates, then here we should have
+ svn_depth_empty, because there would be no further recursion, not
+ even to file children. */
+ svn_depth_t depth;
+
   /* 'svn status' shouldn't print status lines for things that are
      added; we're only interest in asking if objects that the user
      *already* has are up-to-date or not. Thus if this flag is set,
@@ -674,7 +690,7 @@
                                    svn_wc_adm_access_t *adm_access,
                                    const char *entry,
                                    apr_array_header_t *ignores,
- svn_boolean_t descend,
+ svn_depth_t depth,
                                    svn_boolean_t get_all,
                                    svn_boolean_t no_ignore,
                                    svn_boolean_t skip_this_dir,
@@ -697,7 +713,7 @@
                  svn_node_kind_t kind,
                  svn_boolean_t special,
                  apr_array_header_t *ignores,
- svn_boolean_t descend,
+ svn_depth_t depth,
                  svn_boolean_t get_all,
                  svn_boolean_t no_ignore,
                  svn_wc_status_func2_t status_func,
@@ -731,13 +747,16 @@
         }
 
       /* Descend only if the subdirectory is a working copy directory
- (and DESCEND is non-zero ofcourse) */
- if (descend && (full_entry != entry))
+ (and DEPTH permits it, of course) */
+ if (full_entry != entry
+ && (depth == svn_depth_unknown
+ || depth == svn_depth_immediates
+ || depth == svn_depth_infinity))
         {
           svn_wc_adm_access_t *dir_access;
           SVN_ERR(svn_wc_adm_retrieve(&dir_access, adm_access, path, pool));
           SVN_ERR(get_dir_status(eb, dir_entry, dir_access, NULL, ignores,
- descend, get_all, no_ignore, FALSE,
+ depth, get_all, no_ignore, FALSE,
                                  status_func, status_baton, cancel_func,
                                  cancel_baton, pool));
         }
@@ -774,14 +793,14 @@
    *will* be reported, regardless of this parameter's value.
 
    Other arguments are the same as those passed to
- svn_wc_get_status_editor2(). */
+ svn_wc_get_status_editor3(). */
 static svn_error_t *
 get_dir_status(struct edit_baton *eb,
                const svn_wc_entry_t *parent_entry,
                svn_wc_adm_access_t *adm_access,
                const char *entry,
                apr_array_header_t *ignores,
- svn_boolean_t descend,
+ svn_depth_t depth,
                svn_boolean_t get_all,
                svn_boolean_t no_ignore,
                svn_boolean_t skip_this_dir,
@@ -872,7 +891,7 @@
                                    entry_entry,
                                    dirent_p ? dirent_p->kind : svn_node_none,
                                    dirent_p ? dirent_p->special : FALSE,
- ignores, descend, get_all,
+ ignores, depth, get_all,
                                    no_ignore, status_func, status_baton,
                                    cancel_func, cancel_baton, subpool));
         }
@@ -965,7 +984,7 @@
                                dirent_p ? dirent_p->kind : svn_node_none,
                                dirent_p ? dirent_p->special : FALSE,
                                ignores,
- descend, get_all, no_ignore,
+ depth, get_all, no_ignore,
                                status_func, status_baton, cancel_func,
                                cancel_baton, iterpool));
     }
@@ -1190,6 +1209,7 @@
   struct dir_baton *d = apr_pcalloc(pool, sizeof(*d));
   const char *full_path;
   svn_wc_status2_t *status_in_parent;
+ svn_depth_t parent_depth = pb ? pb->depth : eb->depth;
 
   /* Don't do this. Just do NOT do this to me. */
   if (pb && (! path))
@@ -1214,6 +1234,16 @@
   d->ood_kind = svn_node_dir;
   d->ood_last_cmt_author = NULL;
 
+ if (parent_depth == svn_depth_immediates)
+ d->depth = svn_depth_empty;
+ else if (parent_depth == svn_depth_files || parent_depth == svn_depth_empty)
+ d->depth = svn_depth_exclude;
+ else if (parent_depth == svn_depth_unknown)
+ /* This is only tentative, it can be overridden from d's entry later. */
+ d->depth = svn_depth_unknown;
+ else
+ d->depth = svn_depth_infinity;
+
   /* Get the status for this path's children. Of course, we only want
      to do this if the path is versioned as a directory. */
   if (pb)
@@ -1233,15 +1263,46 @@
       && (status_in_parent->text_status != svn_wc_status_external)
       && (status_in_parent->text_status != svn_wc_status_ignored)
       && (status_in_parent->entry->kind == svn_node_dir)
- && (eb->descend || (! pb)))
+ && (d->depth == svn_depth_unknown
+ || d->depth == svn_depth_infinity
+ || d->depth == svn_depth_files
+ || d->depth == svn_depth_immediates))
     {
       svn_wc_adm_access_t *dir_access;
+ svn_wc_status2_t *this_dir_status;
       apr_array_header_t *ignores = eb->ignores;
       SVN_ERR(svn_wc_adm_retrieve(&dir_access, eb->adm_access,
                                   d->path, pool));
+
       SVN_ERR(get_dir_status(eb, status_in_parent->entry, dir_access, NULL,
- ignores, FALSE, TRUE, TRUE, TRUE, hash_stash,
- d->statii, NULL, NULL, pool));
+ ignores, svn_depth_empty, TRUE, TRUE, TRUE,
+ hash_stash, d->statii, NULL, NULL, pool));
+
+ if (0)
+ {
+ apr_hash_index_t *hi;
+ printf("KFF: d->path: '%s'\n", d->path);
+ for (hi = apr_hash_first(pool, d->statii); hi; hi = apr_hash_next(hi))
+ {
+ const void *key;
+ void *val;
+ svn_wc_status2_t *status;
+ apr_hash_this(hi, &key, NULL, &val);
+ status = val;
+ printf("KFF:\n");
+ printf("KFF: '%s'\n", (char *) key);
+ printf("KFF: '%s'\n", status->url);
+ }
+ }
+
+ /* If we found a depth here, it should govern. */
+ this_dir_status = apr_hash_get(d->statii, d->path, APR_HASH_KEY_STRING);
+ if (this_dir_status && this_dir_status->entry
+ && (d->depth == svn_depth_unknown
+ || d->depth > status_in_parent->entry->depth))
+ {
+ d->depth = this_dir_status->entry->depth;
+ }
     }
 
   *dir_baton = d;
@@ -1360,18 +1421,17 @@
 
 /* Handle a directory's STATII hash. EB is the edit baton. DIR_PATH
    and DIR_ENTRY are the on-disk path and entry, respectively, for the
- directory itself. If DESCEND is set, this function will recurse
- into subdirectories. Also, if DIR_WAS_DELETED is set, each status
- that is reported through this function will have its
- repos_text_status field showing a deletion. Use POOL for all
- allocations. */
+ directory itself. Descend into subdirectories according to DEPTH.
+ Also, if DIR_WAS_DELETED is set, each status that is reported
+ through this function will have its repos_text_status field showing
+ a deletion. Use POOL for all allocations. */
 static svn_error_t *
 handle_statii(struct edit_baton *eb,
               svn_wc_entry_t *dir_entry,
               const char *dir_path,
               apr_hash_t *statii,
               svn_boolean_t dir_was_deleted,
- svn_boolean_t descend,
+ svn_depth_t depth,
               apr_pool_t *pool)
 {
   apr_array_header_t *ignores = eb->ignores;
@@ -1405,13 +1465,16 @@
       /* Now, handle the status. */
       if (svn_wc__adm_missing(eb->adm_access, key))
         status->text_status = svn_wc_status_missing;
- else if (descend && status->entry && status->entry->kind == svn_node_dir)
+ else if (status->entry && status->entry->kind == svn_node_dir
+ && (depth == svn_depth_unknown
+ || depth == svn_depth_immediates
+ || depth == svn_depth_infinity))
         {
           svn_wc_adm_access_t *dir_access;
           SVN_ERR(svn_wc_adm_retrieve(&dir_access, eb->adm_access,
                                       key, subpool));
           SVN_ERR(get_dir_status(eb, dir_entry, dir_access, NULL,
- ignores, TRUE, eb->get_all,
+ ignores, depth, eb->get_all,
                                  eb->no_ignore, TRUE, status_func,
                                  status_baton, eb->cancel_func,
                                  eb->cancel_baton, subpool));
@@ -1674,7 +1737,7 @@
 
   /* Handle this directory's statuses, and then note in the parent
      that this has been done. */
- if (pb && eb->descend)
+ if (pb && db->depth != svn_depth_exclude)
     {
       svn_boolean_t was_deleted = FALSE;
 
@@ -1687,7 +1750,8 @@
 
       /* Now do the status reporting. */
       SVN_ERR(handle_statii(eb, dir_status ? dir_status->entry : NULL,
- db->path, db->statii, was_deleted, TRUE, pool));
+ db->path, db->statii, was_deleted, db->depth,
+ pool));
       if (dir_status && is_sendable_status(dir_status, eb))
         (eb->status_func)(eb->status_baton, db->path, dir_status);
       apr_hash_set(pb->statii, db->path, APR_HASH_KEY_STRING, NULL);
@@ -1704,7 +1768,7 @@
           tgt_status = apr_hash_get(db->statii, path, APR_HASH_KEY_STRING);
           if (tgt_status)
             {
- if ((eb->descend)
+ if (eb->depth != svn_depth_exclude /* ### TODO(sd): can't happen? */
                   && (tgt_status->entry)
                   && (tgt_status->entry->kind == svn_node_dir))
                 {
@@ -1713,7 +1777,7 @@
                                               path, pool));
                   SVN_ERR(get_dir_status
                           (eb, tgt_status->entry, dir_access, NULL,
- eb->ignores, TRUE, eb->get_all, eb->no_ignore,
+ eb->ignores, eb->depth, eb->get_all, eb->no_ignore,
                            TRUE, eb->status_func, eb->status_baton,
                            eb->cancel_func, eb->cancel_baton, pool));
                 }
@@ -1727,7 +1791,7 @@
              Note that our directory couldn't have been deleted,
              because it is the root of the edit drive. */
           SVN_ERR(handle_statii(eb, eb->anchor_status->entry, db->path,
- db->statii, FALSE, eb->descend, pool));
+ db->statii, FALSE, eb->depth, pool));
           if (is_sendable_status(eb->anchor_status, eb))
             (eb->status_func)(eb->status_baton, db->path, eb->anchor_status);
           eb->anchor_status = NULL;
@@ -1915,7 +1979,7 @@
           if (! tgt_entry)
             {
               err = get_dir_status(eb, NULL, eb->adm_access, eb->target,
- ignores, FALSE, eb->get_all, TRUE,
+ ignores, eb->depth, eb->get_all, TRUE,
                                    TRUE, eb->status_func, eb->status_baton,
                                    eb->cancel_func, eb->cancel_baton,
                                    pool);
@@ -1928,7 +1992,7 @@
               if (err) goto cleanup;
 
               err = get_dir_status(eb, NULL, tgt_access, NULL, ignores,
- eb->descend, eb->get_all,
+ eb->depth, eb->get_all,
                                    eb->no_ignore, FALSE,
                                    eb->status_func, eb->status_baton,
                                    eb->cancel_func, eb->cancel_baton,
@@ -1939,7 +2003,7 @@
       else
         {
           err = get_dir_status(eb, NULL, eb->adm_access, eb->target,
- ignores, FALSE, eb->get_all, TRUE,
+ ignores, eb->depth, eb->get_all, TRUE,
                                TRUE, eb->status_func, eb->status_baton,
                                eb->cancel_func, eb->cancel_baton, pool);
           if (err) goto cleanup;
@@ -1948,7 +2012,7 @@
   else
     {
       err = get_dir_status(eb, NULL, eb->adm_access, NULL, ignores,
- eb->descend, eb->get_all, eb->no_ignore,
+ eb->depth, eb->get_all, eb->no_ignore,
                            FALSE, eb->status_func, eb->status_baton,
                            eb->cancel_func, eb->cancel_baton, pool);
       if (err) goto cleanup;
@@ -1973,14 +2037,14 @@
 /*** Public API ***/
 
 svn_error_t *
-svn_wc_get_status_editor2(const svn_delta_editor_t **editor,
+svn_wc_get_status_editor3(const svn_delta_editor_t **editor,
                           void **edit_baton,
                           void **set_locks_baton,
                           svn_revnum_t *edit_revision,
                           svn_wc_adm_access_t *anchor,
                           const char *target,
                           apr_hash_t *config,
- svn_boolean_t recurse,
+ svn_depth_t depth,
                           svn_boolean_t get_all,
                           svn_boolean_t no_ignore,
                           svn_wc_status_func2_t status_func,
@@ -1995,7 +2059,7 @@
 
   /* Construct an edit baton. */
   eb = apr_palloc(pool, sizeof(*eb));
- eb->descend = recurse;
+ eb->depth = depth;
   eb->target_revision = edit_revision;
   eb->adm_access = anchor;
   eb->config = config;
@@ -2047,7 +2111,43 @@
 }
 
 
+svn_error_t *
+svn_wc_get_status_editor2(const svn_delta_editor_t **editor,
+ void **edit_baton,
+ void **set_locks_baton,
+ svn_revnum_t *edit_revision,
+ svn_wc_adm_access_t *anchor,
+ const char *target,
+ apr_hash_t *config,
+ svn_boolean_t recurse,
+ svn_boolean_t get_all,
+ svn_boolean_t no_ignore,
+ svn_wc_status_func2_t status_func,
+ void *status_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ svn_wc_traversal_info_t *traversal_info,
+ apr_pool_t *pool)
+{
+ return svn_wc_get_status_editor3(editor,
+ edit_baton,
+ set_locks_baton,
+ edit_revision,
+ anchor,
+ target,
+ config,
+ SVN_DEPTH_FROM_RECURSE(recurse),
+ get_all,
+ no_ignore,
+ status_func,
+ status_baton,
+ cancel_func,
+ cancel_baton,
+ traversal_info,
+ pool);
+}
 
+
 /* Helpers for deprecated svn_wc_status_editor(), of type
    svn_wc_status_func2_t. */
 struct old_status_func_cb_baton
@@ -2087,8 +2187,9 @@
   b->original_func = status_func;
   b->original_baton = status_baton;
 
- return svn_wc_get_status_editor2(editor, edit_baton, NULL, edit_revision,
- anchor, target, config, recurse,
+ return svn_wc_get_status_editor3(editor, edit_baton, NULL, edit_revision,
+ anchor, target, config,
+ SVN_DEPTH_FROM_RECURSE(recurse),
                                    get_all, no_ignore, old_status_func_cb,
                                    b, cancel_func, cancel_baton,
                                    traversal_info, pool);
Index: subversion/libsvn_client/status.c
===================================================================
--- subversion/libsvn_client/status.c (revision 23863)
+++ subversion/libsvn_client/status.c (working copy)
@@ -221,8 +221,6 @@
   const svn_wc_entry_t *entry;
   struct status_baton sb;
   svn_revnum_t edit_revision = SVN_INVALID_REVNUM;
- /* ### TODO(sd): This is a shim, we should use depth for real. */
- svn_depth_t recurse = SVN_DEPTH_TO_RECURSE(depth);
 
   sb.real_status_func = status_func;
   sb.real_status_baton = status_baton;
@@ -240,10 +238,9 @@
 
   /* Get the status edit, and use our wrapping status function/baton
      as the callback pair. */
- /* ### TODO(sd): ...and this would take depth, not recurse... */
- SVN_ERR(svn_wc_get_status_editor2(&editor, &edit_baton, &set_locks_baton,
+ SVN_ERR(svn_wc_get_status_editor3(&editor, &edit_baton, &set_locks_baton,
                                     &edit_revision, anchor_access, target,
- ctx->config, recurse, get_all, no_ignore,
+ ctx->config, depth, get_all, no_ignore,
                                     tweak_status, &sb, ctx->cancel_func,
                                     ctx->cancel_baton, traversal_info,
                                     pool));

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Apr 1 07:42:57 2007

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.