Modified: subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_update_move.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_update_move.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_update_move.c (original) +++ subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_update_move.c Wed Nov 28 21:25:32 2018 @@ -411,6 +411,11 @@ create_tree_conflict(svn_skel_t **confli ? svn_dirent_join(wcroot->abspath, move_src_op_root_relpath, scratch_pool) : NULL; + const char *move_dst_op_root_abspath + = dst_op_root_relpath + ? svn_dirent_join(wcroot->abspath, + dst_op_root_relpath, scratch_pool) + : NULL; const char *old_repos_relpath_part = old_repos_relpath && old_version ? svn_relpath_skip_ancestor(old_version->path_in_repos, @@ -468,7 +473,7 @@ create_tree_conflict(svn_skel_t **confli SVN_ERR(svn_wc__conflict_read_tree_conflict(&existing_reason, &existing_action, - &existing_abspath, + &existing_abspath, NULL, db, wcroot->abspath, conflict, scratch_pool, @@ -500,6 +505,7 @@ create_tree_conflict(svn_skel_t **confli reason, action, move_src_op_root_abspath, + move_dst_op_root_abspath, result_pool, scratch_pool)); @@ -4099,7 +4105,7 @@ fetch_conflict_details(int *src_op_depth SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, action, - &move_src_op_root_abspath, + &move_src_op_root_abspath, NULL, db, local_abspath, conflict_skel, result_pool, scratch_pool));
Modified: subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_wcroot.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_wcroot.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_wcroot.c (original) +++ subversion/branches/swig-py3/subversion/libsvn_wc/wc_db_wcroot.c Wed Nov 28 21:25:32 2018 @@ -528,6 +528,7 @@ svn_wc__db_wcroot_parse_local_abspath(sv const char *adm_relpath; /* Non-NULL if WCROOT is found through a symlink: */ const char *symlink_wcroot_abspath = NULL; + apr_pool_t *iterpool; /* ### we need more logic for finding the database (if it is located ### outside of the wcroot) and then managing all of that within DB. @@ -613,16 +614,20 @@ svn_wc__db_wcroot_parse_local_abspath(sv database in the right place. If we find it... great! If not, then peel off some components, and try again. */ + iterpool = svn_pool_create(scratch_pool); adm_relpath = svn_wc_get_adm_dir(scratch_pool); while (TRUE) { svn_error_t *err; svn_node_kind_t adm_subdir_kind; - const char *adm_subdir = svn_dirent_join(local_abspath, adm_relpath, - scratch_pool); + const char *adm_subdir; - SVN_ERR(svn_io_check_path(adm_subdir, &adm_subdir_kind, scratch_pool)); + svn_pool_clear(iterpool); + + adm_subdir = svn_dirent_join(local_abspath, adm_relpath, iterpool); + + SVN_ERR(svn_io_check_path(adm_subdir, &adm_subdir_kind, iterpool)); if (adm_subdir_kind == svn_node_dir) { @@ -673,7 +678,7 @@ svn_wc__db_wcroot_parse_local_abspath(sv if (!moved_upwards || always_check) { SVN_ERR(get_old_version(&wc_format, local_abspath, - scratch_pool)); + iterpool)); if (wc_format != 0) break; } @@ -697,7 +702,7 @@ svn_wc__db_wcroot_parse_local_abspath(sv SVN_ERR(svn_io_check_resolved_path(local_abspath, &resolved_kind, - scratch_pool)); + iterpool)); if (resolved_kind == svn_node_dir) { /* Is this directory recorded in our hash? */ @@ -973,6 +978,7 @@ try_symlink_as_dir: } while (strcmp(scan_abspath, local_abspath) != 0); + svn_pool_destroy(iterpool); return SVN_NO_ERROR; } Modified: subversion/branches/swig-py3/subversion/libsvn_wc/wcroot_anchor.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/libsvn_wc/wcroot_anchor.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/libsvn_wc/wcroot_anchor.c (original) +++ subversion/branches/swig-py3/subversion/libsvn_wc/wcroot_anchor.c Wed Nov 28 21:25:32 2018 @@ -193,7 +193,10 @@ svn_wc__get_shelves_dir(char **dir, SVN_ERR(svn_wc__get_wcroot(&wcroot_abspath, wc_ctx, local_abspath, scratch_pool, scratch_pool)); - *dir = svn_dirent_join(wcroot_abspath, ".svn/shelves", result_pool); + *dir = svn_dirent_join(wcroot_abspath, + SVN_WC_ADM_DIR_NAME "/" SVN_WC__ADM_EXPERIMENTAL "/" + "shelves/v2", + result_pool); /* Ensure the directory exists. (Other versions of svn don't create it.) */ SVN_ERR(svn_io_make_dir_recursively(*dir, scratch_pool)); Modified: subversion/branches/swig-py3/subversion/mod_authz_svn/mod_authz_svn.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/mod_authz_svn/mod_authz_svn.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/mod_authz_svn/mod_authz_svn.c (original) +++ subversion/branches/swig-py3/subversion/mod_authz_svn/mod_authz_svn.c Wed Nov 28 21:25:32 2018 @@ -401,10 +401,12 @@ static svn_authz_t * get_access_conf(request_rec *r, authz_svn_config_rec *conf, apr_pool_t *scratch_pool) { + const char *cache_key = NULL; const char *access_file; const char *groups_file; const char *repos_path; const char *repos_url = NULL; + void *user_data = NULL; svn_authz_t *access_conf = NULL; svn_error_t *svn_err = SVN_NO_ERROR; dav_error *dav_err; @@ -464,19 +466,31 @@ get_access_conf(request_rec *r, authz_sv "Path to groups file is %s", groups_file); } - svn_err = svn_repos_authz_read3(&access_conf, - access_file, groups_file, - TRUE, NULL, - r->connection->pool, scratch_pool); - - if (svn_err) + cache_key = apr_pstrcat(scratch_pool, "mod_authz_svn:", + access_file, groups_file, SVN_VA_NULL); + apr_pool_userdata_get(&user_data, cache_key, r->connection->pool); + access_conf = user_data; + if (access_conf == NULL) { - log_svn_error(APLOG_MARK, r, - "Failed to load the mod_authz_svn config:", - svn_err, scratch_pool); - access_conf = NULL; - } + svn_err = svn_repos_authz_read3(&access_conf, access_file, + groups_file, TRUE, NULL, + r->connection->pool, + scratch_pool); + if (svn_err) + { + log_svn_error(APLOG_MARK, r, + "Failed to load the mod_authz_svn config:", + svn_err, scratch_pool); + access_conf = NULL; + } + else + { + /* Cache the open repos for the next request on this connection */ + apr_pool_userdata_set(access_conf, cache_key, + NULL, r->connection->pool); + } + } return access_conf; } @@ -898,7 +912,7 @@ access_checker(request_rec *r) { /* Set the note to force authn regardless of what access_checker_ex hook requires */ - apr_table_setn(r->notes, FORCE_AUTHN_NOTE, (const char*)1); + apr_table_setn(r->notes, FORCE_AUTHN_NOTE, "1"); /* provide the proper return so the access_checker hook doesn't * prevent the code from continuing on to the other auth hooks */ @@ -964,7 +978,7 @@ access_checker(request_rec *r) * ap_some_authn_rquired() without triggering an infinite * loop since the call will trigger this function to be * called again. */ - apr_table_setn(r->notes, IN_SOME_AUTHN_NOTE, (const char*)1); + apr_table_setn(r->notes, IN_SOME_AUTHN_NOTE, "1"); authn_required = ap_some_authn_required(r); apr_table_unset(r->notes, IN_SOME_AUTHN_NOTE); if (authn_required) @@ -1007,7 +1021,7 @@ check_user_id(request_rec *r) status = req_check_access(r, conf, &repos_path, &dest_repos_path); if (status == OK) { - apr_table_setn(r->notes, "authz_svn-anon-ok", (const char*)1); + apr_table_setn(r->notes, "authz_svn-anon-ok", "1"); log_access_verdict(APLOG_MARK, r, 1, FALSE, repos_path, dest_repos_path); return OK; } Modified: subversion/branches/swig-py3/subversion/mod_dav_svn/mod_dav_svn.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/mod_dav_svn/mod_dav_svn.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/mod_dav_svn/mod_dav_svn.c (original) +++ subversion/branches/swig-py3/subversion/mod_dav_svn/mod_dav_svn.c Wed Nov 28 21:25:32 2018 @@ -231,6 +231,9 @@ merge_server_config(apr_pool_t *p, void newconf->compression_level = child->compression_level; } + newconf->use_utf8 = INHERIT_VALUE(parent, child, use_utf8); + svn_utf_initialize2(newconf->use_utf8, p); + return newconf; } @@ -1255,7 +1258,7 @@ static int dav_svn__translate_name(reque /* Leave a note to ourselves so that we know not to decline in the * map_to_storage hook. */ - apr_table_setn(r->notes, NO_MAP_TO_STORAGE_NOTE, (const char*)1); + apr_table_setn(r->notes, NO_MAP_TO_STORAGE_NOTE, "1"); return OK; } Modified: subversion/branches/swig-py3/subversion/mod_dav_svn/reports/file-revs.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/mod_dav_svn/reports/file-revs.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/mod_dav_svn/reports/file-revs.c (original) +++ subversion/branches/swig-py3/subversion/mod_dav_svn/reports/file-revs.c Wed Nov 28 21:25:32 2018 @@ -214,7 +214,7 @@ file_rev_handler(void *baton, frb->compression_level, pool); *window_handler = delta_window_handler; *window_baton = frb; - /* Start the txdelta element wich will be terminated by the window + /* Start the txdelta element which will be terminated by the window handler together with the file-rev element. */ SVN_ERR(dav_svn__brigade_puts(frb->bb, frb->output, "<S:txdelta>")); } Modified: subversion/branches/swig-py3/subversion/mod_dav_svn/reports/replay.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/mod_dav_svn/reports/replay.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/mod_dav_svn/reports/replay.c (original) +++ subversion/branches/swig-py3/subversion/mod_dav_svn/reports/replay.c Wed Nov 28 21:25:32 2018 @@ -437,7 +437,7 @@ dav_svn__replay_report(const dav_resourc URL, and BASE_DIR is embedded in the request body. The old-school (and incorrect, see issue #4287 -- - http://subversion.tigris.org/issues/show_bug.cgi?id=4287) way was + https://issues.apache.org/jira/browse/SVN-4287) way was to REPORT on the public URL of the BASE_DIR and embed the REV in the report body. */ Modified: subversion/branches/swig-py3/subversion/mod_dav_svn/repos.c URL: http://svn.apache.org/viewvc/subversion/branches/swig-py3/subversion/mod_dav_svn/repos.c?rev=1847678&r1=1847677&r2=1847678&view=diff ============================================================================== --- subversion/branches/swig-py3/subversion/mod_dav_svn/repos.c (original) +++ subversion/branches/swig-py3/subversion/mod_dav_svn/repos.c Wed Nov 28 21:25:32 2018 @@ -2861,6 +2861,13 @@ open_stream(const dav_resource *resource "Resource body changes may only be made to " "working resources (at this time)."); } + if (!resource->info->root.root) + { + return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED, + 0, 0, + "Resource body changes may only be made to " + "checked-out resources (at this time)."); + } } /* ### TODO: Can we support range writes someday? */
