import java.io.File;
import java.io.IOException;
import java.util.List;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.diff.RawTextComparator;
import org.eclipse.jgit.internal.storage.file.FileRepository;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.ObjectLoader;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revplot.PlotCommit;
import org.eclipse.jgit.revplot.PlotCommitList;
import org.eclipse.jgit.revplot.PlotLane;
import org.eclipse.jgit.revplot.PlotWalk;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevObject;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
import org.eclipse.jgit.util.io.DisabledOutputStream;
public class Test {
public static void main(String[] args) {
String amaryllis_server = "http://nitta-lab-www.is.konan-u.ac.jp/gitbucket/git/nitta-lab-2020/org.ntlab.amaryllis.server.git";
String acanthus_client = "http://nitta-lab-www.is.konan-u.ac.jp/gitbucket/git/nitta-lab-2021/org.ntlab.acanthus_client.git";
String acanthus_server = "http://nitta-lab-www.is.konan-u.ac.jp/gitbucket/git/nitta-lab-2021/org.ntlab.acanthus_server.git";
// TODO Auto-generated method stub
try {
Repository repo = new FileRepository( "./project/.git" );
Git git = new Git( repo );
if( git != null ){
//. git clone
File project = new File( "./project" );
String filePath = "./project";
// フォルダの存在を確認する
if (project.exists()) {
System.out.println("projectフォルダが存在します");
delete(filePath);
} else {
System.out.println("projectフォルダが存在しません");
}
git.cloneRepository().setURI( acanthus_client ).setDirectory( project ).call();
}
PlotWalk revWalk = new PlotWalk(repo);
ObjectId rootId = repo.resolve("HEAD");
RevCommit root = revWalk.parseCommit(rootId);
revWalk.markStart(root);
// コミットコメント
PlotCommitList<PlotLane> plotCommitList = new PlotCommitList<PlotLane>();
plotCommitList.source(revWalk);
plotCommitList.fillTo(Integer.MAX_VALUE);
for (PlotCommit<PlotLane> c: plotCommitList) {
// コミットメッセージ
System.out.println("コミットメッセージ: " + c.getFullMessage());
ObjectId curId = c.getTree();
if (c.getParentCount() == 0) {
// 初期コミット
System.out.println("id:" + c.getId());
} else {
// 親コミットとの差分
ObjectId parentId = c.getParents()[0].getTree();
System.out.println("id:" + c.getId() + " <== " + c.getParents()[0].getId());
DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE);
df.setRepository(repo);
df.setDiffComparator(RawTextComparator.DEFAULT);
df.setDetectRenames(true);
ObjectReader reader = repo.newObjectReader();
CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
newTreeIter.reset(reader, curId);
CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
oldTreeIter.reset(reader, parentId);
List<DiffEntry> entries = df.scan( oldTreeIter, newTreeIter );
for( DiffEntry entry : entries ) {
// ファイル毎の情報
System.out.println("パス: " + entry.getNewPath());
System.out.println("変更の種類: " + entry.getChangeType());
// System.out.println("変更の内容: " + entry);
}
}
System.out.println("=====");
}
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidRemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransportException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (GitAPIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void delete(String path) {
File filePath = new File(path);
String[] list = filePath.list();
for(String file : list) {
File f = new File(path + File.separator + file);
if(f.isDirectory()) {
delete(path + File.separator + file);
}else {
f.delete();
}
}
filePath.delete();
}
}