From 7f0d4ecce061a1719e091e060645bb6408664e50 Mon Sep 17 00:00:00 2001 From: Simon Kaegi Date: Thu, 4 Sep 2008 17:55:43 +0000 Subject: Bug 246220 [reconciler] Removals not detected correctly --- .../p2/directorywatcher/RepositoryListener.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'bundles/org.eclipse.equinox.p2.directorywatcher') diff --git a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java index 3e68f10a6..e594b17e8 100644 --- a/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java +++ b/bundles/org.eclipse.equinox.p2.directorywatcher/src/org/eclipse/equinox/internal/provisional/p2/directorywatcher/RepositoryListener.java @@ -42,8 +42,9 @@ public class RepositoryListener extends DirectoryChangeListener { private final CachingArtifactRepository artifactRepository; // at any point in time currentFiles is the list of files/dirs that the watcher has seen and // believes to be on disk. - private Map currentFiles; - private Collection filesToRemove; + private final Map currentFiles = new HashMap(); + private final Collection polledSeenFiles = new HashSet(); + private EntryAdvice advice = new EntryAdvice(); private PublisherInfo info; private IPublisherResult iusToAdd; @@ -135,8 +136,8 @@ public class RepositoryListener extends DirectoryChangeListener { } public boolean removed(File file) { - filesToRemove.add(file); - return true; + // the IUs and artifacts associated with this file will get removed in stopPoll + return currentFiles.containsKey(file); } private boolean process(File file, boolean isAddition) { @@ -184,26 +185,27 @@ public class RepositoryListener extends DirectoryChangeListener { } public Long getSeenFile(File file) { - return (Long) currentFiles.get(file); + Long lastSeen = (Long) currentFiles.get(file); + if (lastSeen != null) + polledSeenFiles.add(file); + return lastSeen; } public void startPoll() { - filesToRemove = new HashSet(); iusToAdd = new PublisherResult(); iusToChange = new PublisherResult(); - // TODO investigate why we do this here? Suspect it is to clean up the currentFiles collection - // for removed entries. This may be a performance opportunity - currentFiles = new HashMap(); synchronizeCurrentFiles(); } public void stopPoll() { + final Set filesToRemove = new HashSet(currentFiles.keySet()); + filesToRemove.removeAll(polledSeenFiles); + polledSeenFiles.clear(); + synchronizeMetadataRepository(filesToRemove); synchronizeArtifactRepository(filesToRemove); - filesToRemove.clear(); iusToAdd = null; iusToChange = null; - currentFiles = null; } /** -- cgit v1.2.3