org.eclipse.jgit.api.BlameCommand Java Examples

The following examples show how to use org.eclipse.jgit.api.BlameCommand. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Git.java    From OpenSZZ-Cloud-Native with GNU General Public License v3.0 6 votes vote down vote up
/**
  * It gets blame of a file at a specific commit time
  * index 0 of array ==> line 0
  * index 1 of array ==> line 1
  * index 2 of array ==> line 2
  * @param commitSha
  * @param file
  * @param git
  * @return
  */
//removed unused parameter PrintWriter l
 public  String getBlameAt(String commitSha, String file, int lineNumber) {
  File  localRepo1 = new File(workingDirectory+"");
try {
	if (blame==null){
	  org.eclipse.jgit.api.Git git = org.eclipse.jgit.api.Git.open(localRepo1);
	  Repository repository = git.getRepository();
      BlameCommand blamer = new BlameCommand(repository);
      ObjectId commitID;
	  commitID = repository.resolve(commitSha);
      blamer.setStartCommit(commitID);
      blamer.setFilePath(file);
      blame = blamer.call();}
      RevCommit commit = blame.getSourceCommit(lineNumber);
      return commit.getName();
} catch (Exception e) {
	return null;
}
 }
 
Example #2
Source File: GitRepository.java    From mojito with Apache License 2.0 6 votes vote down vote up
/**
 * Get the git-blame information for entire file
 *
 * @param filePath
 * @return
 * @throws CommandException
 */
public BlameResult getBlameResultForFile(String filePath) throws CommandException {

    logger.debug("getBlameResultForFile: {}", filePath);
    try {
        BlameCommand blamer = new BlameCommand(jgitRepository);
        ObjectId commitID = jgitRepository.resolve("HEAD");
        blamer.setStartCommit(commitID);
        blamer.setFilePath(filePath);
        BlameResult blame = blamer.call();

        return blame;
    } catch (GitAPIException | IOException e) {
        String msg = MessageFormat.format("Can't get blame result for file: {0}", filePath);
        logger.error(msg, e);
        throw new CommandException(msg, e);
    }
}
 
Example #3
Source File: GitRevisionInformationProvider.java    From jdt-codemining with Eclipse Public License 1.0 4 votes vote down vote up
@Override
public RevisionInformation getRevisionInformation(IResource resource) {
	RepositoryMapping mapping = RepositoryMapping.getMapping(resource);
	if (mapping == null) {
		return null;
	}
	Repository repository = mapping.getRepository();
	if (repository == null) {
		return null;
	}
	String path = mapping.getRepoRelativePath(resource);
	if (path == null) {
		return null;
	}
	final BlameCommand command = new BlameCommand(repository).setFollowFileRenames(true).setFilePath(path);
	try {
		command.setStartCommit(repository.resolve(Constants.HEAD));
	} catch (IOException e) {
		return null;
	}

	command.setTextComparator(RawTextComparator.WS_IGNORE_ALL);

	BlameResult result;
	try {
		result = command.call();
	} catch (Exception e1) {
		// Activator.error(e1.getMessage(), e1);
		return null;
	}
	// progress.worked(1);
	if (result == null)
		return null;

	RevisionInformation info = new RevisionInformation();
	Map<RevCommit, BlameRevision> revisions = new HashMap<>();
	int lineCount = result.getResultContents().size();
	BlameRevision previous = null;
	for (int i = 0; i < lineCount; i++) {
		RevCommit commit = result.getSourceCommit(i);
		String sourcePath = result.getSourcePath(i);
		if (commit == null) {
			// Unregister the current revision
			if (previous != null) {
				previous.register();
				previous = null;
			}
			continue;
		}
		BlameRevision revision = revisions.get(commit);
		if (revision == null) {
			revision = new ExtendedBlameRevision();
			revision.setRepository(repository);
			revision.setCommit(commit);
			revision.setSourcePath(sourcePath);
			revisions.put(commit, revision);
			info.addRevision(revision);
		}
		revision.addSourceLine(i, result.getSourceLine(i));
		if (previous != null)
			if (previous == revision)
				previous.addLine();
			else {
				previous.register();
				previous = revision.reset(i);
			}
		else
			previous = revision.reset(i);
	}
	if (previous != null)
		previous.register();
	return info;
}