package org.lrg.outcode.views.browseractions;
import java.io.File;
import java.util.Iterator;
import org.eclipse.egit.ui.internal.CompareUtils;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryBuilder;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.ui.PlatformUI;
import org.lrg.outcode.builder.ModelVistor;
public class OpenCommitDiff implements IBrowserAction {
@SuppressWarnings("restriction")
@Override
public String onMessage(String messageName, Object[] arg) { // will be OpenCommitDiff
File gitDir = new RepoDirFinder().findRepoDir();
RepositoryBuilder builder = new RepositoryBuilder();
Repository repository;
try {
ModelVistor.parsedLOC = 0;
repository = builder.setGitDir(gitDir).readEnvironment().findGitDir().build();
Git git = new Git(repository);
RevWalk walk = new RevWalk(repository);
RevCommit commit1 = null;
RevCommit commit2 = null;
Iterable<RevCommit> logs = git.log().call();
Iterator<RevCommit> i = logs.iterator();
// move this to
while (i.hasNext()) {
RevCommit next = i.next();
commit1 = next;
if (commit1.getName().equals(arg[1])) {
break;
}
}
logs = git.log().call();
i = logs.iterator();
while (i.hasNext()) {
RevCommit next = i.next();
commit2 = next;
if (commit2.getName().equals(arg[2])) {
break;
}
}
// gitdir location vs project location
System.out.println("git dir " + gitDir);
String absoluteProjectPath = new RepoDirFinder().findProjectDir().getAbsolutePath();
System.out.println("project dir " + absoluteProjectPath);
String difference = "";
difference = absoluteProjectPath.replaceFirst(cutLastDotGit(gitDir), "");
if (difference.length() > 0) {
difference += "/";
if (difference.startsWith("/"))
difference = difference.replaceFirst("/", "");
}
CompareUtils.openInCompare(commit1, commit2, difference + arg[3].toString(), difference + arg[3].toString(), repository, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage());
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
private String cutLastDotGit(File gitDir) {
return gitDir.getAbsolutePath().substring(0, gitDir.getAbsolutePath().length() - "/.git".length());
}
}