diff options
Diffstat (limited to 'subversion/svn/status-cmd.c')
-rw-r--r-- | subversion/svn/status-cmd.c | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/subversion/svn/status-cmd.c b/subversion/svn/status-cmd.c index 74d2847..9840cd2 100644 --- a/subversion/svn/status-cmd.c +++ b/subversion/svn/status-cmd.c @@ -27,6 +27,7 @@ /*** Includes. ***/ +#include "svn_hash.h" #include "svn_string.h" #include "svn_wc.h" #include "svn_client.h" @@ -50,6 +51,9 @@ struct status_baton { /* These fields all correspond to the ones in the svn_cl__print_status() interface. */ + const char *target_abspath; + const char *target_path; + svn_boolean_t suppress_externals_placeholders; svn_boolean_t detailed; svn_boolean_t show_last_committed; svn_boolean_t skip_unrecognized; @@ -74,6 +78,8 @@ struct status_baton struct status_cache { const char *path; + const char *target_abspath; + const char *target_path; svn_client_status_t *status; }; @@ -106,7 +112,7 @@ print_conflict_stats(struct status_baton *sb, apr_pool_t *pool) static svn_error_t * print_start_target_xml(const char *target, apr_pool_t *pool) { - svn_stringbuf_t *sb = svn_stringbuf_create("", pool); + svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool); svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target", "path", target, NULL); @@ -122,7 +128,7 @@ static svn_error_t * print_finish_target_xml(svn_revnum_t repos_rev, apr_pool_t *pool) { - svn_stringbuf_t *sb = svn_stringbuf_create("", pool); + svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool); if (SVN_IS_VALID_REVNUM(repos_rev)) { @@ -149,9 +155,13 @@ print_status_normal_or_xml(void *baton, struct status_baton *sb = baton; if (sb->xml_mode) - return svn_cl__print_status_xml(path, status, sb->ctx, pool); + return svn_cl__print_status_xml(sb->target_abspath, sb->target_path, + path, status, sb->ctx, pool); else - return svn_cl__print_status(path, status, sb->detailed, + return svn_cl__print_status(sb->target_abspath, sb->target_path, + path, status, + sb->suppress_externals_placeholders, + sb->detailed, sb->show_last_committed, sb->skip_unrecognized, sb->repos_locks, @@ -233,16 +243,17 @@ print_status(void *baton, const char *cl_key = apr_pstrdup(sb->cl_pool, status->changelist); struct status_cache *scache = apr_pcalloc(sb->cl_pool, sizeof(*scache)); scache->path = apr_pstrdup(sb->cl_pool, path); + scache->target_abspath = apr_pstrdup(sb->cl_pool, sb->target_abspath); + scache->target_path = apr_pstrdup(sb->cl_pool, sb->target_path); scache->status = svn_client_status_dup(status, sb->cl_pool); path_array = - apr_hash_get(sb->cached_changelists, cl_key, APR_HASH_KEY_STRING); + svn_hash_gets(sb->cached_changelists, cl_key); if (path_array == NULL) { path_array = apr_array_make(sb->cl_pool, 1, sizeof(struct status_cache *)); - apr_hash_set(sb->cached_changelists, cl_key, - APR_HASH_KEY_STRING, path_array); + svn_hash_sets(sb->cached_changelists, cl_key, path_array); } APR_ARRAY_PUSH(path_array, struct status_cache *) = scache; @@ -298,6 +309,8 @@ svn_cl__status(apr_getopt_t *os, "mode")); } + sb.suppress_externals_placeholders = (opt_state->quiet + && (! opt_state->verbose)); sb.detailed = (opt_state->verbose || opt_state->update); sb.show_last_committed = opt_state->verbose; sb.skip_unrecognized = opt_state->quiet; @@ -320,6 +333,10 @@ svn_cl__status(apr_getopt_t *os, svn_pool_clear(iterpool); + SVN_ERR(svn_dirent_get_absolute(&(sb.target_abspath), target, + scratch_pool)); + sb.target_path = target; + SVN_ERR(svn_cl__check_cancel(ctx->cancel_baton)); if (opt_state->xml) @@ -341,6 +358,7 @@ svn_cl__status(apr_getopt_t *os, NULL, opt_state->quiet, /* not versioned: */ SVN_ERR_WC_NOT_WORKING_COPY, + SVN_ERR_WC_PATH_NOT_FOUND, SVN_NO_ERROR)); if (opt_state->xml) @@ -355,7 +373,7 @@ svn_cl__status(apr_getopt_t *os, svn_stringbuf_t *buf; if (opt_state->xml) - buf = svn_stringbuf_create("", scratch_pool); + buf = svn_stringbuf_create_empty(scratch_pool); for (hi = apr_hash_first(scratch_pool, master_cl_hash); hi; hi = apr_hash_next(hi)) @@ -369,7 +387,7 @@ svn_cl__status(apr_getopt_t *os, ### non-changelist entries. */ if (opt_state->xml) { - svn_stringbuf_set(buf, ""); + svn_stringbuf_setempty(buf); svn_xml_make_open_tag(&buf, scratch_pool, svn_xml_normal, "changelist", "name", changelist_name, NULL); @@ -384,13 +402,15 @@ svn_cl__status(apr_getopt_t *os, { struct status_cache *scache = APR_ARRAY_IDX(path_array, j, struct status_cache *); + sb.target_abspath = scache->target_abspath; + sb.target_path = scache->target_path; SVN_ERR(print_status_normal_or_xml(&sb, scache->path, scache->status, scratch_pool)); } if (opt_state->xml) { - svn_stringbuf_set(buf, ""); + svn_stringbuf_setempty(buf); svn_xml_make_close_tag(&buf, scratch_pool, "changelist"); SVN_ERR(svn_cl__error_checked_fputs(buf->data, stdout)); } |