You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2012/10/21 04:00:47 UTC
svn commit: r1400556 [21/29] - in /subversion/branches/ev2-export: ./ build/
build/ac-macros/ build/generator/ build/generator/templates/ build/hudson/
contrib/client-side/emacs/ contrib/client-side/svn-push/
contrib/client-side/svnmerge/ contrib/hook-...
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_private.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_private.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_private.h Sun Oct 21 02:00:31 2012
@@ -36,7 +36,7 @@
struct svn_wc__db_t {
/* We need the config whenever we run into a new WC directory, in order
to figure out where we should look for the corresponding datastore. */
- const svn_config_t *config;
+ svn_config_t *config;
/* Should we attempt to automatically upgrade the database when it is
opened, and found to be not-current? */
@@ -170,6 +170,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
const char *dir_abspath,
const char *sdb_fname,
svn_sqlite__mode_t smode,
+ svn_boolean_t exclusive,
const char *const *my_statements,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_util.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_util.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_util.c Sun Oct 21 02:00:31 2012
@@ -114,6 +114,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
const char *dir_abspath,
const char *sdb_fname,
svn_sqlite__mode_t smode,
+ svn_boolean_t exclusive,
const char *const *my_statements,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -140,6 +141,9 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
my_statements ? my_statements : statements,
0, NULL, result_pool, scratch_pool));
+ if (exclusive)
+ SVN_ERR(svn_sqlite__exec_statements(*sdb, STMT_PRAGMA_LOCKING_MODE));
+
SVN_ERR(svn_sqlite__create_scalar_function(*sdb, "relpath_depth", 1,
relpath_depth, NULL));
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_wcroot.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/wc_db_wcroot.c Sun Oct 21 02:00:31 2012
@@ -26,6 +26,7 @@
#include <assert.h>
#include "svn_dirent_uri.h"
+#include "svn_path.h"
#include "wc.h"
#include "adm_files.h"
@@ -185,7 +186,7 @@ close_wcroot(void *data)
svn_error_t *
svn_wc__db_open(svn_wc__db_t **db,
- const svn_config_t *config,
+ svn_config_t *config,
svn_boolean_t auto_upgrade,
svn_boolean_t enforce_empty_wq,
apr_pool_t *result_pool,
@@ -353,6 +354,40 @@ compute_relpath(const svn_wc__db_wcroot_
}
+/* Return in *LINK_TARGET_ABSPATH the absolute path the symlink at
+ * LOCAL_ABSPATH is pointing to. Perform all allocations in POOL. */
+static svn_error_t *
+read_link_target(const char **link_target_abspath,
+ const char *local_abspath,
+ apr_pool_t *pool)
+{
+ svn_string_t *link_target;
+ const char *canon_link_target;
+
+ SVN_ERR(svn_io_read_link(&link_target, local_abspath, pool));
+ if (link_target->len == 0)
+ return svn_error_createf(SVN_ERR_WC_NOT_SYMLINK, NULL,
+ _("The symlink at '%s' points nowhere"),
+ svn_dirent_local_style(local_abspath, pool));
+
+ canon_link_target = svn_dirent_canonicalize(link_target->data, pool);
+
+ /* Treat relative symlinks as relative to LOCAL_ABSPATH's parent. */
+ if (!svn_dirent_is_absolute(canon_link_target))
+ canon_link_target = svn_dirent_join(svn_dirent_dirname(local_abspath,
+ pool),
+ canon_link_target, pool);
+
+ /* Collapse any .. in the symlink part of the path. */
+ if (svn_path_is_backpath_present(canon_link_target))
+ SVN_ERR(svn_dirent_get_absolute(link_target_abspath, canon_link_target,
+ pool));
+ else
+ *link_target_abspath = canon_link_target;
+
+ return SVN_NO_ERROR;
+}
+
svn_error_t *
svn_wc__db_wcroot_parse_local_abspath(svn_wc__db_wcroot_t **wcroot,
const char **local_relpath,
@@ -473,6 +508,18 @@ svn_wc__db_wcroot_parse_local_abspath(sv
if (adm_subdir_kind == svn_node_dir)
{
+ svn_boolean_t sqlite_exclusive = FALSE;
+
+ err = svn_config_get_bool(db->config, &sqlite_exclusive,
+ SVN_CONFIG_SECTION_WORKING_COPY,
+ SVN_CONFIG_OPTION_SQLITE_EXCLUSIVE,
+ FALSE);
+ if (err)
+ {
+ svn_error_clear(err);
+ sqlite_exclusive = FALSE;
+ }
+
/* We always open the database in read/write mode. If the database
isn't writable in the filesystem, SQLite will internally open
it as read-only, and we'll get an error if we try to do a write
@@ -482,7 +529,8 @@ svn_wc__db_wcroot_parse_local_abspath(sv
we're caching database handles, it make sense to be as permissive
as the filesystem allows. */
err = svn_wc__db_util_open_db(&sdb, local_abspath, SDB_FILE,
- svn_sqlite__mode_readwrite, NULL,
+ svn_sqlite__mode_readwrite,
+ sqlite_exclusive, NULL,
db->state_pool, scratch_pool);
if (err == NULL)
{
@@ -543,6 +591,8 @@ svn_wc__db_wcroot_parse_local_abspath(sv
if (found_wcroot)
break;
+ SVN_ERR(read_link_target(&local_abspath, local_abspath,
+ scratch_pool));
try_symlink_as_dir:
kind = svn_kind_dir;
moved_upwards = FALSE;
@@ -599,11 +649,22 @@ try_symlink_as_dir:
inside the wcroot, but we know the abspath is this directory
(ie. where we found it). */
- SVN_ERR(svn_wc__db_pdh_create_wcroot(wcroot,
+ err = svn_wc__db_pdh_create_wcroot(wcroot,
apr_pstrdup(db->state_pool, local_abspath),
sdb, wc_id, FORMAT_FROM_SDB,
db->auto_upgrade, db->enforce_empty_wq,
- db->state_pool, scratch_pool));
+ db->state_pool, scratch_pool);
+ if (err && err->apr_err == SVN_ERR_WC_UNSUPPORTED_FORMAT &&
+ kind == svn_kind_symlink)
+ {
+ /* We found an unsupported WC after traversing upwards from a
+ * symlink. Fall through to code below to check if the symlink
+ * points at a supported WC. */
+ svn_error_clear(err);
+ *wcroot = NULL;
+ }
+ else
+ SVN_ERR(err);
}
else
{
@@ -615,16 +676,17 @@ try_symlink_as_dir:
db->state_pool, scratch_pool));
}
- {
- const char *dir_relpath;
+ if (*wcroot)
+ {
+ const char *dir_relpath;
+
+ /* The subdirectory's relpath is easily computed relative to the
+ wcroot that we just found. */
+ dir_relpath = compute_relpath(*wcroot, local_dir_abspath, NULL);
- /* The subdirectory's relpath is easily computed relative to the
- wcroot that we just found. */
- dir_relpath = compute_relpath(*wcroot, local_dir_abspath, NULL);
-
- /* And the result local_relpath may include a filename. */
- *local_relpath = svn_relpath_join(dir_relpath, build_relpath, result_pool);
- }
+ /* And the result local_relpath may include a filename. */
+ *local_relpath = svn_relpath_join(dir_relpath, build_relpath, result_pool);
+ }
if (kind == svn_kind_symlink)
{
@@ -638,33 +700,38 @@ try_symlink_as_dir:
* points to a directory, try to find a wcroot in that directory
* instead. */
- err = svn_wc__db_read_info_internal(&status, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, &conflicted, NULL, NULL, NULL,
- NULL, NULL, NULL,
- *wcroot, *local_relpath,
- scratch_pool, scratch_pool);
- if (err)
+ if (*wcroot)
{
- if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
- && !SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
- return svn_error_trace(err);
+ err = svn_wc__db_read_info_internal(&status, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &conflicted,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, *wcroot, *local_relpath,
+ scratch_pool, scratch_pool);
+ if (err)
+ {
+ if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND
+ && !SVN_WC__ERR_IS_NOT_CURRENT_WC(err))
+ return svn_error_trace(err);
- svn_error_clear(err);
- retry_if_dir = TRUE; /* The symlink is unversioned. */
+ svn_error_clear(err);
+ retry_if_dir = TRUE; /* The symlink is unversioned. */
+ }
+ else
+ {
+ /* The symlink is versioned, or obstructs a versioned node.
+ * Ignore non-conflicted not-present/excluded nodes.
+ * This allows the symlink to redirect the wcroot query to a
+ * directory, regardless of 'invisible' nodes in this WC. */
+ retry_if_dir = ((status == svn_wc__db_status_not_present ||
+ status == svn_wc__db_status_excluded ||
+ status == svn_wc__db_status_server_excluded)
+ && !conflicted);
+ }
}
else
- {
- /* The symlink is versioned, or obstructs a versioned node.
- * Ignore non-conflicted not-present/excluded nodes.
- * This allows the symlink to redirect the wcroot query to a
- * directory, regardless of 'invisible' nodes in this WC. */
- retry_if_dir = ((status == svn_wc__db_status_not_present ||
- status == svn_wc__db_status_excluded ||
- status == svn_wc__db_status_server_excluded)
- && !conflicted);
- }
+ retry_if_dir = TRUE;
if (retry_if_dir)
{
@@ -675,7 +742,11 @@ try_symlink_as_dir:
scratch_pool));
if (resolved_kind == svn_node_dir)
{
- local_abspath = original_abspath;
+ SVN_ERR(read_link_target(&local_abspath, original_abspath,
+ scratch_pool));
+ /* This handle was opened in this function but is not going
+ to be used further so close it. */
+ SVN_ERR(svn_sqlite__close(sdb));
goto try_symlink_as_dir;
}
}
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.c Sun Oct 21 02:00:31 2012
@@ -739,6 +739,7 @@ run_file_remove(svn_wc__db_t *db,
svn_error_t *
svn_wc__wq_build_file_remove(svn_skel_t **work_item,
svn_wc__db_t *db,
+ const char *wri_abspath,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool)
@@ -746,7 +747,7 @@ svn_wc__wq_build_file_remove(svn_skel_t
const char *local_relpath;
*work_item = svn_skel__make_empty_list(result_pool);
- SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, local_abspath,
+ SVN_ERR(svn_wc__db_to_relpath(&local_relpath, db, wri_abspath,
local_abspath, result_pool, scratch_pool));
svn_skel__prepend_str(local_relpath, *work_item, result_pool);
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/workqueue.h Sun Oct 21 02:00:31 2012
@@ -114,10 +114,12 @@ svn_wc__wq_build_file_install(svn_skel_t
/* Set *WORK_ITEM to a new work item that will remove a single
- file. */
+ file LOCAL_ABSPATH from the working copy identified by the pair DB,
+ WRI_ABSPATH. */
svn_error_t *
svn_wc__wq_build_file_remove(svn_skel_t **work_item,
svn_wc__db_t *db,
+ const char *wri_abspath,
const char *local_abspath,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
Modified: subversion/branches/ev2-export/subversion/mod_authz_svn/mod_authz_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_authz_svn/mod_authz_svn.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_authz_svn/mod_authz_svn.c (original)
+++ subversion/branches/ev2-export/subversion/mod_authz_svn/mod_authz_svn.c Sun Oct 21 02:00:31 2012
@@ -44,6 +44,7 @@
#include "svn_config.h"
#include "svn_string.h"
#include "svn_repos.h"
+#include "svn_pools.h"
#include "svn_dirent_uri.h"
#include "private/svn_fspath.h"
@@ -164,7 +165,8 @@ static const command_rec authz_svn_cmds[
* Get the, possibly cached, svn_authz_t for this request.
*/
static svn_authz_t *
-get_access_conf(request_rec *r, authz_svn_config_rec *conf)
+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;
@@ -182,7 +184,7 @@ get_access_conf(request_rec *r, authz_sv
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "%s", dav_err->desc);
return NULL;
}
- access_file = svn_dirent_join_many(r->pool, repos_path, "conf",
+ access_file = svn_dirent_join_many(scratch_pool, repos_path, "conf",
conf->repo_relative_access_file,
NULL);
}
@@ -194,7 +196,7 @@ get_access_conf(request_rec *r, authz_sv
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
"Path to authz file is %s", access_file);
- cache_key = apr_pstrcat(r->pool, "mod_authz_svn:",
+ cache_key = apr_pstrcat(scratch_pool, "mod_authz_svn:",
access_file, (char *)NULL);
apr_pool_userdata_get(&user_data, cache_key, r->connection->pool);
access_conf = user_data;
@@ -243,12 +245,13 @@ convert_case(char *text, svn_boolean_t t
/* Return the username to authorize, with case-conversion performed if
CONF->force_username_case is set. */
static char *
-get_username_to_authorize(request_rec *r, authz_svn_config_rec *conf)
+get_username_to_authorize(request_rec *r, authz_svn_config_rec *conf,
+ apr_pool_t *pool)
{
char *username_to_authorize = r->user;
if (username_to_authorize && conf->force_username_case)
{
- username_to_authorize = apr_pstrdup(r->pool, r->user);
+ username_to_authorize = apr_pstrdup(pool, r->user);
convert_case(username_to_authorize,
strcasecmp(conf->force_username_case, "upper") == 0);
}
@@ -283,7 +286,8 @@ req_check_access(request_rec *r,
svn_authz_t *access_conf = NULL;
svn_error_t *svn_err;
char errbuf[256];
- const char *username_to_authorize = get_username_to_authorize(r, conf);
+ const char *username_to_authorize = get_username_to_authorize(r, conf,
+ r->pool);
switch (r->method_number)
{
@@ -419,7 +423,7 @@ req_check_access(request_rec *r,
}
/* Retrieve/cache authorization file */
- access_conf = get_access_conf(r,conf);
+ access_conf = get_access_conf(r,conf, r->pool);
if (access_conf == NULL)
return DECLINED;
@@ -577,14 +581,13 @@ log_access_verdict(LOG_ARGS_SIGNATURE,
}
/*
- * This function is used as a provider to allow mod_dav_svn to bypass the
- * generation of an apache request when checking GET access from
- * "mod_dav_svn/authz.c" .
+ * Implementation of subreq_bypass with scratch_pool parameter.
*/
static int
-subreq_bypass(request_rec *r,
- const char *repos_path,
- const char *repos_name)
+subreq_bypass2(request_rec *r,
+ const char *repos_path,
+ const char *repos_name,
+ apr_pool_t *scratch_pool)
{
svn_error_t *svn_err = NULL;
svn_authz_t *access_conf = NULL;
@@ -595,7 +598,7 @@ subreq_bypass(request_rec *r,
conf = ap_get_module_config(r->per_dir_config,
&authz_svn_module);
- username_to_authorize = get_username_to_authorize(r, conf);
+ username_to_authorize = get_username_to_authorize(r, conf, scratch_pool);
/* If configured properly, this should never be true, but just in case. */
if (!conf->anonymous
@@ -606,7 +609,7 @@ subreq_bypass(request_rec *r,
}
/* Retrieve authorization file */
- access_conf = get_access_conf(r, conf);
+ access_conf = get_access_conf(r, conf, scratch_pool);
if (access_conf == NULL)
return HTTP_FORBIDDEN;
@@ -620,7 +623,7 @@ subreq_bypass(request_rec *r,
username_to_authorize,
svn_authz_none|svn_authz_read,
&authz_access_granted,
- r->pool);
+ scratch_pool);
if (svn_err)
{
ap_log_rerror(APLOG_MARK, APLOG_ERR,
@@ -650,6 +653,26 @@ subreq_bypass(request_rec *r,
}
/*
+ * This function is used as a provider to allow mod_dav_svn to bypass the
+ * generation of an apache request when checking GET access from
+ * "mod_dav_svn/authz.c" .
+ */
+static int
+subreq_bypass(request_rec *r,
+ const char *repos_path,
+ const char *repos_name)
+{
+ int status;
+ apr_pool_t *scratch_pool;
+
+ scratch_pool = svn_pool_create(r->pool);
+ status = subreq_bypass2(r, repos_path, repos_name, scratch_pool);
+ svn_pool_destroy(scratch_pool);
+
+ return status;
+}
+
+/*
* Hooks
*/
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/activity.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/activity.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/activity.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/activity.c Sun Oct 21 02:00:31 2012
@@ -240,16 +240,21 @@ dav_svn__store_activity(const dav_svn_re
dav_error *
dav_svn__create_txn(const dav_svn_repos *repos,
const char **ptxn_name,
+ apr_hash_t *revprops,
apr_pool_t *pool)
{
svn_revnum_t rev;
svn_fs_txn_t *txn;
svn_error_t *serr;
- apr_hash_t *revprop_table = apr_hash_make(pool);
+
+ if (! revprops)
+ {
+ revprops = apr_hash_make(pool);
+ }
if (repos->username)
{
- apr_hash_set(revprop_table, SVN_PROP_REVISION_AUTHOR, APR_HASH_KEY_STRING,
+ apr_hash_set(revprops, SVN_PROP_REVISION_AUTHOR, APR_HASH_KEY_STRING,
svn_string_create(repos->username, pool));
}
@@ -262,8 +267,7 @@ dav_svn__create_txn(const dav_svn_repos
}
serr = svn_repos_fs_begin_txn_for_commit2(&txn, repos->repos, rev,
- revprop_table,
- repos->pool);
+ revprops, repos->pool);
if (serr != NULL)
{
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/dav_svn.h?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/dav_svn.h Sun Oct 21 02:00:31 2012
@@ -304,9 +304,6 @@ svn_boolean_t dav_svn__get_autoversionin
/* for the repository referred to by this request, are bulk updates allowed? */
svn_boolean_t dav_svn__get_bulk_updates_flag(request_rec *r);
-/* for the repository referred to by this request, should httpv2 be advertised? */
-svn_boolean_t dav_svn__get_v2_protocol_flag(request_rec *r);
-
/* for the repository referred to by this request, are subrequests active? */
svn_boolean_t dav_svn__get_pathauthz_flag(request_rec *r);
@@ -328,6 +325,17 @@ authz_svn__subreq_bypass_func_t dav_svn_
SVNParentPath allowed? */
svn_boolean_t dav_svn__get_list_parentpath_flag(request_rec *r);
+/* For the repository referred to by this request, should HTTPv2
+ protocol support be advertised? Note that this also takes into
+ account the support level expected of based on the specified
+ master server version (if provided via SVNMasterVersion). */
+svn_boolean_t dav_svn__check_httpv2_support(request_rec *r);
+
+/* For the repository referred to by this request, should ephemeral
+ txnprop support be advertised? */
+svn_boolean_t dav_svn__check_ephemeral_txnprops_support(request_rec *r);
+
+
/* SPECIAL URI
@@ -376,6 +384,11 @@ const char *dav_svn__get_xslt_uri(reques
/* ### Is this assumed to be URI-encoded? */
const char *dav_svn__get_master_uri(request_rec *r);
+/* Return the version of the master server (used for mirroring) iff a
+ master URI is in place for this location; otherwise, return NULL.
+ Comes from the <SVNMasterVersion> directive. */
+svn_version_t *dav_svn__get_master_version(request_rec *r);
+
/* Return the disk path to the activities db.
Comes from the <SVNActivitiesDB> directive. */
const char *dav_svn__get_activities_db(request_rec *r);
@@ -386,10 +399,10 @@ const char *dav_svn__get_activities_db(r
const char *dav_svn__get_root_dir(request_rec *r);
/* Return the data compression level to be used over the wire. */
-int dav_svn__get_compression_level(void);
+int dav_svn__get_compression_level(request_rec *r);
/* Return the hook script environment parsed from the configuration. */
-apr_hash_t *dav_svn__get_hooks_env(request_rec *r);
+const char *dav_svn__get_hooks_env(request_rec *r);
/** For HTTP protocol v2, these are the new URIs and URI stubs
returned to the client in our OPTIONS response. They all depend
@@ -420,10 +433,17 @@ const char *dav_svn__get_vtxn_root_stub(
/*** activity.c ***/
/* Create a new transaction based on HEAD in REPOS, setting *PTXN_NAME
- to the name of that transaction. Use POOL for allocations. */
+ to the name of that transaction. REVPROPS is an optional hash of
+ const char * property names and const svn_string_t * values which
+ will be set as transactions properties on the transaction this
+ function creates. Use POOL for allocations.
+
+ NOTE: This function will overwrite the svn:author property, if
+ any, found in REVPROPS. */
dav_error *
dav_svn__create_txn(const dav_svn_repos *repos,
const char **ptxn_name,
+ apr_hash_t *revprops,
apr_pool_t *pool);
/* If it exists, abort the transaction named TXN_NAME from REPOS. Use
@@ -620,6 +640,7 @@ static const dav_report_elem dav_svn__re
{ SVN_XML_NAMESPACE, "replay-report" },
{ SVN_XML_NAMESPACE, "get-deleted-rev-report" },
{ SVN_XML_NAMESPACE, SVN_DAV__MERGEINFO_REPORT },
+ { SVN_XML_NAMESPACE, SVN_DAV__INHERITED_PROPS_REPORT },
{ NULL, NULL },
};
@@ -667,23 +688,22 @@ dav_svn__get_deleted_rev_report(const da
const apr_xml_doc *doc,
ap_filter_t *output);
+dav_error *
+dav_svn__get_inherited_props_report(const dav_resource *resource,
+ const apr_xml_doc *doc,
+ ap_filter_t *output);
/*** posts/ ***/
-/* The list of Subversion's custom POSTs. */
-/* ### TODO: Populate this list and transmit its contents in the
- ### OPTIONS response.
-static const char * dav_svn__posts_list[] = {
- "create-txn",
- NULL
-};
-*/
-
/* The various POST handlers, defined in posts/, and used by repos.c. */
dav_error *
dav_svn__post_create_txn(const dav_resource *resource,
svn_skel_t *request_skel,
ap_filter_t *output);
+dav_error *
+dav_svn__post_create_txn_with_props(const dav_resource *resource,
+ svn_skel_t *request_skel,
+ ap_filter_t *output);
/*** authz.c ***/
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/deadprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/deadprops.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/deadprops.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/deadprops.c Sun Oct 21 02:00:31 2012
@@ -1,5 +1,7 @@
/*
- * deadprops.c: mod_dav_svn dead property provider functions for Subversion
+ * deadprops.c: mod_dav_svn provider functions for "dead properties"
+ * (properties implemented by Subversion or its users,
+ * not as part of the WebDAV specification).
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -512,10 +514,6 @@ db_store(dav_db *db,
/* ### namespace check? */
if (elem->first_child && !strcmp(elem->first_child->name, SVN_DAV__OLD_VALUE))
{
- const char *propname;
-
- get_repos_propname(db, name, &propname);
-
/* Parse OLD_PROPVAL. */
old_propval = svn_string_create(dav_xml_get_cdata(elem->first_child, pool,
0 /* strip_white */),
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/liveprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/liveprops.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/liveprops.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/liveprops.c Sun Oct 21 02:00:31 2012
@@ -1,5 +1,7 @@
/*
- * liveprops.c: mod_dav_svn live property provider functions for Subversion
+ * liveprops.c: mod_dav_svn provider functions for "live properties"
+ * (properties implemented by the WebDAV specification
+ * itself, not unique to Subversion or its users).
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@@ -281,7 +283,7 @@ insert_prop_internal(const dav_resource
const char *value = NULL;
const char *s;
const dav_liveprop_spec *info;
- int global_ns;
+ long global_ns;
svn_error_t *serr;
/* ### TODO proper errors */
@@ -785,11 +787,11 @@ insert_prop_internal(const dav_resource
if (what == DAV_PROP_INSERT_NAME
|| (what == DAV_PROP_INSERT_VALUE && *value == '\0')) {
- s = apr_psprintf(result_pool, "<lp%d:%s/>" DEBUG_CR, global_ns,
+ s = apr_psprintf(result_pool, "<lp%ld:%s/>" DEBUG_CR, global_ns,
info->name);
}
else if (what == DAV_PROP_INSERT_VALUE) {
- s = apr_psprintf(result_pool, "<lp%d:%s>%s</lp%d:%s>" DEBUG_CR,
+ s = apr_psprintf(result_pool, "<lp%ld:%s>%s</lp%ld:%s>" DEBUG_CR,
global_ns, info->name, value, global_ns, info->name);
}
else {
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/mod_dav_svn.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/mod_dav_svn.c Sun Oct 21 02:00:31 2012
@@ -42,6 +42,7 @@
#include "mod_dav_svn.h"
#include "private/svn_fspath.h"
+#include "private/svn_subr_private.h"
#include "dav_svn.h"
#include "mod_authz_svn.h"
@@ -59,6 +60,12 @@
typedef struct server_conf_t {
const char *special_uri;
svn_boolean_t use_utf8;
+
+ /* The compression level we will pass to svn_txdelta_to_svndiff3()
+ * for wire-compression. Negative value used to specify default
+ compression level. */
+ int compression_level;
+
} server_conf_t;
@@ -92,11 +99,12 @@ typedef struct dir_conf_t {
enum conf_flag list_parentpath; /* whether to allow GET of parentpath */
const char *root_dir; /* our top-level directory */
const char *master_uri; /* URI to the master SVN repos */
+ svn_version_t *master_version; /* version of master server */
const char *activities_db; /* path to activities database(s) */
enum conf_flag txdelta_cache; /* whether to enable txdelta caching */
enum conf_flag fulltext_cache; /* whether to enable fulltext caching */
enum conf_flag revprop_cache; /* whether to enable revprop caching */
- apr_hash_t *hooks_env; /* environment for hook scripts */
+ const char *hooks_env; /* path to hook script env config file */
} dir_conf_t;
@@ -109,10 +117,6 @@ extern module AP_MODULE_DECLARE_DATA dav
/* The authz_svn provider for bypassing path authz. */
static authz_svn__subreq_bypass_func_t pathauthz_bypass_func = NULL;
-/* The compression level we will pass to svn_txdelta_to_svndiff3()
- * for wire-compression */
-static int svn__compression_level = SVN_DELTA_COMPRESSION_LEVEL_DEFAULT;
-
static int
init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
{
@@ -163,7 +167,11 @@ init_dso(apr_pool_t *pconf, apr_pool_t *
static void *
create_server_config(apr_pool_t *p, server_rec *s)
{
- return apr_pcalloc(p, sizeof(server_conf_t));
+ server_conf_t *conf = apr_pcalloc(p, sizeof(server_conf_t));
+
+ conf->compression_level = -1;
+
+ return conf;
}
@@ -179,6 +187,17 @@ merge_server_config(apr_pool_t *p, void
newconf->special_uri = INHERIT_VALUE(parent, child, special_uri);
+ if (child->compression_level < 0)
+ {
+ /* Inherit compression level from parent if not configured for this
+ VirtualHost. */
+ newconf->compression_level = parent->compression_level;
+ }
+ else
+ {
+ newconf->compression_level = child->compression_level;
+ }
+
return newconf;
}
@@ -214,6 +233,7 @@ merge_dir_config(apr_pool_t *p, void *ba
newconf->fs_path = INHERIT_VALUE(parent, child, fs_path);
newconf->master_uri = INHERIT_VALUE(parent, child, master_uri);
+ newconf->master_version = INHERIT_VALUE(parent, child, master_version);
newconf->activities_db = INHERIT_VALUE(parent, child, activities_db);
newconf->repo_name = INHERIT_VALUE(parent, child, repo_name);
newconf->xslt_uri = INHERIT_VALUE(parent, child, xslt_uri);
@@ -282,6 +302,25 @@ SVNMasterURI_cmd(cmd_parms *cmd, void *c
static const char *
+SVNMasterVersion_cmd(cmd_parms *cmd, void *config, const char *arg1)
+{
+ dir_conf_t *conf = config;
+ svn_error_t *err;
+ svn_version_t *version;
+
+ err = svn_version__parse_version_string(&version, arg1, cmd->pool);
+ if (err)
+ {
+ svn_error_clear(err);
+ return "Malformed master server version string.";
+ }
+
+ conf->master_version = version;
+ return NULL;
+}
+
+
+static const char *
SVNActivitiesDB_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
dir_conf_t *conf = config;
@@ -513,6 +552,7 @@ SVNInMemoryCacheSize_cmd(cmd_parms *cmd,
static const char *
SVNCompressionLevel_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
+ server_conf_t *conf;
int value = 0;
svn_error_t *err = svn_cstring_atoi(&value, arg1);
if (err)
@@ -530,7 +570,9 @@ SVNCompressionLevel_cmd(cmd_parms *cmd,
(int)SVN_DELTA_COMPRESSION_LEVEL_NONE,
(int)SVN_DELTA_COMPRESSION_LEVEL_MAX);
- svn__compression_level = value;
+ conf = ap_get_module_config(cmd->server->module_config,
+ &dav_svn_module);
+ conf->compression_level = value;
return NULL;
}
@@ -550,43 +592,9 @@ SVNUseUTF8_cmd(cmd_parms *cmd, void *con
static const char *
SVNHooksEnv_cmd(cmd_parms *cmd, void *config, const char *arg1)
{
- apr_array_header_t *var;
-
- var = svn_cstring_split(arg1, "=", TRUE, cmd->pool);
- if (var && var->nelts >= 2)
- {
- dir_conf_t *conf = config;
- const char *name;
- const char *val;
-
- if (! conf->hooks_env)
- conf->hooks_env = apr_hash_make(cmd->pool);
-
- name = apr_pstrdup(apr_hash_pool_get(conf->hooks_env),
- APR_ARRAY_IDX(var, 0, const char *));
-
- /* Special case for values which contain '='. */
- if (var->nelts > 2)
- {
- svn_stringbuf_t *buf;
- int i;
-
- buf = svn_stringbuf_create(APR_ARRAY_IDX(var, 1, const char *),
- cmd->pool);
- for (i = 2; i < var->nelts; i++)
- {
- svn_stringbuf_appendbyte(buf, '=');
- svn_stringbuf_appendcstr(buf, APR_ARRAY_IDX(var, i, const char *));
- }
+ dir_conf_t *conf = config;
- val = apr_pstrdup(apr_hash_pool_get(conf->hooks_env), buf->data);
- }
- else
- val = apr_pstrdup(apr_hash_pool_get(conf->hooks_env),
- APR_ARRAY_IDX(var, 1, const char *));
-
- apr_hash_set(conf->hooks_env, name, APR_HASH_KEY_STRING, val);
- }
+ conf->hooks_env = svn_dirent_internal_style(arg1, cmd->pool);
return NULL;
}
@@ -689,6 +697,16 @@ dav_svn__get_master_uri(request_rec *r)
}
+svn_version_t *
+dav_svn__get_master_version(request_rec *r)
+{
+ dir_conf_t *conf;
+
+ conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
+ return conf->master_uri ? conf->master_version : NULL;
+}
+
+
const char *
dav_svn__get_xslt_uri(request_rec *r)
{
@@ -786,12 +804,39 @@ dav_svn__get_bulk_updates_flag(request_r
svn_boolean_t
-dav_svn__get_v2_protocol_flag(request_rec *r)
+dav_svn__check_httpv2_support(request_rec *r)
{
dir_conf_t *conf;
+ svn_boolean_t available;
conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
- return conf->v2_protocol == CONF_FLAG_ON;
+ available = conf->v2_protocol == CONF_FLAG_ON;
+
+ /* If our configuration says that HTTPv2 is available, but we are
+ proxying requests to a master Subversion server which lacks
+ support for HTTPv2, we dumb ourselves down. */
+ if (available)
+ {
+ svn_version_t *version = dav_svn__get_master_version(r);
+ if (version && (! svn_version__at_least(version, 1, 7, 0)))
+ available = FALSE;
+ }
+ return available;
+}
+
+
+svn_boolean_t
+dav_svn__check_ephemeral_txnprops_support(request_rec *r)
+{
+ svn_version_t *version = dav_svn__get_master_version(r);
+
+ /* We know this server supports ephemeral txnprops. But if we're
+ proxying requests to a master server, we need to see if it
+ supports them, too. */
+ if (version && (! svn_version__at_least(version, 1, 8, 0)))
+ return FALSE;
+
+ return TRUE;
}
@@ -873,12 +918,24 @@ dav_svn__get_revprop_cache_flag(request_
int
-dav_svn__get_compression_level(void)
+dav_svn__get_compression_level(request_rec *r)
{
- return svn__compression_level;
+ server_conf_t *conf;
+
+ conf = ap_get_module_config(r->server->module_config,
+ &dav_svn_module);
+
+ if (conf->compression_level < 0)
+ {
+ return SVN_DELTA_COMPRESSION_LEVEL_DEFAULT;
+ }
+ else
+ {
+ return conf->compression_level;
+ }
}
-apr_hash_t *
+const char *
dav_svn__get_hooks_env(request_rec *r)
{
dir_conf_t *conf;
@@ -1077,6 +1134,11 @@ static const command_rec cmds[] =
"specifies a URI to access a master Subversion repository"),
/* per directory/location */
+ AP_INIT_TAKE1("SVNMasterVersion", SVNMasterVersion_cmd, NULL, ACCESS_CONF,
+ "specifies the Subversion release version of a master "
+ "Subversion server "),
+
+ /* per directory/location */
AP_INIT_TAKE1("SVNActivitiesDB", SVNActivitiesDB_cmd, NULL, ACCESS_CONF,
"specifies the location in the filesystem in which the "
"activities database(s) should be stored"),
@@ -1136,10 +1198,12 @@ static const command_rec cmds[] =
"use UTF-8 as native character encoding (default is ASCII)."),
/* per directory/location */
- AP_INIT_ITERATE("SVNHooksEnv", SVNHooksEnv_cmd, NULL,
- ACCESS_CONF|RSRC_CONF,
- "Set the environment of hook scripts via any number of "
- "VAR=VAL arguments (the default hook environment is empty)."),
+ AP_INIT_TAKE1("SVNHooksEnv", SVNHooksEnv_cmd, NULL,
+ ACCESS_CONF|RSRC_CONF,
+ "Sets the path to the configuration file for the environment "
+ "of hook scripts. If not absolute, the path is relative to "
+ "the repository's conf directory (by default the hooks-env "
+ "file in the repository is used)."),
{ NULL }
};
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/posts/create_txn.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/posts/create_txn.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/posts/create_txn.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/posts/create_txn.c Sun Oct 21 02:00:31 2012
@@ -42,13 +42,64 @@ dav_svn__post_create_txn(const dav_resou
request_rec *r = resource->info->r;
/* Create a Subversion repository transaction based on HEAD. */
- if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name,
+ if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name, NULL,
resource->pool)))
return derr;
/* Build a "201 Created" response with header that tells the
client our new transaction's name. */
- vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
+ vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
+ if (vtxn_name && vtxn_name[0])
+ {
+ /* If the client supplied a vtxn name then store a mapping from
+ the client name to the FS transaction name in the activity
+ database. */
+ if ((derr = dav_svn__store_activity(resource->info->repos,
+ vtxn_name, txn_name)))
+ return derr;
+ apr_table_set(r->headers_out, SVN_DAV_VTXN_NAME_HEADER, vtxn_name);
+ }
+ else
+ apr_table_set(r->headers_out, SVN_DAV_TXN_NAME_HEADER, txn_name);
+
+ r->status = HTTP_CREATED;
+
+ return NULL;
+}
+
+
+/* Respond to a "create-txn-with-props" POST request.
+ *
+ * Syntax: ( create-txn-with-props (PROPNAME PROPVAL [PROPNAME PROPVAL ...])
+ */
+dav_error *
+dav_svn__post_create_txn_with_props(const dav_resource *resource,
+ svn_skel_t *request_skel,
+ ap_filter_t *output)
+{
+ const char *txn_name;
+ const char *vtxn_name;
+ dav_error *derr;
+ svn_error_t *err;
+ request_rec *r = resource->info->r;
+ apr_hash_t *revprops;
+ svn_skel_t *proplist_skel = request_skel->children->next;
+
+ if ((err = svn_skel__parse_proplist(&revprops, proplist_skel,
+ resource->pool)))
+ {
+ return dav_svn__convert_err(err, HTTP_BAD_REQUEST,
+ "Malformatted request skel", resource->pool);
+ }
+
+ /* Create a Subversion repository transaction based on HEAD. */
+ if ((derr = dav_svn__create_txn(resource->info->repos, &txn_name,
+ revprops, resource->pool)))
+ return derr;
+
+ /* Build a "201 Created" response with header that tells the
+ client our new transaction's name. */
+ vtxn_name = apr_table_get(r->headers_in, SVN_DAV_VTXN_NAME_HEADER);
if (vtxn_name && vtxn_name[0])
{
/* If the client supplied a vtxn name then store a mapping from
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/reports/file-revs.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/reports/file-revs.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/reports/file-revs.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/reports/file-revs.c Sun Oct 21 02:00:31 2012
@@ -52,6 +52,9 @@ struct file_rev_baton {
/* SVNDIFF version to use when sending to client. */
int svndiff_version;
+ /* Compression level to use for SVNDIFF. */
+ int compression_level;
+
/* Used by the delta iwndow handler. */
svn_txdelta_window_handler_t window_handler;
void *window_baton;
@@ -208,7 +211,7 @@ file_rev_handler(void *baton,
pool);
svn_txdelta_to_svndiff3(&frb->window_handler, &frb->window_baton,
base64_stream, frb->svndiff_version,
- dav_svn__get_compression_level(), pool);
+ frb->compression_level, pool);
*window_handler = delta_window_handler;
*window_baton = frb;
/* Start the txdelta element wich will be terminated by the window
@@ -306,6 +309,7 @@ dav_svn__file_revs_report(const dav_reso
frb.output = output;
frb.needs_header = TRUE;
frb.svndiff_version = resource->info->svndiff_version;
+ frb.compression_level = dav_svn__get_compression_level(resource->info->r);
/* file_rev_handler will send header first time it is called. */
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/reports/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/reports/replay.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/reports/replay.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/reports/replay.c Sun Oct 21 02:00:31 2012
@@ -47,6 +47,7 @@ typedef struct edit_baton_t {
ap_filter_t *output;
svn_boolean_t started;
svn_boolean_t sending_textdelta;
+ int compression_level;
} edit_baton_t;
@@ -326,7 +327,7 @@ apply_textdelta(void *file_baton,
eb->output,
pool),
0,
- dav_svn__get_compression_level(),
+ eb->compression_level,
pool);
eb->sending_textdelta = TRUE;
@@ -367,6 +368,7 @@ make_editor(const svn_delta_editor_t **e
void **edit_baton,
apr_bucket_brigade *bb,
ap_filter_t *output,
+ int compression_level,
apr_pool_t *pool)
{
edit_baton_t *eb = apr_pcalloc(pool, sizeof(*eb));
@@ -376,6 +378,7 @@ make_editor(const svn_delta_editor_t **e
eb->output = output;
eb->started = FALSE;
eb->sending_textdelta = FALSE;
+ eb->compression_level = compression_level;
e->set_target_revision = set_target_revision;
e->open_root = open_root;
@@ -506,7 +509,9 @@ dav_svn__replay_report(const dav_resourc
goto cleanup;
}
- make_editor(&editor, &edit_baton, bb, output, resource->pool);
+ make_editor(&editor, &edit_baton, bb, output,
+ dav_svn__get_compression_level(resource->info->r),
+ resource->pool);
if ((err = svn_repos_replay2(root, base_dir, low_water_mark,
send_deltas, editor, edit_baton,
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/reports/update.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/reports/update.c Sun Oct 21 02:00:31 2012
@@ -81,9 +81,16 @@ typedef struct update_ctx_t {
/* True iff client requested all data inline in the report. */
svn_boolean_t send_all;
+ /* True iff client requested that properties be transmitted
+ inline. (This is implied when "send_all" is set.) */
+ svn_boolean_t include_props;
+
/* SVNDIFF version to send to client. */
int svndiff_version;
+ /* Compression level of SVNDIFF deltas. */
+ int compression_level;
+
/* Did the client submit this REPORT request via the HTTPv2 "me
resource" and are we advertising support for as much? */
svn_boolean_t enable_v2_response;
@@ -119,6 +126,10 @@ typedef struct item_baton_t {
/* File/dir copied? */
svn_boolean_t copyfrom;
+ /* Does the client need to fetch additional properties for this
+ item? */
+ svn_boolean_t fetch_props;
+
/* Array of const char * names of removed properties. (Used only
for copied files/dirs in skelta mode.) */
apr_array_header_t *removed_props;
@@ -432,7 +443,7 @@ open_helper(svn_boolean_t is_dir,
static svn_error_t *
-close_helper(svn_boolean_t is_dir, item_baton_t *baton)
+close_helper(svn_boolean_t is_dir, item_baton_t *baton, apr_pool_t *pool)
{
if (baton->uc->resource_walk)
return SVN_NO_ERROR;
@@ -446,14 +457,21 @@ close_helper(svn_boolean_t is_dir, item_
for (i = 0; i < baton->removed_props->nelts; i++)
{
- /* We already XML-escaped the property name in change_xxx_prop. */
qname = APR_ARRAY_IDX(baton->removed_props, i, const char *);
+ qname = apr_xml_quote_string(pool, qname, 1);
SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
"<S:remove-prop name=\"%s\"/>"
DEBUG_CR, qname));
}
}
+ /* If our client need to fetch properties, let it know. */
+ if (baton->fetch_props)
+ SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
+ "<S:fetch-props/>" DEBUG_CR));
+
+
+ /* Let's tie it off, nurse. */
if (baton->added)
SVN_ERR(dav_svn__brigade_printf(baton->uc->bb, baton->uc->output,
"</S:add-%s>" DEBUG_CR,
@@ -473,13 +491,13 @@ maybe_start_update_report(update_ctx_t *
{
if ((! uc->resource_walk) && (! uc->started_update))
{
- SVN_ERR(dav_svn__brigade_printf(uc->bb, uc->output,
- DAV_XML_HEADER DEBUG_CR
- "<S:update-report xmlns:S=\""
- SVN_XML_NAMESPACE "\" "
- "xmlns:V=\"" SVN_DAV_PROP_NS_DAV "\" "
- "xmlns:D=\"DAV:\" %s>" DEBUG_CR,
- uc->send_all ? "send-all=\"true\"" : ""));
+ SVN_ERR(dav_svn__brigade_printf(
+ uc->bb, uc->output,
+ DAV_XML_HEADER DEBUG_CR "<S:update-report xmlns:S=\""
+ SVN_XML_NAMESPACE "\" xmlns:V=\"" SVN_DAV_PROP_NS_DAV "\" "
+ "xmlns:D=\"DAV:\" %s %s>" DEBUG_CR,
+ uc->send_all ? "send-all=\"true\"" : "",
+ uc->include_props ? "inline-props=\"true\"" : ""));
uc->started_update = TRUE;
}
@@ -593,87 +611,117 @@ upd_open_directory(const char *path,
static svn_error_t *
+send_propchange(item_baton_t *b,
+ const char *name,
+ const svn_string_t *value,
+ apr_pool_t *pool)
+{
+ const char *qname;
+
+ /* Ensure that the property name is XML-safe.
+ apr_xml_quote_string() doesn't realloc if there is nothing to
+ quote, so dup the name, but only if necessary. */
+ qname = apr_xml_quote_string(b->pool, name, 1);
+ if (qname == name)
+ qname = apr_pstrdup(b->pool, name);
+
+ if (value)
+ {
+ const char *qval;
+
+ if (svn_xml_is_xml_safe(value->data, value->len))
+ {
+ svn_stringbuf_t *tmp = NULL;
+ svn_xml_escape_cdata_string(&tmp, value, pool);
+ qval = tmp->data;
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:set-prop name=\"%s\">",
+ qname));
+ }
+ else
+ {
+ qval = svn_base64_encode_string2(value, TRUE, pool)->data;
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:set-prop name=\"%s\" "
+ "encoding=\"base64\">" DEBUG_CR,
+ qname));
+ }
+
+ SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output, qval));
+ SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output,
+ "</S:set-prop>" DEBUG_CR));
+ }
+ else /* value is null, so this is a prop removal */
+ {
+ SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
+ "<S:remove-prop name=\"%s\"/>"
+ DEBUG_CR,
+ qname));
+ }
+
+ return SVN_NO_ERROR;
+}
+
+static svn_error_t *
upd_change_xxx_prop(void *baton,
const char *name,
const svn_string_t *value,
apr_pool_t *pool)
{
item_baton_t *b = baton;
- const char *qname;
/* Resource walks say nothing about props. */
if (b->uc->resource_walk)
return SVN_NO_ERROR;
- /* Else this not a resource walk, so either send props or cache them
- to send later, depending on whether this is a modern report
- response or not. */
-
- qname = apr_xml_quote_string(b->pool, name, 1);
-
- /* apr_xml_quote_string doesn't realloc if there is nothing to
- quote, so dup the name, but only if necessary. */
- if (qname == name)
- qname = apr_pstrdup(b->pool, name);
+ /* If we get here, this not a resource walk, so either send props or
+ cache them to send later, depending on whether this is a modern
+ report response or not. */
/* Even if we are not in send-all mode we have the prop changes already,
so send them to the client now instead of telling the client to fetch
them later. */
- if (b->uc->send_all || !b->added)
+ if (b->uc->send_all)
{
- if (value)
+ SVN_ERR(send_propchange(b, name, value, pool));
+ }
+ else
+ {
+ if (b->added)
{
- const char *qval;
-
- if (svn_xml_is_xml_safe(value->data, value->len))
+ /* This is an addition in "skelta" (that is, "not send-all")
+ mode so there is no strict need for an inline response.
+ Clients will assume that added objects need all to have
+ all their properties explicitly fetched from the
+ server. */
+
+ /* That said, beginning in Subversion 1.8, clients might
+ request even in skelta mode that we transmit properties
+ on newly added files explicitly. */
+ if ((! b->copyfrom) && value && b->uc->include_props)
{
- svn_stringbuf_t *tmp = NULL;
- svn_xml_escape_cdata_string(&tmp, value, pool);
- qval = tmp->data;
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:set-prop name=\"%s\">",
- qname));
+ SVN_ERR(send_propchange(b, name, value, pool));
}
- else
+
+ /* Now, if the object is actually a copy and this is a
+ property removal, we'll still need to cache (and later
+ transmit) property removals, because fetching the
+ object's current property set alone isn't sufficient to
+ communicate the fact that additional properties were, in
+ fact, removed from the copied base object in order to
+ arrive at that set. */
+ if (b->copyfrom && (! value))
{
- qval = svn_base64_encode_string2(value, TRUE, pool)->data;
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:set-prop name=\"%s\" "
- "encoding=\"base64\">" DEBUG_CR,
- qname));
+ if (! b->removed_props)
+ b->removed_props = apr_array_make(b->pool, 1, sizeof(name));
+
+ APR_ARRAY_PUSH(b->removed_props, const char *) = name;
}
-
- SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output, qval));
- SVN_ERR(dav_svn__brigade_puts(b->uc->bb, b->uc->output,
- "</S:set-prop>" DEBUG_CR));
}
- else /* value is null, so this is a prop removal */
- {
- SVN_ERR(dav_svn__brigade_printf(b->uc->bb, b->uc->output,
- "<S:remove-prop name=\"%s\"/>"
- DEBUG_CR,
- qname));
- }
- }
- else if (!value)
- {
- /* This is an addition in "skelta" (that is, "not send-all")
- mode so there is no strict need for an inline response.
- Clients will assume that added objects need all to have all
- their properties explicitly fetched from the server. */
-
- /* Now, if the object is actually a copy, we'll still need to
- cache (and later transmit) property removals, because
- fetching the object's current property set alone isn't
- sufficient to communicate the fact that additional properties
- were, in fact, removed from the copied base object in order
- to arrive at that set. */
- if (b->copyfrom)
+ else
{
- if (! b->removed_props)
- b->removed_props = apr_array_make(b->pool, 1, sizeof(name));
-
- APR_ARRAY_PUSH(b->removed_props, const char *) = qname;
+ /* "skelta" mode non-addition. Just send the change. */
+ SVN_ERR(send_propchange(b, name, value, pool));
}
}
@@ -684,7 +732,7 @@ upd_change_xxx_prop(void *baton,
static svn_error_t *
upd_close_directory(void *dir_baton, apr_pool_t *pool)
{
- return close_helper(TRUE /* is_dir */, dir_baton);
+ return close_helper(TRUE /* is_dir */, dir_baton, pool);
}
@@ -795,7 +843,7 @@ upd_apply_textdelta(void *file_baton,
svn_txdelta_to_svndiff3(&(wb->handler), &(wb->handler_baton),
base64_stream, file->uc->svndiff_version,
- dav_svn__get_compression_level(), file->pool);
+ file->uc->compression_level, file->pool);
*handler = window_handler;
*handler_baton = wb;
@@ -845,7 +893,7 @@ upd_close_file(void *file_baton, const c
text_checksum));
}
- return close_helper(FALSE /* is_dir */, file);
+ return close_helper(FALSE /* is_dir */, file, pool);
}
@@ -944,6 +992,7 @@ dav_svn__update_report(const dav_resourc
&& (strcmp(this_attr->value, "true") == 0))
{
uc.send_all = TRUE;
+ uc.include_props = TRUE;
break;
}
}
@@ -1066,6 +1115,14 @@ dav_svn__update_report(const dav_resourc
if (strcmp(cdata, "no") == 0)
text_deltas = FALSE;
}
+ if (child->ns == ns && strcmp(child->name, "include-props") == 0)
+ {
+ cdata = dav_xml_get_cdata(child, resource->pool, 1);
+ if (! *cdata)
+ return malformed_element_error(child->name, resource->pool);
+ if (strcmp(cdata, "no") != 0)
+ uc.include_props = TRUE;
+ }
}
if (!saw_depth && !saw_recursive && (requested_depth == svn_depth_unknown))
@@ -1096,6 +1153,7 @@ dav_svn__update_report(const dav_resourc
}
uc.svndiff_version = resource->info->svndiff_version;
+ uc.compression_level = dav_svn__get_compression_level(resource->info->r);
uc.resource = resource;
uc.output = output;
uc.anchor = src_path;
@@ -1165,7 +1223,7 @@ dav_svn__update_report(const dav_resourc
editor->close_file = upd_close_file;
editor->absent_file = upd_absent_file;
editor->close_edit = upd_close_edit;
- if ((serr = svn_repos_begin_report2(&rbaton, revnum,
+ if ((serr = svn_repos_begin_report3(&rbaton, revnum,
repos->repos,
src_path, target,
dst_path,
@@ -1176,6 +1234,7 @@ dav_svn__update_report(const dav_resourc
editor, &uc,
dav_svn__authz_read_func(&arb),
&arb,
+ 0, /* disable zero-copy for now */
resource->pool)))
{
return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/repos.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/repos.c Sun Oct 21 02:00:31 2012
@@ -1149,8 +1149,11 @@ create_private_resource(const dav_resour
comb->res.collection = TRUE; /* ### always true? */
/* versioned = baselined = working = FALSE */
- comb->res.uri = apr_pstrcat(base->pool, base->info->repos->root_path,
- path->data, (char *)NULL);
+ if (base->info->repos->root_path[1])
+ comb->res.uri = apr_pstrcat(base->pool, base->info->repos->root_path,
+ path->data, (char *)NULL);
+ else
+ comb->res.uri = path->data;
comb->res.info = &comb->priv;
comb->res.hooks = &dav_svn__hooks_repository;
comb->res.pool = base->pool;
@@ -1499,7 +1502,7 @@ get_parentpath_resource(request_rec *r,
repos->xslt_uri = dav_svn__get_xslt_uri(r);
repos->autoversioning = dav_svn__get_autoversioning_flag(r);
repos->bulk_updates = dav_svn__get_bulk_updates_flag(r);
- repos->v2_protocol = dav_svn__get_v2_protocol_flag(r);
+ repos->v2_protocol = dav_svn__check_httpv2_support(r);
repos->base_url = ap_construct_url(r->pool, "", r);
repos->special_uri = dav_svn__get_special_uri(r);
repos->username = r->user;
@@ -1908,9 +1911,11 @@ parse_querystring(request_rec *r, const
only use a temporary redirect. */
apr_table_setn(r->headers_out, "Location",
ap_construct_url(r->pool,
- apr_psprintf(r->pool, "%s%s?p=%ld",
- comb->priv.repos->root_path,
- newpath, working_rev),
+ apr_psprintf(r->pool, "%s%s?p=%ld",
+ (comb->priv.repos->root_path[1]
+ ? comb->priv.repos->root_path
+ : ""),
+ newpath, working_rev),
r));
return dav_svn__new_error(r->pool,
prevstr ? HTTP_MOVED_PERMANENTLY
@@ -2077,7 +2082,7 @@ get_resource(request_rec *r,
repos->bulk_updates = dav_svn__get_bulk_updates_flag(r);
/* Are we advertising HTTP v2 protocol support? */
- repos->v2_protocol = dav_svn__get_v2_protocol_flag(r);
+ repos->v2_protocol = dav_svn__check_httpv2_support(r);
/* Path to activities database */
repos->activities_db = dav_svn__get_activities_db(r);
@@ -2217,8 +2222,13 @@ get_resource(request_rec *r,
HTTP_INTERNAL_SERVER_ERROR, r);
}
- /* Configure the hooks environment, if not empty. */
- svn_repos_hooks_setenv(repos->repos, dav_svn__get_hooks_env(r));
+ /* Configure hook script environment variables. */
+ serr = svn_repos_hooks_setenv(repos->repos, dav_svn__get_hooks_env(r),
+ r->connection->pool, r->pool);
+ if (serr)
+ return dav_svn__sanitize_error(serr,
+ "Error settings hooks environment",
+ HTTP_INTERNAL_SERVER_ERROR, r);
}
/* cache the filesystem object */
@@ -3077,6 +3087,13 @@ set_headers(request_rec *r, const dav_re
if ((serr == NULL) && (info.rev != SVN_INVALID_REVNUM))
{
mimetype = SVN_SVNDIFF_MIME_TYPE;
+
+ /* Note the base that this svndiff is based on, and tell any
+ intermediate caching proxies that this header is
+ significant. */
+ apr_table_setn(r->headers_out, "Vary", SVN_DAV_DELTA_BASE_HEADER);
+ apr_table_setn(r->headers_out, SVN_DAV_DELTA_BASE_HEADER,
+ resource->info->delta_base);
}
svn_error_clear(serr);
}
@@ -3158,7 +3175,7 @@ typedef struct diff_ctx_t {
} diff_ctx_t;
-static svn_error_t *
+static svn_error_t * __attribute__((warn_unused_result))
write_to_filter(void *baton, const char *buffer, apr_size_t *len)
{
diff_ctx_t *dc = baton;
@@ -3179,7 +3196,7 @@ write_to_filter(void *baton, const char
}
-static svn_error_t *
+static svn_error_t * __attribute__((warn_unused_result))
close_filter(void *baton)
{
diff_ctx_t *dc = baton;
@@ -3629,7 +3646,7 @@ deliver(const dav_resource *resource, ap
/* get a handler/baton for writing into the output stream */
svn_txdelta_to_svndiff3(&handler, &h_baton,
o_stream, resource->info->svndiff_version,
- dav_svn__get_compression_level(),
+ dav_svn__get_compression_level(resource->info->r),
resource->pool);
/* got everything set up. read in delta windows and shove them into
@@ -4345,8 +4362,11 @@ dav_svn__create_working_resource(dav_res
res->baselined = base->baselined;
/* collection = FALSE. ### not necessarily correct */
- res->uri = apr_pstrcat(base->pool, base->info->repos->root_path,
- path, (char *)NULL);
+ if (base->info->repos->root_path[1])
+ res->uri = apr_pstrcat(base->pool, base->info->repos->root_path,
+ path, (char *)NULL);
+ else
+ res->uri = path;
res->hooks = &dav_svn__hooks_repository;
res->pool = base->pool;
@@ -4444,7 +4464,7 @@ handle_post_request(request_rec *r,
dav_resource *resource,
ap_filter_t *output)
{
- svn_skel_t *request_skel;
+ svn_skel_t *request_skel, *post_skel;
int status;
apr_pool_t *pool = resource->pool;
@@ -4461,16 +4481,23 @@ handle_post_request(request_rec *r,
return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
"Unable to identify skel POST request flavor.");
- if (svn_skel__matches_atom(request_skel->children, "create-txn"))
+ post_skel = request_skel->children;
+
+ /* NOTE: If you add POST handlers here, you'll want to advertise
+ that the server supports them, too. See version.c:get_option(). */
+
+ if (svn_skel__matches_atom(post_skel, "create-txn"))
{
return dav_svn__post_create_txn(resource, request_skel, output);
}
- else
+ else if (svn_skel__matches_atom(post_skel, "create-txn-with-props"))
{
- return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
- "Unsupported skel POST request flavor.");
+ return dav_svn__post_create_txn_with_props(resource,
+ request_skel, output);
}
- /* NOTREACHED */
+
+ return dav_svn__new_error(pool, HTTP_BAD_REQUEST, 0,
+ "Unsupported skel POST request flavor.");
}
int dav_svn__method_post(request_rec *r)
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/version.c?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/version.c Sun Oct 21 02:00:31 2012
@@ -37,7 +37,9 @@
#include "svn_props.h"
#include "svn_dav.h"
#include "svn_base64.h"
+#include "svn_version.h"
#include "private/svn_repos_private.h"
+#include "private/svn_subr_private.h"
#include "private/svn_dav_protocol.h"
#include "private/svn_log.h"
#include "private/svn_fspath.h"
@@ -146,6 +148,7 @@ get_vsn_options(apr_pool_t *p, apr_text_
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_LOG_REVPROPS);
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_ATOMIC_REVPROPS);
apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY);
+ apr_text_append(p, phdr, SVN_DAV_NS_DAV_SVN_INHERITED_PROPS);
/* Mergeinfo is a special case: here we merely say that the server
* knows how to handle mergeinfo -- whether the repository does too
* is a separate matter.
@@ -192,6 +195,14 @@ get_option(const dav_resource *resource,
}
}
+ /* If we're allowed (by configuration) to do so, advertise support
+ for ephemeral transaction properties. */
+ if (dav_svn__check_ephemeral_txnprops_support(r))
+ {
+ apr_table_addn(r->headers_out, "DAV",
+ SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS);
+ }
+
if (resource->info->repos->fs)
{
svn_error_t *serr;
@@ -234,6 +245,19 @@ get_option(const dav_resource *resource,
DeltaV-free! If we're configured to advise this support, do so. */
if (resource->info->repos->v2_protocol)
{
+ /* The list of Subversion's custom POSTs. You'll want to keep
+ this in sync with the handling of these suckers in
+ handle_post_request(). */
+ int i;
+ svn_version_t *master_version = dav_svn__get_master_version(r);
+ struct posts_versions_t {
+ const char *post_name;
+ svn_version_t min_version;
+ } posts_versions[] = {
+ { "create-txn", { 1, 7, 0, "" } },
+ { "create-txn-with-props", { 1, 8, 0, "" } },
+ };
+
apr_table_set(r->headers_out, SVN_DAV_ROOT_URI_HEADER, repos_root_uri);
apr_table_set(r->headers_out, SVN_DAV_ME_RESOURCE_HEADER,
apr_pstrcat(resource->pool, repos_root_uri, "/",
@@ -256,6 +280,23 @@ get_option(const dav_resource *resource,
apr_table_set(r->headers_out, SVN_DAV_VTXN_STUB_HEADER,
apr_pstrcat(resource->pool, repos_root_uri, "/",
dav_svn__get_vtxn_stub(r), (char *)NULL));
+
+ /* Report the supported POST types. */
+ for (i = 0; i < sizeof(posts_versions)/sizeof(posts_versions[0]); ++i)
+ {
+ /* If we're proxying to a master server and its version
+ number is declared, we can selectively filter out POST
+ types that it doesn't support. */
+ if (master_version
+ && (! svn_version__at_least(master_version,
+ posts_versions[i].min_version.major,
+ posts_versions[i].min_version.minor,
+ posts_versions[i].min_version.patch)))
+ continue;
+
+ apr_table_addn(r->headers_out, SVN_DAV_SUPPORTED_POSTS_HEADER,
+ apr_pstrdup(resource->pool, posts_versions[i].post_name));
+ }
}
return NULL;
@@ -398,7 +439,7 @@ dav_svn__checkout(dav_resource *resource
shared_activity = apr_pstrdup(resource->info->r->pool, uuid_buf);
derr = dav_svn__create_txn(resource->info->repos, &shared_txn_name,
- resource->info->r->pool);
+ NULL, resource->info->r->pool);
if (derr) return derr;
derr = dav_svn__store_activity(resource->info->repos,
@@ -1093,6 +1134,10 @@ deliver_report(request_rec *r,
{
return dav_svn__get_deleted_rev_report(resource, doc, output);
}
+ else if (strcmp(doc->root->name, SVN_DAV__INHERITED_PROPS_REPORT) == 0)
+ {
+ return dav_svn__get_inherited_props_report(resource, doc, output);
+ }
/* NOTE: if you add a report, don't forget to add it to the
* dav_svn__reports_list[] array.
*/
@@ -1138,7 +1183,8 @@ make_activity(dav_resource *resource)
SVN_DAV_ERROR_NAMESPACE,
SVN_DAV_ERROR_TAG);
- err = dav_svn__create_txn(resource->info->repos, &txn_name, resource->pool);
+ err = dav_svn__create_txn(resource->info->repos, &txn_name,
+ NULL, resource->pool);
if (err != NULL)
return err;
Modified: subversion/branches/ev2-export/subversion/po/de.po
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/po/de.po?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/po/de.po [UTF-8] (original)
+++ subversion/branches/ev2-export/subversion/po/de.po [UTF-8] Sun Oct 21 02:00:31 2012
@@ -4973,9 +4973,8 @@ msgid "Creating pre-revprop-change hook"
msgstr "Erzeuge Aktion »pre-revprop-change«"
#: ../libsvn_repos/repos.c:618
-#, fuzzy
msgid "Creating pre-obliterate hook"
-msgstr "Erzeuge Aktion »pre-commit«"
+msgstr "Erzeuge Aktion »pre-obliterate«"
#: ../libsvn_repos/repos.c:846
msgid "Creating post-commit hook"
@@ -4986,9 +4985,8 @@ msgid "Creating post-revprop-change hook
msgstr "Erzeuge Aktion »post-revprop-change«"
#: ../libsvn_repos/repos.c:1090
-#, fuzzy
msgid "Creating post-obliterate hook"
-msgstr "Erzeuge Aktion »post-commit«"
+msgstr "Erzeuge Aktion »post-obliterate«"
#: ../libsvn_repos/repos.c:1100
msgid "Creating conf directory"
@@ -7142,14 +7140,14 @@ msgid "Error restoring text for '%s'"
msgstr "Fehler beim Wiederherstellen des Textes für »%s«"
#: ../libsvn_wc/workqueue.c:1294
-#, fuzzy, c-format
+#, c-format
msgid "Error processing post-commit work for '%s'"
-msgstr "Fehler beim Bearbeiten des Befehls »%s« in »%s«"
+msgstr "Fehler beim Verarbeiten der Arbeitsschritte nach Übertragung für »%s«"
#: ../libsvn_wc/workqueue.c:2213
-#, fuzzy, c-format
+#, c-format
msgid "Unrecognized work item in the queue associated with '%s'"
-msgstr "Unbekannter Revisionstyp für »%s« angefragt"
+msgstr "Unbekannter Arbeitsschritt in Warteschlange von »%s« "
#: ../svn/blame-cmd.c:302 ../svn/list-cmd.c:232
msgid "'verbose' option invalid in XML mode"
@@ -7177,7 +7175,7 @@ msgstr "»%s« scheint keine URL zu sein
#: ../svn/commit-cmd.c:107
#, c-format
msgid "svn: warning: The depth of this commit is '%s', but copied directories will regardless be committed with depth '%s'. You must remove unwanted children of those directories in a separate commit.\n"
-msgstr ""
+msgstr "svn: Warnung: Die Tiefe dieser Übertragung ist »%s«, jedoch werden kopierte Verzeichnisse dennoch mit Tiefe »%s« übertragen. Sie müssen nicht gewollte Kinder dieser Verzeichnisse in einer gesonderten Übertragung entfernen.\n"
#: ../svn/conflict-callbacks.c:158
msgid "||||||| ORIGINAL"
@@ -7381,14 +7379,13 @@ msgstr ""
"Ungültige Option; es gibt keine zusammengeführte Version zum Vergleichen.\n"
"\n"
-# CHECKME: proper English?
#: ../svn/conflict-callbacks.c:651
-#, fuzzy, c-format
+#, c-format
msgid ""
"Invalid option; cannot resolve property conflicts with an external merge tool.\n"
"\n"
msgstr ""
-"Ungültige Option; Auswahl anhand von Konflikten ist in einer Binärdatei nicht möglich.\n"
+"Ungültige Option; kann Konflikte in Eigenschaften nicht mit externem Werkzeug zum Zusammenführen auflösen\n"
"\n"
#: ../svn/conflict-callbacks.c:666 ../svn/conflict-callbacks.c:680
@@ -7934,11 +7931,8 @@ msgstr ""
" übergeben"
#: ../svn/main.c:210
-#, fuzzy
msgid "limit operation by depth ARG ('empty', 'files',\n"
-msgstr ""
-"begrenzt Operation durch Tiefe PAR (»empty«,\n"
-" »files«, »immediates« oder »infinity«)"
+msgstr "begrenzt Operation durch Tiefe PAR (»empty«, »files«,\n"
#: ../svn/main.c:214
msgid "set new working copy depth to ARG ('exclude',\n"
@@ -8038,11 +8032,8 @@ msgstr ""
" PAR lesen"
#: ../svn/main.c:254
-#, fuzzy
msgid "set user configuration option in the format:\n"
-msgstr ""
-"Benutzerkonfigurationsdateien aus dem Verzeichnis\n"
-" PAR lesen"
+msgstr "Konfigurationsoption in diesem Format setzen:\n"
#: ../svn/main.c:261
msgid "enable automatic properties"
@@ -8203,7 +8194,6 @@ msgstr ""
" Falls angegeben, bestimmt REV, in welcher Revision zuerst nachgeschaut wird.\n"
#: ../svn/main.c:433
-#, fuzzy
msgid ""
"Associate (or dissociate) changelist CLNAME with the named files.\n"
"usage: 1. changelist CLNAME PATH...\n"
@@ -8211,8 +8201,8 @@ msgid ""
msgstr ""
"Verknüpft Änderungsliste CLNAME (oder löst diese Verknüpfung)\n"
"mit den angegebenen Dateien.\n"
-"Aufruf: 1. changelist CLNAME ZIEL...\n"
-" 2. changelist --remove ZIEL...\n"
+"Aufruf: 1. changelist CLNAME PFAD...\n"
+" 2. changelist --remove PFAD...\n"
#: ../svn/main.c:439
msgid ""
@@ -8265,7 +8255,6 @@ msgstr ""
" die die durchgeführte Aktion beschreiben.\n"
#: ../svn/main.c:466
-#, fuzzy
msgid ""
"Recursively clean up the working copy, removing locks, resuming\n"
"unfinished operations, etc.\n"
@@ -8273,7 +8262,7 @@ msgid ""
msgstr ""
"Räumt die Arbeitskopie rekursiv auf, gibt Sperren frei,\n"
"nimmt unvollständige Operationen wieder auf, usw.\n"
-"Aufruf: cleanup [PFAD...]\n"
+"Aufruf: cleanup [AKPFAD...]\n"
#: ../svn/main.c:472
msgid ""
@@ -8340,7 +8329,6 @@ msgstr ""
"von der Quelle der Kopie in das Ziel weiterzureichen.\n"
#: ../svn/main.c:505
-#, fuzzy
msgid ""
"Remove files and directories from version control.\n"
"usage: 1. delete PATH...\n"
@@ -8356,8 +8344,7 @@ msgid ""
" 2. Each item specified by a URL is deleted from the repository\n"
" via an immediate commit.\n"
msgstr ""
-"Entfernt Dateien und Verzeichnisse aus der\n"
-"Versionskontrolle.\n"
+"Entfernt Dateien und Verzeichnisse aus der Versionskontrolle.\n"
"Aufruf: 1. delete PFAD...\n"
" 2. delete URL...\n"
"\n"
@@ -8367,10 +8354,10 @@ msgstr ""
" die Option --keep-local wurde angegeben.\n"
" PFAD(e), die nicht versioniert oder geändert sind, bzw.\n"
" entsprechende Einträge enthalten, werden nur gelöscht, wenn\n"
-" die Option »--force« angegeben wird.\n"
+" die Optionen --force oder --keep-local angegeben wird.\n"
"\n"
-" 2. Jede URL wird mittels einer sofortigen Übertragung aus dem\n"
-" Projektarchiv entfernt.\n"
+" 2. Jedes mit einer URL angegebene Element wird mittels sofortiger\n"
+" Übertragung aus dem Projektarchiv entfernt.\n"
#: ../svn/main.c:521
msgid ""
@@ -9564,6 +9551,8 @@ msgid ""
"Upgrade the metadata storage format for a working copy.\n"
"usage: upgrade WCPATH...\n"
msgstr ""
+"Überführt die Metadaten einer Arbeitskopie in ein neues Speicherformat\n"
+"Aufruf: upgrade AKPATH...\n"
#: ../svn/main.c:1221 ../svnadmin/main.c:86 ../svnlook/main.c:354
#: ../svnsync/main.c:263
@@ -9585,7 +9574,7 @@ msgstr "-c kann nicht mit --old verwende
#: ../svn/main.c:1391
#, c-format
msgid "Negative number in range (%s) not supported with -c"
-msgstr ""
+msgstr "Negative Zahl im Bereich (%s) ist mit -c nicht unterstützt"
#: ../svn/main.c:1404
#, c-format
@@ -9855,42 +9844,42 @@ msgstr "Konflikt von »%s« aufgelöst\n
#: ../svn/notify.c:320 ../svn/notify.c:360
#, c-format
msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with offset %s"
-msgstr ""
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## mit Versatz %s angewandt"
#: ../svn/notify.c:337 ../svn/notify.c:374
#, c-format
msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with offset %s"
-msgstr ""
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ mit Versatz %s angewandt"
#: ../svn/notify.c:395
#, c-format
msgid "> applied hunk ## -%lu,%lu +%lu,%lu ## with fuzz %d (%s)\n"
-msgstr ""
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## mit Unschärfe %d (%s) angewandt\n"
#: ../svn/notify.c:405
#, c-format
msgid "> applied hunk @@ -%lu,%lu +%lu,%lu @@ with fuzz %d\n"
-msgstr ""
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ mit Unschärfe %d angewandt\n"
#: ../svn/notify.c:423
#, c-format
msgid "> rejected hunk ## -%lu,%lu +%lu,%lu ## (%s)\n"
-msgstr ""
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## (%s) zurückgewiesen\n"
#: ../svn/notify.c:432
#, c-format
msgid "> rejected hunk @@ -%lu,%lu +%lu,%lu @@\n"
-msgstr ""
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ zurückgewiesen\n"
#: ../svn/notify.c:446
#, c-format
msgid "> hunk ## -%lu,%lu +%lu,%lu ## already applied (%s)\n"
-msgstr ""
+msgstr "> Abschnitt ## -%lu,%lu +%lu,%lu ## bereits angewandt (%s)\n"
#: ../svn/notify.c:456
#, c-format
msgid "> hunk @@ -%lu,%lu +%lu,%lu @@ already applied\n"
-msgstr ""
+msgstr "> Abschnitt @@ -%lu,%lu +%lu,%lu @@ bereits angewandt\n"
# Currently this is used for checkouts and switches too. If we
# want different output, we'll have to add new actions.
@@ -10157,7 +10146,7 @@ msgstr "Ziel muss die Revision als Zahl
#: ../svn/obliterate-cmd.c:119
msgid "Target must specify a URL"
-msgstr ""
+msgstr "Ziel muss eine URL angeben"
#: ../svn/propdel-cmd.c:117
#, c-format
@@ -10303,7 +10292,7 @@ msgstr "hinzugefügt"
#: ../svn/tree-conflicts.c:41 ../svn/tree-conflicts.c:63
msgid "replace"
-msgstr ""
+msgstr "ersetzt"
#: ../svn/tree-conflicts.c:60
msgid "missing"
@@ -11154,7 +11143,7 @@ msgstr "Filterstatistik nicht anzeigen."
#: ../svndumpfilter/main.c:926
msgid "Treat the path prefixes as file glob patterns."
-msgstr ""
+msgstr "Pfadpräfix als Dateiplatzhalter behandeln."
#: ../svndumpfilter/main.c:928
msgid "Remove revisions emptied by filtering."
@@ -11754,7 +11743,7 @@ msgstr "Versuchen Sie »svnlook help« f
#: ../svnrdump/load_editor.c:97 ../svnsync/main.c:351
msgid "Target server does not support atomic revision property edits; consider upgrading it to 1.7 or using an external locking program"
-msgstr ""
+msgstr "Zielserver unterstützt keine atomaren Änderungen von Revisionseigenschaften; Verwenden Sie entweder 1.7 oder ein externes Programm zum Sperren."
#: ../svnrdump/load_editor.c:106 ../svnsync/main.c:360
#, c-format
@@ -11775,7 +11764,7 @@ msgstr "Konnte Sperre für Zielprojektar
#: ../svnrdump/load_editor.c:684
msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-msgstr ""
+msgstr "Die Sperre von »svnrump load« wurde gestohlen und konnte nicht entfernt werden"
#: ../svnrdump/svnrdump.c:58
msgid ""
@@ -11784,6 +11773,10 @@ msgid ""
"Dump revisions LOWER to UPPER of repository at remote URL to stdout in a 'dumpfile' portable format.\n"
"If only LOWER is given, dump that one revision.\n"
msgstr ""
+"Aufruf: svnrdump dump URL [-r VON[:BIS]]\n"
+"\n"
+"Gibt einen Abzug der Revisionen VON:BIS eines Projektarchivs an der entferten URL in einem portablen »Dump«-Format aus.\n"
+"Falls nur VON angegeben wurde, wird nur diese Revision ausgegeben.\n"
#: ../svnrdump/svnrdump.c:64
msgid ""
@@ -11791,6 +11784,9 @@ msgid ""
"\n"
"Load a 'dumpfile' given on stdin to a repository at remote URL.\n"
msgstr ""
+"Aufruf: svnrdump load URL\n"
+"\n"
+"Liest einen Datenstrom im »Dump«-Format von der Standardeingabe in ein Projektarchive an entfertner URL.\n"
#: ../svnrdump/svnrdump.c:69
msgid ""
@@ -11839,7 +11835,7 @@ msgstr "Revision %ld existiert nicht.\n"
#: ../svnrdump/svnrdump.c:592
#, c-format
msgid "LOWER cannot be greater than UPPER.\n"
-msgstr ""
+msgstr "VON kann nicht größer als BIS sein.\n"
#: ../svnserve/cyrus_auth.c:264
#, c-format
@@ -11928,6 +11924,11 @@ msgid ""
" at the same time is not supported in daemon mode.\n"
" Use inetd mode or tunnel mode if you need this.]"
msgstr ""
+"Bevorzuge IPv6 beim Auflösen des abzuhörenden Rechnernamens\n"
+" [IPv4 ist als bevorzugt vorgegeben. Gleichzeitige\n"
+" Verwendung von IPv4 und IPv6 ist im Daemon-Modus\n"
+" nicht unterstützt. Verwenden Sie bei Bedarf inetd\n"
+" oder den Tunnel-Modus."
#. ### Making the assumption here that WIN32 never has fork and so
#. * ### this option never exists when --service exists.
Modified: subversion/branches/ev2-export/subversion/po/pl.po
URL: http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/po/pl.po?rev=1400556&r1=1400555&r2=1400556&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/po/pl.po [UTF-8] (original)
+++ subversion/branches/ev2-export/subversion/po/pl.po [UTF-8] Sun Oct 21 02:00:31 2012
@@ -2225,7 +2225,7 @@ msgstr "Nieznany typ systemu plików: '%
#: ../libsvn_fs/fs-loader.c:313
#, c-format
msgid "Can't allocate FS mutex"
-msgstr "Nie udało się utworzyć semefora FS"
+msgstr "Nie udało się utworzyć semafora FS"
#: ../libsvn_fs/fs-loader.c:348
#, c-format
@@ -3675,7 +3675,7 @@ msgstr "Uzyskano nierozpoznane kodowanie
#: ../libsvn_ra_neon/get_locks.c:425 ../libsvn_ra_neon/get_locks.c:429
#: ../libsvn_ra_serf/locks.c:566
msgid "Server does not support locking features"
-msgstr "Serwer nie obsługuje blokowania zatwiedzeń"
+msgstr "Serwer nie obsługuje blokowania zatwierdzeń"
#: ../libsvn_ra_neon/lock.c:196
msgid "Invalid creation date header value in response."
@@ -3703,7 +3703,7 @@ msgstr "'%s' nie jest zablokowane w repo
#: ../libsvn_ra_neon/lock.c:553
msgid "Failed to fetch lock information"
-msgstr "Nieudało się pobrać informacji o blokadzie"
+msgstr "Nie udało się pobrać informacji o blokadzie"
#: ../libsvn_ra_neon/log.c:169 ../libsvn_ra_serf/log.c:228
#, c-format
@@ -4751,7 +4751,7 @@ msgstr "Błąd podczas zamykania pliku n
#: ../libsvn_repos/hooks.c:379
#, c-format
msgid "Failed to run '%s' hook; broken symlink"
-msgstr "Niepowiodło się uruchomienie skryptu hook '%s'; uszkodzone dowiązanie symboliczne"
+msgstr "Nie powiodło się uruchomienie skryptu hook '%s'; uszkodzone dowiązanie symboliczne"
#: ../libsvn_repos/hooks.c:589
msgid ""
@@ -4863,7 +4863,7 @@ msgstr "Brak uprawnień do otwarcia kata
#: ../libsvn_repos/reporter.c:1234
#, c-format
msgid "Target path '%s' does not exist"
-msgstr "Docelowa śieżka '%s' nie istnieje"
+msgstr "Docelowa ścieżka '%s' nie istnieje"
#: ../libsvn_repos/reporter.c:1242
msgid "Cannot replace a directory from within"
@@ -5215,7 +5215,7 @@ msgstr "W pliku '%s' w linii %d: asercja
#: ../libsvn_subr/error.c:602
#, c-format
msgid "In file '%s' line %d: internal malfunction"
-msgstr "W pliku '%s' w linii %d: wewnątrzne niepoprawne funkcjonowanie"
+msgstr "W pliku '%s' w linii %d: wewnętrzne niepoprawne funkcjonowanie"
#: ../libsvn_subr/io.c:169
#, c-format
@@ -5230,7 +5230,7 @@ msgstr "Nie można sprawdzić ścieżki
#: ../libsvn_subr/io.c:457 ../libsvn_subr/io.c:3771
#, c-format
msgid "Can't open '%s'"
-msgstr "Nie mozna otworzyć '%s'"
+msgstr "Nie można otworzyć '%s'"
#: ../libsvn_subr/io.c:483 ../libsvn_subr/io.c:569
#, c-format
@@ -6280,7 +6280,7 @@ msgstr "Format logów zbyt stary. Prosz�
#: ../libsvn_wc/conflicts.c:299
msgid "Invalid 'conflict_result' argument"
-msgstr "Błądny argument 'conflict_result'"
+msgstr "Błędny argument 'conflict_result'"
#: ../libsvn_wc/conflicts.c:409
#, c-format
@@ -6731,7 +6731,7 @@ msgstr "Nieprawidłowy atrybut %s dla '%
#: ../libsvn_wc/props.c:2643
#, c-format
msgid "Invalid %s property on '%s': target '%s' is an absolute path or involves '..'"
-msgstr "Błędny atrybut %s dla '%s': cel '%s' jest ścieżką bezwględną albo wykorzystuje '..'"
+msgstr "Błędny atrybut %s dla '%s': cel '%s' jest ścieżką bezwzględną albo wykorzystuje '..'"
#: ../libsvn_wc/questions.c:203
#, fuzzy, c-format
@@ -8245,7 +8245,7 @@ msgstr ""
"\n"
"OSTRZEŻENIE: Dla kompatybilności z poprzednimi wersjami Subversion kopiowania\n"
"wykonywane pomiędzy dwoma ścieżkami kopii roboczej (KR -> KR) nie kontaktują\n"
-"się z reporytorium. W związku z tym nie mogą domyślnie propagować informacji\n"
+"się z repozytorium. W związku z tym nie mogą domyślnie propagować informacji\n"
"o łączeniach zmian ze źródła kopii do celu.\n"
#: ../svn/main.c:505
@@ -8673,7 +8673,7 @@ msgstr ""
" E Istniały (Existed)\n"
" R Zastąpiony (Replaced)\n"
"\n"
-" Znaki w pierwszej kolumnia informują o samym obiekcie. Znaki w drugiej\n"
+" Znaki w pierwszej kolumnie informują o samym obiekcie. Znaki w drugiej\n"
" kolumnie informują o atrybutach obiektu. 'C' w trzeciej kolumnie wskazuje\n"
" na konflikt drzewny, podczas gdy 'C' w pierwszej i drugiej kolumnie\n"
" wskazuje odpowiednio na konflikt tekstowy w plikach i w atrybutach plików.\n"
@@ -9663,7 +9663,7 @@ msgstr "Opis zmian jest ścieżką (chci
#: ../svn/main.c:2065
msgid "The lock comment is a pathname (was -F intended?); use '--force-log' to override"
-msgstr "Opis blokady jest ścieżką (chciano użyć -F?); użyj --force-log, bywymusić użycie takiego opisu"
+msgstr "Opis blokady jest ścieżką (chciano użyć -F?); użyj --force-log, by wymusić użycie takiego opisu"
#: ../svn/main.c:2079
msgid "--relocate and --depth are mutually exclusive"