Bug 221254 - Problems with dropins on second start
diff --git a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java
index 51861c8..ebbd16a 100644
--- a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java
+++ b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/p2/directorywatcher/ProvisioningListener.java
@@ -134,8 +134,9 @@
}
private void generate() {
- File directory = watcher.getDirectory();
- IGeneratorInfo info = getProvider(new File[] {directory}, directory);
+ File[] directories = watcher.getDirectories();
+ // TODO this prob isn't right.
+ IGeneratorInfo info = getProvider(directories, directories[0]);
new Generator(info).generate();
}
diff --git a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
index 6efe2b8..c704d2c 100644
--- a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
+++ b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/DirectoryWatcher.java
@@ -57,7 +57,7 @@
System.err.println(string + ": " + e);
}
- final File directory;
+ final File[] directories;
long poll = 2000;
private Set listeners = new HashSet();
@@ -73,14 +73,20 @@
File targetDirectory = new File(dir);
targetDirectory.mkdirs();
- directory = targetDirectory;
+ directories = new File[] {targetDirectory};
}
public DirectoryWatcher(File directory) {
if (directory == null)
throw new IllegalArgumentException("Folder must not be null");
- this.directory = directory;
+ this.directories = new File[] {directory};
+ }
+
+ public DirectoryWatcher(File[] directories) {
+ if (directories == null)
+ throw new IllegalArgumentException("Folder must not be null");
+ this.directories = directories;
}
public synchronized void addListener(DirectoryChangeListener listener) {
@@ -117,8 +123,8 @@
watcher = null;
}
- public File getDirectory() {
- return directory;
+ public File[] getDirectories() {
+ return directories;
}
private void startPoll() {
@@ -130,25 +136,28 @@
}
private void scanDirectories() {
- File list[] = directory.listFiles();
- if (list == null)
- return;
- for (int i = 0; i < list.length; i++) {
- File file = list[i];
- // if this is a deletion marker then add to the list of pending deletions.
- if (list[i].getPath().endsWith(".del")) {
- File target = new File(file.getPath().substring(0, file.getPath().length() - 4));
- removals.add(target);
- pendingDeletions.add(target);
- } else {
- // else remember that we saw the file and remove it from this list of files to be
- // removed at the end. Then notify all the listeners as needed.
- scannedFiles.add(file);
- removals.remove(file);
- for (Iterator iterator = listeners.iterator(); iterator.hasNext();) {
- DirectoryChangeListener listener = (DirectoryChangeListener) iterator.next();
- if (isInterested(listener, file))
- processFile(file, listener);
+ for (int index = 0; index < directories.length; index++) {
+ File directory = directories[index];
+ File list[] = directory.listFiles();
+ if (list == null)
+ return;
+ for (int i = 0; i < list.length; i++) {
+ File file = list[i];
+ // if this is a deletion marker then add to the list of pending deletions.
+ if (list[i].getPath().endsWith(".del")) {
+ File target = new File(file.getPath().substring(0, file.getPath().length() - 4));
+ removals.add(target);
+ pendingDeletions.add(target);
+ } else {
+ // else remember that we saw the file and remove it from this list of files to be
+ // removed at the end. Then notify all the listeners as needed.
+ scannedFiles.add(file);
+ removals.remove(file);
+ for (Iterator iterator = listeners.iterator(); iterator.hasNext();) {
+ DirectoryChangeListener listener = (DirectoryChangeListener) iterator.next();
+ if (isInterested(listener, file))
+ processFile(file, listener);
+ }
}
}
}
diff --git a/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java b/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
index 6515344..2f52b99 100644
--- a/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
+++ b/bundles/org.eclipse.equinox.p2.reconciler.dropins/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
@@ -120,24 +120,19 @@
RepositoryListener listener = new RepositoryListener(Activator.getContext(), Integer.toString(folder.hashCode()));
listener.getArtifactRepository().setProperty(PROFILE_EXTENSION, profile.getProfileId());
- DirectoryWatcher watcher = new DirectoryWatcher(folder);
+ List folders = new ArrayList();
+ folders.add(folder);
+ File eclipseFeatures = new File(folder, "eclipse/features");
+ if (eclipseFeatures.isDirectory())
+ folders.add(eclipseFeatures);
+ File eclipsePlugins = new File(folder, "eclipse/plugins");
+ if (eclipsePlugins.isDirectory())
+ folders.add(eclipsePlugins);
+
+ DirectoryWatcher watcher = new DirectoryWatcher((File[]) folders.toArray(new File[folders.size()]));
watcher.addListener(listener);
watcher.poll();
- File eclipseFeatures = new File(folder, "eclipse/features");
- if (eclipseFeatures.isDirectory()) {
- DirectoryWatcher eclipsePluginsWatcher = new DirectoryWatcher(eclipseFeatures);
- eclipsePluginsWatcher.addListener(listener);
- eclipsePluginsWatcher.poll();
- }
-
- File eclipsePlugins = new File(folder, "eclipse/plugins");
- if (eclipsePlugins.isDirectory()) {
- DirectoryWatcher eclipsePluginsWatcher = new DirectoryWatcher(eclipsePlugins);
- eclipsePluginsWatcher.addListener(listener);
- eclipsePluginsWatcher.poll();
- }
-
dropinRepository = listener.getMetadataRepository();
}
diff --git a/bundles/org.eclipse.equinox.p2.reconciler/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java b/bundles/org.eclipse.equinox.p2.reconciler/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
index 6515344..2f52b99 100644
--- a/bundles/org.eclipse.equinox.p2.reconciler/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
+++ b/bundles/org.eclipse.equinox.p2.reconciler/src/org/eclipse/equinox/internal/p2/reconciler/dropins/Activator.java
@@ -120,24 +120,19 @@
RepositoryListener listener = new RepositoryListener(Activator.getContext(), Integer.toString(folder.hashCode()));
listener.getArtifactRepository().setProperty(PROFILE_EXTENSION, profile.getProfileId());
- DirectoryWatcher watcher = new DirectoryWatcher(folder);
+ List folders = new ArrayList();
+ folders.add(folder);
+ File eclipseFeatures = new File(folder, "eclipse/features");
+ if (eclipseFeatures.isDirectory())
+ folders.add(eclipseFeatures);
+ File eclipsePlugins = new File(folder, "eclipse/plugins");
+ if (eclipsePlugins.isDirectory())
+ folders.add(eclipsePlugins);
+
+ DirectoryWatcher watcher = new DirectoryWatcher((File[]) folders.toArray(new File[folders.size()]));
watcher.addListener(listener);
watcher.poll();
- File eclipseFeatures = new File(folder, "eclipse/features");
- if (eclipseFeatures.isDirectory()) {
- DirectoryWatcher eclipsePluginsWatcher = new DirectoryWatcher(eclipseFeatures);
- eclipsePluginsWatcher.addListener(listener);
- eclipsePluginsWatcher.poll();
- }
-
- File eclipsePlugins = new File(folder, "eclipse/plugins");
- if (eclipsePlugins.isDirectory()) {
- DirectoryWatcher eclipsePluginsWatcher = new DirectoryWatcher(eclipsePlugins);
- eclipsePluginsWatcher.addListener(listener);
- eclipsePluginsWatcher.poll();
- }
-
dropinRepository = listener.getMetadataRepository();
}
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/directorywatcher/DirectoryWatcherTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/directorywatcher/DirectoryWatcherTest.java
index 6d69f35..f9da12a 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/directorywatcher/DirectoryWatcherTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/directorywatcher/DirectoryWatcherTest.java
@@ -27,7 +27,7 @@
public void testCreateDirectoryWatcherNullDirectory() throws Exception {
try {
- new DirectoryWatcher(null);
+ new DirectoryWatcher((File) null);
} catch (IllegalArgumentException e) {
return;
}