List of usage examples for org.eclipse.jgit.diff DiffEntry getNewMode
public FileMode getNewMode()
From source file:MyDiffFormatter.java
License:Eclipse Distribution License
private static void writeGitLinkDiffText(OutputStream o, DiffEntry ent) throws IOException { if (ent.getOldMode() == GITLINK) { o.write(encodeASCII("-Subproject commit " + ent.getOldId().name() //$NON-NLS-1$ + "\n")); //$NON-NLS-1$ }//from ww w. ja v a 2 s .co m if (ent.getNewMode() == GITLINK) { o.write(encodeASCII("+Subproject commit " + ent.getNewId().name() //$NON-NLS-1$ + "\n")); //$NON-NLS-1$ } }
From source file:MyDiffFormatter.java
License:Eclipse Distribution License
public FormatResult getFormatResult(DiffEntry ent) throws IOException { final FormatResult res = new FormatResult(); ByteArrayOutputStream buf = new ByteArrayOutputStream(); final EditList editList; final FileHeader.PatchType type; formatHeader(buf, ent);//from ww w. jav a2 s .c o m if (ent.getOldMode() == GITLINK || ent.getNewMode() == GITLINK) { formatOldNewPaths(buf, ent); writeGitLinkDiffText(buf, ent); editList = new EditList(); type = PatchType.UNIFIED; } else if (ent.getOldId() == null || ent.getNewId() == null) { // Content not changed (e.g. only mode, pure rename) editList = new EditList(); type = PatchType.UNIFIED; } else { assertHaveRepository(); byte[] aRaw = open(OLD, ent); byte[] bRaw = open(NEW, ent); if (aRaw == BINARY || bRaw == BINARY // || RawText.isBinary(aRaw) || RawText.isBinary(bRaw)) { formatOldNewPaths(buf, ent); buf.write(encodeASCII("Binary files differ\n")); //$NON-NLS-1$ editList = new EditList(); type = PatchType.BINARY; } else { res.a = new RawText(aRaw); res.b = new RawText(bRaw); editList = diff(res.a, res.b); type = PatchType.UNIFIED; switch (ent.getChangeType()) { case RENAME: case COPY: if (!editList.isEmpty()) formatOldNewPaths(buf, ent); break; default: formatOldNewPaths(buf, ent); break; } } } res.header = new FileHeader(buf.toByteArray(), editList, type); return res; }
From source file:MyDiffFormatter.java
License:Eclipse Distribution License
private void formatHeader(ByteArrayOutputStream o, DiffEntry ent) throws IOException { final ChangeType type = ent.getChangeType(); final String oldp = ent.getOldPath(); final String newp = ent.getNewPath(); final FileMode oldMode = ent.getOldMode(); final FileMode newMode = ent.getNewMode(); formatGitDiffFirstHeaderLine(o, type, oldp, newp); if ((type == MODIFY || type == COPY || type == RENAME) && !oldMode.equals(newMode)) { o.write(encodeASCII("old mode ")); //$NON-NLS-1$ oldMode.copyTo(o);/*from www . j a v a 2s. c o m*/ o.write('\n'); o.write(encodeASCII("new mode ")); //$NON-NLS-1$ newMode.copyTo(o); o.write('\n'); } switch (type) { case ADD: o.write(encodeASCII("new file mode ")); //$NON-NLS-1$ newMode.copyTo(o); o.write('\n'); break; case DELETE: o.write(encodeASCII("deleted file mode ")); //$NON-NLS-1$ oldMode.copyTo(o); o.write('\n'); break; case RENAME: o.write(encodeASCII("similarity index " + ent.getScore() + "%")); //$NON-NLS-1$ //$NON-NLS-2$ o.write('\n'); o.write(encode("rename from " + quotePath(oldp))); //$NON-NLS-1$ o.write('\n'); o.write(encode("rename to " + quotePath(newp))); //$NON-NLS-1$ o.write('\n'); break; case COPY: o.write(encodeASCII("similarity index " + ent.getScore() + "%")); //$NON-NLS-1$ //$NON-NLS-2$ o.write('\n'); o.write(encode("copy from " + quotePath(oldp))); //$NON-NLS-1$ o.write('\n'); o.write(encode("copy to " + quotePath(newp))); //$NON-NLS-1$ o.write('\n'); break; case MODIFY: if (0 < ent.getScore()) { o.write(encodeASCII("dissimilarity index " //$NON-NLS-1$ + (100 - ent.getScore()) + "%")); //$NON-NLS-1$ o.write('\n'); } break; } if (ent.getOldId() != null && !ent.getOldId().equals(ent.getNewId())) { formatIndexLine(o, ent); } }
From source file:MyDiffFormatter.java
License:Eclipse Distribution License
/** * @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. */// www .j a v a 2 s.c om 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'); }
From source file:boa.datagen.scm.GitCommit.java
License:Apache License
private void getChangeFiles(final RevCommit parent, final RevCommit rc, final HashMap<String, String> rChangedPaths, final HashMap<String, String> rRemovedPaths, final HashMap<String, String> rAddedPaths) { final DiffFormatter df = new DiffFormatter(NullOutputStream.INSTANCE); df.setRepository(repository);/*from www.j ava 2 s . c o m*/ df.setDiffComparator(RawTextComparator.DEFAULT); df.setDetectRenames(true); try { final AbstractTreeIterator parentIter; if (parent == null) parentIter = new EmptyTreeIterator(); else parentIter = new CanonicalTreeParser(null, repository.newObjectReader(), parent.getTree()); for (final DiffEntry diff : df.scan(parentIter, new CanonicalTreeParser(null, repository.newObjectReader(), rc.getTree()))) { if (diff.getChangeType() == ChangeType.MODIFY || diff.getChangeType() == ChangeType.COPY || diff.getChangeType() == ChangeType.RENAME) { if (diff.getOldMode().getObjectType() == Constants.OBJ_BLOB && diff.getNewMode().getObjectType() == Constants.OBJ_BLOB) { String path = diff.getNewPath(); rChangedPaths.put(path, diff.getOldPath()); filePathGitObjectIds.put(path, diff.getNewId().toObjectId()); } } else if (diff.getChangeType() == ChangeType.ADD) { if (diff.getNewMode().getObjectType() == Constants.OBJ_BLOB) { String path = diff.getNewPath(); rAddedPaths.put(path, null); filePathGitObjectIds.put(path, diff.getNewId().toObjectId()); } } else if (diff.getChangeType() == ChangeType.DELETE) { if (diff.getOldMode().getObjectType() == Constants.OBJ_BLOB) { rRemovedPaths.put(diff.getOldPath(), diff.getOldPath()); } } } } catch (final IOException e) { if (debug) System.err.println("Git Error getting commit diffs: " + e.getMessage()); } df.close(); }
From source file:com.google.gitiles.CommitJsonData.java
License:Open Source License
private static List<Diff> toJsonData(DiffList dl) { if (dl.entries == null) { return ImmutableList.of(); }/* w ww .ja v a2 s . c om*/ List<Diff> result = Lists.newArrayListWithCapacity(dl.entries.size()); for (DiffEntry de : dl.entries) { Diff d = new Diff(); d.type = de.getChangeType().name().toLowerCase(); d.oldId = de.getOldId().name(); d.oldMode = de.getOldMode().getBits(); d.oldPath = de.getOldPath(); d.newId = de.getNewId().name(); d.newMode = de.getNewMode().getBits(); d.newPath = de.getNewPath(); switch (de.getChangeType()) { case COPY: case RENAME: d.score = de.getScore(); break; default: break; } result.add(d); } return result; }
From source file:com.madgag.agit.diff.LineContextDiffer.java
License:Open Source License
/** * Format a patch script for one file entry. * /* w ww .jav a 2s.c o m*/ * @param ent * the entry to be formatted. * @throws IOException * a file's content cannot be read, or the output stream cannot * be written to. */ public List<Hunk> format(DiffEntry ent) throws IOException { //writeDiffHeader(out, ent); if (ent.getOldMode() == GITLINK || ent.getNewMode() == GITLINK) { // writeGitLinkDiffText(out, ent); return emptyList(); } else { byte[] aRaw, bRaw; try { aRaw = open(objectReader, ent.getOldMode(), ent.getOldId()); bRaw = open(objectReader, ent.getNewMode(), ent.getNewId()); } finally { // objectReader.release(); } if (RawText.isBinary(aRaw) || RawText.isBinary(bRaw)) { //out.write(encodeASCII("Binary files differ\n")); return emptyList(); } else { RawText a = new RawText(aRaw); RawText b = new RawText(bRaw); return formatEdits(a, b, MyersDiff.INSTANCE.diff(DEFAULT, a, b)); } } }
From source file:com.madgag.agit.diff.LineContextDiffer.java
License:Open Source License
private void writeGitLinkDiffText(OutputStream o, DiffEntry ent) throws IOException { if (ent.getOldMode() == GITLINK) { o.write(encodeASCII("-Subproject commit " + ent.getOldId().name() + "\n")); }//w ww . j ava 2 s . co m if (ent.getNewMode() == GITLINK) { o.write(encodeASCII("+Subproject commit " + ent.getNewId().name() + "\n")); } }
From source file:com.madgag.agit.diff.LineContextDiffer.java
License:Open Source License
private void writeDiffHeader(OutputStream o, DiffEntry ent) throws IOException { String oldName = quotePath("a/" + ent.getOldPath()); String newName = quotePath("b/" + ent.getNewPath()); o.write(encode("diff --git " + oldName + " " + newName + "\n")); switch (ent.getChangeType()) { case ADD:/* ww w . jav a2s . c o m*/ o.write(encodeASCII("new file mode ")); ent.getNewMode().copyTo(o); o.write('\n'); break; case DELETE: o.write(encodeASCII("deleted file mode ")); ent.getOldMode().copyTo(o); o.write('\n'); break; case RENAME: o.write(encodeASCII("similarity index " + ent.getScore() + "%")); o.write('\n'); o.write(encode("rename from " + quotePath(ent.getOldPath()))); o.write('\n'); o.write(encode("rename to " + quotePath(ent.getNewPath()))); o.write('\n'); break; case COPY: o.write(encodeASCII("similarity index " + ent.getScore() + "%")); o.write('\n'); o.write(encode("copy from " + quotePath(ent.getOldPath()))); o.write('\n'); o.write(encode("copy to " + quotePath(ent.getNewPath()))); o.write('\n'); if (!ent.getOldMode().equals(ent.getNewMode())) { o.write(encodeASCII("new file mode ")); ent.getNewMode().copyTo(o); o.write('\n'); } break; case MODIFY: int score = ent.getScore(); if (0 < score && score <= 100) { o.write(encodeASCII("dissimilarity index " + (100 - score) + "%")); o.write('\n'); } break; } switch (ent.getChangeType()) { case RENAME: case MODIFY: if (!ent.getOldMode().equals(ent.getNewMode())) { o.write(encodeASCII("old mode ")); ent.getOldMode().copyTo(o); o.write('\n'); o.write(encodeASCII("new mode ")); ent.getNewMode().copyTo(o); o.write('\n'); } } o.write(encodeASCII("index " // + format(ent.getOldId()) // + ".." // + format(ent.getNewId()))); if (ent.getOldMode().equals(ent.getNewMode())) { o.write(' '); ent.getNewMode().copyTo(o); } o.write('\n'); o.write(encode("--- " + oldName + '\n')); o.write(encode("+++ " + newName + '\n')); }
From source file:com.microsoft.gittf.core.tasks.pendDiff.PendDifferenceTask.java
License:Open Source License
/** * Creates the CheckinAnalysisChangeCollection analysis object that includes * the list of pending changes needed that map to the differences between * the fromCommit and toCommit//from w w w. j a va 2s . c o m * * @param repository * the git repository * @param fromRootTree * the from commit tree * @param toRootTree * the to commit tree * @param renameMode * the rename mode to use when generating the analysis * @param progressMonitor * the progress monitor to use to report progress * @return * @throws Exception */ public static CheckinAnalysisChangeCollection analyzeDifferences(Repository repository, RevObject fromRootTree, RevObject toRootTree, RenameMode renameMode, final TaskProgressMonitor progressMonitor) throws Exception { Check.notNull(fromRootTree, "fromRootTree"); //$NON-NLS-1$ Check.notNull(toRootTree, "toRootTree"); //$NON-NLS-1$ Check.notNull(progressMonitor, "progressMonitor"); //$NON-NLS-1$ progressMonitor.beginTask(Messages.getString("PendDifferencesTask.AnalyzingCommits"), //$NON-NLS-1$ TaskProgressMonitor.INDETERMINATE, TaskProgressDisplay.DISPLAY_SUBTASK_DETAIL); /* Init the analysis object */ final CheckinAnalysisChangeCollection analysis = new CheckinAnalysisChangeCollection(repository, fromRootTree, toRootTree); log.debug("Walking thru the git-repository tree."); /* Init the tree walker object */ final TreeWalk treeWalker = new NameConflictTreeWalk(repository); final RenameDetector repositoryRenameDetector = new RenameDetector(repository); try { treeWalker.setRecursive(true); treeWalker.addTree(fromRootTree); treeWalker.addTree(toRootTree); treeWalker.setFilter(TreeFilter.ANY_DIFF); List<DiffEntry> treeDifferences = DiffEntry.scan(treeWalker); log.debug("The number of differences found: " + treeDifferences.size()); /* * If we need to detect file renames then use the rename detector to * analayze the differences first */ if (renameMode != RenameMode.NONE) { repositoryRenameDetector.addAll(treeDifferences); treeDifferences = repositoryRenameDetector.compute(); } /* * If the rename mode is either none or file only then we do not * need to detect folder deletes as well, since deleting empty * folders that have items that have been renamed out is not * supported in TFS */ if (renameMode != RenameMode.ALL) { analysis.setProcessDeletedFolders(false); } Map<String, DiffEntry> deleteChanges = new HashMap<String, DiffEntry>(); Map<String, DiffEntry> addChanges = new HashMap<String, DiffEntry>(); for (DiffEntry change : treeDifferences) { switch (change.getChangeType()) { case ADD: addChanges.put(change.getNewPath().toUpperCase(), change); break; case DELETE: deleteChanges.put(change.getOldPath().toUpperCase(), change); break; } } /* Append each change in to the analysis object */ for (DiffEntry change : treeDifferences) { switch (change.getChangeType()) { case ADD: case COPY: if (!isCaseSensitiveRename(change, deleteChanges, addChanges)) { analysis.pendAdd(new AddChange(change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()))); analysis.pendPropertyIfChanged(new PropertyChange(change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()), change.getNewMode())); } break; case DELETE: if (isCaseSensitiveRename(change, deleteChanges, addChanges)) { DiffEntry addChange = addChanges.get(change.getOldPath().toUpperCase()); analysis.pendRename(new RenameChange(change.getOldPath(), addChange.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, addChange.getNewId()), !change.getOldId().equals(addChange.getNewId()))); analysis.pendPropertyIfChanged(new PropertyChange(addChange.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, addChange.getNewId()), change.getOldMode(), addChange.getNewMode())); } else { analysis.pendDelete(new DeleteChange(change.getOldPath(), change.getOldMode())); } break; case MODIFY: analysis.pendEdit(new EditChange(change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()))); analysis.pendPropertyIfChanged(new PropertyChange(change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()), change.getOldMode(), change.getNewMode())); break; case RENAME: analysis.pendRename(new RenameChange(change.getOldPath(), change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()), !change.getOldId().equals(change.getNewId()))); analysis.pendPropertyIfChanged(new PropertyChange(change.getNewPath(), CommitUtil.resolveAbbreviatedId(repository, change.getNewId()), change.getOldMode(), change.getNewMode())); } } } finally { if (treeWalker != null) { treeWalker.release(); } progressMonitor.endTask(); } log.debug("Walk thru the git-repository tree finished."); return analysis; }