Author: hwright
Date: Tue Jan 17 21:09:43 2012
New Revision: 1232574
URL: http://svn.apache.org/viewvc?rev=1232574&view=rev
Log:
On the ev2-editor branch:
Bring up-to-date with trunk.
Modified:
subversion/branches/ev2-export/ (props changed)
subversion/branches/ev2-export/subversion/include/svn_mergeinfo.h
subversion/branches/ev2-export/subversion/libsvn_client/merge.c
subversion/branches/ev2-export/subversion/libsvn_client/patch.c
subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h
subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h
subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c
subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c
subversion/branches/ev2-export/subversion/libsvn_wc/status.c
subversion/branches/ev2-export/subversion/libsvn_wc/util.c
subversion/branches/ev2-export/subversion/mod_dav_svn/util.c
subversion/branches/ev2-export/subversion/tests/cmdline/basic_tests.py
subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py
subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
Propchange: subversion/branches/ev2-export/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jan 17 21:09:43 2012
@@ -57,3 +57,4 @@
/subversion/branches/tree-conflicts:868291-873154
/subversion/branches/tree-conflicts-notify:873926-874008
/subversion/branches/uris-as-urls:1060426-1064427
+/subversion/trunk:1231319-1232572
Modified: subversion/branches/ev2-export/subversion/include/svn_mergeinfo.h
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/include/svn_mergeinfo.h?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/include/svn_mergeinfo.h (original)
+++ subversion/branches/ev2-export/subversion/include/svn_mergeinfo.h Tue Jan
17 21:09:43 2012
@@ -166,9 +166,10 @@ svn_mergeinfo_parse(svn_mergeinfo_t *mer
apr_pool_t *pool);
/** Calculate the delta between two mergeinfos, @a mergefrom and @a mergeto
- * (which may be @c NULL), and place the result in @a *deleted and @a
- * *added (neither output argument may be @c NULL), both allocated in @a
- * result_pool.
+ * (either or both of which may be @c NULL meaning an empty mergeinfo).
+ * Place the result in @a *deleted and @a *added (neither output argument
+ * may be @c NULL), both allocated in @a result_pool. The resulting
+ * @a *deleted and @a *added will not be null.
*
* @a consider_inheritance determines how the rangelists in the two
* hashes are compared for equality. If @a consider_inheritance is FALSE,
Modified: subversion/branches/ev2-export/subversion/libsvn_client/merge.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_client/merge.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_client/merge.c Tue Jan 17
21:09:43 2012
@@ -9898,7 +9898,7 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
svn_revnum_t *youngest_merged_rev,
svn_revnum_t yc_ancestor_rev,
svn_mergeinfo_catalog_t source_catalog,
- apr_hash_t *target_segments_hash,
+ apr_hash_t *target_history_hash,
const char *source_repos_rel_path,
const char *target_repos_rel_path,
svn_revnum_t target_rev,
@@ -9926,7 +9926,7 @@ find_unmerged_mergeinfo(svn_mergeinfo_ca
/* Examine the natural history of each path in the reintegrate target
with explicit mergeinfo. */
- for (hi = apr_hash_first(scratch_pool, target_segments_hash);
+ for (hi = apr_hash_first(scratch_pool, target_history_hash);
hi;
hi = apr_hash_next(hi))
{
Modified: subversion/branches/ev2-export/subversion/libsvn_client/patch.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_client/patch.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_client/patch.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_client/patch.c Tue Jan 17
21:09:43 2012
@@ -2718,7 +2718,7 @@ delete_empty_dirs(apr_array_header_t *ta
empty_dirs = apr_hash_make(scratch_pool);
non_empty_dirs = apr_hash_make(scratch_pool);
iterpool = svn_pool_create(scratch_pool);
- for (i = 0; i < targets_info->nelts; i++)
+ for (i = 0; i < deleted_targets->nelts; i++)
{
svn_boolean_t parent_empty;
patch_target_info_t *target_info;
@@ -2729,7 +2729,7 @@ delete_empty_dirs(apr_array_header_t *ta
if (ctx->cancel_func)
SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
- target_info = APR_ARRAY_IDX(targets_info, i, patch_target_info_t *);
+ target_info = APR_ARRAY_IDX(deleted_targets, i, patch_target_info_t *);
parent = svn_dirent_dirname(target_info->local_abspath, iterpool);
Modified: subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h (original)
+++ subversion/branches/ev2-export/subversion/libsvn_fs/fs-loader.h Tue Jan 17
21:09:43 2012
@@ -25,7 +25,7 @@
#ifndef LIBSVN_FS_FS_H
#define LIBSVN_FS_FS_H
-#include "svn_version.h"
+#include "svn_types.h"
#include "svn_fs.h"
#ifdef __cplusplus
Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h
(original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/ra_serf.h Tue Jan
17 21:09:43 2012
@@ -78,6 +78,7 @@ typedef struct svn_ra_serf__connection_t
/* Are we using ssl */
svn_boolean_t using_ssl;
+ int server_cert_failures; /* Collected cert failures in chain */
/* Should we ask for compressed responses? */
svn_boolean_t using_compression;
Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/serf.c Tue Jan 17
21:09:43 2012
@@ -403,6 +403,7 @@ svn_ra_serf__open(svn_ra_session_t *sess
serf_sess->conns[0]->last_status_code = -1;
serf_sess->conns[0]->using_ssl = serf_sess->using_ssl;
+ serf_sess->conns[0]->server_cert_failures = 0;
serf_sess->conns[0]->using_compression = serf_sess->using_compression;
serf_sess->conns[0]->hostname = url.hostname;
serf_sess->conns[0]->useragent = NULL;
Modified: subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_ra_serf/util.c Tue Jan 17
21:09:43 2012
@@ -271,6 +271,8 @@ ssl_server_cert(void *baton, int failure
/* Implicitly approve any non-server certs. */
if (serf_ssl_cert_depth(cert) > 0)
{
+ if (failures)
+ conn->server_cert_failures |= ssl_convert_serf_failures(failures);
return APR_SUCCESS;
}
@@ -295,7 +297,8 @@ ssl_server_cert(void *baton, int failure
cert_info.issuer_dname = convert_organisation_to_str(issuer, scratch_pool);
cert_info.ascii_cert = serf_ssl_cert_export(cert, scratch_pool);
- svn_failures = ssl_convert_serf_failures(failures);
+ svn_failures = (ssl_convert_serf_failures(failures)
+ | conn->server_cert_failures);
/* Try to find matching server name via subjectAltName first... */
if (san) {
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/status.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/status.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/status.c Tue Jan 17
21:09:43 2012
@@ -2610,7 +2610,11 @@ svn_wc__internal_walk_status(svn_wc__db_
SVN_ERR(svn_io_stat_dirent(&dirent, local_abspath, TRUE,
scratch_pool, scratch_pool));
- if (info && info->kind == svn_kind_dir)
+ if (info
+ && info->kind == svn_kind_dir
+ && info->status != svn_wc__db_status_not_present
+ && info->status != svn_wc__db_status_excluded
+ && info->status != svn_wc__db_status_server_excluded)
{
SVN_ERR(get_dir_status(&wb,
local_abspath,
Modified: subversion/branches/ev2-export/subversion/libsvn_wc/util.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/libsvn_wc/util.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/libsvn_wc/util.c (original)
+++ subversion/branches/ev2-export/subversion/libsvn_wc/util.c Tue Jan 17
21:09:43 2012
@@ -595,9 +595,6 @@ svn_wc__fetch_base_func(const char **fil
apr_pool_t *scratch_pool)
{
struct svn_wc__shim_fetch_baton_t *sfb = baton;
- svn_stream_t *contents;
- svn_stream_t *file_stream;
- const char *tmp_filename;
const svn_checksum_t *checksum;
svn_error_t *err;
const char *local_abspath = svn_dirent_join(sfb->base_abspath, path,
@@ -622,15 +619,8 @@ svn_wc__fetch_base_func(const char **fil
return SVN_NO_ERROR;
}
- SVN_ERR(svn_wc__db_pristine_read(&contents, NULL, sfb->db, local_abspath,
- checksum, scratch_pool, scratch_pool));
-
- SVN_ERR(svn_stream_open_unique(&file_stream, &tmp_filename, NULL,
- svn_io_file_del_on_pool_cleanup,
- scratch_pool, scratch_pool));
- SVN_ERR(svn_stream_copy3(contents, file_stream, NULL, NULL, scratch_pool));
-
- *filename = apr_pstrdup(result_pool, tmp_filename);
+ SVN_ERR(svn_wc__db_pristine_get_path(filename, sfb->db, local_abspath,
+ checksum, scratch_pool, scratch_pool));
return SVN_NO_ERROR;
}
Modified: subversion/branches/ev2-export/subversion/mod_dav_svn/util.c
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/mod_dav_svn/util.c?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/ev2-export/subversion/mod_dav_svn/util.c Tue Jan 17
21:09:43 2012
@@ -631,19 +631,20 @@ void dav_svn__log_err(request_rec *r,
/* Log the errors */
/* ### should have a directive to log the first or all */
for (errscan = err; errscan != NULL; errscan = errscan->prev) {
+ apr_status_t status;
+
if (errscan->desc == NULL)
continue;
- if (errscan->save_errno != 0) {
- errno = errscan->save_errno;
- ap_log_rerror(APLOG_MARK, level, errno, r, "%s [%d, #%d]",
- errscan->desc, errscan->status, errscan->error_id);
- }
- else {
- ap_log_rerror(APLOG_MARK, level, 0, r,
- "%s [%d, #%d]",
- errscan->desc, errscan->status, errscan->error_id);
- }
+#if AP_MODULE_MAGIC_AT_LEAST(20091119,0)
+ status = errscan->aprerr;
+#else
+ status = errscan->save_errno;
+#endif
+
+ ap_log_rerror(APLOG_MARK, level, status, r,
+ "%s [%d, #%d]",
+ errscan->desc, errscan->status, errscan->error_id);
}
}
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/basic_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/basic_tests.py?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/basic_tests.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/basic_tests.py Tue
Jan 17 21:09:43 2012
@@ -2886,6 +2886,43 @@ def quiet_commits(sbox):
expected_disk,
expected_status)
+# Regression test for issue #4023: on Windows, 'svn rm' incorrectly deletes
+# on-disk file if it is case-clashing with intended (non-on-disk) target.
+@Issue(4023)
+@XFail(svntest.main.is_fs_case_insensitive)
+def rm_missing_with_case_clashing_ondisk_item(sbox):
+ """rm missing item with case-clashing ondisk item"""
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+
+ iota_path = os.path.join(wc_dir, 'iota')
+ IOTA_path = os.path.join(wc_dir, 'IOTA')
+
+ # Out-of-svn move, to make iota missing, while IOTA appears as unversioned.
+ os.rename(iota_path, IOTA_path)
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota' : Item(status='! ', wc_rev='1'),
+ 'IOTA' : Item(status='? '),
+ })
+ svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+ # 'svn rm' iota, should leave IOTA alone.
+ svntest.actions.run_and_verify_svn(None, None, [],
+ 'rm', iota_path)
+
+ # Test status: the unversioned IOTA should still be there.
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'iota' : Item(status='D ', wc_rev='1'),
+ 'IOTA' : Item(status='? '),
+ })
+ svntest.actions.run_and_verify_unquiet_status(wc_dir, expected_status)
+
+
+
########################################################################
# Run the tests
@@ -2950,6 +2987,7 @@ test_list = [ None,
ls_multiple_and_non_existent_targets,
add_multiple_targets,
quiet_commits,
+ rm_missing_with_case_clashing_ondisk_item,
]
if __name__ == '__main__':
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/patch_tests.py Tue
Jan 17 21:09:43 2012
@@ -230,7 +230,7 @@ def patch(sbox):
def patch_absolute_paths(sbox):
"patch containing absolute paths"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -932,7 +932,7 @@ def patch_no_index_line(sbox):
def patch_add_new_dir(sbox):
"patch with missing dirs"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -1032,7 +1032,7 @@ def patch_add_new_dir(sbox):
def patch_remove_empty_dirs(sbox):
"patch deleting all children of a directory"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -1581,7 +1581,7 @@ def patch_reverse(sbox):
def patch_no_svn_eol_style(sbox):
"patch target with no svn:eol-style"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -1798,7 +1798,7 @@ def patch_with_svn_eol_style(sbox):
def patch_with_svn_eol_style_uncommitted(sbox):
"patch target with uncommitted svn:eol-style"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -2571,7 +2571,7 @@ def patch_dir_properties(sbox):
def patch_add_path_with_props(sbox):
"patch that adds paths with props"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -2993,7 +2993,7 @@ def patch_prop_with_fuzz(sbox):
def patch_git_empty_files(sbox):
"patch that contains empty files"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3363,7 +3363,7 @@ def patch_one_property(sbox, trailing_eo
"""Helper. Apply a patch that sets the property 'k' to 'v\n' or to 'v',
and check the results."""
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3438,7 +3438,7 @@ def patch_set_prop_no_eol(sbox):
def patch_add_symlink(sbox):
"patch that adds a symlink"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3755,7 +3755,7 @@ def patch_deletes_prop(sbox):
def patch_reversed_add_with_props(sbox):
"reverse patch new file+props atop uncommitted"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3858,7 +3858,7 @@ def patch_reversed_add_with_props2(sbox)
def patch_dev_null(sbox):
"patch with /dev/null filenames"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -3914,7 +3914,7 @@ def patch_dev_null(sbox):
def patch_delete_and_skip(sbox):
"patch that deletes and skips"
- sbox.build()
+ sbox.build(read_only = True)
wc_dir = sbox.wc_dir
patch_file_path = make_patch_path(sbox)
@@ -4045,6 +4045,59 @@ def patch_target_no_eol_at_eof(sbox):
1, # check-props
1) # dry-run
+def patch_add_and_delete(sbox):
+ "patch add multiple levels and delete"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+ patch_file_path = make_patch_path(sbox)
+
+ unidiff_patch = [
+ "Index: foo\n",
+ "===================================================================\n",
+ "--- P/Q/foo\t(revision 0)\n"
+ "+++ P/Q/foo\t(working copy)\n"
+ "@@ -0,0 +1 @@\n",
+ "+This is the file 'foo'.\n",
+ "Index: iota\n"
+ "===================================================================\n",
+ "--- iota\t(revision 1)\n"
+ "+++ iota\t(working copy)\n"
+ "@@ -1 +0,0 @@\n",
+ "-This is the file 'iota'.\n",
+ ]
+
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'A %s\n' % os.path.join(wc_dir, 'P'),
+ 'A %s\n' % os.path.join(wc_dir, 'P', 'Q'),
+ 'A %s\n' % os.path.join(wc_dir, 'P', 'Q', 'foo'),
+ 'D %s\n' % os.path.join(wc_dir, 'iota'),
+ ]
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.remove('iota')
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_disk.add({'P/Q/foo' : Item(contents="This is the file 'foo'.\n")})
+ expected_status.tweak('iota', status='D ')
+ expected_status.add({
+ 'P' : Item(status='A ', wc_rev=0),
+ 'P/Q' : Item(status='A ', wc_rev=0),
+ 'P/Q/foo' : Item(status='A ', wc_rev=0),
+ })
+ expected_skip = wc.State('', { })
+
+ # Failed with "The node 'P' was not found" when erroneously checking
+ # whether 'P/Q' should be deleted.
+ svntest.actions.run_and_verify_patch(wc_dir,
os.path.abspath(patch_file_path),
+ expected_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, # expected err
+ 1, # check-props
+ 1) # dry-run
+
########################################################################
#Run the tests
@@ -4088,6 +4141,7 @@ test_list = [ None,
patch_dev_null,
patch_delete_and_skip,
patch_target_no_eol_at_eof,
+ patch_add_and_delete,
]
if __name__ == '__main__':
Modified: subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
URL:
http://svn.apache.org/viewvc/subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py?rev=1232574&r1=1232573&r2=1232574&view=diff
==============================================================================
--- subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py
(original)
+++ subversion/branches/ev2-export/subversion/tests/cmdline/stat_tests.py Tue
Jan 17 21:09:43 2012
@@ -1993,6 +1993,25 @@ def modified_modulo_translation(sbox):
sbox.simple_revert('iota')
svntest.actions.run_and_verify_svn(None, [], [], 'status', wc_dir)
+def status_not_present(sbox):
+ "no status on not-present and excluded nodes"
+
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # iota is a shell script.
+ sbox.simple_rm('iota', 'A/C')
+ svntest.main.run_svn(None, 'up', '--set-depth', 'exclude',
+ sbox.ospath('A/mu'), sbox.ospath('A/B'))
+ sbox.simple_commit()
+
+ svntest.actions.run_and_verify_svn(None, [], [],'status',
+ sbox.ospath('iota'),
+ sbox.ospath('A/B'),
+ sbox.ospath('A/C'),
+ sbox.ospath('A/mu'),
+ sbox.ospath('no-file'))
+
########################################################################
# Run the tests
@@ -2035,6 +2054,7 @@ test_list = [ None,
wc_wc_copy_timestamp,
wclock_status,
modified_modulo_translation,
+ status_not_present,
]
if __name__ == '__main__':