package org.eclipse.jgit.lib;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.eclipse.jgit.lib.RepositoryCache.FileKey;
import org.junit.Test;
+@SuppressWarnings("boxing")
public class RepositoryCacheTest extends RepositoryTestCase {
@Test
public void testNonBareFileKey() throws IOException {
d2.close();
d2.close();
}
+
+ @Test
+ public void testGetRegisteredWhenEmpty() {
+ assertThat(RepositoryCache.getRegisteredKeys().size(), is(0));
+ }
+
+ @Test
+ public void testGetRegistered() {
+ RepositoryCache.register(db);
+
+ assertThat(RepositoryCache.getRegisteredKeys(),
+ hasItem(FileKey.exact(db.getDirectory(), db.getFS())));
+ assertThat(RepositoryCache.getRegisteredKeys().size(), is(1));
+ }
+
+ @Test
+ public void testUnregister() {
+ RepositoryCache.register(db);
+ RepositoryCache
+ .unregister(FileKey.exact(db.getDirectory(), db.getFS()));
+
+ assertThat(RepositoryCache.getRegisteredKeys().size(), is(0));
+ }
+
}
import java.io.IOException;
import java.lang.ref.Reference;
import java.lang.ref.SoftReference;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
}
}
+ /**
+ * Remove a repository from the cache.
+ * <p>
+ * Removes a repository from the cache, if it is still registered here,
+ * permitting it to close.
+ *
+ * @param location
+ * location of the repository to remove.
+ * @since 4.1
+ */
+ public static void unregister(Key location) {
+ cache.unregisterRepository(location);
+ }
+
+ /**
+ * @return the locations of all repositories registered in the cache.
+ * @since 4.1
+ */
+ public static Collection<Key> getRegisteredKeys() {
+ return cache.getKeys();
+ }
+
/** Unregister all repositories from the cache. */
public static void clear() {
cache.clearAll();
oldDb.close();
}
+ private Collection<Key> getKeys() {
+ return new ArrayList<Key>(cacheMap.keySet());
+ }
+
private void clearAll() {
for (int stage = 0; stage < 2; stage++) {
for (Iterator<Map.Entry<Key, Reference<Repository>>> i = cacheMap