Bill Tutt <billtut@microsoft.com> writes:
> While writing the necessary code to do some per file state reporting in the
> UI, svn_wc_statuses looked like the perfect function, except just for one
> tiny little problem: It recurses into nested directories. Now since normally
> the UI only handles one directory at a time, this seems like a tiny bit of
> overkill. I suppose I could just a tiny little flag bit argument, but I've
> never been particular happy with arbitrary bitflags like that.
>
> Thoughts?
Actually, I think adding a recurse flag is probably best. Here's why:
Ben pointed out that WebDAV has a useful "levels" concept. Say we're
taking status of a directory:
Level 0 means the thing itself, just the named directory
Level 1 means the thing and its immediate children (this dir + its entries)
Level 2 means the thing and all its descendants (full recursion)
One defensible solution would be to have one unified function, taking
a `level' parameter. Unfortunately, because this function would have
to handle multiple return values as well as a single return value,
getting the status of just one entity would become cumbersome: you'd
have to roll through a hash to find the lone returned status.
So we have one function for level 0:
/* Fill *STATUS for PATH, allocating in POOL, with the exception of
the repos_rev field, which is normally filled in by the caller. */
svn_error_t *svn_wc_status (svn_wc_status_t **status,
svn_string_t *path,
apr_pool_t *pool);
And another function for levels 1 and 2, since those levels both
involve multiple return values:
/* Under PATH, fill STATUSHASH to map paths to svn_wc_status_t
structures. For each struct, all fields will be filled in except
for repos_rev; this would presumably be filled in by the caller. */
svn_error_t *svn_wc_statuses (apr_hash_t *statushash,
svn_string_t *path,
apr_pool_t *pool);
However, svn_wc_statuses() only does level 2 right now -- I forgot to
offer any way to just get level 1. "Due to bad planning, the hundred
twenty-two thousand miles of string are in three inch lengths." :-)
Since there are only 2 levels to distinguish between here, a boolean
flag seems fine. I'll change it to this:
/* Under DIR, fill STATUSHASH mapping paths to svn_wc_status_t
* structures. DIR must be a directory, otherwise you want to use
* svn_wc_status().
*
* If DESCEND is zero, statushash will contain paths for DIR and
* its non-directory entries (subdirectories should be subjects of
* separate status calls).
*
* If DESCEND is non-zero, statushash will contain statuses for DIR
* and everything below it, including subdirectories. In other
* words, a full recursion.
*
* For each struct, all fields will be filled in except for
* repos_rev, which would presumably be filled in by the caller.
*/
svn_error_t *svn_wc_statuses (apr_hash_t *statushash,
svn_string_t *dir,
svn_boolean_t descend,
apr_pool_t *pool);
-K
Received on Sat Oct 21 14:36:19 2006