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;
 }
 
 


Reply via email to