Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-10-10 13:53:52 +0000
committerEike Stepper2016-10-10 13:53:52 +0000
commitc15fd3efd477d5336cde2ef3eee6cd40c58f59c2 (patch)
tree0816294b4795d2cb27ea31d9ee0f2f85d3b0e947 /plugins/org.eclipse.emf.cdo.server
parentda400648e8fe23899619769629dabc8123490e96 (diff)
downloadcdo-c15fd3efd477d5336cde2ef3eee6cd40c58f59c2.tar.gz
cdo-c15fd3efd477d5336cde2ef3eee6cd40c58f59c2.tar.xz
cdo-c15fd3efd477d5336cde2ef3eee6cd40c58f59c2.zip
[505654] Support automatic remerging / multiple merges from the same branch
https://bugs.eclipse.org/bugs/show_bug.cgi?id=505654
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server')
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java53
-rw-r--r--plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java29
2 files changed, 76 insertions, 6 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
index 972e43c30b..4a83ddcd6a 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java
@@ -1575,13 +1575,54 @@ public class Repository extends Container<Object> implements InternalRepository,
}
else
{
- CDORevisionAvailabilityInfo sourceBaseInfoToUse = sourceBaseInfo == null ? targetBaseInfo : sourceBaseInfo;
+ CDOChangeSetSegment[] targetSegments;
+ CDOChangeSetSegment[] sourceSegments;
- ids.addAll(accessor.readChangeSet(monitor.fork(),
- CDOChangeSetSegment.createFrom(targetBaseInfo.getBranchPoint(), target)));
+ if (targetBaseInfo.getBranchPoint() == CDOBranchUtil.AUTO_BRANCH_POINT)
+ {
+ CDOBranchPoint ancestor = CDOBranchUtil.getAncestor(target, source);
+ targetSegments = CDOChangeSetSegment.createFrom(ancestor, target);
+ sourceSegments = CDOChangeSetSegment.createFrom(ancestor, source);
+
+ for (int i = targetSegments.length - 1; i >= 0; --i)
+ {
+ CDOChangeSetSegment targetSegment = targetSegments[i];
+ CDOBranch branch = targetSegment.getBranch();
+ long startTime = targetSegment.getTimeStamp();
+ long endTime = targetSegment.getEndTime();
+
+ while (endTime > startTime || endTime == CDOBranchPoint.UNSPECIFIED_DATE)
+ {
+ CDOCommitInfo commitInfo = commitInfoManager.getCommitInfo(branch, endTime, false);
+ if (commitInfo == null)
+ {
+ break;
+ }
+
+ CDOBranchPoint mergeSource = commitInfo.getMergeSource();
+ if (mergeSource != null && CDOChangeSetSegment.contains(sourceSegments, mergeSource))
+ {
+ targetSegments = CDOChangeSetSegment.createFrom(commitInfo, target);
+ sourceSegments = CDOChangeSetSegment.createFrom(mergeSource, source);
+ break;
+ }
+
+ endTime = commitInfo.getTimeStamp() - 1;
+ }
+ }
+
+ targetBaseInfo.setBranchPoint(CDOBranchUtil.copyBranchPoint(targetSegments[0]));
+ sourceBaseInfo.setBranchPoint(CDOBranchUtil.copyBranchPoint(sourceSegments[0]));
+ }
+ else
+ {
+ CDORevisionAvailabilityInfo sourceBaseInfoToUse = sourceBaseInfo == null ? targetBaseInfo : sourceBaseInfo;
+ targetSegments = CDOChangeSetSegment.createFrom(targetBaseInfo.getBranchPoint(), target);
+ sourceSegments = CDOChangeSetSegment.createFrom(sourceBaseInfoToUse.getBranchPoint(), source);
+ }
- ids.addAll(accessor.readChangeSet(monitor.fork(),
- CDOChangeSetSegment.createFrom(sourceBaseInfoToUse.getBranchPoint(), source)));
+ ids.addAll(accessor.readChangeSet(monitor.fork(), targetSegments));
+ ids.addAll(accessor.readChangeSet(monitor.fork(), sourceSegments));
}
loadMergeData(ids, targetInfo, monitor.fork());
@@ -1592,7 +1633,7 @@ public class Repository extends Container<Object> implements InternalRepository,
loadMergeData(ids, targetBaseInfo, monitor.fork());
}
- if (sourceBaseInfo != null)
+ if (sourceBaseInfo != null && !targetBaseInfo.getBranchPoint().equals(sourceBaseInfo.getBranchPoint()))
{
loadMergeData(ids, sourceBaseInfo, monitor.fork());
}
diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java
index 69db5f356d..3cf63642d4 100644
--- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java
+++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/CDOServerBrowser.java
@@ -10,7 +10,10 @@
*/
package org.eclipse.emf.cdo.server;
+import org.eclipse.emf.cdo.common.CDOCommonRepository;
+import org.eclipse.emf.cdo.common.CDOCommonRepository.CommitInfoStorage;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.branch.CDOBranchVersion;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
@@ -1307,6 +1310,12 @@ public class CDOServerBrowser extends Worker
out.print("<td valign=\"top\">Branch</td>\r\n");
out.print("<td valign=\"top\">User</td>\r\n");
out.print("<td valign=\"top\">Comment</td>\r\n");
+
+ if (repository.getCommitInfoStorage() == CommitInfoStorage.WITH_MERGE_SOURCE)
+ {
+ out.print("<td valign=\"top\">Merge</td>\r\n");
+ }
+
out.print("</tr>\r\n");
final CDOCommitInfo[] details = { null };
@@ -1387,6 +1396,26 @@ public class CDOServerBrowser extends Worker
out.print(StringUtil.isEmpty(comment) ? "&nbsp;" : browser.escape(comment));
out.print("</td>\r\n");
+ CDOCommonRepository repository = commitInfo.getCommitInfoManager().getRepository();
+ if (repository.getCommitInfoStorage() == CommitInfoStorage.WITH_MERGE_SOURCE)
+ {
+ out.print("<td valign=\"top\">\r\n");
+
+ CDOBranchPoint mergeSource = commitInfo.getMergeSource();
+ if (mergeSource == null)
+ {
+ out.print("&nbsp;");
+ }
+ else
+ {
+ String mergeSourceLabel = browser.escape(mergeSource.getBranch().getPathName()) + "&nbsp;-&nbsp;"
+ + formatTimeStamp(mergeSource.getTimeStamp());
+ out.print(browser.href(mergeSourceLabel, getName(), "time", String.valueOf(mergeSource.getTimeStamp())));
+ }
+
+ out.print("</td>\r\n");
+ }
+
out.print("</tr>\r\n");
return selected;
}

Back to the top