Fix the enablement of "Compare with->Index with HEAD"
commit223247c14ee3744751adcea9f99a06fcfd7a2345
authorThomas Wolf <thomas.wolf@paranor.ch>
Sun, 9 Oct 2016 19:29:21 +0000 (9 21:29 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 12 Oct 2016 21:43:12 +0000 (12 23:43 +0200)
tree510922e07139ae4351026a417534cc4b2259652d
parent6213e2e155951c2088b63e8b1d7640f397e3ebe3
Fix the enablement of "Compare with->Index with HEAD"

This menu command makes sense only for staged files, but it was enabled
wrongly also on unstaged files. Apparently that was done on purpose in
commit 6d975be6 to avoid a costly index diff calculation to find out
whether the file was staged.

But if we are able to display "staged" decorations speedily, we
certainly are also able to determine quickly whether a file is staged.
Make isEnabled() properly check again, using the same mechanisms we use
for decorations, which rely on the IndexDiffCache. Remove the extra
check when the command is run, including the dialog.

There is one quirk here: these "Compare With..." actions are contributed
using the old (and deprecated) org.eclipse.ui.popupMenus extension point
with <objectContribution>. They get invoked via RepositoryAction, which
has some extra logic to avoid re-computing enablement when the selection
didn't change as far as resources are concerned. This of course goes
wrong if the enablement state of a handler depends on other state that
may have changed, such as the resources git state (staged/modified/...).

Add some logic to enforce always updating enablement for such handlers.
This works and is even uncritical when typing in an editor because:
* determining staging state via the IndexDiffCache is fast, and
* the enablement is only computed when the context menu is opened.

Change-Id: Ic6ec1e407f2ba1403ae52bc09b4f2546f4e221c8
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
org.eclipse.egit.ui.test/src/org/eclipse/egit/ui/test/team/actions/StageUnstageActionTest.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/CompareIndexWithHeadActionHandler.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryAction.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/RepositoryActionHandler.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties