Author: rhuijben Date: Wed Mar 26 19:43:06 2014 New Revision: 1582023 URL: http://svn.apache.org/r1582023 Log: Following up on r1557207, properly handle <S:fetch-props /> requests from servers in the ra-serf transition based xml parser.
This resolves a regression of the trunk code against Subversion <= 1.8 when talking to Subversion 1.6 or earlier repositories in non bulk mode. Most likely this resolves issue #4486. The easiest way to reproduce a hard failure I could find was $ svn co http://svn.webdav.org/repos/projects/neon/trunk neon \ --config-option servers:global:http-bulk-updates=false (Neon is hosted by a Subversion 1.3 mod_dav_svn) * subversion/libsvn_ra_serf/update.c (report_state_e): Add fetch props, and document a few other states that may be seen with older repositories. (update_ttable): Add a few missing states. (update_opened): Handle fetch-props. (update_closed): Add commented handlers for 3 special properties. Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c Modified: subversion/trunk/subversion/libsvn_ra_serf/update.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/update.c?rev=1582023&r1=1582022&r2=1582023&view=diff ============================================================================== --- subversion/trunk/subversion/libsvn_ra_serf/update.c (original) +++ subversion/trunk/subversion/libsvn_ra_serf/update.c Wed Mar 26 19:43:06 2014 @@ -84,12 +84,19 @@ typedef enum report_state_e { PROP, FETCH_FILE, + FETCH_PROPS, TXDELTA, CHECKED_IN, CHECKED_IN_HREF, MD5_CHECKSUM +#if 0 +, + VERSION_NAME, + CREATIONDATE, + CREATOR_DISPLAYNAME +#endif } report_state_e; @@ -193,8 +200,16 @@ static const svn_ra_serf__xml_transition { OPEN_FILE, S_, "prop", PROP, FALSE, { NULL }, FALSE }, +#if 0 + { OPEN_DIR, S_, "prop", PROP, + FALSE, { NULL }, FALSE }, +#endif { ADD_FILE, S_, "prop", PROP, FALSE, { NULL }, FALSE }, +#if 0 + { ADD_DIR, S_, "prop", PROP, + FALSE, { NULL }, FALSE }, +#endif { OPEN_FILE, S_, "txdelta", TXDELTA, FALSE, { "?base-checksum" }, TRUE }, @@ -214,6 +229,20 @@ static const svn_ra_serf__xml_transition { PROP, V_, "md5-checksum", MD5_CHECKSUM, TRUE, { NULL }, TRUE }, + /* These are only reported for <= 1.6.x mod_dav_svn */ + { OPEN_DIR, S_, "fetch-props", FETCH_PROPS, + FALSE, { NULL }, FALSE }, + { OPEN_FILE, S_, "fetch-props", FETCH_PROPS, + FALSE, { NULL }, FALSE }, + +#if 0 + { PROP, D_, "version-name", VERSION_NAME, + TRUE, { NULL }, TRUE }, + { PROP, D_, "creationdate", CREATIONDATE, + TRUE, { NULL }, TRUE }, + { PROP, D_, "creator-displayname", CREATOR_DISPLAYNAME, + TRUE, { NULL }, TRUE }, +#endif { 0 } }; @@ -1765,6 +1794,15 @@ update_opened(svn_ra_serf__xml_estate_t } } break; + + case FETCH_PROPS: + { + if (ctx->cur_file) + ctx->cur_file->fetch_props = TRUE; + else if (ctx->cur_dir) + ctx->cur_dir->fetch_props = TRUE; + } + break; } return SVN_NO_ERROR; @@ -2038,6 +2076,23 @@ update_closed(svn_ra_serf__xml_estate_t } } break; +#if 0 + case VERSION_NAME: + { + SVN_DBG(("Version: %s", cdata ? cdata->data : NULL)); + } + break; + case CREATIONDATE: + { + SVN_DBG(("Date: %s", cdata ? cdata->data : NULL)); + } + break; + case CREATOR_DISPLAYNAME: + { + SVN_DBG(("Author: %s", cdata ? cdata->data : NULL)); + } + break; +#endif } return SVN_NO_ERROR;
