how issue-2897 branch solves reflective merges?
From: Kamesh Jayachandran <kamesh_at_collab.net>
Date: Fri, 11 Jan 2008 17:08:50 +0530
Hi All,
Let me summarize the changes in issue-2897 branch.
I would love to get some real technical reasons for not accepting 2897
Yes it was complex when I started and while working on it at times. Now
I would love to see real technical problem that justifies that it can
For those interested to review it, following explanation should help.
1)Implement 'get-commit-and-merge-ranges' API in all layers (40% of the
To review item 1) Major focus need to be in
Item 2)Testcases: covers almost all the cases I can imagine, it covers
Item 3) libsvn_client is very tricky to understand but logic is simple
i) file_changed callback
Normal merge_file_changed applies diff(older, yours) to mine.
Applying the diff directly is going to cause lots of headaches.
So objective is to have a meaningful diff of *only local adhoc changes
Let me take the example and explain,
Case1:
We merge -r13, -r17, -r29 from /trunk to /feature_branch and commit at
Now we merge /feature_branch -r1:40 back to /trunk.
It does a merge of -r1:39 which is a normal merge.
To calculate the *meaningful diff*, We apply -r13 change to OLDER, and
Now in this case after the above 3 merges(r13, r17, r29) OLDER becomes
Case2:
We merge -r13, -r17, -r29 from /trunk to /feature_branch + local
Now we merge /feature_branch -r1:40 back to /trunk.
It does a merge of -r1:39 which is a normal merge.
To calculate the *meaningful diff*, We apply -r13 change to OLDER, and
Now in this case after the above 3 merges(r13, r17, r29) OLDER becomes
Case3:
We merge -r13, -r17(conflicting), -r29 from /trunk to /feature_branch +
Now we merge /feature_branch -r1:40 back to /trunk.
It does a merge of -r1:39 which is a normal merge.
To calculate the *meaningful diff*, We apply -r13 change to OLDER, and
Now in this case after the above 2 merges(r13, r29) OLDER becomes
ii)dir_added/dir_deleted/file_added/file_deleted.
We merge -r13, -r17, -r29 from /trunk to /feature_branch and commit at
Now we merge /feature_branch -r1:40 back to /trunk.
It does a merge of -r1:39 which is a normal merge.
Our summary implementation won't care about 'test.c' as in effect A+D
Case 5:
We merge -r13, -r17, -r29 from /trunk to /feature_branch and commit at
Now we merge /feature_branch -r1:40 back to /trunk.
It does a merge of -r1:39 which is a normal merge.
Our summary implementation Would say nothing about 'test.c' as in
Same explanation applies to dir additions, file/dir deletions.
Would love to get more feedbacks on it.
With regards
---------------------------------------------------------------------
|
This is an archived mail posted to the Subversion Dev mailing list.
This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.