Browse Source

RefDirectory: Fire RefsChangedEvent on error, too

getRef and exactRef can produce recoverable exceptions --- for
example, a corrupt loose ref that cannot be parsed.  If readRef was
called and updated looseRefs in the process, RefsChangedEvent should
still be fired.

Noticed while improving the implementation of getRef.  This commit
only affects exactRef and getRef.  Other methods might be similarly
skipping firing RefsChangedEvent in their error handling code, and
this change does not fix them.

Change-Id: I0f460f6c8d9a585ad8453a4a47c1c77e24a1fb83
Signed-off-by: Jonathan Nieder <jrn@google.com>
stable-5.3
Jonathan Nieder 9 years ago
parent
commit
f46e223187
  1. 18
      org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java

18
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java

@ -343,24 +343,28 @@ public class RefDirectory extends RefDatabase {
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public Ref exactRef(String name) throws IOException { public Ref exactRef(String name) throws IOException {
Ref ref = readAndResolve(name, getPackedRefs()); try {
return readAndResolve(name, getPackedRefs());
} finally {
fireRefsChanged(); fireRefsChanged();
return ref; }
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public Ref getRef(String needle) throws IOException { public Ref getRef(String needle) throws IOException {
final RefList<Ref> packed = getPackedRefs(); try {
Ref ref = null; RefList<Ref> packed = getPackedRefs();
for (String prefix : SEARCH_PATH) { for (String prefix : SEARCH_PATH) {
ref = readAndResolve(prefix + needle, packed); Ref ref = readAndResolve(prefix + needle, packed);
if (ref != null) { if (ref != null) {
break; return ref;
} }
} }
return null;
} finally {
fireRefsChanged(); fireRefsChanged();
return ref; }
} }
/** {@inheritDoc} */ /** {@inheritDoc} */

Loading…
Cancel
Save