From cde3b371dafaad76d135b19abbeedc71781c5511 Mon Sep 17 00:00:00 2001 From: Thomas Wolf Date: Thu, 10 Aug 2017 16:47:46 +0200 Subject: [PATCH] Update submodule nodes when submodule refs change Listen to all repositories we know about, not just the configured ones. (The configured ones are the top-level repositories in the repository view.) Bug: 520694 Change-Id: Icb8691ab336d37fd1b364be656a183f699fbdf29 Signed-off-by: Thomas Wolf --- .../ui/internal/repository/RepositoriesView.java | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java index ab88dd335..35e9ec56d 100644 --- a/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java +++ b/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/repository/RepositoriesView.java @@ -521,17 +521,14 @@ public class RepositoriesView extends CommonNavigator implements IShowInSource, synchronized (repositories) { repositories.clear(); unregisterRepositoryListener(); + Set dirs = new HashSet<>(); // listen for repository changes for (String dir : repositoryUtil.getConfiguredRepositories()) { File repoDir = new File(dir); try { Repository repo = repositoryCache.lookupRepository(repoDir); - myListeners.add(repo.getListenerList() - .addIndexChangedListener(myIndexChangedListener)); - myListeners.add(repo.getListenerList() - .addRefsChangedListener(myRefsChangedListener)); - myListeners.add(repo.getListenerList() - .addConfigChangedListener(myConfigChangeListener)); + listenToRepository(repo); + dirs.add(repo.getDirectory()); repositories.add(repo); } catch (IOException e) { String message = NLS @@ -541,9 +538,26 @@ public class RepositoriesView extends CommonNavigator implements IShowInSource, repositoryUtil.removeDir(repoDir); } } + // Also listen to submodules and nested git repositories. + for (Repository repo : org.eclipse.egit.core.Activator.getDefault() + .getRepositoryCache().getAllRepositories()) { + if (!dirs.contains(repo.getDirectory())) { + listenToRepository(repo); + dirs.add(repo.getDirectory()); + } + } } } + private void listenToRepository(Repository repo) { + myListeners.add(repo.getListenerList() + .addIndexChangedListener(myIndexChangedListener)); + myListeners.add(repo.getListenerList() + .addRefsChangedListener(myRefsChangedListener)); + myListeners.add(repo.getListenerList() + .addConfigChangedListener(myConfigChangeListener)); + } + @Override public void dispose() { // make sure to cancel the refresh job -- 2.11.4.GIT