summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
authorShawn Pearce <sop@google.com>2012-06-04 10:44:10 -0400
committerGerrit Code Review @ Eclipse.org <gerrit@eclipse.org>2012-06-04 10:44:10 -0400
commitbc7817c9436756bec3ffe88dc0ef75881d4b9478 (patch)
treecb7620ce479be2b9e2a11629f2e44d742feb0109 /org.eclipse.jgit.test
parentf0df18ff4f9fbf91d5ed30fe5bb600fcec95c90f (diff)
parent91f5ce3a15d5df61de42fbe72a368ac513081d5b (diff)
downloadjgit-bc7817c9436756bec3ffe88dc0ef75881d4b9478.tar.gz
jgit-bc7817c9436756bec3ffe88dc0ef75881d4b9478.zip
Merge "Only increment mod count if packed-refs file changes" into stable-2.0
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RefDirectoryTest.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RefDirectoryTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RefDirectoryTest.java
index 3ca4f589db..508b690509 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RefDirectoryTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RefDirectoryTest.java
@@ -60,6 +60,8 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.jgit.events.ListenerHandle;
import org.eclipse.jgit.events.RefsChangedEvent;
@@ -1077,6 +1079,36 @@ public class RefDirectoryTest extends LocalDiskRepositoryTestCase {
assertSame(master_p2, refdir.peel(master_p2));
}
+ @Test
+ public void testRefsChangedStackOverflow() throws Exception {
+ final FileRepository newRepo = createBareRepository();
+ final RefDatabase refDb = newRepo.getRefDatabase();
+ File packedRefs = new File(newRepo.getDirectory(), "packed-refs");
+ assertTrue(packedRefs.createNewFile());
+ final AtomicReference<StackOverflowError> error = new AtomicReference<StackOverflowError>();
+ final AtomicReference<IOException> exception = new AtomicReference<IOException>();
+ final AtomicInteger changeCount = new AtomicInteger();
+ newRepo.getListenerList().addRefsChangedListener(
+ new RefsChangedListener() {
+
+ public void onRefsChanged(RefsChangedEvent event) {
+ try {
+ refDb.getRefs("ref");
+ changeCount.incrementAndGet();
+ } catch (StackOverflowError soe) {
+ error.set(soe);
+ } catch (IOException ioe) {
+ exception.set(ioe);
+ }
+ }
+ });
+ refDb.getRefs("ref");
+ refDb.getRefs("ref");
+ assertNull(error.get());
+ assertNull(exception.get());
+ assertEquals(1, changeCount.get());
+ }
+
private void writeLooseRef(String name, AnyObjectId id) throws IOException {
writeLooseRef(name, id.name() + "\n");
}