public static ArrayMemory valueOf(DiffEntry value) { ArrayMemory memory = new ArrayMemory(); memory.refOfIndex("oldId").assign(value.getOldId() == null ? Memory.NULL : valueOf(value.getOldId().toObjectId())); memory.refOfIndex("oldPath").assign(value.getOldPath()); memory.refOfIndex("oldMode").assign(value.getOldMode() == null ? Memory.NULL : StringMemory.valueOf(value.getOldMode().toString())); memory.refOfIndex("newId").assign(value.getNewId() == null ? Memory.NULL : valueOf(value.getNewId().toObjectId())); memory.refOfIndex("newPath").assign(value.getNewPath()); memory.refOfIndex("newMode").assign(value.getNewMode() == null ? Memory.NULL : StringMemory.valueOf(value.getNewMode().toString())); memory.refOfIndex("score").assign(value.getScore()); memory.refOfIndex("changeType").assign(value.getChangeType().name()); return memory; }
/** * Get the object id. * * @param side * the side of the id to get. * @return the object id; null if there is no index line */ public AbbreviatedObjectId getId(Side side) { return side == Side.OLD ? getOldId() : getNewId(); }
/** * Format index line * * @param o * the stream the formatter will write line data to * @param ent * the DiffEntry to create the FileHeader for * @throws java.io.IOException * writing to the supplied stream failed. */ protected void formatIndexLine(OutputStream o, DiffEntry ent) throws IOException { o.write(encodeASCII("index " // //$NON-NLS-1$ + format(ent.getOldId()) // + ".." // //$NON-NLS-1$ + format(ent.getNewId()))); if (ent.getOldMode().equals(ent.getNewMode())) { o.write(' '); ent.getNewMode().copyTo(o); } o.write('\n'); }
if (ent.getOldId() != null && !ent.getOldId().equals(ent.getNewId())) { formatIndexLine(o, ent);
/** * Breaks apart a DiffEntry into two entries, one DELETE and one ADD. * * @param entry * the DiffEntry to break apart. * @return a list containing two entries. Calling {@link #getChangeType()} * on the first entry will return ChangeType.DELETE. Calling it on * the second entry will return ChangeType.ADD. */ static List<DiffEntry> breakModify(DiffEntry entry) { DiffEntry del = new DiffEntry(); del.oldId = entry.getOldId(); del.oldMode = entry.getOldMode(); del.oldPath = entry.getOldPath(); del.newId = A_ZERO; del.newMode = FileMode.MISSING; del.newPath = DiffEntry.DEV_NULL; del.changeType = ChangeType.DELETE; del.diffAttribute = entry.diffAttribute; DiffEntry add = new DiffEntry(); add.oldId = A_ZERO; add.oldMode = FileMode.MISSING; add.oldPath = DiffEntry.DEV_NULL; add.newId = entry.getNewId(); add.newMode = entry.getNewMode(); add.newPath = entry.getNewPath(); add.changeType = ChangeType.ADD; add.diffAttribute = entry.diffAttribute; return Arrays.asList(del, add); }
public static void main(String[] args) throws IOException, GitAPIException { try (Repository repository = CookbookHelper.openJGitCookbookRepository()) { // the diff works on TreeIterators, we prepare two for the two branches AbstractTreeIterator oldTreeParser = prepareTreeParser(repository, "b97b184b0ce11c0b6a4dcc2b57768ff155cb696b"); AbstractTreeIterator newTreeParser = prepareTreeParser(repository, "9e0719d7d773b41b49ebf04e6fd7b5c637e96063"); // then the porcelain diff-command returns a list of diff entries try (Git git = new Git(repository)) { List<DiffEntry> diff = git.diff(). setOldTree(oldTreeParser). setNewTree(newTreeParser). setPathFilter(PathFilter.create("README.md")). // to filter on Suffix use the following instead //setPathFilter(PathSuffixFilter.create(".java")). call(); for (DiffEntry entry : diff) { System.out.println("Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId()); try (DiffFormatter formatter = new DiffFormatter(System.out)) { formatter.setRepository(repository); formatter.format(entry); } } } } }
public static void main(String[] args) throws IOException, GitAPIException { try (Repository repository = CookbookHelper.openJGitCookbookRepository()) { // the diff works on TreeIterators, we prepare two for the two branches AbstractTreeIterator oldTreeParser = prepareTreeParser(repository, "b97b184b0ce11c0b6a4dcc2b57768ff155cb696b"); AbstractTreeIterator newTreeParser = prepareTreeParser(repository, "9e0719d7d773b41b49ebf04e6fd7b5c637e96063"); // then the porcelain diff-command returns a list of diff entries try (Git git = new Git(repository)) { List<DiffEntry> diff = git.diff(). setOldTree(oldTreeParser). setNewTree(newTreeParser). setPathFilter(PathFilter.create("README.md")). // to filter on Suffix use the following instead //setPathFilter(PathSuffixFilter.create(".java")). call(); for (DiffEntry entry : diff) { System.out.println("Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId()); try (DiffFormatter formatter = new DiffFormatter(System.out)) { formatter.setRepository(repository); formatter.format(entry); } } } } }
/** * Get the object id. * * @param side * the side of the id to get. * @return the object id; null if there is no index line */ public AbbreviatedObjectId getId(Side side) { return side == Side.OLD ? getOldId() : getNewId(); }
/** * Get the object id. * * @param side * the side of the id to get. * @return the object id; null if there is no index line */ public AbbreviatedObjectId getId(Side side) { return side == Side.OLD ? getOldId() : getNewId(); }
/** * Get blob object ids * * @return non-null but possibly empty array of object ids */ public ObjectId[] getBlobs() { List<ObjectId> objectIds = new ArrayList<ObjectId>(); if (diffEntry.getOldId() != null) objectIds.add(diffEntry.getOldId().toObjectId()); if (diffEntry.getNewId() != null) objectIds.add(diffEntry.getNewId().toObjectId()); return objectIds.toArray(new ObjectId[]{}); }
DiffFormatter formatter = new DiffFormatter( System.out ); formatter.setRepository( git.getRepository() ); AbstractTreeIterator commitTreeIterator = prepareTreeParser( git.getRepository(), Constants.HEAD ); FileTreeIterator workTreeIterator = new FileTreeIterator( git.getRepository() ); List<DiffEntry> diffEntries = formatter.scan( commitTreeIterator, workTreeIterator ); for( DiffEntry entry : diffEntries ) { System.out.println( "Entry: " + entry + ", from: " + entry.getOldId() + ", to: " + entry.getNewId() ); formatter.format( entry ); }
private String getSourceCode(Repository repo, DiffEntry diff) throws IOException { if(!collectConfig.isCollectingSourceCode()) return ""; try { ObjectReader reader = repo.newObjectReader(); byte[] bytes = reader.open(diff.getNewId().toObjectId()).getBytes(); return new String(bytes, "utf-8"); } catch (Throwable e) { return ""; } }
/** * @param o * the stream the formatter will write line data to * @param ent * the DiffEntry to create the FileHeader for * @throws IOException * writing to the supplied stream failed. */ protected void formatIndexLine(OutputStream o, DiffEntry ent) throws IOException { o.write(encodeASCII("index " // //$NON-NLS-1$ + format(ent.getOldId()) // + ".." // //$NON-NLS-1$ + format(ent.getNewId()))); if (ent.getOldMode().equals(ent.getNewMode())) { o.write(' '); ent.getNewMode().copyTo(o); } o.write('\n'); }
/** * Format index line * * @param o * the stream the formatter will write line data to * @param ent * the DiffEntry to create the FileHeader for * @throws java.io.IOException * writing to the supplied stream failed. */ protected void formatIndexLine(OutputStream o, DiffEntry ent) throws IOException { o.write(encodeASCII("index " // //$NON-NLS-1$ + format(ent.getOldId()) // + ".." // //$NON-NLS-1$ + format(ent.getNewId()))); if (ent.getOldMode().equals(ent.getNewMode())) { o.write(' '); ent.getNewMode().copyTo(o); } o.write('\n'); }
@Override public boolean include(final RevCommit commit, final Collection<DiffEntry> diffs) throws IOException { for (DiffEntry diff : diffs) { final AbbreviatedObjectId oldId = diff.getOldId(); if (oldId == null) continue; if (EMPTY_BLOB_ID.equals(oldId.toObjectId()) && !EMPTY_BLOB_ID.equals(diff.getNewId().toObjectId())) return true; } return false; }
@Override public boolean include(final RevCommit commit, final Collection<DiffEntry> diffs) throws IOException { for (DiffEntry diff : diffs) { final AbbreviatedObjectId oldId = diff.getOldId(); if (oldId == null) continue; if (!EMPTY_BLOB_ID.equals(oldId.toObjectId()) && EMPTY_BLOB_ID.equals(diff.getNewId().toObjectId())) return true; } return false; }
@Override public boolean include(final RevCommit commit, final Collection<DiffEntry> diffs) { final DuplicateContainer dupes = new DuplicateContainer(commit); for (DiffEntry diff : diffs) { if (!isFileDiff(diff)) continue; switch (diff.getChangeType()) { case DELETE: continue; case COPY: case MODIFY: case RENAME: if (diff.getOldMode() != diff.getNewMode() && diff.getNewId().equals(diff.getOldId())) continue; default: dupes.include(diff.getNewId().toObjectId(), diff.getNewPath()); break; } } if (dupes.validate()) duplicates.put(commit, dupes); return true; }
@Override public boolean include(RevWalk walker, RevCommit commit, Collection<DiffEntry> diffs) { count = 0; final ObjectReader reader = walker.getObjectReader(); for (DiffEntry diff : diffs) { if (!isFileDiff(diff)) continue; final AbbreviatedObjectId oldId = diff.getOldId(); if (oldId == null) continue; include(commit, diff, BlobUtils.diff(reader, oldId.toObjectId(), diff.getNewId().toObjectId())); if (count >= total) break; } return count >= total ? true : include(false); }
@Override public boolean include(final RevWalk walker, final RevCommit commit, final Collection<DiffEntry> diffs) { markStart(commit); final ObjectReader reader = walker.getObjectReader(); for (DiffEntry diff : diffs) { if (!isFileDiff(diff)) continue; final AbbreviatedObjectId oldId = diff.getOldId(); if (oldId == null) continue; if (!include(commit, diff, BlobUtils.diff(reader, oldId.toObjectId(), diff.getNewId().toObjectId()))) return markEnd(commit).include(false); } markEnd(commit); return true; }