90 lines
3.2 KiB
Java
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;
|
|
// } |