Merge branch 'master' into servlet-4

* master:
  PendingGenerator: drop only buffers loaded in the generator
  Prepare 7.4.0-SNAPSHOT builds
  JGit v7.4.0.202508261455-rc1
  Update apache sshd to 2.16.0
  Do not include 3rd party dependencies in features
  Ensure pack files are closed after git.close()
  Prepare 7.4.0-SNAPSHOT builds
  JGit v7.4.0.202508191000-m3
  Update mockito to 5.19.0
  Update jetty to 12.1.0
  Update org.assertj:assertj-core to 3.27.4
  Update bytebuddy to 1.17.7
  util.Iterators: suppress warning about object arrays
  util.Iterators: private constructor for utility class
  pgm: new command for the object size index
  WindowCursor: honor pack.useObjectSizeIndex
  Prevent CommitGraphWriter.write() from closing its stream
  Make CancellableDigestOutputStream extend FilterOutputStream
  Shortcut PackWriter reuse selection when possible
  Update org.apache.commons:commons-compress to 1.28.0
  SmartHttpFetchConnection: suppress errors on close()
  Mark Git(Repository repo, boolean closeRepo) public
  Don't use Yoda style conditions to improve readability

Change-Id: Ibcda7d4a3ea49bbd502195ee3cd5c2172acb3442
diff --git a/Documentation/config-options.md b/Documentation/config-options.md
index 4dde8f8..4c74855 100644
--- a/Documentation/config-options.md
+++ b/Documentation/config-options.md
@@ -131,6 +131,7 @@
 | `pack.searchForReuseTimeout` | | ⃞ | Search for reuse phase timeout. Expressed as a `Duration`, i.e.: `50sec`. |
 | `pack.singlePack` | `false` | ⃞ | Whether all of `refs/*` should be packed in a single pack. |
 | `pack.threads` | `0` (auto-detect number of processors) | ✅ | Number of threads to use for delta compression. |
+| `pack.useObjectSizeIndex` | `false` | ⃞ | Whether to use the object size index when available. |
 | `pack.waitPreventRacyPack` | `false` | ⃞ | Whether we wait before opening a newly written pack to prevent its lastModified timestamp could be racy. |
 | `pack.window` | `10` | ✅ | Number of objects to try when looking for a delta base per thread searching for deltas. |
 | `pack.windowMemory` | `0` (unlimited) | ✅ | Maximum number of bytes to put into the delta search window. |
diff --git a/WORKSPACE b/WORKSPACE
index 51340cf..ba37f3b 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -102,18 +102,18 @@
     sha1 = "51cf043c87253c9f58b539c9f7e44c8894223850",
 )
 
-SSHD_VERS = "2.15.0"
+SSHD_VERS = "2.16.0"
 
 maven_jar(
     name = "sshd-osgi",
     artifact = "org.apache.sshd:sshd-osgi:" + SSHD_VERS,
-    sha1 = "aa76898fe47eab7da0878dd60e6f3be5631e076c",
+    sha1 = "87cab2aaa6e06c5d48d746e90f0b3635f8c06419",
 )
 
 maven_jar(
     name = "sshd-sftp",
     artifact = "org.apache.sshd:sshd-sftp:" + SSHD_VERS,
-    sha1 = "2e226055ed060c64ed76256a9c45de6d0109eef8",
+    sha1 = "09d9e7024535fb4a3f74367ba7e0a2f5093af638",
 )
 
 JNA_VERS = "5.17.0"
@@ -162,8 +162,8 @@
 
 maven_jar(
     name = "commons-compress",
-    artifact = "org.apache.commons:commons-compress:1.27.1",
-    sha1 = "a19151084758e2fbb6b41eddaa88e7b8ff4e6599",
+    artifact = "org.apache.commons:commons-compress:1.28.0",
+    sha1 = "e482f2c7a88dac3c497e96aa420b6a769f59c8d7",
 )
 
 maven_jar(
@@ -204,28 +204,28 @@
 
 maven_jar(
     name = "mockito",
-    artifact = "org.mockito:mockito-core:5.18.0",
-    sha1 = "ab47dbbf954ffa2501f29000600742098617272d",
+    artifact = "org.mockito:mockito-core:5.19.0",
+    sha1 = "82b320935809e3c8ff92c2007dae5dff88d76f32",
 )
 
 maven_jar(
     name = "assertj-core",
-    artifact = "org.assertj:assertj-core:3.27.3",
-    sha1 = "31f5d58a202bd5df4993fb10fa2cffd610c20d6f",
+    artifact = "org.assertj:assertj-core:3.27.4",
+    sha1 = "65e62575f7e422df6d290dc1cb15f3c97108b2b1",
 )
 
-BYTE_BUDDY_VERSION = "1.17.6"
+BYTE_BUDDY_VERSION = "1.17.7"
 
 maven_jar(
     name = "bytebuddy",
     artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
-    sha1 = "8c70cbc6950b2ae5291a98d5003e06406d633803",
+    sha1 = "3856bfab61beb23e099a0d6629f2ba8de4b98ace",
 )
 
 maven_jar(
     name = "bytebuddy-agent",
     artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
-    sha1 = "17b32fd9f57deef02842f7f05abc4ad8127fe34e",
+    sha1 = "fbf3d6d649ed37fc9e9c59480a05be0a26e3c2da",
 )
 
 maven_jar(
@@ -240,66 +240,66 @@
     sha1 = "853ce06c11316b33a8eae5e9095da096a9528b8f",
 )
 
-JETTY_VER = "12.0.23"
+JETTY_VER = "12.1.0"
 
 maven_jar(
     name = "jetty-servlet",
     artifact = "org.eclipse.jetty.ee8:jetty-ee8-servlet:" + JETTY_VER,
-    sha1 = "87eb6b1fc7c6f6f130984288ce0ba311c7ebc48b",
+    sha1 = "881b69b15540215aace32ab7c985abb6e4fe0c25",
 )
 
 maven_jar(
     name = "jetty-nested",
     artifact = "org.eclipse.jetty.ee8:jetty-ee8-nested:" + JETTY_VER,
-    sha1 = "88a49929c83964263ce1350f7ed414abfda6a936",
+    sha1 = "8118cdcdf9cdf163584d47e136e1cee17b547985",
 )
 
 maven_jar(
     name = "jetty-security",
     artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VER,
-    sha1 = "c6e862c78ce45dca1374d157e92eedc4450aa141",
+    sha1 = "5fb2a02cc342fd132e5a358ecbb4479aabf58a3a",
 )
 
 maven_jar(
     name = "jetty-ee8-security",
     artifact = "org.eclipse.jetty.ee8:jetty-ee8-security:" + JETTY_VER,
-    sha1 = "0f7d8c859095af69cb350b72659c5e0efddc80e0",
+    sha1 = "d25c84218ef00b7e54f537acdee3fda8f20be975",
 )
 
 maven_jar(
     name = "jetty-server",
     artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VER,
-    sha1 = "c8618ac7741fd278dba2ff77c3cf5229e2235356",
+    sha1 = "a53a5d0d03aaeab03908ff854cdd5e9ee256efca",
 )
 
 maven_jar(
     name = "jetty-session",
     artifact = "org.eclipse.jetty:jetty-session:" + JETTY_VER,
-    sha1 = "a8fb8b2d7c85a6d7d7fc317cb8c7ecd3b31e5e27",
+    sha1 = "be1be354522861b72fdaade01f798ad7f6ffbac4",
 )
 
 maven_jar(
     name = "jetty-http",
     artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VER,
-    sha1 = "d4d3aa4670df0ec8a9b3abe15e14bf340f7e044e",
+    sha1 = "d74935bc8eb25780453dfd0a2e93c2729b566e79",
 )
 
 maven_jar(
     name = "jetty-io",
     artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VER,
-    sha1 = "a9175176e1ace74311f91d9a5f491efc387b4e90",
+    sha1 = "611910afde7e9a2cfda3cad1ec1466cdba55e444",
 )
 
 maven_jar(
     name = "jetty-util",
     artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VER,
-    sha1 = "aa47d314a3af553d9797ec0a89ab60c0b069fea2",
+    sha1 = "e0d96b47d0289006941757352c6fe7e5d9370c3b",
 )
 
 maven_jar(
     name = "jetty-util-ajax",
     artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VER,
-    sha1 = "bb9da9974fcb8029ba3538e35ca9efbfe4e19fa8",
+    sha1 = "26c44a954086af8518fcb311c94c5703f1d3093b",
 )
 
 BOUNCYCASTLE_VER = "1.81"
diff --git a/org.eclipse.jgit.http.server/.settings/.api_filters b/org.eclipse.jgit.http.server/.settings/.api_filters
index 3a22bef..4675956 100644
--- a/org.eclipse.jgit.http.server/.settings/.api_filters
+++ b/org.eclipse.jgit.http.server/.settings/.api_filters
@@ -14,6 +14,13 @@
                 <message_argument value="hasChunkedEncodingRequestBug(int[], HttpServletRequest)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="hasChunkedEncodingRequestBug(int[], HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/GitFilter.java" type="org.eclipse.jgit.http.server.GitFilter">
         <filter id="337682486">
@@ -54,6 +61,20 @@
                 <message_argument value="addUploadPackFilter(Filter)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="addReceivePackFilter(Filter)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="addUploadPackFilter(Filter)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/GitServlet.java" type="org.eclipse.jgit.http.server.GitServlet">
         <filter id="337682486">
@@ -94,6 +115,20 @@
                 <message_argument value="addUploadPackFilter(Filter)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="addReceivePackFilter(Filter)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="addUploadPackFilter(Filter)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/GitSmartHttpTools.java" type="org.eclipse.jgit.http.server.GitSmartHttpTools">
         <filter id="338792546">
@@ -187,6 +222,55 @@
                 <message_argument value="sendError(HttpServletRequest, HttpServletResponse, int, String)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="getResponseContentType(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="isGitClient(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="isInfoRefs(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="isReceivePack(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="isUploadPack(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="sendError(HttpServletRequest, HttpServletResponse, int)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="sendError(HttpServletRequest, HttpServletResponse, int, String)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/ReceivePackErrorHandler.java" type="org.eclipse.jgit.http.server.ReceivePackErrorHandler">
         <filter id="403804204">
@@ -208,6 +292,13 @@
                 <message_argument value="receive(HttpServletRequest, HttpServletResponse, ReceivePackErrorHandler.ReceivePackRunnable)"/>
             </message_arguments>
         </filter>
+        <filter id="1209008130">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="receive(HttpServletRequest, HttpServletResponse, ReceivePackErrorHandler.ReceivePackRunnable)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/RepositoryFilter.java" type="org.eclipse.jgit.http.server.RepositoryFilter">
         <filter id="337682486">
@@ -295,6 +386,41 @@
                 <message_argument value="sendPlainText(String, HttpServletRequest, HttpServletResponse)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="consumeRequestBody(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="getInputStream(HttpServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="getRepository(ServletRequest)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="send(byte[], HttpServletRequest, HttpServletResponse)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="sendPlainText(String, HttpServletRequest, HttpServletResponse)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/UploadPackErrorHandler.java" type="org.eclipse.jgit.http.server.UploadPackErrorHandler">
         <filter id="403804204">
@@ -316,6 +442,13 @@
                 <message_argument value="upload(HttpServletRequest, HttpServletResponse, UploadPackErrorHandler.UploadPackRunnable)"/>
             </message_arguments>
         </filter>
+        <filter id="1209008130">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="upload(HttpServletRequest, HttpServletResponse, UploadPackErrorHandler.UploadPackRunnable)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/glue/ErrorServlet.java" type="org.eclipse.jgit.http.server.glue.ErrorServlet">
         <filter id="337682486">
@@ -440,6 +573,20 @@
                 <message_argument value="with(HttpServlet)"/>
             </message_arguments>
         </filter>
+        <filter id="1209008130">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="through(Filter)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1209008130">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="with(HttpServlet)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/glue/WrappedRequest.java" type="org.eclipse.jgit.http.server.glue.WrappedRequest">
         <filter id="337682486">
@@ -466,6 +613,13 @@
                 <message_argument value="WrappedRequest(HttpServletRequest, String, String)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="WrappedRequest(HttpServletRequest, String, String)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/resolver/AsIsFileService.java" type="org.eclipse.jgit.http.server.resolver.AsIsFileService">
         <filter id="338792546">
@@ -481,6 +635,13 @@
                 <message_argument value="access(HttpServletRequest, Repository)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="access(HttpServletRequest, Repository)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/resolver/DefaultReceivePackFactory.java" type="org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory">
         <filter id="338792546">
@@ -496,6 +657,13 @@
                 <message_argument value="create(HttpServletRequest, Repository)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="create(HttpServletRequest, Repository)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/http/server/resolver/DefaultUploadPackFactory.java" type="org.eclipse.jgit.http.server.resolver.DefaultUploadPackFactory">
         <filter id="338792546">
@@ -511,5 +679,12 @@
                 <message_argument value="create(HttpServletRequest, Repository)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="create(HttpServletRequest, Repository)"/>
+            </message_arguments>
+        </filter>
     </resource>
 </component>
diff --git a/org.eclipse.jgit.junit.http/.settings/.api_filters b/org.eclipse.jgit.junit.http/.settings/.api_filters
index e756a79..f7c1069 100644
--- a/org.eclipse.jgit.junit.http/.settings/.api_filters
+++ b/org.eclipse.jgit.junit.http/.settings/.api_filters
@@ -27,6 +27,20 @@
                 <message_argument value="authBasic(ServletContextHandler, String[])"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="addContext(String)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="authBasic(ServletContextHandler, String[])"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/junit/http/HttpTestCase.java" type="org.eclipse.jgit.junit.http.HttpTestCase">
         <filter id="338792546">
@@ -42,6 +56,13 @@
                 <message_argument value="toURIish(ServletContextHandler, String)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="toURIish(ServletContextHandler, String)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/junit/http/MockServletConfig.java" type="org.eclipse.jgit.junit.http.MockServletConfig">
         <filter id="338792546">
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
index 81d381c..2d2362b 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
@@ -9,31 +9,31 @@
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-SCM: url=https://github.com/eclipse-jgit/jgit, connection=scm:git:https://eclipse.gerrithub.io/eclipse-jgit/jgit.git, developerConnection=scm:git:https://eclipse.gerrithub.io/a/eclipse-jgit/jgit.git
-Import-Package: org.apache.sshd.common;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.helpers;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.io;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.kex;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.keyprovider;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.session;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.signature;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.buffer;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.logging;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.security;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.threads;version="[2.15.0,2.16.0)",
- org.apache.sshd.core;version="[2.15.0,2.16.0)",
- org.apache.sshd.server;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.auth;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.auth.gss;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.auth.keyboard;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.auth.password;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.command;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.session;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.shell;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.subsystem;version="[2.15.0,2.16.0)",
- org.apache.sshd.sftp;version="[2.15.0,2.16.0)",
- org.apache.sshd.sftp.server;version="[2.15.0,2.16.0)",
+Import-Package: org.apache.sshd.common;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.file.virtualfs;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.io;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.kex;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.session;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.signature;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.logging;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.threads;version="[2.16.0,2.17.0)",
+ org.apache.sshd.core;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.auth;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.auth.gss;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.auth.keyboard;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.auth.password;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.command;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.session;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.shell;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.subsystem;version="[2.16.0,2.17.0)",
+ org.apache.sshd.sftp;version="[2.16.0,2.17.0)",
+ org.apache.sshd.sftp.server;version="[2.16.0,2.17.0)",
  org.eclipse.jgit.annotations;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.api;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.api.errors;version="[7.4.0,7.5.0)",
diff --git a/org.eclipse.jgit.lfs.server/.settings/.api_filters b/org.eclipse.jgit.lfs.server/.settings/.api_filters
index 46106ee..2a81240 100644
--- a/org.eclipse.jgit.lfs.server/.settings/.api_filters
+++ b/org.eclipse.jgit.lfs.server/.settings/.api_filters
@@ -69,6 +69,20 @@
                 <message_argument value="sendError(HttpServletResponse, int, String)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="getObjectToTransfer(HttpServletRequest, HttpServletResponse)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="sendError(HttpServletResponse, int, String)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/lfs/server/fs/ObjectDownloadListener.java" type="org.eclipse.jgit.lfs.server.fs.ObjectDownloadListener">
         <filter id="337682486">
@@ -90,6 +104,13 @@
                 <message_argument value="ObjectDownloadListener(FileLfsRepository, AsyncContext, HttpServletResponse, AnyLongObjectId)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="ObjectDownloadListener(FileLfsRepository, AsyncContext, HttpServletResponse, AnyLongObjectId)"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="src/org/eclipse/jgit/lfs/server/fs/ObjectUploadListener.java" type="org.eclipse.jgit.lfs.server.fs.ObjectUploadListener">
         <filter id="337682486">
@@ -111,5 +132,12 @@
                 <message_argument value="ObjectUploadListener(FileLfsRepository, AsyncContext, HttpServletRequest, HttpServletResponse, AnyLongObjectId)"/>
             </message_arguments>
         </filter>
+        <filter id="1141899266">
+            <message_arguments>
+                <message_argument value="7.0"/>
+                <message_argument value="7.4"/>
+                <message_argument value="ObjectUploadListener(FileLfsRepository, AsyncContext, HttpServletRequest, HttpServletResponse, AnyLongObjectId)"/>
+            </message_arguments>
+        </filter>
     </resource>
 </component>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
index 79cd1ba..fc3a907 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
@@ -54,26 +54,4 @@
          install-size="0"
          version="0.0.0"
          unpack="false"/>
-
-   <plugin
-         id="org.apache.commons.logging"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.sshd.osgi"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
-   <plugin
-         id="org.apache.sshd.sftp"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
 </feature>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.32.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.32.target
index 8f28f99..fda816e 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.32.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.32.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.32" sequenceNumber="1753881720">
+<target name="jgit-4.32" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.33.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.33.target
index 546e8d0..4a0ca74 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.33.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.33.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.33" sequenceNumber="1753881721">
+<target name="jgit-4.33" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target
index 394698a..e7fb7e2 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.34.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.34" sequenceNumber="1753881720">
+<target name="jgit-4.34" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target
index 2c2a0e4..337ae70 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.35.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.35" sequenceNumber="1753881720">
+<target name="jgit-4.35" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target
index 099e672..e89e43f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.36.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.36" sequenceNumber="1753881720">
+<target name="jgit-4.36" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target
index ce15c41..d99e9e3 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.37.target
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.37" sequenceNumber="1753881721">
+<target name="jgit-4.37" sequenceNumber="1756460383">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -61,13 +61,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.15.0</version>
+          <version>2.16.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -77,7 +77,7 @@
         <dependency>
           <groupId>org.mockito</groupId>
           <artifactId>mockito-core</artifactId>
-          <version>5.18.0</version>
+          <version>5.19.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -103,61 +103,61 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-servlet</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-nested</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty.ee8</groupId>
           <artifactId>jetty-ee8-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.0.23</version>
+          <version>12.1.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -203,13 +203,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.17.6</version>
+          <version>1.17.7</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -247,7 +247,7 @@
         <dependency>
           <groupId>org.assertj</groupId>
           <artifactId>assertj-core</artifactId>
-          <version>3.27.3</version>
+          <version>3.27.4</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -273,7 +273,7 @@
         <dependency>
           <groupId>org.apache.commons</groupId>
           <artifactId>commons-compress</artifactId>
-          <version>1.27.1</version>
+          <version>1.28.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
index a8d9d22..2af627f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
@@ -15,7 +15,7 @@
 	dependency {
 		groupId = "org.apache.commons"
 		artifactId = "commons-compress"
-		version = "1.27.1"
+		version = "1.28.0"
 	}
 	dependency {
 		groupId = "org.apache.commons"
@@ -56,7 +56,7 @@
 	dependency {
 		groupId = "org.assertj"
 		artifactId = "assertj-core"
-		version = "3.27.3"
+		version = "3.27.4"
 	}
 }
 
@@ -97,12 +97,12 @@
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy"
-		version = "1.17.6"
+		version = "1.17.7"
 	}
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy-agent"
-		version = "1.17.6"
+		version = "1.17.7"
 	}
 }
 
@@ -154,52 +154,52 @@
 	dependency {
 		groupId = "org.eclipse.jetty.ee8"
 		artifactId = "jetty-ee8-servlet"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty.ee8"
 		artifactId = "jetty-ee8-nested"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty.ee8"
 		artifactId = "jetty-ee8-security"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-http"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-io"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-security"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-server"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-session"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util-ajax"
-		version = "12.0.23"
+		version = "12.1.0"
 	}
 	dependency {
 		groupId = "jakarta.servlet"
@@ -235,7 +235,7 @@
 	dependency {
 		groupId = "org.mockito"
 		artifactId = "mockito-core"
-		version = "5.18.0"
+		version = "5.19.0"
 	}
 }
 
@@ -248,12 +248,12 @@
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-osgi"
-		version = "2.15.0"
+		version = "2.16.0"
 	}
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-sftp"
-		version = "2.15.0"
+		version = "2.16.0"
 	}
 }
 
diff --git a/org.eclipse.jgit.pgm/META-INF/services/org.eclipse.jgit.pgm.TextBuiltin b/org.eclipse.jgit.pgm/META-INF/services/org.eclipse.jgit.pgm.TextBuiltin
index 6bf88d9..0749e7b 100644
--- a/org.eclipse.jgit.pgm/META-INF/services/org.eclipse.jgit.pgm.TextBuiltin
+++ b/org.eclipse.jgit.pgm/META-INF/services/org.eclipse.jgit.pgm.TextBuiltin
@@ -27,6 +27,7 @@
 org.eclipse.jgit.pgm.MergeBase
 org.eclipse.jgit.pgm.MergeTool
 org.eclipse.jgit.pgm.MultiPackIndex
+org.eclipse.jgit.pgm.ObjectSizeIndex
 org.eclipse.jgit.pgm.PackRefs
 org.eclipse.jgit.pgm.Push
 org.eclipse.jgit.pgm.ReceivePack
diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
index e9630e9..606b29d 100644
--- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
+++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
@@ -305,6 +305,7 @@
 usage_MergeBase=Find as good common ancestors as possible for a merge
 usage_MergesTwoDevelopmentHistories=Merges two development histories
 usage_MultiPackIndex=Operations over the multipack index
+usage_ObjectSizeIndex=Operations over the object size index
 usage_PackKeptObjects=Include objects in packs locked by a ".keep" file when repacking
 usage_PackRefs=Pack heads and tags for efficient repository access
 usage_PreserveOldPacks=Preserve old pack files by moving them into the preserved subdirectory instead of deleting them after repacking
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java
new file mode 100644
index 0000000..a40c396
--- /dev/null
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/ObjectSizeIndex.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2025, Google LLC.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.pgm;
+
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_MIN_BYTES_OBJ_SIZE_INDEX;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_USE_OBJECT_SIZE_INDEX;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION;
+
+import java.io.IOException;
+
+import org.eclipse.jgit.internal.storage.file.ObjectDirectory;
+import org.eclipse.jgit.internal.storage.file.Pack;
+import org.eclipse.jgit.internal.storage.file.PackObjectSizeIndexHelper;
+import org.eclipse.jgit.lib.TextProgressMonitor;
+import org.kohsuke.args4j.Argument;
+
+@Command(common = true, usage = "usage_ObjectSizeIndex")
+@SuppressWarnings("nls")
+class ObjectSizeIndex extends TextBuiltin {
+	@Argument(index = 0, required = true, usage = "write, check")
+	private String command;
+
+	@Override
+	protected void run() throws IOException {
+		switch (command) {
+		case "write":
+			writeObjectSizeIndex();
+			break;
+		case "check":
+			checkObjectSizeIndex();
+			break;
+		default:
+			outw.println("Unknown command " + command);
+		}
+	}
+
+	private void writeObjectSizeIndex() throws IOException {
+		if (!(db.getObjectDatabase() instanceof ObjectDirectory)) {
+			throw die("This repository object db doesn't have packs");
+		}
+		PackObjectSizeIndexHelper.forAllPacks(
+				(ObjectDirectory) db.getObjectDatabase(),
+				new TextProgressMonitor());
+	}
+
+	private void checkObjectSizeIndex() throws IOException {
+		if (!(db.getObjectDatabase() instanceof ObjectDirectory)) {
+			throw die("This repository object db doesn't have packs");
+		}
+
+		outw.println("Object size index configuration for this repo:");
+		outw.println("\n* Writing:");
+		printInt(CONFIG_PACK_SECTION, CONFIG_KEY_MIN_BYTES_OBJ_SIZE_INDEX);
+
+		outw.println("\n* Reading:");
+		printBoolean(CONFIG_PACK_SECTION, CONFIG_KEY_USE_OBJECT_SIZE_INDEX);
+
+		outw.println("\n* Packs - have object size index:");
+		for (Pack pack : ((ObjectDirectory) db.getObjectDatabase())
+				.getPacks()) {
+			String name = pack.getPackName();
+			boolean hasObjectSizeIndex = pack.hasObjectSizeIndex();
+			outw.println(
+					String.format("  - %s - %b", name, hasObjectSizeIndex));
+		}
+	}
+
+	private void printInt(String section, String name) throws IOException {
+		Integer value = db.getConfig().getInt(section, name);
+		String key = String.join(".", section, name);
+		outw.println("  - " + key + " = " + value);
+	}
+
+	private void printBoolean(String section, String name) throws IOException {
+		Boolean value = db.getConfig().getBoolean(section, name);
+		String key = String.join(".", section, name);
+		outw.println("  - " + key + " = " + value);
+	}
+}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java
index 74e322f..80d3503 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/debug/ShowPackDelta.java
@@ -71,8 +71,9 @@ protected void run() throws Exception {
 
 		PackWriter pw = new PackWriter(new PackConfig(), reader) {
 			@Override
-			public void select(ObjectToPack otp, StoredObjectRepresentation next) {
+			public boolean select(ObjectToPack otp, StoredObjectRepresentation next) {
 				otp.select(next);
+				return true;
 			}
 		};
 
diff --git a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
index 78dfd14..b2ed4ca 100644
--- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -9,23 +9,23 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-17
 Bundle-SCM: url=https://github.com/eclipse-jgit/jgit, connection=scm:git:https://eclipse.gerrithub.io/eclipse-jgit/jgit.git, developerConnection=scm:git:https://eclipse.gerrithub.io/a/eclipse-jgit/jgit.git
 Require-Bundle: org.hamcrest.core;bundle-version="[1.3.0,2.0.0)"
-Import-Package: org.apache.sshd.certificate;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.config.hosts;version="[2.15.0,2.16.0)",
- org.apache.sshd.common;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.auth;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.cipher;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.helpers;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.kex;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.keyprovider;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.session;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.signature;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.buffer;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.net;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.security;version="[2.15.0,2.16.0)",
- org.apache.sshd.core;version="[2.15.0,2.16.0)",
- org.apache.sshd.server;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.forward;version="[2.15.0,2.16.0)",
+Import-Package: org.apache.sshd.certificate;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.config.hosts;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.auth;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.cipher;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.kex;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.session;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.signature;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.net;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)",
+ org.apache.sshd.core;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.forward;version="[2.16.0,2.17.0)",
  org.eclipse.jgit.annotations;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.api;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.api.errors;version="[7.4.0,7.5.0)",
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
index e9f18d9..5153cc2 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
@@ -39,58 +39,58 @@
    org.apache.sshd.client.keyverifier",
  org.eclipse.jgit.transport.sshd.agent;version="7.4.0"
 Import-Package: org.bouncycastle.jce.provider;version="[1.80.0,2.0.0)",
- org.apache.sshd.agent;version="[2.15.0,2.16.0)",
- org.apache.sshd.client;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.auth;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.auth.keyboard;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.auth.password;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.auth.pubkey;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.channel;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.config.hosts;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.config.keys;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.future;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.keyverifier;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.session;version="[2.15.0,2.16.0)",
- org.apache.sshd.client.session.forward;version="[2.15.0,2.16.0)",
- org.apache.sshd.common;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.auth;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.channel;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.cipher;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.compression;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys.loader;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.config.keys.u2f;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.digest;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.forward;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.future;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.helpers;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.io;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.kex;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.kex.extension;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.kex.extension.parser;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.keyprovider;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.mac;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.random;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.session;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.session.helpers;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.signature;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.buffer;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.buffer.keys;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.closeable;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.io;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.io.der;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.io.functors;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.io.resource;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.logging;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.net;version="[2.15.0,2.16.0)",
- org.apache.sshd.common.util.security;version="[2.15.0,2.16.0)",
- org.apache.sshd.core;version="[2.15.0,2.16.0)",
- org.apache.sshd.server.auth;version="[2.15.0,2.16.0)",
- org.apache.sshd.sftp;version="[2.15.0,2.16.0)",
- org.apache.sshd.sftp.client;version="[2.15.0,2.16.0)",
- org.apache.sshd.sftp.common;version="[2.15.0,2.16.0)",
+ org.apache.sshd.agent;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.auth;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.auth.keyboard;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.auth.password;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.auth.pubkey;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.channel;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.config.hosts;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.config.keys;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.future;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.keyverifier;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.session;version="[2.16.0,2.17.0)",
+ org.apache.sshd.client.session.forward;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.auth;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.channel;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.cipher;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.compression;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys.loader;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.config.keys.u2f;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.digest;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.forward;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.future;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.helpers;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.io;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.kex;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.kex.extension;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.kex.extension.parser;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.keyprovider;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.mac;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.random;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.session;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.session.helpers;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.signature;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.buffer;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.buffer.keys;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.closeable;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.io;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.io.der;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.io.functors;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.io.resource;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.logging;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.net;version="[2.16.0,2.17.0)",
+ org.apache.sshd.common.util.security;version="[2.16.0,2.17.0)",
+ org.apache.sshd.core;version="[2.16.0,2.17.0)",
+ org.apache.sshd.server.auth;version="[2.16.0,2.17.0)",
+ org.apache.sshd.sftp;version="[2.16.0,2.17.0)",
+ org.apache.sshd.sftp.client;version="[2.16.0,2.17.0)",
+ org.apache.sshd.sftp.common;version="[2.16.0,2.17.0)",
  org.eclipse.jgit.annotations;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.api.errors;version="[7.4.0,7.5.0)",
  org.eclipse.jgit.errors;version="[7.4.0,7.5.0)",
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackWriterTest.java
index 92d7465..cd73c6a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackWriterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackWriterTest.java
@@ -19,7 +19,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -702,13 +702,29 @@ public void testShallowFetchShallowAncestorDepth2() throws Exception {
 	}
 
 	@Test
-	public void testTotalPackFilesScanWhenSearchForReuseTimeoutNotSet()
+	public void testTotalPackFilesScanWhenSearchForReuseTimeoutNotSetTrue()
 			throws Exception {
+		totalPackFilesScanWhenSearchForReuseTimeoutNotSet(true);
+	}
+
+	@Test
+	public void testTotalPackFilesScanWhenSearchForReuseTimeoutNotSetFalse()
+			throws Exception {
+		totalPackFilesScanWhenSearchForReuseTimeoutNotSet(false);
+	}
+
+	public void totalPackFilesScanWhenSearchForReuseTimeoutNotSet(boolean doReturn) throws Exception {
 		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+		int numberOfPackFiles = (int) new GC(fileRepository).getStatistics().numberOfPackFiles;
+		int objectsInMultiplePacks = 2;
+		int objectsInOnePacks = 1;
+		int expectedSelectCalls = objectsInMultiplePacks * (doReturn ? numberOfPackFiles : 1)
+				+ objectsInOnePacks;
+
 		PackWriter mockedPackWriter = Mockito
 				.spy(new PackWriter(config, fileRepository.newObjectReader()));
 
-		doNothing().when(mockedPackWriter).select(any(), any());
+		doReturn(doReturn).when(mockedPackWriter).select(any(), any());
 
 		try (FileOutputStream packOS = new FileOutputStream(
 				getPackFileToWrite(fileRepository, mockedPackWriter))) {
@@ -716,27 +732,37 @@ public void testTotalPackFilesScanWhenSearchForReuseTimeoutNotSet()
 					NullProgressMonitor.INSTANCE, packOS);
 		}
 
-		long numberOfPackFiles = new GC(fileRepository)
-				.getStatistics().numberOfPackFiles;
-		int expectedSelectCalls =
-				// Objects contained in multiple packfiles * number of packfiles
-				2 * (int) numberOfPackFiles +
-				// Objects in single packfile
-						1;
 		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
 				any());
 	}
 
 	@Test
-	public void testTotalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck()
+	public void testTotalPackFilesScanWhenSkippingSearchForReuseTimeoutCheckTrue()
 			throws Exception {
+		totalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck(true);
+	}
+
+	@Test
+	public void testTotalPackFilesScanWhenSkippingSearchForReuseTimeoutCheckFalse()
+			throws Exception {
+		totalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck(false);
+	}
+
+	public void totalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck(
+			boolean doReturn) throws Exception {
 		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+		int numberOfPackFiles = (int) new GC(fileRepository).getStatistics().numberOfPackFiles;
+		int objectsInMultiplePacks = 2;
+		int objectsInOnePacks = 1;
+		int expectedSelectCalls = objectsInMultiplePacks * (doReturn ? numberOfPackFiles : 1)
+				+ objectsInOnePacks;
+
 		PackConfig packConfig = new PackConfig();
 		packConfig.setSearchForReuseTimeout(Duration.ofSeconds(-1));
 		PackWriter mockedPackWriter = Mockito.spy(
 				new PackWriter(packConfig, fileRepository.newObjectReader()));
 
-		doNothing().when(mockedPackWriter).select(any(), any());
+		doReturn(doReturn).when(mockedPackWriter).select(any(), any());
 
 		try (FileOutputStream packOS = new FileOutputStream(
 				getPackFileToWrite(fileRepository, mockedPackWriter))) {
@@ -744,28 +770,31 @@ public void testTotalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck()
 					NullProgressMonitor.INSTANCE, packOS);
 		}
 
-		long numberOfPackFiles = new GC(fileRepository)
-				.getStatistics().numberOfPackFiles;
-		int expectedSelectCalls =
-				// Objects contained in multiple packfiles * number of packfiles
-				2 * (int) numberOfPackFiles +
-				// Objects contained in single packfile
-						1;
 		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
 				any());
 	}
 
 	@Test
-	public void testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck()
+	public void partialPackFilesScanWhenDoingSearchForReuseTimeoutCheck()
 			throws Exception {
+		int objectsInMultiplePacks = 2;
+		int objectsInOnePacks = 1;
+		int expectedSelectCalls = objectsInMultiplePacks + objectsInOnePacks;
+		testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck(true, expectedSelectCalls);
+		testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck(false, expectedSelectCalls);
+	}
+
+	public void testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck(
+			boolean doReturn, int expectedSelectCalls) throws Exception {
 		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+
 		PackConfig packConfig = new PackConfig();
 		packConfig.setSearchForReuseTimeout(Duration.ofSeconds(-1));
 		PackWriter mockedPackWriter = Mockito.spy(
 				new PackWriter(packConfig, fileRepository.newObjectReader()));
 		mockedPackWriter.enableSearchForReuseTimeout();
 
-		doNothing().when(mockedPackWriter).select(any(), any());
+		doReturn(doReturn).when(mockedPackWriter).select(any(), any());
 
 		try (FileOutputStream packOS = new FileOutputStream(
 				getPackFileToWrite(fileRepository, mockedPackWriter))) {
@@ -773,7 +802,6 @@ public void testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck()
 					NullProgressMonitor.INSTANCE, packOS);
 		}
 
-		int expectedSelectCalls = 3; // Objects in packfiles
 		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
 				any());
 	}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkSortTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkSortTest.java
index 8af6747..d27d5c7 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkSortTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkSortTest.java
@@ -128,6 +128,56 @@ public void testSort_TOPO() throws Exception {
 	}
 
 	@Test
+	public void testSort_TOPO_reachable() throws Exception {
+		// c1 is back dated before its parent.
+		//
+		final RevCommit a = commit();
+		final RevCommit b = commit(a);
+		final RevCommit c1 = commit(-5, b);
+		final RevCommit c2 = commit(10, b);
+		final RevCommit d = commit(c1, c2);
+
+		assertEquals("", d.getShortMessage());
+		assertEquals("", c2.getShortMessage());
+		assertEquals("", c1.getShortMessage());
+		assertEquals("", b.getShortMessage());
+		rw.sort(RevSort.TOPO);
+		markStart(d);
+		markUninteresting(b);
+		assertEquals("", d.getShortMessage());
+		assertEquals("", c2.getShortMessage());
+		assertEquals("", c1.getShortMessage());
+		assertEquals("", b.getShortMessage());
+		assertCommit(d, rw.next());
+		assertCommit(c2, rw.next());
+		assertCommit(c1, rw.next());
+		assertNull(rw.next());
+		assertEquals("", d.getShortMessage());
+		assertEquals("", c2.getShortMessage());
+		assertEquals("", c1.getShortMessage());
+		assertEquals("", b.getShortMessage());
+	}
+
+	@Test
+	public void testSort_TOPO_reachable2() throws Exception {
+		// c1 is back dated before its parent.
+		//
+		final RevCommit a = commit();
+		final RevCommit b = commit(a);
+		final RevCommit c1 = commit(-5, b);
+		final RevCommit c2 = commit(10, b);
+		final RevCommit d = commit(c1, c2);
+
+		assertEquals("", d.getShortMessage());
+		rw.sort(RevSort.TOPO);
+		markStart(d);
+		markUninteresting(d);
+		assertEquals("", d.getShortMessage());
+		assertNull(rw.next());
+		assertEquals("", d.getShortMessage());
+	}
+
+	@Test
 	public void testSort_TOPO_REVERSE() throws Exception {
 		// c1 is back dated before its parent.
 		//
diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters
new file mode 100644
index 0000000..bf62ed4
--- /dev/null
+++ b/org.eclipse.jgit/.settings/.api_filters
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.jgit" version="2">
+    <resource path="src/org/eclipse/jgit/util/Iterators.java" type="org.eclipse.jgit.util.Iterators">
+        <filter id="1109393411">
+            <message_arguments>
+                <message_argument value="6.10.2"/>
+                <message_argument value="org.eclipse.jgit.util.Iterators"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java
index 5bc035a..a8b866d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/Git.java
@@ -201,7 +201,24 @@ public Git(Repository repo) {
 		this(repo, false);
 	}
 
-	Git(Repository repo, boolean closeRepo) {
+	/**
+	 * Construct a new {@link org.eclipse.jgit.api.Git} object which can
+	 * interact with the specified git repository.
+	 * <p>
+	 * All command classes returned by methods of this class will always
+	 * interact with this git repository.
+	 * <p>
+	 * If {@code closeRepo = false} the caller is responsible for closing the
+	 * repository.
+	 *
+	 * @param repo
+	 *            the git repository this class is interacting with;
+	 *            {@code null} is not allowed.
+	 * @param closeRepo
+	 *            whether to close the repository when this instance is closed
+	 * @since 7.4
+	 */
+	public Git(Repository repo, boolean closeRepo) {
 		this.repo = requireNonNull(repo);
 		this.closeRepo = closeRepo;
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java
index 55539e2..45ca470 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/CommitGraphWriter.java
@@ -134,8 +134,9 @@ public Stats write(@NonNull ProgressMonitor monitor,
 		chunks = Collections.unmodifiableList(chunks);
 
 		long expectedSize = calculateExpectedSize(chunks);
-		try (CancellableDigestOutputStream out = new CancellableDigestOutputStream(
-				monitor, commitGraphStream)) {
+		try {
+			CancellableDigestOutputStream out = new CancellableDigestOutputStream(
+				monitor, commitGraphStream);
 			writeHeader(out, chunks.size());
 			writeChunkLookup(out, chunks);
 			writeChunks(out, chunks);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
index 97473bb..5be4148 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
@@ -949,13 +949,9 @@ void writeCommitGraph(@NonNull Set<? extends ObjectId> wants)
 			tmpFile = File.createTempFile("commit_", //$NON-NLS-1$
 					COMMIT_GRAPH.getTmpExtension(),
 					repo.getObjectDatabase().getInfoDirectory());
-			// write the commit-graph file
-			try (FileOutputStream fos = new FileOutputStream(tmpFile);
-					FileChannel channel = fos.getChannel();
-					OutputStream channelStream = Channels
-							.newOutputStream(channel)) {
-				writer.write(pm, channelStream);
-				channel.force(true);
+			// write the commit-graph to temporary file
+			try (FileOutputStream fos = new FileOutputStream(tmpFile)) {
+				writer.write(pm, fos);
 			}
 
 			// rename the temporary file to real file
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index dc25bfd..af1671d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -446,12 +446,12 @@ private long getObjectSizeWithoutRestoring(WindowCursor curs,
 			AnyObjectId id) throws IOException {
 		if (loose.hasCached(id)) {
 			long len = loose.getSize(curs, id);
-			if (0 <= len) {
+			if (len >= 0) {
 				return len;
 			}
 		}
 		long len = getPackedSizeFromSelfOrAlternate(curs, id, null);
-		if (0 <= len) {
+		if (len >= 0) {
 			return len;
 		}
 		return getLooseSizeFromSelfOrAlternate(curs, id, null);
@@ -461,14 +461,14 @@ private long getPackedSizeFromSelfOrAlternate(WindowCursor curs,
 			AnyObjectId id, Set<AlternateHandle.Id> skips)
 			throws PackMismatchException {
 		long len = packed.getSize(curs, id);
-		if (0 <= len) {
+		if (len >= 0) {
 			return len;
 		}
 		skips = addMe(skips);
 		for (AlternateHandle alt : myAlternates()) {
 			if (!skips.contains(alt.getId())) {
 				len = alt.db.getPackedSizeFromSelfOrAlternate(curs, id, skips);
-				if (0 <= len) {
+				if (len >= 0) {
 					return len;
 				}
 			}
@@ -479,14 +479,14 @@ private long getPackedSizeFromSelfOrAlternate(WindowCursor curs,
 	private long getLooseSizeFromSelfOrAlternate(WindowCursor curs,
 			AnyObjectId id, Set<AlternateHandle.Id> skips) throws IOException {
 		long len = loose.getSize(curs, id);
-		if (0 <= len) {
+		if (len >= 0) {
 			return len;
 		}
 		skips = addMe(skips);
 		for (AlternateHandle alt : myAlternates()) {
 			if (!skips.contains(alt.getId())) {
 				len = alt.db.getLooseSizeFromSelfOrAlternate(curs, id, skips);
-				if (0 <= len) {
+				if (len >= 0) {
 					return len;
 				}
 			}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
index f50c17e..544961b 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
@@ -27,6 +27,7 @@
 import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -49,6 +50,7 @@
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectLoader;
 import org.eclipse.jgit.util.FileUtils;
+import org.eclipse.jgit.util.Iterators;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -275,12 +277,14 @@ void selectRepresentation(PackWriter packer, ObjectToPack otp,
 		PackList pList = packList.get();
 		int retries = 0;
 		SEARCH: for (;;) {
-			for (Pack p : pList.packs) {
+			for (Pack p : pList.inReverse()) {
 				try {
 					LocalObjectRepresentation rep = p.representation(curs, otp);
 					p.resetTransientErrorCount();
 					if (rep != null) {
-						packer.select(otp, rep);
+						if (!packer.select(otp, rep)) {
+							return;
+						}
 						packer.checkSearchForReuseTimeout();
 					}
 				} catch (SearchForReuseTimeout e) {
@@ -584,5 +588,13 @@ static final class PackList {
 			this.snapshot = monitor;
 			this.packs = packs;
 		}
+
+		Iterable<Pack> inReverse() {
+			return Iterators.iterable(reverseIterator());
+		}
+
+		Iterator<Pack> reverseIterator() {
+			return Iterators.reverseIterator(packs);
+		}
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackObjectSizeIndexHelper.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackObjectSizeIndexHelper.java
new file mode 100644
index 0000000..acef741
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackObjectSizeIndexHelper.java
@@ -0,0 +1,92 @@
+package org.eclipse.jgit.internal.storage.file;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jgit.internal.storage.pack.PackExt;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ProgressMonitor;
+import org.eclipse.jgit.transport.PackedObjectInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * A wrapper to write the object size index for existing packs (on disk)
+ */
+public class PackObjectSizeIndexHelper {
+
+	private final static Logger LOG = LoggerFactory
+			.getLogger(PackObjectSizeIndexHelper.class);
+
+	/**
+	 * Add an object size index to all the packs without one in this object
+	 * database.
+	 *
+	 * @param db
+	 *            object db for packs
+	 * @param pm
+	 *            progress monitor for the object listing phase (adding size to
+	 *            the objects in index)
+	 * @throws IOException
+	 *             an error reading the packs or writing the object size index
+	 *             file
+	 */
+	public static void forAllPacks(ObjectDirectory db, ProgressMonitor pm)
+			throws IOException {
+		WindowCursor wc = (WindowCursor) db.newReader();
+		for (Pack pack : db.getPacks()) {
+			LOG.info("Checking " + pack.getPackName()); //$NON-NLS-1$
+			if (pack.hasObjectSizeIndex()) {
+				LOG.debug("    has object size index"); //$NON-NLS-1$
+				continue;
+			}
+
+			List<PackedObjectInfo> objectsInPack = getObjectsInPack(wc, pack,
+					pm);
+			LOG.debug(String.format("    index has %d objects", //$NON-NLS-1$
+					objectsInPack.size()));
+			if (objectsInPack.isEmpty()) {
+				continue;
+			}
+
+			LOG.info("    start writing object size index"); //$NON-NLS-1$
+			PackFile packFile = pack.getPackFile()
+					.create(PackExt.OBJECT_SIZE_INDEX);
+			long start = System.currentTimeMillis();
+			try (FileOutputStream out = new FileOutputStream(packFile)) {
+				PackObjectSizeIndexWriter writer = PackObjectSizeIndexWriter
+						.createWriter(out, 0);
+				writer.write(objectsInPack);
+			}
+			LOG.info(String.format("     done writing. Took %d ms", //$NON-NLS-1$
+					System.currentTimeMillis() - start));
+		}
+	}
+
+	private static List<PackedObjectInfo> getObjectsInPack(WindowCursor wc,
+			Pack pack, ProgressMonitor pm) throws IOException {
+		PackIndex idx = pack.getIndex();
+		PackReverseIndex ridx = new PackReverseIndexComputed(idx);
+		pm.beginTask("Adding size to objects in index", //$NON-NLS-1$
+				(int) idx.getObjectCount());
+		// This is much faster in offset order
+		List<PackedObjectInfo> objs = new ArrayList<>(
+				(int) idx.getObjectCount());
+		for (int i = 0; i < idx.getObjectCount(); i++) {
+			ObjectId oid = ridx.findObjectByPosition(i);
+			PackedObjectInfo poi = new PackedObjectInfo(oid);
+			long offset = idx.findOffset(oid);
+			poi.setFullSize(pack.getObjectSize(wc, offset));
+			poi.setType(pack.getObjectType(wc, offset));
+			objs.add(poi);
+			pm.update(1);
+		}
+		pm.endTask();
+		return objs;
+	}
+
+	private PackObjectSizeIndexHelper() {
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java
index 15c125c..9c60d36 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCache.java
@@ -522,7 +522,8 @@ else if (eb < 4)
 			bs = tableSize / 2;
 		}
 		removalBlockSize = bs;
-		numRemovalBlocks = tableSize / removalBlockSize;
+		numRemovalBlocks = (int) Math
+				.ceil((double) tableSize / removalBlockSize);
 		blockBeingRemoved = numRemovalBlocks - 1;
 
 		if (maxFiles < 1)
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java
index 6612cfc..33459ef 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java
@@ -36,6 +36,7 @@
 import org.eclipse.jgit.lib.BitmapIndex;
 import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
 import org.eclipse.jgit.internal.storage.commitgraph.CommitGraph;
+import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.InflaterCache;
 import org.eclipse.jgit.lib.ObjectId;
@@ -49,6 +50,8 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs {
 	/** Temporary buffer large enough for at least one raw object id. */
 	final byte[] tempId = new byte[Constants.OBJECT_ID_LENGTH];
 
+	private final boolean useObjectSizeIndex;
+
 	private Inflater inf;
 
 	private ByteWindow window;
@@ -66,6 +69,10 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs {
 		this.db = db;
 		this.createdFromInserter = null;
 		this.streamFileThreshold = WindowCache.getStreamFileThreshold();
+		this.useObjectSizeIndex = db == null ? false
+				: db.getConfig().getBoolean(
+				ConfigConstants.CONFIG_PACK_SECTION,
+				ConfigConstants.CONFIG_KEY_USE_OBJECT_SIZE_INDEX, false);
 	}
 
 	WindowCursor(FileObjectDatabase db,
@@ -73,6 +80,10 @@ final class WindowCursor extends ObjectReader implements ObjectReuseAsIs {
 		this.db = db;
 		this.createdFromInserter = createdFromInserter;
 		this.streamFileThreshold = WindowCache.getStreamFileThreshold();
+		this.useObjectSizeIndex = db == null ? false
+				: db.getConfig().getBoolean(
+				ConfigConstants.CONFIG_PACK_SECTION,
+				ConfigConstants.CONFIG_KEY_USE_OBJECT_SIZE_INDEX, false);
 	}
 
 	DeltaBaseCache getDeltaBaseCache() {
@@ -177,9 +188,11 @@ public long getObjectSize(AnyObjectId objectId, int typeHint)
 			return getObjectSizeStorage(objectId, typeHint);
 		}
 
-		long sz = pack.getIndexedObjectSize(objectId);
-		if (sz >= 0) {
-			return sz;
+		if (useObjectSizeIndex && pack.hasObjectSizeIndex()) {
+			long sz = pack.getIndexedObjectSize(objectId);
+			if (sz >= 0) {
+				return sz;
+			}
 		}
 		return getObjectSizeStorage(objectId, typeHint);
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/CancellableDigestOutputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/CancellableDigestOutputStream.java
index ce86eab..9ad2f43 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/CancellableDigestOutputStream.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/CancellableDigestOutputStream.java
@@ -15,6 +15,7 @@
 
 import java.io.IOException;
 import java.io.InterruptedIOException;
+import java.io.FilterOutputStream;
 import java.io.OutputStream;
 import java.security.MessageDigest;
 
@@ -22,15 +23,13 @@
  * An OutputStream that keeps a digest and checks every N bytes for
  * cancellation.
  */
-public class CancellableDigestOutputStream extends OutputStream {
+public class CancellableDigestOutputStream extends FilterOutputStream {
 
 	/** The OutputStream checks every this value for cancellation **/
 	public static final int BYTES_TO_WRITE_BEFORE_CANCEL_CHECK = 128 * 1024;
 
 	private final ProgressMonitor writeMonitor;
 
-	private final OutputStream out;
-
 	private final MessageDigest md = Constants.newMessageDigest();
 
 	private long count;
@@ -47,8 +46,8 @@ public class CancellableDigestOutputStream extends OutputStream {
 	 */
 	public CancellableDigestOutputStream(ProgressMonitor writeMonitor,
 			OutputStream out) {
+		super(out);
 		this.writeMonitor = writeMonitor;
-		this.out = out;
 		this.checkCancelAt = BYTES_TO_WRITE_BEFORE_CANCEL_CHECK;
 	}
 
@@ -113,9 +112,4 @@ public final void write(byte[] b, int off, int len) throws IOException {
 			len -= n;
 		}
 	}
-
-	@Override
-	public void flush() throws IOException {
-		out.flush();
-	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
index f025d4e..27fb814 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
@@ -2394,17 +2394,46 @@ private boolean exclude(AnyObjectId objectId) {
 	 * this method once for each representation available for an object, to
 	 * allow the writer to find the most suitable one for the output.
 	 *
+	 * This method tries to take a very simple approach to avoiding delta chains
+	 * during object reuse by selecting from the oldest pack that contains them.
+	 * This helps select many objects from the same pack which helps make good
+	 * use of any WindowCache caching, and it helps prevent cycles because a
+	 * pack must not have a cycle in the delta chain. If both objects A and B
+	 * are chosen out of the same source pack then there cannot be an A->B->A
+	 * cycle.
+	 *
+	 * The oldest pack is also the most likely to have the smallest deltas. It
+	 * generally is the biggest pack in the system and probably came from the
+	 * clone (or last GC) of this repository, where all objects were previously
+	 * considered and packed tightly together. If an object appears again (for
+	 * example due to a revert and a push into this repository) the newer copy
+	 * won't be nearly as small as the older delta version of it, even if the
+	 * newer one is also itself a delta.
+	 *
+	 * Thus this method is optimized for being called in an order that presumes
+	 * that earlier representations are better than later ones, and it expects
+	 * representations from older pack files to be tested first, and it will
+	 * shortcut any searching once it is satisfied with the selected
+	 * representation. Perhaps ideally representation testing ordering should be
+	 * based on packfile object count instead of age since file age can be
+	 * altered, and be deceiving for other reasons. Perhaps the presence of a
+	 * bitmap file for a pack file should prioritize it to be tested even
+	 * earlier than object count?
+	 *
 	 * @param otp
 	 *            the object being packed.
 	 * @param next
 	 *            the next available representation from the repository.
+	 * @return whether the search should continue in the hopes of finding a
+	 *         better representation
 	 */
-	public void select(ObjectToPack otp, StoredObjectRepresentation next) {
+	public boolean select(ObjectToPack otp, StoredObjectRepresentation next) {
 		int nFmt = next.getFormat();
 
 		if (!cachedPacks.isEmpty()) {
-			if (otp.isEdge())
-				return;
+			if (otp.isEdge()) {
+				return false;
+			}
 			if (nFmt == PACK_WHOLE || nFmt == PACK_DELTA) {
 				for (CachedPack pack : cachedPacks) {
 					if (pack.hasObject(otp, next)) {
@@ -2412,7 +2441,7 @@ public void select(ObjectToPack otp, StoredObjectRepresentation next) {
 						otp.clearDeltaBase();
 						otp.clearReuseAsIs();
 						pruneCurrentObjectList = true;
-						return;
+						return false;
 					}
 				}
 			}
@@ -2422,23 +2451,22 @@ public void select(ObjectToPack otp, StoredObjectRepresentation next) {
 			ObjectId baseId = next.getDeltaBase();
 			ObjectToPack ptr = objectsMap.get(baseId);
 			if (ptr != null && !ptr.isEdge()) {
-				otp.setDeltaBase(ptr);
-				otp.setReuseAsIs();
-			} else if (thin && have(ptr, baseId)) {
-				otp.setDeltaBase(baseId);
-				otp.setReuseAsIs();
-			} else {
-				otp.clearDeltaBase();
-				otp.clearReuseAsIs();
+				return useDelta(otp, next, ptr);
 			}
+			if (thin && have(ptr, baseId)) {
+				return useDelta(otp, next, baseId);
+			}
+			otp.clearDeltaBase();
+			otp.clearReuseAsIs();
 		} else if (nFmt == PACK_WHOLE && config.isReuseObjects()) {
 			int nWeight = next.getWeight();
 			if (otp.isReuseAsIs() && !otp.isDeltaRepresentation()) {
 				// We've chosen another PACK_WHOLE format for this object,
 				// choose the one that has the smaller compressed size.
 				//
-				if (otp.getWeight() <= nWeight)
-					return;
+				if (otp.getWeight() < nWeight) {
+					return true;
+				}
 			}
 			otp.clearDeltaBase();
 			otp.setReuseAsIs();
@@ -2450,6 +2478,15 @@ public void select(ObjectToPack otp, StoredObjectRepresentation next) {
 
 		otp.setDeltaAttempted(reuseDeltas && next.wasDeltaAttempted());
 		otp.select(next);
+		return true;
+	}
+
+	private boolean useDelta(ObjectToPack otp, StoredObjectRepresentation rep, ObjectId base) {
+		otp.setDeltaBase(base);
+		otp.setReuseAsIs();
+		otp.setDeltaAttempted(reuseDeltas && rep.wasDeltaAttempted());
+		otp.select(rep);
+		return false;
 	}
 
 	private final boolean have(ObjectToPack ptr, AnyObjectId objectId) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java
index a49f787..926e45d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/PendingGenerator.java
@@ -100,11 +100,13 @@ RevCommit next() throws MissingObjectException,
 				}
 
 				final boolean produce;
-				if ((c.flags & UNINTERESTING) != 0)
+				final boolean hadBody = c.getRawBuffer() != null;
+				if ((c.flags & UNINTERESTING) != 0) {
 					produce = false;
-				else {
-					if (filter.requiresCommitBody())
+				} else {
+					if (filter.requiresCommitBody() && !hadBody) {
 						c.parseBody(walker);
+					}
 					produce = filter.include(walker, c);
 				}
 
@@ -140,15 +142,17 @@ RevCommit next() throws MissingObjectException,
 					} else {
 						overScan = OVER_SCAN;
 					}
-					if (canDispose)
+					if (canDispose && !hadBody) {
 						c.disposeBody();
+					}
 					continue;
 				}
 
-				if (produce)
+				if (produce) {
 					return last = c;
-				else if (canDispose)
+				} else if (canDispose && !hadBody) {
 					c.disposeBody();
+				}
 			}
 		} catch (StopWalkException swe) {
 			pending.clear();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
index a65d0b7..c9a48bf 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java
@@ -106,6 +106,7 @@
 import org.eclipse.jgit.util.SystemReader;
 import org.eclipse.jgit.util.TemporaryBuffer;
 import org.eclipse.jgit.util.io.DisabledOutputStream;
+import org.eclipse.jgit.util.io.SilentInputStream;
 import org.eclipse.jgit.util.io.UnionInputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -1558,7 +1559,8 @@ protected void doFetch(ProgressMonitor monitor, Collection<Ref> want,
 				throws TransportException {
 			svc = new MultiRequestService(SVC_UPLOAD_PACK,
 					getProtocolVersion());
-			try (InputStream svcIn = svc.getInputStream();
+			try (InputStream svcIn = new SilentInputStream(
+					svc.getInputStream());
 					OutputStream svcOut = svc.getOutputStream()) {
 				init(svcIn, svcOut);
 				super.doFetch(monitor, want, have, outputStream);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/Iterators.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/Iterators.java
new file mode 100644
index 0000000..93a2847
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/Iterators.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2025, NVIDIA Corporation.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.util;
+
+import java.util.Iterator;
+
+/**
+ * Utility class for Iterators
+ *
+ * @since 6.10.2
+ */
+public class Iterators {
+	/**
+	 * Create an iterator which traverses an array in reverse.
+	 *
+	 * @param array T[]
+	 * @return Iterator<T>
+	 */
+	@SuppressWarnings("AvoidObjectArrays")
+	public static <T> Iterator<T> reverseIterator(T[] array) {
+		return new Iterator<>() {
+			int index = array.length;
+
+			@Override
+			public boolean hasNext() {
+				return index > 0;
+			}
+
+			@Override
+			public T next() {
+				return array[--index];
+			}
+		};
+	}
+
+	/**
+	 * Make an iterable for easy use in modern for loops.
+	 *
+	 * @param iterator Iterator<T>
+	 * @return Iterable<T>
+	 */
+	public static <T> Iterable<T> iterable(Iterator<T> iterator) {
+		return new Iterable<>() {
+			@Override
+			public Iterator<T> iterator() {
+				return iterator;
+			}
+		};
+	}
+
+	private Iterators() {
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/io/SilentInputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/SilentInputStream.java
new file mode 100644
index 0000000..8c2c61a
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/io/SilentInputStream.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2025 Thomas Wolf <twolf@apache.org> and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.util.io;
+
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An {@link InputStream} that swallows exceptions on {@link #close()}.
+ *
+ * @since 7.4
+ */
+public class SilentInputStream extends FilterInputStream {
+
+	private static final Logger LOG = LoggerFactory
+			.getLogger(SilentInputStream.class);
+
+	/**
+	 * Wraps an existing {@link InputStream}.
+	 *
+	 * @param in
+	 *            {@link InputStream} to wrap
+	 */
+	public SilentInputStream(InputStream in) {
+		super(in);
+	}
+
+	@Override
+	public void close() throws IOException {
+		try {
+			super.close();
+		} catch (IOException e) {
+			if (LOG.isDebugEnabled()) {
+				LOG.debug("Exception ignored while closing input stream", e); //$NON-NLS-1$
+			}
+		}
+	}
+}
diff --git a/pom.xml b/pom.xml
index e7f97e0..4f58388 100644
--- a/pom.xml
+++ b/pom.xml
@@ -120,17 +120,17 @@
 
     <jgit-last-release-version>7.3.0.202506031305-r</jgit-last-release-version>
     <ant-version>1.10.15</ant-version>
-    <apache-sshd-version>2.15.0</apache-sshd-version>
+    <apache-sshd-version>2.16.0</apache-sshd-version>
     <jsch-version>0.1.55</jsch-version>
     <jzlib-version>1.1.3</jzlib-version>
     <javaewah-version>1.2.3</javaewah-version>
     <junit-version>4.13.2</junit-version>
     <test-fork-count>1C</test-fork-count>
     <args4j-version>2.37</args4j-version>
-    <commons-compress-version>1.27.1</commons-compress-version>
+    <commons-compress-version>1.28.0</commons-compress-version>
     <osgi-core-version>6.0.0</osgi-core-version>
     <servlet-api-version>4.0.4</servlet-api-version>
-    <jetty-version>12.0.23</jetty-version>
+    <jetty-version>12.1.0</jetty-version>
     <japicmp-version>0.23.1</japicmp-version>
     <httpclient-version>4.5.14</httpclient-version>
     <httpcore-version>4.4.16</httpcore-version>
@@ -146,9 +146,9 @@
     <maven-compiler-plugin-version>3.14.0</maven-compiler-plugin-version>
     <plexus-compiler-version>2.13.0</plexus-compiler-version>
     <hamcrest-version>2.2</hamcrest-version>
-    <assertj-version>3.27.3</assertj-version>
+    <assertj-version>3.27.4</assertj-version>
     <jna-version>5.17.0</jna-version>
-    <byte-buddy-version>1.17.6</byte-buddy-version>
+    <byte-buddy-version>1.17.7</byte-buddy-version>
 
     <!-- Properties to enable jacoco code coverage analysis -->
     <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
@@ -1020,7 +1020,7 @@
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
-        <version>5.18.0</version>
+        <version>5.19.0</version>
       </dependency>
 
       <dependency>