Author: julianfoad
Date: Fri Feb 27 11:51:22 2015
New Revision: 1662668
URL: http://svn.apache.org/r1662668
Log:
Introduce svn_error_quick_wrapf(), a variable-arguments version of
svn_error_quick_wrap(). Use it to simplify previous uses of the latter.
* subversion/include/svn_error.h
* subversion/libsvn_subr/error.c
(svn_error_quick_wrapf): New function and macro of the same name.
* subversion/libsvn_fs_fs/hotcopy.c
(hotcopy_body): Use it.
* subversion/libsvn_subr/io.c
(svn_io_copy_perms,
svn_io_open_unique_file3): Use it.
* subversion/libsvn_wc/wc_db.c
(read_info): Use it.
* subversion/libsvn_wc/wc_db_wcroot.c
(svn_wc__db_wcroot_parse_local_abspath): Use it.
* subversion/svnbench/svnbench.c
(sub_main): Use it.
* subversion/svn/svn.c
(sub_main): Use it.
Modified:
subversion/trunk/subversion/include/svn_error.h
subversion/trunk/subversion/libsvn_fs_fs/hotcopy.c
subversion/trunk/subversion/libsvn_subr/error.c
subversion/trunk/subversion/libsvn_subr/io.c
subversion/trunk/subversion/libsvn_wc/wc_db.c
subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c
subversion/trunk/subversion/svn/svn.c
subversion/trunk/subversion/svnbench/svnbench.c
Modified: subversion/trunk/subversion/include/svn_error.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_error.h?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_error.h (original)
+++ subversion/trunk/subversion/include/svn_error.h Fri Feb 27 11:51:22 2015
@@ -173,6 +173,17 @@ svn_error_t *
svn_error_quick_wrap(svn_error_t *child,
const char *new_msg);
+/** A quick n' easy way to create a wrapped exception with your own
+ * printf-style error message produced by passing @a fmt, using
+ * apr_psprintf(), before throwing it up the stack. (It uses all of the
+ * @a child's fields.)
+ */
+svn_error_t *
+svn_error_quick_wrapf(svn_error_t *child,
+ const char *fmt,
+ ...)
+ __attribute__((format(printf, 2, 3)));
+
/** Compose two errors, returning the composition as a brand new error
* and consuming the original errors. Either or both of @a err1 and
* @a err2 may be @c SVN_NO_ERROR. If both are not @c SVN_NO_ERROR,
@@ -256,6 +267,8 @@ svn_error__locate(const char *file,
(svn_error__locate(__FILE__,__LINE__), (svn_error_wrap_apr))
#define svn_error_quick_wrap \
(svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrap))
+#define svn_error_quick_wrapf \
+ (svn_error__locate(__FILE__,__LINE__), (svn_error_quick_wrapf))
#endif
Modified: subversion/trunk/subversion/libsvn_fs_fs/hotcopy.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_fs_fs/hotcopy.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_fs_fs/hotcopy.c (original)
+++ subversion/trunk/subversion/libsvn_fs_fs/hotcopy.c Fri Feb 27 11:51:22 2015
@@ -855,7 +855,6 @@ hotcopy_body(void *baton, apr_pool_t *po
* ### so we have no way of just printing a warning via
* ### the fs->warning() callback. */
- const char *msg;
const char *src_abspath;
const char *dst_abspath;
const char *config_relpath;
@@ -874,13 +873,12 @@ hotcopy_body(void *baton, apr_pool_t *po
src_abspath = svn_dirent_dirname(src_abspath, pool);
dst_abspath = svn_dirent_dirname(dst_abspath, pool);
- msg = apr_psprintf(pool,
+ return svn_error_quick_wrapf(err,
_("Failed to create hotcopy at '%s'. "
"The file '%s' is missing from the source "
"repository. Please create this file, for "
"instance by running 'svnadmin upgrade
%s'"),
dst_abspath, config_relpath, src_abspath);
- return svn_error_quick_wrap(err, msg);
}
else
return svn_error_trace(err);
Modified: subversion/trunk/subversion/libsvn_subr/error.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/error.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/error.c (original)
+++ subversion/trunk/subversion/libsvn_subr/error.c Fri Feb 27 11:51:22 2015
@@ -67,6 +67,7 @@ static const char SVN_FILE_LINE_UNDEFINE
#undef svn_error_create
#undef svn_error_createf
#undef svn_error_quick_wrap
+#undef svn_error_quick_wrapf
#undef svn_error_wrap_apr
/* Note: Although this is a "__" function, it was historically in the
@@ -224,6 +225,26 @@ svn_error_quick_wrap(svn_error_t *child,
new_msg);
}
+svn_error_t *
+svn_error_quick_wrapf(svn_error_t *child,
+ const char *fmt,
+ ...)
+{
+ svn_error_t *err;
+ va_list ap;
+
+ if (child == SVN_NO_ERROR)
+ return SVN_NO_ERROR;
+
+ err = make_error_internal(child->apr_err, child);
+
+ va_start(ap, fmt);
+ err->message = apr_pvsprintf(err->pool, fmt, ap);
+ va_end(ap);
+
+ return err;
+}
+
/* Messages in tracing errors all point to this static string. */
static const char error_tracing_link[] = "traced call";
Modified: subversion/trunk/subversion/libsvn_subr/io.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/io.c (original)
+++ subversion/trunk/subversion/libsvn_subr/io.c Fri Feb 27 11:51:22 2015
@@ -1002,10 +1002,9 @@ svn_io_copy_perms(const char *src,
svn_error_clear(err);
else
{
- const char *message;
- message = apr_psprintf(pool, _("Can't set permissions on '%s'"),
- svn_dirent_local_style(dst, pool));
- return svn_error_quick_wrap(err, message);
+ return svn_error_quick_wrapf(
+ err, _("Can't set permissions on '%s'"),
+ svn_dirent_local_style(dst, pool));
}
}
}
@@ -5080,12 +5079,9 @@ svn_io_open_unique_file3(apr_file_t **fi
svn_error_clear(err);
else
{
- const char *message;
- message = apr_psprintf(scratch_pool,
- _("Can't set permissions on '%s'"),
- svn_dirent_local_style(tempname,
- scratch_pool));
- return svn_error_quick_wrap(err, message);
+ return svn_error_quick_wrapf(
+ err, _("Can't set permissions on '%s'"),
+ svn_dirent_local_style(tempname, scratch_pool));
}
}
}
Modified: subversion/trunk/subversion/libsvn_wc/wc_db.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db.c Fri Feb 27 11:51:22 2015
@@ -9019,10 +9019,8 @@ read_info(svn_wc__db_status_t *status,
err = svn_error_compose_create(err, svn_sqlite__reset(stmt_act));
if (err && err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
- err = svn_error_quick_wrap(err,
- apr_psprintf(scratch_pool,
- _("Error reading node '%s'"),
- local_relpath));
+ err = svn_error_quick_wrapf(err, _("Error reading node '%s'"),
+ local_relpath);
SVN_ERR(svn_error_compose_create(err, svn_sqlite__reset(stmt_info)));
Modified: subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/trunk/subversion/libsvn_wc/wc_db_wcroot.c Fri Feb 27 11:51:22
2015
@@ -702,11 +702,9 @@ try_symlink_as_dir:
if (err)
{
if (err->apr_err == SVN_ERR_WC_CORRUPT)
- return svn_error_quick_wrap(
- err, apr_psprintf(scratch_pool,
- _("Missing a row in WCROOT for '%s'."),
- svn_dirent_local_style(original_abspath,
- scratch_pool)));
+ return svn_error_quick_wrapf(
+ err, _("Missing a row in WCROOT for '%s'."),
+ svn_dirent_local_style(original_abspath, scratch_pool));
return svn_error_trace(err);
}
Modified: subversion/trunk/subversion/svn/svn.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/svn.c (original)
+++ subversion/trunk/subversion/svn/svn.c Fri Feb 27 11:51:22 2015
@@ -3058,10 +3058,9 @@ sub_main(int *exit_code, int argc, const
if (err->apr_err == SVN_ERR_CL_INSUFFICIENT_ARGS
|| err->apr_err == SVN_ERR_CL_ARG_PARSING_ERROR)
{
- err = svn_error_quick_wrap(
- err, apr_psprintf(pool,
- _("Try 'svn help %s' for more
information"),
- subcommand->name));
+ err = svn_error_quick_wrapf(
+ err, _("Try 'svn help %s' for more information"),
+ subcommand->name);
}
if (err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
{
Modified: subversion/trunk/subversion/svnbench/svnbench.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnbench/svnbench.c?rev=1662668&r1=1662667&r2=1662668&view=diff
==============================================================================
--- subversion/trunk/subversion/svnbench/svnbench.c (original)
+++ subversion/trunk/subversion/svnbench/svnbench.c Fri Feb 27 11:51:22 2015
@@ -958,10 +958,9 @@ sub_main(int *exit_code, int argc, const
if (err->apr_err == SVN_ERR_CL_INSUFFICIENT_ARGS
|| err->apr_err == SVN_ERR_CL_ARG_PARSING_ERROR)
{
- err = svn_error_quick_wrap(
- err, apr_psprintf(pool,
- _("Try 'svnbench help %s' for more
information"),
- subcommand->name));
+ err = svn_error_quick_wrapf(
+ err, _("Try 'svnbench help %s' for more information"),
+ subcommand->name);
}
if (err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
{