From 57d13c047ffbe9d17d1eec966ae8f67f15184605 Mon Sep 17 00:00:00 2001 From: Marc Strapetz Date: Wed, 9 Feb 2011 12:54:09 +0100 Subject: [PATCH] Fix processing of broken symbolic references in RefDirectory Change-Id: Ic1ceb9c99dca2c69e61ea0ef03ec64f13714b80a Signed-off-by: Matthias Sohn --- .../org/eclipse/jgit/storage/file/RefDirectory.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java index c8c7d0dd8..e8ce2c546 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java @@ -290,17 +290,19 @@ public class RefDirectory extends RefDatabase { RefList.Builder symbolic = scan.symbolic; for (int idx = 0; idx < symbolic.size();) { - Ref ref = symbolic.get(idx); - ref = resolve(ref, 0, prefix, loose, packed); - if (ref != null && ref.getObjectId() != null) { - symbolic.set(idx, ref); + final Ref symbolicRef = symbolic.get(idx); + final Ref resolvedRef = resolve(symbolicRef, 0, prefix, loose, packed); + if (resolvedRef != null && resolvedRef.getObjectId() != null) { + symbolic.set(idx, resolvedRef); idx++; } else { // A broken symbolic reference, we have to drop it from the // collections the client is about to receive. Should be a // rare occurrence so pay a copy penalty. - loose = loose.remove(idx); symbolic.remove(idx); + final int toRemove = loose.find(symbolicRef.getName()); + if (0 <= toRemove) + loose = loose.remove(toRemove); } }