2021-03-11 17:04:58 +04:00

90 lines
3.2 KiB
Java

package ru.ulstu.extractor;
import org.eclipse.jgit.diff.DiffEntry;
import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevWalk;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class NewClass {
private final RevWalk revWalk;
private final DiffFormatter diffFormatter;
private NewClass(RevWalk revWalk, DiffFormatter diffFormatter) {
this.revWalk = revWalk;
this.diffFormatter = diffFormatter;
}
public Set<String> getModified(final RevCommit commit) throws IOException {
final RevCommit[] parents = commit.getParents();
final Set<String> result = new HashSet<>();
if (parents.length == 1) { // merge commit if length > 1
final RevCommit parent = revWalk.parseCommit(parents[0].getId());
// get diff of this commit to its parent, as list of paths
final List<DiffEntry> diffs = getDiffEntries(commit, parent);
for (final DiffEntry diff : diffs) {
final String changePath = diff.getChangeType().equals(DiffEntry.ChangeType.DELETE) ? diff.getOldPath() : diff.getNewPath();
result.add(changePath);
}
}
return result;
}
private List<DiffEntry> getDiffEntries(final RevCommit commit, final RevCommit parent) {
try {
return diffFormatter.scan(parent.getTree(), commit.getTree());
} catch (Exception e) {
e.printStackTrace();
}
return Collections.emptyList();
}
}
// Optional<String> lineFrom = Optional.empty();
// Optional<String> lineTo = Optional.empty();
// for (String string: strings) {
// Optional<String> maybeFileName = getFileName(string);
// if (maybeFileName.isPresent()) {
// fileChange = new FileChange();
// fileChange.setFile(maybeFileName.get());
// /// вытащить другие изменения из коммита
// changes.getFileChanges().add(fileChange);
// }
//
// Optional<String> maybeLineFrom = getLineFrom(string);
// LineChange lineChange = new LineChange();
// if (maybeLineFrom.isPresent()) {
// lineChange.setLineFrom(maybeLineFrom.get());
// if (lineFrom.isPresent()){
// lineChange.setLineFrom(lineChange.getLineFrom() + "\n" + lineFrom);
// fileChange.getLineChanges().add(lineChange);
// lineFrom = maybeLineFrom;
// }
// else {
// fileChange.getLineChanges().add(lineChange);
// lineFrom = maybeLineFrom;
// }
// }
// Optional<String> maybeLineTo = getLineTo(string);
// if (maybeLineTo.isPresent()) {
// lineChange.setLineTo(maybeLineTo.get());
// if(lineTo.isPresent()){
// lineChange.setLineTo(lineChange.getLineTo() + "\n" + lineTo);
// fileChange.getLineChanges().add(lineChange);
// lineTo = maybeLineTo;
// }
// else {
// fileChange.getLineChanges().add(lineChange);
// lineTo = maybeLineFrom;
// }
// }
// }
// return changes;
// }