Browse Source

IndexDiff: Fix getAssumeUnchanged()

If the caller really needs the list of files that are flagged as
assume-unchanged (aka assume-valid in the DirCache), we should give
them the complete list and not just those that we wrongly identified
as being modified during diff().

This change is necessary because diff() is slightly broken and is
discovering differences on files that it shouldn't have considered.

Change-Id: Ibe464c1a0e51c19dc287a4bc5348b7b07f4d840b
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
stable-0.10
Shawn O. Pearce 14 years ago
parent
commit
e6c3922764
  1. 19
      org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

19
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

@ -105,7 +105,9 @@ public class IndexDiff {
private Set<String> untracked = new HashSet<String>(); private Set<String> untracked = new HashSet<String>();
private Set<String> assumeUnchanged = new HashSet<String>(); private Set<String> assumeUnchanged;
private DirCache dirCache;
/** /**
* Construct an IndexDiff * Construct an IndexDiff
@ -167,7 +169,8 @@ public class IndexDiff {
*/ */
public boolean diff() throws IOException { public boolean diff() throws IOException {
boolean changesExist = false; boolean changesExist = false;
DirCache dirCache = repository.readDirCache(); dirCache = repository.readDirCache();
TreeWalk treeWalk = new TreeWalk(repository); TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.setRecursive(true); treeWalk.setRecursive(true);
// add the trees (tree, dirchache, workdir) // add the trees (tree, dirchache, workdir)
@ -192,11 +195,6 @@ public class IndexDiff {
WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR, WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR,
WorkingTreeIterator.class); WorkingTreeIterator.class);
if (dirCacheIterator != null) {
if (dirCacheIterator.getDirCacheEntry().isAssumeValid())
assumeUnchanged.add(treeWalk.getPathString());
}
if (treeIterator != null) { if (treeIterator != null) {
if (dirCacheIterator != null) { if (dirCacheIterator != null) {
if (!treeIterator.getEntryObjectId().equals( if (!treeIterator.getEntryObjectId().equals(
@ -290,6 +288,13 @@ public class IndexDiff {
* @return list of files with the flag assume-unchanged * @return list of files with the flag assume-unchanged
*/ */
public Set<String> getAssumeUnchanged() { public Set<String> getAssumeUnchanged() {
if (assumeUnchanged == null) {
HashSet<String> unchanged = new HashSet<String>();
for (int i = 0; i < dirCache.getEntryCount(); i++)
if (dirCache.getEntry(i).isAssumeValid())
unchanged.add(dirCache.getEntry(i).getPathString());
assumeUnchanged = unchanged;
}
return assumeUnchanged; return assumeUnchanged;
} }
} }

Loading…
Cancel
Save