From 403338e11640b61837165d90965de44da0e26379 Mon Sep 17 00:00:00 2001 From: Matthias Sohn Date: Wed, 23 Jun 2021 09:41:04 +0200 Subject: [PATCH] Don't use deprecated Repository#getAllRefs in FileRepository Also expose the potentially IOException thrown by RefDatabase#getRefs. Hence the following methods now potentially throw IOException: - AdvertiseRefsHook#advertiseRefs - ReceivePack#setAdvertisedRefs - Repository#getAdditionalHaves Bug: 534731 Change-Id: I85bc6ce5815d40be5f80042c53f4663072d96be5 --- .../transport/ReceivePackAdvertiseRefsHookTest.java | 2 +- .../jgit/internal/storage/file/FileRepository.java | 11 ++++++++--- .../src/org/eclipse/jgit/lib/Repository.java | 7 ++++--- .../jgit/transport/AbstractAdvertiseRefsHook.java | 7 +++++-- .../org/eclipse/jgit/transport/AdvertiseRefsHook.java | 5 ++++- .../jgit/transport/AdvertiseRefsHookChain.java | 7 +++++-- .../src/org/eclipse/jgit/transport/ReceivePack.java | 6 ++++-- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java index ffea980f1..d1e544682 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackAdvertiseRefsHookTest.java @@ -142,7 +142,7 @@ ReceivePack createReceivePack(Repository db) { rp.setAdvertiseRefsHook(new AdvertiseRefsHook() { @Override public void advertiseRefs(ReceivePack rp2) - throws ServiceMayNotContinueException { + throws IOException { rp.setAdvertisedRefs(rp.getRepository().getAllRefs(), null); new HidePrivateHook().advertiseRefs(rp); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java index fecced1ae..9cdea597f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java @@ -420,9 +420,11 @@ private File descriptionFile() { * advertise that it safely has that other repository's references, without * exposing any other details about the other repository. This may help a * client trying to push changes avoid pushing more than it needs to. + * + * @throws IOException */ @Override - public Set getAdditionalHaves() { + public Set getAdditionalHaves() throws IOException { return getAdditionalHaves(null); } @@ -438,8 +440,11 @@ public Set getAdditionalHaves() { * Set of AlternateHandle Ids already seen * * @return unmodifiable collection of other known objects. + * @throws IOException + * if getting refs hits an IO error */ - private Set getAdditionalHaves(Set skips) { + private Set getAdditionalHaves(Set skips) + throws IOException { HashSet r = new HashSet<>(); skips = objectDatabase.addMe(skips); for (AlternateHandle d : objectDatabase.myAlternates()) { @@ -447,7 +452,7 @@ private Set getAdditionalHaves(Set skips) { FileRepository repo; repo = ((AlternateRepository) d).repository; - for (Ref ref : repo.getAllRefs().values()) { + for (Ref ref : repo.getRefDatabase().getRefs()) { if (ref.getObjectId() != null) r.add(ref.getObjectId()); if (ref.getPeeledObjectId() != null) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java index 1e8a6c917..2d1aca8de 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java @@ -1051,13 +1051,14 @@ public String getBranch() throws IOException { *

* When a repository borrows objects from another repository, it can * advertise that it safely has that other repository's references, without - * exposing any other details about the other repository. This may help - * a client trying to push changes avoid pushing more than it needs to. + * exposing any other details about the other repository. This may help a + * client trying to push changes avoid pushing more than it needs to. * * @return unmodifiable collection of other known objects. + * @throws IOException */ @NonNull - public Set getAdditionalHaves() { + public Set getAdditionalHaves() throws IOException { return Collections.emptySet(); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AbstractAdvertiseRefsHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AbstractAdvertiseRefsHook.java index ed900121b..fb9c14576 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AbstractAdvertiseRefsHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AbstractAdvertiseRefsHook.java @@ -42,6 +42,7 @@ package org.eclipse.jgit.transport; +import java.io.IOException; import java.util.Map; import java.util.Set; @@ -65,10 +66,12 @@ public void advertiseRefs(UploadPack uploadPack) uploadPack.getRepository(), uploadPack.getRevWalk())); } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + */ @Override public void advertiseRefs(ReceivePack receivePack) - throws ServiceMayNotContinueException { + throws IOException { Map refs = getAdvertisedRefs(receivePack.getRepository(), receivePack.getRevWalk()); Set haves = getAdvertisedHaves(receivePack.getRepository(), diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHook.java index eb1aef9ad..84c36915a 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHook.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHook.java @@ -42,6 +42,8 @@ package org.eclipse.jgit.transport; +import java.io.IOException; + /** * Hook to allow callers to take over advertising refs to the client. * @@ -89,8 +91,9 @@ void advertiseRefs(UploadPack uploadPack) * if necessary. * @throws org.eclipse.jgit.transport.ServiceMayNotContinueException * abort; the message will be sent to the user. + * @throws IOException * @since 5.6 */ void advertiseRefs(ReceivePack receivePack) - throws ServiceMayNotContinueException; + throws ServiceMayNotContinueException, IOException; } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHookChain.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHookChain.java index 91bdf58e7..eb9c673ef 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHookChain.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AdvertiseRefsHookChain.java @@ -10,6 +10,7 @@ package org.eclipse.jgit.transport; +import java.io.IOException; import java.util.List; /** @@ -49,10 +50,12 @@ public static AdvertiseRefsHook newChain(List hooks } } - /** {@inheritDoc} */ + /** + * {@inheritDoc} + */ @Override public void advertiseRefs(ReceivePack rp) - throws ServiceMayNotContinueException { + throws IOException { for (int i = 0; i < count; i++) hooks[i].advertiseRefs(rp); } diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java index 871ba50a6..2542105c0 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java @@ -440,9 +440,10 @@ public Map getAdvertisedRefs() { * explicit set of additional haves to claim as advertised. If * null, assumes the default set of additional haves from the * repository. + * @throws IOException */ public void setAdvertisedRefs(Map allRefs, - Set additionalHaves) { + Set additionalHaves) throws IOException { refs = allRefs != null ? allRefs : getAllRefs(); refs = refFilter.filter(refs); advertisedHaves.clear(); @@ -1187,8 +1188,9 @@ protected void init(final InputStream input, final OutputStream output, * Get advertised refs, or the default if not explicitly advertised. * * @return advertised refs, or the default if not explicitly advertised. + * @throws IOException */ - private Map getAdvertisedOrDefaultRefs() { + private Map getAdvertisedOrDefaultRefs() throws IOException { if (refs == null) setAdvertisedRefs(null, null); return refs;