} else rewriteFlag = 0; rf = AndRevFilter.create(new TreeRevFilter(w, tf, rewriteFlag), rf);
private void updateFollowFilter(ObjectId[] trees, DiffConfig cfg) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { TreeWalk tw = pathFilter; FollowFilter oldFilter = (FollowFilter) tw.getFilter(); tw.setFilter(TreeFilter.ANY_DIFF); tw.reset(trees); List<DiffEntry> files = DiffEntry.scan(tw); RenameDetector rd = new RenameDetector(tw.getObjectReader(), cfg); rd.addAll(files); files = rd.compute(); TreeFilter newFilter = oldFilter; for (DiffEntry ent : files) { if (isRename(ent) && ent.getNewPath().equals(oldFilter.getPath())) { newFilter = FollowFilter.create(ent.getOldPath(), cfg); RenameCallback callback = oldFilter.getRenameCallback(); if (callback != null) { callback.renamed(ent); // forward the callback to the new follow filter ((FollowFilter) newFilter).setRenameCallback(callback); } break; } } tw.setFilter(newFilter); }
updateFollowFilter(trees, ((FollowFilter) tw.getFilter()).cfg);
private CommitHistory pathCommitHistory(final RevWalk rw) throws MissingObjectException, IncorrectObjectTypeException, IOException { final Map<AnyObjectId, String> pathByCommit = new HashMap<>(); final List<RevCommit> commits = new ArrayList<>(); final RenameCaptor renameCaptor = new RenameCaptor(); /* * We have to go through all commits and filter ourselves so that we can use the * rename callback to map commits to path renames. */ final TreeRevFilter revFilter = createTreeRevFilter(rw, path, renameCaptor); String curPath = path; for (final RevCommit commit : rw) { if (revFilter.include(rw, commit)) { @SuppressWarnings("resource") final TreeWalk tw = new TreeWalk(rw.getObjectReader()); tw.setRecursive(true); tw.setFilter(PathFilter.create(curPath)); tw.addTree(commit.getTree()); // Checks for special case that path wasn't deleted in this commit if (tw.next()) { commits.add(commit); // There is a rename to track pathByCommit.put(commit.getId(), curPath); if (renameCaptor.hasCaptured()) { curPath = renameCaptor.getAndReset().getOldPath(); } } } } return new CommitHistory(commits, pathByCommit, path); }
private TreeRevFilter createTreeRevFilter(final RevWalk rw, String curPath, final RenameCallback renameCallback) { final FollowFilter followFilter = FollowFilter.create(curPath, git.getRepository().getConfig().get(DiffConfig.KEY)); followFilter.setRenameCallback(renameCallback); final TreeRevFilter revFilter = new TreeRevFilter(rw, followFilter); return revFilter; }
private void updateFollowFilter(ObjectId[] trees, DiffConfig cfg) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { TreeWalk tw = pathFilter; FollowFilter oldFilter = (FollowFilter) tw.getFilter(); tw.setFilter(TreeFilter.ANY_DIFF); tw.reset(trees); List<DiffEntry> files = DiffEntry.scan(tw); RenameDetector rd = new RenameDetector(tw.getObjectReader(), cfg); rd.addAll(files); files = rd.compute(); TreeFilter newFilter = oldFilter; for (DiffEntry ent : files) { if (isRename(ent) && ent.getNewPath().equals(oldFilter.getPath())) { newFilter = FollowFilter.create(ent.getOldPath(), cfg); RenameCallback callback = oldFilter.getRenameCallback(); if (callback != null) { callback.renamed(ent); // forward the callback to the new follow filter ((FollowFilter) newFilter).setRenameCallback(callback); } break; } } tw.setFilter(newFilter); }
updateFollowFilter(trees, ((FollowFilter) tw.getFilter()).cfg);
} else rewriteFlag = 0; rf = AndRevFilter.create(new TreeRevFilter(w, tf, rewriteFlag), rf);
private void updateFollowFilter(ObjectId[] trees, DiffConfig cfg) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { TreeWalk tw = pathFilter; FollowFilter oldFilter = (FollowFilter) tw.getFilter(); tw.setFilter(TreeFilter.ANY_DIFF); tw.reset(trees); List<DiffEntry> files = DiffEntry.scan(tw); RenameDetector rd = new RenameDetector(tw.getObjectReader(), cfg); rd.addAll(files); files = rd.compute(); TreeFilter newFilter = oldFilter; for (DiffEntry ent : files) { if (isRename(ent) && ent.getNewPath().equals(oldFilter.getPath())) { newFilter = FollowFilter.create(ent.getOldPath(), cfg); RenameCallback callback = oldFilter.getRenameCallback(); if (callback != null) { callback.renamed(ent); // forward the callback to the new follow filter ((FollowFilter) newFilter).setRenameCallback(callback); } break; } } tw.setFilter(newFilter); }
updateFollowFilter(trees, ((FollowFilter) tw.getFilter()).cfg);
} else rewriteFlag = 0; rf = AndRevFilter.create(new TreeRevFilter(w, tf, rewriteFlag), rf);
private void updateFollowFilter(ObjectId[] trees, DiffConfig cfg) throws MissingObjectException, IncorrectObjectTypeException, CorruptObjectException, IOException { TreeWalk tw = pathFilter; FollowFilter oldFilter = (FollowFilter) tw.getFilter(); tw.setFilter(TreeFilter.ANY_DIFF); tw.reset(trees); List<DiffEntry> files = DiffEntry.scan(tw); RenameDetector rd = new RenameDetector(tw.getObjectReader(), cfg); rd.addAll(files); files = rd.compute(); TreeFilter newFilter = oldFilter; for (DiffEntry ent : files) { if (isRename(ent) && ent.getNewPath().equals(oldFilter.getPath())) { newFilter = FollowFilter.create(ent.getOldPath(), cfg); RenameCallback callback = oldFilter.getRenameCallback(); if (callback != null) { callback.renamed(ent); // forward the callback to the new follow filter ((FollowFilter) newFilter).setRenameCallback(callback); } break; } } tw.setFilter(newFilter); }
updateFollowFilter(trees, ((FollowFilter) tw.getFilter()).cfg);
} else rewriteFlag = 0; rf = AndRevFilter.create(new TreeRevFilter(w, tf, rewriteFlag), rf);