Author: julianfoad
Date: Mon Feb 26 10:52:10 2018
New Revision: 1825353
URL: http://svn.apache.org/viewvc?rev=1825353&view=rev
Log:
Shelving: Make a simpler log message set/get API.
* subversion/include/svn_client.h,
subversion/libsvn_client/shelf.c
(svn_client_shelf_revprop_set_all): New
(svn_client_shelf_set_log_message): Simply set a log message; no callback
and no other revprops.
(svn_client_shelf_get_log_message): Document more fully.
* subversion/svn/shelf-cmd.c
(shelve): Do the client-specific callback dance here instead.
Modified:
subversion/trunk/subversion/include/svn_client.h
subversion/trunk/subversion/libsvn_client/shelf.c
subversion/trunk/subversion/svn/shelf-cmd.c
Modified: subversion/trunk/subversion/include/svn_client.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1825353&r1=1825352&r2=1825353&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Mon Feb 26 10:52:10 2018
@@ -7041,6 +7041,19 @@ svn_client_shelf_revprop_set(svn_client_
const svn_string_t *prop_val,
apr_pool_t *scratch_pool);
+/** Set @a shelf's revprops to @a revprop_table.
+ *
+ * This deletes all previous revprops.
+ *
+ * @since New in 1.X.
+ * @warning EXPERIMENTAL.
+ */
+SVN_EXPERIMENTAL
+svn_error_t *
+svn_client_shelf_revprop_set_all(svn_client_shelf_t *shelf,
+ apr_hash_t *revprop_table,
+ apr_pool_t *scratch_pool);
+
/** Get @a shelf's revprop @a prop_name into @a *prop_val.
*
* If the property is not present, set @a *prop_val to NULL.
@@ -7075,8 +7088,11 @@ svn_client_shelf_revprop_list(apr_hash_t
svn_client_shelf_t *shelf,
apr_pool_t *result_pool);
-/** Set the log message in @a shelf, using the log message callbacks in
- * the client context, and set other revprops to @a revprop_table.
+/** Set the log message in @a shelf to @a log_message.
+ *
+ * If @a log_message is null, delete the log message.
+ *
+ * Similar to svn_client_shelf_revprop_set(... SVN_PROP_REVISION_LOG ...).
*
* @since New in 1.X.
* @warning EXPERIMENTAL.
@@ -7084,14 +7100,17 @@ svn_client_shelf_revprop_list(apr_hash_t
SVN_EXPERIMENTAL
svn_error_t *
svn_client_shelf_set_log_message(svn_client_shelf_t *shelf,
- apr_hash_t *revprop_table,
- svn_boolean_t dry_run,
+ char *log_message,
apr_pool_t *scratch_pool);
/** Get the log message in @a shelf into @a *log_message.
*
* Set @a *log_message to NULL if there is no log message.
*
+ * Similar to svn_client_shelf_revprop_get(... SVN_PROP_REVISION_LOG ...).
+ *
+ * The result is allocated in @a result_pool.
+ *
* @since New in 1.X.
* @warning EXPERIMENTAL.
*/
Modified: subversion/trunk/subversion/libsvn_client/shelf.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/shelf.c?rev=1825353&r1=1825352&r2=1825353&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/shelf.c (original)
+++ subversion/trunk/subversion/libsvn_client/shelf.c Mon Feb 26 10:52:10 2018
@@ -249,6 +249,19 @@ svn_client_shelf_revprop_set(svn_client_
}
svn_error_t *
+svn_client_shelf_revprop_set_all(svn_client_shelf_t *shelf,
+ apr_hash_t *revprop_table,
+ apr_pool_t *scratch_pool)
+{
+ if (revprop_table)
+ shelf->revprops = svn_prop_hash_dup(revprop_table, shelf->pool);
+ else
+ shelf->revprops = apr_hash_make(shelf->pool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
svn_client_shelf_revprop_get(svn_string_t **prop_val,
svn_client_shelf_t *shelf,
const char *prop_name,
@@ -679,7 +692,7 @@ svn_client_shelf_get_log_message(char **
svn_client_shelf_t *shelf,
apr_pool_t *result_pool)
{
- svn_string_t *propval = svn_hash_gets(shelf->revprops, "svn:log");
+ svn_string_t *propval = svn_hash_gets(shelf->revprops,
SVN_PROP_REVISION_LOG);
if (propval)
*log_message = apr_pstrdup(result_pool, propval->data);
@@ -690,39 +703,14 @@ svn_client_shelf_get_log_message(char **
svn_error_t *
svn_client_shelf_set_log_message(svn_client_shelf_t *shelf,
- apr_hash_t *revprop_table,
- svn_boolean_t dry_run,
+ char *message,
apr_pool_t *scratch_pool)
{
- svn_client_ctx_t *ctx = shelf->ctx;
- const char *message = "";
-
- /* Fetch the log message and any other revprops */
- if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
- {
- const char *tmp_file;
- apr_array_header_t *commit_items
- = apr_array_make(scratch_pool, 1, sizeof(void *));
-
- SVN_ERR(svn_client__get_log_msg(&message, &tmp_file, commit_items,
- ctx, scratch_pool));
- if (! message)
- return SVN_NO_ERROR;
- }
-
- if (revprop_table)
- shelf->revprops = svn_prop_hash_dup(revprop_table, shelf->pool);
- else
- shelf->revprops = apr_hash_make(shelf->pool);
-
- if (message && !dry_run)
- {
- svn_string_t *propval = svn_string_create(message, shelf->pool);
-
- SVN_ERR(svn_client_shelf_revprop_set(shelf, "svn:log", propval,
- scratch_pool));
- }
+ svn_string_t *propval
+ = message ? svn_string_create(message, shelf->pool) : NULL;
+ SVN_ERR(svn_client_shelf_revprop_set(shelf, SVN_PROP_REVISION_LOG, propval,
+ scratch_pool));
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/svn/shelf-cmd.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/shelf-cmd.c?rev=1825353&r1=1825352&r2=1825353&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/shelf-cmd.c (original)
+++ subversion/trunk/subversion/svn/shelf-cmd.c Mon Feb 26 10:52:10 2018
@@ -28,7 +28,9 @@
#include "svn_client.h"
#include "svn_error_codes.h"
#include "svn_error.h"
+#include "svn_hash.h"
#include "svn_path.h"
+#include "svn_props.h"
#include "svn_utf.h"
#include "cl.h"
@@ -516,8 +518,29 @@ shelve(int *new_version_p,
dry_run, scratch_pool));
}
- SVN_ERR(svn_client_shelf_set_log_message(shelf, revprop_table,
- dry_run, scratch_pool));
+ /* Fetch the log message and any other revprops */
+ if (ctx->log_msg_func3)
+ {
+ const char *tmp_file;
+ apr_array_header_t *commit_items
+ = apr_array_make(scratch_pool, 1, sizeof(void *));
+ const char *message = "";
+
+ SVN_ERR(ctx->log_msg_func3(&message, &tmp_file, commit_items,
+ ctx->log_msg_baton3, scratch_pool));
+ /* Abort the shelving if the log message callback requested so. */
+ if (! message)
+ return SVN_NO_ERROR;
+
+ if (message && !dry_run)
+ {
+ svn_string_t *propval = svn_string_create(message, shelf->pool);
+
+ svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG, propval);
+ }
+ }
+
+ SVN_ERR(svn_client_shelf_revprop_set_all(shelf, revprop_table,
scratch_pool));
if (new_version_p)
*new_version_p = shelf->max_version;