Author: breser
Date: Thu Mar 28 21:30:58 2013
New Revision: 1462312
URL: http://svn.apache.org/r1462312
Log:
Reintegrate the 1.6.x-r947833 branch:
* r947833
Remove deadprops rollback code.
Justification:
Fixes issue #3085, 2990
Branch:
^/subversion/branches/1.6.x-r947833
Votes:
+1: breser, philip, cmpilato
Modified:
subversion/branches/1.6.x/ (props changed)
subversion/branches/1.6.x/STATUS
subversion/branches/1.6.x/subversion/mod_dav_svn/dav_svn.h
subversion/branches/1.6.x/subversion/mod_dav_svn/deadprops.c
Propchange: subversion/branches/1.6.x/
------------------------------------------------------------------------------
Merged /subversion/trunk:r947833
Merged /subversion/branches/1.6.x-r947833:r1461951-1462311
Modified: subversion/branches/1.6.x/STATUS
URL:
http://svn.apache.org/viewvc/subversion/branches/1.6.x/STATUS?rev=1462312&r1=1462311&r2=1462312&view=diff
==============================================================================
--- subversion/branches/1.6.x/STATUS (original)
+++ subversion/branches/1.6.x/STATUS Thu Mar 28 21:30:58 2013
@@ -84,12 +84,3 @@ Veto-blocked changes:
Approved changes:
=================
- * r947833
- Remove deadprops rollback code.
- Justification:
- Fixes issue #3085, 2990
- Branch:
- ^/subversion/branches/1.6.x-r947833
- Votes:
- +1: breser, philip, cmpilato
-
Modified: subversion/branches/1.6.x/subversion/mod_dav_svn/dav_svn.h
URL:
http://svn.apache.org/viewvc/subversion/branches/1.6.x/subversion/mod_dav_svn/dav_svn.h?rev=1462312&r1=1462311&r2=1462312&view=diff
==============================================================================
--- subversion/branches/1.6.x/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/1.6.x/subversion/mod_dav_svn/dav_svn.h Thu Mar 28
21:30:58 2013
@@ -254,6 +254,9 @@ struct dav_resource_private {
interface (ie: /path/to/item?p=PEGREV]? */
svn_boolean_t pegged;
+ /* Cache any revprop change error */
+ svn_error_t *revprop_error;
+
/* Pool to allocate temporary data from */
apr_pool_t *pool;
};
Modified: subversion/branches/1.6.x/subversion/mod_dav_svn/deadprops.c
URL:
http://svn.apache.org/viewvc/subversion/branches/1.6.x/subversion/mod_dav_svn/deadprops.c?rev=1462312&r1=1462311&r2=1462312&view=diff
==============================================================================
--- subversion/branches/1.6.x/subversion/mod_dav_svn/deadprops.c (original)
+++ subversion/branches/1.6.x/subversion/mod_dav_svn/deadprops.c Thu Mar 28
21:30:58 2013
@@ -49,8 +49,7 @@ struct dav_db {
struct dav_deadprop_rollback {
- dav_prop_name name;
- svn_string_t value;
+ int dummy;
};
@@ -175,6 +174,14 @@ save_value(dav_db *db, const dav_prop_na
db->authz_read_baton,
subpool);
+ /* mod_dav doesn't handle the returned error very well, it
+ generates its own generic error that will be returned to
+ the client. Cache the detailed error here so that it can
+ be returned a second time when the rollback mechanism
+ triggers. */
+ if (serr)
+ db->resource->info->revprop_error = svn_error_dup(serr);
+
/* Tell the logging subsystem about the revprop change. */
dav_svn__operational_log(db->resource->info,
svn_log__change_rev_prop(
@@ -611,19 +618,14 @@ db_get_rollback(dav_db *db,
const dav_prop_name *name,
dav_deadprop_rollback **prollback)
{
- dav_error *err;
- dav_deadprop_rollback *ddp;
- svn_string_t *propval;
-
- if ((err = get_value(db, name, &propval)) != NULL)
- return err;
+ /* This gets called by mod_dav in preparation for a revprop change.
+ mod_dav_svn doesn't need to make any changes during rollback, but
+ we want the rollback mechanism to trigger. Making changes in
+ response to post-revprop-change hook errors would be positively
+ wrong. */
- ddp = apr_palloc(db->p, sizeof(*ddp));
- ddp->name = *name;
- ddp->value.data = propval ? propval->data : NULL;
- ddp->value.len = propval ? propval->len : 0;
+ *prollback = apr_palloc(db->p, sizeof(dav_deadprop_rollback));
- *prollback = ddp;
return NULL;
}
@@ -631,12 +633,20 @@ db_get_rollback(dav_db *db,
static dav_error *
db_apply_rollback(dav_db *db, dav_deadprop_rollback *rollback)
{
- if (rollback->value.data == NULL)
- {
- return db_remove(db, &rollback->name);
- }
+ dav_error *derr;
+
+ if (! db->resource->info->revprop_error)
+ return NULL;
+
+ /* Returning the original revprop change error here will cause this
+ detailed error to get returned to the client in preference to the
+ more generic error created by mod_dav. */
+ derr = dav_svn__convert_err(db->resource->info->revprop_error,
+ HTTP_INTERNAL_SERVER_ERROR, NULL,
+ db->resource->pool);
+ db->resource->info->revprop_error = NULL;
- return save_value(db, &rollback->name, &rollback->value);
+ return derr;
}