org.eclipse.jgit.diff
Class RenameDetector

java.lang.Object
  extended by org.eclipse.jgit.diff.RenameDetector

public class RenameDetector
extends Object

Detect and resolve object renames.


Constructor Summary
RenameDetector(Repository repo)
          Create a new rename detector for the given repository
 
Method Summary
 void add(DiffEntry entry)
          Add an entry to be considered for rename detection.
 void addAll(Collection<DiffEntry> entriesToAdd)
          Add entries to be considered for rename detection.
 List<DiffEntry> compute()
          Detect renames in the current file set.
 List<DiffEntry> compute(ContentSource.Pair reader, ProgressMonitor pm)
          Detect renames in the current file set.
 List<DiffEntry> compute(ObjectReader reader, ProgressMonitor pm)
          Detect renames in the current file set.
 List<DiffEntry> compute(ProgressMonitor pm)
          Detect renames in the current file set.
 int getBreakScore()
           
 int getRenameLimit()
           
 int getRenameScore()
           
 boolean isOverRenameLimit()
          Check if the detector is over the rename limit.
 void reset()
          Reset this rename detector for another rename detection pass.
 void setBreakScore(int breakScore)
           
 void setRenameLimit(int limit)
          Set the limit on the number of files to perform inexact rename detection.
 void setRenameScore(int score)
          Set the minimum score required to pair an add/delete as a rename.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RenameDetector

public RenameDetector(Repository repo)
Create a new rename detector for the given repository

Parameters:
repo - the repository to use for rename detection
Method Detail

getRenameScore

public int getRenameScore()
Returns:
minimum score required to pair an add/delete as a rename. The score ranges are within the bounds of (0, 100).

setRenameScore

public void setRenameScore(int score)
Set the minimum score required to pair an add/delete as a rename.

When comparing two files together their score must be greater than or equal to the rename score for them to be considered a rename match. The score is computed based on content similarity, so a score of 60 implies that approximately 60% of the bytes in the files are identical.

Parameters:
score - new rename score, must be within [0, 100].
Throws:
IllegalArgumentException - the score was not within [0, 100].

getBreakScore

public int getBreakScore()
Returns:
the similarity score required to keep modified file pairs together. Any modify pairs that score below this will be broken apart into separate add/deletes. Values less than or equal to zero indicate that no modifies will be broken apart. Values over 100 cause all modify pairs to be broken.

setBreakScore

public void setBreakScore(int breakScore)
Parameters:
breakScore - the similarity score required to keep modified file pairs together. Any modify pairs that score below this will be broken apart into separate add/deletes. Values less than or equal to zero indicate that no modifies will be broken apart. Values over 100 cause all modify pairs to be broken.

getRenameLimit

public int getRenameLimit()
Returns:
limit on number of paths to perform inexact rename detection.

setRenameLimit

public void setRenameLimit(int limit)
Set the limit on the number of files to perform inexact rename detection.

The rename detector has to build a square matrix of the rename limit on each side, then perform that many file compares to determine similarity. If 1000 files are added, and 1000 files are deleted, a 1000*1000 matrix must be allocated, and 1,000,000 file compares may need to be performed.

Parameters:
limit - new file limit.

isOverRenameLimit

public boolean isOverRenameLimit()
Check if the detector is over the rename limit.

This method can be invoked either before or after getEntries has been used to perform rename detection.

Returns:
true if the detector has more file additions or removals than the rename limit is currently set to. In such configurations the detector will skip expensive computation.

addAll

public void addAll(Collection<DiffEntry> entriesToAdd)
Add entries to be considered for rename detection.

Parameters:
entriesToAdd - one or more entries to add.
Throws:
IllegalStateException - if getEntries was already invoked.

add

public void add(DiffEntry entry)
Add an entry to be considered for rename detection.

Parameters:
entry - to add.
Throws:
IllegalStateException - if getEntries was already invoked.

compute

public List<DiffEntry> compute()
                        throws IOException
Detect renames in the current file set.

This convenience function runs without a progress monitor.

Returns:
an unmodifiable list of DiffEntrys representing all files that have been changed.
Throws:
IOException - file contents cannot be read from the repository.

compute

public List<DiffEntry> compute(ProgressMonitor pm)
                        throws IOException
Detect renames in the current file set.

Parameters:
pm - report progress during the detection phases.
Returns:
an unmodifiable list of DiffEntrys representing all files that have been changed.
Throws:
IOException - file contents cannot be read from the repository.

compute

public List<DiffEntry> compute(ObjectReader reader,
                               ProgressMonitor pm)
                        throws IOException
Detect renames in the current file set.

Parameters:
reader - reader to obtain objects from the repository with.
pm - report progress during the detection phases.
Returns:
an unmodifiable list of DiffEntrys representing all files that have been changed.
Throws:
IOException - file contents cannot be read from the repository.

compute

public List<DiffEntry> compute(ContentSource.Pair reader,
                               ProgressMonitor pm)
                        throws IOException
Detect renames in the current file set.

Parameters:
reader - reader to obtain objects from the repository with.
pm - report progress during the detection phases.
Returns:
an unmodifiable list of DiffEntrys representing all files that have been changed.
Throws:
IOException - file contents cannot be read from the repository.

reset

public void reset()
Reset this rename detector for another rename detection pass.



Copyright © 2013. All Rights Reserved.