Add new method IndexDiff#getPathsWithIndexMode
Get the list of paths that have the given file mode. This helps EGit to efficiently determine which modified files are symlinks and should be shown with a symlink icon in the staging view. Bug: 429302 Change-Id: Id15f0c6f265667f5b8b57cc2d9f97de568371919 Signed-off-by: Axel Richard <axel.richard@obeo.fr> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
2532c28cb9
commit
5328c8c916
|
@ -3,6 +3,7 @@
|
||||||
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com>
|
* Copyright (C) 2007-2008, Robin Rosenberg <robin.rosenberg@dewire.com>
|
||||||
* Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
|
* Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
|
||||||
* Copyright (C) 2013, Robin Stocker <robin@nibor.org>
|
* Copyright (C) 2013, Robin Stocker <robin@nibor.org>
|
||||||
|
* Copyright (C) 2014, Axel Richard <axel.richard@obeo.fr>
|
||||||
* and other copyright owners as documented in the project's IP log.
|
* and other copyright owners as documented in the project's IP log.
|
||||||
*
|
*
|
||||||
* This program and the accompanying materials are made available
|
* This program and the accompanying materials are made available
|
||||||
|
@ -276,6 +277,8 @@ public TreeFilter clone() {
|
||||||
|
|
||||||
private IgnoreSubmoduleMode ignoreSubmoduleMode = null;
|
private IgnoreSubmoduleMode ignoreSubmoduleMode = null;
|
||||||
|
|
||||||
|
private Map<FileMode, Set<String>> fileModes = new HashMap<FileMode, Set<String>>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an IndexDiff
|
* Construct an IndexDiff
|
||||||
*
|
*
|
||||||
|
@ -425,6 +428,7 @@ public boolean diff(final ProgressMonitor monitor, int estWorkTreeSize,
|
||||||
indexDiffFilter = new IndexDiffFilter(INDEX, WORKDIR);
|
indexDiffFilter = new IndexDiffFilter(INDEX, WORKDIR);
|
||||||
filters.add(indexDiffFilter);
|
filters.add(indexDiffFilter);
|
||||||
treeWalk.setFilter(AndTreeFilter.create(filters));
|
treeWalk.setFilter(AndTreeFilter.create(filters));
|
||||||
|
fileModes.clear();
|
||||||
while (treeWalk.next()) {
|
while (treeWalk.next()) {
|
||||||
AbstractTreeIterator treeIterator = treeWalk.getTree(TREE,
|
AbstractTreeIterator treeIterator = treeWalk.getTree(TREE,
|
||||||
AbstractTreeIterator.class);
|
AbstractTreeIterator.class);
|
||||||
|
@ -497,6 +501,17 @@ public boolean diff(final ProgressMonitor monitor, int estWorkTreeSize,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < treeWalk.getTreeCount(); i++) {
|
||||||
|
Set<String> values = fileModes.get(treeWalk.getFileMode(i));
|
||||||
|
String path = treeWalk.getPathString();
|
||||||
|
if (path != null) {
|
||||||
|
if (values == null)
|
||||||
|
values = new HashSet<String>();
|
||||||
|
values.add(path);
|
||||||
|
fileModes.put(treeWalk.getFileMode(i), values);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ignoreSubmoduleMode != IgnoreSubmoduleMode.ALL) {
|
if (ignoreSubmoduleMode != IgnoreSubmoduleMode.ALL) {
|
||||||
|
@ -539,6 +554,7 @@ else if (ignoreSubmoduleMode != IgnoreSubmoduleMode.DIRTY) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// consume the remaining work
|
// consume the remaining work
|
||||||
|
@ -675,4 +691,20 @@ public FileMode getIndexMode(final String path) {
|
||||||
final DirCacheEntry entry = dirCache.getEntry(path);
|
final DirCacheEntry entry = dirCache.getEntry(path);
|
||||||
return entry != null ? entry.getFileMode() : FileMode.MISSING;
|
return entry != null ? entry.getFileMode() : FileMode.MISSING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the list of paths that IndexDiff has detected to differ and have the
|
||||||
|
* given file mode
|
||||||
|
*
|
||||||
|
* @param mode
|
||||||
|
* @return the list of paths that IndexDiff has detected to differ and have
|
||||||
|
* the given file mode
|
||||||
|
* @since 3.6
|
||||||
|
*/
|
||||||
|
public Set<String> getPathsWithIndexMode(final FileMode mode) {
|
||||||
|
Set<String> paths = fileModes.get(mode);
|
||||||
|
if (paths == null)
|
||||||
|
paths = new HashSet<String>();
|
||||||
|
return paths;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue