/*******************************************************************************
* Copyright (C) 2010, Dariusz Luksza <dariusz@luksza.org>
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.egit.core.synchronize;
import static org.eclipse.jgit.lib.Repository.stripWorkDir;
import org.eclipse.core.resources.IResource;
import org.eclipse.egit.core.synchronize.ThreeWayDiffEntry.ChangeType;
import org.eclipse.egit.core.synchronize.ThreeWayDiffEntry.Direction;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.synchronize.SyncInfo;
import org.eclipse.team.core.variants.IResourceVariant;
import org.eclipse.team.core.variants.IResourceVariantComparator;
class GitSyncInfo extends SyncInfo {
private final GitSyncObjectCache cache;
private final Repository repo;
public GitSyncInfo(IResource local, IResourceVariant base,
IResourceVariant remote, IResourceVariantComparator comparator,
GitSyncObjectCache cache, Repository repo) {
super(local, base, remote, comparator);
this.repo = repo;
this.cache = cache;
}
@Override
protected int calculateKind() throws TeamException {
if (cache.membersCount() == 0)
return IN_SYNC;
String path;
if (getLocal() != null && getLocal().getLocation() != null)
path = stripWorkDir(repo.getWorkTree(), getLocal().getLocation().toFile());
else if (getRemote() != null)
path = ((GitRemoteResource)getRemote()).getPath();
else if (getBase() != null)
path = ((GitRemoteResource)getBase()).getPath();
else
return IN_SYNC;
GitSyncObjectCache obj = cache.get(path);
if (obj == null)
return IN_SYNC;
int direction;
Direction gitDirection = obj.getDiffEntry().getDirection();
if (gitDirection == Direction.INCOMING)
direction = INCOMING;
else if (gitDirection == Direction.OUTGOING)
direction = OUTGOING;
else
direction = CONFLICTING;
ChangeType changeType = obj.getDiffEntry().getChangeType();
if (changeType == ChangeType.MODIFY)
return direction | CHANGE;
if (changeType == ChangeType.ADD)
return direction | ADDITION;
if (changeType == ChangeType.DELETE)
return direction | DELETION;
return IN_SYNC;
}
@Override
public boolean equals(Object other) {
return super.equals(other);
}
@Override
public int hashCode() {
return super.hashCode();
}
}