Merge "DirCacheEntry: Fix mightBeRacilyClean() time difference calculation"
diff --git a/.bazelversion b/.bazelversion
index acd405b..37ad5c8 100644
--- a/.bazelversion
+++ b/.bazelversion
@@ -1 +1 @@
-8.6.0
+9.0.1
diff --git a/BUILD b/BUILD
index b8d8b9f..b9be9cb 100644
--- a/BUILD
+++ b/BUILD
@@ -10,8 +10,10 @@
         "//org.eclipse.jgit.archive:jgit-archive",
         "//org.eclipse.jgit.http.apache:http-apache",
         "//org.eclipse.jgit.http.server:jgit-servlet",
+        "//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8",
         "//org.eclipse.jgit.lfs:jgit-lfs",
         "//org.eclipse.jgit.lfs.server:jgit-lfs-server",
+        "//org.eclipse.jgit.lfs.server.ee8:jgit-lfs-server-ee8",
         "//org.eclipse.jgit.junit:junit",
         "//org.eclipse.jgit.ssh.apache:ssh-apache",
         "//org.eclipse.jgit.ssh.apache.agent:ssh-apache-agent",
diff --git a/Documentation/config-options.md b/Documentation/config-options.md
index 1541b53..0ba67c7 100644
--- a/Documentation/config-options.md
+++ b/Documentation/config-options.md
@@ -66,9 +66,10 @@
 
 ## __fetch__ options
 
-|  option | default | git option | description |
-|---------|---------|------------|-------------|
+| option                    | default | git option | description                                                                                                                                         |
+|---------------------------|---------|------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
 | `fetch.useNegotiationTip` | `false` | ✅ | When enabled it restricts the client negotiation on unrelated branches i.e. only send haves for the refs that the client is interested in fetching. |
+| `fetch.autogc`            | `true`  | ⃞ | Perform an automatic garbage collection after the fetch operation has been completed.                                                               |
 
 ## __gc__ options
 
@@ -137,6 +138,16 @@
 | `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. |
 
+
+## __receive__ options
+
+| option           | default | git option | description                                                                                |
+|------------------|---------|------------|--------------------------------------------------------------------------------------------|
+| `receive.autogc` | `true`  | ✅ | Perform an automatic garbage collection after a receive-pack operation has been completed. |
+| `receive.maxCommandBytes` | `3 MiB` | ⃞ | Maximum number of bytes to read from the receive-pack command block before the pack data. If set to `0`, there is no limit. |
+| `receive.maxCommandDiscardBytes` | `-1` | ⃞ | Maximum number of command-block bytes to discard after `receive.maxCommandBytes` is exceeded, so JGit can report a side-band error before disconnecting. If set to `0`, there is no limit. If set to `-1`, JGit uses the larger of `3 * receive.maxCommandBytes` and `3 MiB`. |
+
+
 ## reftable options
 
 |  option | default | git option | description |
diff --git a/MODULE.bazel b/MODULE.bazel
index 99528a3..c4edb7d 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -1,9 +1,11 @@
 module(name = "jgit")
 
-bazel_dep(name = "rules_go", version = "0.51.0-rc2")
-bazel_dep(name = "bazel_features", version = "1.39.0")
-bazel_dep(name = "rules_java", version = "8.16.1")
+bazel_dep(name = "bazel_features", version = "1.42.1")
+bazel_dep(name = "rules_android", version = "0.7.1")
+bazel_dep(name = "rules_go", version = "0.60.0")
+bazel_dep(name = "rules_java", version = "9.3.0")
 bazel_dep(name = "rules_jvm_external", version = "6.10")
+bazel_dep(name = "rules_shell", version = "0.6.1")
 bazel_dep(name = "rbe_autoconfig")
 git_override(
     module_name = "rbe_autoconfig",
@@ -19,23 +21,23 @@
 
 git_repository(
     name = "com_googlesource_gerrit_bazlets",
-    commit = "f9c119e45d9a241bee720b7fbd6c7fdbc952da5f",
+    commit = "156bae8bb0d329d8886f681c723979cbdb39d37c",
     remote = "https://gerrit.googlesource.com/bazlets",
 )
 
 BOUNCYCASTLE_VERSION = "1.84"
 
-BYTE_BUDDY_VERSION = "1.18.8"
+BYTE_BUDDY_VERSION = "1.18.10"
 
-JETTY_VERSION = "12.1.9"
+JETTY_VERSION = "12.1.10"
 
 JMH_VERSION = "1.37"
 
-JNA_VERSION = "5.18.1"
+JNA_VERSION = "5.19.1"
 
 SLF4J_VERSION = "2.0.18"
 
-SSHD_VERSION = "2.17.1"
+SSHD_VERSION = "2.18.0"
 
 maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
 maven.install(
@@ -49,8 +51,9 @@
         "com.jcraft:jzlib:1.1.3",
         "commons-codec:commons-codec:1.22.0",
         "commons-io:commons-io:2.22.0",
-        "commons-logging:commons-logging:1.3.6",
+        "commons-logging:commons-logging:1.4.0",
         "jakarta.servlet:jakarta.servlet-api:6.1.0",
+        "javax.servlet:javax.servlet-api:4.0.1",
         "junit:junit:4.13.2",
         "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
         "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
@@ -76,6 +79,9 @@
         "org.eclipse.jetty:jetty-session:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VERSION,
         "org.eclipse.jetty:jetty-util:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-nested:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-security:" + JETTY_VERSION,
+        "org.eclipse.jetty.ee8:jetty-ee8-servlet:" + JETTY_VERSION,
         "org.eclipse.jetty.ee10:jetty-ee10-servlet:" + JETTY_VERSION,
         "org.hamcrest:hamcrest:3.0",
         "org.mockito:mockito-core:5.23.0",
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index 7faac96..da5f702 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -1,5 +1,5 @@
 {
-  "lockFileVersion": 24,
+  "lockFileVersion": 26,
   "registryFileHashes": {
     "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497",
     "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2",
@@ -13,16 +13,19 @@
     "https://bcr.bazel.build/modules/abseil-cpp/20250127.0/MODULE.bazel": "d1086e248cda6576862b4b3fe9ad76a214e08c189af5b42557a6e1888812c5d5",
     "https://bcr.bazel.build/modules/abseil-cpp/20250127.1/MODULE.bazel": "c4a89e7ceb9bf1e25cf84a9f830ff6b817b72874088bf5141b314726e46a57c1",
     "https://bcr.bazel.build/modules/abseil-cpp/20250512.1/MODULE.bazel": "d209fdb6f36ffaf61c509fcc81b19e81b411a999a934a032e10cd009a0226215",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/MODULE.bazel": "c43c16ca2c432566cdb78913964497259903ebe8fb7d9b57b38e9f1425b427b8",
-    "https://bcr.bazel.build/modules/abseil-cpp/20250814.0/source.json": "b88bff599ceaf0f56c264c749b1606f8485cec3b8c38ba30f88a4df9af142861",
+    "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/MODULE.bazel": "51f2312901470cdab0dbdf3b88c40cd21c62a7ed58a3de45b365ddc5b11bcab2",
+    "https://bcr.bazel.build/modules/abseil-cpp/20250814.1/source.json": "cea3901d7e299da7320700abbaafe57a65d039f10d0d7ea601c4a66938ea4b0c",
     "https://bcr.bazel.build/modules/abseil-py/2.1.0/MODULE.bazel": "5ebe5bf853769c65707e5c28f216798f7a4b1042015e6a36e6d03094d94bec8a",
     "https://bcr.bazel.build/modules/abseil-py/2.1.0/source.json": "0e8fc4f088ce07099c1cd6594c20c7ddbb48b4b3c0849b7d94ba94be88ff042b",
     "https://bcr.bazel.build/modules/apple_support/1.11.1/MODULE.bazel": "1843d7cd8a58369a444fc6000e7304425fba600ff641592161d9f15b179fb896",
     "https://bcr.bazel.build/modules/apple_support/1.15.1/MODULE.bazel": "a0556fefca0b1bb2de8567b8827518f94db6a6e7e7d632b4c48dc5f865bc7c85",
-    "https://bcr.bazel.build/modules/apple_support/1.23.1/MODULE.bazel": "53763fed456a968cf919b3240427cf3a9d5481ec5466abc9d5dc51bc70087442",
-    "https://bcr.bazel.build/modules/apple_support/1.23.1/source.json": "d888b44312eb0ad2c21a91d026753f330caa48a25c9b2102fae75eb2b0dcfdd2",
+    "https://bcr.bazel.build/modules/apple_support/1.21.0/MODULE.bazel": "ac1824ed5edf17dee2fdd4927ada30c9f8c3b520be1b5fd02a5da15bc10bff3e",
+    "https://bcr.bazel.build/modules/apple_support/1.21.1/MODULE.bazel": "5809fa3efab15d1f3c3c635af6974044bac8a4919c62238cce06acee8a8c11f1",
+    "https://bcr.bazel.build/modules/apple_support/1.24.2/MODULE.bazel": "0e62471818affb9f0b26f128831d5c40b074d32e6dda5a0d3852847215a41ca4",
+    "https://bcr.bazel.build/modules/apple_support/1.24.2/source.json": "2c22c9827093250406c5568da6c54e6fdf0ef06238def3d99c71b12feb057a8d",
     "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b",
     "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd",
+    "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101",
     "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8",
     "https://bcr.bazel.build/modules/bazel_features/1.13.0/MODULE.bazel": "c14c33c7c3c730612bdbe14ebbb5e61936b6f11322ea95a6e91cd1ba962f94df",
     "https://bcr.bazel.build/modules/bazel_features/1.15.0/MODULE.bazel": "d38ff6e517149dc509406aca0db3ad1efdd890a85e049585b7234d04238e2a4d",
@@ -35,9 +38,11 @@
     "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d",
     "https://bcr.bazel.build/modules/bazel_features/1.3.0/MODULE.bazel": "cdcafe83ec318cda34e02948e81d790aab8df7a929cec6f6969f13a489ccecd9",
     "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87",
-    "https://bcr.bazel.build/modules/bazel_features/1.39.0/MODULE.bazel": "28739425c1fc283c91931619749c832b555e60bcd1010b40d8441ce0a5cf726d",
-    "https://bcr.bazel.build/modules/bazel_features/1.39.0/source.json": "f63cbeb4c602098484d57001e5a07d31cb02bbccde9b5e2c9bf0b29d05283e93",
+    "https://bcr.bazel.build/modules/bazel_features/1.33.0/MODULE.bazel": "8b8dc9d2a4c88609409c3191165bccec0e4cb044cd7a72ccbe826583303459f6",
+    "https://bcr.bazel.build/modules/bazel_features/1.36.0/MODULE.bazel": "596cb62090b039caf1cad1d52a8bc35cf188ca9a4e279a828005e7ee49a1bec3",
     "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7",
+    "https://bcr.bazel.build/modules/bazel_features/1.42.1/MODULE.bazel": "275a59b5406ff18c01739860aa70ad7ccb3cfb474579411decca11c93b951080",
+    "https://bcr.bazel.build/modules/bazel_features/1.42.1/source.json": "fcd4396b2df85f64f2b3bb436ad870793ecf39180f1d796f913cc9276d355309",
     "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a",
     "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8",
     "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e",
@@ -51,20 +56,24 @@
     "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d",
     "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b",
     "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6",
-    "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/source.json": "7ebaefba0b03efe59cac88ed5bbc67bcf59a3eff33af937345ede2a38b2d368a",
+    "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67",
+    "https://bcr.bazel.build/modules/bazel_skylib/1.8.2/source.json": "34a3c8bcf233b835eb74be9d628899bb32999d3e0eadef1947a0a562a2b16ffb",
     "https://bcr.bazel.build/modules/bazel_worker_api/0.0.1/MODULE.bazel": "02a13b77321773b2042e70ee5e4c5e099c8ddee4cf2da9cd420442c36938d4bd",
     "https://bcr.bazel.build/modules/bazel_worker_api/0.0.4/MODULE.bazel": "460aa12d01231a80cce03c548287b433b321d205b0028ae596728c35e5ee442e",
-    "https://bcr.bazel.build/modules/bazel_worker_api/0.0.4/source.json": "d353c410d47a8b65d09fa98e83d57ebec257a2c2b9c6e42d6fda1cb25e5464a5",
+    "https://bcr.bazel.build/modules/bazel_worker_api/0.0.8/MODULE.bazel": "396c1ef53835aafe3d42ce6619080531ee770648303731f16cfaa33fa056bf0c",
+    "https://bcr.bazel.build/modules/bazel_worker_api/0.0.8/source.json": "abaf8ac9d2ab2f47bda9af4c0c080ff7907378888e1f4bc62a0539dd13ba61e8",
     "https://bcr.bazel.build/modules/bazel_worker_java/0.0.4/MODULE.bazel": "82494a01018bb7ef06d4a17ec4cd7a758721f10eb8b6c820a818e70d669500db",
-    "https://bcr.bazel.build/modules/bazel_worker_java/0.0.4/source.json": "a2d30458fd86cf022c2b6331e652526fa08e17573b2f5034a9dbcacdf9c2583c",
-    "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84",
-    "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8",
+    "https://bcr.bazel.build/modules/bazel_worker_java/0.0.8/MODULE.bazel": "e76479eae70bd4e8f5f4c2dfc5d03ab971cfb18750246c7b3f3454c5c2ee6629",
+    "https://bcr.bazel.build/modules/bazel_worker_java/0.0.8/source.json": "9395c4679444bc47bf7e51a710366a4480aa371c6f6bed01868e2fabcf11acec",
+    "https://bcr.bazel.build/modules/buildozer/8.5.1/MODULE.bazel": "a35d9561b3fc5b18797c330793e99e3b834a473d5fbd3d7d7634aafc9bdb6f8f",
+    "https://bcr.bazel.build/modules/buildozer/8.5.1/source.json": "e3386e6ff4529f2442800dee47ad28d3e6487f36a1f75ae39ae56c70f0cd2fbd",
     "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8",
     "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350",
     "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a",
     "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0",
     "https://bcr.bazel.build/modules/gazelle/0.40.0/MODULE.bazel": "42ba5378ebe845fca43989a53186ab436d956db498acde790685fe0e8f9c6146",
-    "https://bcr.bazel.build/modules/gazelle/0.40.0/source.json": "1e5ef6e4d8b9b6836d93273c781e78ff829ea2e077afef7a57298040fa4f010a",
+    "https://bcr.bazel.build/modules/gazelle/0.47.0/MODULE.bazel": "b61bb007c4efad134aa30ee7f4a8e2a39b22aa5685f005edaa022fbd1de43ebc",
+    "https://bcr.bazel.build/modules/gazelle/0.47.0/source.json": "aeb2e5df14b7fb298625d75d08b9c65bdb0b56014c5eb89da9e5dd0572280ae6",
     "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb",
     "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4",
     "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6",
@@ -78,6 +87,8 @@
     "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902",
     "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/MODULE.bazel": "6f7b417dcc794d9add9e556673ad25cb3ba835224290f4f848f8e2db1e1fca74",
     "https://bcr.bazel.build/modules/nlohmann_json/3.6.1/source.json": "f448c6e8963fdfa7eb831457df83ad63d3d6355018f6574fb017e8169deb43a9",
+    "https://bcr.bazel.build/modules/package_metadata/0.0.3/MODULE.bazel": "77890552ecea9e284b5424c9de827a58099348763a4359e975c359a83d4faa83",
+    "https://bcr.bazel.build/modules/package_metadata/0.0.5/MODULE.bazel": "ef4f9439e3270fdd6b9fd4dbc3d2f29d13888e44c529a1b243f7a31dfbc2e8e4",
     "https://bcr.bazel.build/modules/package_metadata/0.0.7/MODULE.bazel": "7adb03933fc8401f495800cf4eafcff0edc6da0ff55c7db223ef69d19f689486",
     "https://bcr.bazel.build/modules/package_metadata/0.0.7/source.json": "50639625e937b56115012674c797cca7a05a96b4878c87d803c13dc2b31de8a0",
     "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5",
@@ -96,6 +107,7 @@
     "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c",
     "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d",
     "https://bcr.bazel.build/modules/protobuf/27.2/MODULE.bazel": "32450b50673882e4c8c3d10a83f3bc82161b213ed2f80d17e38bece8f165c295",
+    "https://bcr.bazel.build/modules/protobuf/29.0-rc2.bcr.1/MODULE.bazel": "52f4126f63a2f0bbf36b99c2a87648f08467a4eaf92ba726bc7d6a500bbf770c",
     "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df",
     "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92",
     "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e",
@@ -105,7 +117,8 @@
     "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858",
     "https://bcr.bazel.build/modules/protobuf/31.1/MODULE.bazel": "379a389bb330b7b8c1cdf331cc90bf3e13de5614799b3b52cdb7c6f389f6b38e",
     "https://bcr.bazel.build/modules/protobuf/32.1/MODULE.bazel": "89cd2866a9cb07fee9ff74c41ceace11554f32e0d849de4e23ac55515cfada4d",
-    "https://bcr.bazel.build/modules/protobuf/32.1/source.json": "bd2664e90875c0cd755d1d9b7a103a4b027893ac8eafa3bba087557ffc244ad4",
+    "https://bcr.bazel.build/modules/protobuf/33.4/MODULE.bazel": "114775b816b38b6d0ca620450d6b02550c60ceedfdc8d9a229833b34a223dc42",
+    "https://bcr.bazel.build/modules/protobuf/33.4/source.json": "555f8686b4c7d6b5ba731fbea13bf656b4bfd9a7ff629c1d9d3f6e1d6155de79",
     "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e",
     "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34",
     "https://bcr.bazel.build/modules/pybind11_bazel/2.12.0/source.json": "6900fdc8a9e95866b8c0d4ad4aba4d4236317b5c1cd04c502df3f0d33afed680",
@@ -115,13 +128,14 @@
     "https://bcr.bazel.build/modules/re2/2024-07-02/MODULE.bazel": "0eadc4395959969297cbcf31a249ff457f2f1d456228c67719480205aa306daa",
     "https://bcr.bazel.build/modules/rules_android/0.1.1/MODULE.bazel": "48809ab0091b07ad0182defb787c4c5328bd3a278938415c00a7b69b50c4d3a8",
     "https://bcr.bazel.build/modules/rules_android/0.6.6/MODULE.bazel": "b0fb569752aab65ab1a9db0a8f6cfaf5aa1754965e17e95dcf0e4d88e192a68d",
-    "https://bcr.bazel.build/modules/rules_android/0.6.6/source.json": "a9d8dc2d5a102dc03269a94acc886a4cab82cdcb9ccbc77b0f665d6d17a6ae09",
+    "https://bcr.bazel.build/modules/rules_android/0.7.1/MODULE.bazel": "a806fc382a774252f228a40e3b11b9fcc6276f8778c7fb33e9f72937c6258363",
+    "https://bcr.bazel.build/modules/rules_android/0.7.1/source.json": "151440aed3f0f73a00d4ed5cec5d31f63a6fef9b95d8fab1eb1810150fa525f2",
     "https://bcr.bazel.build/modules/rules_apple/3.16.0/MODULE.bazel": "0d1caf0b8375942ce98ea944be754a18874041e4e0459401d925577624d3a54a",
-    "https://bcr.bazel.build/modules/rules_apple/3.16.0/source.json": "d8b5fe461272018cc07cfafce11fe369c7525330804c37eec5a82f84cd475366",
+    "https://bcr.bazel.build/modules/rules_apple/4.1.0/MODULE.bazel": "76e10fd4a48038d3fc7c5dc6e63b7063bbf5304a2e3bd42edda6ec660eebea68",
+    "https://bcr.bazel.build/modules/rules_apple/4.1.0/source.json": "8ee81e1708756f81b343a5eb2b2f0b953f1d25c4ab3d4a68dc02754872e80715",
     "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647",
     "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002",
     "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191",
-    "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac",
     "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc",
     "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87",
     "https://bcr.bazel.build/modules/rules_cc/0.0.17/MODULE.bazel": "2ae1d8f4238ec67d7185d8861cb0a2cdf4bc608697c331b95bf990e69b62e64a",
@@ -130,9 +144,13 @@
     "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e",
     "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5",
     "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513",
+    "https://bcr.bazel.build/modules/rules_cc/0.1.2/MODULE.bazel": "557ddc3a96858ec0d465a87c0a931054d7dcfd6583af2c7ed3baf494407fd8d0",
+    "https://bcr.bazel.build/modules/rules_cc/0.1.5/MODULE.bazel": "88dfc9361e8b5ae1008ac38f7cdfd45ad738e4fa676a3ad67d19204f045a1fd8",
     "https://bcr.bazel.build/modules/rules_cc/0.2.0/MODULE.bazel": "b5c17f90458caae90d2ccd114c81970062946f49f355610ed89bebf954f5783c",
+    "https://bcr.bazel.build/modules/rules_cc/0.2.13/MODULE.bazel": "eecdd666eda6be16a8d9dc15e44b5c75133405e820f620a234acc4b1fdc5aa37",
     "https://bcr.bazel.build/modules/rules_cc/0.2.14/MODULE.bazel": "353c99ed148887ee89c54a17d4100ae7e7e436593d104b668476019023b58df8",
-    "https://bcr.bazel.build/modules/rules_cc/0.2.14/source.json": "55d0a4587c5592fad350f6e698530f4faf0e7dd15e69d43f8d87e220c78bea54",
+    "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84",
+    "https://bcr.bazel.build/modules/rules_cc/0.2.17/source.json": "3832f45d145354049137c0090df04629d9c2b5493dc5c2bf46f1834040133a07",
     "https://bcr.bazel.build/modules/rules_cc/0.2.8/MODULE.bazel": "f1df20f0bf22c28192a794f29b501ee2018fa37a3862a1a2132ae2940a23a642",
     "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6",
     "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8",
@@ -141,40 +159,38 @@
     "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd",
     "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0",
     "https://bcr.bazel.build/modules/rules_go/0.51.0-rc2/MODULE.bazel": "edfc3a9cea7bedb0eaaff37b0d7817c1a4bf72b3c615580b0ffcee6c52690fd4",
-    "https://bcr.bazel.build/modules/rules_go/0.51.0-rc2/source.json": "6b5cd0b3da2bd0e6949580851db990a04af0a285f072b9a0f059424457cd8cc9",
+    "https://bcr.bazel.build/modules/rules_go/0.53.0/MODULE.bazel": "a4ed760d3ac0dbc0d7b967631a9a3fd9100d28f7d9fcf214b4df87d4bfff5f9a",
+    "https://bcr.bazel.build/modules/rules_go/0.59.0/MODULE.bazel": "b7e43e7414a3139a7547d1b4909b29085fbe5182b6c58cbe1ed4c6272815aeae",
+    "https://bcr.bazel.build/modules/rules_go/0.60.0/MODULE.bazel": "4a57ff2ffc2a3570e3c5646575c5a4b07287e91bcdac5d1f72383d51502b48cb",
+    "https://bcr.bazel.build/modules/rules_go/0.60.0/source.json": "1e21368c5e0c3013a110bd79a8fcff8ca46b5bcb2b561713a7273cbfcff7c464",
     "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74",
     "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86",
-    "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39",
     "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963",
-    "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6",
     "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31",
     "https://bcr.bazel.build/modules/rules_java/7.1.0/MODULE.bazel": "30d9135a2b6561c761bd67bd4990da591e6bdc128790ce3e7afd6a3558b2fb64",
     "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a",
     "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6",
     "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab",
-    "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2",
     "https://bcr.bazel.build/modules/rules_java/7.4.0/MODULE.bazel": "a592852f8a3dd539e82ee6542013bf2cadfc4c6946be8941e189d224500a8934",
     "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe",
     "https://bcr.bazel.build/modules/rules_java/8.13.0/MODULE.bazel": "0444ebf737d144cf2bb2ccb368e7f1cce735264285f2a3711785827c1686625e",
-    "https://bcr.bazel.build/modules/rules_java/8.14.0/MODULE.bazel": "717717ed40cc69994596a45aec6ea78135ea434b8402fb91b009b9151dd65615",
-    "https://bcr.bazel.build/modules/rules_java/8.16.1/MODULE.bazel": "0f20b1cecaa8e52f60a8f071e59a20b4e3b9a67f6c56c802ea256f6face692d3",
-    "https://bcr.bazel.build/modules/rules_java/8.16.1/source.json": "072f8d11264edc499621be2dc9ea01d6395db5aa6f8799c034ae01a3e857f2e4",
     "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017",
     "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939",
     "https://bcr.bazel.build/modules/rules_java/8.6.0/MODULE.bazel": "9c064c434606d75a086f15ade5edb514308cccd1544c2b2a89bbac4310e41c71",
     "https://bcr.bazel.build/modules/rules_java/8.6.1/MODULE.bazel": "f4808e2ab5b0197f094cabce9f4b006a27766beb6a9975931da07099560ca9c2",
+    "https://bcr.bazel.build/modules/rules_java/9.0.3/MODULE.bazel": "1f98ed015f7e744a745e0df6e898a7c5e83562d6b759dfd475c76456dda5ccea",
+    "https://bcr.bazel.build/modules/rules_java/9.3.0/MODULE.bazel": "f657c72d65ac449caae9abf2e68e66c0d36f9416848c4c4903d0b3234229e7f2",
+    "https://bcr.bazel.build/modules/rules_java/9.3.0/source.json": "59ae7e662c3c7042b88bbb42ad12483523e234c65ebe4c51611baa43e85cb248",
     "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7",
     "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909",
     "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036",
-    "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d",
-    "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.10/MODULE.bazel": "33e636ca6bc9ee0fa090a38aa33c631ded2d8cf6fead4124181d1b35dc474f7c",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.10/source.json": "c191249787625db72616a3fb3cc2786ab57355a2e3b615402b8b3b66b0f995b7",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.2/MODULE.bazel": "36a6e52487a855f33cb960724eb56547fa87e2c98a0474c3acad94339d7f8e99",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.6/MODULE.bazel": "153042249c7060536dc95b6bb9f9bb8063b8a0b0cb7acdb381bddbc2374aed55",
     "https://bcr.bazel.build/modules/rules_jvm_external/6.7/MODULE.bazel": "e717beabc4d091ecb2c803c2d341b88590e9116b8bf7947915eeb33aab4f96dd",
-    "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59",
+    "https://bcr.bazel.build/modules/rules_jvm_external/6.9/MODULE.bazel": "07c5db05527db7744a54fcffd653e1550d40e0540207a7f7e6d0a4de5bef8274",
     "https://bcr.bazel.build/modules/rules_kotlin/1.9.5/MODULE.bazel": "043a16a572f610558ec2030db3ff0c9938574e7dd9f58bded1bb07c0192ef025",
     "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3",
     "https://bcr.bazel.build/modules/rules_kotlin/2.1.3/MODULE.bazel": "ce7def6d576aa8d3a9c6d10e13b4d157296229674371f67dbf788dae0afae3d5",
@@ -203,30 +219,34 @@
     "https://bcr.bazel.build/modules/rules_python/0.37.1/MODULE.bazel": "3faeb2d9fa0a81f8980643ee33f212308f4d93eea4b9ce6f36d0b742e71e9500",
     "https://bcr.bazel.build/modules/rules_python/0.37.2/MODULE.bazel": "b5ffde91410745750b6c13be1c5dc4555ef5bc50562af4a89fd77807fdde626a",
     "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c",
-    "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7",
     "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43",
+    "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13",
     "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6",
-    "https://bcr.bazel.build/modules/rules_python/1.4.1/source.json": "8ec8c90c70ccacc4de8ca1b97f599e756fb59173e898ee08b733006650057c07",
+    "https://bcr.bazel.build/modules/rules_python/1.6.0/MODULE.bazel": "7e04ad8f8d5bea40451cf80b1bd8262552aa73f841415d20db96b7241bd027d8",
+    "https://bcr.bazel.build/modules/rules_python/1.7.0/MODULE.bazel": "d01f995ecd137abf30238ad9ce97f8fc3ac57289c8b24bd0bf53324d937a14f8",
+    "https://bcr.bazel.build/modules/rules_python/1.7.0/source.json": "028a084b65dcf8f4dc4f82f8778dbe65df133f234b316828a82e060d81bdce32",
     "https://bcr.bazel.build/modules/rules_robolectric/4.14.1.2/MODULE.bazel": "d44fec647d0aeb67b9f3b980cf68ba634976f3ae7ccd6c07d790b59b87a4f251",
     "https://bcr.bazel.build/modules/rules_robolectric/4.14.1.2/source.json": "37c10335f2361c337c5c1f34ed36d2da70534c23088062b33a8bdaab68aa9dea",
     "https://bcr.bazel.build/modules/rules_shell/0.1.2/MODULE.bazel": "66e4ca3ce084b04af0b9ff05ff14cab4e5df7503973818bb91cbc6cda08d32fc",
     "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c",
     "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b",
     "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592",
-    "https://bcr.bazel.build/modules/rules_shell/0.4.1/source.json": "4757bd277fe1567763991c4425b483477bb82e35e777a56fd846eb5cceda324a",
+    "https://bcr.bazel.build/modules/rules_shell/0.6.1/MODULE.bazel": "72e76b0eea4e81611ef5452aa82b3da34caca0c8b7b5c0c9584338aa93bae26b",
+    "https://bcr.bazel.build/modules/rules_shell/0.6.1/source.json": "20ec05cd5e592055e214b2da8ccb283c7f2a421ea0dc2acbf1aa792e11c03d0c",
     "https://bcr.bazel.build/modules/rules_swift/1.16.0/MODULE.bazel": "4a09f199545a60d09895e8281362b1ff3bb08bbde69c6fc87aff5b92fcc916ca",
     "https://bcr.bazel.build/modules/rules_swift/2.1.1/MODULE.bazel": "494900a80f944fc7aa61500c2073d9729dff0b764f0e89b824eb746959bc1046",
-    "https://bcr.bazel.build/modules/rules_swift/2.1.1/source.json": "40fc69dfaac64deddbb75bd99cdac55f4427d9ca0afbe408576a65428427a186",
+    "https://bcr.bazel.build/modules/rules_swift/2.4.0/MODULE.bazel": "1639617eb1ede28d774d967a738b4a68b0accb40650beadb57c21846beab5efd",
+    "https://bcr.bazel.build/modules/rules_swift/3.1.2/MODULE.bazel": "72c8f5cf9d26427cee6c76c8e3853eb46ce6b0412a081b2b6db6e8ad56267400",
+    "https://bcr.bazel.build/modules/rules_swift/3.1.2/source.json": "e85761f3098a6faf40b8187695e3de6d97944e98abd0d8ce579cb2daf6319a66",
     "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8",
     "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c",
-    "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef",
     "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd",
     "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c",
-    "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7",
     "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5",
     "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216",
     "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/MODULE.bazel": "5e463fbfba7b1701d957555ed45097d7f984211330106ccd1352c6e0af0dcf91",
-    "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.1/source.json": "32bd87e5f4d7acc57c5b2ff7c325ae3061d5e242c0c4c214ae87e0f1c13e54cb",
+    "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/MODULE.bazel": "75aab2373a4bbe2a1260b9bf2a1ebbdbf872d3bd36f80bff058dccd82e89422f",
+    "https://bcr.bazel.build/modules/swift_argument_parser/1.3.1.2/source.json": "5fba48bbe0ba48761f9e9f75f92876cafb5d07c0ce059cc7a8027416de94a05b",
     "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43",
     "https://bcr.bazel.build/modules/upb/0.0.0-20230516-61a97ef/MODULE.bazel": "c0df5e35ad55e264160417fd0875932ee3c9dda63d9fccace35ac62f45e1b6f9",
     "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0",
@@ -239,13 +259,12 @@
   "moduleExtensions": {
     "@@pybind11_bazel+//:internal_configure.bzl%internal_configure_extension": {
       "general": {
-        "bzlTransitiveDigest": "NFQjcZF+fAvf5fDH+pqsx4JrfzP9PuHBz6S6ZutIbnw=",
+        "bzlTransitiveDigest": "06cynZ1bCvvy8zHPrrDlXq+Z68xmjctHpfFxi+zEpJY=",
         "usagesDigest": "D1r3lfzMuUBFxgG8V6o0bQTLMk3GkaGOaPzw53wrwyw=",
-        "recordedFileInputs": {
-          "@@pybind11_bazel+//MODULE.bazel": "e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34"
-        },
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "recordedInputs": [
+          "REPO_MAPPING:pybind11_bazel+,bazel_tools bazel_tools",
+          "FILE:@@pybind11_bazel+//MODULE.bazel e6f4c20442eaa7c90d7190d8dc539d0ab422f95c65a57cc59562170c58ae3d34"
+        ],
         "generatedRepoSpecs": {
           "pybind11": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
@@ -257,23 +276,16 @@
               ]
             }
           }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "pybind11_bazel+",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
+        }
       }
     },
     "@@rules_android+//bzlmod_extensions:apksig.bzl%apksig_extension": {
       "general": {
-        "bzlTransitiveDigest": "By9qVNN7G4oL1vYOJXye7Dp/CbR2ar9oxAW8WXAVcVw=",
-        "usagesDigest": "xq6OVkELeJvOgYo3oY/sUBsGFbcqdV+9BYiNgSPV/po=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "bzlTransitiveDigest": "KrgiB8lWxqVdbipL9YIYOuGjS80xlZIM/EBvUg8SVd0=",
+        "usagesDigest": "zr/niBQ/s2fHozWAsg4vI70wAxcuFjG+QtM15qGkq9o=",
+        "recordedInputs": [
+          "REPO_MAPPING:rules_android+,bazel_tools bazel_tools"
+        ],
         "generatedRepoSpecs": {
           "apksig": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
@@ -282,23 +294,16 @@
               "build_file": "@@rules_android+//bzlmod_extensions:apksig.BUILD"
             }
           }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_android+",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
+        }
       }
     },
     "@@rules_android+//bzlmod_extensions:com_android_dex.bzl%com_android_dex_extension": {
       "general": {
-        "bzlTransitiveDigest": "rvWbJQc8jInfIAaXIMhSOqUlwM9HVeLey6q0ISvg08Y=",
-        "usagesDigest": "toF8IFMu98H/VU2p1sfVC5fVXVYJunpbbmtM6tOsQXY=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "bzlTransitiveDigest": "WYXjwqaZbEnV+ZWsKE3oDMpF5XVw8hxzet83NtyT8TM=",
+        "usagesDigest": "c1Y/KGGjUYCyd8zNIVTUh1bynVXRFz6xGKaSCBpQANM=",
+        "recordedInputs": [
+          "REPO_MAPPING:rules_android+,bazel_tools bazel_tools"
+        ],
         "generatedRepoSpecs": {
           "com_android_dex": {
             "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
@@ -307,159 +312,29 @@
               "build_file": "@@rules_android+//bzlmod_extensions:com_android_dex.BUILD"
             }
           }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_android+",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
+        }
       }
     },
     "@@rules_android+//rules/android_sdk_repository:rule.bzl%android_sdk_repository_extension": {
       "general": {
-        "bzlTransitiveDigest": "NAy+0M15JNVEBb8Tny6t7j3lKqTnsAMjoBB6LJ+C370=",
-        "usagesDigest": "g9Ur6X6qhf9a8MmY9qXU/jFjkyk/aZVBegI0yVMF0z4=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "bzlTransitiveDigest": "+rMrzIrv7sImYmkbXJYv+gFpTJQ79X3MpwwMLI2A+oA=",
+        "usagesDigest": "iEGI2aNDMkHt9LXCdViLNUUOslpiVj2DrevWWXZEFnU=",
+        "recordedInputs": [],
         "generatedRepoSpecs": {
           "androidsdk": {
             "repoRuleId": "@@rules_android+//rules/android_sdk_repository:rule.bzl%_android_sdk_repository",
             "attributes": {}
           }
-        },
-        "recordedRepoMappingEntries": []
-      }
-    },
-    "@@rules_apple+//apple:apple.bzl%provisioning_profile_repository_extension": {
-      "general": {
-        "bzlTransitiveDigest": "LKT4eTNHatc2Ti8tCILPSTYqQAc4030bEjspG/P+3TI=",
-        "usagesDigest": "vsJl8Rw5NL+5Ag2wdUDoTeRF/5klkXO8545Iy7U1Q08=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "local_provisioning_profiles": {
-            "repoRuleId": "@@rules_apple+//apple/internal:local_provisioning_profiles.bzl%provisioning_profile_repository",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "apple_support+",
-            "bazel_skylib",
-            "bazel_skylib+"
-          ],
-          [
-            "bazel_tools",
-            "rules_cc",
-            "rules_cc+"
-          ],
-          [
-            "rules_apple+",
-            "bazel_skylib",
-            "bazel_skylib+"
-          ],
-          [
-            "rules_apple+",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_apple+",
-            "build_bazel_apple_support",
-            "apple_support+"
-          ],
-          [
-            "rules_apple+",
-            "build_bazel_rules_swift",
-            "rules_swift+"
-          ],
-          [
-            "rules_cc+",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_cc+",
-            "cc_compatibility_proxy",
-            "rules_cc++compatibility_proxy+cc_compatibility_proxy"
-          ],
-          [
-            "rules_cc+",
-            "rules_cc",
-            "rules_cc+"
-          ],
-          [
-            "rules_cc++compatibility_proxy+cc_compatibility_proxy",
-            "rules_cc",
-            "rules_cc+"
-          ],
-          [
-            "rules_swift+",
-            "bazel_skylib",
-            "bazel_skylib+"
-          ],
-          [
-            "rules_swift+",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_swift+",
-            "build_bazel_apple_support",
-            "apple_support+"
-          ],
-          [
-            "rules_swift+",
-            "build_bazel_rules_swift",
-            "rules_swift+"
-          ],
-          [
-            "rules_swift+",
-            "build_bazel_rules_swift_local_config",
-            "rules_swift++non_module_deps+build_bazel_rules_swift_local_config"
-          ]
-        ]
-      }
-    },
-    "@@rules_apple+//apple:extensions.bzl%non_module_deps": {
-      "general": {
-        "bzlTransitiveDigest": "4xtddSlWIQdtVNVuvOI62fJfQVETHZCVWFvYYwQHMR4=",
-        "usagesDigest": "M3VqFpeTCo4qmrNKGZw0dxBHvTYDrfV3cscGzlSAhQ4=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "xctestrunner": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/google/xctestrunner/archive/b7698df3d435b6491b4b4c0f9fc7a63fbed5e3a6.tar.gz"
-              ],
-              "strip_prefix": "xctestrunner-b7698df3d435b6491b4b4c0f9fc7a63fbed5e3a6",
-              "sha256": "ae3a063c985a8633cb7eb566db21656f8db8eb9a0edb8c182312c7f0db53730d"
-            }
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_apple+",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
+        }
       }
     },
     "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": {
       "general": {
-        "bzlTransitiveDigest": "HJP3wKFbPhB1mSYjJS6kbXEiP+OQxvsBdqpvyJN6I3s=",
+        "bzlTransitiveDigest": "m2i9p9Fn+7u7WGI0mz6K5GlmmtUuwReSjDHIISY08GI=",
         "usagesDigest": "qTwqmKKUfWcPdvM0waG+CPWrxsbeAWVeUxavm7tEk9E=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "recordedInputs": [
+          "REPO_MAPPING:rules_kotlin+,bazel_tools bazel_tools"
+        ],
         "generatedRepoSpecs": {
           "com_github_jetbrains_kotlin_git": {
             "repoRuleId": "@@rules_kotlin+//src/main/starlark/core/repositories:compiler.bzl%kotlin_compiler_git_repository",
@@ -524,23 +399,185 @@
               ]
             }
           }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_kotlin+",
-            "bazel_tools",
-            "bazel_tools"
-          ]
-        ]
+        }
+      }
+    },
+    "@@rules_python+//python/extensions:config.bzl%config": {
+      "general": {
+        "bzlTransitiveDigest": "2hLgIvNVTLgxus0ZuXtleBe70intCfo0cHs8qvt6cdM=",
+        "usagesDigest": "ZVSXMAGpD+xzVNPuvF1IoLBkty7TROO0+akMapt1pAg=",
+        "recordedInputs": [
+          "REPO_MAPPING:rules_python+,bazel_tools bazel_tools",
+          "REPO_MAPPING:rules_python+,pypi__build rules_python++config+pypi__build",
+          "REPO_MAPPING:rules_python+,pypi__click rules_python++config+pypi__click",
+          "REPO_MAPPING:rules_python+,pypi__colorama rules_python++config+pypi__colorama",
+          "REPO_MAPPING:rules_python+,pypi__importlib_metadata rules_python++config+pypi__importlib_metadata",
+          "REPO_MAPPING:rules_python+,pypi__installer rules_python++config+pypi__installer",
+          "REPO_MAPPING:rules_python+,pypi__more_itertools rules_python++config+pypi__more_itertools",
+          "REPO_MAPPING:rules_python+,pypi__packaging rules_python++config+pypi__packaging",
+          "REPO_MAPPING:rules_python+,pypi__pep517 rules_python++config+pypi__pep517",
+          "REPO_MAPPING:rules_python+,pypi__pip rules_python++config+pypi__pip",
+          "REPO_MAPPING:rules_python+,pypi__pip_tools rules_python++config+pypi__pip_tools",
+          "REPO_MAPPING:rules_python+,pypi__pyproject_hooks rules_python++config+pypi__pyproject_hooks",
+          "REPO_MAPPING:rules_python+,pypi__setuptools rules_python++config+pypi__setuptools",
+          "REPO_MAPPING:rules_python+,pypi__tomli rules_python++config+pypi__tomli",
+          "REPO_MAPPING:rules_python+,pypi__wheel rules_python++config+pypi__wheel",
+          "REPO_MAPPING:rules_python+,pypi__zipp rules_python++config+pypi__zipp"
+        ],
+        "generatedRepoSpecs": {
+          "rules_python_internal": {
+            "repoRuleId": "@@rules_python+//python/private:internal_config_repo.bzl%internal_config_repo",
+            "attributes": {
+              "transition_setting_generators": {},
+              "transition_settings": []
+            }
+          },
+          "pypi__build": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/e2/03/f3c8ba0a6b6e30d7d18c40faab90807c9bb5e9a1e3b2fe2008af624a9c97/build-1.2.1-py3-none-any.whl",
+              "sha256": "75e10f767a433d9a86e50d83f418e83efc18ede923ee5ff7df93b6cb0306c5d4",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__click": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl",
+              "sha256": "ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__colorama": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl",
+              "sha256": "4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__importlib_metadata": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/2d/0a/679461c511447ffaf176567d5c496d1de27cbe34a87df6677d7171b2fbd4/importlib_metadata-7.1.0-py3-none-any.whl",
+              "sha256": "30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__installer": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl",
+              "sha256": "05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__more_itertools": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/50/e2/8e10e465ee3987bb7c9ab69efb91d867d93959095f4807db102d07995d94/more_itertools-10.2.0-py3-none-any.whl",
+              "sha256": "686b06abe565edfab151cb8fd385a05651e1fdf8f0a14191e4439283421f8684",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__packaging": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl",
+              "sha256": "2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pep517": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/25/6e/ca4a5434eb0e502210f591b97537d322546e4833dcb4d470a48c375c5540/pep517-0.13.1-py3-none-any.whl",
+              "sha256": "31b206f67165b3536dd577c5c3f1518e8fbaf38cbc57efff8369a392feff1721",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/8a/6a/19e9fe04fca059ccf770861c7d5721ab4c2aebc539889e97c7977528a53b/pip-24.0-py3-none-any.whl",
+              "sha256": "ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pip_tools": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/0d/dc/38f4ce065e92c66f058ea7a368a9c5de4e702272b479c0992059f7693941/pip_tools-7.4.1-py3-none-any.whl",
+              "sha256": "4c690e5fbae2f21e87843e89c26191f0d9454f362d8acdbd695716493ec8b3a9",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__pyproject_hooks": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/ae/f3/431b9d5fe7d14af7a32340792ef43b8a714e7726f1d7b69cc4e8e7a3f1d7/pyproject_hooks-1.1.0-py3-none-any.whl",
+              "sha256": "7ceeefe9aec63a1064c18d939bdc3adf2d8aa1988a510afec15151578b232aa2",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__setuptools": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/90/99/158ad0609729111163fc1f674a5a42f2605371a4cf036d0441070e2f7455/setuptools-78.1.1-py3-none-any.whl",
+              "sha256": "c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__tomli": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl",
+              "sha256": "939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__wheel": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl",
+              "sha256": "55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          },
+          "pypi__zipp": {
+            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
+            "attributes": {
+              "url": "https://files.pythonhosted.org/packages/da/55/a03fd7240714916507e1fcf7ae355bd9d9ed2e6db492595f1a67f61681be/zipp-3.18.2-py3-none-any.whl",
+              "sha256": "dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e",
+              "type": "zip",
+              "build_file_content": "package(default_visibility = [\"//visibility:public\"])\n\nload(\"@rules_python//python:py_library.bzl\", \"py_library\")\n\npy_library(\n    name = \"lib\",\n    srcs = glob([\"**/*.py\"]),\n    data = glob([\"**/*\"], exclude=[\n        # These entries include those put into user-installed dependencies by\n        # data_exclude to avoid non-determinism.\n        \"**/*.py\",\n        \"**/*.pyc\",\n        \"**/*.pyc.*\",  # During pyc creation, temp files named *.pyc.NNN are created\n        \"**/*.dist-info/RECORD\",\n        \"BUILD\",\n        \"WORKSPACE\",\n    ]),\n    # This makes this directory a top-level in the python import\n    # search path for anything that depends on this.\n    imports = [\".\"],\n)\n"
+            }
+          }
+        }
       }
     },
     "@@rules_python+//python/uv:uv.bzl%uv": {
       "general": {
-        "bzlTransitiveDigest": "Xpqjnjzy6zZ90Es9Wa888ZLHhn7IsNGbph/e6qoxzw8=",
-        "usagesDigest": "4JapxcpS0mL3524k0TZJffAtVyuRjDHZvN9kBRxxF1U=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
+        "bzlTransitiveDigest": "ijW9KS7qsIY+yBVvJ+Nr1mzwQox09j13DnE3iIwaeTM=",
+        "usagesDigest": "H8dQoNZcoqP+Mu0tHZTi4KHATzvNkM5ePuEqoQdklIU=",
+        "recordedInputs": [
+          "REPO_MAPPING:rules_python+,bazel_tools bazel_tools",
+          "REPO_MAPPING:rules_python+,platforms platforms"
+        ],
         "generatedRepoSpecs": {
           "uv": {
             "repoRuleId": "@@rules_python+//python/uv/private:uv_toolchains_repo.bzl%uv_toolchains_repo",
@@ -560,175 +597,336 @@
               "toolchain_target_settings": {}
             }
           }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_python+",
-            "platforms",
-            "platforms"
-          ]
-        ]
-      }
-    },
-    "@@rules_swift+//swift:extensions.bzl%non_module_deps": {
-      "general": {
-        "bzlTransitiveDigest": "6axDCXf6fQoPav8hojnUBxGA0FAMqLvtpC1cRsisCdw=",
-        "usagesDigest": "mhACFnrdMv9Wi0Mt67bxocJqviRkDSV+Ee5Mqdj5akA=",
-        "recordedFileInputs": {},
-        "recordedDirentsInputs": {},
-        "envVariables": {},
-        "generatedRepoSpecs": {
-          "com_github_apple_swift_protobuf": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-protobuf/archive/1.20.2.tar.gz"
-              ],
-              "sha256": "3fb50bd4d293337f202d917b6ada22f9548a0a0aed9d9a4d791e6fbd8a246ebb",
-              "strip_prefix": "swift-protobuf-1.20.2/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_protobuf/BUILD.overlay"
-            }
-          },
-          "com_github_grpc_grpc_swift": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/grpc/grpc-swift/archive/1.16.0.tar.gz"
-              ],
-              "sha256": "58b60431d0064969f9679411264b82e40a217ae6bd34e17096d92cc4e47556a5",
-              "strip_prefix": "grpc-swift-1.16.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_grpc_grpc_swift/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_docc_symbolkit": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-docc-symbolkit/archive/refs/tags/swift-5.10-RELEASE.tar.gz"
-              ],
-              "sha256": "de1d4b6940468ddb53b89df7aa1a81323b9712775b0e33e8254fa0f6f7469a97",
-              "strip_prefix": "swift-docc-symbolkit-swift-5.10-RELEASE",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_docc_symbolkit/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_nio": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-nio/archive/2.42.0.tar.gz"
-              ],
-              "sha256": "e3304bc3fb53aea74a3e54bd005ede11f6dc357117d9b1db642d03aea87194a0",
-              "strip_prefix": "swift-nio-2.42.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_nio/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_nio_http2": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-nio-http2/archive/1.26.0.tar.gz"
-              ],
-              "sha256": "f0edfc9d6a7be1d587e5b403f2d04264bdfae59aac1d74f7d974a9022c6d2b25",
-              "strip_prefix": "swift-nio-http2-1.26.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_nio_http2/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_nio_transport_services": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-nio-transport-services/archive/1.15.0.tar.gz"
-              ],
-              "sha256": "f3498dafa633751a52b9b7f741f7ac30c42bcbeb3b9edca6d447e0da8e693262",
-              "strip_prefix": "swift-nio-transport-services-1.15.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_nio_transport_services/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_nio_extras": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-nio-extras/archive/1.4.0.tar.gz"
-              ],
-              "sha256": "4684b52951d9d9937bb3e8ccd6b5daedd777021ef2519ea2f18c4c922843b52b",
-              "strip_prefix": "swift-nio-extras-1.4.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_nio_extras/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_log": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-log/archive/1.4.4.tar.gz"
-              ],
-              "sha256": "48fe66426c784c0c20031f15dc17faf9f4c9037c192bfac2f643f65cb2321ba0",
-              "strip_prefix": "swift-log-1.4.4/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_log/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_nio_ssl": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-nio-ssl/archive/2.23.0.tar.gz"
-              ],
-              "sha256": "4787c63f61dd04d99e498adc3d1a628193387e41efddf8de19b8db04544d016d",
-              "strip_prefix": "swift-nio-ssl-2.23.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_nio_ssl/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_collections": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-collections/archive/1.0.4.tar.gz"
-              ],
-              "sha256": "d9e4c8a91c60fb9c92a04caccbb10ded42f4cb47b26a212bc6b39cc390a4b096",
-              "strip_prefix": "swift-collections-1.0.4/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_collections/BUILD.overlay"
-            }
-          },
-          "com_github_apple_swift_atomics": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "urls": [
-                "https://github.com/apple/swift-atomics/archive/1.1.0.tar.gz"
-              ],
-              "sha256": "1bee7f469f7e8dc49f11cfa4da07182fbc79eab000ec2c17bfdce468c5d276fb",
-              "strip_prefix": "swift-atomics-1.1.0/",
-              "build_file": "@@rules_swift+//third_party:com_github_apple_swift_atomics/BUILD.overlay"
-            }
-          },
-          "build_bazel_rules_swift_index_import": {
-            "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_archive",
-            "attributes": {
-              "build_file": "@@rules_swift+//third_party:build_bazel_rules_swift_index_import/BUILD.overlay",
-              "canonical_id": "index-import-5.8",
-              "urls": [
-                "https://github.com/MobileNativeFoundation/index-import/releases/download/5.8.0.1/index-import.tar.gz"
-              ],
-              "sha256": "28c1ffa39d99e74ed70623899b207b41f79214c498c603915aef55972a851a15"
-            }
-          },
-          "build_bazel_rules_swift_local_config": {
-            "repoRuleId": "@@rules_swift+//swift/internal:swift_autoconfiguration.bzl%swift_autoconfiguration",
-            "attributes": {}
-          }
-        },
-        "recordedRepoMappingEntries": [
-          [
-            "rules_swift+",
-            "bazel_tools",
-            "bazel_tools"
-          ],
-          [
-            "rules_swift+",
-            "build_bazel_rules_swift",
-            "rules_swift+"
-          ]
-        ]
+        }
       }
     }
   },
-  "facts": {}
+  "facts": {
+    "@@rules_go+//go:extensions.bzl%go_sdk": {
+      "1.22.4": {
+        "aix_ppc64": [
+          "go1.22.4.aix-ppc64.tar.gz",
+          "b9647fa9fc83a0cc5d4f092a19eaeaecf45f063a5aa7d4962fde65aeb7ae6ce1"
+        ],
+        "darwin_amd64": [
+          "go1.22.4.darwin-amd64.tar.gz",
+          "c95967f50aa4ace34af0c236cbdb49a9a3e80ee2ad09d85775cb4462a5c19ed3"
+        ],
+        "darwin_arm64": [
+          "go1.22.4.darwin-arm64.tar.gz",
+          "242b78dc4c8f3d5435d28a0d2cec9b4c1aa999b601fb8aa59fb4e5a1364bf827"
+        ],
+        "dragonfly_amd64": [
+          "go1.22.4.dragonfly-amd64.tar.gz",
+          "f2fbb51af4719d3616efb482d6ed2b96579b474156f85a7ddc6f126764feec4b"
+        ],
+        "freebsd_386": [
+          "go1.22.4.freebsd-386.tar.gz",
+          "7c54884bb9f274884651d41e61d1bc12738863ad1497e97ea19ad0e9aa6bf7b5"
+        ],
+        "freebsd_amd64": [
+          "go1.22.4.freebsd-amd64.tar.gz",
+          "88d44500e1701dd35797619774d6dd51bf60f45a8338b0a82ddc018e4e63fb78"
+        ],
+        "freebsd_arm64": [
+          "go1.22.4.freebsd-arm64.tar.gz",
+          "726dc093cf020277be45debf03c3b02b43c2efb3e2a5d4fba8f52579d65327dc"
+        ],
+        "freebsd_armv6l": [
+          "go1.22.4.freebsd-arm.tar.gz",
+          "3d9efe47db142a22679aba46b1772e3900b0d87ae13bd2b3bc80dbf2ac0b2cd6"
+        ],
+        "freebsd_riscv64": [
+          "go1.22.4.freebsd-riscv64.tar.gz",
+          "5f6b67e5e32f1d6ccb2d4dcb44934a5e2e870a877ba7443d86ec43cfc28afa71"
+        ],
+        "illumos_amd64": [
+          "go1.22.4.illumos-amd64.tar.gz",
+          "d56ecc2f85b6418a21ef83879594d0c42ab4f65391a676bb12254870e6690d63"
+        ],
+        "linux_386": [
+          "go1.22.4.linux-386.tar.gz",
+          "47a2a8d249a91eb8605c33bceec63aedda0441a43eac47b4721e3975ff916cec"
+        ],
+        "linux_amd64": [
+          "go1.22.4.linux-amd64.tar.gz",
+          "ba79d4526102575196273416239cca418a651e049c2b099f3159db85e7bade7d"
+        ],
+        "linux_arm64": [
+          "go1.22.4.linux-arm64.tar.gz",
+          "a8e177c354d2e4a1b61020aca3562e27ea3e8f8247eca3170e3fa1e0c2f9e771"
+        ],
+        "linux_armv6l": [
+          "go1.22.4.linux-armv6l.tar.gz",
+          "e2b143fbacbc9cbd448e9ef41ac3981f0488ce849af1cf37e2341d09670661de"
+        ],
+        "linux_loong64": [
+          "go1.22.4.linux-loong64.tar.gz",
+          "e2ff9436e4b34bf6926b06d97916e26d67a909a2effec17967245900f0816f1d"
+        ],
+        "linux_mips": [
+          "go1.22.4.linux-mips.tar.gz",
+          "73f0dcc60458c4770593b05a7bc01cc0d31fc98f948c0c2334812c7a1f2fc3f1"
+        ],
+        "linux_mips64": [
+          "go1.22.4.linux-mips64.tar.gz",
+          "417af97fc2630a647052375768be4c38adcc5af946352ea5b28613ea81ca5d45"
+        ],
+        "linux_mips64le": [
+          "go1.22.4.linux-mips64le.tar.gz",
+          "7486e2d7dd8c98eb44df815ace35a7fe7f30b7c02326e3741bd934077508139b"
+        ],
+        "linux_mipsle": [
+          "go1.22.4.linux-mipsle.tar.gz",
+          "69479c8aad301e459a8365b40cad1074a0dbba5defb9291669f94809c4c4be6e"
+        ],
+        "linux_ppc64": [
+          "go1.22.4.linux-ppc64.tar.gz",
+          "dd238847e65bc3e2745caca475a5db6522a2fcf85cf6c38fc36a06642b19efd7"
+        ],
+        "linux_ppc64le": [
+          "go1.22.4.linux-ppc64le.tar.gz",
+          "a3e5834657ef92523f570f798fed42f1f87bc18222a16815ec76b84169649ec4"
+        ],
+        "linux_riscv64": [
+          "go1.22.4.linux-riscv64.tar.gz",
+          "56a827ff7dc6245bcd7a1e9288dffaa1d8b0fd7468562264c1523daf3b4f1b4a"
+        ],
+        "linux_s390x": [
+          "go1.22.4.linux-s390x.tar.gz",
+          "7590c3e278e2dc6040aae0a39da3ca1eb2e3921673a7304cc34d588c45889eec"
+        ],
+        "netbsd_386": [
+          "go1.22.4.netbsd-386.tar.gz",
+          "ddd2eebe34471a2502de6c5dad04ab27c9fc80cbde7a9ad5b3c66ecec4504e1d"
+        ],
+        "netbsd_amd64": [
+          "go1.22.4.netbsd-amd64.tar.gz",
+          "33af79f6f935f6fbacc5d23876450b3567b79348fc065beef8e64081127dd234"
+        ],
+        "netbsd_arm64": [
+          "go1.22.4.netbsd-arm64.tar.gz",
+          "c9a2971dec9f6d320c6f2b049b2353c6d0a2d35e87b8a4b2d78a2f0d62545f8e"
+        ],
+        "netbsd_armv6l": [
+          "go1.22.4.netbsd-arm.tar.gz",
+          "fa3550ebd5375a70b3bcd342b5a71f4bd271dcbbfaf4eabefa2144ab5d8924b6"
+        ],
+        "openbsd_386": [
+          "go1.22.4.openbsd-386.tar.gz",
+          "d21af022331bfdc2b5b161d616c3a1a4573d33cf7a30416ee509a8f3641deb47"
+        ],
+        "openbsd_amd64": [
+          "go1.22.4.openbsd-amd64.tar.gz",
+          "72c0094c43f7e5722ec49c2a3e9dfa7a1123ac43a5f3a63eecf3e3795d3ff0ae"
+        ],
+        "openbsd_arm64": [
+          "go1.22.4.openbsd-arm64.tar.gz",
+          "a7ab8d4e0b02bf06ed144ba42c61c0e93ee00f2b433415dfd4ad4b6e79f31650"
+        ],
+        "openbsd_armv6l": [
+          "go1.22.4.openbsd-arm.tar.gz",
+          "1096831ea3c5ea3ca57d14251d9eda3786889531eb40d7d6775dcaa324d4b065"
+        ],
+        "openbsd_ppc64": [
+          "go1.22.4.openbsd-ppc64.tar.gz",
+          "9716327c8a628358798898dc5148c49dbbeb5196bf2cbf088e550721a6e4f60b"
+        ],
+        "plan9_386": [
+          "go1.22.4.plan9-386.tar.gz",
+          "a8dd4503c95c32a502a616ab78870a19889c9325fe9bd31eb16dd69346e4bfa8"
+        ],
+        "plan9_amd64": [
+          "go1.22.4.plan9-amd64.tar.gz",
+          "5423a25808d76fe5aca8607a2e5ac5673abf45446b168cb5e9d8519ee9fe39a1"
+        ],
+        "plan9_armv6l": [
+          "go1.22.4.plan9-arm.tar.gz",
+          "6af939ad583f5c85c09c53728ab7d38c3cc2b39167562d6c18a07c5c6608b370"
+        ],
+        "solaris_amd64": [
+          "go1.22.4.solaris-amd64.tar.gz",
+          "e8cabe69c03085725afdb32a6f9998191a3e55a747b270d835fd05000d56abba"
+        ],
+        "windows_386": [
+          "go1.22.4.windows-386.zip",
+          "aca4e2c37278a10f1c70dd0df142f7d66b50334fcee48978d409202d308d6d25"
+        ],
+        "windows_amd64": [
+          "go1.22.4.windows-amd64.zip",
+          "26321c4d945a0035d8a5bc4a1965b0df401ff8ceac66ce2daadabf9030419a98"
+        ],
+        "windows_arm64": [
+          "go1.22.4.windows-arm64.zip",
+          "8a2daa9ea28cbdafddc6171aefed384f4e5b6e714fb52116fe9ed25a132f37ed"
+        ],
+        "windows_armv6l": [
+          "go1.22.4.windows-arm.zip",
+          "5fcd0671a49cecf39b41021621ee1b6e7aa1370f37122b72e80d4fd4185833b6"
+        ]
+      },
+      "1.25.0": {
+        "aix_ppc64": [
+          "go1.25.0.aix-ppc64.tar.gz",
+          "e5234a7dac67bc86c528fe9752fc9d63557918627707a733ab4cac1a6faed2d4"
+        ],
+        "darwin_amd64": [
+          "go1.25.0.darwin-amd64.tar.gz",
+          "5bd60e823037062c2307c71e8111809865116714d6f6b410597cf5075dfd80ef"
+        ],
+        "darwin_arm64": [
+          "go1.25.0.darwin-arm64.tar.gz",
+          "544932844156d8172f7a28f77f2ac9c15a23046698b6243f633b0a0b00c0749c"
+        ],
+        "dragonfly_amd64": [
+          "go1.25.0.dragonfly-amd64.tar.gz",
+          "5ed3cf9a810a1483822538674f1336c06b51aa1b94d6d545a1a0319a48177120"
+        ],
+        "freebsd_386": [
+          "go1.25.0.freebsd-386.tar.gz",
+          "abea5d5c6697e6b5c224731f2158fe87c602996a2a233ac0c4730cd57bf8374e"
+        ],
+        "freebsd_amd64": [
+          "go1.25.0.freebsd-amd64.tar.gz",
+          "86e6fe0a29698d7601c4442052dac48bd58d532c51cccb8f1917df648138730b"
+        ],
+        "freebsd_arm": [
+          "go1.25.0.freebsd-arm.tar.gz",
+          "d90b78e41921f72f30e8bbc81d9dec2cff7ff384a33d8d8debb24053e4336bfe"
+        ],
+        "freebsd_arm64": [
+          "go1.25.0.freebsd-arm64.tar.gz",
+          "451d0da1affd886bfb291b7c63a6018527b269505db21ce6e14724f22ab0662e"
+        ],
+        "freebsd_riscv64": [
+          "go1.25.0.freebsd-riscv64.tar.gz",
+          "7b565f76bd8bda46549eeaaefe0e53b251e644c230577290c0f66b1ecdb3cdbe"
+        ],
+        "illumos_amd64": [
+          "go1.25.0.illumos-amd64.tar.gz",
+          "b1e1fdaab1ad25aa1c08d7a36c97d45d74b98b89c3f78c6d2145f77face54a2c"
+        ],
+        "linux_386": [
+          "go1.25.0.linux-386.tar.gz",
+          "8c602dd9d99bc9453b3995d20ce4baf382cc50855900a0ece5de9929df4a993a"
+        ],
+        "linux_amd64": [
+          "go1.25.0.linux-amd64.tar.gz",
+          "2852af0cb20a13139b3448992e69b868e50ed0f8a1e5940ee1de9e19a123b613"
+        ],
+        "linux_arm64": [
+          "go1.25.0.linux-arm64.tar.gz",
+          "05de75d6994a2783699815ee553bd5a9327d8b79991de36e38b66862782f54ae"
+        ],
+        "linux_armv6l": [
+          "go1.25.0.linux-armv6l.tar.gz",
+          "a5a8f8198fcf00e1e485b8ecef9ee020778bf32a408a4e8873371bfce458cd09"
+        ],
+        "linux_loong64": [
+          "go1.25.0.linux-loong64.tar.gz",
+          "cab86b1cf761b1cb3bac86a8877cfc92e7b036fc0d3084123d77013d61432afc"
+        ],
+        "linux_mips": [
+          "go1.25.0.linux-mips.tar.gz",
+          "d66b6fb74c3d91b9829dc95ec10ca1f047ef5e89332152f92e136cf0e2da5be1"
+        ],
+        "linux_mips64": [
+          "go1.25.0.linux-mips64.tar.gz",
+          "4082e4381a8661bc2a839ff94ba3daf4f6cde20f8fb771b5b3d4762dc84198a2"
+        ],
+        "linux_mips64le": [
+          "go1.25.0.linux-mips64le.tar.gz",
+          "70002c299ec7f7175ac2ef673b1b347eecfa54ae11f34416a6053c17f855afcc"
+        ],
+        "linux_mipsle": [
+          "go1.25.0.linux-mipsle.tar.gz",
+          "b00a3a39eff099f6df9f1c7355bf28e4589d0586f42d7d4a394efb763d145a73"
+        ],
+        "linux_ppc64": [
+          "go1.25.0.linux-ppc64.tar.gz",
+          "df166f33bd98160662560a72ff0b4ba731f969a80f088922bddcf566a88c1ec1"
+        ],
+        "linux_ppc64le": [
+          "go1.25.0.linux-ppc64le.tar.gz",
+          "0f18a89e7576cf2c5fa0b487a1635d9bcbf843df5f110e9982c64df52a983ad0"
+        ],
+        "linux_riscv64": [
+          "go1.25.0.linux-riscv64.tar.gz",
+          "c018ff74a2c48d55c8ca9b07c8e24163558ffec8bea08b326d6336905d956b67"
+        ],
+        "linux_s390x": [
+          "go1.25.0.linux-s390x.tar.gz",
+          "34e5a2e19f2292fbaf8783e3a241e6e49689276aef6510a8060ea5ef54eee408"
+        ],
+        "netbsd_386": [
+          "go1.25.0.netbsd-386.tar.gz",
+          "f8586cdb7aa855657609a5c5f6dbf523efa00c2bbd7c76d3936bec80aa6c0aba"
+        ],
+        "netbsd_amd64": [
+          "go1.25.0.netbsd-amd64.tar.gz",
+          "ae8dc1469385b86a157a423bb56304ba45730de8a897615874f57dd096db2c2a"
+        ],
+        "netbsd_arm": [
+          "go1.25.0.netbsd-arm.tar.gz",
+          "1ff7e4cc764425fc9dd6825eaee79d02b3c7cafffbb3691687c8d672ade76cb7"
+        ],
+        "netbsd_arm64": [
+          "go1.25.0.netbsd-arm64.tar.gz",
+          "e1b310739f26724216aa6d7d7208c4031f9ff54c9b5b9a796ddc8bebcb4a5f16"
+        ],
+        "openbsd_386": [
+          "go1.25.0.openbsd-386.tar.gz",
+          "4802a9b20e533da91adb84aab42e94aa56cfe3e5475d0550bed3385b182e69d8"
+        ],
+        "openbsd_amd64": [
+          "go1.25.0.openbsd-amd64.tar.gz",
+          "c016cd984bebe317b19a4f297c4f50def120dc9788490540c89f28e42f1dabe1"
+        ],
+        "openbsd_arm": [
+          "go1.25.0.openbsd-arm.tar.gz",
+          "a1e31d0bf22172ddde42edf5ec811ef81be43433df0948ece52fecb247ccfd8d"
+        ],
+        "openbsd_arm64": [
+          "go1.25.0.openbsd-arm64.tar.gz",
+          "343ea8edd8c218196e15a859c6072d0dd3246fbbb168481ab665eb4c4140458d"
+        ],
+        "openbsd_ppc64": [
+          "go1.25.0.openbsd-ppc64.tar.gz",
+          "694c14da1bcaeb5e3332d49bdc2b6d155067648f8fe1540c5de8f3cf8e157154"
+        ],
+        "openbsd_riscv64": [
+          "go1.25.0.openbsd-riscv64.tar.gz",
+          "aa510ad25cf54c06cd9c70b6d80ded69cb20188ac6e1735655eef29ff7e7885f"
+        ],
+        "plan9_386": [
+          "go1.25.0.plan9-386.tar.gz",
+          "46f8cef02086cf04bf186c5912776b56535178d4cb319cd19c9fdbdd29231986"
+        ],
+        "plan9_amd64": [
+          "go1.25.0.plan9-amd64.tar.gz",
+          "29b34391d84095e44608a228f63f2f88113a37b74a79781353ec043dfbcb427b"
+        ],
+        "plan9_arm": [
+          "go1.25.0.plan9-arm.tar.gz",
+          "0a047107d13ebe7943aaa6d54b1d7bbd2e45e68ce449b52915a818da715799c2"
+        ],
+        "solaris_amd64": [
+          "go1.25.0.solaris-amd64.tar.gz",
+          "9977f9e4351984364a3b2b78f8b88bfd1d339812356d5237678514594b7d3611"
+        ],
+        "windows_386": [
+          "go1.25.0.windows-386.zip",
+          "df9f39db82a803af0db639e3613a36681ab7a42866b1384b3f3a1045663961a7"
+        ],
+        "windows_amd64": [
+          "go1.25.0.windows-amd64.zip",
+          "89efb4f9b30812eee083cc1770fdd2913c14d301064f6454851428f9707d190b"
+        ],
+        "windows_arm64": [
+          "go1.25.0.windows-arm64.zip",
+          "27bab004c72b3d7bd05a69b6ec0fc54a309b4b78cc569dd963d8b3ec28bfdb8c"
+        ]
+      }
+    }
+  }
 }
diff --git a/NOTICE.md b/NOTICE.md
new file mode 100644
index 0000000..31e8ed9
--- /dev/null
+++ b/NOTICE.md
@@ -0,0 +1,41 @@
+# Notices for Eclipse JGit
+
+This content is produced and maintained by the Eclipse JGit project.
+
+* Project home: https://projects.eclipse.org/projects/technology.jgit
+
+## Trademarks
+
+JGit™ is a trademark of the Eclipse Foundation.
+
+## Copyright
+
+All content is the property of the respective authors or their employers. For
+more information regarding authorship of content, please consult the listed
+source code repository logs.
+
+## Declared Project Licenses
+
+This program and the accompanying materials are made available under the terms
+of the Eclipse Distribution License v1.0 which is available at
+https://www.eclipse.org/org/documents/edl-v10.php.
+
+SPDX-License-Identifier: BSD-3-Clause
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+* https://github.com/eclipse-jgit/.github
+* https://github.com/eclipse-jgit/jgit
+* https://github.com/eclipse-jgit/jgit-pipelines
+* https://github.com/eclipse-jgit/jgit-website
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/lib/BUILD b/lib/BUILD
index 20b85da..4ce0c1a 100644
--- a/lib/BUILD
+++ b/lib/BUILD
@@ -59,6 +59,7 @@
     visibility = [
         "//org.eclipse.jgit.lfs:__pkg__",
         "//org.eclipse.jgit.lfs.server:__pkg__",
+        "//org.eclipse.jgit.lfs.server.ee8:__pkg__",
     ],
     exports = ["@external_deps//:com_google_code_gson_gson"],
 )
@@ -68,6 +69,7 @@
     visibility = [
         "//org.eclipse.jgit.http.apache:__pkg__",
         "//org.eclipse.jgit.lfs.server.test:__pkg__",
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
         "//org.eclipse.jgit.pgm:__pkg__",
     ],
     exports = ["@external_deps//:org_apache_httpcomponents_httpclient"],
@@ -78,8 +80,11 @@
     visibility = [
         "//org.eclipse.jgit.http.apache:__pkg__",
         "//org.eclipse.jgit.http.test:__pkg__",
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
         "//org.eclipse.jgit.lfs.server:__pkg__",
+        "//org.eclipse.jgit.lfs.server.ee8:__pkg__",
         "//org.eclipse.jgit.lfs.server.test:__pkg__",
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
         "//org.eclipse.jgit.pgm:__pkg__",
     ],
     exports = ["@external_deps//:org_apache_httpcomponents_httpcore"],
@@ -177,6 +182,35 @@
 )
 
 java_library(
+    name = "jetty-ee8-nested",
+    testonly = 1,
+    visibility = ["//org.eclipse.jgit.junit.http.ee8:__pkg__"],
+    exports = ["@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_nested"],
+)
+
+java_library(
+    name = "jetty-security-ee8",
+    testonly = 1,
+    visibility = [
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
+    ],
+    exports = ["@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_security"],
+)
+
+java_library(
+    name = "jetty-servlet-ee8",
+    testonly = 1,
+    visibility = [
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
+    ],
+    exports = ["@external_deps//:org_eclipse_jetty_ee8_jetty_ee8_servlet"],
+)
+
+java_library(
     name = "jetty-util",
     # TODO: This should be testonly but org.eclipse.jgit.pgm depends on it.
     visibility = ["//visibility:public"],
@@ -264,10 +298,10 @@
     testonly = 1,
     visibility = ["//visibility:public"],
     exports = [
-        "@external_deps//:net_bytebuddy_byte_buddy_agent",
-        "@external_deps//:net_bytebuddy_byte_buddy",
-        "@external_deps//:org_hamcrest_hamcrest",
         "@external_deps//:junit_junit",
+        "@external_deps//:net_bytebuddy_byte_buddy",
+        "@external_deps//:net_bytebuddy_byte_buddy_agent",
+        "@external_deps//:org_hamcrest_hamcrest",
         "@external_deps//:org_mockito_mockito_core",
         "@external_deps//:org_objenesis_objenesis",
     ],
@@ -278,8 +312,8 @@
     testonly = 1,
     visibility = ["//visibility:public"],
     exports = [
-        "@external_deps//:net_bytebuddy_byte_buddy_agent",
         "@external_deps//:net_bytebuddy_byte_buddy",
+        "@external_deps//:net_bytebuddy_byte_buddy_agent",
         "@external_deps//:org_mockito_mockito_core",
         "@external_deps//:org_objenesis_objenesis",
     ],
@@ -295,12 +329,13 @@
 )
 
 java_library(
-    name = "servlet-api",
+    name = "jakarta-servlet-api",
     visibility = [
         "//org.eclipse.jgit.http.apache:__pkg__",
         "//org.eclipse.jgit.http.server:__pkg__",
         "//org.eclipse.jgit.http.test:__pkg__",
         "//org.eclipse.jgit.junit.http:__pkg__",
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
         "//org.eclipse.jgit.lfs.server:__pkg__",
         "//org.eclipse.jgit.lfs.server.test:__pkg__",
         "//org.eclipse.jgit.pgm:__pkg__",
@@ -309,6 +344,18 @@
 )
 
 java_library(
+    name = "javax-servlet-api",
+    visibility = [
+        "//org.eclipse.jgit.http.server.ee8:__pkg__",
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
+        "//org.eclipse.jgit.lfs.server.ee8:__pkg__",
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
+    ],
+    exports = ["@external_deps//:javax_servlet_javax_servlet_api"],
+)
+
+java_library(
     name = "slf4j-api",
     visibility = ["//visibility:public"],
     exports = ["@external_deps//:org_slf4j_slf4j_api"],
diff --git a/lib/jmh/BUILD b/lib/jmh/BUILD
index 2b15300..e6d3977 100644
--- a/lib/jmh/BUILD
+++ b/lib/jmh/BUILD
@@ -4,9 +4,9 @@
     name = "jmh",
     visibility = ["//visibility:public"],
     exports = [
-        "@external_deps//:org_openjdk_jmh_jmh_generator_annprocess",
-        "@external_deps//:org_openjdk_jmh_jmh_core",
         "@external_deps//:net_sf_jopt_simple_jopt_simple",
         "@external_deps//:org_apache_commons_commons_math3",
+        "@external_deps//:org_openjdk_jmh_jmh_core",
+        "@external_deps//:org_openjdk_jmh_jmh_generator_annprocess",
     ],
 )
diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
index 8b99ee9..29a2d3e 100644
--- a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
@@ -5,14 +5,14 @@
 Automatic-Module-Name: org.eclipse.jgit.ant.test
 Bundle-SymbolicName: org.eclipse.jgit.ant.test
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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.tools.ant,
- org.eclipse.jgit.ant.tasks;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.ant.tasks;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)"
diff --git a/org.eclipse.jgit.ant.test/pom.xml b/org.eclipse.jgit.ant.test/pom.xml
index 1ed2fb9..f9caf94 100644
--- a/org.eclipse.jgit.ant.test/pom.xml
+++ b/org.eclipse.jgit.ant.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ant.test</artifactId>
diff --git a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
index e10e385..ce0918d 100644
--- a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
@@ -3,14 +3,14 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ant
 Bundle-SymbolicName: org.eclipse.jgit.ant
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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.tools.ant,
-  org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)"
+  org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)"
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.ant;version="7.7.0",
- org.eclipse.jgit.ant.tasks;version="7.7.0";
+Export-Package: org.eclipse.jgit.ant;version="7.8.0",
+ org.eclipse.jgit.ant.tasks;version="7.8.0";
   uses:="org.apache.tools.ant,
    org.apache.tools.ant.types"
diff --git a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
index 08d4b66..b598163 100644
--- a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.ant - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ant.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.ant;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.ant;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml
index 8863da9..f082013 100644
--- a/org.eclipse.jgit.ant/pom.xml
+++ b/org.eclipse.jgit.ant/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ant</artifactId>
diff --git a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
index 9f42812..6052ba7 100644
--- a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.archive
 Bundle-SymbolicName: org.eclipse.jgit.archive
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -14,18 +14,18 @@
  org.apache.commons.compress.compressors.bzip2;version="[1.4,2.0)",
  org.apache.commons.compress.compressors.gzip;version="[1.4,2.0)",
  org.apache.commons.compress.compressors.xz;version="[1.4,2.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.osgi.framework;version="[1.3.0,2.0.0)",
  org.tukaani.xz
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.jgit.archive.FormatActivator
-Export-Package: org.eclipse.jgit.archive;version="7.7.0";
+Export-Package: org.eclipse.jgit.archive;version="7.8.0";
   uses:="org.apache.commons.compress.archivers,
    org.osgi.framework,
    org.eclipse.jgit.api,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.archive.internal;version="7.7.0";x-internal:=true
+ org.eclipse.jgit.archive.internal;version="7.8.0";x-internal:=true
diff --git a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
index 88f51d1..4179521 100644
--- a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.archive - Sources
 Bundle-SymbolicName: org.eclipse.jgit.archive.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.archive;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.archive;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml
index a04e9c6..cd93dc0 100644
--- a/org.eclipse.jgit.archive/pom.xml
+++ b/org.eclipse.jgit.archive/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.archive</artifactId>
diff --git a/org.eclipse.jgit.benchmarks/BUILD b/org.eclipse.jgit.benchmarks/BUILD
index 7c311e7..91ceb7f 100644
--- a/org.eclipse.jgit.benchmarks/BUILD
+++ b/org.eclipse.jgit.benchmarks/BUILD
@@ -6,8 +6,8 @@
 
 jmh_java_benchmarks(
     name = "benchmarks",
-    srcs = SRCS,
     testonly = 1,
+    srcs = SRCS,
     deps = [
         "//lib:javaewah",
         "//lib:junit",
diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml
index 53d1bfd..0313e52 100644
--- a/org.eclipse.jgit.benchmarks/pom.xml
+++ b/org.eclipse.jgit.benchmarks/pom.xml
@@ -16,7 +16,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.benchmarks</artifactId>
diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml
index b02657f..6a12964 100644
--- a/org.eclipse.jgit.coverage/pom.xml
+++ b/org.eclipse.jgit.coverage/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -27,88 +27,88 @@
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.archive</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.apache</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.server</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ui</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
index d9d1b0f..8bed084 100644
--- a/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.gpg.bc.test
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -14,9 +14,9 @@
  org.bouncycastle.openpgp.operator;version="[1.84.0,2.0.0)",
  org.bouncycastle.openpgp.operator.jcajce;version="[1.84.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.84.0,2.0.0)",
- org.eclipse.jgit.gpg.bc.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.gpg.bc.internal.keys;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.sha1;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.gpg.bc.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.sha1;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.gpg.bc.test/pom.xml b/org.eclipse.jgit.gpg.bc.test/pom.xml
index 2ed7ba3..b4e0964 100644
--- a/org.eclipse.jgit.gpg.bc.test/pom.xml
+++ b/org.eclipse.jgit.gpg.bc.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc.test</artifactId>
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
index d6d826c..80ae7fc 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
@@ -3,10 +3,10 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.gpg.bc
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc;singleton:=true
-Fragment-Host: org.eclipse.jgit;bundle-version="[7.7.0,7.8.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[7.8.0,7.9.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/gpg_bc
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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.bouncycastle.asn1;version="[1.84.0,2.0.0)",
@@ -27,5 +27,5 @@
  org.bouncycastle.openpgp.operator.jcajce;version="[1.84.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.84.0,2.0.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
-Export-Package: org.eclipse.jgit.gpg.bc.internal;version="7.7.0";x-friends:="org.eclipse.jgit.gpg.bc.test",
- org.eclipse.jgit.gpg.bc.internal.keys;version="7.7.0";x-friends:="org.eclipse.jgit.gpg.bc.test"
+Export-Package: org.eclipse.jgit.gpg.bc.internal;version="7.8.0";x-friends:="org.eclipse.jgit.gpg.bc.test",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="7.8.0";x-friends:="org.eclipse.jgit.gpg.bc.test"
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
index 556d256..7dd65e2 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.gpg.bc - Sources
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.gpg.bc/pom.xml b/org.eclipse.jgit.gpg.bc/pom.xml
index e6b2063..74d9d1a 100644
--- a/org.eclipse.jgit.gpg.bc/pom.xml
+++ b/org.eclipse.jgit.gpg.bc/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc</artifactId>
diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
index 0688783..30d22e1 100644
--- a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.apache
 Bundle-SymbolicName: org.eclipse.jgit.http.apache
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
 Bundle-Localization: OSGI-INF/l10n/plugin
@@ -27,11 +27,11 @@
  org.apache.http.impl.conn;version="[4.4.0,5.0.0)",
  org.apache.http.params;version="[4.3.0,5.0.0)",
  org.apache.http.ssl;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)"
-Export-Package: org.eclipse.jgit.transport.http.apache;version="7.7.0";
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)"
+Export-Package: org.eclipse.jgit.transport.http.apache;version="7.8.0";
   uses:="org.apache.http.client,
    org.eclipse.jgit.transport.http,
    org.apache.http.entity,
diff --git a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
index 03c16b8..9c108b3 100644
--- a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.http.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml
index 51be72e..5ae175b 100644
--- a/org.eclipse.jgit.http.apache/pom.xml
+++ b/org.eclipse.jgit.http.apache/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.apache</artifactId>
diff --git a/org.eclipse.jgit.http.server.ee8/BUILD b/org.eclipse.jgit.http.server.ee8/BUILD
new file mode 100644
index 0000000..df39628
--- /dev/null
+++ b/org.eclipse.jgit.http.server.ee8/BUILD
@@ -0,0 +1,27 @@
+load("@rules_java//java:defs.bzl", "java_library")
+load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar")
+
+package(default_visibility = ["//visibility:public"])
+
+transform_srcjar(
+    name = "jgit-http-server-ee8-srcs",
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.http.server:srcs"],
+    src_prefix = "org.eclipse.jgit.http.server/src/",
+)
+
+filegroup(
+    name = "jgit-servlet-ee8-srcjar",
+    srcs = [":jgit-http-server-ee8-srcs"],
+)
+
+java_library(
+    name = "jgit-servlet-ee8",
+    srcs = [":jgit-http-server-ee8-srcs"],
+    resource_strip_prefix = "org.eclipse.jgit.http.server/resources",
+    resources = ["//org.eclipse.jgit.http.server:jgit-servlet-resources"],
+    deps = [
+        "//lib:javax-servlet-api",
+        "//org.eclipse.jgit:jgit",
+    ],
+)
diff --git a/org.eclipse.jgit.http.server/BUILD b/org.eclipse.jgit.http.server/BUILD
index a0dae48..f6b4a10 100644
--- a/org.eclipse.jgit.http.server/BUILD
+++ b/org.eclipse.jgit.http.server/BUILD
@@ -3,17 +3,26 @@
 package(default_visibility = ["//visibility:public"])
 
 filegroup(
+    name = "srcs",
+    srcs = glob(["src/**/*.java"]),
+    visibility = [
+        "//org.eclipse.jgit.http.server.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
     name = "jgit-servlet-resources",
     srcs = glob(["resources/**"]),
 )
 
 java_library(
     name = "jgit-servlet",
-    srcs = glob(["src/**/*.java"]),
+    srcs = [":srcs"],
     resource_strip_prefix = "org.eclipse.jgit.http.server/resources",
     resources = [":jgit-servlet-resources"],
     deps = [
-        "//lib:servlet-api",
+        "//lib:jakarta-servlet-api",
         # We want these deps to be provided_deps
         "//org.eclipse.jgit:jgit",
     ],
diff --git a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
index 02059c1..245289b 100644
--- a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
@@ -3,31 +3,31 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.server
 Bundle-SymbolicName: org.eclipse.jgit.http.server
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 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
-Export-Package: org.eclipse.jgit.http.server;version="7.7.0",
- org.eclipse.jgit.http.server.glue;version="7.7.0";
+Export-Package: org.eclipse.jgit.http.server;version="7.8.0",
+ org.eclipse.jgit.http.server.glue;version="7.8.0";
   uses:="jakarta.servlet,
   	jakarta.servlet.http",
- org.eclipse.jgit.http.server.resolver;version="7.7.0";
+ org.eclipse.jgit.http.server.resolver;version="7.8.0";
   uses:="jakarta.servlet.http
    org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.transport,
 Import-Package: jakarta.servlet;version="[6.0.0,7.0.0)",
  jakarta.servlet.http;version="[6.0.0,7.0.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.parser;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.resolver;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)"
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.resolver;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)"
diff --git a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
index 520c2fb..6bb08e3 100644
--- a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.http.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml
index 2460ea9..f9e847b 100644
--- a/org.eclipse.jgit.http.server/pom.xml
+++ b/org.eclipse.jgit.http.server/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.server</artifactId>
diff --git a/org.eclipse.jgit.http.test.ee8/BUILD b/org.eclipse.jgit.http.test.ee8/BUILD
new file mode 100644
index 0000000..a6a5506
--- /dev/null
+++ b/org.eclipse.jgit.http.test.ee8/BUILD
@@ -0,0 +1,84 @@
+load("@rules_java//java:defs.bzl", "java_library")
+load("@com_googlesource_gerrit_bazlets//tools:junit.bzl", "junit_tests")
+load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar")
+
+transform_srcjar(
+    name = "helpers-srcs",
+    testonly = 1,
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.http.test:helper-srcs"],
+    src_prefix = "org.eclipse.jgit.http.test/src/",
+    visibility = ["//tools/jgit-ee8:__pkg__"],
+)
+
+transform_srcjar(
+    name = "test-srcs",
+    testonly = 1,
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.http.test:test-srcs"],
+    src_prefix = "org.eclipse.jgit.http.test/tst/",
+    visibility = ["//tools/jgit-ee8:__pkg__"],
+)
+
+transform_srcjar(
+    name = "server-unit-test-srcs",
+    testonly = 1,
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.http.test:http-server-unit-test-srcs"],
+    src_prefix = "org.eclipse.jgit.http.test/tst/",
+)
+
+# Fast slice for the server utility tests; the default EE8 suite runs the full
+# HTTP test target, which already includes these classes.
+junit_tests(
+    name = "server_unit",
+    suite_srcs = ["//org.eclipse.jgit.http.test:http-server-unit-test-srcs"],
+    tags = ["http"],
+    srcs = [":server-unit-test-srcs"],
+    deps = [
+        "//lib:junit",
+        "//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8",
+        "//org.eclipse.jgit:jgit",
+        "//org.eclipse.jgit.junit:junit",
+    ],
+)
+
+junit_tests(
+    name = "http",
+    suite_srcs = ["//org.eclipse.jgit.http.test:test-srcs"],
+    tags = ["http"],
+    srcs = [":test-srcs"],
+    deps = [
+        ":helpers",
+        "//lib:commons-logging",
+        "//lib:httpcore",
+        "//lib:javax-servlet-api",
+        "//lib:jetty-http",
+        "//lib:jetty-io",
+        "//lib:jetty-security",
+        "//lib:jetty-security-ee8",
+        "//lib:jetty-server",
+        "//lib:jetty-servlet-ee8",
+        "//lib:jetty-util",
+        "//lib:junit",
+        "//lib:slf4j-api",
+        "//lib:slf4j-simple",
+        "//org.eclipse.jgit.http.apache:http-apache",
+        "//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8",
+        "//org.eclipse.jgit:jgit",
+        "//org.eclipse.jgit.junit.http.ee8:junit-http-ee8",
+        "//org.eclipse.jgit.junit:junit",
+    ],
+)
+
+java_library(
+    name = "helpers",
+    testonly = 1,
+    srcs = [":helpers-srcs"],
+    deps = [
+        "//lib:javax-servlet-api",
+        "//lib:junit",
+        "//org.eclipse.jgit:jgit",
+        "//org.eclipse.jgit.junit:junit",
+    ],
+)
diff --git a/org.eclipse.jgit.http.test/BUILD b/org.eclipse.jgit.http.test/BUILD
index 732b4fa..cb6a738 100644
--- a/org.eclipse.jgit.http.test/BUILD
+++ b/org.eclipse.jgit.http.test/BUILD
@@ -4,14 +4,52 @@
 )
 load("@rules_java//java:defs.bzl", "java_library")
 
+HTTP_HELPER_SRCS = glob(["src/**/*.java"])
+
+HTTP_TEST_SRCS = glob(["tst/**/*.java"])
+
+HTTP_SERVER_UNIT_TEST_SRCS = [
+    "tst/org/eclipse/jgit/http/server/ClientVersionUtilTest.java",
+    "tst/org/eclipse/jgit/http/server/RootLocaleTest.java",
+    "tst/org/eclipse/jgit/http/server/ServletUtilsTest.java",
+]
+
+filegroup(
+    name = "helper-srcs",
+    testonly = 1,
+    srcs = HTTP_HELPER_SRCS,
+    visibility = [
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
+    name = "test-srcs",
+    testonly = 1,
+    srcs = HTTP_TEST_SRCS,
+    visibility = [
+        "//org.eclipse.jgit.http.test.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
+    name = "http-server-unit-test-srcs",
+    testonly = 1,
+    srcs = HTTP_SERVER_UNIT_TEST_SRCS,
+    visibility = ["//org.eclipse.jgit.http.test.ee8:__pkg__"],
+)
+
 junit_tests(
     name = "http",
-    srcs = glob(["tst/**/*.java"]),
+    srcs = HTTP_TEST_SRCS,
     tags = ["http"],
     deps = [
         ":helpers",
         "//lib:commons-logging",
         "//lib:httpcore",
+        "//lib:jakarta-servlet-api",
         "//lib:jetty-http",
         "//lib:jetty-io",
         "//lib:jetty-security",
@@ -19,7 +57,6 @@
         "//lib:jetty-servlet",
         "//lib:jetty-util",
         "//lib:junit",
-        "//lib:servlet-api",
         "//lib:slf4j-api",
         "//lib:slf4j-simple",
         "//org.eclipse.jgit.http.apache:http-apache",
@@ -33,10 +70,10 @@
 java_library(
     name = "helpers",
     testonly = 1,
-    srcs = glob(["src/**/*.java"]),
+    srcs = HTTP_HELPER_SRCS,
     deps = [
+        "//lib:jakarta-servlet-api",
         "//lib:junit",
-        "//lib:servlet-api",
         "//org.eclipse.jgit:jgit",
         "//org.eclipse.jgit.junit:junit",
     ],
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
index d192553..c7874e3 100644
--- a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.test
 Bundle-SymbolicName: org.eclipse.jgit.http.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -28,26 +28,26 @@
  org.eclipse.jetty.util.component;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.security;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.thread;version="[12.0.0,13.0.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.http.server;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.http.server.glue;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.http.server.resolver;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http.apache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.resolver;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.http.server;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.http.server.glue;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.http.server.resolver;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http.apache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.resolver;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml
index 310f87f..66972ee 100644
--- a/org.eclipse.jgit.http.test/pom.xml
+++ b/org.eclipse.jgit.http.test/pom.xml
@@ -18,7 +18,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.test</artifactId>
diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
index 3937627..2737a49 100644
--- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
+++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/HttpClientTests.java
@@ -41,7 +41,7 @@
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.junit.TestRepository;
 import org.eclipse.jgit.junit.http.AccessEvent;
-import org.eclipse.jgit.junit.http.AppServer;
+import org.eclipse.jgit.junit.http.AppServerBase;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.RefUpdate;
@@ -266,12 +266,12 @@ public void testListRemote_Dumb_Auth() throws Exception {
 		Repository dst = createBareRepository();
 		try (Transport t = Transport.open(dst, dumbAuthBasicURI)) {
 			t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
-					AppServer.username, AppServer.password));
+					AppServerBase.username, AppServerBase.password));
 			t.openFetch().close();
 		}
 		try (Transport t = Transport.open(dst, dumbAuthBasicURI)) {
 			t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
-					AppServer.username, ""));
+					AppServerBase.username, ""));
 			try {
 				t.openFetch();
 				fail("connection opened even info/refs needs auth basic and we provide wrong password");
diff --git a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java
index b0d17ad..46a48f7 100644
--- a/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java
+++ b/org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java
@@ -68,6 +68,7 @@
 import org.eclipse.jgit.junit.TestRng;
 import org.eclipse.jgit.junit.http.AccessEvent;
 import org.eclipse.jgit.junit.http.AppServer;
+import org.eclipse.jgit.junit.http.AppServerBase;
 import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.NullProgressMonitor;
@@ -111,7 +112,7 @@ public class SmartClientSmartServerTest extends AllProtocolsHttpTestCase {
 	private Repository remoteRepository;
 
 	private CredentialsProvider testCredentials = new UsernamePasswordCredentialsProvider(
-			AppServer.username, AppServer.password);
+			AppServerBase.username, AppServerBase.password);
 
 	private URIish remoteURI;
 
@@ -998,7 +999,7 @@ public void testInitialClone_WithPreAuthentication() throws Exception {
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password);
+					AppServerBase.username, AppServerBase.password);
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
 			assertTrue(dst.getObjectDatabase().has(A_txt));
 			assertEquals(B, dst.exactRef(master).getObjectId());
@@ -1018,7 +1019,7 @@ public void testInitialClone_WithPreAuthenticationCleared()
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password);
+					AppServerBase.username, AppServerBase.password);
 			((TransportHttp) t).setPreemptiveBasicAuthentication(null, null);
 			t.setCredentialsProvider(testCredentials);
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
@@ -1043,7 +1044,7 @@ public void testInitialClone_PreAuthenticationTooLate() throws Exception {
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password);
+					AppServerBase.username, AppServerBase.password);
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
 			assertTrue(dst.getObjectDatabase().has(A_txt));
 			assertEquals(B, dst.exactRef(master).getObjectId());
@@ -1053,7 +1054,7 @@ public void testInitialClone_PreAuthenticationTooLate() throws Exception {
 			assertFetchRequests(requests, 0);
 			assertThrows(IllegalStateException.class,
 					() -> ((TransportHttp) t).setPreemptiveBasicAuthentication(
-							AppServer.username, AppServer.password));
+							AppServerBase.username, AppServerBase.password));
 			assertThrows(IllegalStateException.class, () -> ((TransportHttp) t)
 					.setPreemptiveBasicAuthentication(null, null));
 		}
@@ -1066,7 +1067,7 @@ public void testInitialClone_WithWrongPreAuthenticationAndCredentialProvider()
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password + 'x');
+					AppServerBase.username, AppServerBase.password + 'x');
 			t.setCredentialsProvider(testCredentials);
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
 			assertTrue(dst.getObjectDatabase().has(A_txt));
@@ -1090,7 +1091,7 @@ public void testInitialClone_WithWrongPreAuthentication() throws Exception {
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password + 'x');
+					AppServerBase.username, AppServerBase.password + 'x');
 			TransportException e = assertThrows(TransportException.class,
 					() -> t.fetch(NullProgressMonitor.INSTANCE,
 							mirror(master)));
@@ -1108,8 +1109,8 @@ public void testInitialClone_WithWrongPreAuthentication() throws Exception {
 
 	@Test
 	public void testInitialClone_WithUserInfo() throws Exception {
-		URIish withUserInfo = authURI.setUser(AppServer.username)
-				.setPass(AppServer.password);
+		URIish withUserInfo = authURI.setUser(AppServerBase.username)
+				.setPass(AppServerBase.password);
 		try (Repository dst = createBareRepository();
 				Transport t = Transport.open(dst, withUserInfo)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
@@ -1127,13 +1128,13 @@ public void testInitialClone_WithUserInfo() throws Exception {
 
 	@Test
 	public void testInitialClone_PreAuthOverridesUserInfo() throws Exception {
-		URIish withUserInfo = authURI.setUser(AppServer.username)
-				.setPass(AppServer.password + 'x');
+		URIish withUserInfo = authURI.setUser(AppServerBase.username)
+				.setPass(AppServerBase.password + 'x');
 		try (Repository dst = createBareRepository();
 				Transport t = Transport.open(dst, withUserInfo)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			((TransportHttp) t).setPreemptiveBasicAuthentication(
-					AppServer.username, AppServer.password);
+					AppServerBase.username, AppServerBase.password);
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
 			assertTrue(dst.getObjectDatabase().has(A_txt));
 			assertEquals(B, dst.exactRef(master).getObjectId());
@@ -1174,7 +1175,7 @@ public void testInitialClone_WithAuthenticationWrongCredentials()
 				Transport t = Transport.open(dst, authURI)) {
 			assertFalse(dst.getObjectDatabase().has(A_txt));
 			t.setCredentialsProvider(new UsernamePasswordCredentialsProvider(
-					AppServer.username, "wrongpassword"));
+					AppServerBase.username, "wrongpassword"));
 			t.fetch(NullProgressMonitor.INSTANCE, mirror(master));
 			fail("Should not have succeeded -- wrong password");
 		} catch (TransportException e) {
diff --git a/org.eclipse.jgit.junit.http.ee8/BUILD b/org.eclipse.jgit.junit.http.ee8/BUILD
new file mode 100644
index 0000000..c7f6fb5
--- /dev/null
+++ b/org.eclipse.jgit.junit.http.ee8/BUILD
@@ -0,0 +1,43 @@
+load("@rules_java//java:defs.bzl", "java_library")
+
+package(default_visibility = ["//visibility:public"])
+
+java_library(
+    name = "junit-http-ee8",
+    testonly = 1,
+    srcs = [
+        "//org.eclipse.jgit.junit.http:junit-http-ee8-srcs",
+        # AppServer diverges from the canonical Jakarta version and is copied
+        # from the servlet-4 branch as a hand-maintained EE8 overlay.
+        "src/org/eclipse/jgit/junit/http/AppServer.java",
+    ],
+    resources = glob(
+        ["resources/**"],
+        allow_empty = True,
+    ),
+    deps = [
+        "//lib:javax-servlet-api",
+        "//lib:jetty-ee8-nested",
+        "//lib:jetty-http",
+        "//lib:jetty-io",
+        "//lib:jetty-security",
+        "//lib:jetty-security-ee8",
+        "//lib:jetty-server",
+        "//lib:jetty-servlet-ee8",
+        "//lib:jetty-session",
+        "//lib:jetty-util",
+        "//lib:junit",
+        "//lib:slf4j-api",
+        "//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8",
+        "//org.eclipse.jgit:jgit",
+        "//org.eclipse.jgit.junit:junit",
+    ],
+)
+
+test_suite(
+    name = "tests",
+    tests = [
+        "//org.eclipse.jgit.http.test.ee8:http",
+        "//org.eclipse.jgit.lfs.server.test.ee8:lfs_server",
+    ],
+)
diff --git a/org.eclipse.jgit.junit.http.ee8/src/org/eclipse/jgit/junit/http/AppServer.java b/org.eclipse.jgit.junit.http.ee8/src/org/eclipse/jgit/junit/http/AppServer.java
new file mode 100644
index 0000000..3627d92
--- /dev/null
+++ b/org.eclipse.jgit.junit.http.ee8/src/org/eclipse/jgit/junit/http/AppServer.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2010, 2017 Google Inc. 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.junit.http;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.jetty.ee8.nested.ServletConstraint;
+import org.eclipse.jetty.ee8.security.ConstraintMapping;
+import org.eclipse.jetty.ee8.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.ee8.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
+import org.eclipse.jetty.security.AbstractLoginService;
+
+/**
+ * Tiny web application server for unit testing, wired for the EE8
+ * (javax.servlet / Jetty EE8) generation.
+ * <p>
+ * Only the Jetty security wiring is generation specific; everything else is
+ * inherited from the generated {@link AppServerBase}. This is the hand
+ * maintained EE8 overlay that the canonical {@code AppServer} cannot be
+ * rewritten into automatically, because the Jetty EE8 security API
+ * ({@code ServletConstraint} + {@code setSecurityHandler}) differs structurally
+ * from the EE10 one.
+ */
+public class AppServer extends AppServerBase {
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 */
+	public AppServer() {
+		super();
+	}
+
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 *
+	 * @param port
+	 *            the http port number; may be zero to allocate a port
+	 *            dynamically
+	 * @since 4.2
+	 */
+	public AppServer(int port) {
+		super(port);
+	}
+
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 *
+	 * @param port
+	 *            for http, may be zero to allocate a port dynamically
+	 * @param sslPort
+	 *            for https,may be zero to allocate a port dynamically. If
+	 *            negative, the server will be set up without https support.
+	 * @since 4.9
+	 */
+	public AppServer(int port, int sslPort) {
+		super(port, sslPort);
+	}
+
+	private ConstraintMapping createConstraintMapping() {
+		ConstraintMapping cm = new ConstraintMapping();
+		cm.setConstraint(new ServletConstraint());
+		cm.getConstraint().setAuthenticate(true);
+		cm.getConstraint().setDataConstraint(ServletConstraint.DC_NONE);
+		cm.getConstraint().setRoles(new String[] { authRole });
+		return cm;
+	}
+
+	@Override
+	protected void configureAuthentication(ServletContextHandler ctx,
+			String[] methods) {
+		AbstractLoginService users = new TestMappedLoginService(authRole);
+		List<ConstraintMapping> mappings = new ArrayList<>();
+		if (methods == null || methods.length == 0) {
+			ConstraintMapping cm = createConstraintMapping();
+			cm.setPathSpec("/*");
+			mappings.add(cm);
+		} else {
+			for (String method : methods) {
+				ConstraintMapping cm = createConstraintMapping();
+				cm.setMethod(method.toUpperCase(Locale.ROOT));
+				cm.setPathSpec("/*");
+				mappings.add(cm);
+			}
+		}
+
+		ConstraintSecurityHandler sec = new ConstraintSecurityHandler();
+		sec.setRealmName(realm);
+		sec.setAuthenticator(new BasicAuthenticator());
+		sec.setLoginService(users);
+		sec.setConstraintMappings(mappings.toArray(new ConstraintMapping[0]));
+		ctx.setSecurityHandler(sec);
+	}
+}
diff --git a/org.eclipse.jgit.junit.http/BUILD b/org.eclipse.jgit.junit.http/BUILD
index 66620ce..8ab98ac 100644
--- a/org.eclipse.jgit.junit.http/BUILD
+++ b/org.eclipse.jgit.junit.http/BUILD
@@ -1,14 +1,43 @@
 load("@rules_java//java:defs.bzl", "java_library")
+load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar")
 
 package(default_visibility = ["//visibility:public"])
 
+JUNIT_HTTP_SRCS = glob(["src/**/*.java"])
+
+JUNIT_HTTP_EE8_TRANSFORM_SRCS = glob(
+    ["src/**/*.java"],
+    exclude = ["src/org/eclipse/jgit/junit/http/AppServer.java"],
+)
+
+filegroup(
+    name = "srcs",
+    testonly = 1,
+    srcs = JUNIT_HTTP_SRCS,
+    visibility = [
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
+    name = "ee8-transform-srcs",
+    testonly = 1,
+    srcs = JUNIT_HTTP_EE8_TRANSFORM_SRCS,
+    visibility = ["//tools/jgit-ee8:__pkg__"],
+)
+
 java_library(
     name = "junit-http",
     testonly = 1,
-    srcs = glob(["src/**/*.java"]),
-    resources = glob(["resources/**"], allow_empty=True),
+    srcs = JUNIT_HTTP_SRCS,
+    resources = glob(
+        ["resources/**"],
+        allow_empty = True,
+    ),
     # TODO(davido): we want here provided deps
     deps = [
+        "//lib:jakarta-servlet-api",
         "//lib:jetty-http",
         "//lib:jetty-io",
         "//lib:jetty-security",
@@ -17,10 +46,20 @@
         "//lib:jetty-session",
         "//lib:jetty-util",
         "//lib:junit",
-        "//lib:servlet-api",
         "//lib:slf4j-api",
         "//org.eclipse.jgit.http.server:jgit-servlet",
         "//org.eclipse.jgit:jgit",
         "//org.eclipse.jgit.junit:junit",
     ],
 )
+
+transform_srcjar(
+    name = "junit-http-ee8-srcs",
+    direction = "to_javax",
+    sources = JUNIT_HTTP_EE8_TRANSFORM_SRCS,
+    src_prefix = "org.eclipse.jgit.junit.http/src/",
+    visibility = [
+        "//org.eclipse.jgit.junit.http.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
index fa7421a..7c958ea 100644
--- a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit.http
 Bundle-SymbolicName: org.eclipse.jgit.junit.http
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
@@ -23,17 +23,17 @@
  org.eclipse.jetty.util.component;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.security;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.ssl;version="[12.0.0,13.0.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.http.server;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.resolver;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.http.server;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.resolver;version="[7.8.0,7.9.0)",
  org.junit;version="[4.13,5.0.0)",
  org.slf4j.helpers;version="[1.7.0,3.0.0)"
-Export-Package: org.eclipse.jgit.junit.http;version="7.7.0";
+Export-Package: org.eclipse.jgit.junit.http;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    jakarta.servlet,
    jakarta.servlet.http,
diff --git a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
index a913f90..4563406 100644
--- a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.junit.http - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.http.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml
index 4fc428e..0993930 100644
--- a/org.eclipse.jgit.junit.http/pom.xml
+++ b/org.eclipse.jgit.junit.http/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.http</artifactId>
diff --git a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java
index 76e437b..3a4bce7 100644
--- a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java
+++ b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServer.java
@@ -10,95 +10,30 @@
 
 package org.eclipse.jgit.junit.http;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.UnknownHostException;
-import java.nio.file.Files;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
 import org.eclipse.jetty.ee10.servlet.security.ConstraintMapping;
 import org.eclipse.jetty.ee10.servlet.security.ConstraintSecurityHandler;
 import org.eclipse.jetty.security.AbstractLoginService;
-import org.eclipse.jetty.security.Authenticator;
 import org.eclipse.jetty.security.Constraint;
-import org.eclipse.jetty.security.RolePrincipal;
-import org.eclipse.jetty.security.UserPrincipal;
 import org.eclipse.jetty.security.authentication.BasicAuthenticator;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.HttpConfiguration;
-import org.eclipse.jetty.server.HttpConnectionFactory;
-import org.eclipse.jetty.server.SecureRequestCustomizer;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.SslConnectionFactory;
-import org.eclipse.jetty.server.handler.ContextHandlerCollection;
-import org.eclipse.jetty.util.security.Password;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jgit.transport.URIish;
 
 /**
- * Tiny web application server for unit testing.
+ * Tiny web application server for unit testing, wired for the Jakarta servlet
+ * (Jetty EE10) generation.
  * <p>
- * Tests should start the server in their {@code setUp()} method and stop the
- * server in their {@code tearDown()} method. Only while started the server's
- * URL and/or port number can be obtained.
+ * Only the Jetty security wiring is generation specific; everything else lives
+ * in {@link AppServerBase}.
  */
-public class AppServer {
-	/** Realm name for the secure access areas. */
-	public static final String realm = "Secure Area";
-
-	/** Username for secured access areas. */
-	public static final String username = "agitter";
-
-	/** Password for {@link #username} in secured access areas. */
-	public static final String password = "letmein";
-
-	/** SSL keystore password; must have at least 6 characters. */
-	private static final String keyPassword = "mykeys";
-
-	/** Role for authentication. */
-	private static final String authRole = "can-access";
-
-	static {
-		// Install a logger that throws warning messages.
-		//
-		final String prop = "org.eclipse.jetty.util.log.class";
-		System.setProperty(prop, RecordingLogger.class.getName());
-	}
-
-	private final Server server;
-
-	private final HttpConfiguration config;
-
-	private final ServerConnector connector;
-
-	private final HttpConfiguration secureConfig;
-
-	private final ServerConnector secureConnector;
-
-	private final ContextHandlerCollection contexts;
-
-	private final TestRequestLog log;
-
-	private List<File> filesToDelete = new ArrayList<>();
-
+public class AppServer extends AppServerBase {
 	/**
 	 * Constructor for <code>AppServer</code>.
 	 */
 	public AppServer() {
-		this(0, -1);
+		super();
 	}
 
 	/**
@@ -110,7 +45,7 @@ public AppServer() {
 	 * @since 4.2
 	 */
 	public AppServer(int port) {
-		this(port, -1);
+		super(port);
 	}
 
 	/**
@@ -124,185 +59,7 @@ public AppServer(int port) {
 	 * @since 4.9
 	 */
 	public AppServer(int port, int sslPort) {
-		server = new Server();
-
-		config = new HttpConfiguration();
-		config.setSecureScheme("https");
-		config.setSecurePort(0);
-		config.setOutputBufferSize(32768);
-
-		connector = new ServerConnector(server,
-				new HttpConnectionFactory(config));
-		connector.setPort(port);
-		String ip;
-		String hostName;
-		try {
-			final InetAddress me = InetAddress.getByName("localhost");
-			ip = me.getHostAddress();
-			connector.setHost(ip);
-			hostName = InetAddress.getLocalHost().getCanonicalHostName();
-		} catch (UnknownHostException e) {
-			throw new RuntimeException("Cannot find localhost", e);
-		}
-
-		if (sslPort >= 0) {
-			SslContextFactory.Server sslContextFactory = createTestSslContextFactory(
-					hostName, ip);
-			secureConfig = new HttpConfiguration(config);
-			secureConfig.addCustomizer(new SecureRequestCustomizer());
-			HttpConnectionFactory http11 = new HttpConnectionFactory(
-					secureConfig);
-			SslConnectionFactory tls = new SslConnectionFactory(
-					sslContextFactory, http11.getProtocol());
-			secureConnector = new ServerConnector(server, tls, http11);
-			secureConnector.setPort(sslPort);
-			secureConnector.setHost(ip);
-		} else {
-			secureConfig = null;
-			secureConnector = null;
-		}
-
-		contexts = new ContextHandlerCollection();
-
-		log = new TestRequestLog();
-		log.setHandler(contexts);
-
-		if (secureConnector == null) {
-			server.setConnectors(new Connector[] { connector });
-		} else {
-			server.setConnectors(
-					new Connector[] { connector, secureConnector });
-		}
-		server.setHandler(log);
-	}
-
-	private SslContextFactory.Server createTestSslContextFactory(
-			String hostName, String ip) {
-		SslContextFactory.Server factory = new SslContextFactory.Server();
-
-		String dName = "CN=localhost,OU=JGit,O=Eclipse,ST=Ontario,L=Toronto,C=CA";
-
-		try {
-			File tmpDir = Files.createTempDirectory("jks").toFile();
-			tmpDir.deleteOnExit();
-			makePrivate(tmpDir);
-			File keyStore = new File(tmpDir, "keystore.jks");
-			File keytool = new File(
-					new File(new File(System.getProperty("java.home")), "bin"),
-					"keytool");
-			Runtime.getRuntime().exec(
-					new String[] {
-							keytool.getAbsolutePath(), //
-							"-keystore", keyStore.getAbsolutePath(), //
-							"-storepass", keyPassword,
-							"-alias", hostName, //
-							"-ext", "bc=ca:true", //
-							"-ext",
-							String.format(
-									"san=ip:%s,ip:127.0.0.1,ip:[::1],DNS:%s",
-									ip, hostName), //
-							"-genkeypair", //
-							"-keyalg", "RSA", //
-							"-keypass", keyPassword, //
-							"-dname", dName, //
-							"-validity", "2" //
-					}).waitFor();
-			keyStore.deleteOnExit();
-			makePrivate(keyStore);
-			filesToDelete.add(keyStore);
-			filesToDelete.add(tmpDir);
-			factory.setKeyStorePath(keyStore.getAbsolutePath());
-			factory.setKeyStorePassword(keyPassword);
-			factory.setKeyManagerPassword(keyPassword);
-			factory.setTrustStorePath(keyStore.getAbsolutePath());
-			factory.setTrustStorePassword(keyPassword);
-		} catch (InterruptedException | IOException e) {
-			throw new RuntimeException("Cannot create ssl key/certificate", e);
-		}
-		return factory;
-	}
-
-	private void makePrivate(File file) {
-		file.setReadable(false);
-		file.setWritable(false);
-		file.setExecutable(false);
-		file.setReadable(true, true);
-		file.setWritable(true, true);
-		if (file.isDirectory()) {
-			file.setExecutable(true, true);
-		}
-	}
-
-	/**
-	 * Create a new servlet context within the server.
-	 * <p>
-	 * This method should be invoked before the server is started, once for each
-	 * context the caller wants to register.
-	 *
-	 * @param path
-	 *            path of the context; use "/" for the root context if binding
-	 *            to the root is desired.
-	 * @return the context to add servlets into.
-	 * @since 7.0
-	 */
-	public ServletContextHandler addContext(String path) {
-		assertNotYetSetUp();
-		if ("".equals(path))
-			path = "/";
-
-		ServletContextHandler ctx = new ServletContextHandler();
-		ctx.setContextPath(path);
-		contexts.addHandler(ctx);
-
-		return ctx;
-	}
-
-	/**
-	 * Configure basic authentication.
-	 *
-	 * @param ctx
-	 *            servlet context handler
-	 * @param methods
-	 *            the methods
-	 * @return servlet context handler
-	 * @since 7.0
-	 */
-	public ServletContextHandler authBasic(ServletContextHandler ctx,
-			String... methods) {
-		assertNotYetSetUp();
-		auth(ctx, new BasicAuthenticator(), methods);
-		return ctx;
-	}
-
-	static class TestMappedLoginService extends AbstractLoginService {
-		private RolePrincipal role;
-
-		protected final Map<String, UserPrincipal> users = new ConcurrentHashMap<>();
-
-		TestMappedLoginService(String role) {
-			this.role = new RolePrincipal(role);
-		}
-
-		@Override
-		protected void doStart() throws Exception {
-			UserPrincipal p = new UserPrincipal(username,
-					new Password(password));
-			users.put(username, p);
-			super.doStart();
-		}
-
-		@Override
-		protected UserPrincipal loadUserInfo(String user) {
-			return users.get(user);
-		}
-
-		@Override
-		protected List<RolePrincipal> loadRoleInfo(UserPrincipal user) {
-			if (users.get(user.getName()) == null) {
-				return null;
-			}
-			return Collections.singletonList(role);
-		}
+		super(port, sslPort);
 	}
 
 	private ConstraintMapping createConstraintMapping() {
@@ -315,8 +72,9 @@ private ConstraintMapping createConstraintMapping() {
 		return cm;
 	}
 
-	private void auth(ServletContextHandler ctx, Authenticator authType,
-			String... methods) {
+	@Override
+	protected void configureAuthentication(ServletContextHandler ctx,
+			String[] methods) {
 		AbstractLoginService users = new TestMappedLoginService(authRole);
 		List<ConstraintMapping> mappings = new ArrayList<>();
 		if (methods == null || methods.length == 0) {
@@ -331,133 +89,12 @@ private void auth(ServletContextHandler ctx, Authenticator authType,
 
 		ConstraintSecurityHandler sec = new ConstraintSecurityHandler();
 		sec.setRealmName(realm);
-		sec.setAuthenticator(authType);
+		sec.setAuthenticator(new BasicAuthenticator());
 		sec.setLoginService(users);
-		sec.setConstraintMappings(
-				mappings.toArray(new ConstraintMapping[0]));
+		sec.setConstraintMappings(mappings.toArray(new ConstraintMapping[0]));
 		sec.setHandler(ctx);
 
 		contexts.removeHandler(ctx);
 		contexts.addHandler(sec);
 	}
-
-	/**
-	 * Start the server on a random local port.
-	 *
-	 * @throws Exception
-	 *             the server cannot be started, testing is not possible.
-	 */
-	public void setUp() throws Exception {
-		RecordingLogger.clear();
-		log.clear();
-		server.start();
-		config.setSecurePort(getSecurePort());
-		if (secureConfig != null) {
-			secureConfig.setSecurePort(getSecurePort());
-		}
-	}
-
-	/**
-	 * Shutdown the server.
-	 *
-	 * @throws Exception
-	 *             the server refuses to halt, or wasn't running.
-	 */
-	public void tearDown() throws Exception {
-		RecordingLogger.clear();
-		log.clear();
-		server.stop();
-		for (File f : filesToDelete) {
-			f.delete();
-		}
-		filesToDelete.clear();
-	}
-
-	/**
-	 * Get the URI to reference this server.
-	 * <p>
-	 * The returned URI includes the proper host name and port number, but does
-	 * not contain a path.
-	 *
-	 * @return URI to reference this server's root context.
-	 */
-	public URI getURI() {
-		assertAlreadySetUp();
-		String host = connector.getHost();
-		if (host.contains(":") && !host.startsWith("["))
-			host = "[" + host + "]";
-		final String uri = "http://" + host + ":" + getPort();
-		try {
-			return new URI(uri);
-		} catch (URISyntaxException e) {
-			throw new RuntimeException("Unexpected URI error on " + uri, e);
-		}
-	}
-
-	/**
-	 * Get port.
-	 *
-	 * @return the local port number the server is listening on.
-	 */
-	public int getPort() {
-		assertAlreadySetUp();
-		return connector.getLocalPort();
-	}
-
-	/**
-	 * Get secure port.
-	 *
-	 * @return the HTTPS port or -1 if not configured.
-	 */
-	public int getSecurePort() {
-		assertAlreadySetUp();
-		return secureConnector != null ? secureConnector.getLocalPort() : -1;
-	}
-
-	/**
-	 * Get requests.
-	 *
-	 * @return all requests since the server was started.
-	 */
-	public List<AccessEvent> getRequests() {
-		return new ArrayList<>(log.getEvents());
-	}
-
-	/**
-	 * Get requests.
-	 *
-	 * @param base
-	 *            base URI used to access the server.
-	 * @param path
-	 *            the path to locate requests for, relative to {@code base}.
-	 * @return all requests which match the given path.
-	 */
-	public List<AccessEvent> getRequests(URIish base, String path) {
-		return getRequests(HttpTestCase.join(base, path));
-	}
-
-	/**
-	 * Get requests.
-	 *
-	 * @param path
-	 *            the path to locate requests for.
-	 * @return all requests which match the given path.
-	 */
-	public List<AccessEvent> getRequests(String path) {
-		ArrayList<AccessEvent> r = new ArrayList<>();
-		for (AccessEvent event : log.getEvents()) {
-			if (event.getPath().equals(path)) {
-				r.add(event);
-			}
-		}
-		return r;
-	}
-
-	private void assertNotYetSetUp() {
-		assertFalse("server is not running", server.isRunning());
-	}
-
-	private void assertAlreadySetUp() {
-		assertTrue("server is running", server.isRunning());
-	}
 }
diff --git a/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServerBase.java b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServerBase.java
new file mode 100644
index 0000000..bc2baad
--- /dev/null
+++ b/org.eclipse.jgit.junit.http/src/org/eclipse/jgit/junit/http/AppServerBase.java
@@ -0,0 +1,441 @@
+/*
+ * Copyright (C) 2010, 2017 Google Inc. 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.junit.http;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.nio.file.Files;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.eclipse.jetty.ee10.servlet.ServletContextHandler;
+import org.eclipse.jetty.security.AbstractLoginService;
+import org.eclipse.jetty.security.RolePrincipal;
+import org.eclipse.jetty.security.UserPrincipal;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.SecureRequestCustomizer;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
+import org.eclipse.jetty.server.handler.ContextHandlerCollection;
+import org.eclipse.jetty.util.security.Password;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+import org.eclipse.jgit.transport.URIish;
+
+/**
+ * Tiny web application server for unit testing.
+ * <p>
+ * Tests should start the server in their {@code setUp()} method and stop the
+ * server in their {@code tearDown()} method. Only while started the server's
+ * URL and/or port number can be obtained.
+ * <p>
+ * The Jetty security API for declaring authentication constraints differs
+ * between EE generations. That part is therefore isolated in the abstract
+ * {@link #configureAuthentication(ServletContextHandler, String[])} seam, which
+ * the concrete {@code AppServer} provides for its servlet generation.
+ */
+public abstract class AppServerBase {
+	/** Realm name for the secure access areas. */
+	public static final String realm = "Secure Area";
+
+	/** Username for secured access areas. */
+	public static final String username = "agitter";
+
+	/** Password for {@link #username} in secured access areas. */
+	public static final String password = "letmein";
+
+	/** SSL keystore password; must have at least 6 characters. */
+	private static final String keyPassword = "mykeys";
+
+	/** Role for authentication. */
+	protected static final String authRole = "can-access";
+
+	static {
+		// Install a logger that throws warning messages.
+		//
+		final String prop = "org.eclipse.jetty.util.log.class";
+		System.setProperty(prop, RecordingLogger.class.getName());
+	}
+
+	private final Server server;
+
+	private final HttpConfiguration config;
+
+	private final ServerConnector connector;
+
+	private final HttpConfiguration secureConfig;
+
+	private final ServerConnector secureConnector;
+
+	/** Collection the servlet contexts are registered in. */
+	protected final ContextHandlerCollection contexts;
+
+	private final TestRequestLog log;
+
+	private List<File> filesToDelete = new ArrayList<>();
+
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 */
+	protected AppServerBase() {
+		this(0, -1);
+	}
+
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 *
+	 * @param port
+	 *            the http port number; may be zero to allocate a port
+	 *            dynamically
+	 */
+	protected AppServerBase(int port) {
+		this(port, -1);
+	}
+
+	/**
+	 * Constructor for <code>AppServer</code>.
+	 *
+	 * @param port
+	 *            for http, may be zero to allocate a port dynamically
+	 * @param sslPort
+	 *            for https,may be zero to allocate a port dynamically. If
+	 *            negative, the server will be set up without https support.
+	 */
+	protected AppServerBase(int port, int sslPort) {
+		server = new Server();
+
+		config = new HttpConfiguration();
+		config.setSecureScheme("https");
+		config.setSecurePort(0);
+		config.setOutputBufferSize(32768);
+
+		connector = new ServerConnector(server,
+				new HttpConnectionFactory(config));
+		connector.setPort(port);
+		String ip;
+		String hostName;
+		try {
+			final InetAddress me = InetAddress.getByName("localhost");
+			ip = me.getHostAddress();
+			connector.setHost(ip);
+			hostName = InetAddress.getLocalHost().getCanonicalHostName();
+		} catch (UnknownHostException e) {
+			throw new RuntimeException("Cannot find localhost", e);
+		}
+
+		if (sslPort >= 0) {
+			SslContextFactory.Server sslContextFactory = createTestSslContextFactory(
+					hostName, ip);
+			secureConfig = new HttpConfiguration(config);
+			secureConfig.addCustomizer(new SecureRequestCustomizer());
+			HttpConnectionFactory http11 = new HttpConnectionFactory(
+					secureConfig);
+			SslConnectionFactory tls = new SslConnectionFactory(
+					sslContextFactory, http11.getProtocol());
+			secureConnector = new ServerConnector(server, tls, http11);
+			secureConnector.setPort(sslPort);
+			secureConnector.setHost(ip);
+		} else {
+			secureConfig = null;
+			secureConnector = null;
+		}
+
+		contexts = new ContextHandlerCollection();
+
+		log = new TestRequestLog();
+		log.setHandler(contexts);
+
+		if (secureConnector == null) {
+			server.setConnectors(new Connector[] { connector });
+		} else {
+			server.setConnectors(
+					new Connector[] { connector, secureConnector });
+		}
+		server.setHandler(log);
+	}
+
+	private SslContextFactory.Server createTestSslContextFactory(
+			String hostName, String ip) {
+		SslContextFactory.Server factory = new SslContextFactory.Server();
+
+		String dName = "CN=localhost,OU=JGit,O=Eclipse,ST=Ontario,L=Toronto,C=CA";
+
+		try {
+			File tmpDir = Files.createTempDirectory("jks").toFile();
+			tmpDir.deleteOnExit();
+			makePrivate(tmpDir);
+			File keyStore = new File(tmpDir, "keystore.jks");
+			File keytool = new File(
+					new File(new File(System.getProperty("java.home")), "bin"),
+					"keytool");
+			Runtime.getRuntime().exec(
+					new String[] {
+							keytool.getAbsolutePath(), //
+							"-keystore", keyStore.getAbsolutePath(), //
+							"-storepass", keyPassword,
+							"-alias", hostName, //
+							"-ext", "bc=ca:true", //
+							"-ext",
+							String.format(
+									"san=ip:%s,ip:127.0.0.1,ip:[::1],DNS:%s",
+									ip, hostName), //
+							"-genkeypair", //
+							"-keyalg", "RSA", //
+							"-keypass", keyPassword, //
+							"-dname", dName, //
+							"-validity", "2" //
+					}).waitFor();
+			keyStore.deleteOnExit();
+			makePrivate(keyStore);
+			filesToDelete.add(keyStore);
+			filesToDelete.add(tmpDir);
+			factory.setKeyStorePath(keyStore.getAbsolutePath());
+			factory.setKeyStorePassword(keyPassword);
+			factory.setKeyManagerPassword(keyPassword);
+			factory.setTrustStorePath(keyStore.getAbsolutePath());
+			factory.setTrustStorePassword(keyPassword);
+		} catch (InterruptedException | IOException e) {
+			throw new RuntimeException("Cannot create ssl key/certificate", e);
+		}
+		return factory;
+	}
+
+	private void makePrivate(File file) {
+		file.setReadable(false);
+		file.setWritable(false);
+		file.setExecutable(false);
+		file.setReadable(true, true);
+		file.setWritable(true, true);
+		if (file.isDirectory()) {
+			file.setExecutable(true, true);
+		}
+	}
+
+	/**
+	 * Create a new servlet context within the server.
+	 * <p>
+	 * This method should be invoked before the server is started, once for each
+	 * context the caller wants to register.
+	 *
+	 * @param path
+	 *            path of the context; use "/" for the root context if binding
+	 *            to the root is desired.
+	 * @return the context to add servlets into.
+	 * @since 7.0
+	 */
+	public ServletContextHandler addContext(String path) {
+		assertNotYetSetUp();
+		if ("".equals(path))
+			path = "/";
+
+		ServletContextHandler ctx = new ServletContextHandler();
+		ctx.setContextPath(path);
+		contexts.addHandler(ctx);
+
+		return ctx;
+	}
+
+	/**
+	 * Configure basic authentication.
+	 *
+	 * @param ctx
+	 *            servlet context handler
+	 * @param methods
+	 *            the methods
+	 * @return servlet context handler
+	 * @since 7.0
+	 */
+	public ServletContextHandler authBasic(ServletContextHandler ctx,
+			String... methods) {
+		assertNotYetSetUp();
+		configureAuthentication(ctx, methods);
+		return ctx;
+	}
+
+	/**
+	 * Install basic-authentication constraints on the given context.
+	 * <p>
+	 * The Jetty security API used to build the constraints and attach the
+	 * security handler differs between servlet generations, so each concrete
+	 * {@code AppServer} implements this seam for its Jetty flavor.
+	 *
+	 * @param ctx
+	 *            servlet context handler to secure
+	 * @param methods
+	 *            HTTP methods to constrain; empty constrains all methods
+	 */
+	protected abstract void configureAuthentication(ServletContextHandler ctx,
+			String[] methods);
+
+	/** Login service mapping the single test user and role. */
+	protected static class TestMappedLoginService extends AbstractLoginService {
+		private RolePrincipal role;
+
+		protected final Map<String, UserPrincipal> users = new ConcurrentHashMap<>();
+
+		TestMappedLoginService(String role) {
+			this.role = new RolePrincipal(role);
+		}
+
+		@Override
+		protected void doStart() throws Exception {
+			UserPrincipal p = new UserPrincipal(username,
+					new Password(password));
+			users.put(username, p);
+			super.doStart();
+		}
+
+		@Override
+		protected UserPrincipal loadUserInfo(String user) {
+			return users.get(user);
+		}
+
+		@Override
+		protected List<RolePrincipal> loadRoleInfo(UserPrincipal user) {
+			if (users.get(user.getName()) == null) {
+				return null;
+			}
+			return Collections.singletonList(role);
+		}
+	}
+
+	/**
+	 * Start the server on a random local port.
+	 *
+	 * @throws Exception
+	 *             the server cannot be started, testing is not possible.
+	 */
+	public void setUp() throws Exception {
+		RecordingLogger.clear();
+		log.clear();
+		server.start();
+		config.setSecurePort(getSecurePort());
+		if (secureConfig != null) {
+			secureConfig.setSecurePort(getSecurePort());
+		}
+	}
+
+	/**
+	 * Shutdown the server.
+	 *
+	 * @throws Exception
+	 *             the server refuses to halt, or wasn't running.
+	 */
+	public void tearDown() throws Exception {
+		RecordingLogger.clear();
+		log.clear();
+		server.stop();
+		for (File f : filesToDelete) {
+			f.delete();
+		}
+		filesToDelete.clear();
+	}
+
+	/**
+	 * Get the URI to reference this server.
+	 * <p>
+	 * The returned URI includes the proper host name and port number, but does
+	 * not contain a path.
+	 *
+	 * @return URI to reference this server's root context.
+	 */
+	public URI getURI() {
+		assertAlreadySetUp();
+		String host = connector.getHost();
+		if (host.contains(":") && !host.startsWith("["))
+			host = "[" + host + "]";
+		final String uri = "http://" + host + ":" + getPort();
+		try {
+			return new URI(uri);
+		} catch (URISyntaxException e) {
+			throw new RuntimeException("Unexpected URI error on " + uri, e);
+		}
+	}
+
+	/**
+	 * Get port.
+	 *
+	 * @return the local port number the server is listening on.
+	 */
+	public int getPort() {
+		assertAlreadySetUp();
+		return connector.getLocalPort();
+	}
+
+	/**
+	 * Get secure port.
+	 *
+	 * @return the HTTPS port or -1 if not configured.
+	 */
+	public int getSecurePort() {
+		assertAlreadySetUp();
+		return secureConnector != null ? secureConnector.getLocalPort() : -1;
+	}
+
+	/**
+	 * Get requests.
+	 *
+	 * @return all requests since the server was started.
+	 */
+	public List<AccessEvent> getRequests() {
+		return new ArrayList<>(log.getEvents());
+	}
+
+	/**
+	 * Get requests.
+	 *
+	 * @param base
+	 *            base URI used to access the server.
+	 * @param path
+	 *            the path to locate requests for, relative to {@code base}.
+	 * @return all requests which match the given path.
+	 */
+	public List<AccessEvent> getRequests(URIish base, String path) {
+		return getRequests(HttpTestCase.join(base, path));
+	}
+
+	/**
+	 * Get requests.
+	 *
+	 * @param path
+	 *            the path to locate requests for.
+	 * @return all requests which match the given path.
+	 */
+	public List<AccessEvent> getRequests(String path) {
+		ArrayList<AccessEvent> r = new ArrayList<>();
+		for (AccessEvent event : log.getEvents()) {
+			if (event.getPath().equals(path)) {
+				r.add(event);
+			}
+		}
+		return r;
+	}
+
+	private void assertNotYetSetUp() {
+		assertFalse("server is not running", server.isRunning());
+	}
+
+	private void assertAlreadySetUp() {
+		assertTrue("server is running", server.isRunning());
+	}
+}
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
index 04e96f9..f50f3d2 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
@@ -3,47 +3,47 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit.ssh
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 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.17.1,2.18.0)",
- org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.io;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.kex;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.session;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.signature;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.logging;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.threads;version="[2.17.1,2.18.0)",
- org.apache.sshd.core;version="[2.17.1,2.18.0)",
- org.apache.sshd.server;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.auth;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.auth.gss;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.auth.keyboard;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.auth.password;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.command;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.session;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.shell;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.subsystem;version="[2.17.1,2.18.0)",
- org.apache.sshd.sftp;version="[2.17.1,2.18.0)",
- org.apache.sshd.sftp.server;version="[2.17.1,2.18.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+Import-Package: org.apache.sshd.common;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.file.virtualfs;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.helpers;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.io;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.kex;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.keyprovider;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.session;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.signature;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.buffer;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.logging;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.security;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.threads;version="[2.18.0,2.19.0)",
+ org.apache.sshd.core;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.auth;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.auth.gss;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.auth.keyboard;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.auth.password;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.command;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.session;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.shell;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.subsystem;version="[2.18.0,2.19.0)",
+ org.apache.sshd.sftp;version="[2.18.0,2.19.0)",
+ org.apache.sshd.sftp.server;version="[2.18.0,2.19.0)",
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
-Export-Package: org.eclipse.jgit.junit.ssh;version="7.7.0"
+Export-Package: org.eclipse.jgit.junit.ssh;version="7.8.0"
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
index 479ec13..d52282f 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.junit.ssh - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml
index 94397ab..5ac4ae7 100644
--- a/org.eclipse.jgit.junit.ssh/pom.xml
+++ b/org.eclipse.jgit.junit.ssh/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.ssh</artifactId>
diff --git a/org.eclipse.jgit.junit/BUILD b/org.eclipse.jgit.junit/BUILD
index f4a7165..8879cd9 100644
--- a/org.eclipse.jgit.junit/BUILD
+++ b/org.eclipse.jgit.junit/BUILD
@@ -7,7 +7,10 @@
     testonly = 1,
     srcs = glob(["src/**/*.java"]),
     resource_strip_prefix = "org.eclipse.jgit.junit/resources",
-    resources = glob(["resources/**"], allow_empty=True),
+    resources = glob(
+        ["resources/**"],
+        allow_empty = True,
+    ),
     deps = [
         "//lib:junit",
         # We want these deps to be provided_deps
diff --git a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
index 78f0584..6d7b85e 100644
--- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -3,38 +3,38 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit
 Bundle-SymbolicName: org.eclipse.jgit.junit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 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.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.dircache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.merge;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="7.7.0",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.time;version="[7.7.0,7.8.0)",
+Import-Package: org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.dircache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.merge;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="7.8.0",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.time;version="[7.8.0,7.9.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)",
  org.junit.runners.model;version="[4.13,5.0.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
-Export-Package: org.eclipse.jgit.junit;version="7.7.0";
+Export-Package: org.eclipse.jgit.junit;version="7.8.0";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -47,4 +47,4 @@
    org.junit.runners.model,
    org.junit.runner,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.junit.time;version="7.7.0";uses:="org.eclipse.jgit.util.time"
+ org.eclipse.jgit.junit.time;version="7.8.0";uses:="org.eclipse.jgit.util.time"
diff --git a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
index c313e01..4ccd459 100644
--- a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.junit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.junit;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.junit;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml
index 907fc47..ac83f53 100644
--- a/org.eclipse.jgit.junit/pom.xml
+++ b/org.eclipse.jgit.junit/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit</artifactId>
diff --git a/org.eclipse.jgit.lfs.server.ee8/BUILD b/org.eclipse.jgit.lfs.server.ee8/BUILD
new file mode 100644
index 0000000..b07dae2
--- /dev/null
+++ b/org.eclipse.jgit.lfs.server.ee8/BUILD
@@ -0,0 +1,32 @@
+load("@rules_java//java:defs.bzl", "java_library")
+load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar")
+
+package(default_visibility = ["//visibility:public"])
+
+transform_srcjar(
+    name = "jgit-lfs-server-ee8-srcs",
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.lfs.server:srcs"],
+    src_prefix = "org.eclipse.jgit.lfs.server/src/",
+)
+
+filegroup(
+    name = "jgit-lfs-server-ee8-srcjar",
+    srcs = [":jgit-lfs-server-ee8-srcs"],
+)
+
+java_library(
+    name = "jgit-lfs-server-ee8",
+    srcs = [":jgit-lfs-server-ee8-srcs"],
+    resource_strip_prefix = "org.eclipse.jgit.lfs.server/resources",
+    resources = ["//org.eclipse.jgit.lfs.server:jgit-lfs-server-resources"],
+    deps = [
+        "//lib:gson",
+        "//lib:httpcore",
+        "//lib:javax-servlet-api",
+        "//lib:slf4j-api",
+        "//org.eclipse.jgit.http.apache:http-apache",
+        "//org.eclipse.jgit:jgit",
+        "//org.eclipse.jgit.lfs:jgit-lfs",
+    ],
+)
diff --git a/org.eclipse.jgit.lfs.server.test.ee8/BUILD b/org.eclipse.jgit.lfs.server.test.ee8/BUILD
new file mode 100644
index 0000000..bb93b79
--- /dev/null
+++ b/org.eclipse.jgit.lfs.server.test.ee8/BUILD
@@ -0,0 +1,65 @@
+load("@rules_java//java:defs.bzl", "java_library")
+load("@com_googlesource_gerrit_bazlets//tools:junit.bzl", "junit_tests")
+load("@com_googlesource_gerrit_bazlets//tools:servlet_transform.bzl", "transform_srcjar")
+
+transform_srcjar(
+    name = "test-srcs",
+    testonly = 1,
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.lfs.server.test:test-srcs"],
+    src_prefix = "org.eclipse.jgit.lfs.server.test/tst/",
+    visibility = ["//tools/jgit-ee8:__pkg__"],
+)
+
+transform_srcjar(
+    name = "base-test-srcs",
+    testonly = 1,
+    direction = "to_javax",
+    sources = ["//org.eclipse.jgit.lfs.server.test:base-test-srcs"],
+    src_prefix = "org.eclipse.jgit.lfs.server.test/tst/",
+)
+
+# Keep the helper/base class separate: the canonical LfsServerTest is compiled
+# into the helper jar, while the remaining tests are executed from the EE8
+# suite target.
+DEPS = [
+    "//org.eclipse.jgit.lfs.test:helpers",
+    "//org.eclipse.jgit:jgit",
+    "//org.eclipse.jgit.junit:junit",
+    "//org.eclipse.jgit.junit.http.ee8:junit-http-ee8",
+    "//org.eclipse.jgit.lfs:jgit-lfs",
+    "//org.eclipse.jgit.lfs.server.ee8:jgit-lfs-server-ee8",
+    "//lib:commons-logging",
+    "//lib:httpcore",
+    "//lib:httpclient",
+    "//lib:junit",
+    "//lib:jetty-http",
+    "//lib:jetty-io",
+    "//lib:jetty-server",
+    "//lib:jetty-servlet-ee8",
+    "//lib:jetty-security",
+    "//lib:jetty-security-ee8",
+    "//lib:jetty-util",
+    "//lib:javax-servlet-api",
+]
+
+junit_tests(
+    name = "lfs_server",
+    jvm_flags = [
+        "-Xmx512m",
+        "-Dfile.encoding=UTF-8",
+    ],
+    suite_srcs = ["//org.eclipse.jgit.lfs.server.test:nonbase-test-srcs"],
+    tags = ["lfs-server"],
+    srcs = [":test-srcs"],
+    deps = DEPS + [
+        ":helpers",
+    ],
+)
+
+java_library(
+    name = "helpers",
+    testonly = 1,
+    srcs = [":base-test-srcs"],
+    deps = DEPS,
+)
diff --git a/org.eclipse.jgit.lfs.server.test/BUILD b/org.eclipse.jgit.lfs.server.test/BUILD
index 76a0870..4b69804 100644
--- a/org.eclipse.jgit.lfs.server.test/BUILD
+++ b/org.eclipse.jgit.lfs.server.test/BUILD
@@ -6,6 +6,35 @@
 
 TEST_BASE = ["tst/org/eclipse/jgit/lfs/server/fs/LfsServerTest.java"]
 
+TEST_SRCS = glob(["tst/**/*.java"])
+
+filegroup(
+    name = "test-srcs",
+    testonly = 1,
+    srcs = TEST_SRCS,
+    visibility = [
+        "//org.eclipse.jgit.lfs.server.test.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
+    name = "base-test-srcs",
+    testonly = 1,
+    srcs = TEST_BASE,
+    visibility = ["//org.eclipse.jgit.lfs.server.test.ee8:__pkg__"],
+)
+
+filegroup(
+    name = "nonbase-test-srcs",
+    testonly = 1,
+    srcs = glob(
+        ["tst/**/*.java"],
+        exclude = TEST_BASE,
+    ),
+    visibility = ["//org.eclipse.jgit.lfs.server.test.ee8:__pkg__"],
+)
+
 DEPS = [
     "//org.eclipse.jgit.lfs.test:helpers",
     "//org.eclipse.jgit:jgit",
@@ -23,7 +52,7 @@
     "//lib:jetty-servlet",
     "//lib:jetty-security",
     "//lib:jetty-util",
-    "//lib:servlet-api",
+    "//lib:jakarta-servlet-api",
 ]
 
 junit_tests(
diff --git a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
index e852071..d7e3772 100644
--- a/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.server.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -27,24 +27,24 @@
  org.eclipse.jetty.util.component;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.security;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.thread;version="[12.0.0,13.0.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.server;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.server.fs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.test;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.server;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.test;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.lfs.server.test/pom.xml b/org.eclipse.jgit.lfs.server.test/pom.xml
index 4ad6d65..af7b471 100644
--- a/org.eclipse.jgit.lfs.server.test/pom.xml
+++ b/org.eclipse.jgit.lfs.server.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
diff --git a/org.eclipse.jgit.lfs.server/BUILD b/org.eclipse.jgit.lfs.server/BUILD
index cd1831b..d6b08a6 100644
--- a/org.eclipse.jgit.lfs.server/BUILD
+++ b/org.eclipse.jgit.lfs.server/BUILD
@@ -2,15 +2,29 @@
 
 package(default_visibility = ["//visibility:public"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["src/**/*.java"]),
+    visibility = [
+        "//org.eclipse.jgit.lfs.server.ee8:__pkg__",
+        "//tools/jgit-ee8:__pkg__",
+    ],
+)
+
+filegroup(
+    name = "jgit-lfs-server-resources",
+    srcs = glob(["resources/**"]),
+)
+
 java_library(
     name = "jgit-lfs-server",
-    srcs = glob(["src/**/*.java"]),
+    srcs = [":srcs"],
     resource_strip_prefix = "org.eclipse.jgit.lfs.server/resources",
-    resources = glob(["resources/**"]),
+    resources = [":jgit-lfs-server-resources"],
     deps = [
         "//lib:gson",
         "//lib:httpcore",
-        "//lib:servlet-api",
+        "//lib:jakarta-servlet-api",
         "//lib:slf4j-api",
         "//org.eclipse.jgit.http.apache:http-apache",
         "//org.eclipse.jgit:jgit",
diff --git a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
index 65079c6..e643a52 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
@@ -3,21 +3,21 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.server
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 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
-Export-Package: org.eclipse.jgit.lfs.server;version="7.7.0";
+Export-Package: org.eclipse.jgit.lfs.server;version="7.8.0";
   uses:="jakarta.servlet.http,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.fs;version="7.7.0";
+ org.eclipse.jgit.lfs.server.fs;version="7.8.0";
   uses:="jakarta.servlet,
    jakarta.servlet.http,
    org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.internal;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.lfs.server.s3;version="7.7.0";
+ org.eclipse.jgit.lfs.server.internal;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.lfs.server.s3;version="7.8.0";
   uses:="org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib"
 Import-Package: com.google.gson;version="[2.8.0,3.0.0)",
@@ -25,15 +25,15 @@
  jakarta.servlet.annotation;version="[6.0.0,7.0.0)",
  jakarta.servlet.http;version="[6.0.0,7.0.0)",
  org.apache.http;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http.apache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http.apache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
diff --git a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
index 9dc8953..5e4c9cf 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.lfs.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml
index 73036ee..67b1bf2 100644
--- a/org.eclipse.jgit.lfs.server/pom.xml
+++ b/org.eclipse.jgit.lfs.server/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server</artifactId>
diff --git a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
index b9df9f9..82b1403 100644
--- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
@@ -3,29 +3,29 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 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.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.attributes;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+Import-Package: org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.attributes;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)"
-Export-Package: org.eclipse.jgit.lfs.test;version="7.7.0";x-friends:="org.eclipse.jgit.lfs.server.test"
+Export-Package: org.eclipse.jgit.lfs.test;version="7.8.0";x-friends:="org.eclipse.jgit.lfs.server.test"
diff --git a/org.eclipse.jgit.lfs.test/pom.xml b/org.eclipse.jgit.lfs.test/pom.xml
index 040b222..2380339 100644
--- a/org.eclipse.jgit.lfs.test/pom.xml
+++ b/org.eclipse.jgit.lfs.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.test</artifactId>
diff --git a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
index 0fe46c7..4a10127 100644
--- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
@@ -3,33 +3,33 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs
 Bundle-SymbolicName: org.eclipse.jgit.lfs
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 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
-Export-Package: org.eclipse.jgit.lfs;version="7.7.0",
- org.eclipse.jgit.lfs.errors;version="7.7.0",
- org.eclipse.jgit.lfs.internal;version="7.7.0";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
- org.eclipse.jgit.lfs.lib;version="7.7.0"
+Export-Package: org.eclipse.jgit.lfs;version="7.8.0",
+ org.eclipse.jgit.lfs.errors;version="7.8.0",
+ org.eclipse.jgit.lfs.internal;version="7.8.0";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
+ org.eclipse.jgit.lfs.lib;version="7.8.0"
 Import-Package: com.google.gson;version="[2.8.2,3.0.0)",
  com.google.gson.stream;version="[2.8.2,3.0.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)";resolution:=optional,
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.attributes;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.diff;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.dircache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.hooks;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)"
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)";resolution:=optional,
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.attributes;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.diff;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.dircache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.hooks;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)"
diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
index 5ecc42b..b468bc3 100644
--- a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.lfs - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml
index 19546b7..78d3b39 100644
--- a/org.eclipse.jgit.lfs/pom.xml
+++ b/org.eclipse.jgit.lfs/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
index 0caab54..1c04cc8 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
index a8ce298..62ebf82 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
index e37d622..17a3e8f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.gpg.bc"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
index d59c8de..e52ff55 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.gpg.bc.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
index 684d119..81e9291 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.http.apache"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
index 00a0601..e54d0ad 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.http.apache.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
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 8b28f14..4bdf267 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
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.junit"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -24,7 +24,7 @@
 
    <requires>
       <import plugin="com.jcraft.jsch"/>
-      <import plugin="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
index 6e07e85..9d0108b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
index bb6b80a..811948a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.lfs"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
index 0d91543..062837d 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.lfs.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
index d053e0a..feb0400 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.pgm"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -35,9 +35,9 @@
          version="0.0.0"/>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
-      <import feature="org.eclipse.jgit.lfs" version="7.7.0" match="equivalent"/>
-      <import feature="org.eclipse.jgit.ssh.apache" version="7.7.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit.lfs" version="7.8.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit.ssh.apache" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
index 6a8c021..e305823 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
index 9a1fd3a..4b597ea 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.repository</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
index 73f1ecd..5908568 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.source"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
index c5b7592..5a13758 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
@@ -30,7 +30,7 @@
     <dependency>
       <groupId>org.eclipse.jgit.feature</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>7.7.0-SNAPSHOT</version>
+      <version>7.8.0-SNAPSHOT</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
index edb2020..2cd6ac8 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.ssh.apache"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
index 0b97560..f022882 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.apache.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
index 706918f..c14e4a3 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.jgit.ssh.jsch"
       label="%featureName"
-      version="7.7.0.qualifier"
+      version="7.8.0.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="7.7.0" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="7.8.0" match="equivalent"/>
    </requires>
 
    <plugin
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
index 8db7e69..dbee9fe 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.ssh.jsch.feature/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
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 0ed6ad9..8c41fe2 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="1778791859">
+<target name="jgit-4.34" sequenceNumber="1782203968">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
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 a3469d1..a202655 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="1778791859">
+<target name="jgit-4.35" sequenceNumber="1782203968">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
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 ae957d4..5587f63 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="1778791859">
+<target name="jgit-4.36" sequenceNumber="1782203968">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
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 bdf955c..34a2eae 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="1778791859">
+<target name="jgit-4.37" sequenceNumber="1782203968">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target
index cbd8dcb..e453d08 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.38.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.38" sequenceNumber="1778791859">
+<target name="jgit-4.38" sequenceNumber="1782203969">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target
index dd38a8c..e246863 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.39.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.39" sequenceNumber="1778791859">
+<target name="jgit-4.39" sequenceNumber="1782203969">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.40.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.40.target
index a00c7d0..ca068bf 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.40.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.40.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.40" sequenceNumber="1778791859">
+<target name="jgit-4.40" sequenceNumber="1782203968">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -71,13 +71,13 @@
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-osgi</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.apache.sshd</groupId>
           <artifactId>sshd-sftp</artifactId>
-          <version>2.17.1</version>
+          <version>2.18.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -97,13 +97,13 @@
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.java.dev.jna</groupId>
           <artifactId>jna-platform</artifactId>
-          <version>5.18.1</version>
+          <version>5.19.1</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -113,49 +113,49 @@
         <dependency>
           <groupId>org.eclipse.jetty.ee10</groupId>
           <artifactId>jetty-ee10-servlet</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-http</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-io</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-security</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-server</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-session</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>org.eclipse.jetty</groupId>
           <artifactId>jetty-util-ajax</artifactId>
-          <version>12.1.9</version>
+          <version>12.1.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
@@ -201,13 +201,13 @@
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
         <dependency>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-agent</artifactId>
-          <version>1.18.8</version>
+          <version>1.18.10</version>
           <type>jar</type>
         </dependency>
       </dependencies>
@@ -289,7 +289,7 @@
         <dependency>
           <groupId>commons-logging</groupId>
           <artifactId>commons-logging</artifactId>
-          <version>1.3.6</version>
+          <version>1.4.0</version>
           <type>jar</type>
         </dependency>
       </dependencies>
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 367d4a3..76f199b 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
@@ -30,7 +30,7 @@
 	dependency {
 		groupId = "commons-logging"
 		artifactId = "commons-logging"
-		version = "1.3.6"
+		version = "1.4.0"
 	}
 }
 
@@ -97,12 +97,12 @@
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy"
-		version = "1.18.8"
+		version = "1.18.10"
 	}
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy-agent"
-		version = "1.18.8"
+		version = "1.18.10"
 	}
 }
 
@@ -154,42 +154,42 @@
 	dependency {
 		groupId = "org.eclipse.jetty.ee10"
 		artifactId = "jetty-ee10-servlet"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-http"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-io"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-security"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-server"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-session"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util-ajax"
-		version = "12.1.9"
+		version = "12.1.10"
 	}
 	dependency {
 		groupId = "jakarta.servlet"
@@ -207,12 +207,12 @@
 	dependency {
 		groupId = "net.java.dev.jna"
 		artifactId = "jna"
-		version = "5.18.1"
+		version = "5.19.1"
 	}
 	dependency {
 		groupId = "net.java.dev.jna"
 		artifactId = "jna-platform"
-		version = "5.18.1"
+		version = "5.19.1"
 	}
 }
 
@@ -238,12 +238,12 @@
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-osgi"
-		version = "2.17.1"
+		version = "2.18.0"
 	}
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-sftp"
-		version = "2.17.1"
+		version = "2.18.0"
 	}
 }
 
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml
index 2a73924..a31b928 100644
--- a/org.eclipse.jgit.packaging/pom.xml
+++ b/org.eclipse.jgit.packaging/pom.xml
@@ -16,7 +16,7 @@
 
   <groupId>org.eclipse.jgit</groupId>
   <artifactId>jgit.tycho.parent</artifactId>
-  <version>7.7.0-SNAPSHOT</version>
+  <version>7.8.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>JGit Tycho Parent</name>
diff --git a/org.eclipse.jgit.pgm.test/BUILD b/org.eclipse.jgit.pgm.test/BUILD
index b8ffa69..fdd87d3 100644
--- a/org.eclipse.jgit.pgm.test/BUILD
+++ b/org.eclipse.jgit.pgm.test/BUILD
@@ -15,8 +15,8 @@
     deps = [
         ":helpers",
         "//lib:args4j",
-        "//lib:commons-io",
         "//lib:commons-compress",
+        "//lib:commons-io",
         "//lib:javaewah",
         "//lib:junit",
         "//lib:slf4j-api",
diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
index 28b0ced..a28a4ef 100644
--- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
@@ -3,31 +3,31 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm.test
 Bundle-SymbolicName: org.eclipse.jgit.pgm.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 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.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.diff;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.dircache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.merge;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.pgm;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.pgm.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.pgm.opt;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)",
+Import-Package: org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.diff;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.dircache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.merge;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.pgm;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.pgm.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.pgm.opt;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)",
  org.hamcrest.core;bundle-version="[1.1.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.pgm.test/pom.xml b/org.eclipse.jgit.pgm.test/pom.xml
index f41d83d..5319d3e 100644
--- a/org.eclipse.jgit.pgm.test/pom.xml
+++ b/org.eclipse.jgit.pgm.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm.test</artifactId>
diff --git a/org.eclipse.jgit.pgm/BUILD b/org.eclipse.jgit.pgm/BUILD
index a267b15..596aed2 100644
--- a/org.eclipse.jgit.pgm/BUILD
+++ b/org.eclipse.jgit.pgm/BUILD
@@ -16,13 +16,13 @@
         "//lib:commons-logging",
         "//lib:httpclient",
         "//lib:httpcore",
+        "//lib:jakarta-servlet-api",
         "//lib:jetty-http",
         "//lib:jetty-io",
         "//lib:jetty-security",
         "//lib:jetty-server",
         "//lib:jetty-servlet",
         "//lib:jetty-util",
-        "//lib:servlet-api",
         "//org.eclipse.jgit.archive:jgit-archive",
         "//org.eclipse.jgit.http.apache:http-apache",
         "//org.eclipse.jgit:jgit",
diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
index e31d3dc..a0bace4 100644
--- a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm
 Bundle-SymbolicName: org.eclipse.jgit.pgm
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -15,50 +15,50 @@
  org.eclipse.jetty.server.handler;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util;version="[12.0.0,13.0.0)",
  org.eclipse.jetty.util.component;version="[12.0.0,13.0.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.archive;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.awtui;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.blame;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.diff;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.dircache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.gitrepo;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.io;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.midx;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.server;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.server.fs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs.server.s3;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.merge;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.notes;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revplot;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http.apache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.resolver;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.sshd;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.archive;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.awtui;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.blame;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.diff;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.dircache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.gitrepo;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.io;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.midx;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.server;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs.server.s3;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.merge;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.notes;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revplot;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http.apache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.resolver;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.sshd;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)",
  org.kohsuke.args4j;version="[2.33.0,3.0.0)",
  org.kohsuke.args4j.spi;version="[2.33.0,3.0.0)"
-Export-Package: org.eclipse.jgit.console;version="7.7.0";
+Export-Package: org.eclipse.jgit.console;version="7.8.0";
  uses:="org.eclipse.jgit.transport,
   org.eclipse.jgit.util",
- org.eclipse.jgit.pgm;version="7.7.0";
+ org.eclipse.jgit.pgm;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.awtui,
@@ -70,14 +70,14 @@
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.api,
    javax.swing",
- org.eclipse.jgit.pgm.debug;version="7.7.0";
+ org.eclipse.jgit.pgm.debug;version="7.8.0";
   uses:="org.eclipse.jgit.util.io,
    org.eclipse.jgit.pgm,
    org.eclipse.jetty.servlet",
- org.eclipse.jgit.pgm.internal;version="7.7.0";
+ org.eclipse.jgit.pgm.internal;version="7.8.0";
   x-friends:="org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.test",
- org.eclipse.jgit.pgm.opt;version="7.7.0";
+ org.eclipse.jgit.pgm.opt;version="7.8.0";
   uses:="org.kohsuke.args4j,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
diff --git a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
index 65901e0..e9a6b04 100644
--- a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.pgm - Sources
 Bundle-SymbolicName: org.eclipse.jgit.pgm.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml
index 659718b..bb43724 100644
--- a/org.eclipse.jgit.pgm/pom.xml
+++ b/org.eclipse.jgit.pgm/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
index 1dc3728..7df322e 100644
--- a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
@@ -2,17 +2,17 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent;singleton:=true
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/agent
 Bundle-Vendor: %Bundle-Vendor
-Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[7.7.0,7.8.0)"
+Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[7.8.0,7.9.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.agent
 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.eclipse.jgit.transport.sshd;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)"
+Import-Package: org.eclipse.jgit.transport.sshd;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)"
 Require-Bundle: com.sun.jna;bundle-version="[5.8.0,6.0.0)",
  com.sun.jna.platform;bundle-version="[5.8.0,6.0.0)"
-Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="7.7.0";x-internal:=true
+Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="7.8.0";x-internal:=true
diff --git a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
index a085c04..9a8ae16 100644
--- a/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.ssh.apache.agent - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache.agent/pom.xml b/org.eclipse.jgit.ssh.apache.agent/pom.xml
index 4d7b7c2..8769f64 100644
--- a/org.eclipse.jgit.ssh.apache.agent/pom.xml
+++ b/org.eclipse.jgit.ssh.apache.agent/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.agent</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.test/BUILD b/org.eclipse.jgit.ssh.apache.test/BUILD
index bf796c0..e36f8d6 100644
--- a/org.eclipse.jgit.ssh.apache.test/BUILD
+++ b/org.eclipse.jgit.ssh.apache.test/BUILD
@@ -6,6 +6,7 @@
     "@com_googlesource_gerrit_bazlets//tools:junit.bzl",
     "junit_tests",
 )
+load("@rules_java//java:defs.bzl", "java_library")
 
 DEPS = [
     "//lib:bcpkix",
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 ae9e11e..d48c4a2 100644
--- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -3,45 +3,45 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 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.agent;version="[2.17.1,2.18.0)",
- org.apache.sshd.certificate;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.config.hosts;version="[2.17.1,2.18.0)",
- org.apache.sshd.common;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.auth;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.cipher;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.kex;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.session;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.signature;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.net;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)",
- org.apache.sshd.core;version="[2.17.1,2.18.0)",
- org.apache.sshd.server;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.forward;version="[2.17.1,2.18.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.signing.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.sshd;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.sshd.proxy;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.sshd;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.sshd.agent;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+Import-Package: org.apache.sshd.agent;version="[2.18.0,2.19.0)",
+ org.apache.sshd.certificate;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.config.hosts;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.auth;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.cipher;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.helpers;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.kex;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.keyprovider;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.session;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.signature;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.buffer;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.net;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.security;version="[2.18.0,2.19.0)",
+ org.apache.sshd.core;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.forward;version="[2.18.0,2.19.0)",
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.signing.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.sshd;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.sshd;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.sshd.agent;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.apache.test/pom.xml b/org.eclipse.jgit.ssh.apache.test/pom.xml
index 2ab6c39..c42eb2b 100644
--- a/org.eclipse.jgit.ssh.apache.test/pom.xml
+++ b/org.eclipse.jgit.ssh.apache.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
index 5cff8a8..c090c4d 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
@@ -6,11 +6,11 @@
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Export-Package: org.eclipse.jgit.internal.signing.ssh;version="7.7.0";x-friends:="org.eclipse.jgit.ssh.apache.test",
- org.eclipse.jgit.internal.transport.sshd;version="7.7.0";x-friends:="org.eclipse.jgit.ssh.apache.test";
+Export-Package: org.eclipse.jgit.internal.signing.ssh;version="7.8.0";x-friends:="org.eclipse.jgit.ssh.apache.test",
+ org.eclipse.jgit.internal.transport.sshd;version="7.8.0";x-friends:="org.eclipse.jgit.ssh.apache.test";
   uses:="org.apache.sshd.client,
    org.apache.sshd.client.auth,
    org.apache.sshd.client.auth.keyboard,
@@ -25,80 +25,80 @@
    org.apache.sshd.common.signature,
    org.apache.sshd.common.util.buffer,
    org.eclipse.jgit.transport",
- org.eclipse.jgit.internal.transport.sshd.agent;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.auth;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.pkcs11;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.proxy;version="7.7.0";x-friends:="org.eclipse.jgit.ssh.apache.test",
- org.eclipse.jgit.signing.ssh;version="7.7.0";uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.transport.sshd;version="7.7.0";
+ org.eclipse.jgit.internal.transport.sshd.agent;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.auth;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.pkcs11;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="7.8.0";x-friends:="org.eclipse.jgit.ssh.apache.test",
+ org.eclipse.jgit.signing.ssh;version="7.8.0";uses:="org.eclipse.jgit.lib",
+ org.eclipse.jgit.transport.sshd;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.apache.sshd.client.config.hosts,
    org.apache.sshd.common.keyprovider,
    org.eclipse.jgit.util,
    org.apache.sshd.client.session,
    org.apache.sshd.client.keyverifier",
- org.eclipse.jgit.transport.sshd.agent;version="7.7.0"
+ org.eclipse.jgit.transport.sshd.agent;version="7.8.0"
 Import-Package: org.bouncycastle.jce.provider;version="[1.84.0,2.0.0)",
- org.apache.sshd.agent;version="[2.17.1,2.18.0)",
- org.apache.sshd.client;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.auth;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.auth.keyboard;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.auth.password;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.auth.pubkey;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.channel;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.config.hosts;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.config.keys;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.future;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.keyverifier;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.session;version="[2.17.1,2.18.0)",
- org.apache.sshd.client.session.forward;version="[2.17.1,2.18.0)",
- org.apache.sshd.common;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.auth;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.channel;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.cipher;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.compression;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.config.keys;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.config.keys.loader;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.config.keys.u2f;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.digest;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.forward;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.future;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.helpers;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.io;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.kex;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.kex.extension;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.kex.extension.parser;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.keyprovider;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.mac;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.random;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.session;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.session.helpers;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.signature;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.buffer;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.buffer.keys;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.closeable;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.io;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.io.der;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.io.functors;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.io.resource;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.logging;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.net;version="[2.17.1,2.18.0)",
- org.apache.sshd.common.util.security;version="[2.17.1,2.18.0)",
- org.apache.sshd.core;version="[2.17.1,2.18.0)",
- org.apache.sshd.server.auth;version="[2.17.1,2.18.0)",
- org.apache.sshd.sftp;version="[2.17.1,2.18.0)",
- org.apache.sshd.sftp.client;version="[2.17.1,2.18.0)",
- org.apache.sshd.sftp.common;version="[2.17.1,2.18.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.fnmatch;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.apache.sshd.agent;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.auth;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.auth.keyboard;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.auth.password;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.auth.pubkey;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.channel;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.config.hosts;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.config.keys;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.future;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.keyverifier;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.session;version="[2.18.0,2.19.0)",
+ org.apache.sshd.client.session.forward;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.auth;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.channel;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.cipher;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.compression;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys.loader;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.config.keys.u2f;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.digest;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.forward;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.future;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.helpers;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.io;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.kex;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.kex.extension;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.kex.extension.parser;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.keyprovider;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.mac;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.random;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.session;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.session.helpers;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.signature;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.buffer;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.buffer.keys;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.closeable;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.io;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.io.der;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.io.functors;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.io.resource;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.logging;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.net;version="[2.18.0,2.19.0)",
+ org.apache.sshd.common.util.security;version="[2.18.0,2.19.0)",
+ org.apache.sshd.core;version="[2.18.0,2.19.0)",
+ org.apache.sshd.server.auth;version="[2.18.0,2.19.0)",
+ org.apache.sshd.sftp;version="[2.18.0,2.19.0)",
+ org.apache.sshd.sftp.client;version="[2.18.0,2.19.0)",
+ org.apache.sshd.sftp.common;version="[2.18.0,2.19.0)",
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.fnmatch;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
index fa44087..3b936a8 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.ssh.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml
index 18cba18..d5cff8d 100644
--- a/org.eclipse.jgit.ssh.apache/pom.xml
+++ b/org.eclipse.jgit.ssh.apache/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
index 73ef145..85d12ab 100644
--- a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
@@ -3,20 +3,20 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 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: com.jcraft.jsch;version="[0.1.54,0.2.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.ssh.jsch.test/pom.xml b/org.eclipse.jgit.ssh.jsch.test/pom.xml
index 176c91d..a5e57f6 100644
--- a/org.eclipse.jgit.ssh.jsch.test/pom.xml
+++ b/org.eclipse.jgit.ssh.jsch.test/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.jsch.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
index 9093f85..8eaf94d 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
@@ -3,20 +3,20 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch;singleton:=true
-Fragment-Host: org.eclipse.jgit;bundle-version="[7.7.0,7.8.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[7.8.0,7.9.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/jsch
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="7.7.0"
+Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="7.8.0"
 Import-Package: com.jcraft.jsch;version="[0.1.37,0.2.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)",
  org.slf4j;version="[1.7.0,3.0.0)"
diff --git a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
index 4863dae..9d08701 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.ssh.jsch - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.jsch/pom.xml b/org.eclipse.jgit.ssh.jsch/pom.xml
index b8e2e4c..865298d 100644
--- a/org.eclipse.jgit.ssh.jsch/pom.xml
+++ b/org.eclipse.jgit.ssh.jsch/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.jsch</artifactId>
diff --git a/org.eclipse.jgit.test/BUILD b/org.eclipse.jgit.test/BUILD
index 7755df0..7dab36d 100644
--- a/org.eclipse.jgit.test/BUILD
+++ b/org.eclipse.jgit.test/BUILD
@@ -53,10 +53,11 @@
     exclude = HELPERS + DATA + EXCLUDED,
 ))
 
-
-tests(tests = glob(["exttst/**/*.java"]),
+tests(
+    extra_tags = ["ext"],
     srcprefix = "exttst/",
-    extra_tags = ["ext"])
+    tests = glob(["exttst/**/*.java"]),
+)
 
 # Non abstract base classes used for tests by other test classes
 BASE = [
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
index 36a9e4f..5cab045 100644
--- a/org.eclipse.jgit.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.test
 Bundle-SymbolicName: org.eclipse.jgit.test
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-17
@@ -21,66 +21,66 @@
  org.apache.commons.io.output;version="[2.15.0,3.0.0)",
  org.apache.commons.lang3;version="[3.17.0,4.0.0)",
  org.assertj.core.api;version="[3.14.0,4.0.0)",
- org.eclipse.jgit.annotations;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.api.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.archive;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.attributes;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.awtui;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.blame;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.blame.cache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.diff;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.dircache;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.events;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.fnmatch;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.gitrepo;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.hooks;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.ignore;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.ignore.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.diff;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.fsck;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.commitgraph;version="7.7.0",
- org.eclipse.jgit.internal.storage.dfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.io;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.memory;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.midx;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.connectivity;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.parser;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.junit.time;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lfs;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.logging;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.merge;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.notes;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.patch;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.pgm;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.pgm.internal;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revplot;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.file;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.storage.pack;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.submodule;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.http;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport.resolver;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.treewalk.filter;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.io;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util.sha1;version="[7.7.0,7.8.0)",
+ org.eclipse.jgit.annotations;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.api.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.archive;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.attributes;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.awtui;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.blame;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.blame.cache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.diff;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.dircache;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.events;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.fnmatch;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.gitrepo;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.hooks;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.ignore;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.ignore.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.diff;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.fsck;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.commitgraph;version="7.8.0",
+ org.eclipse.jgit.internal.storage.dfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.io;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.memory;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.midx;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.connectivity;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.junit.time;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lfs;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.logging;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.merge;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.notes;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.patch;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.pgm;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.pgm.internal;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revplot;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.file;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.storage.pack;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.submodule;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.http;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport.resolver;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.treewalk.filter;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.io;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util.sha1;version="[7.8.0,7.9.0)",
  org.hamcrest;version="[3.0.0,4.0.0)",
  org.hamcrest.collection;version="[3.0.0,4.0.0)",
  org.junit;version="[4.13,5.0.0)",
diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml
index 92a7597..531bdcb 100644
--- a/org.eclipse.jgit.test/pom.xml
+++ b/org.eclipse.jgit.test/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.test</artifactId>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java
index d64cfc5..b1fd58e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java
@@ -1996,16 +1996,18 @@ public void testLongFilename() throws Exception {
 				break;
 			}
 		}
-		char[] bytes = new char[maximumFileNameLength];
-		Arrays.fill(bytes, 'f');
-		String longFileName = new String(bytes);
+		String longFileName = "f".repeat(maximumFileNameLength);
+		String longFileName2 = "Ñ„".repeat(maximumFileNameLength / 2);
 		// 1
-		doit(mkmap(longFileName, "a"), mkmap(longFileName, "b"),
-				mkmap(longFileName, "a"));
+		doit(mkmap(longFileName, "a", longFileName2, "a"),
+				mkmap(longFileName, "b", longFileName2, "b"),
+				mkmap(longFileName, "a", longFileName2, "a"));
 		writeTrashFile(longFileName, "a");
+		writeTrashFile(longFileName2, "a");
 		checkout();
 		assertNoConflicts();
 		assertUpdated(longFileName);
+		assertUpdated(longFileName2);
 	}
 
 	@Test
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryResolveTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryResolveTest.java
index 7f1dfc3..2773715 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryResolveTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RepositoryResolveTest.java
@@ -277,6 +277,7 @@ public void invalidNames() throws AmbiguousObjectException, IOException {
 		assertTrue(Repository.isValidRefName("x/a]b")); // odd, yes..
 		assertTrue(Repository.isValidRefName("x/\u00a0")); // unicode is fine,
 															// even hard space
+		assertFalse(Repository.isValidRefName("single-component"));
 		assertFalse(Repository.isValidRefName("x/.a"));
 		assertFalse(Repository.isValidRefName("x/a."));
 		assertFalse(Repository.isValidRefName("x/a..b"));
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackTest.java
index 595b970..bcc7082 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ReceivePackTest.java
@@ -42,22 +42,57 @@
 
 package org.eclipse.jgit.transport;
 
+import java.util.ArrayList;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.jgit.errors.PackProtocolException;
 import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
+import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.junit.TestRepository.BranchBuilder;
+import org.eclipse.jgit.lib.NullProgressMonitor;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.transport.ReceiveCommand.Result;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Test;
 
 /** Tests for receive-pack utilities. */
 public class ReceivePackTest {
+	private URIish uri;
+	private TestProtocol<Object> testProtocol;
+	private InMemoryRepository client;
+	private InMemoryRepository server;
+	private TestRepository clientTestRepo;
+	private TestRepository serverTestRepo;
+
+	@Before
+	public void setUp() throws Exception {
+		client = new InMemoryRepository(new DfsRepositoryDescription("client"));
+		server = new InMemoryRepository(new DfsRepositoryDescription("server"));
+		clientTestRepo = new TestRepository<>(client);
+		serverTestRepo = new TestRepository<>(server);
+
+		testProtocol = new TestProtocol<>(null, (Object req, Repository db) -> {
+			ReceivePack rp = new ReceivePack(db);
+			return rp;
+		});
+		uri = testProtocol.register(new Object(), server);
+	}
+
+	@After
+	public void tearDown() {
+		Transport.unregister(testProtocol);
+	}
+
 	@Test
 	public void parseCommand() throws Exception {
 		String o = "0000000000000000000000000000000000000000";
@@ -81,6 +116,54 @@ public void parseCommand() throws Exception {
 		assertParseCommandFails(o + " " + "X" + n.substring(1) + " " + r);
 	}
 
+	/**
+	 * Ensure receive-pack rejects a push to a one level ref (refs/master).
+	 */
+	@Test
+	public void rejectsCreationOfOneLevelRef() throws Exception {
+		// Create refs/master on the client so we can attempt to push it
+		RevCommit clientCommit;
+		BranchBuilder bb = clientTestRepo.branch("refs/master");
+		clientCommit = bb.commit().noFiles().message("Testing").create();
+
+		ArrayList<RemoteRefUpdate> refUpdates = new ArrayList<>();
+		refUpdates.add(new RemoteRefUpdate(
+				clientTestRepo.getRepository(), "refs/master", clientCommit,
+				"refs/master", false, /* force update */
+				null, /* no local tracking ref */
+				ObjectId.zeroId() // expected advertisement
+		));
+		Transport tn = testProtocol.open(uri, client, "server");
+		PushResult result = tn.push(NullProgressMonitor.INSTANCE, refUpdates);
+		RemoteRefUpdate update = result.getRemoteUpdate("refs/master");
+
+		assertEquals(RemoteRefUpdate.Status.REJECTED_OTHER_REASON,
+				update.getStatus());
+		assertEquals(JGitText.get().funnyRefname, update.getMessage());
+	}
+
+	/**
+	 * Allow deletion of one level refs (refs/master).
+	 */
+	@Test
+	public void acceptsDeletionOfOneLevelRef() throws Exception {
+		BranchBuilder bb = serverTestRepo.branch("refs/master");
+		bb.update(bb.commit().noFiles().message("Testing").create());
+
+		ArrayList<RemoteRefUpdate> refUpdates = new ArrayList<>();
+		refUpdates.add(new RemoteRefUpdate(null, null, ObjectId.zeroId(),
+				"refs/master", false, // force update
+				null, // no local tracking ref
+				null // expected advertisement
+		));
+		Transport tn = testProtocol.open(uri, client, "server");
+		PushResult result = tn.push(NullProgressMonitor.INSTANCE, refUpdates);
+		RemoteRefUpdate update = result.getRemoteUpdate("refs/master");
+
+		assertEquals(RemoteRefUpdate.Status.OK, update.getStatus());
+		assertEquals(null, update.getMessage());
+	}
+
 	private void assertParseCommandFails(String input) {
 		try {
 			ReceivePack.parseCommand(input);
diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
index ef66f91..e376952 100644
--- a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
@@ -4,15 +4,15 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ui
 Bundle-SymbolicName: org.eclipse.jgit.ui
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Vendor: %Bundle-Vendor
 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
-Export-Package: org.eclipse.jgit.awtui;version="7.7.0"
-Import-Package: org.eclipse.jgit.errors;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.lib;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.nls;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revplot;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.revwalk;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.transport;version="[7.7.0,7.8.0)",
- org.eclipse.jgit.util;version="[7.7.0,7.8.0)"
+Export-Package: org.eclipse.jgit.awtui;version="7.8.0"
+Import-Package: org.eclipse.jgit.errors;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.lib;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.nls;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revplot;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.revwalk;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.transport;version="[7.8.0,7.9.0)",
+ org.eclipse.jgit.util;version="[7.8.0,7.9.0)"
diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
index 2430c2b..54a8d56 100644
--- a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit.ui - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ui.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit.ui;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit.ui;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml
index a21d2f3..40056db 100644
--- a/org.eclipse.jgit.ui/pom.xml
+++ b/org.eclipse.jgit.ui/pom.xml
@@ -19,7 +19,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ui</artifactId>
diff --git a/org.eclipse.jgit/BUILD b/org.eclipse.jgit/BUILD
index 1e9b770..5d4bce4 100644
--- a/org.eclipse.jgit/BUILD
+++ b/org.eclipse.jgit/BUILD
@@ -16,6 +16,12 @@
 java_library(
     name = "jgit_non_stamped",
     srcs = SRCS,
+    javacopts = [
+        "-Xep:ReferenceEquality:OFF",
+        "-Xep:StringEquality:OFF",
+        "-Xep:TypeParameterUnusedInFormals:OFF",
+        "-Xep:DefaultCharset:OFF",
+    ],
     resource_strip_prefix = "org.eclipse.jgit/resources",
     resources = RESOURCES,
     deps = [
@@ -24,12 +30,6 @@
         "//lib:javaewah",
         "//lib:slf4j-api",
     ],
-    javacopts = [
-        "-Xep:ReferenceEquality:OFF",
-        "-Xep:StringEquality:OFF",
-        "-Xep:TypeParameterUnusedInFormals:OFF",
-        "-Xep:DefaultCharset:OFF",
-    ]
 )
 
 genrule(
diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF
index 2377e26..8e92528 100644
--- a/org.eclipse.jgit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit
 Bundle-SymbolicName: org.eclipse.jgit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
@@ -11,8 +11,8 @@
 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
 Service-Component: OSGI-INF/org.eclipse.jgit.internal.util.CleanupService.xml
 Eclipse-ExtensibleAPI: true
-Export-Package: org.eclipse.jgit.annotations;version="7.7.0",
- org.eclipse.jgit.api;version="7.7.0";
+Export-Package: org.eclipse.jgit.annotations;version="7.8.0",
+ org.eclipse.jgit.api;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.notes,
    org.eclipse.jgit.dircache,
@@ -27,21 +27,21 @@
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.blame,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.api.errors;version="7.7.0";
+ org.eclipse.jgit.api.errors;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.attributes;version="7.7.0";
+ org.eclipse.jgit.attributes;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.blame;version="7.7.0";
+ org.eclipse.jgit.blame;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.blame.cache,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter",
- org.eclipse.jgit.blame.cache;version="7.7.0";
+ org.eclipse.jgit.blame.cache;version="7.8.0";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.diff;version="7.7.0";
+ org.eclipse.jgit.diff;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.patch,
@@ -49,55 +49,55 @@
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.dircache;version="7.7.0";
+ org.eclipse.jgit.dircache;version="7.8.0";
   uses:="org.eclipse.jgit.events,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.errors;version="7.7.0";
+ org.eclipse.jgit.errors;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.events;version="7.7.0";
+ org.eclipse.jgit.events;version="7.8.0";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.fnmatch;version="7.7.0",
- org.eclipse.jgit.gitrepo;version="7.7.0";
+ org.eclipse.jgit.fnmatch;version="7.8.0",
+ org.eclipse.jgit.gitrepo;version="7.8.0";
   uses:="org.xml.sax.helpers,
    org.eclipse.jgit.api,
    org.eclipse.jgit.api.errors,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.xml.sax",
- org.eclipse.jgit.gitrepo.internal;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.hooks;version="7.7.0";
+ org.eclipse.jgit.gitrepo.internal;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.hooks;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.ignore;version="7.7.0",
- org.eclipse.jgit.ignore.internal;version="7.7.0";
+ org.eclipse.jgit.ignore;version="7.8.0",
+ org.eclipse.jgit.ignore.internal;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal;version="7.7.0";
+ org.eclipse.jgit.internal;version="7.8.0";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.test",
- org.eclipse.jgit.internal.diff;version="7.7.0";
+ org.eclipse.jgit.internal.diff;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.diffmergetool;version="7.7.0";
+ org.eclipse.jgit.internal.diffmergetool;version="7.8.0";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.pgm,
    org.eclipse.egit.ui",
- org.eclipse.jgit.internal.fsck;version="7.7.0";
+ org.eclipse.jgit.internal.fsck;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.revwalk;version="7.7.0";
+ org.eclipse.jgit.internal.revwalk;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.commitgraph;version="7.7.0";
+ org.eclipse.jgit.internal.storage.commitgraph;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.dfs;version="7.7.0";
+ org.eclipse.jgit.internal.storage.dfs;version="7.8.0";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.server,
    org.eclipse.jgit.http.test,
    org.eclipse.jgit.lfs.test",
- org.eclipse.jgit.internal.storage.file;version="7.7.0";
+ org.eclipse.jgit.internal.storage.file;version="7.8.0";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.junit.http,
@@ -109,39 +109,39 @@
    org.eclipse.jgit.ssh.apache,
    org.eclipse.jgit.ssh.apache.test,
    org.eclipse.jgit.ssh.jsch.test",
- org.eclipse.jgit.internal.storage.io;version="7.7.0";
+ org.eclipse.jgit.internal.storage.io;version="7.8.0";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.memory;version="7.7.0";
+ org.eclipse.jgit.internal.storage.memory;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.midx;version="7.7.0";
+ org.eclipse.jgit.internal.storage.midx;version="7.8.0";
   x-friends:="org.eclipse.jgit.pgm,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.pack;version="7.7.0";
+ org.eclipse.jgit.internal.storage.pack;version="7.8.0";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.reftable;version="7.7.0";
+ org.eclipse.jgit.internal.storage.reftable;version="7.8.0";
   x-friends:="org.eclipse.jgit.http.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.submodule;version="7.7.0";x-internal:=true,
- org.eclipse.jgit.internal.transport.connectivity;version="7.7.0";
+ org.eclipse.jgit.internal.submodule;version="7.8.0";x-internal:=true,
+ org.eclipse.jgit.internal.transport.connectivity;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.http;version="7.7.0";
+ org.eclipse.jgit.internal.transport.http;version="7.8.0";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.parser;version="7.7.0";
+ org.eclipse.jgit.internal.transport.parser;version="7.8.0";
   x-friends:="org.eclipse.jgit.http.server,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.ssh;version="7.7.0";
+ org.eclipse.jgit.internal.transport.ssh;version="7.8.0";
   x-friends:="org.eclipse.jgit.ssh.apache,
    org.eclipse.jgit.ssh.jsch,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.util;version="7.7.0";
+ org.eclipse.jgit.internal.util;version="7.8.0";
   x-friends:="org.eclipse.jgit.junit",
- org.eclipse.jgit.lib;version="7.7.0";
+ org.eclipse.jgit.lib;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.sha1,
    org.eclipse.jgit.dircache,
@@ -156,12 +156,12 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.submodule,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.lib.internal;version="7.7.0";
+ org.eclipse.jgit.lib.internal;version="7.8.0";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.pgm,
    org.eclipse.egit.ui",
- org.eclipse.jgit.logging;version="7.7.0",
- org.eclipse.jgit.merge;version="7.7.0";
+ org.eclipse.jgit.logging;version="7.8.0",
+ org.eclipse.jgit.merge;version="7.8.0";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -170,42 +170,42 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.api,
    org.eclipse.jgit.attributes",
- org.eclipse.jgit.nls;version="7.7.0",
- org.eclipse.jgit.notes;version="7.7.0";
+ org.eclipse.jgit.nls;version="7.8.0",
+ org.eclipse.jgit.notes;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.patch;version="7.7.0";
+ org.eclipse.jgit.patch;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.revplot;version="7.7.0";
+ org.eclipse.jgit.revplot;version="7.8.0";
   uses:="org.eclipse.jgit.revwalk,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.revwalk;version="7.7.0";
+ org.eclipse.jgit.revwalk;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.internal.storage.commitgraph",
- org.eclipse.jgit.revwalk.filter;version="7.7.0";
+ org.eclipse.jgit.revwalk.filter;version="7.8.0";
   uses:="org.eclipse.jgit.revwalk,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.file;version="7.7.0";
+ org.eclipse.jgit.storage.file;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.pack;version="7.7.0";
+ org.eclipse.jgit.storage.pack;version="7.8.0";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.submodule;version="7.7.0";
+ org.eclipse.jgit.submodule;version="7.8.0";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.transport;version="7.7.0";
+ org.eclipse.jgit.transport;version="7.8.0";
   uses:="javax.crypto,
    org.eclipse.jgit.hooks,
    org.eclipse.jgit.util.io,
@@ -218,21 +218,21 @@
    org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.storage.pack,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.transport.http;version="7.7.0";
+ org.eclipse.jgit.transport.http;version="7.8.0";
   uses:="javax.net.ssl",
- org.eclipse.jgit.transport.resolver;version="7.7.0";
+ org.eclipse.jgit.transport.resolver;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.treewalk;version="7.7.0";
+ org.eclipse.jgit.treewalk;version="7.8.0";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.util",
- org.eclipse.jgit.treewalk.filter;version="7.7.0";
+ org.eclipse.jgit.treewalk.filter;version="7.8.0";
   uses:="org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util;version="7.7.0";
+ org.eclipse.jgit.util;version="7.8.0";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.hooks,
    org.eclipse.jgit.revwalk,
@@ -245,12 +245,12 @@
    org.eclipse.jgit.treewalk,
    javax.net.ssl,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.util.io;version="7.7.0";
+ org.eclipse.jgit.util.io;version="7.8.0";
   uses:="org.eclipse.jgit.attributes,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util.sha1;version="7.7.0",
- org.eclipse.jgit.util.time;version="7.7.0"
+ org.eclipse.jgit.util.sha1;version="7.8.0",
+ org.eclipse.jgit.util.time;version="7.8.0"
 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)",
  javax.crypto,
  javax.management,
diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
index 46c3552..09b1ed3 100644
--- a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: org.eclipse.jgit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 7.7.0.qualifier
+Bundle-Version: 7.8.0.qualifier
 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
-Eclipse-SourceBundle: org.eclipse.jgit;version="7.7.0.qualifier";roots="."
+Eclipse-SourceBundle: org.eclipse.jgit;version="7.8.0.qualifier";roots="."
diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml
index e9b16e0..d893037 100644
--- a/org.eclipse.jgit/pom.xml
+++ b/org.eclipse.jgit/pom.xml
@@ -20,7 +20,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>org.eclipse.jgit-parent</artifactId>
-    <version>7.7.0-SNAPSHOT</version>
+    <version>7.8.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit</artifactId>
diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
index dca75e2..4b6d086 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -261,6 +261,7 @@
 deepenSinceWithDeepen=Cannot combine deepen with deepen-since
 deleteBranchUnexpectedResult=Delete branch returned unexpected result {0}
 deleteFileFailed=Could not delete file {0}
+deleteLooseRef=Deleted loose ref {}, object Id {}
 deletedOrphanInPackDir=Deleted orphaned file {}
 deleteRequiresZeroNewId=Delete requires new ID to be zero
 deleteTagUnexpectedResult=Delete tag returned unexpected result {0}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java
index de02aec..84301c8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/Checkout.java
@@ -186,12 +186,7 @@ public void checkout(DirCacheEntry entry, CheckoutMetadata metadata,
 			return;
 		}
 
-		String name = f.getName();
-		if (name.length() > 200) {
-			name = name.substring(0, 200);
-		}
-		File tmpFile = File.createTempFile("._" + name, null, parentDir); //$NON-NLS-1$
-
+		File tmpFile = createTempFile(f, parentDir);
 		DirCacheCheckout.getContent(cache.getRepository(), path, metadata, ol,
 				options,
 				new FileOutputStream(tmpFile));
@@ -243,4 +238,35 @@ public void checkout(DirCacheEntry entry, CheckoutMetadata metadata,
 		}
 		entry.setLastModified(fs.lastModifiedInstant(f));
 	}
+
+	/**
+	 * Creates a temp file starting with the prefix "._" followed by the name of
+	 * the given file, truncated to a maximum of 50 characters if necessary. The
+	 * temp file is created in the given parent directory. If the last character
+	 * of the truncated name is a high surrogate, it is removed to avoid
+	 * creating an invalid file name. Some filesystems have a limit of 255 bytes
+	 * for file names, hence the truncation to 50 characters to allow for the
+	 * "._" prefix and potential multi-byte characters.
+	 *
+	 * @param f
+	 *            file to create a temp file for
+	 * @param parentDir
+	 *            parent directory in which to create the temp file
+	 * @return the temp file created
+	 * @throws IOException
+	 *             if an I/O error occurs while creating the temp file
+	 */
+	private File createTempFile(File f, File parentDir) throws IOException {
+		final int MAXLENGTH = 50;
+
+		String name = f.getName();
+		if (name.length() > MAXLENGTH) {
+			if (Character.isHighSurrogate(name.charAt(MAXLENGTH - 1))) {
+				name = name.substring(0, MAXLENGTH - 1);
+			} else {
+				name = name.substring(0, MAXLENGTH);
+			}
+		}
+		return File.createTempFile("._" + name, null, parentDir); //$NON-NLS-1$
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
index 4251f4c..5bab353 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -291,6 +291,7 @@ public static JGitText get() {
 	/***/ public String deepenSinceWithDeepen;
 	/***/ public String deleteBranchUnexpectedResult;
 	/***/ public String deleteFileFailed;
+	/***/ public String deleteLooseRef;
 	/***/ public String deletedOrphanInPackDir;
 	/***/ public String deleteRequiresZeroNewId;
 	/***/ public String deleteTagUnexpectedResult;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjDatabase.java
index 3f457f2..8c96e85 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjDatabase.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsObjDatabase.java
@@ -612,19 +612,36 @@ PackList scanPacks(PackList original) throws IOException {
 	}
 
 	private PackList scanPacksImpl(PackList old) throws IOException {
-		DfsBlockCache cache = DfsBlockCache.getInstance();
-		Map<DfsPackDescription, DfsPackFile> packs = packMap(old);
-		Map<DfsPackDescription, DfsReftable> reftables = reftableMap(old);
-
 		List<DfsPackDescription> scanned = useMultipackIndex()
 				? MidxPackFilter.useMidx(listPacks())
 				: MidxPackFilter.skipMidxs(listPacks());
 		scanned.sort(packComparator);
+		return descTreeToPackList(scanned, old);
+	}
 
-		List<DfsPackFile> newPacks = new ArrayList<>(scanned.size());
+	/**
+	 * Translate the valid list of descriptions (with midx as trees of packs)
+	 * into DfsPackFile and DfsReftable instances
+	 *
+	 * @param descTree
+	 *            a valid list of descriptions, may contain midx. Covered packs
+	 *            and nested midxs are NOT in the top level list.
+	 * @return a packlist with the new/reused DfsPackFile instances
+	 */
+	public PackList descTreeToPackList(List<DfsPackDescription> descTree) {
+		return descTreeToPackList(descTree, NO_PACKS);
+	}
+
+	private PackList descTreeToPackList(List<DfsPackDescription> descTree,
+			PackList old) {
+		Map<DfsPackDescription, DfsPackFile> packs = packMap(old);
+		Map<DfsPackDescription, DfsReftable> reftables = reftableMap(old);
+
+		DfsBlockCache cache = DfsBlockCache.getInstance();
+		List<DfsPackFile> newPacks = new ArrayList<>(descTree.size());
 		List<DfsPackDescription> packsWithReftables = new ArrayList<>();
 		boolean foundNew = false;
-		for (DfsPackDescription dsc : scanned) {
+		for (DfsPackDescription dsc : descTree) {
 			DfsPackFile oldPack = packs.remove(dsc);
 			if (oldPack != null) {
 				newPacks.add(oldPack);
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 6a78271..7885794 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
@@ -1995,6 +1995,9 @@ private String getProcDesc() {
 		}
 
 		private long getPID() {
+			if (SystemReader.getInstance().isAndroid()) {
+				return 0;
+			}
 			return ProcessHandle.current().pid();
 		}
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
index 4db14e2..1b43f27 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java
@@ -740,7 +740,11 @@ void delete(RefDirectoryUpdate update) throws IOException {
 				int levels = levelsIn(name) - 2;
 				delete(logFor(name), levels);
 				if (dst.getStorage().isLoose()) {
-					deleteAndUnlock(fileFor(name), levels, update);
+					File refFile = fileFor(name);
+					ObjectId refObjectId = dst.getObjectId();
+					deleteAndUnlock(refFile, levels, update);
+					LOG.debug(JGitText.get().deleteLooseRef,
+							refFile, refObjectId);
 				}
 			} finally {
 				lck.unlock();
@@ -873,6 +877,7 @@ private void pack(Collection<String> refs,
 							} while (!looseRefs.compareAndSet(curLoose, newLoose));
 							int levels = levelsIn(refName) - 2;
 							deleteAndUnlock(refFile, levels, rLck);
+							LOG.debug(JGitText.get().deleteLooseRef, refFile, clr_oid);
 						}
 					} finally {
 						if (shouldUnlock) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
index c9dc6da..01a4361 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
@@ -1375,6 +1375,8 @@ public RepositoryState getRepositoryState() {
 	 *
 	 * For portability reasons '\' is excluded
 	 *
+	 * @see <a href="http://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html"
+	 *      >git-check-ref-format(1) manual page</a>
 	 * @param refName a {@link java.lang.String} object.
 	 * @return true if refName is a valid ref name
 	 */
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
index 8b05d41..c0ff5bf 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
@@ -222,6 +222,8 @@ public class ReceivePack {
 
 	private boolean checkReferencedAreReachable;
 
+	private boolean retainParsedObjectIDs;
+
 	/** Git object size limit */
 	private long maxObjectSizeLimit;
 
@@ -501,6 +503,27 @@ public void setCheckReferencedObjectsAreReachable(boolean b) {
 	}
 
 	/**
+	 * Whether the {@code PackParser} should retain object IDs.
+	 *
+	 * @return {@code true} if the parsed object IDs should be retained.
+	 * @since 7.7
+	 */
+	public boolean isRetainParsedObjectIDs() {
+		return retainParsedObjectIDs;
+	}
+
+	/**
+	 * Set whether the {@code PackParser} should retain object IDs.
+	 *
+	 * @param retain
+	 *            {@code true} to retain the parsed object IDs.
+	 * @since 7.7
+	 */
+	public void setRetainParsedObjectIDs(boolean retain) {
+		this.retainParsedObjectIDs = retain;
+	}
+
+	/**
 	 * Whether this class expects a bi-directional pipe opened between the
 	 * client and itself.
 	 *
@@ -1547,7 +1570,7 @@ private void receivePack() throws IOException {
 
 			parser = ins.newPackParser(packInputStream());
 			parser.setAllowThin(true);
-			parser.setNeedNewObjectIds(checkReferencedAreReachable);
+			parser.setNeedNewObjectIds(checkReferencedAreReachable || retainParsedObjectIDs);
 			parser.setNeedBaseObjectIds(checkReferencedAreReachable);
 			parser.setCheckEofAfterPackFooter(!biDirectionalPipe
 					&& !isExpectDataAfterPackFooter());
@@ -1658,6 +1681,18 @@ private void validateCommands() {
 					continue;
 				}
 
+				if (cmd.getRefName().startsWith(Constants.R_REFS)
+					&& !Repository.isValidRefName(
+						cmd.getRefName().substring(Constants.R_REFS.length())
+					)
+				) {
+					// Reject the creation of one level references such as
+					// refs/master to match cgit implementation.
+					cmd.setResult(Result.REJECTED_OTHER_REASON,
+							JGitText.get().funnyRefname);
+					continue;
+				}
+
 				if (ref != null) {
 					// A well behaved client shouldn't have sent us a
 					// create command for a ref we advertised to it.
@@ -1753,8 +1788,18 @@ private void validateCommands() {
 				}
 			}
 
-			if (!cmd.getRefName().startsWith(Constants.R_REFS)
-					|| !Repository.isValidRefName(cmd.getRefName())) {
+			if (!cmd.getRefName().startsWith(Constants.R_REFS)) {
+				cmd.setResult(Result.REJECTED_OTHER_REASON,
+						JGitText.get().funnyRefname);
+			}
+
+			if (!Repository.isValidRefName(cmd.getRefName())
+				// But accept deletion of one level refs (refs/main)
+				&& !(
+					cmd.getType() == ReceiveCommand.Type.DELETE
+					&& Repository.isValidRefName(cmd.getRefName().substring(Constants.R_REFS.length()))
+				)
+			) {
 				cmd.setResult(Result.REJECTED_OTHER_REASON,
 						JGitText.get().funnyRefname);
 			}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
index ac76e83..f6def25 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/Transport.java
@@ -44,6 +44,7 @@
 import org.eclipse.jgit.hooks.Hooks;
 import org.eclipse.jgit.hooks.PrePushHook;
 import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectChecker;
 import org.eclipse.jgit.lib.ObjectId;
@@ -1457,7 +1458,10 @@ public FetchResult fetch(final ProgressMonitor monitor,
 		final FetchResult result = new FetchResult();
 		new FetchProcess(this, toFetch).execute(monitor, result, branch);
 
-		local.autoGC(monitor);
+		if (local.getConfig().getBoolean(ConfigConstants.CONFIG_FETCH_SECTION,
+			ConfigConstants.CONFIG_KEY_AUTOGC, true)) {
+			local.autoGC(monitor);
+		}
 
 		return result;
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
index 0b7c620..763bf26 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
@@ -68,6 +68,8 @@ public abstract class SystemReader {
 
 	private static volatile Boolean isLinux;
 
+	private static volatile Boolean isAndroid;
+
 	private static final String GIT_TRACE_PERFORMANCE = "GIT_TRACE_PERFORMANCE"; //$NON-NLS-1$
 
 	private static final boolean performanceTrace = initPerformanceTrace();
@@ -762,6 +764,25 @@ public boolean isLinux() {
 	}
 
 	/**
+	 * Whether we are running on Android.
+	 *
+	 * @return true if we are running on Android.
+	 * @since 7.7
+	 */
+	public boolean isAndroid() {
+		if (isAndroid == null) {
+			String vendor = getProperty("java.vendor"); //$NON-NLS-1$
+			if (vendor == null) {
+				isAndroid = Boolean.FALSE;
+			} else {
+				isAndroid = Boolean
+						.valueOf(vendor.toLowerCase().contains("android")); //$NON-NLS-1$
+			}
+		}
+		return isAndroid.booleanValue();
+	}
+
+	/**
 	 * Whether performance trace is enabled
 	 *
 	 * @return whether performance trace is enabled
diff --git a/pom.xml b/pom.xml
index b1521e4..bcd8508 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
   <groupId>org.eclipse.jgit</groupId>
   <artifactId>org.eclipse.jgit-parent</artifactId>
   <packaging>pom</packaging>
-  <version>7.7.0-SNAPSHOT</version>
+  <version>7.8.0-SNAPSHOT</version>
 
   <name>JGit - Parent</name>
   <url>${jgit-url}</url>
@@ -118,9 +118,9 @@
 
     <project.build.outputTimestamp>${commit.time.iso}</project.build.outputTimestamp>
 
-    <jgit-last-release-version>7.6.0.202603022253-r</jgit-last-release-version>
+    <jgit-last-release-version>7.7.0.202606012155-r</jgit-last-release-version>
     <ant-version>1.10.15</ant-version>
-    <apache-sshd-version>2.17.1</apache-sshd-version>
+    <apache-sshd-version>2.18.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>
@@ -130,7 +130,7 @@
     <commons-compress-version>1.28.0</commons-compress-version>
     <osgi-core-version>6.0.0</osgi-core-version>
     <servlet-api-version>6.1.0</servlet-api-version>
-    <jetty-version>12.1.9</jetty-version>
+    <jetty-version>12.1.10</jetty-version>
     <japicmp-version>0.25.0</japicmp-version>
     <httpclient-version>4.5.14</httpclient-version>
     <httpcore-version>4.4.16</httpcore-version>
@@ -147,8 +147,8 @@
     <plexus-compiler-version>2.16.1</plexus-compiler-version>
     <hamcrest-version>3.0</hamcrest-version>
     <assertj-version>3.27.7</assertj-version>
-    <jna-version>5.18.1</jna-version>
-    <byte-buddy-version>1.18.8</byte-buddy-version>
+    <jna-version>5.19.1</jna-version>
+    <byte-buddy-version>1.18.10</byte-buddy-version>
 
     <!-- Properties to enable jacoco code coverage analysis -->
     <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
@@ -917,7 +917,7 @@
       <dependency>
         <groupId>commons-logging</groupId>
         <artifactId>commons-logging</artifactId>
-        <version>1.3.6</version>
+        <version>1.4.0</version>
       </dependency>
 
       <dependency>
diff --git a/tools/BUILD b/tools/BUILD
index 379a9bd..4238054 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -35,398 +35,399 @@
 # https://github.com/bazelbuild/BUILD_file_generator/blob/master/tools/bazel_defs/java.bzl
 # However, feel free to add any additional errors. Thus far they have all been pretty useful.
 errorprone_checks = [
-        "-XepDisableWarningsInGeneratedCode",
-        # The XepDisableWarningsInGeneratedCode disables only warnings, but
-        # not errors. We should manually exclude all files generated by
-        # AutoValue; such files always start $AutoValue_.....
-        # XepExcludedPaths is a regexp. If you need more paths - use | as
-        # separator.
-        "-XepExcludedPaths:.*/\\\\$$AutoValue_.*\\.java",
-        "-Xep:AlmostJavadoc:ERROR",
-        "-Xep:AlwaysThrows:ERROR",
-        "-Xep:AmbiguousMethodReference:ERROR",
-        # don't want to add dependency to errorprone
-        "-Xep:AnnotateFormatMethod:OFF",
-        "-Xep:ArgumentSelectionDefectChecker:ERROR",
-        "-Xep:ArrayAsKeyOfSetOrMap:ERROR",
-        "-Xep:ArrayEquals:ERROR",
-        "-Xep:ArrayFillIncompatibleType:ERROR",
-        "-Xep:ArrayHashCode:ERROR",
-        "-Xep:ArraysAsListPrimitiveArray:ERROR",
-        "-Xep:ArrayToString:ERROR",
-        "-Xep:AssertEqualsArgumentOrderChecker:WARN",
-        "-Xep:AssertionFailureIgnored:WARN",
-        "-Xep:AsyncCallableReturnsNull:ERROR",
-        "-Xep:AsyncFunctionReturnsNull:ERROR",
-        "-Xep:AutoValueConstructorOrderChecker:ERROR",
-        "-Xep:AutoValueFinalMethods:ERROR",
-        "-Xep:AutoValueImmutableFields:ERROR",
-        "-Xep:AutoValueSubclassLeaked:WARN",
-        "-Xep:BadAnnotationImplementation:ERROR",
-        "-Xep:BadComparable:ERROR",
-        "-Xep:BadImport:ERROR",
-        "-Xep:BadInstanceof:ERROR",
-        "-Xep:BadShiftAmount:ERROR",
-        "-Xep:BanSerializableRead:ERROR",
-        "-Xep:BigDecimalEquals:ERROR",
-        "-Xep:BigDecimalLiteralDouble:ERROR",
-        "-Xep:BoxedPrimitiveConstructor:ERROR",
-        "-Xep:BoxedPrimitiveEquality:ERROR",
-        "-Xep:BundleDeserializationCast:ERROR",
-        "-Xep:ByteBufferBackingArray:WARN",
-        "-Xep:CacheLoaderNull:ERROR",
-        "-Xep:CannotMockFinalClass:ERROR",
-        "-Xep:CanonicalDuration:ERROR",
-        "-Xep:CatchAndPrintStackTrace:ERROR",
-        "-Xep:CatchFail:ERROR",
-        "-Xep:ChainedAssertionLosesContext:ERROR",
-        "-Xep:ChainingConstructorIgnoresParameter:ERROR",
-        "-Xep:CharacterGetNumericValue:ERROR",
-        "-Xep:CheckNotNullMultipleTimes:ERROR",
-        "-Xep:CheckReturnValue:ERROR",
-        "-Xep:ClassCanBeStatic:ERROR",
-        "-Xep:ClassName:ERROR",
-        "-Xep:ClassNewInstance:ERROR",
-        "-Xep:CollectionIncompatibleType:ERROR",
-        "-Xep:CollectionToArraySafeParameter:ERROR",
-        "-Xep:CollectionUndefinedEquality:ERROR",
-        "-Xep:CollectorShouldNotUseState:ERROR",
-        "-Xep:ComparableAndComparator:ERROR",
-        "-Xep:ComparableType:ERROR",
-        "-Xep:CompareToZero:ERROR",
-        "-Xep:ComparingThisWithNull:ERROR",
-        "-Xep:ComparisonOutOfRange:ERROR",
-        "-Xep:CompatibleWithAnnotationMisuse:ERROR",
-        "-Xep:CompileTimeConstant:ERROR",
-        "-Xep:ComplexBooleanConstant:ERROR",
-        "-Xep:ComputeIfAbsentAmbiguousReference:ERROR",
-        "-Xep:ConditionalExpressionNumericPromotion:ERROR",
-        "-Xep:ConstantOverflow:ERROR",
-        "-Xep:DaggerProvidesNull:ERROR",
-        "-Xep:DangerousLiteralNull:ERROR",
-        "-Xep:DateChecker:ERROR",
-        "-Xep:DateFormatConstant:ERROR",
-        "-Xep:DeadException:ERROR",
-        "-Xep:DeadThread:ERROR",
-        "-Xep:DefaultCharset:ERROR",
-        "-Xep:DefaultPackage:ERROR",
-        "-Xep:DepAnn:ERROR",
-        "-Xep:DeprecatedVariable:ERROR",
-        "-Xep:DiscardedPostfixExpression:ERROR",
-        "-Xep:DoNotCall:ERROR",
-        "-Xep:DoNotCallSuggester:ERROR",
-        "-Xep:DoNotClaimAnnotations:ERROR",
-        "-Xep:DoNotMock:ERROR",
-        "-Xep:DoNotMockAutoValue:WARN",
-        "-Xep:DoubleBraceInitialization:ERROR",
-        "-Xep:DoubleCheckedLocking:ERROR",
-        "-Xep:DuplicateMapKeys:ERROR",
-        "-Xep:DurationFrom:ERROR",
-        "-Xep:DurationGetTemporalUnit:ERROR",
-        "-Xep:DurationTemporalUnit:ERROR",
-        "-Xep:DurationToLongTimeUnit:ERROR",
-        "-Xep:EmptyBlockTag:WARN",
-        "-Xep:EmptyCatch:ERROR",
-        "-Xep:EmptySetMultibindingContributions:ERROR",
-        "-Xep:EqualsGetClass:ERROR",
-        "-Xep:EqualsHashCode:ERROR",
-        "-Xep:EqualsIncompatibleType:ERROR",
-        "-Xep:EqualsNaN:ERROR",
-        "-Xep:EqualsNull:ERROR",
-        "-Xep:EqualsReference:ERROR",
-        "-Xep:EqualsUnsafeCast:ERROR",
-        "-Xep:EqualsUsingHashCode:ERROR",
-        "-Xep:EqualsWrongThing:ERROR",
-        "-Xep:ErroneousThreadPoolConstructorChecker:ERROR",
-        "-Xep:EscapedEntity:WARN",
-        "-Xep:ExpectedExceptionChecker:ERROR",
-        "-Xep:ExtendingJUnitAssert:ERROR",
-        "-Xep:ExtendsAutoValue:ERROR",
-        "-Xep:FallThrough:ERROR",
-        "-Xep:Finally:ERROR",
-        "-Xep:FloatCast:ERROR",
-        "-Xep:FloatingPointAssertionWithinEpsilon:ERROR",
-        "-Xep:FloatingPointLiteralPrecision:ERROR",
-        "-Xep:FloggerArgumentToString:ERROR",
-        "-Xep:FloggerFormatString:ERROR",
-        "-Xep:FloggerLogVarargs:ERROR",
-        "-Xep:FloggerSplitLogStatement:ERROR",
-        "-Xep:FloggerStringConcatenation:ERROR",
-        "-Xep:FormatString:ERROR",
-        "-Xep:FormatStringAnnotation:ERROR",
-        "-Xep:ForOverride:ERROR",
-        "-Xep:FragmentInjection:ERROR",
-        "-Xep:FragmentNotInstantiable:ERROR",
-        "-Xep:FromTemporalAccessor:ERROR",
-        "-Xep:FunctionalInterfaceClash:ERROR",
-        "-Xep:FunctionalInterfaceMethodChanged:ERROR",
-        "-Xep:FutureReturnValueIgnored:ERROR",
-        "-Xep:FuturesGetCheckedIllegalExceptionType:ERROR",
-        "-Xep:GetClassOnAnnotation:ERROR",
-        "-Xep:GetClassOnClass:ERROR",
-        "-Xep:GetClassOnEnum:ERROR",
-        "-Xep:GuardedBy:ERROR",
-        "-Xep:GuiceAssistedInjectScoping:ERROR",
-        "-Xep:GuiceAssistedParameters:ERROR",
-        "-Xep:HashtableContains:ERROR",
-        "-Xep:HidingField:WARN",
-        "-Xep:IdentityBinaryExpression:ERROR",
-        "-Xep:IdentityHashMapBoxing:ERROR",
-        "-Xep:IdentityHashMapUsage:ERROR",
-        "-Xep:IgnoredPureGetter:ERROR",
-        "-Xep:Immutable:ERROR",
-        "-Xep:ImmutableAnnotationChecker:ERROR",
-        "-Xep:ImmutableEnumChecker:ERROR",
-        "-Xep:ImmutableModification:ERROR",
-        "-Xep:Incomparable:ERROR",
-        "-Xep:IncompatibleArgumentType:ERROR",
-        "-Xep:IncompatibleModifiers:ERROR",
-        "-Xep:InconsistentCapitalization:WARN",
-        "-Xep:InconsistentHashCode:ERROR",
-        "-Xep:IncrementInForLoopAndHeader:ERROR",
-        "-Xep:IndexOfChar:ERROR",
-        "-Xep:InexactVarargsConditional:ERROR",
-        "-Xep:InfiniteRecursion:ERROR",
-        "-Xep:InheritDoc:ERROR",
-        "-Xep:InjectOnConstructorOfAbstractClass:ERROR",
-        "-Xep:InlineFormatString:ERROR",
-        "-Xep:InlineMeInliner:ERROR",
-        # don't want to add dependency to errorprone
-        "-Xep:InlineMeSuggester:OFF",
-        "-Xep:InlineMeValidator:ERROR",
-        "-Xep:InputStreamSlowMultibyteRead:ERROR",
-        "-Xep:InsecureCryptoUsage:ERROR",
-        "-Xep:InstanceOfAndCastMatchWrongType:ERROR",
-        "-Xep:InstantTemporalUnit:ERROR",
-        "-Xep:IntLongMath:ERROR",
-        "-Xep:InvalidBlockTag:ERROR",
-        "-Xep:InvalidInlineTag:ERROR",
-        "-Xep:InvalidJavaTimeConstant:ERROR",
-        "-Xep:InvalidLink:ERROR",
-        "-Xep:InvalidParam:ERROR",
-        "-Xep:InvalidPatternSyntax:ERROR",
-        "-Xep:InvalidThrows:ERROR",
-        "-Xep:InvalidThrowsLink:ERROR",
-        "-Xep:InvalidTimeZoneID:ERROR",
-        "-Xep:InvalidZoneId:ERROR",
-        "-Xep:IsInstanceIncompatibleType:ERROR",
-        "-Xep:IsInstanceOfClass:ERROR",
-        "-Xep:IsLoggableTagLength:ERROR",
-        "-Xep:IterableAndIterator:ERROR",
-        "-Xep:IterablePathParameter:ERROR",
-        "-Xep:JavaDurationGetSecondsGetNano:ERROR",
-        "-Xep:JavaDurationWithNanos:ERROR",
-        "-Xep:JavaDurationWithSeconds:ERROR",
-        "-Xep:JavaInstantGetSecondsGetNano:ERROR",
-        "-Xep:JavaLangClash:ERROR",
-        "-Xep:JavaLocalDateTimeGetNano:ERROR",
-        "-Xep:JavaLocalTimeGetNano:ERROR",
-        "-Xep:JavaPeriodGetDays:ERROR",
-        "-Xep:JavaTimeDefaultTimeZone:ERROR",
-        "-Xep:JavaUtilDate:WARN",
-        "-Xep:JdkObsolete:ERROR",
-        "-Xep:JodaConstructors:ERROR",
-        "-Xep:JodaDateTimeConstants:ERROR",
-        "-Xep:JodaDurationWithMillis:ERROR",
-        "-Xep:JodaInstantWithMillis:ERROR",
-        "-Xep:JodaNewPeriod:ERROR",
-        "-Xep:JodaPlusMinusLong:ERROR",
-        "-Xep:JodaTimeConverterManager:ERROR",
-        "-Xep:JodaToSelf:ERROR",
-        "-Xep:JodaWithDurationAddedLong:ERROR",
-        "-Xep:JUnit3FloatingPointComparisonWithoutDelta:ERROR",
-        "-Xep:JUnit3TestNotRun:ERROR",
-        "-Xep:JUnit4ClassAnnotationNonStatic:ERROR",
-        "-Xep:JUnit4ClassUsedInJUnit3:ERROR",
-        "-Xep:JUnit4SetUpNotRun:ERROR",
-        "-Xep:JUnit4TearDownNotRun:ERROR",
-        "-Xep:JUnit4TestNotRun:ERROR",
-        "-Xep:JUnit4TestsNotRunWithinEnclosed:ERROR",
-        "-Xep:JUnitAmbiguousTestClass:ERROR",
-        "-Xep:JUnitAssertSameCheck:ERROR",
-        "-Xep:JUnitParameterMethodNotFound:ERROR",
-        "-Xep:LiteByteStringUtf8:ERROR",
-        "-Xep:LiteEnumValueOf:ERROR",
-        "-Xep:LiteProtoToString:ERROR",
-        "-Xep:LocalDateTemporalAmount:ERROR",
-        "-Xep:LockNotBeforeTry:ERROR",
-        "-Xep:LockOnBoxedPrimitive:ERROR",
-        "-Xep:LogicalAssignment:ERROR",
-        "-Xep:LongFloatConversion:ERROR",
-        "-Xep:LongLiteralLowerCaseSuffix:ERROR",
-        "-Xep:LoopConditionChecker:ERROR",
-        "-Xep:LoopOverCharArray:ERROR",
-        "-Xep:LossyPrimitiveCompare:ERROR",
-        "-Xep:MathAbsoluteRandom:ERROR",
-        "-Xep:MathRoundIntLong:ERROR",
-        "-Xep:MemoizeConstantVisitorStateLookups:ERROR",
-        "-Xep:MislabeledAndroidString:ERROR",
-        "-Xep:MissingCasesInEnumSwitch:ERROR",
-        "-Xep:MissingFail:ERROR",
-        "-Xep:MissingOverride:ERROR",
-        "-Xep:MissingSummary:WARN",
-        "-Xep:MissingSuperCall:ERROR",
-        "-Xep:MissingTestCall:ERROR",
-        "-Xep:MisusedDayOfYear:ERROR",
-        "-Xep:MisusedWeekYear:ERROR",
-        "-Xep:MixedDescriptors:ERROR",
-        "-Xep:MixedMutabilityReturnType:WARN",
-        "-Xep:MockitoUsage:ERROR",
-        "-Xep:ModifiedButNotUsed:ERROR",
-        "-Xep:ModifyCollectionInEnhancedForLoop:ERROR",
-        "-Xep:ModifyingCollectionWithItself:ERROR",
-        "-Xep:ModifySourceCollectionInStream:ERROR",
-        "-Xep:MultipleParallelOrSequentialCalls:ERROR",
-        "-Xep:MultipleUnaryOperatorsInMethodCall:ERROR",
-        "-Xep:MustBeClosedChecker:ERROR",
-        "-Xep:MutableConstantField:ERROR",
-        # Java provides no good alternative
-        "-Xep:MutablePublicArray:OFF",
-        "-Xep:NarrowingCompoundAssignment:ERROR",
-        "-Xep:NCopiesOfChar:ERROR",
-        "-Xep:NestedInstanceOfConditions:ERROR",
-        "-Xep:NonAtomicVolatileUpdate:ERROR",
-        "-Xep:NonCanonicalStaticImport:ERROR",
-        "-Xep:NonCanonicalType:ERROR",
-        "-Xep:NonFinalCompileTimeConstant:ERROR",
-        "-Xep:NonOverridingEquals:ERROR",
-        "-Xep:NonRuntimeAnnotation:ERROR",
-        "-Xep:NullableConstructor:ERROR",
-        "-Xep:NullablePrimitive:ERROR",
-        "-Xep:NullablePrimitiveArray:ERROR",
-        "-Xep:NullableVoid:ERROR",
-        "-Xep:NullOptional:ERROR",
-        "-Xep:NullTernary:ERROR",
-        "-Xep:ObjectEqualsForPrimitives:ERROR",
-        "-Xep:ObjectsHashCodePrimitive:ERROR",
-        "-Xep:ObjectToString:ERROR",
-        "-Xep:OperatorPrecedence:ERROR",
-        "-Xep:OptionalEquality:ERROR",
-        "-Xep:OptionalMapToOptional:ERROR",
-        "-Xep:OptionalMapUnusedValue:ERROR",
-        "-Xep:OptionalNotPresent:ERROR",
-        "-Xep:OptionalOfRedundantMethod:ERROR",
-        "-Xep:OrphanedFormatString:ERROR",
-        "-Xep:OutlineNone:ERROR",
-        "-Xep:OverlappingQualifierAndScopeAnnotation:ERROR",
-        "-Xep:Overrides:ERROR",
-        "-Xep:OverridesGuiceInjectableMethod:ERROR",
-        "-Xep:OverridesJavaxInjectableMethod:ERROR",
-        "-Xep:OverrideThrowableToString:ERROR",
-        "-Xep:PackageInfo:ERROR",
-        "-Xep:ParameterName:ERROR",
-        "-Xep:ParametersButNotParameterized:ERROR",
-        "-Xep:ParcelableCreator:ERROR",
-        "-Xep:PeriodFrom:ERROR",
-        "-Xep:PeriodGetTemporalUnit:ERROR",
-        "-Xep:PeriodTimeMath:ERROR",
-        "-Xep:PreconditionsCheckNotNullRepeated:ERROR",
-        "-Xep:PreconditionsInvalidPlaceholder:ERROR",
-        "-Xep:PreferredInterfaceType:OFF",
-        "-Xep:PrimitiveAtomicReference:ERROR",
-        "-Xep:PrivateSecurityContractProtoAccess:ERROR",
-        "-Xep:ProtectedMembersInFinalClass:ERROR",
-        "-Xep:ProtoBuilderReturnValueIgnored:ERROR",
-        "-Xep:ProtocolBufferOrdinal:ERROR",
-        "-Xep:ProtoDurationGetSecondsGetNano:ERROR",
-        "-Xep:ProtoFieldNullComparison:ERROR",
-        "-Xep:ProtoFieldPreconditionsCheckNotNull:ERROR",
-        "-Xep:ProtoRedundantSet:ERROR",
-        "-Xep:ProtoStringFieldReferenceEquality:ERROR",
-        "-Xep:ProtoTimestampGetSecondsGetNano:ERROR",
-        "-Xep:ProtoTruthMixedDescriptors:ERROR",
-        "-Xep:ProvidesMethodOutsideOfModule:ERROR",
-        "-Xep:RandomCast:ERROR",
-        "-Xep:RandomModInteger:ERROR",
-        "-Xep:ReachabilityFenceUsage:ERROR",
-        "-Xep:RectIntersectReturnValueIgnored:ERROR",
-        "-Xep:ReferenceEquality:ERROR",
-        "-Xep:RefersToDaggerCodegen:ERROR",
-        "-Xep:RemovedInJDK11:ERROR",
-        "-Xep:RequiredModifiers:ERROR",
-        "-Xep:RestrictedApiChecker:ERROR",
-        "-Xep:RethrowReflectiveOperationExceptionAsLinkageError:ERROR",
-        "-Xep:ReturnFromVoid:ERROR",
-        "-Xep:ReturnValueIgnored:ERROR",
-        "-Xep:RxReturnValueIgnored:ERROR",
-        "-Xep:SameNameButDifferent:ERROR",
-        "-Xep:SelfAssignment:ERROR",
-        "-Xep:SelfComparison:ERROR",
-        "-Xep:SelfEquals:ERROR",
-        "-Xep:ShortCircuitBoolean:ERROR",
-        "-Xep:ShouldHaveEvenArgs:ERROR",
-        "-Xep:SizeGreaterThanOrEqualsZero:ERROR",
-        "-Xep:StaticAssignmentInConstructor:ERROR",
-        "-Xep:StaticGuardedByInstance:ERROR",
-        "-Xep:StaticMockMember:ERROR",
-        "-Xep:StaticQualifiedUsingExpression:ERROR",
-        "-Xep:StreamToString:ERROR",
-        "-Xep:StringBuilderInitWithChar:ERROR",
-        "-Xep:StringEquality:ERROR",
-        "-Xep:StringSplitter:WARN",
-        "-Xep:SubstringOfZero:ERROR",
-        "-Xep:SuppressWarningsDeprecated:ERROR",
-        "-Xep:SwigMemoryLeak:ERROR",
-        "-Xep:SynchronizeOnNonFinalField:ERROR",
-        "-Xep:TemporalAccessorGetChronoField:ERROR",
-        "-Xep:TestParametersNotInitialized:ERROR",
-        "-Xep:TheoryButNoTheories:ERROR",
-        "-Xep:ThreadJoinLoop:ERROR",
-        "-Xep:ThreadLocalUsage:ERROR",
-        "-Xep:ThreadPriorityCheck:ERROR",
-        "-Xep:ThreeLetterTimeZoneID:WARN",
-        "-Xep:ThrowIfUncheckedKnownChecked:ERROR",
-        "-Xep:ThrowNull:ERROR",
-        "-Xep:TimeUnitConversionChecker:ERROR",
-        "-Xep:ToStringReturnsNull:ERROR",
-        "-Xep:TreeToString:ERROR",
-        "-Xep:TruthAssertExpected:ERROR",
-        "-Xep:TruthConstantAsserts:ERROR",
-        "-Xep:TruthGetOrDefault:ERROR",
-        "-Xep:TruthIncompatibleType:ERROR",
-        "-Xep:TruthSelfEquals:ERROR",
-        "-Xep:TryFailThrowable:ERROR",
-        "-Xep:TypeEquals:ERROR",
-        "-Xep:TypeNameShadowing:ERROR",
-        "-Xep:TypeParameterQualifier:ERROR",
-        "-Xep:TypeParameterShadowing:ERROR",
-        "-Xep:TypeParameterUnusedInFormals:ERROR",
-        "-Xep:UndefinedEquals:WARN",
-        "-Xep:UnescapedEntity:WARN",
-        "-Xep:UnnecessaryAssignment:ERROR",
-        "-Xep:UnnecessaryCheckNotNull:ERROR",
-        "-Xep:UnnecessaryLambda:ERROR",
-        "-Xep:UnnecessaryMethodInvocationMatcher:ERROR",
-        "-Xep:UnnecessaryMethodReference:ERROR",
-        "-Xep:UnnecessaryParentheses:ERROR",
-        "-Xep:UnnecessaryTypeArgument:ERROR",
-        "-Xep:UnrecognisedJavadocTag:ERROR",
-        "-Xep:UnsafeFinalization:ERROR",
-        "-Xep:UnsafeReflectiveConstructionCast:ERROR",
-        "-Xep:UnsynchronizedOverridesSynchronized:ERROR",
-        "-Xep:UnusedAnonymousClass:ERROR",
-        "-Xep:UnusedCollectionModifiedInPlace:ERROR",
-        "-Xep:UnusedException:ERROR",
-        "-Xep:UnusedMethod:WARN",
-        "-Xep:UnusedNestedClass:ERROR",
-        "-Xep:UnusedVariable:ERROR",
-        "-Xep:URLEqualsHashCode:ERROR",
-        "-Xep:UseBinds:ERROR",
-        "-Xep:UseCorrectAssertInTests:ERROR",
-        "-Xep:VariableNameSameAsType:ERROR",
-        "-Xep:VarTypeName:ERROR",
-        "-Xep:WaitNotInLoop:ERROR",
-        "-Xep:WakelockReleasedDangerously:ERROR",
-        "-Xep:WildcardImport:ERROR",
-        "-Xep:WithSignatureDiscouraged:ERROR",
-        "-Xep:WrongOneof:ERROR",
-        "-Xep:XorPower:ERROR",
-        "-Xep:ZoneIdOfZ:ERROR",
+    "-XepDisableWarningsInGeneratedCode",
+    # The XepDisableWarningsInGeneratedCode disables only warnings, but
+    # not errors. We should manually exclude all files generated by
+    # AutoValue; such files always start $AutoValue_.....
+    # XepExcludedPaths is a regexp. If you need more paths - use | as
+    # separator.
+    "-XepExcludedPaths:.*/\\\\$$AutoValue_.*\\.java",
+    "-Xep:AlmostJavadoc:ERROR",
+    "-Xep:AlwaysThrows:ERROR",
+    "-Xep:AmbiguousMethodReference:ERROR",
+    # don't want to add dependency to errorprone
+    "-Xep:AnnotateFormatMethod:OFF",
+    "-Xep:ArgumentSelectionDefectChecker:ERROR",
+    "-Xep:ArrayAsKeyOfSetOrMap:ERROR",
+    "-Xep:ArrayEquals:ERROR",
+    "-Xep:ArrayFillIncompatibleType:ERROR",
+    "-Xep:ArrayHashCode:ERROR",
+    "-Xep:ArraysAsListPrimitiveArray:ERROR",
+    "-Xep:ArrayToString:ERROR",
+    "-Xep:AssertEqualsArgumentOrderChecker:WARN",
+    "-Xep:AssertionFailureIgnored:WARN",
+    "-Xep:AsyncCallableReturnsNull:ERROR",
+    "-Xep:AsyncFunctionReturnsNull:ERROR",
+    "-Xep:AutoValueConstructorOrderChecker:ERROR",
+    "-Xep:AutoValueFinalMethods:ERROR",
+    "-Xep:AutoValueImmutableFields:ERROR",
+    "-Xep:AutoValueSubclassLeaked:WARN",
+    "-Xep:BadAnnotationImplementation:ERROR",
+    "-Xep:BadComparable:ERROR",
+    "-Xep:BadImport:ERROR",
+    "-Xep:BadInstanceof:ERROR",
+    "-Xep:BadShiftAmount:ERROR",
+    "-Xep:BanSerializableRead:ERROR",
+    "-Xep:BigDecimalEquals:ERROR",
+    "-Xep:BigDecimalLiteralDouble:ERROR",
+    "-Xep:BoxedPrimitiveConstructor:ERROR",
+    "-Xep:BoxedPrimitiveEquality:ERROR",
+    "-Xep:BundleDeserializationCast:ERROR",
+    "-Xep:ByteBufferBackingArray:WARN",
+    "-Xep:CacheLoaderNull:ERROR",
+    "-Xep:CannotMockFinalClass:ERROR",
+    "-Xep:CanonicalDuration:ERROR",
+    "-Xep:CatchAndPrintStackTrace:ERROR",
+    "-Xep:CatchFail:ERROR",
+    "-Xep:ChainedAssertionLosesContext:ERROR",
+    "-Xep:ChainingConstructorIgnoresParameter:ERROR",
+    "-Xep:CharacterGetNumericValue:ERROR",
+    "-Xep:CheckNotNullMultipleTimes:ERROR",
+    "-Xep:CheckReturnValue:ERROR",
+    "-Xep:ClassCanBeStatic:ERROR",
+    "-Xep:ClassName:ERROR",
+    "-Xep:ClassNewInstance:ERROR",
+    "-Xep:CollectionIncompatibleType:ERROR",
+    "-Xep:CollectionToArraySafeParameter:ERROR",
+    "-Xep:CollectionUndefinedEquality:ERROR",
+    "-Xep:CollectorShouldNotUseState:ERROR",
+    "-Xep:ComparableAndComparator:ERROR",
+    "-Xep:ComparableType:ERROR",
+    "-Xep:CompareToZero:ERROR",
+    "-Xep:ComparingThisWithNull:ERROR",
+    "-Xep:ComparisonOutOfRange:ERROR",
+    "-Xep:CompatibleWithAnnotationMisuse:ERROR",
+    "-Xep:CompileTimeConstant:ERROR",
+    "-Xep:ComplexBooleanConstant:ERROR",
+    "-Xep:ComputeIfAbsentAmbiguousReference:ERROR",
+    "-Xep:ConditionalExpressionNumericPromotion:ERROR",
+    "-Xep:ConstantOverflow:ERROR",
+    "-Xep:DaggerProvidesNull:ERROR",
+    "-Xep:DangerousLiteralNull:ERROR",
+    "-Xep:DateChecker:ERROR",
+    "-Xep:DateFormatConstant:ERROR",
+    "-Xep:DeadException:ERROR",
+    "-Xep:DeadThread:ERROR",
+    "-Xep:DefaultCharset:ERROR",
+    "-Xep:DefaultPackage:ERROR",
+    "-Xep:DepAnn:ERROR",
+    "-Xep:DeprecatedVariable:ERROR",
+    "-Xep:DiscardedPostfixExpression:ERROR",
+    "-Xep:DoNotCall:ERROR",
+    "-Xep:DoNotCallSuggester:ERROR",
+    "-Xep:DoNotClaimAnnotations:ERROR",
+    "-Xep:DoNotMock:ERROR",
+    "-Xep:DoNotMockAutoValue:WARN",
+    "-Xep:DoubleBraceInitialization:ERROR",
+    "-Xep:DoubleCheckedLocking:ERROR",
+    "-Xep:DuplicateMapKeys:ERROR",
+    "-Xep:DurationFrom:ERROR",
+    "-Xep:DurationGetTemporalUnit:ERROR",
+    "-Xep:DurationTemporalUnit:ERROR",
+    "-Xep:DurationToLongTimeUnit:ERROR",
+    "-Xep:EmptyBlockTag:WARN",
+    "-Xep:EmptyCatch:ERROR",
+    "-Xep:EmptySetMultibindingContributions:ERROR",
+    "-Xep:EqualsGetClass:ERROR",
+    "-Xep:EqualsHashCode:ERROR",
+    "-Xep:EqualsIncompatibleType:ERROR",
+    "-Xep:EqualsNaN:ERROR",
+    "-Xep:EqualsNull:ERROR",
+    "-Xep:EqualsReference:ERROR",
+    "-Xep:EqualsUnsafeCast:ERROR",
+    "-Xep:EqualsUsingHashCode:ERROR",
+    "-Xep:EqualsWrongThing:ERROR",
+    "-Xep:ErroneousThreadPoolConstructorChecker:ERROR",
+    "-Xep:EscapedEntity:WARN",
+    "-Xep:ExpectedExceptionChecker:ERROR",
+    "-Xep:ExtendingJUnitAssert:ERROR",
+    "-Xep:ExtendsAutoValue:ERROR",
+    "-Xep:FallThrough:ERROR",
+    "-Xep:Finally:ERROR",
+    "-Xep:FloatCast:ERROR",
+    "-Xep:FloatingPointAssertionWithinEpsilon:ERROR",
+    "-Xep:FloatingPointLiteralPrecision:ERROR",
+    "-Xep:FloggerArgumentToString:ERROR",
+    "-Xep:FloggerFormatString:ERROR",
+    "-Xep:FloggerLogVarargs:ERROR",
+    "-Xep:FloggerSplitLogStatement:ERROR",
+    "-Xep:FloggerStringConcatenation:ERROR",
+    "-Xep:FormatString:ERROR",
+    "-Xep:FormatStringAnnotation:ERROR",
+    "-Xep:ForOverride:ERROR",
+    "-Xep:FragmentInjection:ERROR",
+    "-Xep:FragmentNotInstantiable:ERROR",
+    "-Xep:FromTemporalAccessor:ERROR",
+    "-Xep:FunctionalInterfaceClash:ERROR",
+    "-Xep:FunctionalInterfaceMethodChanged:ERROR",
+    "-Xep:FutureReturnValueIgnored:ERROR",
+    "-Xep:FuturesGetCheckedIllegalExceptionType:ERROR",
+    "-Xep:GetClassOnAnnotation:ERROR",
+    "-Xep:GetClassOnClass:ERROR",
+    "-Xep:GetClassOnEnum:ERROR",
+    "-Xep:GuardedBy:ERROR",
+    "-Xep:GuiceAssistedInjectScoping:ERROR",
+    "-Xep:GuiceAssistedParameters:ERROR",
+    "-Xep:HashtableContains:ERROR",
+    "-Xep:HidingField:WARN",
+    "-Xep:IdentityBinaryExpression:ERROR",
+    "-Xep:IdentityHashMapBoxing:ERROR",
+    "-Xep:IdentityHashMapUsage:ERROR",
+    "-Xep:IgnoredPureGetter:ERROR",
+    "-Xep:Immutable:ERROR",
+    "-Xep:ImmutableAnnotationChecker:ERROR",
+    "-Xep:ImmutableEnumChecker:ERROR",
+    "-Xep:ImmutableModification:ERROR",
+    "-Xep:Incomparable:ERROR",
+    "-Xep:IncompatibleArgumentType:ERROR",
+    "-Xep:IncompatibleModifiers:ERROR",
+    "-Xep:InconsistentCapitalization:WARN",
+    "-Xep:InconsistentHashCode:ERROR",
+    "-Xep:IncrementInForLoopAndHeader:ERROR",
+    "-Xep:IndexOfChar:ERROR",
+    "-Xep:InexactVarargsConditional:ERROR",
+    "-Xep:InfiniteRecursion:ERROR",
+    "-Xep:InheritDoc:ERROR",
+    "-Xep:InjectOnConstructorOfAbstractClass:ERROR",
+    "-Xep:InlineFormatString:ERROR",
+    "-Xep:InlineMeInliner:ERROR",
+    # don't want to add dependency to errorprone
+    "-Xep:InlineMeSuggester:OFF",
+    "-Xep:InlineMeValidator:ERROR",
+    "-Xep:InputStreamSlowMultibyteRead:ERROR",
+    "-Xep:InsecureCryptoUsage:ERROR",
+    "-Xep:InstanceOfAndCastMatchWrongType:ERROR",
+    "-Xep:InstantTemporalUnit:ERROR",
+    "-Xep:IntLongMath:ERROR",
+    "-Xep:InvalidBlockTag:ERROR",
+    "-Xep:InvalidInlineTag:ERROR",
+    "-Xep:InvalidJavaTimeConstant:ERROR",
+    "-Xep:InvalidLink:ERROR",
+    "-Xep:InvalidParam:ERROR",
+    "-Xep:InvalidPatternSyntax:ERROR",
+    "-Xep:InvalidThrows:ERROR",
+    "-Xep:InvalidThrowsLink:ERROR",
+    "-Xep:InvalidTimeZoneID:ERROR",
+    "-Xep:InvalidZoneId:ERROR",
+    "-Xep:IsInstanceIncompatibleType:ERROR",
+    "-Xep:IsInstanceOfClass:ERROR",
+    "-Xep:IsLoggableTagLength:ERROR",
+    "-Xep:IterableAndIterator:ERROR",
+    "-Xep:IterablePathParameter:ERROR",
+    "-Xep:JavaDurationGetSecondsGetNano:ERROR",
+    "-Xep:JavaDurationWithNanos:ERROR",
+    "-Xep:JavaDurationWithSeconds:ERROR",
+    "-Xep:JavaInstantGetSecondsGetNano:ERROR",
+    "-Xep:JavaLangClash:ERROR",
+    "-Xep:JavaLocalDateTimeGetNano:ERROR",
+    "-Xep:JavaLocalTimeGetNano:ERROR",
+    "-Xep:JavaPeriodGetDays:ERROR",
+    "-Xep:JavaTimeDefaultTimeZone:ERROR",
+    "-Xep:JavaUtilDate:WARN",
+    "-Xep:JdkObsolete:ERROR",
+    "-Xep:JodaConstructors:ERROR",
+    "-Xep:JodaDateTimeConstants:ERROR",
+    "-Xep:JodaDurationWithMillis:ERROR",
+    "-Xep:JodaInstantWithMillis:ERROR",
+    "-Xep:JodaNewPeriod:ERROR",
+    "-Xep:JodaPlusMinusLong:ERROR",
+    "-Xep:JodaTimeConverterManager:ERROR",
+    "-Xep:JodaToSelf:ERROR",
+    "-Xep:JodaWithDurationAddedLong:ERROR",
+    "-Xep:JUnit3FloatingPointComparisonWithoutDelta:ERROR",
+    "-Xep:JUnit3TestNotRun:ERROR",
+    "-Xep:JUnit4ClassAnnotationNonStatic:ERROR",
+    "-Xep:JUnit4ClassUsedInJUnit3:ERROR",
+    "-Xep:JUnit4SetUpNotRun:ERROR",
+    "-Xep:JUnit4TearDownNotRun:ERROR",
+    "-Xep:JUnit4TestNotRun:ERROR",
+    "-Xep:JUnit4TestsNotRunWithinEnclosed:ERROR",
+    "-Xep:JUnitAmbiguousTestClass:ERROR",
+    "-Xep:JUnitAssertSameCheck:ERROR",
+    "-Xep:JUnitParameterMethodNotFound:ERROR",
+    "-Xep:LiteByteStringUtf8:ERROR",
+    "-Xep:LiteEnumValueOf:ERROR",
+    "-Xep:LiteProtoToString:ERROR",
+    "-Xep:LocalDateTemporalAmount:ERROR",
+    "-Xep:LockNotBeforeTry:ERROR",
+    "-Xep:LockOnBoxedPrimitive:ERROR",
+    "-Xep:LogicalAssignment:ERROR",
+    "-Xep:LongFloatConversion:ERROR",
+    "-Xep:LongLiteralLowerCaseSuffix:ERROR",
+    "-Xep:LoopConditionChecker:ERROR",
+    "-Xep:LoopOverCharArray:ERROR",
+    "-Xep:LossyPrimitiveCompare:ERROR",
+    "-Xep:MathAbsoluteRandom:ERROR",
+    "-Xep:MathRoundIntLong:ERROR",
+    "-Xep:MemoizeConstantVisitorStateLookups:ERROR",
+    "-Xep:MislabeledAndroidString:ERROR",
+    "-Xep:MissingCasesInEnumSwitch:ERROR",
+    "-Xep:MissingFail:ERROR",
+    "-Xep:MissingOverride:ERROR",
+    "-Xep:MissingSummary:WARN",
+    "-Xep:MissingSuperCall:ERROR",
+    "-Xep:MissingTestCall:ERROR",
+    "-Xep:MisusedDayOfYear:ERROR",
+    "-Xep:MisusedWeekYear:ERROR",
+    "-Xep:MixedDescriptors:ERROR",
+    "-Xep:MixedMutabilityReturnType:WARN",
+    "-Xep:MockitoUsage:ERROR",
+    "-Xep:ModifiedButNotUsed:ERROR",
+    "-Xep:ModifyCollectionInEnhancedForLoop:ERROR",
+    "-Xep:ModifyingCollectionWithItself:ERROR",
+    "-Xep:ModifySourceCollectionInStream:ERROR",
+    "-Xep:MultipleParallelOrSequentialCalls:ERROR",
+    "-Xep:MultipleUnaryOperatorsInMethodCall:ERROR",
+    "-Xep:MustBeClosedChecker:ERROR",
+    "-Xep:MutableConstantField:ERROR",
+    # Java provides no good alternative
+    "-Xep:MutablePublicArray:OFF",
+    "-Xep:NarrowingCompoundAssignment:ERROR",
+    "-Xep:NCopiesOfChar:ERROR",
+    "-Xep:NestedInstanceOfConditions:ERROR",
+    "-Xep:NonAtomicVolatileUpdate:ERROR",
+    "-Xep:NonCanonicalStaticImport:ERROR",
+    "-Xep:NonCanonicalType:ERROR",
+    "-Xep:NonFinalCompileTimeConstant:ERROR",
+    "-Xep:NonOverridingEquals:ERROR",
+    "-Xep:NonRuntimeAnnotation:ERROR",
+    "-Xep:NullableConstructor:ERROR",
+    "-Xep:NullablePrimitive:ERROR",
+    "-Xep:NullablePrimitiveArray:ERROR",
+    "-Xep:NullableVoid:ERROR",
+    "-Xep:NullOptional:ERROR",
+    "-Xep:NullTernary:ERROR",
+    "-Xep:ObjectEqualsForPrimitives:ERROR",
+    "-Xep:ObjectsHashCodePrimitive:ERROR",
+    "-Xep:ObjectToString:ERROR",
+    "-Xep:OperatorPrecedence:ERROR",
+    "-Xep:OptionalEquality:ERROR",
+    "-Xep:OptionalMapToOptional:ERROR",
+    "-Xep:OptionalMapUnusedValue:ERROR",
+    "-Xep:OptionalNotPresent:ERROR",
+    "-Xep:OptionalOfRedundantMethod:ERROR",
+    "-Xep:OrphanedFormatString:ERROR",
+    "-Xep:OutlineNone:ERROR",
+    "-Xep:OverlappingQualifierAndScopeAnnotation:ERROR",
+    "-Xep:Overrides:ERROR",
+    "-Xep:OverridesGuiceInjectableMethod:ERROR",
+    "-Xep:OverridesJavaxInjectableMethod:ERROR",
+    "-Xep:OverrideThrowableToString:ERROR",
+    "-Xep:PackageInfo:ERROR",
+    "-Xep:ParameterName:ERROR",
+    "-Xep:ParametersButNotParameterized:ERROR",
+    "-Xep:ParcelableCreator:ERROR",
+    "-Xep:PeriodFrom:ERROR",
+    "-Xep:PeriodGetTemporalUnit:ERROR",
+    "-Xep:PeriodTimeMath:ERROR",
+    "-Xep:PreconditionsCheckNotNullRepeated:ERROR",
+    "-Xep:PreconditionsInvalidPlaceholder:ERROR",
+    "-Xep:PreferredInterfaceType:OFF",
+    "-Xep:PrimitiveAtomicReference:ERROR",
+    "-Xep:PrivateSecurityContractProtoAccess:ERROR",
+    "-Xep:ProtectedMembersInFinalClass:ERROR",
+    "-Xep:ProtoBuilderReturnValueIgnored:ERROR",
+    "-Xep:ProtocolBufferOrdinal:ERROR",
+    "-Xep:ProtoDurationGetSecondsGetNano:ERROR",
+    "-Xep:ProtoFieldNullComparison:ERROR",
+    "-Xep:ProtoFieldPreconditionsCheckNotNull:ERROR",
+    "-Xep:ProtoRedundantSet:ERROR",
+    "-Xep:ProtoStringFieldReferenceEquality:ERROR",
+    "-Xep:ProtoTimestampGetSecondsGetNano:ERROR",
+    "-Xep:ProtoTruthMixedDescriptors:ERROR",
+    "-Xep:ProvidesMethodOutsideOfModule:ERROR",
+    "-Xep:RandomCast:ERROR",
+    "-Xep:RandomModInteger:ERROR",
+    "-Xep:ReachabilityFenceUsage:ERROR",
+    "-Xep:RectIntersectReturnValueIgnored:ERROR",
+    "-Xep:ReferenceEquality:ERROR",
+    "-Xep:RefersToDaggerCodegen:ERROR",
+    "-Xep:RemovedInJDK11:ERROR",
+    "-Xep:RequiredModifiers:ERROR",
+    "-Xep:RestrictedApiChecker:ERROR",
+    "-Xep:RethrowReflectiveOperationExceptionAsLinkageError:ERROR",
+    "-Xep:ReturnFromVoid:ERROR",
+    "-Xep:ReturnValueIgnored:ERROR",
+    "-Xep:RxReturnValueIgnored:ERROR",
+    "-Xep:SameNameButDifferent:ERROR",
+    "-Xep:SelfAssignment:ERROR",
+    "-Xep:SelfComparison:ERROR",
+    "-Xep:SelfEquals:ERROR",
+    "-Xep:ShortCircuitBoolean:ERROR",
+    "-Xep:ShouldHaveEvenArgs:ERROR",
+    "-Xep:SizeGreaterThanOrEqualsZero:ERROR",
+    "-Xep:StaticAssignmentInConstructor:ERROR",
+    "-Xep:StaticGuardedByInstance:ERROR",
+    "-Xep:StaticMockMember:ERROR",
+    "-Xep:StaticQualifiedUsingExpression:ERROR",
+    "-Xep:StreamToString:ERROR",
+    "-Xep:StringBuilderInitWithChar:ERROR",
+    "-Xep:StringEquality:ERROR",
+    "-Xep:StringSplitter:WARN",
+    "-Xep:SubstringOfZero:ERROR",
+    "-Xep:SuppressWarningsDeprecated:ERROR",
+    "-Xep:SwigMemoryLeak:ERROR",
+    "-Xep:SynchronizeOnNonFinalField:ERROR",
+    "-Xep:TemporalAccessorGetChronoField:ERROR",
+    "-Xep:TestParametersNotInitialized:ERROR",
+    "-Xep:TheoryButNoTheories:ERROR",
+    "-Xep:ThreadJoinLoop:ERROR",
+    "-Xep:ThreadLocalUsage:ERROR",
+    "-Xep:ThreadPriorityCheck:ERROR",
+    "-Xep:ThreeLetterTimeZoneID:WARN",
+    "-Xep:ThrowIfUncheckedKnownChecked:ERROR",
+    "-Xep:ThrowNull:ERROR",
+    "-Xep:TimeUnitConversionChecker:ERROR",
+    "-Xep:ToStringReturnsNull:ERROR",
+    "-Xep:TreeToString:ERROR",
+    "-Xep:TruthAssertExpected:ERROR",
+    "-Xep:TruthConstantAsserts:ERROR",
+    "-Xep:TruthGetOrDefault:ERROR",
+    "-Xep:TruthIncompatibleType:ERROR",
+    "-Xep:TruthSelfEquals:ERROR",
+    "-Xep:TryFailThrowable:ERROR",
+    "-Xep:TypeEquals:ERROR",
+    "-Xep:TypeNameShadowing:ERROR",
+    "-Xep:TypeParameterQualifier:ERROR",
+    "-Xep:TypeParameterShadowing:ERROR",
+    "-Xep:TypeParameterUnusedInFormals:ERROR",
+    "-Xep:UndefinedEquals:WARN",
+    "-Xep:UnescapedEntity:WARN",
+    "-Xep:UnnecessaryAssignment:ERROR",
+    "-Xep:UnnecessaryCheckNotNull:ERROR",
+    "-Xep:UnnecessaryLambda:ERROR",
+    "-Xep:UnnecessaryMethodInvocationMatcher:ERROR",
+    "-Xep:UnnecessaryMethodReference:ERROR",
+    "-Xep:UnnecessaryParentheses:ERROR",
+    "-Xep:UnnecessaryTypeArgument:ERROR",
+    "-Xep:UnrecognisedJavadocTag:ERROR",
+    "-Xep:UnsafeFinalization:ERROR",
+    "-Xep:UnsafeReflectiveConstructionCast:ERROR",
+    "-Xep:UnsynchronizedOverridesSynchronized:ERROR",
+    "-Xep:UnusedAnonymousClass:ERROR",
+    "-Xep:UnusedCollectionModifiedInPlace:ERROR",
+    "-Xep:UnusedException:ERROR",
+    "-Xep:UnusedMethod:WARN",
+    "-Xep:UnusedNestedClass:ERROR",
+    "-Xep:UnusedVariable:ERROR",
+    "-Xep:URLEqualsHashCode:ERROR",
+    "-Xep:UseBinds:ERROR",
+    "-Xep:UseCorrectAssertInTests:ERROR",
+    "-Xep:VariableNameSameAsType:ERROR",
+    "-Xep:VarTypeName:ERROR",
+    "-Xep:WaitNotInLoop:ERROR",
+    "-Xep:WakelockReleasedDangerously:ERROR",
+    "-Xep:WildcardImport:ERROR",
+    "-Xep:WithSignatureDiscouraged:ERROR",
+    "-Xep:WrongOneof:ERROR",
+    "-Xep:XorPower:ERROR",
+    "-Xep:ZoneIdOfZ:ERROR",
 ]
 
-
-exclude_in_tests = ["-Xep:EmptyBlockTag:WARN",
-                    "-Xep:MissingSummary:WARN"]
+exclude_in_tests = [
+    "-Xep:EmptyBlockTag:WARN",
+    "-Xep:MissingSummary:WARN",
+]
 
 java_package_configuration(
     name = "error_prone",
@@ -436,7 +437,7 @@
 
 java_package_configuration(
     name = "error_prone_tests",
-    javacopts = [ check for check in errorprone_checks if check not in exclude_in_tests],
+    javacopts = [check for check in errorprone_checks if check not in exclude_in_tests],
     packages = ["error_prone_packages_test"],
 )
 
diff --git a/tools/jgit-ee8/BUILD b/tools/jgit-ee8/BUILD
new file mode 100644
index 0000000..f6681cc
--- /dev/null
+++ b/tools/jgit-ee8/BUILD
@@ -0,0 +1,55 @@
+load("@rules_shell//shell:sh_test.bzl", "sh_test")
+
+sh_test(
+    name = "generated_srcs_test",
+    srcs = ["@com_googlesource_gerrit_bazlets//tools:generated_srcs_test.sh"],
+    args = [
+        "--forbid",
+        "jakarta\\.servlet",
+        "--forbid",
+        "org\\.eclipse\\.jetty\\.ee10\\.servlet",
+        "--forbid",
+        "org\\.eclipse\\.jgit\\..*\\.ee8",
+        "--require-if-source",
+        "jakarta\\.servlet",
+        "javax\\.servlet",
+        "--module",
+        "org.eclipse.jgit.http.server/src/",
+        "$(location //org.eclipse.jgit.http.server.ee8:jgit-http-server-ee8-srcs)",
+        "$(locations //org.eclipse.jgit.http.server:srcs)",
+        "--module",
+        "org.eclipse.jgit.lfs.server/src/",
+        "$(location //org.eclipse.jgit.lfs.server.ee8:jgit-lfs-server-ee8-srcs)",
+        "$(locations //org.eclipse.jgit.lfs.server:srcs)",
+        "--module",
+        "org.eclipse.jgit.junit.http/src/",
+        "$(location //org.eclipse.jgit.junit.http:junit-http-ee8-srcs)",
+        "$(locations //org.eclipse.jgit.junit.http:ee8-transform-srcs)",
+        "--module",
+        "org.eclipse.jgit.http.test/src/",
+        "$(location //org.eclipse.jgit.http.test.ee8:helpers-srcs)",
+        "$(locations //org.eclipse.jgit.http.test:helper-srcs)",
+        "--module",
+        "org.eclipse.jgit.http.test/tst/",
+        "$(location //org.eclipse.jgit.http.test.ee8:test-srcs)",
+        "$(locations //org.eclipse.jgit.http.test:test-srcs)",
+        "--module",
+        "org.eclipse.jgit.lfs.server.test/tst/",
+        "$(location //org.eclipse.jgit.lfs.server.test.ee8:test-srcs)",
+        "$(locations //org.eclipse.jgit.lfs.server.test:test-srcs)",
+    ],
+    data = [
+        "//org.eclipse.jgit.http.server.ee8:jgit-http-server-ee8-srcs",
+        "//org.eclipse.jgit.http.server:srcs",
+        "//org.eclipse.jgit.http.test.ee8:helpers-srcs",
+        "//org.eclipse.jgit.http.test.ee8:test-srcs",
+        "//org.eclipse.jgit.http.test:helper-srcs",
+        "//org.eclipse.jgit.http.test:test-srcs",
+        "//org.eclipse.jgit.junit.http:ee8-transform-srcs",
+        "//org.eclipse.jgit.junit.http:junit-http-ee8-srcs",
+        "//org.eclipse.jgit.lfs.server.ee8:jgit-lfs-server-ee8-srcs",
+        "//org.eclipse.jgit.lfs.server:srcs",
+        "//org.eclipse.jgit.lfs.server.test.ee8:test-srcs",
+        "//org.eclipse.jgit.lfs.server.test:test-srcs",
+    ],
+)
diff --git a/tools/jgit-ee8/README.md b/tools/jgit-ee8/README.md
new file mode 100644
index 0000000..7bb2f47
--- /dev/null
+++ b/tools/jgit-ee8/README.md
@@ -0,0 +1,69 @@
+# JGit EE8 Bazel bridge
+
+This package contains the Bazel-only bridge for source consumers that still run
+on EE8 and `javax.servlet` while JGit master uses `jakarta.servlet`.
+
+JGit hosts this bridge because Gerrit is a known downstream that consumes JGit
+from source through a git submodule and still runs Jetty 12 EE8. Keeping the
+bridge in JGit lets Gerrit track JGit master and avoids maintaining a long-lived
+servlet-4 branch just for Gerrit. That branch was never a stable JGit release
+line, so it is not a sustainable way for Gerrit to receive JGit maintenance
+updates.
+
+The bridge intentionally keeps the original JGit package names. It rewrites only
+servlet API references from `jakarta.servlet` to `javax.servlet`, then compiles
+generated jars from the rewritten source jars.
+
+Generated targets:
+
+* `//org.eclipse.jgit.http.server.ee8:jgit-servlet-ee8`
+* `//org.eclipse.jgit.lfs.server.ee8:jgit-lfs-server-ee8`
+
+Do not put one of these generated jars and its canonical Jakarta counterpart on
+the same classpath. They contain the same JGit classes.
+
+This is intentionally limited to source generation, build, and test. It does
+not add Tycho, p2, or Maven Central publication machinery yet.
+
+Run:
+
+```sh
+bazelisk test \
+  //tools/jgit-ee8:generated_srcs_test \
+  //org.eclipse.jgit.junit.http.ee8:tests
+```
+
+`//tools/jgit-ee8:generated_srcs_test` checks:
+
+* generated sources are derived from the canonical source filegroups
+* generated srcjar entries use Java package paths
+* generated sources preserve line counts for debugger breakpoints
+* generated sources contain `javax.servlet`, not `jakarta.servlet`
+* generated sources do not move JGit classes to an `.ee8` package
+
+The dedicated `org.eclipse.jgit.*.ee8` targets follow the Jetty 12 EE8 testing
+model in a smaller form. Jetty generates EE8 main and test sources from the
+canonical newer-EE modules and then runs the EE8 tests in the EE8 module graph.
+JGit does the same for the servlet-facing tests: the HTTP/LFS test sources and
+shared `junit-http` helpers are transformed to `javax.servlet`, wired to Jetty
+EE8 test dependencies, and run against the generated EE8 JGit jars.
+
+`//org.eclipse.jgit.http.test.ee8:server_unit` is a fast, focused target for the
+three HTTP server utility tests. It is not part of the default EE8 suite because
+those classes already run under `//org.eclipse.jgit.http.test.ee8:http`.
+
+The test rewrite rules also map Jetty test helper imports from
+`org.eclipse.jetty.ee10.servlet` to the Jetty EE8 packages needed by the tests.
+They are intentionally test-only and separate from the production
+`jakarta.servlet` to `javax.servlet` rules.
+
+Next steps:
+
+* Keep this source-consumer bridge while Gerrit runs on Jetty 12 EE8.
+* Reuse these targets for other Bazel source consumers that need EE8 output.
+* Move the generated-test JUnit helper to bazlets only if more generated-test
+  users need the same split between suite source labels and compiled sources.
+* Add Maven/Tycho/p2 generation only when a non-Bazel consumer needs published
+  EE8 artifacts.
+* Keep the canonical `srcs` filegroups aligned with each servlet-facing
+  `java_library` so new Java sources are transformed automatically.