You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by vm...@apache.org on 2012/12/24 23:47:16 UTC
svn commit: r1425690 [4/6] - in /subversion/branches/javahl-ra: ./
contrib/server-side/fsfsfixer/ notes/ subversion/include/
subversion/include/private/ subversion/libsvn_client/
subversion/libsvn_delta/ subversion/libsvn_fs_fs/ subversion/libsvn_ra/ s...
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.c Mon Dec 24 22:47:14 2012
@@ -109,25 +109,6 @@
#define SQLITE_PROPERTIES_AVAILABLE(stmt, i) \
(svn_sqlite__column_bytes(stmt, i) > 2)
-/* Calculates the depth of the relpath below "" */
-APR_INLINE static int
-relpath_depth(const char *relpath)
-{
- int n = 1;
- if (*relpath == '\0')
- return 0;
-
- do
- {
- if (*relpath == '/')
- n++;
- }
- while (*(++relpath));
-
- return n;
-}
-
-
int
svn_wc__db_op_depth_for_upgrade(const char *local_relpath)
{
@@ -343,26 +324,6 @@ db_read_pristine_props(apr_hash_t **prop
apr_pool_t *scratch_pool);
static svn_error_t *
-base_get_info(svn_wc__db_status_t *status,
- svn_kind_t *kind,
- svn_revnum_t *revision,
- const char **repos_relpath,
- apr_int64_t *repos_id,
- svn_revnum_t *changed_rev,
- apr_time_t *changed_date,
- const char **changed_author,
- svn_depth_t *depth,
- const svn_checksum_t **checksum,
- const char **target,
- svn_wc__db_lock_t **lock,
- svn_boolean_t *had_props,
- svn_boolean_t *update_root,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-static svn_error_t *
read_info(svn_wc__db_status_t *status,
svn_kind_t *kind,
svn_revnum_t *revision,
@@ -410,16 +371,6 @@ scan_addition(svn_wc__db_status_t *statu
apr_pool_t *scratch_pool);
static svn_error_t *
-scan_deletion(const char **base_del_relpath,
- const char **moved_to_relpath,
- const char **work_del_relpath,
- const char **moved_to_op_root_relpath,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool);
-
-static svn_error_t *
convert_to_working_status(svn_wc__db_status_t *working_status,
svn_wc__db_status_t status);
@@ -2116,11 +2067,12 @@ db_base_remove(void *baton,
svn_kind_t kind;
svn_boolean_t keep_working;
- SVN_ERR(base_get_info(&status, &kind, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(&status, &kind, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* ### This function should be turned into a helper of this function,
as this is the only valid caller */
@@ -2337,27 +2289,25 @@ svn_wc__db_base_remove(svn_wc__db_t *db,
}
-/* Like svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH and outputting REPOS_ID instead of URL+UUID. */
-static svn_error_t *
-base_get_info(svn_wc__db_status_t *status,
- svn_kind_t *kind,
- svn_revnum_t *revision,
- const char **repos_relpath,
- apr_int64_t *repos_id,
- svn_revnum_t *changed_rev,
- apr_time_t *changed_date,
- const char **changed_author,
- svn_depth_t *depth,
- const svn_checksum_t **checksum,
- const char **target,
- svn_wc__db_lock_t **lock,
- svn_boolean_t *had_props,
- svn_boolean_t *update_root,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_base_get_info_internal(svn_wc__db_status_t *status,
+ svn_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_wc__db_lock_t **lock,
+ svn_boolean_t *had_props,
+ svn_boolean_t *update_root,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
svn_sqlite__stmt_t *stmt;
svn_boolean_t have_row;
@@ -2497,11 +2447,14 @@ svn_wc__db_base_get_info(svn_wc__db_stat
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(base_get_info(status, kind, revision, repos_relpath, &repos_id,
- changed_rev, changed_date, changed_author, depth,
- checksum, target, lock, had_props,
- update_root,
- wcroot, local_relpath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(status, kind, revision,
+ repos_relpath, &repos_id,
+ changed_rev, changed_date,
+ changed_author, depth,
+ checksum, target, lock,
+ had_props, update_root,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
SVN_ERR_ASSERT(repos_id != INVALID_REPOS_ID);
SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid,
wcroot->sdb, repos_id, result_pool));
@@ -2961,9 +2914,11 @@ insert_external_node(void *baton,
wcroot->sdb, scratch_pool));
/* And there must be no existing BASE node or it must be a file external */
- err = base_get_info(&status, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, &update_root,
- wcroot, local_relpath, scratch_pool, scratch_pool);
+ err = svn_wc__db_base_get_info_internal(&status, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &update_root,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool);
if (err)
{
if (err->apr_err != SVN_ERR_WC_PATH_NOT_FOUND)
@@ -3784,9 +3739,10 @@ get_info_for_copy(apr_int64_t *copyfrom_
{
const char *base_del_relpath, *work_del_relpath;
- SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath,
- NULL, wcroot, local_relpath, scratch_pool,
- scratch_pool));
+ SVN_ERR(svn_wc__db_scan_deletion_internal(&base_del_relpath, NULL,
+ &work_del_relpath,
+ NULL, wcroot, local_relpath,
+ scratch_pool, scratch_pool));
if (work_del_relpath)
{
const char *op_root_relpath;
@@ -3808,12 +3764,14 @@ get_info_for_copy(apr_int64_t *copyfrom_
}
else if (base_del_relpath)
{
- SVN_ERR(base_get_info(NULL, NULL, copyfrom_rev, copyfrom_relpath,
- copyfrom_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, copyfrom_rev,
+ copyfrom_relpath,
+ copyfrom_id, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ wcroot, local_relpath,
+ result_pool,
+ scratch_pool));
}
else
SVN_ERR_MALFUNCTION();
@@ -6392,11 +6350,12 @@ remove_node_txn(void *baton,
/* Need info for not_present node? */
if (SVN_IS_VALID_REVNUM(rnb->not_present_rev))
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
if (rnb->destroy_wc
&& (!rnb->destroy_changes || *local_relpath == '\0'))
@@ -8561,17 +8520,25 @@ read_url_txn(void *baton,
const char *base_del_relpath;
const char *work_del_relpath;
- SVN_ERR(scan_deletion(&base_del_relpath, NULL, &work_del_relpath,
- NULL, wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_scan_deletion_internal(&base_del_relpath, NULL,
+ &work_del_relpath,
+ NULL, wcroot,
+ local_relpath,
+ scratch_pool,
+ scratch_pool));
if (base_del_relpath)
{
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath,
- &repos_id, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, base_del_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath,
+ &repos_id,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ wcroot,
+ base_del_relpath,
+ scratch_pool,
+ scratch_pool));
repos_relpath = svn_relpath_join(
repos_relpath,
@@ -9543,9 +9510,12 @@ svn_wc__db_global_relocate(svn_wc__db_t
if (status == svn_wc__db_status_deleted)
{
const char *work_del_relpath;
- SVN_ERR(scan_deletion(NULL, NULL, &work_del_relpath, NULL,
- wcroot, local_dir_relpath,
- scratch_pool, scratch_pool));
+
+ SVN_ERR(svn_wc__db_scan_deletion_internal(NULL, NULL,
+ &work_del_relpath, NULL,
+ wcroot, local_dir_relpath,
+ scratch_pool,
+ scratch_pool));
if (work_del_relpath)
{
/* Deleted within a copy/move */
@@ -9565,11 +9535,12 @@ svn_wc__db_global_relocate(svn_wc__db_t
scratch_pool, scratch_pool));
}
else
- SVN_ERR(base_get_info(NULL, NULL, NULL, NULL, &rb.old_repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_dir_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL, NULL,
+ &rb.old_repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_dir_relpath,
+ scratch_pool, scratch_pool));
}
SVN_ERR(fetch_repos_info(NULL, &rb.repos_uuid,
@@ -9628,11 +9599,12 @@ determine_repos_info(apr_int64_t *repos_
svn_relpath_split(&local_parent_relpath, &name, local_relpath, scratch_pool);
/* The REPOS_ID will be the same (### until we support mixed-repos) */
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_parent_relpath, repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_parent_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_parent_relpath, repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_parent_relpath,
+ scratch_pool, scratch_pool));
*repos_relpath = svn_relpath_join(repos_parent_relpath, name, result_pool);
@@ -10167,11 +10139,12 @@ bump_node_revision(svn_wc__db_wcroot_t *
if (apr_hash_get(exclude_relpaths, local_relpath, APR_HASH_KEY_STRING))
return SVN_NO_ERROR;
- SVN_ERR(base_get_info(&status, &db_kind, &revision, &repos_relpath,
- &repos_id, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, &update_root,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(&status, &db_kind, &revision,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, &update_root,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* Skip file externals */
if (update_root
@@ -10300,9 +10273,11 @@ bump_revisions_post_update(void *baton,
svn_error_t *err;
apr_int64_t new_repos_id = INVALID_REPOS_ID;
- err = base_get_info(&status, &kind, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath, scratch_pool, scratch_pool);
+ err = svn_wc__db_base_get_info_internal(&status, &kind, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool);
if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
svn_error_clear(err);
@@ -10391,11 +10366,12 @@ lock_add_txn(void *baton,
const char *repos_relpath;
apr_int64_t repos_id;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb, STMT_INSERT_LOCK));
SVN_ERR(svn_sqlite__bindf(stmt, "iss",
@@ -10452,11 +10428,12 @@ lock_remove_txn(void *baton,
apr_int64_t repos_id;
svn_sqlite__stmt_t *stmt;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_DELETE_LOCK));
@@ -10511,10 +10488,12 @@ svn_wc__db_scan_base_repos(const char **
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(base_get_info(NULL, NULL, NULL, repos_relpath, &repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, local_relpath, result_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ result_pool, scratch_pool));
SVN_ERR(fetch_repos_info(repos_root_url, repos_uuid, wcroot->sdb,
repos_id, result_pool));
@@ -10865,11 +10844,12 @@ scan_addition_txn(void *baton,
{
const char *base_relpath;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &base_relpath, sab->repos_id,
- NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- wcroot, op_root_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &base_relpath, sab->repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, op_root_relpath,
+ scratch_pool, scratch_pool));
if (sab->repos_relpath)
*sab->repos_relpath = svn_relpath_join(base_relpath, build_relpath,
@@ -11409,17 +11389,15 @@ scan_deletion_txn(void *baton,
}
-/* Like svn_wc__db_scan_deletion(), but with WCROOT+LOCAL_RELPATH instead of
- DB+LOCAL_ABSPATH, and outputting relpaths instead of abspaths. */
-static svn_error_t *
-scan_deletion(const char **base_del_relpath,
- const char **moved_to_relpath,
- const char **work_del_relpath,
- const char **moved_to_op_root_relpath,
- svn_wc__db_wcroot_t *wcroot,
- const char *local_relpath,
- apr_pool_t *result_pool,
- apr_pool_t *scratch_pool)
+svn_error_t *
+svn_wc__db_scan_deletion_internal(const char **base_del_relpath,
+ const char **moved_to_relpath,
+ const char **work_del_relpath,
+ const char **moved_to_op_root_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
struct scan_deletion_baton_t sd_baton;
@@ -11456,9 +11434,12 @@ svn_wc__db_scan_deletion(const char **ba
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
- SVN_ERR(scan_deletion(&base_del_relpath, &moved_to_relpath,
- &work_del_relpath, &moved_to_op_root_relpath, wcroot,
- local_relpath, scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_scan_deletion_internal(&base_del_relpath,
+ &moved_to_relpath,
+ &work_del_relpath,
+ &moved_to_op_root_relpath, wcroot,
+ local_relpath, scratch_pool,
+ scratch_pool));
if (base_del_abspath)
{
@@ -11940,7 +11921,7 @@ svn_wc__db_temp_get_format(int *format,
directory to not be a working copy. */
if (err)
{
- if (err && err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
+ if (err->apr_err != SVN_ERR_WC_NOT_WORKING_COPY)
return svn_error_trace(err);
svn_error_clear(err);
@@ -12286,14 +12267,28 @@ svn_wc__db_read_conflict(svn_skel_t **co
{
svn_wc__db_wcroot_t *wcroot;
const char *local_relpath;
- svn_sqlite__stmt_t *stmt;
- svn_boolean_t have_row;
/* The parent should be a working copy directory. */
SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath, db,
local_abspath, scratch_pool, scratch_pool));
VERIFY_USABLE_WCROOT(wcroot);
+ return svn_error_trace(svn_wc__db_read_conflict_internal(conflict, wcroot,
+ local_relpath,
+ result_pool,
+ scratch_pool));
+}
+
+svn_error_t *
+svn_wc__db_read_conflict_internal(svn_skel_t **conflict,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ svn_sqlite__stmt_t *stmt;
+ svn_boolean_t have_row;
+
/* Check if we have a conflict in ACTUAL */
SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
STMT_SELECT_ACTUAL_NODE));
@@ -12980,9 +12975,11 @@ end_directory_update(void *baton,
svn_sqlite__stmt_t *stmt;
svn_wc__db_status_t base_status;
- SVN_ERR(base_get_info(&base_status, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath, scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(&base_status, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
if (base_status == svn_wc__db_status_normal)
return SVN_NO_ERROR;
@@ -13455,10 +13452,12 @@ has_switched_subtrees(svn_boolean_t *is_
*is_switched = FALSE;
- SVN_ERR(base_get_info(NULL, NULL, NULL, &repos_relpath, &repos_id, NULL,
- NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
- wcroot, local_relpath,
- scratch_pool, scratch_pool));
+ SVN_ERR(svn_wc__db_base_get_info_internal(NULL, NULL, NULL,
+ &repos_relpath, &repos_id,
+ NULL, NULL, NULL, NULL, NULL,
+ NULL, NULL, NULL, NULL,
+ wcroot, local_relpath,
+ scratch_pool, scratch_pool));
/* First do the cheap check where we only need info on the origin itself */
if (trail_url != NULL)
@@ -14026,3 +14025,36 @@ svn_wc__db_verify(svn_wc__db_t *db,
SVN_ERR(verify_wcroot(wcroot, scratch_pool));
return SVN_NO_ERROR;
}
+
+svn_error_t *
+svn_wc__db_bump_format(int *result_format,
+ const char *wcroot_abspath,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool)
+{
+
+ svn_wc__db_wcroot_t *wcroot;
+ const char *local_relpath;
+
+ SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(&wcroot, &local_relpath,
+ db, wcroot_abspath,
+ scratch_pool, scratch_pool));
+
+ /* This function is indirectly called from the upgrade code, so we
+ can't verify the wcroot here. Just check that it is not NULL */
+ SVN_ERR_ASSERT(wcroot != NULL);
+
+ /* Reject attempts to upgrade subdirectories of a working copy. */
+ if (strcmp(wcroot_abspath, wcroot->abspath) != 0)
+ return svn_error_createf(
+ SVN_ERR_WC_INVALID_OP_ON_CWD, NULL,
+ _("Can't upgrade '%s' as it is not a working copy root,"
+ " the root is '%s'"),
+ svn_dirent_local_style(wcroot_abspath, scratch_pool),
+ svn_dirent_local_style(wcroot->abspath, scratch_pool));
+
+ SVN_ERR(svn_wc__upgrade_sdb(result_format, wcroot->abspath,
+ wcroot->sdb, wcroot->format,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.h?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.h Mon Dec 24 22:47:14 2012
@@ -2792,6 +2792,23 @@ svn_wc__db_upgrade_get_repos_id(apr_int6
const char *repos_root_url,
apr_pool_t *scratch_pool);
+/* Upgrade the metadata concerning the WC at WCROOT_ABSPATH, in DB,
+ * to the SVN_WC__VERSION format.
+ *
+ * This function is used for upgrading wc-ng working copies to a newer
+ * wc-ng format. If a pre-1.7 working copy is found, this function
+ * returns SVN_ERR_WC_UPGRADE_REQUIRED.
+ *
+ * Upgrading subdirectories of a working copy is not supported.
+ * If WCROOT_ABSPATH is not a working copy root SVN_ERR_WC_INVALID_OP_ON_CWD
+ * is returned.
+ */
+svn_error_t *
+svn_wc__db_bump_format(int *result_format,
+ const char *wcroot_abspath,
+ svn_wc__db_t *db,
+ apr_pool_t *scratch_pool);
+
/* @} */
@@ -3181,6 +3198,21 @@ svn_wc__db_follow_moved_to(apr_array_hea
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Update a moved-away tree conflict victim at VICTIM_ABSPATH with changes
+ * brought in by the update operation which flagged the tree conflict.
+ * Set *WORK_ITEMS to a list of work items, allocated in RESULT_POOL, that
+ * need to run as part of marking the conflict resolved. */
+svn_error_t *
+svn_wc__db_update_moved_away_conflict_victim(svn_skel_t **work_items,
+ const char *victim_abspath,
+ svn_wc__db_t *db,
+ svn_wc_notify_func2_t notify_func,
+ void *notify_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* @} */
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_private.h?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_private.h (original)
+++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_private.h Mon Dec 24 22:47:14 2012
@@ -148,6 +148,24 @@ svn_wc__db_wcroot_parse_local_abspath(sv
#define VERIFY_USABLE_WCROOT(wcroot) SVN_ERR_ASSERT( \
(wcroot) != NULL && (wcroot)->format == SVN_WC__VERSION)
+/* Calculates the depth of the relpath below "" */
+APR_INLINE static int
+relpath_depth(const char *relpath)
+{
+ int n = 1;
+ if (*relpath == '\0')
+ return 0;
+
+ do
+ {
+ if (*relpath == '/')
+ n++;
+ }
+ while (*(++relpath));
+
+ return n;
+}
+
/* */
svn_error_t *
@@ -208,6 +226,50 @@ svn_wc__db_read_info_internal(svn_wc__db
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+/* Like svn_wc__db_scan_deletion(), but with WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH, and outputting relpaths instead of abspaths. */
+svn_error_t *
+svn_wc__db_scan_deletion_internal(const char **base_del_relpath,
+ const char **moved_to_relpath,
+ const char **work_del_relpath,
+ const char **moved_to_op_root_relpath,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Like svn_wc__db_base_get_info(), but taking WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH and outputting REPOS_ID instead of URL+UUID. */
+svn_error_t *
+svn_wc__db_base_get_info_internal(svn_wc__db_status_t *status,
+ svn_kind_t *kind,
+ svn_revnum_t *revision,
+ const char **repos_relpath,
+ apr_int64_t *repos_id,
+ svn_revnum_t *changed_rev,
+ apr_time_t *changed_date,
+ const char **changed_author,
+ svn_depth_t *depth,
+ const svn_checksum_t **checksum,
+ const char **target,
+ svn_wc__db_lock_t **lock,
+ svn_boolean_t *had_props,
+ svn_boolean_t *update_root,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+
+/* Like svn_wc__db_read_conflict(), but with WCROOT+LOCAL_RELPATH instead of
+ DB+LOCAL_ABSPATH, and outputting relpaths instead of abspaths. */
+svn_error_t *
+svn_wc__db_read_conflict_internal(svn_skel_t **conflict,
+ svn_wc__db_wcroot_t *wcroot,
+ const char *local_relpath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
/* Transaction handling */
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_util.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_util.c (original)
+++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_util.c Mon Dec 24 22:47:14 2012
@@ -80,10 +80,10 @@ svn_wc__db_util_fetch_wc_id(apr_int64_t
/* An SQLite application defined function that allows SQL queries to
use "relpath_depth(local_relpath)". */
static svn_error_t *
-relpath_depth(svn_sqlite__context_t *sctx,
- int argc,
- svn_sqlite__value_t *values[],
- apr_pool_t *scratch_pool)
+relpath_depth_sqlite(svn_sqlite__context_t *sctx,
+ int argc,
+ svn_sqlite__value_t *values[],
+ apr_pool_t *scratch_pool)
{
const char *path = NULL;
apr_int64_t depth;
@@ -145,7 +145,7 @@ svn_wc__db_util_open_db(svn_sqlite__db_t
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));
+ relpath_depth_sqlite, NULL));
return SVN_NO_ERROR;
}
Modified: subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_wcroot.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_wcroot.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_wcroot.c (original)
+++ subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db_wcroot.c Mon Dec 24 22:47:14 2012
@@ -27,6 +27,7 @@
#include "svn_dirent_uri.h"
#include "svn_path.h"
+#include "svn_version.h"
#include "wc.h"
#include "adm_files.h"
@@ -294,9 +295,24 @@ svn_wc__db_pdh_create_wcroot(svn_wc__db_
}
/* Auto-upgrade the SDB if possible. */
- if (format < SVN_WC__VERSION && auto_upgrade)
- SVN_ERR(svn_wc__upgrade_sdb(&format, wcroot_abspath, sdb, format,
- scratch_pool));
+ if (format < SVN_WC__VERSION)
+ {
+ if (auto_upgrade)
+ {
+ if (format >= SVN_WC__WC_NG_VERSION)
+ SVN_ERR(svn_wc__upgrade_sdb(&format, wcroot_abspath, sdb, format,
+ scratch_pool));
+ }
+ else
+ return svn_error_createf(SVN_ERR_WC_UPGRADE_REQUIRED, NULL,
+ _("The working copy at '%s'\nis too old "
+ "(format %d) to work with client version "
+ "'%s' (expects format %d). You need to "
+ "upgrade the working copy first.\n"),
+ svn_dirent_local_style(wcroot_abspath,
+ scratch_pool), format, SVN_VERSION,
+ SVN_WC__VERSION);
+ }
*wcroot = apr_palloc(result_pool, sizeof(**wcroot));
@@ -654,7 +670,8 @@ try_symlink_as_dir:
sdb, wc_id, FORMAT_FROM_SDB,
db->auto_upgrade, db->enforce_empty_wq,
db->state_pool, scratch_pool);
- if (err && err->apr_err == SVN_ERR_WC_UNSUPPORTED_FORMAT &&
+ if (err && (err->apr_err == SVN_ERR_WC_UNSUPPORTED_FORMAT ||
+ err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED) &&
kind == svn_kind_symlink)
{
/* We found an unsupported WC after traversing upwards from a
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/dav_svn.h?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/dav_svn.h Mon Dec 24 22:47:14 2012
@@ -137,11 +137,6 @@ typedef struct dav_svn_repos {
'is_svn_client' is false, then 'capabilities' should be empty. */
apr_hash_t *client_capabilities;
- /* Whether its okay to use the extensible property XML namespace
- SVN_DAV_PROP_NS_SVN in PROPFIND/PROPPATCH requests and
- responses. */
- svn_boolean_t use_ext_prop_ns;
-
/* The path to the activities db */
const char *activities_db;
@@ -340,10 +335,6 @@ svn_boolean_t dav_svn__check_httpv2_supp
txnprop support be advertised? */
svn_boolean_t dav_svn__check_ephemeral_txnprops_support(request_rec *r);
-/* For the repository referred to by this request, should support for
- property on-the-wire XML namespaces under the extensible namespace
- URI be advertised? */
-svn_boolean_t dav_svn__check_prop_ext_ns_support(request_rec *r);
/* SPECIAL URI
@@ -408,7 +399,7 @@ 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. */
const char *dav_svn__get_hooks_env(request_rec *r);
@@ -768,7 +759,11 @@ dav_svn__authz_read_func(dav_svn__authz_
processing. See dav_new_error_tag for parameter documentation.
Note that DESC may be null (it's hard to track this down from
dav_new_error_tag()'s documentation, but see the dav_error type,
- which says that its desc field may be NULL). */
+ which says that its desc field may be NULL).
+
+ If ERROR_ID is 0, SVN_ERR_RA_DAV_REQUEST_FAILED will be used as a
+ default value for the error code.
+*/
dav_error *
dav_svn__new_error_tag(apr_pool_t *pool,
int status,
@@ -783,7 +778,11 @@ dav_svn__new_error_tag(apr_pool_t *pool,
processing. See dav_new_error for parameter documentation.
Note that DESC may be null (it's hard to track this down from
dav_new_error()'s documentation, but see the dav_error type,
- which says that its desc field may be NULL). */
+ which says that its desc field may be NULL).
+
+ If ERROR_ID is 0, SVN_ERR_RA_DAV_REQUEST_FAILED will be used as a
+ default value for the error code.
+*/
dav_error *
dav_svn__new_error(apr_pool_t *pool,
int status,
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/deadprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/deadprops.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/deadprops.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/deadprops.c Mon Dec 24 22:47:14 2012
@@ -68,112 +68,28 @@ get_repos_path(struct dav_resource_priva
}
-/* Return a Subversion property name constructed from the namespace
- and bare name values found withing DAVNAME. Use SCRATCH_POOL for
- temporary allocations.
-
- This is the reverse of the davname_to_propname() function. */
-static const char *
-davname_to_propname(dav_db *db,
- const dav_prop_name *davname)
+/* construct the repos-local name for the given DAV property name */
+static void
+get_repos_propname(dav_db *db,
+ const dav_prop_name *name,
+ const char **repos_propname)
{
- const char *propname = NULL;
-
- if (strcmp(davname->ns, SVN_DAV_PROP_NS_SVN) == 0)
+ if (strcmp(name->ns, SVN_DAV_PROP_NS_SVN) == 0)
{
/* recombine the namespace ("svn:") and the name. */
svn_stringbuf_set(db->work, SVN_PROP_PREFIX);
- svn_stringbuf_appendcstr(db->work, davname->name);
- propname = db->work->data;
+ svn_stringbuf_appendcstr(db->work, name->name);
+ *repos_propname = db->work->data;
}
- else if (strcmp(davname->ns, SVN_DAV_PROP_NS_CUSTOM) == 0)
+ else if (strcmp(name->ns, SVN_DAV_PROP_NS_CUSTOM) == 0)
{
/* the name of a custom prop is just the name -- no ns URI */
- propname = davname->name;
- }
- else if (strncmp(davname->ns, SVN_DAV_PROP_NS_EXTENSIBLE,
- sizeof(SVN_DAV_PROP_NS_EXTENSIBLE) - 1) == 0)
- {
- const char *relpath =
- svn_path_uri_decode(davname->ns +
- (sizeof(SVN_DAV_PROP_NS_EXTENSIBLE) - 1),
- db->resource->pool);
- svn_stringbuf_set(db->work, relpath);
- svn_stringbuf_appendbytes(db->work, ":", 1);
- svn_stringbuf_appendcstr(db->work, davname->name);
- propname = db->work->data;
- }
-
- return propname;
-}
-
-
-/* Return a dav_prop_name structure allocated from POOL which
- describes the Subversion property name PROPNAME (with length
- NAMELEN). If ALLOW_EXT_NS is set, PROPNAME is parsed according to
- the rules which apply when the custom Subversion extensible
- property namespace is in use. Otherwise, we fall back to old rules
- which have been in place since Subversion's origins.
-
- This is the reverse of the davname_to_propname() function. */
-static dav_prop_name *
-propname_to_davname(const char *propname,
- int namelen,
- svn_boolean_t allow_ext_ns,
- apr_pool_t *pool)
-{
- const char *colon;
- dav_prop_name *davname = apr_pcalloc(pool, sizeof(*davname));
-
- /* If we're allowed to use the extensible XML property namespace, we
- parse pretty carefully. */
- if (allow_ext_ns)
- {
- /* If there's no colon in this property name, it's a custom
- property (C:name). */
- colon = strrchr((char *)propname, ':');
- if (! colon)
- {
- davname->ns = SVN_DAV_PROP_NS_CUSTOM;
- davname->name = apr_pstrdup(pool, propname);
- }
-
- /* If the property name prefix is merely "svn:", it's a
- Subversion property (S:name-without-the-prefix). */
- else if (strncmp(propname, "svn:", colon - propname) == 0)
- {
- davname->ns = SVN_DAV_PROP_NS_SVN;
- davname->name = apr_pstrdup(pool, colon + 1);
- }
-
- /* Anything else requires a custom xmlns prefix mapping beyond
- the magic prefixes we've already built in. */
- else
- {
- const char *barename = apr_pstrndup(pool, propname, colon - propname);
- davname->ns = apr_pstrcat(pool, SVN_DAV_PROP_NS_EXTENSIBLE,
- svn_path_uri_encode(barename, pool),
- (char *)NULL);
- davname->name = apr_pstrdup(pool, colon + 1);
- }
+ *repos_propname = name->name;
}
-
- /* Otherwise, we distinguish only between "svn:*" and everything else. */
else
{
- if (strncmp(propname, SVN_PROP_PREFIX, sizeof(SVN_PROP_PREFIX) - 1) == 0)
- {
- davname->ns = SVN_DAV_PROP_NS_SVN;
- davname->name = apr_pstrdup(pool, propname + 4);
- }
- else
- {
- davname->ns = SVN_DAV_PROP_NS_CUSTOM;
- davname->name = apr_pstrdup(pool, propname);
- }
+ *repos_propname = NULL;
}
-
- return davname;
}
@@ -184,7 +100,7 @@ get_value(dav_db *db, const dav_prop_nam
svn_error_t *serr;
/* get the repos-local name */
- propname = davname_to_propname(db, name);
+ get_repos_propname(db, name, &propname);
if (propname == NULL)
{
@@ -256,7 +172,7 @@ save_value(dav_db *db, const dav_prop_na
const dav_resource *resource = db->resource;
/* get the repos-local name */
- propname = davname_to_propname(db, name);
+ get_repos_propname(db, name, &propname);
if (propname == NULL)
{
@@ -444,7 +360,7 @@ db_output_value(dav_db *db,
apr_text_header *phdr,
int *found)
{
- const char *prefix = "", *xmlns_attr = "";
+ const char *prefix;
const char *s;
svn_string_t *propval;
dav_error *err;
@@ -459,25 +375,14 @@ db_output_value(dav_db *db,
return NULL;
if (strcmp(name->ns, SVN_DAV_PROP_NS_CUSTOM) == 0)
- {
- prefix = "C:";
- }
- else if (strcmp(name->ns, SVN_DAV_PROP_NS_SVN) == 0)
- {
- prefix = "S:";
- }
- else if (strncmp(name->ns, SVN_DAV_PROP_NS_EXTENSIBLE,
- sizeof(SVN_DAV_PROP_NS_EXTENSIBLE) - 1) == 0)
- {
- prefix = "";
- xmlns_attr = apr_pstrcat(pool, " xmlns=\"", name->ns, "\"", (char *)NULL);
- }
+ prefix = "C:";
+ else
+ prefix = "S:";
if (propval->len == 0)
{
/* empty value. add an empty elem. */
- s = apr_psprintf(pool, "<%s%s%s/>" DEBUG_CR,
- prefix, name->name, xmlns_attr);
+ s = apr_psprintf(pool, "<%s%s/>" DEBUG_CR, prefix, name->name);
apr_text_append(pool, phdr, s);
}
else
@@ -502,8 +407,7 @@ db_output_value(dav_db *db,
xml_safe = xmlval->data;
}
- s = apr_psprintf(pool, "<%s%s%s%s>",
- prefix, name->name, encoding, xmlns_attr);
+ s = apr_psprintf(pool, "<%s%s%s>", prefix, name->name, encoding);
apr_text_append(pool, phdr, s);
/* the value is in our pool which means it has the right lifetime. */
@@ -636,7 +540,7 @@ db_remove(dav_db *db, const dav_prop_nam
const char *propname;
/* get the repos-local name */
- propname = davname_to_propname(db, name);
+ get_repos_propname(db, name, &propname);
/* ### non-svn props aren't in our repos, so punt for now */
if (propname == NULL)
@@ -684,7 +588,7 @@ db_exists(dav_db *db, const dav_prop_nam
int retval;
/* get the repos-local name */
- propname = davname_to_propname(db, name);
+ get_repos_propname(db, name, &propname);
/* ### non-svn props aren't in our repos */
if (propname == NULL)
@@ -723,16 +627,21 @@ static void get_name(dav_db *db, dav_pro
else
{
const void *name;
- apr_ssize_t namelen;
- dav_prop_name *dav_name;
- apr_hash_this(db->hi, &name, &namelen, NULL);
- dav_name = propname_to_davname(
- name, namelen,
- db->resource->info->repos->use_ext_prop_ns,
- db->resource->pool);
- pname->ns = dav_name->ns;
- pname->name = dav_name->name;
+ apr_hash_this(db->hi, &name, NULL, NULL);
+
+#define PREFIX_LEN (sizeof(SVN_PROP_PREFIX) - 1)
+ if (strncmp(name, SVN_PROP_PREFIX, PREFIX_LEN) == 0)
+#undef PREFIX_LEN
+ {
+ pname->ns = SVN_DAV_PROP_NS_SVN;
+ pname->name = (const char *)name + 4;
+ }
+ else
+ {
+ pname->ns = SVN_DAV_PROP_NS_CUSTOM;
+ pname->name = name;
+ }
}
}
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/liveprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/liveprops.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/liveprops.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/liveprops.c Mon Dec 24 22:47:14 2012
@@ -277,8 +277,8 @@ insert_prop_internal(const dav_resource
int propid,
dav_prop_insert what,
apr_text_header *phdr,
- apr_pool_t *scratch_pool,
- apr_pool_t *result_pool)
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
{
const char *value = NULL;
const char *s;
@@ -822,7 +822,7 @@ insert_prop(const dav_resource *resource
scratch_pool = svn_pool_create(result_pool);
rv = insert_prop_internal(resource, propid, what, phdr,
- scratch_pool, result_pool);
+ result_pool, scratch_pool);
svn_pool_destroy(scratch_pool);
return rv;
@@ -960,7 +960,7 @@ dav_svn__insert_all_liveprops(request_re
{
svn_pool_clear(iterpool);
(void) insert_prop_internal(resource, spec->propid, what, phdr,
- iterpool, resource->pool);
+ resource->pool, iterpool);
}
svn_pool_destroy(iterpool);
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/mod_dav_svn.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/mod_dav_svn.c Mon Dec 24 22:47:14 2012
@@ -60,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;
@@ -111,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)
{
@@ -165,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;
}
@@ -181,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;
}
@@ -535,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)
@@ -552,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;
}
@@ -820,21 +840,6 @@ dav_svn__check_ephemeral_txnprops_suppor
}
-svn_boolean_t
-dav_svn__check_prop_ext_ns_support(request_rec *r)
-{
- svn_version_t *version = dav_svn__get_master_version(r);
-
- /* We know this server supports extensible property namespaces. 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;
-}
-
-
/* FALSE if path authorization should be skipped.
* TRUE if either the bypass or the apache subrequest methods should be used.
*/
@@ -913,9 +918,21 @@ 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;
+ }
}
const char *
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/file-revs.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/file-revs.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/file-revs.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/file-revs.c Mon Dec 24 22:47:14 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/javahl-ra/subversion/mod_dav_svn/reports/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/replay.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/replay.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/replay.c Mon Dec 24 22:47:14 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/javahl-ra/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/update.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/reports/update.c Mon Dec 24 22:47:14 2012
@@ -88,6 +88,9 @@ typedef struct update_ctx_t {
/* 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;
@@ -840,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;
@@ -919,6 +922,49 @@ malformed_element_error(const char *tagn
}
+/* Validate that REVISION is a valid revision number for repository in
+ which YOUNGEST is the latest revision. Use RESOURCE as a
+ convenient way to access the request record and a pool for error
+ messaging. (It's okay if REVISION is SVN_INVALID_REVNUM, as in
+ the related contexts that just means "the youngest revision".)
+
+ REVTYPE is just a string describing the type/purpose of REVISION,
+ used in the generated error string. */
+static dav_error *
+validate_input_revision(svn_revnum_t revision,
+ svn_revnum_t youngest,
+ const char *revtype,
+ const dav_resource *resource)
+{
+ if (! SVN_IS_VALID_REVNUM(revision))
+ return SVN_NO_ERROR;
+
+ if (revision > youngest)
+ {
+ svn_error_t *serr;
+
+ if (dav_svn__get_master_uri(resource->info->r))
+ {
+ serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0,
+ "No such %s '%ld' found in the repository. "
+ "Perhaps the repository is out of date with "
+ "respect to the master repository?",
+ revtype, revision);
+ }
+ else
+ {
+ serr = svn_error_createf(SVN_ERR_FS_NO_SUCH_REVISION, 0,
+ "No such %s '%ld' found in the repository.",
+ revtype, revision);
+ }
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Invalid revision found in update report "
+ "request.", resource->pool);
+ }
+ return SVN_NO_ERROR;
+}
+
+
dav_error *
dav_svn__update_report(const dav_resource *resource,
const apr_xml_doc *doc,
@@ -928,8 +974,7 @@ dav_svn__update_report(const dav_resourc
apr_xml_elem *child;
void *rbaton = NULL;
update_ctx_t uc = { 0 };
- svn_revnum_t revnum = SVN_INVALID_REVNUM;
- svn_boolean_t revnum_is_head = FALSE;
+ svn_revnum_t youngest, revnum = SVN_INVALID_REVNUM;
svn_revnum_t from_revnum = SVN_INVALID_REVNUM;
int ns;
/* entry_counter and entry_is_empty are for operational logging. */
@@ -995,6 +1040,14 @@ dav_svn__update_report(const dav_resourc
}
}
+ /* Ask the repository about its youngest revision (which we'll need
+ for some input validation later). */
+ if ((serr = svn_fs_youngest_rev(&youngest, repos->fs, resource->pool)))
+ return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
+ "Could not determine the youngest "
+ "revision for the update process.",
+ resource->pool);
+
for (child = doc->root->first_child; child != NULL; child = child->next)
{
/* Note that child->name might not match any of the cases below.
@@ -1122,6 +1175,23 @@ dav_svn__update_report(const dav_resourc
}
}
+ /* If a target revision wasn't requested, or the requested target
+ revision was invalid, just update to HEAD as of the moment we
+ queried the youngest revision. Otherwise, at least make sure the
+ request makes sense in light of that youngest revision
+ number. */
+ if (! SVN_IS_VALID_REVNUM(revnum))
+ {
+ revnum = youngest;
+ }
+ else
+ {
+ derr = validate_input_revision(revnum, youngest, "target revision",
+ resource);
+ if (derr)
+ return derr;
+ }
+
if (!saw_depth && !saw_recursive && (requested_depth == svn_depth_unknown))
requested_depth = svn_depth_infinity;
@@ -1137,19 +1207,8 @@ dav_svn__update_report(const dav_resourc
SVN_DAV_ERROR_TAG);
}
- /* If a revision for this operation was not dictated to us, this
- means "update to whatever the current HEAD is now". */
- if (revnum == SVN_INVALID_REVNUM)
- {
- if ((serr = svn_fs_youngest_rev(&revnum, repos->fs, resource->pool)))
- return dav_svn__convert_err(serr, HTTP_INTERNAL_SERVER_ERROR,
- "Could not determine the youngest "
- "revision for the update process.",
- resource->pool);
- revnum_is_head = TRUE;
- }
-
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;
@@ -1266,27 +1325,10 @@ dav_svn__update_report(const dav_resourc
{
rev = SVN_STR_TO_REV(this_attr->value);
saw_rev = TRUE;
- if (revnum_is_head && rev > revnum)
- {
- if (dav_svn__get_master_uri(resource->info->r))
- return dav_svn__new_error_tag(
- resource->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "A reported revision is higher than the "
- "current repository HEAD revision. "
- "Perhaps the repository is out of date "
- "with respect to the master repository?",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
- else
- return dav_svn__new_error_tag(
- resource->pool,
- HTTP_INTERNAL_SERVER_ERROR, 0,
- "A reported revision is higher than the "
- "current repository HEAD revision.",
- SVN_DAV_ERROR_NAMESPACE,
- SVN_DAV_ERROR_TAG);
- }
+ if ((derr = validate_input_revision(rev, youngest,
+ "reported revision",
+ resource)))
+ return derr;
}
else if (strcmp(this_attr->name, "depth") == 0)
depth = svn_depth_from_word(this_attr->value);
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/repos.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/repos.c Mon Dec 24 22:47:14 2012
@@ -2143,14 +2143,6 @@ get_resource(request_rec *r,
SVN_RA_CAPABILITY_MERGEINFO,
APR_HASH_KEY_STRING, capability_yes);
}
-
- /* We don't need to report the DAV-specific extensible
- property XML namespace capability to hook scripts, so
- we'll just stash it in our repos structure. */
- if (svn_cstring_match_list(SVN_DAV_NS_DAV_SVN_PROP_EXT_NS, vals))
- {
- repos->use_ext_prop_ns = TRUE;
- }
}
}
}
@@ -3654,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
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/util.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/util.c Mon Dec 24 22:47:14 2012
@@ -45,6 +45,9 @@ dav_svn__new_error(apr_pool_t *pool,
int error_id,
const char *desc)
{
+ if (error_id == 0)
+ error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
/*
* Note: dav_new_error() in httpd 2.0/2.2 always treated
* the errno field in dav_error as an apr_status_t when
@@ -70,6 +73,9 @@ dav_svn__new_error_tag(apr_pool_t *pool,
const char *namespace,
const char *tagname)
{
+ if (error_id == 0)
+ error_id = SVN_ERR_RA_DAV_REQUEST_FAILED;
+
#if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
return dav_new_error_tag(pool, status, error_id, 0,
desc, namespace, tagname);
Modified: subversion/branches/javahl-ra/subversion/mod_dav_svn/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/mod_dav_svn/version.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/javahl-ra/subversion/mod_dav_svn/version.c Mon Dec 24 22:47:14 2012
@@ -203,12 +203,6 @@ get_option(const dav_resource *resource,
SVN_DAV_NS_DAV_SVN_EPHEMERAL_TXNPROPS);
}
- if (dav_svn__check_prop_ext_ns_support(r))
- {
- apr_table_addn(r->headers_out, "DAV",
- SVN_DAV_NS_DAV_SVN_PROP_EXT_NS);
- }
-
if (resource->info->repos->fs)
{
svn_error_t *serr;
@@ -251,11 +245,17 @@ 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);
+
+ /* The list of Subversion's custom POSTs and which versions of
+ Subversion support them. We need this latter information
+ when acting as a WebDAV slave -- we don't want to claim
+ support for a POST type if the master server which will
+ actually have to handle it won't recognize it.
+
+ Keep this in sync with what's handled in handle_post_request().
+ */
struct posts_versions_t {
const char *post_name;
svn_version_t min_version;
Modified: subversion/branches/javahl-ra/subversion/po/es.po
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/po/es.po?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/po/es.po [UTF-8] (original)
+++ subversion/branches/javahl-ra/subversion/po/es.po [UTF-8] Mon Dec 24 22:47:14 2012
@@ -13565,7 +13565,7 @@ msgstr ""
#~ " 'HEAD' lo último del repositorio\n"
#~ " 'BASE' rev base del ítem de la c. de trab.\n"
#~ " 'COMMITTED' último commit en o antes de BASE\n"
-#~ " 'PREV' revisión justo antes de COMMITED"
+#~ " 'PREV' revisión justo antes de COMMITTED"
#~ msgid "Can't open file '%s' for reading"
#~ msgstr "No se pudo abrir el archivo '%s' para leer"
Modified: subversion/branches/javahl-ra/subversion/po/pl.po
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/po/pl.po?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/po/pl.po [UTF-8] (original)
+++ subversion/branches/javahl-ra/subversion/po/pl.po [UTF-8] Mon Dec 24 22:47:14 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"
Modified: subversion/branches/javahl-ra/subversion/po/pt_BR.po
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/po/pt_BR.po?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/po/pt_BR.po [UTF-8] (original)
+++ subversion/branches/javahl-ra/subversion/po/pt_BR.po [UTF-8] Mon Dec 24 22:47:14 2012
@@ -12663,8 +12663,8 @@ msgstr ""
#~ " '{' DATA '}' revisão no início da data\n"
#~ " 'HEAD' último no repositório\n"
#~ " 'BASE' revisão base do item da cópia de trabalho\n"
-#~ " 'COMMITED' último commit em ou antes de BASE\n"
-#~ " 'PREV' revisão exatamente antes de COMMITED"
+#~ " 'COMMITTED' último commit em ou antes de BASE\n"
+#~ " 'PREV' revisão exatamente antes de COMMITTED"
#~ msgid "Can't get user name"
#~ msgstr "Não foi possível obter o nome do usuário"
Modified: subversion/branches/javahl-ra/subversion/po/zh_TW.po
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/po/zh_TW.po?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/po/zh_TW.po [UTF-8] (original)
+++ subversion/branches/javahl-ra/subversion/po/zh_TW.po [UTF-8] Mon Dec 24 22:47:14 2012
@@ -12810,7 +12810,7 @@ msgstr ""
#~ " '{' DATE '}' 該日開始的修訂版\n"
#~ " 'HEAD' 檔案庫最新版本\n"
#~ " 'BASE' 該項目工作複本的基礎修訂版\n"
-#~ " 'COMMITED' 位於或早於 BASE 的最後送交\n"
+#~ " 'COMMITTED' 位於或早於 BASE 的最後送交\n"
#~ " 'PREV' COMMITTED 之前的修訂版"
#~ msgid "Error reading administrative log file in '%s'"
Modified: subversion/branches/javahl-ra/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svn/conflict-callbacks.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/javahl-ra/subversion/svn/conflict-callbacks.c Mon Dec 24 22:47:14 2012
@@ -804,7 +804,7 @@ svn_cl__conflict_func_interactive(svn_wc
desc->local_abspath,
subpool)));
prompt = _("Select: (p) postpone, (mf) mine-full, "
- "(tf) theirs-full, (h) help:");
+ "(tf) theirs-full, (h) help: ");
while (1)
{
@@ -856,7 +856,9 @@ svn_cl__conflict_func_interactive(svn_wc
scratch_pool),
readable_desc));
- prompt = _("Select: (p) postpone, (r) mark-resolved, (h) help: ");
+ prompt = _("Select: (p) postpone, (r) mark-resolved, "
+ "(mc) mine-conflict,\n"
+ " (tc) theirs-conflict, (h) help: ");
while (1)
{
@@ -867,8 +869,10 @@ svn_cl__conflict_func_interactive(svn_wc
if (strcmp(answer, "h") == 0 || strcmp(answer, "?") == 0)
{
SVN_ERR(svn_cmdline_fprintf(stderr, subpool,
- _(" (p) postpone - resolve the conflict later\n"
- " (r) resolved - accept current working tree\n")));
+ _(" (p) postpone - resolve the conflict later\n"
+ " (r) resolved - accept current working copy state\n"
+ " (mc) mine-conflict - prefer local change\n"
+ " (tc) theirs-conflict - prefer incoming change\n")));
}
if (strcmp(answer, "p") == 0 || strcmp(answer, ":-p") == 0)
{
@@ -880,6 +884,16 @@ svn_cl__conflict_func_interactive(svn_wc
(*result)->choice = svn_wc_conflict_choose_merged;
break;
}
+ else if (strcmp(answer, "mc") == 0)
+ {
+ (*result)->choice = svn_wc_conflict_choose_mine_conflict;
+ break;
+ }
+ else if (strcmp(answer, "tc") == 0)
+ {
+ (*result)->choice = svn_wc_conflict_choose_theirs_conflict;
+ break;
+ }
}
}
Modified: subversion/branches/javahl-ra/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svn/merge-cmd.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/javahl-ra/subversion/svn/merge-cmd.c Mon Dec 24 22:47:14 2012
@@ -104,9 +104,9 @@ ensure_wc_path_has_repo_revision(const c
return SVN_NO_ERROR;
}
-/* Symmetric, merge-tracking merge, used for sync or reintegrate purposes. */
+/* Automatic, merge-tracking merge, used for sync or reintegrate purposes. */
static svn_error_t *
-symmetric_merge(const char *source_path_or_url,
+automatic_merge(const char *source_path_or_url,
const svn_opt_revision_t *source_revision,
const char *target_wcpath,
svn_depth_t depth,
@@ -120,16 +120,16 @@ symmetric_merge(const char *source_path_
svn_client_ctx_t *ctx,
apr_pool_t *scratch_pool)
{
- svn_client_symmetric_merge_t *merge;
+ svn_client_automatic_merge_t *merge;
/* Find the 3-way merges needed (and check suitability of the WC). */
- SVN_ERR(svn_client_find_symmetric_merge(&merge,
+ SVN_ERR(svn_client_find_automatic_merge(&merge,
source_path_or_url, source_revision,
target_wcpath, allow_mixed_rev,
allow_local_mods, allow_switched_subtrees,
ctx, scratch_pool, scratch_pool));
- if (svn_client_symmetric_merge_is_reintegrate_like(merge))
+ if (svn_client_automatic_merge_is_reintegrate_like(merge))
{
if (record_only)
return svn_error_create(SVN_ERR_CL_MUTUALLY_EXCLUSIVE_ARGS, NULL,
@@ -157,7 +157,7 @@ symmetric_merge(const char *source_path_
}
/* Perform the 3-way merges */
- SVN_ERR(svn_client_do_symmetric_merge(merge, target_wcpath, depth,
+ SVN_ERR(svn_client_do_automatic_merge(merge, target_wcpath, depth,
force, record_only,
dry_run, merge_options,
ctx, scratch_pool));
@@ -428,7 +428,7 @@ svn_cl__merge(apr_getopt_t *os,
/* Postpone conflict resolution during the merge operation.
* If any conflicts occur we'll run the conflict resolver later. */
- /* Do a symmetric merge if just one source and no revisions. */
+ /* Do an automatic merge if just one source and no revisions. */
if ((! two_sources_specified)
&& (! opt_state->reintegrate)
&& (! opt_state->ignore_ancestry)
@@ -440,7 +440,7 @@ svn_cl__merge(apr_getopt_t *os,
ctx, pool),
_("Source and target must be different but related branches"));
- merge_err = symmetric_merge(sourcepath1, &peg_revision1, targetpath,
+ merge_err = automatic_merge(sourcepath1, &peg_revision1, targetpath,
opt_state->depth,
opt_state->force,
opt_state->record_only,
Modified: subversion/branches/javahl-ra/subversion/svn/mergeinfo-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svn/mergeinfo-cmd.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/branches/javahl-ra/subversion/svn/mergeinfo-cmd.c Mon Dec 24 22:47:14 2012
@@ -205,7 +205,7 @@ mergeinfo_summary(
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- svn_client_symmetric_merge_t *the_merge;
+ svn_client_automatic_merge_t *the_merge;
svn_client__pathrev_t *yca, *base, *right, *target;
svn_boolean_t target_is_wc, reintegrate_like;
@@ -213,22 +213,22 @@ mergeinfo_summary(
&& (target_revision->kind == svn_opt_revision_unspecified
|| target_revision->kind == svn_opt_revision_working);
if (target_is_wc)
- SVN_ERR(svn_client_find_symmetric_merge(
+ SVN_ERR(svn_client_find_automatic_merge(
&the_merge,
source_path_or_url, source_revision,
target_path_or_url,
TRUE, TRUE, TRUE, /* allow_* */
ctx, pool, pool));
else
- SVN_ERR(svn_client_find_symmetric_merge_no_wc(
+ SVN_ERR(svn_client_find_automatic_merge_no_wc(
&the_merge,
source_path_or_url, source_revision,
target_path_or_url, target_revision,
ctx, pool, pool));
- SVN_ERR(svn_client__symmetric_merge_get_locations(
+ SVN_ERR(svn_client__automatic_merge_get_locations(
&yca, &base, &right, &target, the_merge, pool));
- reintegrate_like = svn_client_symmetric_merge_is_reintegrate_like(the_merge);
+ reintegrate_like = svn_client_automatic_merge_is_reintegrate_like(the_merge);
SVN_ERR(mergeinfo_diagram(yca, base, right, target,
target_is_wc, reintegrate_like,
Modified: subversion/branches/javahl-ra/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svnadmin/main.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svnadmin/main.c (original)
+++ subversion/branches/javahl-ra/subversion/svnadmin/main.c Mon Dec 24 22:47:14 2012
@@ -43,6 +43,7 @@
#include "svn_xml.h"
#include "private/svn_opt_private.h"
+#include "private/svn_named_atomic.h"
#include "svn_private_config.h"
@@ -115,7 +116,8 @@ open_repos(svn_repos_t **repos,
apr_hash_set(fs_config, SVN_FS_CONFIG_FSFS_CACHE_FULLTEXTS,
APR_HASH_KEY_STRING, "1");
apr_hash_set(fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
- APR_HASH_KEY_STRING, "1");
+ APR_HASH_KEY_STRING,
+ svn_named_atomic__is_efficient() ? "1" : "0");
/* now, open the requested repository */
SVN_ERR(svn_repos_open2(repos, path, fs_config, pool));
Modified: subversion/branches/javahl-ra/subversion/svnrdump/svnrdump.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svnrdump/svnrdump.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svnrdump/svnrdump.c (original)
+++ subversion/branches/javahl-ra/subversion/svnrdump/svnrdump.c Mon Dec 24 22:47:14 2012
@@ -270,7 +270,7 @@ init_client_context(svn_client_ctx_t **c
SVN_ERR(svn_ra_initialize(pool));
SVN_ERR(svn_config_ensure(config_dir, pool));
- SVN_ERR(svn_client_create_context(&ctx, pool));
+ SVN_ERR(svn_client_create_context2(&ctx, NULL, pool));
SVN_ERR(svn_config_get_config(&(ctx->config), config_dir, pool));
Modified: subversion/branches/javahl-ra/subversion/svnserve/cyrus_auth.c
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/svnserve/cyrus_auth.c?rev=1425690&r1=1425689&r2=1425690&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/svnserve/cyrus_auth.c (original)
+++ subversion/branches/javahl-ra/subversion/svnserve/cyrus_auth.c Mon Dec 24 22:47:14 2012
@@ -98,7 +98,7 @@ static int canonicalize_username(sasl_co
static sasl_callback_t callbacks[] =
{
- { SASL_CB_CANON_USER, canonicalize_username, NULL },
+ { SASL_CB_CANON_USER, (void*)canonicalize_username, NULL },
{ SASL_CB_LIST_END, NULL, NULL }
};