diff options
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.java | 242 |
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()]); } } |