[EGIT PATCH 4/9] Add a method to listen to changes in any repository
Signed-off-by: Robin Rosenberg <robin.rosenberg@dewire.com>
---
.../src/org/spearce/jgit/lib/Repository.java | 31 +++++++++++++++++--
1 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
index 6f78652..dfa3045 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/lib/Repository.java
@@ -95,6 +95,7 @@ public class Repository {
private GitIndex index;
private List<RepositoryListener> listeners = new Vector<RepositoryListener>(); // thread safe
+ static private List<RepositoryListener> allListeners = new Vector<RepositoryListener>(); // thread safe
/**
* Construct a representation of a Git repository.
@@ -1051,12 +1052,32 @@ public class Repository {
listeners.remove(l);
}
+ /**
+ * Register a global {@link RepositoryListener} which will be notified
+ * when a ref changes in any repository are detected.
+ *
+ * @param l
+ */
+ public static void addAnyRepositoryChangedListener(final RepositoryListener l) {
+ allListeners.add(l);
+ }
+
+ /**
+ * Remove a globally registered {@link RepositoryListener}
+ * @param l
+ */
+ public static void removeAnyRepositoryChangedListener(final RepositoryListener l) {
+ allListeners.remove(l);
+ }
+
void fireRefsMaybeChanged() {
if (refs.lastRefModification != refs.lastNotifiedRefModification) {
refs.lastNotifiedRefModification = refs.lastRefModification;
final RefsChangedEvent event = new RefsChangedEvent(this);
- for (final RepositoryListener l :
- listeners.toArray(new RepositoryListener[listeners.size()])) {
+ List<RepositoryListener> all = new ArrayList<RepositoryListener>(
+ listeners);
+ all.addAll(allListeners);
+ for (final RepositoryListener l : all) {
l.refsChanged(event);
}
}
@@ -1064,8 +1085,10 @@ public class Repository {
void fireIndexChanged() {
final IndexChangedEvent event = new IndexChangedEvent(this);
- for (final RepositoryListener l :
- listeners.toArray(new RepositoryListener[listeners.size()])) {
+ List<RepositoryListener> all = new ArrayList<RepositoryListener>(
+ listeners);
+ all.addAll(allListeners);
+ for (final RepositoryListener l : all) {
l.indexChanged(event);
}
}
--
1.5.6.2.220.g44701