Author: stsp
Date: Thu Nov 24 13:54:42 2011
New Revision: 1205829
URL: http://svn.apache.org/viewvc?rev=1205829&view=rev
Log:
On the moves-scan-log branch, fix move-chain construction in the update editor.
* subversion/libsvn_wc/update_editor.c
(find_applicable_moves): Properly link together elements of chains going
forward in history. Properly construct a reversed chain when updating
into the past. While here improve a comment.
Modified:
subversion/branches/moves-scan-log/subversion/libsvn_wc/update_editor.c
Modified:
subversion/branches/moves-scan-log/subversion/libsvn_wc/update_editor.c
URL:
http://svn.apache.org/viewvc/subversion/branches/moves-scan-log/subversion/libsvn_wc/update_editor.c?rev=1205829&r1=1205828&r2=1205829&view=diff
==============================================================================
--- subversion/branches/moves-scan-log/subversion/libsvn_wc/update_editor.c
(original)
+++ subversion/branches/moves-scan-log/subversion/libsvn_wc/update_editor.c Thu
Nov 24 13:54:42 2011
@@ -1895,6 +1895,7 @@ find_applicable_moves(apr_array_header_t
if (this_move->next->revision > *eb->target_revision)
break;
this_move = this_move->next;
+ m->next = this_move;
m = svn_wc_create_repos_move_info(
this_move->moved_from_repos_relpath,
this_move->moved_to_repos_relpath,
@@ -1949,8 +1950,10 @@ find_applicable_moves(apr_array_header_t
* in the global editor pool.
*
* The returned chain is reversed to the chain obtained
- * from the log because we're updating into the past,
- * i.e. the 'next' and 'prev' pointers are reversed.
+ * from the log because we're updating into the past.
+ * This allows conflict hanlding to always evaluate the
+ * chain in the forward direction regardless of which way
+ * in history the update is going.
* For the same reason we must use the revision the move
* happened in as the copyfrom revision, turning the
* delete-half of a move into a fake copy from future
@@ -1968,12 +1971,13 @@ find_applicable_moves(apr_array_header_t
if (this_move->prev->revision < *eb->target_revision)
break;
this_move = this_move->prev;
- m = svn_wc_create_repos_move_info(
- this_move->moved_to_repos_relpath,
- this_move->moved_from_repos_relpath,
- this_move->revision,
- this_move->revision,
- m, NULL, result_pool);
+ m->next = svn_wc_create_repos_move_info(
+ this_move->moved_to_repos_relpath,
+ this_move->moved_from_repos_relpath,
+ this_move->revision,
+ this_move->revision,
+ m, NULL, result_pool);
+ m = m->next;
}
break;