API to remove repositories from RepositoryCache
Add methods that allow to unregister repositories from the RepositoryCache individually. Bug: 470234 Change-Id: Ib918a634d829c9898072ae7bdeb22b099a32b1c9 Signed-off-by: Tobias Oberlies <tobias.oberlies@sap.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
d2fbbc910a
commit
d34314644e
|
@ -43,11 +43,14 @@
|
||||||
|
|
||||||
package org.eclipse.jgit.lib;
|
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.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNotSame;
|
import static org.junit.Assert.assertNotSame;
|
||||||
import static org.junit.Assert.assertSame;
|
import static org.junit.Assert.assertSame;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@ -59,6 +62,7 @@
|
||||||
import org.eclipse.jgit.lib.RepositoryCache.FileKey;
|
import org.eclipse.jgit.lib.RepositoryCache.FileKey;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@SuppressWarnings("boxing")
|
||||||
public class RepositoryCacheTest extends RepositoryTestCase {
|
public class RepositoryCacheTest extends RepositoryTestCase {
|
||||||
@Test
|
@Test
|
||||||
public void testNonBareFileKey() throws IOException {
|
public void testNonBareFileKey() throws IOException {
|
||||||
|
@ -147,4 +151,28 @@ public void testCacheOpen() throws Exception {
|
||||||
d2.close();
|
d2.close();
|
||||||
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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,8 @@
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.ref.Reference;
|
import java.lang.ref.Reference;
|
||||||
import java.lang.ref.SoftReference;
|
import java.lang.ref.SoftReference;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
@ -143,6 +145,28 @@ public static void close(final Repository db) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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. */
|
/** Unregister all repositories from the cache. */
|
||||||
public static void clear() {
|
public static void clear() {
|
||||||
cache.clearAll();
|
cache.clearAll();
|
||||||
|
@ -195,6 +219,10 @@ private void unregisterRepository(final Key location) {
|
||||||
oldDb.close();
|
oldDb.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Collection<Key> getKeys() {
|
||||||
|
return new ArrayList<Key>(cacheMap.keySet());
|
||||||
|
}
|
||||||
|
|
||||||
private void clearAll() {
|
private void clearAll() {
|
||||||
for (int stage = 0; stage < 2; stage++) {
|
for (int stage = 0; stage < 2; stage++) {
|
||||||
for (Iterator<Map.Entry<Key, Reference<Repository>>> i = cacheMap
|
for (Iterator<Map.Entry<Key, Reference<Repository>>> i = cacheMap
|
||||||
|
|
Loading…
Reference in New Issue