[nested projects] Allow EGit request inner most projects in some cases
commitff08a72948c9ffec3c1f7858cec0330f2a4d6aac
authorAndrey Loskutov <loskutov@gmx.de>
Sun, 27 Sep 2015 18:17:30 +0000 (27 20:17 +0200)
committerAndrey Loskutov <loskutov@gmx.de>
Sat, 10 Oct 2015 13:30:08 +0000 (10 09:30 -0400)
tree32d6589480f79e73055aa960f74e80f2a21b5b51
parente6189f813c3169b54ff2ba554110f0fc667c068d
[nested projects] Allow EGit request inner most projects in some cases

Currently Eclipse resources API offers the choice of having very fast
but unpredictable results (getFileForLocation()) or very slow but
deterministic (findFilesForLocationURI()) while requesting a file via
IPath key in context of nested projects. The "unpredictability" of the
fast API is not documented and has side effects only if workspace
contains nested projects - in this case if the file is located in many
projects, it is not guaranteed, file handle from which project will be
returned (it is related to project names, see bug 476585).

During the fix for bug 440722, by choosing the very fast file lookup for
ResourceUtil we unintentionally changed the EGit behavior so that in
case nested projects were involved, EGit sometimes could not use the
file from the inner most project, but from parent one.

This fix offers an explicit option for clients which would prefer to see
resources from inner most projects independently how long it takes to
resolve them. Some of the affected ResourceUtil API clients are changed
to always request files inner most projects: mostly editor related code.

Bug: 476857
Change-Id: I5f076bbf6bb74392265d6ec1c9c80965111005ef
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
22 files changed:
org.eclipse.egit.core.test/src/org/eclipse/egit/core/internal/util/ResourceUtilTest.java
org.eclipse.egit.core/src/org/eclipse/egit/core/internal/CompareCoreUtils.java
org.eclipse.egit.core/src/org/eclipse/egit/core/internal/job/RuleUtil.java
org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ProjectUtil.java
org.eclipse.egit.core/src/org/eclipse/egit/core/internal/util/ResourceUtil.java
org.eclipse.egit.core/src/org/eclipse/egit/core/op/DeletePathsOperation.java
org.eclipse.egit.core/src/org/eclipse/egit/core/op/IgnoreOperation.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/EgitUiEditorUtils.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CommitDialog.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/dialogs/CompareTreeView.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/factories/GitAdapterFactory.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/CommitFileDiffViewer.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/history/FileDiff.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/merge/GitMergeEditorInput.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/operations/DeletePathsOperationUI.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesViewActionProvider.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/tree/command/OpenInEditorCommand.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingEntry.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/staging/StagingFolderEntry.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/GitModelSynchronizeParticipant.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/synchronize/action/GitOpenInCompareAction.java