diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java index d381ddd41..32eb067d3 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java @@ -746,13 +746,13 @@ private void pack(Collection refs, try { LockFile lck = lockPackedRefsOrThrow(); try { - final PackedRefList packed = getPackedRefs(); - RefList cur = readPackedRefs(); + PackedRefList oldPacked = refreshPackedRefs(); + RefList newPacked = oldPacked; // Iterate over all refs to be packed boolean dirty = false; for (String refName : refs) { - Ref oldRef = readRef(refName, cur); + Ref oldRef = readRef(refName, newPacked); if (oldRef == null) { continue; // A non-existent ref is already correctly packed. } @@ -769,11 +769,11 @@ private void pack(Collection refs, } dirty = true; - int idx = cur.find(refName); + int idx = newPacked.find(refName); if (idx >= 0) { - cur = cur.set(idx, newRef); + newPacked = newPacked.set(idx, newRef); } else { - cur = cur.add(idx, newRef); + newPacked = newPacked.add(idx, newRef); } } if (!dirty) { @@ -782,7 +782,7 @@ private void pack(Collection refs, } // The new content for packed-refs is collected. Persist it. - commitPackedRefs(lck, cur, packed,false); + commitPackedRefs(lck, newPacked, oldPacked,false); // Now delete the loose refs which are now packed for (String refName : refs) { @@ -809,7 +809,7 @@ private void pack(Collection refs, if (currentLooseRef == null || currentLooseRef.isSymbolic()) { continue; } - Ref packedRef = cur.get(refName); + Ref packedRef = newPacked.get(refName); ObjectId clr_oid = currentLooseRef.getObjectId(); if (clr_oid != null && clr_oid.equals(packedRef.getObjectId())) {