You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ph...@apache.org on 2012/06/12 14:08:06 UTC
svn commit: r1349288 - in /subversion/trunk/subversion: libsvn_wc/merge.c
tests/cmdline/update_tests.py
Author: philip
Date: Tue Jun 12 12:08:04 2012
New Revision: 1349288
URL: http://svn.apache.org/viewvc?rev=1349288&view=rev
Log:
Fix issue 4128: no conflict for identical files.
* subversion/libsvn_wc/merge.c
(merge_file_trivial): Successful report merge_unchanged when incoming
file is identical to existing, locally modified file.
* subversion/tests/cmdline/update_tests.py
(update_binary_file_3): Tweak expectations, remove XFAIL marker.
Patch by: Markus Schaber <m....@3s-software.com>
Modified:
subversion/trunk/subversion/libsvn_wc/merge.c
subversion/trunk/subversion/tests/cmdline/update_tests.py
Modified: subversion/trunk/subversion/libsvn_wc/merge.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/merge.c?rev=1349288&r1=1349287&r2=1349288&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/merge.c (original)
+++ subversion/trunk/subversion/libsvn_wc/merge.c Tue Jun 12 12:08:04 2012
@@ -929,6 +929,8 @@ maybe_resolve_conflicts(svn_skel_t **wor
* The merge is trivial if the file at LEFT_ABSPATH equals the detranslated
* form of the target at DETRANSLATED_TARGET_ABSPATH, because in this case
* the content of RIGHT_ABSPATH can be copied to the target.
+ * Another trivial case is if DETRANSLATED_TARGET_ABSPATH is identical to
+ * RIGHT_ABSPATH - we can just accept the existing content as merge result.
* On success, set *MERGE_OUTCOME to SVN_WC_MERGE_MERGED in case the
* target was changed, or to SVN_WC_MERGE_UNCHANGED if the target was not
* changed. Install work queue items allocated in RESULT_POOL in *WORK_ITEMS.
@@ -992,6 +994,23 @@ merge_file_trivial(svn_skel_t **work_ite
return SVN_NO_ERROR;
}
+ else
+ {
+ /* Check whether the existing version equals the right side. If it
+ * does, the locally existing, changed file equals the incoming
+ * file, so there is no conflict. For binary files, we historically
+ * conflicted them needlessly, while merge_text_file figured it out
+ * eventually and returned svn_wc_merge_unchanged for them, which
+ * is what we do here. */
+ SVN_ERR(svn_io_files_contents_same_p(&same_contents,
+ detranslated_target_abspath,
+ right_abspath, scratch_pool));
+ if (same_contents)
+ {
+ *merge_outcome = svn_wc_merge_unchanged;
+ return SVN_NO_ERROR;
+ }
+ }
*merge_outcome = svn_wc_merge_no_merge;
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/update_tests.py?rev=1349288&r1=1349287&r2=1349288&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/update_tests.py Tue Jun 12 12:08:04 2012
@@ -310,7 +310,6 @@ def update_binary_file_2(sbox):
#----------------------------------------------------------------------
-@XFail()
@Issue(4128)
def update_binary_file_3(sbox):
"update locally modified file to equal versions"
@@ -367,7 +366,7 @@ def update_binary_file_3(sbox):
# Create expected output tree for an update to rev 2.
expected_output = svntest.wc.State(wc_dir, {
- 'A/theta' : Item(status=' '),
+ 'A/theta' : Item(status='G '),
})
# Create expected disk tree for the update