Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java')
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java242
1 files changed, 5 insertions, 237 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java
index b9698969ec..7f64050d21 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/model/GitModelCommit.java
@@ -8,55 +8,23 @@
*******************************************************************************/
package org.eclipse.egit.ui.internal.synchronize.model;
-import static org.eclipse.compare.structuremergeviewer.Differencer.ADDITION;
-import static org.eclipse.compare.structuremergeviewer.Differencer.CHANGE;
-import static org.eclipse.compare.structuremergeviewer.Differencer.DELETION;
-import static org.eclipse.compare.structuremergeviewer.Differencer.LEFT;
-import static org.eclipse.compare.structuremergeviewer.Differencer.RIGHT;
-import static org.eclipse.jgit.lib.ObjectId.zeroId;
-
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.Differencer;
-import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.egit.core.Activator;
-import org.eclipse.jgit.lib.Constants;
-import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTree;
-import org.eclipse.jgit.revwalk.RevWalk;
-import org.eclipse.jgit.revwalk.filter.RevFilter;
import org.eclipse.jgit.treewalk.TreeWalk;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.team.ui.mapping.ISynchronizationCompareInput;
-import org.eclipse.team.ui.mapping.SaveableComparison;
/**
* Git commit object representation in Git ChangeSet
*/
-public class GitModelCommit extends GitModelObject implements
+public class GitModelCommit extends GitModelObjectContainer implements
ISynchronizationCompareInput {
- private final RevCommit baseCommit;
-
- private final RevCommit remoteCommit;
-
- private final RevCommit ancestorCommit;
-
- private int kind;
-
- private String name;
-
- private GitModelObject[] children;
-
/**
* @param parent
* instance of repository model object that is parent for this
@@ -69,17 +37,7 @@ public class GitModelCommit extends GitModelObject implements
*/
public GitModelCommit(GitModelRepository parent, RevCommit commit,
int direction) throws IOException {
- super(parent);
- kind = direction;
- remoteCommit = commit;
- ancestorCommit = calculateAncestor(remoteCommit);
-
- RevCommit[] parents = remoteCommit.getParents();
- if (parents != null && parents.length > 0)
- baseCommit = remoteCommit.getParent(0);
- else {
- baseCommit = null;
- }
+ super(parent, commit, direction);
}
/**
@@ -98,72 +56,7 @@ public class GitModelCommit extends GitModelObject implements
*/
protected GitModelCommit(GitModelObject parent, RevCommit commit,
int direction) throws IOException {
- super(parent);
- kind = direction;
- remoteCommit = commit;
- ancestorCommit = calculateAncestor(remoteCommit);
-
- RevCommit[] parents = remoteCommit.getParents();
- if (parents != null && parents.length > 0)
- baseCommit = remoteCommit.getParent(0);
- else {
- baseCommit = null;
- }
- }
-
- @Override
- public GitModelObject[] getChildren() {
- if (children == null)
- getChildrenImpl();
-
- return children;
-
- }
-
- @Override
- public String getName() {
- if (name == null)
- name = remoteCommit.getShortMessage();
-
- return name;
- }
-
- @Override
- public IProject[] getProjects() {
- return getParent().getProjects();
- }
-
- /**
- * Returns common ancestor for this commit and all it parent's commits.
- *
- * @return common ancestor commit
- */
- public RevCommit getAncestorCommit() {
- return ancestorCommit;
- }
-
- /**
- * Returns instance of commit that is parent for one that is associated with
- * this model object.
- *
- * @return base commit
- */
- public RevCommit getBaseCommit() {
- return baseCommit;
- }
-
- /**
- * Resurns instance of commit that is associated with this model object.
- *
- * @return rev commit
- */
- public RevCommit getRemoteCommit() {
- return remoteCommit;
- }
-
- @Override
- public IPath getLocation() {
- return getParent().getLocation();
+ super(parent, commit, direction);
}
@Override
@@ -199,81 +92,8 @@ public class GitModelCommit extends GitModelObject implements
return result;
}
- public Image getImage() {
- // currently itsn't used
- return null;
- }
-
- public int getKind() {
- if (kind == -1 || kind == LEFT || kind == RIGHT)
- calculateKind(getBaseObjectId(), getRemoteObjectId());
-
- return kind;
- }
-
- public ITypedElement getAncestor() {
- return null;
- }
-
- public ITypedElement getLeft() {
- return null;
- }
-
- public ITypedElement getRight() {
- return null;
- }
-
- public void addCompareInputChangeListener(
- ICompareInputChangeListener listener) {
- // data in commit will never change, therefore change listeners are
- // useless
- }
-
- public void removeCompareInputChangeListener(
- ICompareInputChangeListener listener) {
- // data in commit will never change, therefore change listeners are
- // useless
- }
-
- public void copy(boolean leftToRight) {
- // do nothing, we should disallow coping content between commits
- }
-
@Override
- public boolean isContainer() {
- return true;
- }
-
- /**
- * @return base object ObjectId
- */
- protected ObjectId getBaseObjectId() {
- return baseCommit != null ? baseCommit.getId() : zeroId();
- }
-
- /**
- * @return remote object ObjectId
- */
- protected ObjectId getRemoteObjectId() {
- return remoteCommit.getId();
- }
-
- private RevCommit calculateAncestor(RevCommit actual) throws IOException {
- RevWalk rw = new RevWalk(getRepository());
- rw.setRevFilter(RevFilter.MERGE_BASE);
-
- for (RevCommit parent : actual.getParents()) {
- RevCommit parentCommit = rw.parseCommit(parent.getId());
- rw.markStart(parentCommit);
- }
-
- rw.markStart(rw.parseCommit(actual.getId()));
-
- RevCommit result = rw.next();
- return result != null ? result : rw.parseCommit(ObjectId.zeroId());
- }
-
- private void getChildrenImpl() {
+ protected GitModelObject[] getChildrenImpl() {
List<GitModelObject> result = new ArrayList<GitModelObject>();
try {
@@ -296,59 +116,7 @@ public class GitModelCommit extends GitModelObject implements
Activator.logError(e.getMessage(), e);
}
- children = result.toArray(new GitModelObject[result.size()]);
- }
-
- private GitModelObject getModelObject(TreeWalk tw, int ancestorNth,
- int baseNth, int actualNth) throws IOException {
- String objName = tw.getNameString();
-
- ObjectId objBaseId;
- if (baseNth > -1)
- objBaseId = tw.getObjectId(baseNth);
- else
- objBaseId = ObjectId.zeroId();
-
- ObjectId objRemoteId = tw.getObjectId(actualNth);
- ObjectId objAncestorId = tw.getObjectId(ancestorNth);
- int objectType = tw.getFileMode(actualNth).getObjectType();
-
- if (objectType == Constants.OBJ_BLOB)
- return new GitModelBlob(this, remoteCommit, objAncestorId,
- objBaseId, objRemoteId, objName);
- else if (objectType == Constants.OBJ_TREE)
- return new GitModelTree(this, remoteCommit, objAncestorId,
- objBaseId, objRemoteId, objName);
-
- return null;
- }
-
- private void calculateKind(ObjectId baseId, ObjectId remoteId) {
- if (baseId.equals(zeroId()))
- kind = kind | ADDITION;
- else if (remoteId.equals(zeroId()))
- kind = kind | DELETION;
- else
- kind = kind | CHANGE;
- }
-
- public SaveableComparison getSaveable() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public void prepareInput(CompareConfiguration configuration,
- IProgressMonitor monitor) throws CoreException {
- // there is no needed configuration for commit object
- }
-
- public String getFullPath() {
- return getLocation().toPortableString();
- }
-
- public boolean isCompareInputFor(Object object) {
- // TODO Auto-generated method stub
- return false;
+ return result.toArray(new GitModelObject[result.size()]);
}
}

Back to the top