Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2015-02-01 22:52:44 +0000
committerMatthias Sohn2015-02-01 23:48:05 +0000
commitc7ee9a65bcfbe9032fec5626d45f86eec90e42c6 (patch)
treedddfccf4eb2e7bfb3d401607d586e7c0bede358e
parent6d975be68487c79cadd98baf6afeaa9f83555981 (diff)
downloadegit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.tar.gz
egit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.tar.xz
egit-c7ee9a65bcfbe9032fec5626d45f86eec90e42c6.zip
Implement hasChildren() to avoid diff calculation in UI thread
Fetch/Push result table content provider will now always report "true" in hasChildren() if the requested object is a RepositoryCommit. This is needed for tree viewer to paint "arrows" for expandable nodes without calculation of the commit content - this calculation on huge repositories can block UI thread forever. Bug: 458839 Change-Id: I78ec6b62f36b46932a38fbcbea1fda2c61af9089 Signed-off-by: Andrey Loskutov <loskutov@gmx.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java12
-rw-r--r--org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java13
2 files changed, 23 insertions, 2 deletions
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java
index a7893e363a..5ab4a09d49 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/fetch/FetchResultTable.java
@@ -353,11 +353,21 @@ class FetchResultTable {
}
public Object[] getChildren(Object element) {
- if (element instanceof RepositoryCommit)
+ if (element instanceof RepositoryCommit) {
return ((RepositoryCommit) element).getDiffs();
+ }
return super.getChildren(element);
}
+ @Override
+ public boolean hasChildren(Object element) {
+ if (element instanceof RepositoryCommit) {
+ // always return true for commits to avoid commit diff
+ // calculation in UI thread, see bug 458839
+ return true;
+ }
+ return super.hasChildren(element);
+ }
});
new OpenAndLinkWithEditorHelper(treeViewer) {
diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java
index d9b6d38fd9..16cd9972b5 100644
--- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java
+++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/push/RefUpdateContentProvider.java
@@ -29,8 +29,19 @@ class RefUpdateContentProvider extends WorkbenchContentProvider {
}
public Object[] getChildren(Object element) {
- if (element instanceof RepositoryCommit)
+ if (element instanceof RepositoryCommit) {
return ((RepositoryCommit) element).getDiffs();
+ }
return super.getChildren(element);
}
+
+ @Override
+ public boolean hasChildren(Object element) {
+ if (element instanceof RepositoryCommit) {
+ // always return true for commits to avoid commit diff calculation
+ // in UI thread, see bug 458839
+ return true;
+ }
+ return super.hasChildren(element);
+ }
}

Back to the top