Selaa lähdekoodia

blame: Do not update candidate regionList during output

Instead of updating the candidate's regionList field to iterate
through the linked list of regions, use a special purpose field
in the BlameGenerator. This allows the candidate to be unmodified.

Change-Id: I2cda031b59220ab603ef82050e741ecbbaa1953f
tags/v3.4.0.201405051725-m7
Shawn Pearce 10 vuotta sitten
vanhempi
commit
6afae79901
1 muutettua tiedostoa jossa 24 lisäystä ja 21 poistoa
  1. 24
    21
      org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java

+ 24
- 21
org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java Näytä tiedosto

@@ -143,7 +143,8 @@ public class BlameGenerator {
private int remaining;

/** Blame is currently assigned to this source. */
private Candidate currentSource;
private Candidate outCandidate;
private Region outRegion;

/**
* Create a blame generator for the repository and path (relative to
@@ -466,19 +467,19 @@ public class BlameGenerator {
*/
public boolean next() throws IOException {
// If there is a source still pending, produce the next region.
if (currentSource != null) {
Region r = currentSource.regionList;
Region n = r.next;
if (outRegion != null) {
Region r = outRegion;
remaining -= r.length;
if (n != null) {
currentSource.regionList = n;
if (r.next != null) {
outRegion = r.next;
return true;
}

if (currentSource.queueNext != null)
return result(currentSource.queueNext);
if (outCandidate.queueNext != null)
return result(outCandidate.queueNext);

currentSource = null;
outCandidate = null;
outRegion = null;
}

// If there are no lines remaining, the entire result is done,
@@ -520,7 +521,8 @@ public class BlameGenerator {
private boolean result(Candidate n) throws IOException {
if (n.sourceCommit != null)
revPool.parseBody(n.sourceCommit);
currentSource = n;
outCandidate = n;
outRegion = n.regionList;
return true;
}

@@ -847,12 +849,12 @@ public class BlameGenerator {
* @return current revision being blamed.
*/
public RevCommit getSourceCommit() {
return currentSource.sourceCommit;
return outCandidate.sourceCommit;
}

/** @return current author being blamed. */
public PersonIdent getSourceAuthor() {
return currentSource.getAuthor();
return outCandidate.getAuthor();
}

/** @return current committer being blamed. */
@@ -863,12 +865,12 @@ public class BlameGenerator {

/** @return path of the file being blamed. */
public String getSourcePath() {
return currentSource.sourcePath.getPath();
return outCandidate.sourcePath.getPath();
}

/** @return rename score if a rename occurred in {@link #getSourceCommit}. */
public int getRenameScore() {
return currentSource.renameScore;
return outCandidate.renameScore;
}

/**
@@ -878,7 +880,7 @@ public class BlameGenerator {
* {@link #getSourcePath()}.
*/
public int getSourceStart() {
return currentSource.regionList.sourceStart;
return outRegion.sourceStart;
}

/**
@@ -888,7 +890,7 @@ public class BlameGenerator {
* {@link #getSourcePath()}.
*/
public int getSourceEnd() {
Region r = currentSource.regionList;
Region r = outRegion;
return r.sourceStart + r.length;
}

@@ -897,7 +899,7 @@ public class BlameGenerator {
* blamed for providing. Line numbers use 0 based indexing.
*/
public int getResultStart() {
return currentSource.regionList.resultStart;
return outRegion.resultStart;
}

/**
@@ -908,7 +910,7 @@ public class BlameGenerator {
* than {@link #getResultStart()}.
*/
public int getResultEnd() {
Region r = currentSource.regionList;
Region r = outRegion;
return r.resultStart + r.length;
}

@@ -919,7 +921,7 @@ public class BlameGenerator {
* {@code getSourceEnd() - getSourceStart()}.
*/
public int getRegionLength() {
return currentSource.regionList.length;
return outRegion.length;
}

/**
@@ -930,7 +932,7 @@ public class BlameGenerator {
* applications will want the result contents for display to users.
*/
public RawText getSourceContents() {
return currentSource.sourceText;
return outCandidate.sourceText;
}

/**
@@ -951,7 +953,8 @@ public class BlameGenerator {
public void release() {
revPool.release();
queue = null;
currentSource = null;
outCandidate = null;
outRegion = null;
}

private boolean find(RevCommit commit, PathFilter path) throws IOException {

Loading…
Peruuta
Tallenna