Package com.liferay.documentation.util

Source Code of com.liferay.documentation.util.GitCompare

package com.liferay.documentation.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.List;

import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.treewalk.AbstractTreeIterator;
import org.eclipse.jgit.treewalk.CanonicalTreeParser;

public class GitCompare {

  public static void main(String[] args) throws GitAPIException, IOException  {

    String docdir = args[0];
    String purposedir = args[1];
    String olderBranch = args[2];
   
    Repository repo = openGitRepository();
    String importBranch = repo.getBranch();
    AbstractTreeIterator oldTreeParser = gitTreeParser(repo, "refs/heads/" + olderBranch);
    AbstractTreeIterator importTreeParser = gitTreeParser(repo, "refs/heads/" + importBranch);

    List<DiffEntry> diff = new Git(repo).diff().setOldTree(oldTreeParser).setNewTree(importTreeParser).call();

    System.out.println("Creating ../git-modified-list.txt file");
    PrintWriter writer = new PrintWriter("git-modified-list.txt", "UTF-8");
    addTimeStamp("Comparing your " + importBranch + " branch to your older branch "
        + olderBranch + " .\nGenerated on", writer);
    System.out.println("Comparing your " + importBranch + " branch to your older branch "+ olderBranch);

    boolean newDiff = false;
    String baseFilePath;
   
    if (System.getProperty("user.dir").contains(purposedir + "\\learning-paths") ||
        System.getProperty("user.dir").contains(purposedir + "/learning-paths")) {
      baseFilePath = purposedir + "/learning-paths/" + docdir;
    }
   
    else {
      baseFilePath = purposedir + "/" + docdir;
    }

    for (DiffEntry entry : diff) {
      String stringEntry = entry.toString();

      if (stringEntry.contains(baseFilePath)) {
        writer.println(stringEntry);
        System.out.println(stringEntry);
        newDiff = true;
      }
    }
   
    if (!newDiff) {
      System.out.println("There are no additions/modifications in ../" + baseFilePath);
      writer.println("There are no new additions/modifications to report");
    }

    writer.close();
    repo.close();
  }

  private static void addTimeStamp(String message, PrintWriter writer) {

      Calendar calendar = Calendar.getInstance();
      writer.printf("%s %tc\n\n", message, calendar);
    }

  private static AbstractTreeIterator gitTreeParser(Repository repo, String ref)
      throws IOException {

    Ref gitHead = repo.getRef(ref);
    RevWalk revWalk = new RevWalk(repo);
    RevCommit gitCommit = revWalk.parseCommit(gitHead.getObjectId());
    RevTree gitTree = revWalk.parseTree(gitCommit.getTree().getId());
    CanonicalTreeParser treeParser = new CanonicalTreeParser();
    ObjectReader newObjectReader = repo.newObjectReader();

    try {
      treeParser.reset(newObjectReader, gitTree.getId());
    }
    finally {
      newObjectReader.release();
    }
    revWalk.dispose();
    return treeParser;
  }

  private static Repository openGitRepository() throws IOException {

    FileRepositoryBuilder repoBuilder = new FileRepositoryBuilder();
    Repository repo = repoBuilder.readEnvironment().findGitDir().build();

    return repo;
  }
}
TOP

Related Classes of com.liferay.documentation.util.GitCompare

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.