summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2010-12-07 18:53:09 -0800
committerShawn O. Pearce <spearce@spearce.org>2010-12-08 10:03:20 -0800
commite6c39227640536ac1c2e41d8970aeca84b3c6268 (patch)
tree98ad198fb6498ccef5f846a858ce540985a67423 /org.eclipse.jgit
parent72f87adce69da858164c70c40d9e0ae778aa5257 (diff)
downloadjgit-e6c39227640536ac1c2e41d8970aeca84b3c6268.tar.gz
jgit-e6c39227640536ac1c2e41d8970aeca84b3c6268.zip
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>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java19
1 files changed, 12 insertions, 7 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java
index 6b2af07631..52fc3db791 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java
+++ b/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> assumeUnchanged = new HashSet<String>();
+ private Set<String> assumeUnchanged;
+
+ private DirCache dirCache;
/**
* Construct an IndexDiff
@@ -167,7 +169,8 @@ public class IndexDiff {
*/
public boolean diff() throws IOException {
boolean changesExist = false;
- DirCache dirCache = repository.readDirCache();
+ dirCache = repository.readDirCache();
+
TreeWalk treeWalk = new TreeWalk(repository);
treeWalk.setRecursive(true);
// add the trees (tree, dirchache, workdir)
@@ -192,11 +195,6 @@ public class IndexDiff {
WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR,
WorkingTreeIterator.class);
- if (dirCacheIterator != null) {
- if (dirCacheIterator.getDirCacheEntry().isAssumeValid())
- assumeUnchanged.add(treeWalk.getPathString());
- }
-
if (treeIterator != null) {
if (dirCacheIterator != null) {
if (!treeIterator.getEntryObjectId().equals(
@@ -290,6 +288,13 @@ public class IndexDiff {
* @return list of files with the flag assume-unchanged
*/
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;
}
}