You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2012/12/18 17:41:20 UTC
svn commit: r1423527 - /subversion/trunk/subversion/libsvn_wc/props.c
Author: julianfoad
Date: Tue Dec 18 16:41:20 2012
New Revision: 1423527
URL: http://svn.apache.org/viewvc?rev=1423527&view=rev
Log:
Eliminate a WC DB look-up in svn_wc_prop_set4().
* subversion/libsvn_wc/props.c
(getter_baton): Add a 'mime_type' member, and remove the 'db' member.
(get_file_for_validation): Document this function. Take the MIME type
directly from the baton rather than reading it from the WC DB.
(do_propset): Fetch the current properties earlier, and make the current
value of svn:mime-type available to the validation baton.
Modified:
subversion/trunk/subversion/libsvn_wc/props.c
Modified: subversion/trunk/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/props.c?rev=1423527&r1=1423526&r2=1423527&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/props.c (original)
+++ subversion/trunk/subversion/libsvn_wc/props.c Tue Dec 18 16:41:20 2012
@@ -1573,12 +1573,15 @@ validate_prop_against_node_kind(const ch
struct getter_baton {
+ const svn_string_t *mime_type;
const char *local_abspath;
- svn_wc__db_t *db;
};
-/* */
+/* Provide the MIME_TYPE and/or push the content to STREAM for the file
+ * referenced by (getter_baton *) BATON.
+ *
+ * Implements svn_wc_canonicalize_svn_prop_get_file_t. */
static svn_error_t *
get_file_for_validation(const svn_string_t **mime_type,
svn_stream_t *stream,
@@ -1588,18 +1591,15 @@ get_file_for_validation(const svn_string
struct getter_baton *gb = baton;
if (mime_type)
- SVN_ERR(svn_wc__internal_propget(mime_type, gb->db, gb->local_abspath,
- SVN_PROP_MIME_TYPE, pool, pool));
+ *mime_type = gb->mime_type;
if (stream)
{
svn_stream_t *read_stream;
- /* Open GB->LOCAL_ABSPATH. */
+ /* Copy the text of GB->LOCAL_ABSPATH into STREAM. */
SVN_ERR(svn_stream_open_readonly(&read_stream, gb->local_abspath,
pool, pool));
-
- /* Copy from the file into the translating stream. */
SVN_ERR(svn_stream_copy3(read_stream, svn_stream_disown(stream, pool),
NULL, NULL, pool));
}
@@ -1679,6 +1679,10 @@ do_propset(svn_wc__db_t *db,
SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+ SVN_ERR_W(svn_wc__db_read_props(&prophash, db, local_abspath,
+ scratch_pool, scratch_pool),
+ _("Failed to load current properties"));
+
/* Setting an inappropriate property is not allowed (unless
overridden by 'skip_checks', in some circumstances). Deleting an
inappropriate property is allowed, however, since older clients
@@ -1689,8 +1693,9 @@ do_propset(svn_wc__db_t *db,
const svn_string_t *new_value;
struct getter_baton gb;
+ gb.mime_type = apr_hash_get(prophash,
+ SVN_PROP_MIME_TYPE, APR_HASH_KEY_STRING);
gb.local_abspath = local_abspath;
- gb.db = db;
SVN_ERR(svn_wc_canonicalize_svn_prop(&new_value, name, value,
local_abspath, kind,
@@ -1708,10 +1713,6 @@ do_propset(svn_wc__db_t *db,
scratch_pool, scratch_pool));
}
- SVN_ERR_W(svn_wc__db_read_props(&prophash, db, local_abspath,
- scratch_pool, scratch_pool),
- _("Failed to load current properties"));
-
/* If we're changing this file's list of expanded keywords, then
* we'll need to invalidate its text timestamp, since keyword
* expansion affects the comparison of working file to text base.