public class DiffFormatter extends Object implements AutoCloseable
Constructor and Description |
---|
DiffFormatter(OutputStream out)
Create a new formatter with a default level of context.
|
Modifier and Type | Method and Description |
---|---|
void |
close() |
void |
flush()
Flush the underlying output stream of this formatter.
|
void |
format(AbstractTreeIterator a,
AbstractTreeIterator b)
Format the differences between two trees.
|
void |
format(AnyObjectId a,
AnyObjectId b)
Format the differences between two trees.
|
void |
format(DiffEntry ent)
Format a patch script for one file entry.
|
void |
format(EditList edits,
RawText a,
RawText b)
Formats a list of edits in unified diff format
|
void |
format(FileHeader head,
RawText a,
RawText b)
Format a patch script, reusing a previously parsed FileHeader.
|
void |
format(List<? extends DiffEntry> entries)
Format a patch script from a list of difference entries.
|
void |
format(RevTree a,
RevTree b)
Format the differences between two trees.
|
protected void |
formatGitDiffFirstHeaderLine(ByteArrayOutputStream o,
DiffEntry.ChangeType type,
String oldPath,
String newPath)
Output the first header line
|
protected void |
formatIndexLine(OutputStream o,
DiffEntry ent)
Format index line
|
String |
getNewPrefix()
Get the prefix applied in front of new file paths.
|
String |
getOldPrefix()
Get the prefix applied in front of old file paths.
|
protected OutputStream |
getOutputStream()
Get output stream
|
TreeFilter |
getPathFilter()
Get path filter
|
RenameDetector |
getRenameDetector()
Get rename detector
|
boolean |
isDetectRenames()
Get if rename detection is enabled
|
List<DiffEntry> |
scan(AbstractTreeIterator a,
AbstractTreeIterator b)
Determine the differences between two trees.
|
List<DiffEntry> |
scan(AnyObjectId a,
AnyObjectId b)
Determine the differences between two trees.
|
List<DiffEntry> |
scan(RevTree a,
RevTree b)
Determine the differences between two trees.
|
void |
setAbbreviationLength(int count)
Change the number of digits to show in an ObjectId.
|
void |
setBinaryFileThreshold(int threshold)
Set maximum file size for text files.
|
void |
setContext(int lineCount)
Change the number of lines of context to display.
|
void |
setDetectRenames(boolean on)
Enable or disable rename detection.
|
void |
setDiffAlgorithm(DiffAlgorithm alg)
Set the algorithm that constructs difference output.
|
void |
setDiffComparator(RawTextComparator cmp)
Set the line equivalence function for text file differences.
|
void |
setNewPrefix(String prefix)
Set the prefix applied in front of new file paths.
|
void |
setOldPrefix(String prefix)
Set the prefix applied in front of old file paths.
|
void |
setPathFilter(TreeFilter filter)
Set the filter to produce only specific paths.
|
void |
setProgressMonitor(ProgressMonitor pm)
Set the progress monitor for long running rename detection.
|
void |
setQuotePaths(boolean quote)
Sets whether or not path names should be quoted.
|
void |
setReader(ObjectReader reader,
Config cfg)
Set the repository the formatter can load object contents from.
|
void |
setRepository(Repository repository)
Set the repository the formatter can load object contents from.
|
FileHeader |
toFileHeader(DiffEntry ent)
Creates a
FileHeader representing the
given DiffEntry |
protected void |
writeAddedLine(RawText text,
int line)
Output an added line.
|
protected void |
writeContextLine(RawText text,
int line)
Output a line of context (unmodified line).
|
protected void |
writeHunkHeader(int aStartLine,
int aEndLine,
int bStartLine,
int bEndLine)
Output a hunk header
|
protected void |
writeLine(char prefix,
RawText text,
int cur)
Write a standard patch script line.
|
protected void |
writeRemovedLine(RawText text,
int line)
Output a removed line
|
public DiffFormatter(OutputStream out)
out
- the stream the formatter will write line data to. This stream
should have buffering arranged by the caller, as many small
writes are performed to it.protected OutputStream getOutputStream()
public void setRepository(Repository repository)
repository
- source repository holding referenced objects.public void setReader(ObjectReader reader, Config cfg)
reader
- source reader holding referenced objects. Caller is responsible
for closing the reader.cfg
- config specifying diff algorithm and rename detection options.public void setContext(int lineCount)
lineCount
- number of lines of context to see before the first
modification and after the last modification within a hunk of
the modified file.public void setAbbreviationLength(int count)
count
- number of digits to show in an ObjectId.public void setDiffAlgorithm(DiffAlgorithm alg)
alg
- the algorithm to produce text file differences.HistogramDiff
public void setDiffComparator(RawTextComparator cmp)
cmp
- The equivalence function used to determine if two lines of
text are identical. The function can be changed to ignore
various types of whitespace.RawTextComparator.DEFAULT
,
RawTextComparator.WS_IGNORE_ALL
,
RawTextComparator.WS_IGNORE_CHANGE
,
RawTextComparator.WS_IGNORE_LEADING
,
RawTextComparator.WS_IGNORE_TRAILING
public void setBinaryFileThreshold(int threshold)
threshold
- the limit, in bytes. Files larger than this size will be
assumed to be binary, even if they aren't.public void setOldPrefix(String prefix)
prefix
- the prefix in front of old paths. Typically this is the
standard string "a/"
, but may be any prefix desired by
the caller. Must not be null. Use the empty string to have no
prefix at all.public String getOldPrefix()
public void setNewPrefix(String prefix)
prefix
- the prefix in front of new paths. Typically this is the
standard string "b/"
, but may be any prefix desired by
the caller. Must not be null. Use the empty string to have no
prefix at all.public String getNewPrefix()
public boolean isDetectRenames()
public void setDetectRenames(boolean on)
setRepository(Repository)
. Once enabled the detector can be
configured away from its defaults by obtaining the instance directly from
getRenameDetector()
and invoking configuration.on
- if rename detection should be enabled.public RenameDetector getRenameDetector()
public void setProgressMonitor(ProgressMonitor pm)
pm
- progress monitor to receive rename detection status through.public void setQuotePaths(boolean quote)
By default the setting of git config core.quotePath
is active,
but this can be overridden through this method.
quote
- whether to quote path namespublic void setPathFilter(TreeFilter filter)
FollowFilter
, the filter path will be
updated during successive scan or format invocations. The updated path
can be obtained from getPathFilter()
.filter
- the tree filter to apply.public TreeFilter getPathFilter()
public void flush() throws IOException
IOException
- the stream's own flush method threw an exception.public void close()
Release the internal ObjectReader state.
close
in interface AutoCloseable
public List<DiffEntry> scan(AnyObjectId a, AnyObjectId b) throws IOException
FileHeader
instances with a
complete edit list by calling toFileHeader(DiffEntry)
.
Either side may be null to indicate that the tree has beed added or removed. The diff will be computed against nothing.
a
- the old (or previous) side or nullb
- the new (or updated) side or nullIOException
- trees cannot be read or file contents cannot be read.public List<DiffEntry> scan(RevTree a, RevTree b) throws IOException
FileHeader
instances with a
complete edit list by calling toFileHeader(DiffEntry)
.
Either side may be null to indicate that the tree has beed added or removed. The diff will be computed against nothing.
a
- the old (or previous) side or nullb
- the new (or updated) side or nullIOException
- trees cannot be read or file contents cannot be read.public List<DiffEntry> scan(AbstractTreeIterator a, AbstractTreeIterator b) throws IOException
FileHeader
instances with a
complete edit list by calling toFileHeader(DiffEntry)
.a
- the old (or previous) side.b
- the new (or updated) side.IOException
- trees cannot be read or file contents cannot be read.public void format(AnyObjectId a, AnyObjectId b) throws IOException
a
to make it
b
.
Either side may be null to indicate that the tree has beed added or removed. The diff will be computed against nothing.
a
- the old (or previous) side or nullb
- the new (or updated) side or nullIOException
- trees cannot be read, file contents cannot be read, or the
patch cannot be output.public void format(RevTree a, RevTree b) throws IOException
a
to make it
b
.
Either side may be null to indicate that the tree has beed added or removed. The diff will be computed against nothing.
a
- the old (or previous) side or nullb
- the new (or updated) side or nullIOException
- trees cannot be read, file contents cannot be read, or the
patch cannot be output.public void format(AbstractTreeIterator a, AbstractTreeIterator b) throws IOException
a
to make it
b
.
Either side may be null to indicate that the tree has beed added or removed. The diff will be computed against nothing.
a
- the old (or previous) side or nullb
- the new (or updated) side or nullIOException
- trees cannot be read, file contents cannot be read, or the
patch cannot be output.public void format(List<? extends DiffEntry> entries) throws IOException
scan(AbstractTreeIterator, AbstractTreeIterator)
to have been
called first.entries
- entries describing the affected files.IOException
- a file's content cannot be read, or the output stream cannot
be written to.public void format(DiffEntry ent) throws IOException
ent
- the entry to be formatted.IOException
- a file's content cannot be read, or the output stream cannot
be written to.public void format(FileHeader head, RawText a, RawText b) throws IOException
This formatter is primarily useful for editing an existing patch script to increase or reduce the number of lines of context within the script. All header lines are reused as-is from the supplied FileHeader.
head
- existing file header containing the header lines to copy.a
- text source for the pre-image version of the content. This
must match the content of
DiffEntry.getOldId()
.b
- text source for the post-image version of the content. This
must match the content of
DiffEntry.getNewId()
.IOException
- writing to the supplied stream failed.public void format(EditList edits, RawText a, RawText b) throws IOException
edits
- some differences which have been calculated between A and Ba
- the text A which was comparedb
- the text B which was comparedIOException
protected void writeContextLine(RawText text, int line) throws IOException
text
- RawText for accessing raw dataline
- the line number within textIOException
protected void writeAddedLine(RawText text, int line) throws IOException
text
- RawText for accessing raw dataline
- the line number within textIOException
protected void writeRemovedLine(RawText text, int line) throws IOException
text
- RawText for accessing raw dataline
- the line number within textIOException
protected void writeHunkHeader(int aStartLine, int aEndLine, int bStartLine, int bEndLine) throws IOException
aStartLine
- within first sourceaEndLine
- within first sourcebStartLine
- within second sourcebEndLine
- within second sourceIOException
protected void writeLine(char prefix, RawText text, int cur) throws IOException
prefix
- prefix before the line, typically '-', '+', ' '.text
- the text object to obtain the line from.cur
- line number to output.IOException
- the stream threw an exception while writing to it.public FileHeader toFileHeader(DiffEntry ent) throws IOException, CorruptObjectException, MissingObjectException
FileHeader
representing the
given DiffEntry
This method does not use the OutputStream associated with this
DiffFormatter instance. It is therefore safe to instantiate this
DiffFormatter instance with a
DisabledOutputStream
if this method is
the only one that will be used.
ent
- the DiffEntry to create the FileHeader forHunkHeader
.IOException
- the stream threw an exception while writing to it, or one of
the blobs referenced by the DiffEntry could not be read.CorruptObjectException
- one of the blobs referenced by the DiffEntry is corrupt.MissingObjectException
- one of the blobs referenced by the DiffEntry is missing.protected void formatGitDiffFirstHeaderLine(ByteArrayOutputStream o, DiffEntry.ChangeType type, String oldPath, String newPath) throws IOException
o
- The stream the formatter will write the first header line totype
- The DiffEntry.ChangeType
oldPath
- old path to the filenewPath
- new path to the fileIOException
- the stream threw an exception while writing to it.protected void formatIndexLine(OutputStream o, DiffEntry ent) throws IOException
o
- the stream the formatter will write line data toent
- the DiffEntry to create the FileHeader forIOException
- writing to the supplied stream failed.Copyright © 2021 Eclipse JGit Project. All rights reserved.