Merge branch 'stable-6.8' into stable-6.9

* stable-6.8:
  AdvertisedRequestValidator: fix WantNotValidException caused by race

Change-Id: Ia5a0a4f0e900d96fa638bb9f97988ac66f4b7068
diff --git a/.gitattributes b/.gitattributes
index f57840b..70de594 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,14 @@
+* text=auto
+
+*.asc binary
+*.gif binary
+*.gitindex.dat binary
+*.key binary
+*.patch binary
+*.pdf binary
+*.png binary
+org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/diff/** binary
+org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/test/resources/** binary
+org.eclipse.jgit.test/tst-rsrc/org/eclipse/jgit/util/io/** binary
+
 *.java diff=java
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..402d077
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,61 @@
+name: Bug Report
+description: File a bug report.
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thank you for taking the time to fill out this bug report!
+  - type: input
+    id: version
+    attributes:
+      label: Version
+      description: With what version(s) of Eclipse JGit do you observe the problem?
+      placeholder: a version, like 5.13.0 or 6.8.0
+    validations:
+      required: true
+  - type: dropdown
+    id: operatingSystem
+    attributes:
+      label: Operating System
+      description: On what Operating System(s) do you observe the problem?
+      multiple: true
+      options:
+        - "Linux/Unix"
+        - MacOS
+        - Windows
+    validations:
+      required: true
+  - type: textarea
+    id: description
+    attributes:
+      label: Bug description
+      description: Explain the buggy behavior, and how to reproduce it.
+    validations:
+      required: true
+  - type: textarea
+    id: actual
+    attributes:
+      label: Actual behavior
+      description: What happened?
+      placeholder: Enclose exception stack traces by backticks, or paste them in the "Relevant log output" field below.
+    validations:
+      required: true
+  - type: textarea
+    id: expected
+    attributes:
+      label: Expected behavior
+      description: What did you expect?
+    validations:
+      required: true
+  - type: textarea
+    id: logs
+    attributes:
+      label: Relevant log output
+      description: Please copy and paste any relevant log output or exception stack traces. This will be automatically formatted into code, so no need for backticks.
+      render: Shell
+  - type: textarea
+    id: other
+    attributes:
+      label: Other information
+      description: Any other relevant information.
+      placeholder: "For instance if you're reporting a cloning or fetching/pushing problem, what git server is used, and if the repository is public, what's its URL?"
\ No newline at end of file
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000..84a0122
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,32 @@
+name: Feature Request
+description: Suggest an enhancement or a new feature.
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thank you for helping making Eclipse JGit better!
+  - type: textarea
+    id: description
+    attributes:
+      label: Description
+      description: What feature or enhancement you would like to have in Eclipse JGit?
+    validations:
+      required: true
+  - type: textarea
+    id: motivation
+    attributes:
+      label: Motivation
+      description: Explain the use case for the new feature.
+      placeholder: Explain why it would be good to have the new feature or enhancement. What problem would it solve?
+    validations:
+      required: true
+  - type: textarea
+    id: alternatives
+    attributes:
+      label: Alternatives considered
+      description: What alternatives did you consider? What work-around, if any, are you using currently?
+  - type: textarea
+    id: other
+    attributes:
+      label: Additional context
+      description: Any other information that may be relevant.
diff --git a/Documentation/config-options.md b/Documentation/config-options.md
index ec9d86b..78930e6 100644
--- a/Documentation/config-options.md
+++ b/Documentation/config-options.md
@@ -56,6 +56,7 @@
 | `core.symlinks` | Auto detect if filesystem supports symlinks| ✅ | If false, symbolic links are checked out as small plain files that contain the link text. |
 | `core.trustFolderStat` | `true` | ⃞ | Whether to trust the pack folder's, packed-refs file's and loose-objects folder's file attributes (Java equivalent of stat command on *nix). When looking for pack files, if `false` JGit will always scan the `.git/objects/pack` folder and if set to `true` it assumes that pack files are unchanged if the file attributes of the pack folder are unchanged. When getting the list of packed refs, if `false` JGit will always read the packed-refs file and if set to `true` it uses the file attributes of the packed-refs file and will only read it if a file attribute has changed. When looking for loose objects, if `false` and if a loose object is not found, JGit will open and close a stream to `.git/objects` folder (which can refresh its directory listing, at least on some NFS clients) and retry looking for that loose object. Setting this option to `false` can help to workaround caching issues on NFS, but reduces performance. |
 | `core.trustPackedRefsStat` | `unset` | ⃞ | Whether to trust the file attributes (Java equivalent of stat command on *nix) of the packed-refs file. If `never` JGit will ignore the file attributes of the packed-refs file and always read it. If `always` JGit will trust the file attributes of the packed-refs file and will only read it if a file attribute has changed. `after_open` behaves the same as `always`, except that the packed-refs file is opened and closed before its file attributes are considered. An open/close of the packed-refs file is known to refresh its file attributes, at least on some NFS clients. If `unset`, JGit will use the behavior described in `trustFolderStat`. |
+| `core.trustLooseRefStat` | `always` | ⃞ | Whether to trust the file attributes (Java equivalent of stat command on *nix) of the loose ref. If `always` JGit will trust the file attributes of the loose ref and its parent directories. `after_open` behaves similar to `always`, except that all parent directories of the loose ref up to the repository root are opened and closed before its file attributes are considered. An open/close of these parent directories is known to refresh the file attributes, at least on some NFS clients. |
 | `core.worktree` | Root directory of the working tree if it is not the parent directory of the `.git` directory | ✅ | The path to the root of the working tree. |
 
 ## __fetch__ options
@@ -77,6 +78,7 @@
 | `gc.pruneExpire` | `2.weeks.ago` | ✅ | Grace period after which unreachable objects will be pruned. |
 | `gc.prunePackExpire` | `1.hour.ago` |  ⃞ | Grace period after which packfiles only containing unreachable objects will be pruned. |
 | `gc.writeChangedPaths` | `false`| ⃞ | Whether bloom filter should be written to commit-graph during a gc operation. |
+| `gc.writeCommitGraph`| `false` | ⃞ | If true, then gc will rewrite the commit-graph file when jgit gc is run. |
 
 ## __http__ options
 
diff --git a/SECURITY.md b/SECURITY.md
index e6f57c6..468a1db 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -2,48 +2,41 @@
 _ISO 27005 defines vulnerability as:
  "A weakness of an asset or group of assets that can be exploited by one or more threats."_
 
-## The Eclipse Security Team
+## Reporting a Security Vulnerability
 
-The Eclipse Security Team provides help and advice to Eclipse projects
-on vulnerability issues and is the first point of contact
-for handling security vulnerabilities.
-Members of the Security Team are committers on Eclipse Projects
-and members of the Eclipse Architecture Council.
+Vulnerabilities can be reported either via
+[email to the Eclipse Security Team](security@eclipse-foundation.org)
+or using the
+[dedicated security issue tracker](https://gitlab.eclipse.org/security/vulnerability-reports/-/issues/new?issuable_template=new_vulnerability).
 
-Contact the [Eclipse Security Team](mailto:security@eclipse.org).
+## Additional Information
+
+**The Eclipse Foundation Security Team** provides help and advice to Eclipse Foundation projects on
+vulnerability issues and is the first point of contact for handling security vulnerabilities.
+Members of the Eclipse Foundation Security Team are selected amongs committers on Eclipse Projects,
+members of the Eclipse Architecture Council, and Eclipse Foundation staff.
+
+The general security mailing list address is security@eclipse-foundation.org. Members of the Eclipse
+Foundation Security Team will receive messages sent to this address. This address should be used
+only for reporting undisclosed vulnerabilities; regular issue reports and questions unrelated to
+vulnerabilities in Eclipse Foundation software will be ignored. Note that this email set to this
+address is not encrypted.
 
 **Note that, as a matter of policy, the security team does not open attachments.**
 
-## Reporting a Security Vulnerability
-
-Vulnerabilities can be reported either via email to the Eclipse Security Team
-or directly with a project via the Eclipse Foundation's Bugzilla instance.
-
-The general security mailing list address is security@eclipse.org.
-Members of the Eclipse Security Team will receive messages sent to this address.
-This address should be used only for reporting undisclosed vulnerabilities;
-regular issue reports and questions unrelated to vulnerabilities in Eclipse software
-will be ignored.
-Note that this email address is not encrypted.
-
 The community is also encouraged to report vulnerabilities using the
-[Eclipse Foundation's Bugzilla instance](https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Vulnerability%20Reports&keywords=security&groups=Security_Advisories).
-Note that you will require an Eclipse Foundation account to create an issue report,
+[Eclipse Foundation’s issue tracker](https://gitlab.eclipse.org/security/vulnerability-reports/-/issues/new?issuable_template=new_vulnerability).
+Note that you will need an Eclipse Foundation account to create an issue report
+([create an account here if you do not have one](https://accounts.eclipse.org/user/register?destination=user)),
 but by doing so you will be able to participate directly in the resolution of the issue.
 
-Issue reports related to vulnerabilities must be marked as "committers-only",
-either automatically by clicking the provided link, by the reporter,
-or by a committer during the triage process.
-Note that issues marked "committers-only" are visible to all Eclipse committers.
-By default, a "committers-only" issue is also accessible to the reporter
-and individuals explicitly indicated in the "cc" list.
+Issue reports related to vulnerabilities must be marked as “confidential”, either automatically by
+clicking the provided link by the reporter, or by a committer during the triage process.
 
 ## Disclosure
 
-Disclosure is initially limited to the reporter and all Eclipse Committers,
-but is expanded to include other individuals, and the general public.
 The timing and manner of disclosure is governed by the
-[Eclipse Security Policy](https://www.eclipse.org/security/policy.php).
+[Eclipse Foundation Vulnerability Reporting Policy](https://www.eclipse.org/security/policy).
 
 Publicly disclosed issues are listed on the
-[Disclosed Vulnerabilities Page](https://www.eclipse.org/security/known.php).
\ No newline at end of file
+[Disclosed Vulnerabilities page](https://www.eclipse.org/security/known).
\ No newline at end of file
diff --git a/WORKSPACE b/WORKSPACE
index 71a27c2..21ebc72 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -90,30 +90,32 @@
     sha1 = "51cf043c87253c9f58b539c9f7e44c8894223850",
 )
 
-SSHD_VERS = "2.11.0"
+SSHD_VERS = "2.12.0"
 
 maven_jar(
     name = "sshd-osgi",
     artifact = "org.apache.sshd:sshd-osgi:" + SSHD_VERS,
-    sha1 = "7ec6b14ab789fc4b1ce9fdcd0e13d22b5c940e7b",
+    sha1 = "32b8de1cbb722ba75bdf9898e0c41d42af00ce57",
 )
 
 maven_jar(
     name = "sshd-sftp",
     artifact = "org.apache.sshd:sshd-sftp:" + SSHD_VERS,
-    sha1 = "3a293bba303c486a9ff6be8e11c9c68fd56b63c7",
+    sha1 = "0f96f00a07b186ea62838a6a4122e8f4cad44df6",
 )
 
+JNA_VERS = "5.14.0"
+
 maven_jar(
     name = "jna",
-    artifact = "net.java.dev.jna:jna:5.13.0",
-    sha1 = "1200e7ebeedbe0d10062093f32925a912020e747",
+    artifact = "net.java.dev.jna:jna:" + JNA_VERS,
+    sha1 = "67bf3eaea4f0718cb376a181a629e5f88fa1c9dd",
 )
 
 maven_jar(
     name = "jna-platform",
-    artifact = "net.java.dev.jna:jna-platform:5.13.0",
-    sha1 = "88e9a306715e9379f3122415ef4ae759a352640d",
+    artifact = "net.java.dev.jna:jna-platform:" + JNA_VERS,
+    sha1 = "28934d48aed814f11e4c584da55c49fa7032b31b",
 )
 
 maven_jar(
@@ -148,8 +150,14 @@
 
 maven_jar(
     name = "commons-compress",
-    artifact = "org.apache.commons:commons-compress:1.25.0",
-    sha1 = "9d35aec423da6c8a7f93d7e9e1c6b1d9fe14bb5e",
+    artifact = "org.apache.commons:commons-compress:1.26.0",
+    sha1 = "659feffdd12280201c8aacb8f7be94f9a883c824",
+)
+
+maven_jar(
+    name = "commons-io",
+    artifact = "commons-io:commons-io:2.15.1",
+    sha1 = "f11560da189ab563a5c8e351941415430e9304ea",
 )
 
 maven_jar(
@@ -178,28 +186,28 @@
 
 maven_jar(
     name = "mockito",
-    artifact = "org.mockito:mockito-core:5.7.0",
-    sha1 = "a1c258331ab91d66863c983aff7136357e9de056",
+    artifact = "org.mockito:mockito-core:5.10.0",
+    sha1 = "b3812fa2ee069f1d0b41c1c0155da79d0e1dcde0",
 )
 
 maven_jar(
     name = "assertj-core",
-    artifact = "org.assertj:assertj-core:3.24.2",
-    sha1 = "ebbf338e33f893139459ce5df023115971c2786f",
+    artifact = "org.assertj:assertj-core:3.25.3",
+    sha1 = "792b270e73aa1cfc28fa135be0b95e69ea451432",
 )
 
-BYTE_BUDDY_VERSION = "1.14.8"
+BYTE_BUDDY_VERSION = "1.14.12"
 
 maven_jar(
     name = "bytebuddy",
     artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
-    sha1 = "505d7d8937ff00cc55db79723e26c94069b87d66",
+    sha1 = "6e37f743dc15a8d7a4feb3eb0025cbc612d5b9e1",
 )
 
 maven_jar(
     name = "bytebuddy-agent",
     artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
-    sha1 = "ae6ebe485f3bcd0a1e20241488a32e6400a501ef",
+    sha1 = "be4984cb6fd1ef1d11f218a648889dfda44b8a15",
 )
 
 maven_jar(
@@ -214,55 +222,55 @@
     sha1 = "b3add478d4382b78ea20b1671390a858002feb6c",
 )
 
-JETTY_VER = "10.0.18"
+JETTY_VER = "10.0.20"
 
 maven_jar(
     name = "jetty-servlet",
     artifact = "org.eclipse.jetty:jetty-servlet:" + JETTY_VER,
-    sha1 = "cc0acde71a3b04db8fcde2ad60a00dfd4effab23",
-    src_sha1 = "b038debaa2c0c4674fa1bc6e96bcf8bf283be0e8",
+    sha1 = "e3661d28d5f2e2185fb085ce5560b2969e8f7c1e",
+    src_sha1 = "23b97219833769e3e69a071abab3811f49077e2e",
 )
 
 maven_jar(
     name = "jetty-security",
     artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VER,
-    sha1 = "399601ef4e649b3be6f9fd6176b208914f9fd171",
-    src_sha1 = "b203e58304afe23d8820af6abe3ca39696fe7530",
+    sha1 = "f082f9198038e4781ff4cdf4d32db9f90fa8f38a",
+    src_sha1 = "a1acb8cb40bd495ba67562cb342f371425dba47b",
 )
 
 maven_jar(
     name = "jetty-server",
     artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VER,
-    sha1 = "b59b7df009bbb85be455e42524e9a11944fb3ba1",
-    src_sha1 = "d45709036a573843cd57daeb3112f00f8bf4f753",
+    sha1 = "66deea078236e21ae9dd7443716b7642766526aa",
+    src_sha1 = "e2ddea07b6c85dbc7cf078e408f68d69e504b33c",
 )
 
 maven_jar(
     name = "jetty-http",
     artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VER,
-    sha1 = "9b7f2b580bdcf2a9c27168eac58276c7e6e99ccf",
-    src_sha1 = "4bbede666e912c8abb60c04022b84225fe9ce369",
+    sha1 = "d76bf933db81e9f530f1e59f1858bceddb7c4a43",
+    src_sha1 = "5fd939e4e5000ac76eb686e68e978747802c8a5f",
 )
 
 maven_jar(
     name = "jetty-io",
     artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VER,
-    sha1 = "a622527216b27f72744daf849aa2fa0c6f3db131",
-    src_sha1 = "402c5aa958a734576f13898e63f7ca7f73360b76",
+    sha1 = "269cea7949f739e41707f3d574782c9f227fe188",
+    src_sha1 = "1d30687503a0256da23706e1ebf597658d8c0011",
 )
 
 maven_jar(
     name = "jetty-util",
     artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VER,
-    sha1 = "1ee6a71c2249d5596ba578f015121c99b2b7591a",
-    src_sha1 = "cbba373f654f22e0f0c10c02938e2df8ec2f0fd3",
+    sha1 = "c628108266e75f17dffee34191b74a696fe21746",
+    src_sha1 = "63c17b20a8ca5c3bc1740bd807ad446f842749b4",
 )
 
 maven_jar(
     name = "jetty-util-ajax",
     artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VER,
-    sha1 = "3560c8a15f920e24daf8ad4196e23ec21610f7d6",
-    src_sha1 = "4b4966b125c586795e425b7b561bcd5b223d6617",
+    sha1 = "049dcc0ad4190786e17389b257195fe936ed3d27",
+    src_sha1 = "b012c053d25d902cc64a5c4432a8eedab3241d94",
 )
 
 BOUNCYCASTLE_VER = "1.77"
diff --git a/lib/BUILD b/lib/BUILD
index 29669b5..8806217 100644
--- a/lib/BUILD
+++ b/lib/BUILD
@@ -20,6 +20,16 @@
 )
 
 java_library(
+    name = "commons-io",
+    visibility = [
+        "//org.eclipse.jgit.archive:__pkg__",
+        "//org.eclipse.jgit.pgm.test:__pkg__",
+        "//org.eclipse.jgit.test:__pkg__",
+    ],
+    exports = ["@commons-io//jar"],
+)
+
+java_library(
     name = "commons-codec",
     visibility = [
         "//org.eclipse.jgit:__pkg__",
diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
index 849da13..44cf7b0 100644
--- a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
@@ -5,13 +5,13 @@
 Automatic-Module-Name: org.eclipse.jgit.ant.test
 Bundle-SymbolicName: org.eclipse.jgit.ant.test
 Bundle-Vendor: %Bundle-Vendor
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.apache.tools.ant,
- org.eclipse.jgit.ant.tasks;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.ant.tasks;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.hamcrest.core;version="[1.1.0,3.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 26b4268..f4049af 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 54ea3d5..7d416da 100644
--- a/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/MANIFEST.MF
@@ -3,13 +3,13 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ant
 Bundle-SymbolicName: org.eclipse.jgit.ant
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.apache.tools.ant,
-  org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)"
+  org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)"
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.ant;version="6.8.1",
- org.eclipse.jgit.ant.tasks;version="6.8.1";
+Export-Package: org.eclipse.jgit.ant;version="6.9.1",
+ org.eclipse.jgit.ant.tasks;version="6.9.1";
   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 856c782..1ec6d78 100644
--- a/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ant/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ant - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ant.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ant;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml
index 387dc1a..6639067 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 74d38d8..ec7df3c 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -13,17 +13,17 @@
  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="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.osgi.framework;version="[1.3.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.jgit.archive.FormatActivator
-Export-Package: org.eclipse.jgit.archive;version="6.8.1";
+Export-Package: org.eclipse.jgit.archive;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.api,
    org.apache.commons.compress.archivers,
    org.osgi.framework",
- org.eclipse.jgit.archive.internal;version="6.8.1";x-internal:=true
+ org.eclipse.jgit.archive.internal;version="6.9.1";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 441cbf6..f816946 100644
--- a/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.archive/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.archive - Sources
 Bundle-SymbolicName: org.eclipse.jgit.archive.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.archive;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml
index 0705e5f..ed2a64c 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.archive</artifactId>
diff --git a/org.eclipse.jgit.benchmarks/pom.xml b/org.eclipse.jgit.benchmarks/pom.xml
index 56c6c4c..614f346 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.benchmarks</artifactId>
@@ -60,7 +60,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>3.3.0</version>
         <executions>
           <execution>
             <id>enforce-maven</id>
@@ -80,7 +79,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.11.0</version>
+        <version>${maven-compiler-plugin-version}</version>
         <configuration>
           <encoding>UTF-8</encoding>
           <release>${java.version}</release>
@@ -117,7 +116,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
-        <version>3.4.1</version>
         <executions>
           <execution>
             <phase>package</phase>
@@ -203,7 +201,6 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>4.0.0-M9</version>
           <dependencies>
             <dependency><!-- add support for ssh/scp -->
               <groupId>org.apache.maven.wagon</groupId>
@@ -215,17 +212,16 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-surefire-report-plugin</artifactId>
-          <version>3.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jxr-plugin</artifactId>
-          <version>3.3.0</version>
+          <version>${maven-jxr-plugin-version}</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-project-info-reports-plugin</artifactId>
-          <version>3.4.3</version>
+          <version>${maven-project-info-reports-plugin-version}</version>
         </plugin>
       </plugins>
     </pluginManagement>
diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml
index 0718c34..8c97734 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -27,88 +27,88 @@
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.archive</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.apache</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.server</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ui</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
-      <version>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-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 cae7b85..ba4acf1 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -13,9 +13,9 @@
  org.bouncycastle.openpgp.operator;version="[1.65.0,2.0.0)",
  org.bouncycastle.openpgp.operator.jcajce;version="[1.65.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.65.0,2.0.0)",
- org.eclipse.jgit.gpg.bc.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.gpg.bc.internal.keys;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.sha1;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.gpg.bc.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.sha1;version="[6.9.1,6.10.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)"
diff --git a/org.eclipse.jgit.gpg.bc.test/pom.xml b/org.eclipse.jgit.gpg.bc.test/pom.xml
index 0078381..d62beda 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 e5ba18a..d27c9de 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="[6.8.1,6.9.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[6.9.1,6.10.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/gpg_bc
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.bouncycastle.asn1;version="[1.69.0,2.0.0)",
  org.bouncycastle.asn1.cryptlib;version="[1.69.0,2.0.0)",
@@ -29,9 +29,9 @@
  org.bouncycastle.util;version="[1.69.0,2.0.0)",
  org.bouncycastle.util.encoders;version="[1.69.0,2.0.0)",
  org.bouncycastle.util.io;version="[1.69.0,2.0.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.slf4j;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.gpg.bc;version="6.8.1",
- org.eclipse.jgit.gpg.bc.internal;version="6.8.1";x-friends:="org.eclipse.jgit.gpg.bc.test",
- org.eclipse.jgit.gpg.bc.internal.keys;version="6.8.1";x-friends:="org.eclipse.jgit.gpg.bc.test"
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.slf4j;version="[1.7.0,3.0.0)"
+Export-Package: org.eclipse.jgit.gpg.bc;version="6.9.1",
+ org.eclipse.jgit.gpg.bc.internal;version="6.9.1";x-friends:="org.eclipse.jgit.gpg.bc.test",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="6.9.1";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 29c6a18..2e1149a 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.gpg.bc - Sources
 Bundle-SymbolicName: org.eclipse.jgit.gpg.bc.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.gpg.bc/pom.xml b/org.eclipse.jgit.gpg.bc/pom.xml
index 5088657..191a6cf 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc</artifactId>
diff --git a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSignatureVerifier.java b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSignatureVerifier.java
index 7161895..f4fed40 100644
--- a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSignatureVerifier.java
+++ b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSignatureVerifier.java
@@ -15,7 +15,6 @@
 import java.security.Security;
 import java.text.MessageFormat;
 import java.time.Instant;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.Locale;
@@ -33,21 +32,18 @@
 import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentVerifierBuilderProvider;
 import org.bouncycastle.util.encoders.Hex;
 import org.eclipse.jgit.annotations.NonNull;
-import org.eclipse.jgit.annotations.Nullable;
 import org.eclipse.jgit.api.errors.JGitInternalException;
+import org.eclipse.jgit.lib.AbstractGpgSignatureVerifier;
 import org.eclipse.jgit.lib.GpgConfig;
 import org.eclipse.jgit.lib.GpgSignatureVerifier;
-import org.eclipse.jgit.revwalk.RevCommit;
-import org.eclipse.jgit.revwalk.RevObject;
-import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.util.LRUMap;
-import org.eclipse.jgit.util.RawParseUtils;
 import org.eclipse.jgit.util.StringUtils;
 
 /**
  * A {@link GpgSignatureVerifier} to verify GPG signatures using BouncyCastle.
  */
-public class BouncyCastleGpgSignatureVerifier implements GpgSignatureVerifier {
+public class BouncyCastleGpgSignatureVerifier
+		extends AbstractGpgSignatureVerifier {
 
 	private static void registerBouncyCastleProviderIfNecessary() {
 		if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
@@ -77,50 +73,6 @@ public String getName() {
 		return "bc"; //$NON-NLS-1$
 	}
 
-	@Override
-	@Nullable
-	public SignatureVerification verifySignature(@NonNull RevObject object,
-			@NonNull GpgConfig config) throws IOException {
-		if (object instanceof RevCommit) {
-			RevCommit commit = (RevCommit) object;
-			byte[] signatureData = commit.getRawGpgSignature();
-			if (signatureData == null) {
-				return null;
-			}
-			byte[] raw = commit.getRawBuffer();
-			// Now remove the GPG signature
-			byte[] header = { 'g', 'p', 'g', 's', 'i', 'g' };
-			int start = RawParseUtils.headerStart(header, raw, 0);
-			if (start < 0) {
-				return null;
-			}
-			int end = RawParseUtils.headerEnd(raw, start);
-			// start is at the beginning of the header's content
-			start -= header.length + 1;
-			// end is on the terminating LF; we need to skip that, too
-			if (end < raw.length) {
-				end++;
-			}
-			byte[] data = new byte[raw.length - (end - start)];
-			System.arraycopy(raw, 0, data, 0, start);
-			System.arraycopy(raw, end, data, start, raw.length - end);
-			return verify(data, signatureData);
-		} else if (object instanceof RevTag) {
-			RevTag tag = (RevTag) object;
-			byte[] signatureData = tag.getRawGpgSignature();
-			if (signatureData == null) {
-				return null;
-			}
-			byte[] raw = tag.getRawBuffer();
-			// The signature is just tacked onto the end of the message, which
-			// is last in the buffer.
-			byte[] data = Arrays.copyOfRange(raw, 0,
-					raw.length - signatureData.length);
-			return verify(data, signatureData);
-		}
-		return null;
-	}
-
 	static PGPSignature parseSignature(InputStream in)
 			throws IOException, PGPException {
 		try (InputStream sigIn = PGPUtil.getDecoderStream(in)) {
@@ -138,7 +90,8 @@ static PGPSignature parseSignature(InputStream in)
 	}
 
 	@Override
-	public SignatureVerification verify(byte[] data, byte[] signatureData)
+	public SignatureVerification verify(@NonNull GpgConfig config, byte[] data,
+			byte[] signatureData)
 			throws IOException {
 		PGPSignature signature = null;
 		String fingerprint = null;
@@ -280,6 +233,13 @@ public SignatureVerification verify(byte[] data, byte[] signatureData)
 				verified, expired, trust, null);
 	}
 
+	@Override
+	public SignatureVerification verify(byte[] data, byte[] signatureData)
+			throws IOException {
+		throw new UnsupportedOperationException(
+				"Call verify(GpgConfig, byte[], byte[]) instead."); //$NON-NLS-1$
+	}
+
 	private TrustLevel parseGpgTrustPacket(byte[] packet) {
 		if (packet == null || packet.length < 6) {
 			// A GPG trust packet has at least 6 bytes.
diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
index b2dcb68..82e6a04 100644
--- a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
@@ -3,12 +3,13 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.apache
 Bundle-SymbolicName: org.eclipse.jgit.http.apache
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
-Import-Package: org.apache.http;version="[4.3.0,5.0.0)",
+Import-Package: javax.net.ssl,
+ org.apache.http;version="[4.3.0,5.0.0)",
  org.apache.http.client;version="[4.4.0,5.0.0)",
  org.apache.http.client.config;version="[4.4.0,5.0.0)",
  org.apache.http.client.methods;version="[4.4.0,5.0.0)",
@@ -25,11 +26,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="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)"
-Export-Package: org.eclipse.jgit.transport.http.apache;version="6.8.1";
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)"
+Export-Package: org.eclipse.jgit.transport.http.apache;version="6.9.1";
   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 296d4b7..db19ed1 100644
--- a/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.http.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml
index b45a95d..0353fdf 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.apache</artifactId>
diff --git a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
index de0d61a..fb8e105 100644
--- a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
@@ -3,13 +3,13 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.server
 Bundle-SymbolicName: org.eclipse.jgit.http.server
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.http.server;version="6.8.1",
- org.eclipse.jgit.http.server.glue;version="6.8.1";
+Export-Package: org.eclipse.jgit.http.server;version="6.9.1",
+ org.eclipse.jgit.http.server.glue;version="6.9.1";
   uses:="javax.servlet,javax.servlet.http",
- org.eclipse.jgit.http.server.resolver;version="6.8.1";
+ org.eclipse.jgit.http.server.resolver;version="6.9.1";
   uses:="org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.transport,
@@ -18,14 +18,14 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: javax.servlet;version="[2.5.0,5.0.0)",
  javax.servlet.http;version="[2.5.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.parser;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.resolver;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)"
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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 741f9f2..b765631 100644
--- a/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.http.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.http.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.http.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml
index e819792..3637292 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.server</artifactId>
diff --git a/org.eclipse.jgit.http.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.http.test/.settings/org.eclipse.core.resources.prefs
index ceaec82..4e2aba5 100644
--- a/org.eclipse.jgit.http.test/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.http.test/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:29 CEST 2010

-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+#Fri Jun 18 23:33:29 CEST 2010
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
index e86cee8..cc84aac 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -28,26 +28,26 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.http.server;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.http.server.glue;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.http.server.resolver;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.resolver;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.http.server;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.http.server.glue;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.http.server.resolver;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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)",
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml
index ce8c4c1..eba5578 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.test</artifactId>
diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
index 33a37ad..533f170 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
@@ -21,17 +21,17 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.ssl;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.http.server;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.resolver;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.http.server;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.9.1,6.10.0)",
  org.junit;version="[4.13,5.0.0)",
- org.slf4j.helpers;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.junit.http;version="6.8.1";
+ org.slf4j.helpers;version="[1.7.0,3.0.0)"
+Export-Package: org.eclipse.jgit.junit.http;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.junit,
    javax.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 7d25044..2da4567 100644
--- a/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.http/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit.http - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.http.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml
index 63fe58d..e6206e2 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.http</artifactId>
diff --git a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
index cc6afda..e7f8972 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/MANIFEST.MF
@@ -3,46 +3,46 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit.ssh
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.apache.sshd.common;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.helpers;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.io;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.kex;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.keyprovider;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.session;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.signature;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.buffer;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.logging;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.security;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.threads;version="[2.11.0,2.12.0)",
- org.apache.sshd.core;version="[2.11.0,2.12.0)",
- org.apache.sshd.server;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.auth;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.auth.gss;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.auth.keyboard;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.auth.password;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.command;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.session;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.shell;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.subsystem;version="[2.11.0,2.12.0)",
- org.apache.sshd.sftp;version="[2.11.0,2.12.0)",
- org.apache.sshd.sftp.server;version="[2.11.0,2.12.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+Import-Package: org.apache.sshd.common;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.file.virtualfs;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.helpers;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.io;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.kex;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.keyprovider;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.session;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.signature;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.buffer;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.logging;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.security;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.threads;version="[2.12.0,2.13.0)",
+ org.apache.sshd.core;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.auth;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.auth.gss;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.auth.keyboard;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.auth.password;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.command;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.session;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.shell;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.subsystem;version="[2.12.0,2.13.0)",
+ org.apache.sshd.sftp;version="[2.12.0,2.13.0)",
+ org.apache.sshd.sftp.server;version="[2.12.0,2.13.0)",
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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,2.0.0)"
-Export-Package: org.eclipse.jgit.junit.ssh;version="6.8.1"
+ org.slf4j;version="[1.7.0,3.0.0)"
+Export-Package: org.eclipse.jgit.junit.ssh;version="6.9.1"
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 5bbf815..24e31eb 100644
--- a/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit.ssh/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit.ssh - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.ssh.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml
index 0b760f5..7cf78c3 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit.ssh</artifactId>
diff --git a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
index c4950f9..bd87460 100644
--- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -3,36 +3,36 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit
 Bundle-SymbolicName: org.eclipse.jgit.junit
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.dircache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.merge;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="6.8.1",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.time;version="[6.8.1,6.9.0)",
+Import-Package: org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.dircache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.merge;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="6.9.1",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.time;version="[6.9.1,6.10.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,2.0.0)"
-Export-Package: org.eclipse.jgit.junit;version="6.8.1";
+ org.slf4j;version="[1.7.0,3.0.0)"
+Export-Package: org.eclipse.jgit.junit;version="6.9.1";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -45,4 +45,4 @@
    org.junit.runners.model,
    org.junit.runner,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.junit.time;version="6.8.1";uses:="org.eclipse.jgit.util.time"
+ org.eclipse.jgit.junit.time;version="6.9.1";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 7e2bbd0..52fc544 100644
--- a/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.junit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.junit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml
index 606a5a6..1638238 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit</artifactId>
diff --git a/org.eclipse.jgit.lfs.server.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.lfs.server.test/.settings/org.eclipse.core.resources.prefs
index 4824b80..99f26c0 100644
--- a/org.eclipse.jgit.lfs.server.test/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.lfs.server.test/.settings/org.eclipse.core.resources.prefs
@@ -1,2 +1,2 @@
-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+eclipse.preferences.version=1
+encoding/<project>=UTF-8
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 d665852..266d9bb 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -26,24 +26,24 @@
  org.eclipse.jetty.util.log;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.security;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.thread;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.server;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.server.fs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.test;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.server;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.test;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.hamcrest.core;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.lfs.server.test/pom.xml b/org.eclipse.jgit.lfs.server.test/pom.xml
index 11e3706..53ee569 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
diff --git a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
index 5ad3cc1..f3a5028 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.server
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs.server;version="6.8.1";
+Export-Package: org.eclipse.jgit.lfs.server;version="6.9.1";
   uses:="javax.servlet.http,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.fs;version="6.8.1";
+ org.eclipse.jgit.lfs.server.fs;version="6.9.1";
   uses:="javax.servlet,
    javax.servlet.http,
    org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.internal;version="6.8.1";x-internal:=true,
- org.eclipse.jgit.lfs.server.s3;version="6.8.1";
+ org.eclipse.jgit.lfs.server.internal;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.lfs.server.s3;version="6.9.1";
   uses:="org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -24,15 +24,15 @@
  javax.servlet.annotation;version="[3.1.0,5.0.0)",
  javax.servlet.http;version="[3.1.0,5.0.0)",
  org.apache.http;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.slf4j;version="[1.7.0,2.0.0)"
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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 03c3d46..4a869dd 100644
--- a/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.server/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.lfs.server - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.server.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml
index f7cd017..b1eca71 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server</artifactId>
diff --git a/org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs
index 4824b80..99f26c0 100644
--- a/org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.lfs.test/.settings/org.eclipse.core.resources.prefs
@@ -1,2 +1,2 @@
-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
index 939eb27..4ea3ccb 100644
--- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
@@ -3,27 +3,27 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.test
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.attributes;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+Import-Package: org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.attributes;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.hamcrest.core;version="[1.1.0,3.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="6.8.1";x-friends:="org.eclipse.jgit.lfs.server.test"
+Export-Package: org.eclipse.jgit.lfs.test;version="6.9.1";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 a0d8aa1f..667335a 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 4654b2d..442a87c 100644
--- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
@@ -3,32 +3,32 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs
 Bundle-SymbolicName: org.eclipse.jgit.lfs
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs;version="6.8.1",
- org.eclipse.jgit.lfs.errors;version="6.8.1",
- org.eclipse.jgit.lfs.internal;version="6.8.1";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
- org.eclipse.jgit.lfs.lib;version="6.8.1"
+Export-Package: org.eclipse.jgit.lfs;version="6.9.1",
+ org.eclipse.jgit.lfs.errors;version="6.9.1",
+ org.eclipse.jgit.lfs.internal;version="6.9.1";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
+ org.eclipse.jgit.lfs.lib;version="6.9.1"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 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="[6.8.1,6.9.0)";resolution:=optional,
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.attributes;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.diff;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.dircache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.hooks;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)"
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)";resolution:=optional,
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.attributes;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.diff;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.dircache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.hooks;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.0)"
diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
index 605b52c..ad93a57 100644
--- a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.lfs - Sources
 Bundle-SymbolicName: org.eclipse.jgit.lfs.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml
index 79c36d4..1dd81e0 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 f443178..53a6d97 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="6.8.1.qualifier"
+      version="6.9.1.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 e3030b8..a8df8d3 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 b67b91e..e12bace 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.9.1" 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 d5aea23..47b6cb2 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 05798c3..fa9758c 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.9.1" 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 f1999d7..7edde81 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.resources.prefs
index f6d7cf3..a666abd 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:08 CEST 2010

-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+#Fri Jun 18 23:33:08 CEST 2010
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.runtime.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.runtime.prefs
index 039a33c..61f6762 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.runtime.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/.settings/org.eclipse.core.runtime.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:08 CEST 2010

-eclipse.preferences.version=1

-line.separator=\n

+#Fri Jun 18 23:33:08 CEST 2010
+eclipse.preferences.version=1
+line.separator=\n
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 321f233..58e0de9 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="6.8.1.qualifier"
+      version="6.9.1.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="6.8.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.9.1" 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 47cdfb8..46f3650 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 0ece0d0..09d8975 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.9.1" 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 725ae80..4273207 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.resources.prefs
index 6f96ce8..14bdc2c 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:45 CEST 2010

-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+#Fri Jun 18 23:33:45 CEST 2010
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.runtime.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.runtime.prefs
index 1a32dba..898252b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.runtime.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/.settings/org.eclipse.core.runtime.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:45 CEST 2010

-eclipse.preferences.version=1

-line.separator=\n

+#Fri Jun 18 23:33:45 CEST 2010
+eclipse.preferences.version=1
+line.separator=\n
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 facc8af..ad85f8e 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="6.8.1.qualifier"
+      version="6.9.1.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="6.8.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.lfs" version="6.8.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.ssh.apache" version="6.8.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.9.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit.lfs" version="6.9.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit.ssh.apache" version="6.9.1" 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 0474e37..041fac1 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 6b0febb..58f47b0 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.repository</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.resources.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.resources.prefs
index 6f96ce8..14bdc2c 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.resources.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:45 CEST 2010

-eclipse.preferences.version=1

-encoding/<project>=UTF-8

+#Fri Jun 18 23:33:45 CEST 2010
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.runtime.prefs b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.runtime.prefs
index 1a32dba..898252b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.runtime.prefs
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/.settings/org.eclipse.core.runtime.prefs
@@ -1,3 +1,3 @@
-#Fri Jun 18 23:33:45 CEST 2010

-eclipse.preferences.version=1

-line.separator=\n

+#Fri Jun 18 23:33:45 CEST 2010
+eclipse.preferences.version=1
+line.separator=\n
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 f75dde9..c94d25e 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.9.1" 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 9ec3f88..a962942 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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>6.8.1-SNAPSHOT</version>
+      <version>6.9.1-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 cae8d09..b1e6e9d 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="6.9.1" 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 323e4fd..361a31e 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 12e8e41..5856a21 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="6.8.1.qualifier"
+      version="6.9.1.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="6.8.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="6.9.1" 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 d3d8b80..d1ed898 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
deleted file mode 100644
index 7017b9e..0000000
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,5 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: JGit Target Platform Bundle
-Bundle-SymbolicName: org.eclipse.jgit.target
-Bundle-Version: 6.8.1.qualifier
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target
index 4879c3a..cf278d8 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.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.17" sequenceNumber="1701211970">
+<target name="jgit-4.17" sequenceNumber="1708457973">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target
index 62b6743..c7fdb83 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.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.18" sequenceNumber="1701211970">
+<target name="jgit-4.18" sequenceNumber="1708457973">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target
index 269334b..b3f4165 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.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.19-staging" sequenceNumber="1701211970">
+<target name="jgit-4.19-staging" sequenceNumber="1708457973">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target
index dab00e8..55b6281 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.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.20" sequenceNumber="1701211970">
+<target name="jgit-4.20" sequenceNumber="1708457973">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
index 2c9689f..45136a7 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.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.21" sequenceNumber="1701211970">
+<target name="jgit-4.21" sequenceNumber="1708457973">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target
index adf6fb1..7fe3b68 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.22.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.22" sequenceNumber="1701211970">
+<target name="jgit-4.22" sequenceNumber="1708457972">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
index 5907d7f..e0786fd 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.23.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.23" sequenceNumber="1701211970">
+<target name="jgit-4.23" sequenceNumber="1708457972">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
index 9df673c..4656b56 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.24.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.24" sequenceNumber="1701211970">
+<target name="jgit-4.24" sequenceNumber="1708457972">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target
index d9c55b6..efa79b3 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.25.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.25" sequenceNumber="1701211970">
+<target name="jgit-4.25" sequenceNumber="1708457972">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target
index 02fa46f..a432bbb 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.26.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.26" sequenceNumber="1701211970">
+<target name="jgit-4.26" sequenceNumber="1708457970">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.27.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.27.target
index 3579da4..4b91238 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.27.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.27.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.27" sequenceNumber="1701211970">
+<target name="jgit-4.27" sequenceNumber="1708457970">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.28.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.28.target
index 1900424..7dc8dd8 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.28.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.28.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.28" sequenceNumber="1701211970">
+<target name="jgit-4.28" sequenceNumber="1708457970">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.29.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.29.target
index 8c7c1ac..d86ea28 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.29.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.29.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.29" sequenceNumber="1701211970">
+<target name="jgit-4.29" sequenceNumber="1708457970">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.30.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.30.target
index 8fbc567..afd4d32 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.30.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.30.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.30" sequenceNumber="1701211970">
+<target name="jgit-4.30" sequenceNumber="1708457970">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
@@ -63,13 +63,13 @@
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-osgi</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.apache.sshd</groupId>
     		<artifactId>sshd-sftp</artifactId>
-    		<version>2.11.0</version>
+    		<version>2.12.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -79,7 +79,7 @@
     	<dependency>
     		<groupId>org.mockito</groupId>
     		<artifactId>mockito-core</artifactId>
-    		<version>5.7.0</version>
+    		<version>5.10.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -89,13 +89,13 @@
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.java.dev.jna</groupId>
     		<artifactId>jna-platform</artifactId>
-    		<version>5.13.0</version>
+    		<version>5.14.0</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -105,43 +105,43 @@
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-http</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-io</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-security</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-server</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-servlet</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>org.eclipse.jetty</groupId>
     		<artifactId>jetty-util-ajax</artifactId>
-    		<version>10.0.18</version>
+    		<version>10.0.20</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
@@ -187,13 +187,13 @@
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
     		<groupId>net.bytebuddy</groupId>
     		<artifactId>byte-buddy-agent</artifactId>
-    		<version>1.14.9</version>
+    		<version>1.14.12</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -231,7 +231,7 @@
     	<dependency>
     		<groupId>org.assertj</groupId>
     		<artifactId>assertj-core</artifactId>
-    		<version>3.24.2</version>
+    		<version>3.25.3</version>
     		<type>jar</type>
     	</dependency>
     </dependencies>
@@ -257,7 +257,13 @@
     	<dependency>
     		<groupId>org.apache.commons</groupId>
     		<artifactId>commons-compress</artifactId>
-    		<version>1.25.0</version>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
     		<type>jar</type>
     	</dependency>
     	<dependency>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.target
new file mode 100644
index 0000000..d95197a
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.target
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?pde?>
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="jgit-4.31" sequenceNumber="1708457970">
+  <locations>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="com.jcraft.jsch" version="0.1.55.v20230916-1400"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20230916-1400"/>
+      <unit id="com.jcraft.jzlib" version="1.1.3.v20230916-1400"/>
+      <unit id="com.jcraft.jzlib.source" version="1.1.3.v20230916-1400"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0"/>
+      <unit id="org.apache.ant" version="1.10.14.v20230922-1200"/>
+      <unit id="org.apache.ant.source" version="1.10.14.v20230922-1200"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.14"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.14"/>
+      <unit id="org.apache.httpcomponents.httpcore" version="4.4.16"/>
+      <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.16"/>
+      <unit id="org.hamcrest.core" version="1.3.0.v20230809-1000"/>
+      <unit id="org.hamcrest.core.source" version="1.3.0.v20230809-1000"/>
+      <unit id="org.hamcrest.library" version="1.3.0.v20230809-1000"/>
+      <unit id="org.hamcrest.library.source" version="1.3.0.v20230809-1000"/>
+      <unit id="org.junit" version="4.13.2.v20230809-1000"/>
+      <unit id="org.junit.source" version="4.13.2.v20230809-1000"/>
+      <unit id="org.objenesis" version="3.3.0"/>
+      <unit id="org.objenesis.source" version="3.3.0"/>
+      <unit id="org.osgi.service.cm" version="1.6.1.202109301733"/>
+      <unit id="org.osgi.service.cm.source" version="1.6.1.202109301733"/>
+      <repository location="https://download.eclipse.org/tools/orbit/simrel/orbit-aggregation/2023-12"/>
+    </location>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="org.eclipse.osgi" version="0.0.0"/>
+      <repository location="https://download.eclipse.org/staging/2024-03/"/>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="xz">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.tukaani</groupId>
+    		<artifactId>xz</artifactId>
+    		<version>1.9</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="slf4j">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.slf4j</groupId>
+    		<artifactId>slf4j-api</artifactId>
+    		<version>1.7.36</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.slf4j</groupId>
+    		<artifactId>slf4j-simple</artifactId>
+    		<version>1.7.36</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="sshd">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.apache.sshd</groupId>
+    		<artifactId>sshd-osgi</artifactId>
+    		<version>2.12.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.apache.sshd</groupId>
+    		<artifactId>sshd-sftp</artifactId>
+    		<version>2.12.0</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="mockito">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.mockito</groupId>
+    		<artifactId>mockito-core</artifactId>
+    		<version>5.10.0</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="jna">
+    <dependencies>
+    	<dependency>
+    		<groupId>net.java.dev.jna</groupId>
+    		<artifactId>jna</artifactId>
+    		<version>5.14.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>net.java.dev.jna</groupId>
+    		<artifactId>jna-platform</artifactId>
+    		<version>5.14.0</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="jetty">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-http</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-io</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-security</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-server</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-servlet</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-util</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.eclipse.jetty</groupId>
+    		<artifactId>jetty-util-ajax</artifactId>
+    		<version>10.0.20</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>jakarta.servlet</groupId>
+    		<artifactId>jakarta.servlet-api</artifactId>
+    		<version>4.0.4</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="javaewah">
+    <dependencies>
+    	<dependency>
+    		<groupId>com.googlecode.javaewah</groupId>
+    		<artifactId>JavaEWAH</artifactId>
+    		<version>1.2.3</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="hamcrest">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.hamcrest</groupId>
+    		<artifactId>hamcrest</artifactId>
+    		<version>2.2</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="gson">
+    <dependencies>
+    	<dependency>
+    		<groupId>com.google.code.gson</groupId>
+    		<artifactId>gson</artifactId>
+    		<version>2.10.1</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="bytebuddy">
+    <dependencies>
+    	<dependency>
+    		<groupId>net.bytebuddy</groupId>
+    		<artifactId>byte-buddy</artifactId>
+    		<version>1.14.12</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>net.bytebuddy</groupId>
+    		<artifactId>byte-buddy-agent</artifactId>
+    		<version>1.14.12</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="bouncycastle">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.bouncycastle</groupId>
+    		<artifactId>bcpg-jdk18on</artifactId>
+    		<version>1.77</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.bouncycastle</groupId>
+    		<artifactId>bcprov-jdk18on</artifactId>
+    		<version>1.77</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.bouncycastle</groupId>
+    		<artifactId>bcpkix-jdk18on</artifactId>
+    		<version>1.77</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.bouncycastle</groupId>
+    		<artifactId>bcutil-jdk18on</artifactId>
+    		<version>1.77</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="assertj">
+    <dependencies>
+    	<dependency>
+    		<groupId>org.assertj</groupId>
+    		<artifactId>assertj-core</artifactId>
+    		<version>3.25.3</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="args4j">
+    <dependencies>
+    	<dependency>
+    		<groupId>args4j</groupId>
+    		<artifactId>args4j</artifactId>
+    		<version>2.33</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+    <location includeDependencyDepth="none" includeDependencyScopes="compile" includeSource="true" missingManifest="error" type="Maven" label="apache">
+    <dependencies>
+    	<dependency>
+    		<groupId>commons-codec</groupId>
+    		<artifactId>commons-codec</artifactId>
+    		<version>1.16.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>org.apache.commons</groupId>
+    		<artifactId>commons-compress</artifactId>
+    		<version>1.26.0</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-io</groupId>
+    		<artifactId>commons-io</artifactId>
+    		<version>2.15.1</version>
+    		<type>jar</type>
+    	</dependency>
+    	<dependency>
+    		<groupId>commons-logging</groupId>
+    		<artifactId>commons-logging</artifactId>
+    		<version>1.2</version>
+    		<type>jar</type>
+    	</dependency>
+    </dependencies>
+    </location>
+  </locations>
+</target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.tpd
new file mode 100644
index 0000000..58491c8
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.31.tpd
@@ -0,0 +1,8 @@
+target "jgit-4.31" with source configurePhase
+
+include "orbit/orbit-4.31.tpd"
+include "maven/dependencies.tpd"
+
+location "https://download.eclipse.org/staging/2024-03/" {
+	org.eclipse.osgi lazy
+}
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 10d707f..8347389 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/maven/dependencies.tpd
@@ -15,7 +15,12 @@
 	dependency {
 		groupId = "org.apache.commons"
 		artifactId = "commons-compress"
-		version = "1.25.0"
+		version = "1.26.0"
+	}
+	dependency {
+		groupId = "commons-io"
+		artifactId = "commons-io"
+		version = "2.15.1"
 	}
 	dependency {
 		groupId = "commons-logging"
@@ -46,7 +51,7 @@
 	dependency {
 		groupId = "org.assertj"
 		artifactId = "assertj-core"
-		version = "3.24.2"
+		version = "3.25.3"
 	}
 }
 
@@ -87,12 +92,12 @@
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy"
-		version = "1.14.9"
+		version = "1.14.12"
 	}
 	dependency {
 		groupId = "net.bytebuddy"
 		artifactId = "byte-buddy-agent"
-		version = "1.14.9"
+		version = "1.14.12"
 	}
 }
 
@@ -144,37 +149,37 @@
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-http"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-io"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-security"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-server"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-servlet"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "org.eclipse.jetty"
 		artifactId = "jetty-util-ajax"
-		version = "10.0.18"
+		version = "10.0.20"
 	}
 	dependency {
 		groupId = "jakarta.servlet"
@@ -192,12 +197,12 @@
 	dependency {
 		groupId = "net.java.dev.jna"
 		artifactId = "jna"
-		version = "5.13.0"
+		version = "5.14.0"
 	}
 	dependency {
 		groupId = "net.java.dev.jna"
 		artifactId = "jna-platform"
-		version = "5.13.0"
+		version = "5.14.0"
 	}
 }
 
@@ -210,7 +215,7 @@
 	dependency {
 		groupId = "org.mockito"
 		artifactId = "mockito-core"
-		version = "5.7.0"
+		version = "5.10.0"
 	}
 }
 
@@ -223,12 +228,12 @@
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-osgi"
-		version = "2.11.0"
+		version = "2.12.0"
 	}
 	dependency {
 		groupId = "org.apache.sshd"
 		artifactId = "sshd-sftp"
-		version = "2.11.0"
+		version = "2.12.0"
 	}
 }
 
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/orbit-4.31.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/orbit-4.31.tpd
new file mode 100644
index 0000000..0554a85
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/orbit-4.31.tpd
@@ -0,0 +1,27 @@
+target "orbit-4.30" with source configurePhase
+// see https://download.eclipse.org/tools/orbit/downloads/
+
+location "https://download.eclipse.org/tools/orbit/simrel/orbit-aggregation/2023-12" {
+	com.jcraft.jsch [0.1.55.v20230916-1400,0.1.55.v20230916-1400]
+	com.jcraft.jsch.source [0.1.55.v20230916-1400,0.1.55.v20230916-1400]
+	com.jcraft.jzlib [1.1.3.v20230916-1400,1.1.3.v20230916-1400]
+	com.jcraft.jzlib.source [1.1.3.v20230916-1400,1.1.3.v20230916-1400]
+	net.i2p.crypto.eddsa [0.3.0,0.3.0]
+	net.i2p.crypto.eddsa.source [0.3.0,0.3.0]
+	org.apache.ant [1.10.14.v20230922-1200,1.10.14.v20230922-1200]
+	org.apache.ant.source [1.10.14.v20230922-1200,1.10.14.v20230922-1200]
+	org.apache.httpcomponents.httpclient [4.5.14,4.5.14]
+	org.apache.httpcomponents.httpclient.source [4.5.14,4.5.14]
+	org.apache.httpcomponents.httpcore [4.4.16,4.4.16]
+	org.apache.httpcomponents.httpcore.source [4.4.16,4.4.16]
+	org.hamcrest.core [1.3.0.v20230809-1000,1.3.0.v20230809-1000]
+	org.hamcrest.core.source [1.3.0.v20230809-1000,1.3.0.v20230809-1000]
+	org.hamcrest.library [1.3.0.v20230809-1000,1.3.0.v20230809-1000]
+	org.hamcrest.library.source [1.3.0.v20230809-1000,1.3.0.v20230809-1000]
+	org.junit [4.13.2.v20230809-1000,4.13.2.v20230809-1000]
+	org.junit.source [4.13.2.v20230809-1000,4.13.2.v20230809-1000]
+	org.objenesis [3.3,3.3]
+	org.objenesis.source [3.3,3.3]
+	org.osgi.service.cm [1.6.1.202109301733,1.6.1.202109301733]
+	org.osgi.service.cm.source [1.6.1.202109301733,1.6.1.202109301733]
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
deleted file mode 100644
index 4e2d990..0000000
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Copyright (C) 2013, Matthias Sohn <matthias.sohn@sap.com> 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
-  http://www.eclipse.org/org/documents/edl-v10.php.
-
-  SPDX-License-Identifier: BSD-3-Clause
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.eclipse.jgit</groupId>
-    <artifactId>jgit.tycho.parent</artifactId>
-    <version>6.8.1-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>org.eclipse.jgit.target</artifactId>
-  <packaging>pom</packaging>
-  <name>JGit Target Platform</name>
-</project>
\ No newline at end of file
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml
index 03469db..c06d6e4 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>6.8.1-SNAPSHOT</version>
+  <version>6.9.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>JGit Tycho Parent</name>
@@ -43,7 +43,6 @@
   </pluginRepositories>
 
   <modules>
-    <module>org.eclipse.jgit.target</module>
     <module>org.eclipse.jgit.feature</module>
     <module>org.eclipse.jgit.gpg.bc.feature</module>
     <module>org.eclipse.jgit.http.apache.feature</module>
@@ -175,7 +174,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>3.3.0</version>
+        <version>3.4.1</version>
         <executions>
           <execution>
             <id>enforce-maven</id>
@@ -201,15 +200,11 @@
       <plugin>
         <groupId>org.eclipse.tycho</groupId>
         <artifactId>target-platform-configuration</artifactId>
-        <version>${tycho-version}</version>
-        <configuration>
-          <resolver>p2</resolver>
-        </configuration>
       </plugin>
       <plugin>
         <groupId>org.cyclonedx</groupId>
         <artifactId>cyclonedx-maven-plugin</artifactId>
-        <version>2.7.9</version>
+        <version>2.7.11</version>
         <configuration>
           <projectType>library</projectType>
           <schemaVersion>1.4</schemaVersion>
@@ -238,7 +233,7 @@
       <plugin>
         <groupId>io.github.git-commit-id</groupId>
         <artifactId>git-commit-id-maven-plugin</artifactId>
-        <version>6.0.0</version>
+        <version>7.0.0</version>
         <executions>
           <execution>
             <id>get-the-git-infos</id>
@@ -304,7 +299,6 @@
           <artifactId>target-platform-configuration</artifactId>
           <version>${tycho-version}</version>
           <configuration>
-            <resolver>p2</resolver>
             <pomDependencies>consider</pomDependencies>
             <target>
               <file>${project.basedir}/../org.eclipse.jgit.target/${target-platform}.target</file>
@@ -387,16 +381,16 @@
         <plugin>
           <groupId>org.eclipse.cbi.maven.plugins</groupId>
           <artifactId>eclipse-jarsigner-plugin</artifactId>
-          <version>1.4.2</version>
+          <version>1.4.3</version>
         </plugin>
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>build-helper-maven-plugin</artifactId>
-          <version>3.3.0</version>
+          <version>3.5.0</version>
         </plugin>
         <plugin>
           <artifactId>maven-clean-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.2</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -411,7 +405,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>3.12.1</version>
+          <version>4.0.0-M13</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -434,9 +428,6 @@
           <plugin>
             <groupId>org.eclipse.tycho</groupId>
             <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <includePackedArtifacts>true</includePackedArtifacts>
-            </configuration>
           </plugin>
           <plugin>
             <groupId>org.eclipse.cbi.maven.plugins</groupId>
@@ -477,9 +468,6 @@
           <plugin>
             <groupId>org.eclipse.tycho</groupId>
             <artifactId>target-platform-configuration</artifactId>
-            <configuration>
-              <includePackedArtifacts>true</includePackedArtifacts>
-            </configuration>
           </plugin>
           <plugin>
             <groupId>org.eclipse.tycho</groupId>
diff --git a/org.eclipse.jgit.pgm.test/BUILD b/org.eclipse.jgit.pgm.test/BUILD
index 539d666..b8ffa69 100644
--- a/org.eclipse.jgit.pgm.test/BUILD
+++ b/org.eclipse.jgit.pgm.test/BUILD
@@ -15,6 +15,7 @@
     deps = [
         ":helpers",
         "//lib:args4j",
+        "//lib:commons-io",
         "//lib:commons-compress",
         "//lib:javaewah",
         "//lib:junit",
diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
index 94c650a..7232b27 100644
--- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
@@ -3,30 +3,30 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm.test
 Bundle-SymbolicName: org.eclipse.jgit.pgm.test
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.diff;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.dircache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.diffmergetool;version="6.8.1",
- org.eclipse.jgit.internal.storage.file;version="6.8.1",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.merge;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.pgm;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.pgm.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.pgm.opt;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)",
+Import-Package: org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.diff;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.dircache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="6.9.1",
+ org.eclipse.jgit.internal.storage.file;version="6.9.1",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.merge;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.pgm;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.pgm.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.pgm.opt;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.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 c51d553..ae02cdc 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm.test</artifactId>
diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
index cc07eb4..825911c 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -14,49 +14,49 @@
  org.eclipse.jetty.servlet;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util;version="[10.0.0,11.0.0)",
  org.eclipse.jetty.util.component;version="[10.0.0,11.0.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.archive;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.awtui;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.blame;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.diff;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.dircache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.gitrepo;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.io;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.server;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.server.fs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs.server.s3;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.merge;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.notes;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revplot;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http.apache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.resolver;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.sshd;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.archive;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.awtui;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.blame;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.diff;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.dircache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.gitrepo;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.io;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.server;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs.server.s3;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.merge;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.notes;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revplot;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http.apache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.sshd;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.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="6.8.1";
+Export-Package: org.eclipse.jgit.console;version="6.9.1";
  uses:="org.eclipse.jgit.transport,
   org.eclipse.jgit.util",
- org.eclipse.jgit.pgm;version="6.8.1";
+ org.eclipse.jgit.pgm;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.awtui,
@@ -68,14 +68,14 @@
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.api,
    javax.swing",
- org.eclipse.jgit.pgm.debug;version="6.8.1";
+ org.eclipse.jgit.pgm.debug;version="6.9.1";
   uses:="org.eclipse.jgit.util.io,
    org.eclipse.jgit.pgm,
    org.eclipse.jetty.servlet",
- org.eclipse.jgit.pgm.internal;version="6.8.1";
+ org.eclipse.jgit.pgm.internal;version="6.9.1";
   x-friends:="org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.test",
- org.eclipse.jgit.pgm.opt;version="6.8.1";
+ org.eclipse.jgit.pgm.opt;version="6.9.1";
   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 8a44aec..cb5e814 100644
--- a/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.pgm/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.pgm - Sources
 Bundle-SymbolicName: org.eclipse.jgit.pgm.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml
index 26b9d2a..488b481 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 1bb957e..5011a8e 100644
--- a/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.agent/META-INF/MANIFEST.MF
@@ -2,16 +2,16 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.agent;singleton:=true
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/agent
 Bundle-Vendor: %Bundle-Vendor
-Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.8.1,6.9.0)"
+Fragment-Host: org.eclipse.jgit.ssh.apache;bundle-version="[6.9.1,6.10.0)"
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.agent
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Import-Package: org.eclipse.jgit.transport.sshd;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)"
+Import-Package: org.eclipse.jgit.transport.sshd;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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="6.8.1";x-internal:=true
+Export-Package: org.eclipse.jgit.internal.transport.sshd.agent.connector;version="6.9.1";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 5f4ea13..e841539 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,5 +3,5 @@
 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: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache.agent;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache.agent/pom.xml b/org.eclipse.jgit.ssh.apache.agent/pom.xml
index b08523f..7da173a 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.agent</artifactId>
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 e9e5793..7c5b2d7 100644
--- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -3,35 +3,35 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.hamcrest.core;bundle-version="[1.3.0,2.0.0)"
-Import-Package: org.apache.sshd.client.config.hosts;version="[2.11.0,2.12.0)",
- org.apache.sshd.common;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.auth;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.helpers;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.kex;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.keyprovider;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.session;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.signature;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.net;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.security;version="[2.11.0,2.12.0)",
- org.apache.sshd.core;version="[2.11.0,2.12.0)",
- org.apache.sshd.server;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.forward;version="[2.11.0,2.12.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit.ssh;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.sshd;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.sshd.agent;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+Import-Package: org.apache.sshd.client.config.hosts;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.auth;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.helpers;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.kex;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.keyprovider;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.session;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.signature;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.net;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.security;version="[2.12.0,2.13.0)",
+ org.apache.sshd.core;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.forward;version="[2.12.0,2.13.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit.ssh;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.sshd;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.sshd.agent;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
  org.junit.runner;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 14b5160..a8598a9 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 98bc78e..ac9d964 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
@@ -6,9 +6,9 @@
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.8.1";x-internal:=true;
+Export-Package: org.eclipse.jgit.internal.transport.sshd;version="6.9.1";x-internal:=true;
   uses:="org.apache.sshd.client,
    org.apache.sshd.client.auth,
    org.apache.sshd.client.auth.keyboard,
@@ -23,77 +23,77 @@
    org.apache.sshd.common.signature,
    org.apache.sshd.common.util.buffer,
    org.eclipse.jgit.transport",
- org.eclipse.jgit.internal.transport.sshd.agent;version="6.8.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.auth;version="6.8.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.pkcs11;version="6.8.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.proxy;version="6.8.1";x-friends:="org.eclipse.jgit.ssh.apache.test",
- org.eclipse.jgit.transport.sshd;version="6.8.1";
+ org.eclipse.jgit.internal.transport.sshd.agent;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.auth;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.pkcs11;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="6.9.1";x-friends:="org.eclipse.jgit.ssh.apache.test",
+ org.eclipse.jgit.transport.sshd;version="6.9.1";
   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="6.8.1",
+ org.eclipse.jgit.transport.sshd.agent;version="6.9.1",
  sun.security.x509
 Import-Package: net.i2p.crypto.eddsa;version="[0.3.0,0.4.0)",
- org.apache.sshd.agent;version="[2.11.0,2.12.0)",
- org.apache.sshd.client;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.auth;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.auth.keyboard;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.auth.password;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.auth.pubkey;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.channel;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.config.hosts;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.config.keys;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.future;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.keyverifier;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.session;version="[2.11.0,2.12.0)",
- org.apache.sshd.client.session.forward;version="[2.11.0,2.12.0)",
- org.apache.sshd.common;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.auth;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.channel;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.compression;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys.loader;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.config.keys.u2f;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.digest;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.forward;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.future;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.helpers;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.io;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.kex;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.kex.extension;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.kex.extension.parser;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.keyprovider;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.mac;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.random;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.session;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.session.helpers;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.signature;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.buffer;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.buffer.keys;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.closeable;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.io;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.io.der;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.io.functors;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.io.resource;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.logging;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.net;version="[2.11.0,2.12.0)",
- org.apache.sshd.common.util.security;version="[2.11.0,2.12.0)",
- org.apache.sshd.core;version="[2.11.0,2.12.0)",
- org.apache.sshd.server.auth;version="[2.11.0,2.12.0)",
- org.apache.sshd.sftp;version="[2.11.0,2.12.0)",
- org.apache.sshd.sftp.client;version="[2.11.0,2.12.0)",
- org.apache.sshd.sftp.common;version="[2.11.0,2.12.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.fnmatch;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.slf4j;version="[1.7.0,2.0.0)"
+ org.apache.sshd.agent;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.auth;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.auth.keyboard;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.auth.password;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.auth.pubkey;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.channel;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.config.hosts;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.config.keys;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.future;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.keyverifier;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.session;version="[2.12.0,2.13.0)",
+ org.apache.sshd.client.session.forward;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.auth;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.channel;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.compression;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys.loader;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.config.keys.u2f;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.digest;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.forward;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.future;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.helpers;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.io;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.kex;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.kex.extension;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.kex.extension.parser;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.keyprovider;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.mac;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.random;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.session;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.session.helpers;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.signature;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.buffer;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.buffer.keys;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.closeable;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.io;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.io.der;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.io.functors;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.io.resource;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.logging;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.net;version="[2.12.0,2.13.0)",
+ org.apache.sshd.common.util.security;version="[2.12.0,2.13.0)",
+ org.apache.sshd.core;version="[2.12.0,2.13.0)",
+ org.apache.sshd.server.auth;version="[2.12.0,2.13.0)",
+ org.apache.sshd.sftp;version="[2.12.0,2.13.0)",
+ org.apache.sshd.sftp.client;version="[2.12.0,2.13.0)",
+ org.apache.sshd.sftp.common;version="[2.12.0,2.13.0)",
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.fnmatch;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.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 3573437..5e7a06c 100644
--- a/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ssh.apache - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml
index 58144f4..68b2360 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
index eb55ec0..b0b1028 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitPublicKeyAuthentication.java
@@ -48,9 +48,7 @@
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.FactoryManager;
 import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.config.keys.AuthorizedKeyEntry;
 import org.apache.sshd.common.config.keys.KeyUtils;
-import org.apache.sshd.common.config.keys.PublicKeyEntryResolver;
 import org.apache.sshd.common.config.keys.u2f.SecurityKeyPublicKey;
 import org.apache.sshd.common.signature.Signature;
 import org.apache.sshd.common.signature.SignatureFactoriesManager;
@@ -314,6 +312,8 @@ protected void releaseKeys() throws IOException {
 
 	private class KeyIterator extends UserAuthPublicKeyIterator {
 
+		private static final String PUB_KEY_SUFFIX = ".pub"; //$NON-NLS-1$
+
 		public KeyIterator(ClientSession session,
 				SignatureFactoriesManager manager)
 				throws Exception {
@@ -326,22 +326,53 @@ private List<PublicKey> getExplicitKeys(
 				return null;
 			}
 			return explicitFiles.stream().map(s -> {
-				try {
-					Path p = Paths.get(s + ".pub"); //$NON-NLS-1$
-					if (Files.isRegularFile(p, LinkOption.NOFOLLOW_LINKS)) {
-						return AuthorizedKeyEntry.readAuthorizedKeys(p).get(0)
-								.resolvePublicKey(null,
-										PublicKeyEntryResolver.IGNORING);
-					}
-				} catch (InvalidPathException | IOException
-						| GeneralSecurityException e) {
-					log.warn("{}", //$NON-NLS-1$
-							format(SshdText.get().cannotReadPublicKey, s), e);
+				// assume the explicit key is a public key
+				PublicKey publicKey = readPublicKey(s, false);
+				if (publicKey == null && !s.endsWith(PUB_KEY_SUFFIX)) {
+					// if this is not the case, try to lookup public key with
+					// same filename and extension .pub
+					publicKey = readPublicKey(s + PUB_KEY_SUFFIX, true);
 				}
-				return null;
+				return publicKey;
 			}).filter(Objects::nonNull).collect(Collectors.toList());
 		}
 
+		/**
+		 *
+		 * @param keyFile
+		 *            the path to a public key
+		 * @param isDerived
+		 *            {@code false} in case the given {@code keyFile} is set in
+		 *            the SSH config as is, otherwise {@code false}
+		 * @return the public key read from the key file
+		 */
+		private PublicKey readPublicKey(String keyFile, boolean isDerived) {
+			try {
+				Path p = Paths.get(keyFile);
+				if (Files.isRegularFile(p, LinkOption.NOFOLLOW_LINKS)) {
+					return KeyUtils.loadPublicKey(p);
+				}
+				// only warn about non-existing files in case the key file is
+				// not derived
+				if (!isDerived) {
+					log.warn("{}", //$NON-NLS-1$
+						format(SshdText.get().cannotReadPublicKey, keyFile));
+				}
+			} catch (InvalidPathException | IOException e) {
+				log.warn("{}", //$NON-NLS-1$
+						format(SshdText.get().cannotReadPublicKey, keyFile), e);
+			} catch (GeneralSecurityException e) {
+				// ignore in case this is not a derived key path, as in most
+				// cases this specifies a private key
+				if (isDerived) {
+					log.warn("{}", //$NON-NLS-1$
+							format(SshdText.get().cannotReadPublicKey, keyFile),
+							e);
+				}
+			}
+			return null;
+		}
+
 		@Override
 		protected Iterable<KeyAgentIdentity> initializeAgentIdentities(
 				ClientSession session) throws IOException {
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 582d5e6..1af338b 100644
--- a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.test
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.hamcrest.core;bundle-version="[1.3.0,2.0.0)"
 Import-Package: com.jcraft.jsch;version="[0.1.54,0.2.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit.ssh;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.ssh.jsch;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit.ssh;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.ssh.jsch;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
  org.junit.runner;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 51a9f30..d70dc12 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 2028c76..36e2de2 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
@@ -3,19 +3,19 @@
 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="[6.8.1,6.9.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[6.9.1,6.10.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: OSGI-INF/l10n/jsch
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.8.1"
+Export-Package: org.eclipse.jgit.transport.ssh.jsch;version="6.9.1"
 Import-Package: com.jcraft.jsch;version="[0.1.37,0.2.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)",
- org.slf4j;version="[1.7.0,2.0.0)"
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.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 797bca4..50747f6 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ssh.jsch - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.jsch/pom.xml b/org.eclipse.jgit.ssh.jsch/pom.xml
index 1a100ea..bd0ff60 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 bb15de0..29f5b36 100644
--- a/org.eclipse.jgit.test/BUILD
+++ b/org.eclipse.jgit.test/BUILD
@@ -78,6 +78,7 @@
     deps = [
         "//lib:assertj-core",
         "//lib:commons-codec",
+        "//lib:commons-io",
         "//lib:junit",
         "//lib:mockito",
         "//lib:slf4j-simple",
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
index 8845014..fb6255e 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: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-11
@@ -18,65 +18,67 @@
  org.apache.commons.compress.compressors.bzip2;version="[1.15.0,2.0)",
  org.apache.commons.compress.compressors.gzip;version="[1.15.0,2.0)",
  org.apache.commons.compress.compressors.xz;version="[1.15.0,2.0)",
+ org.apache.commons.io;version="[2.15.0,3.0.0)",
+ org.apache.commons.io.output;version="[2.15.0,3.0.0)",
  org.assertj.core.api;version="[3.14.0,4.0.0)",
- org.eclipse.jgit.annotations;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.api.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.archive;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.attributes;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.awtui;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.blame;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.diff;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.dircache;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.events;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.fnmatch;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.gitrepo;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.hooks;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.ignore;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.ignore.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.diff;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.diffmergetool;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.fsck;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.commitgraph;version="6.8.1",
- org.eclipse.jgit.internal.storage.dfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.io;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.memory;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.connectivity;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.parser;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.junit.time;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lfs;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.logging;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.merge;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.notes;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.patch;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.pgm;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.pgm.internal;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revplot;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.file;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.storage.pack;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.submodule;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.http;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport.resolver;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.treewalk.filter;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.io;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util.sha1;version="[6.8.1,6.9.0)",
+ org.eclipse.jgit.annotations;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.api.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.archive;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.attributes;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.awtui;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.blame;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.diff;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.dircache;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.events;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.fnmatch;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.gitrepo;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.hooks;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.ignore;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.ignore.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.diff;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.diffmergetool;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.fsck;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.commitgraph;version="6.9.1",
+ org.eclipse.jgit.internal.storage.dfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.io;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.memory;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.connectivity;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.junit.time;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lfs;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.logging;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.merge;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.notes;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.patch;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.pgm;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.pgm.internal;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revplot;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.file;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.storage.pack;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.submodule;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.http;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport.resolver;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.treewalk.filter;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.io;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util.sha1;version="[6.9.1,6.10.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.experimental.theories;version="[4.13,5.0.0)",
  org.junit.function;version="[4.13.0,5.0.0)",
@@ -88,5 +90,5 @@
  org.mockito.junit;version="[5.4.0,6.0.0)",
  org.mockito.stubbing;version="[5.4.0,6.0.0)",
  org.objenesis;version="[3.3.0,4.0.0)",
- org.slf4j;version="[1.7.0,2.0.0)",
+ org.slf4j;version="[1.7.0,3.0.0)",
  org.tukaani.xz
diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml
index 2ff7b7e..fd40586 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.test</artifactId>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java
index 301d6be..be3b33a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CherryPickCommandTest.java
@@ -9,6 +9,8 @@
  */
 package org.eclipse.jgit.api;
 
+import static org.eclipse.jgit.api.CherryPickCommitMessageProvider.ORIGINAL;
+import static org.eclipse.jgit.api.CherryPickCommitMessageProvider.ORIGINAL_WITH_REFERENCE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -590,4 +592,187 @@ public void testCherryPickMerge() throws Exception {
 			checkFile(new File(db.getWorkTree(), "file"), "a\n2\n3\n");
 		}
 	}
+
+	private void doCherryPickWithCustomProviderBaseTest(Git git,
+			CherryPickCommitMessageProvider commitMessageProvider)
+			throws Exception {
+		writeTrashFile("fileA", "line 1\nline 2\nline 3\n");
+		git.add().addFilepattern("fileA").call();
+		RevCommit commitFirst = git.commit().setMessage("create fileA").call();
+
+		writeTrashFile("fileB", "content from file B\n");
+		git.add().addFilepattern("fileB").call();
+		RevCommit commitCreateFileB = git.commit()
+				.setMessage("create fileB\n\nsome commit details").call();
+
+		writeTrashFile("fileA", "line 1\nline 2\nline 3\nline 4\n");
+		git.add().addFilepattern("fileA").call();
+		RevCommit commitEditFileA1 = git.commit().setMessage("patch fileA 1")
+				.call();
+
+		writeTrashFile("fileA", "line 1\nline 2\nline 3\nline 4\nline 5\n");
+		git.add().addFilepattern("fileA").call();
+		RevCommit commitEditFileA2 = git.commit().setMessage("patch fileA 2")
+				.call();
+
+		git.branchCreate().setName("side").setStartPoint(commitFirst).call();
+		checkoutBranch("refs/heads/side");
+
+		CherryPickResult pickResult = git.cherryPick()
+				.setCherryPickCommitMessageProvider(commitMessageProvider)
+				.include(commitCreateFileB).include(commitEditFileA1)
+				.include(commitEditFileA2).call();
+
+		assertEquals(CherryPickStatus.OK, pickResult.getStatus());
+
+		assertTrue(new File(db.getWorkTree(), "fileA").exists());
+		assertTrue(new File(db.getWorkTree(), "fileB").exists());
+
+		checkFile(new File(db.getWorkTree(), "fileA"),
+				"line 1\nline 2\nline 3\nline 4\nline 5\n");
+		checkFile(new File(db.getWorkTree(), "fileB"), "content from file B\n");
+	}
+
+	@Test
+	public void testCherryPickWithCustomCommitMessageProvider()
+			throws Exception {
+		try (Git git = new Git(db)) {
+			@SuppressWarnings("boxing")
+			CherryPickCommitMessageProvider messageProvider = srcCommit -> {
+				String message = srcCommit.getFullMessage();
+				return String.format("%s (message length: %d)", message,
+						message.length());
+			};
+			doCherryPickWithCustomProviderBaseTest(git, messageProvider);
+
+			Iterator<RevCommit> history = git.log().call().iterator();
+			assertEquals("patch fileA 2 (message length: 13)",
+					history.next().getFullMessage());
+			assertEquals("patch fileA 1 (message length: 13)",
+					history.next().getFullMessage());
+			assertEquals(
+					"create fileB\n\nsome commit details (message length: 33)",
+					history.next().getFullMessage());
+			assertEquals("create fileA", history.next().getFullMessage());
+			assertFalse(history.hasNext());
+		}
+	}
+
+	@Test
+	public void testCherryPickWithCustomCommitMessageProvider_ORIGINAL()
+			throws Exception {
+		try (Git git = new Git(db)) {
+			doCherryPickWithCustomProviderBaseTest(git, ORIGINAL);
+
+			Iterator<RevCommit> history = git.log().call().iterator();
+			assertEquals("patch fileA 2", history.next().getFullMessage());
+			assertEquals("patch fileA 1", history.next().getFullMessage());
+			assertEquals("create fileB\n\nsome commit details",
+					history.next().getFullMessage());
+			assertEquals("create fileA", history.next().getFullMessage());
+			assertFalse(history.hasNext());
+		}
+	}
+
+	@Test
+	public void testCherryPickWithCustomCommitMessageProvider_ORIGINAL_WITH_REFERENCE()
+			throws Exception {
+		try (Git git = new Git(db)) {
+			doCherryPickWithCustomProviderBaseTest(git,
+					ORIGINAL_WITH_REFERENCE);
+
+			Iterator<RevCommit> history = git.log().call().iterator();
+			assertEquals("patch fileA 2\n\n(cherry picked from commit 1ac121e90b0fb6fb18bbb4307e3e9731ceeba9e1)", history.next().getFullMessage());
+			assertEquals("patch fileA 1\n\n(cherry picked from commit 71475239df59076e18564fa360e3a74280926c2a)", history.next().getFullMessage());
+			assertEquals("create fileB\n\nsome commit details\n\n(cherry picked from commit 29b4501297ccf8de9de9f451e7beb384b51f5378)",
+					history.next().getFullMessage());
+			assertEquals("create fileA", history.next().getFullMessage());
+			assertFalse(history.hasNext());
+		}
+	}
+
+	@Test
+	public void testCherryPickWithCustomCommitMessageProvider_ORIGINAL_WITH_REFERENCE_DonNotAddNewLineAfterFooter()
+			throws Exception {
+		try (Git git = new Git(db)) {
+			CherryPickCommitMessageProvider commitMessageProvider = CherryPickCommitMessageProvider.ORIGINAL_WITH_REFERENCE;
+
+			RevCommit commit1 = addFileAndCommit(git, "file1", "content 1",
+					"commit1: no footer line");
+			RevCommit commit2 = addFileAndCommit(git, "file2", "content 2",
+					"commit2: simple single footer line"
+							+ "\n\nSigned-off-by: Alice <alice@example.com>");
+			RevCommit commit3 = addFileAndCommit(git, "file3", "content 3",
+					"commit3: multiple footer lines\n\n"
+							+ "Signed-off-by: Alice <alice@example.com>\n"
+							+ "Signed-off-by: Bob <bob@example.com>");
+			RevCommit commit4 = addFileAndCommit(git, "file4", "content 4",
+					"commit4: extra commit text before footer line\n\n"
+							+ "Commit message details\n\n"
+							+ "Signed-off-by: Alice <alice@example.com>\n"
+							+ "Signed-off-by: Bob <bob@example.com>");
+			RevCommit commit5 = addFileAndCommit(git, "file5", "content 5",
+					"commit5: extra commit text after footer line\n\n"
+							+ "Signed-off-by: Alice <alice@example.com>\n"
+							+ "Signed-off-by: Bob <bob@example.com>\n\n"
+							+ "some extra description after footer");
+
+			git.branchCreate().setName("side").setStartPoint(commit1).call();
+			checkoutBranch("refs/heads/side");
+
+			CherryPickResult pickResult = git.cherryPick()
+					.setCherryPickCommitMessageProvider(commitMessageProvider)
+					.include(commit2).include(commit3).include(commit4)
+					.include(commit5).call();
+
+			assertEquals(CherryPickStatus.OK, pickResult.getStatus());
+
+			assertTrue(new File(db.getWorkTree(), "file1").exists());
+			assertTrue(new File(db.getWorkTree(), "file2").exists());
+			assertTrue(new File(db.getWorkTree(), "file3").exists());
+			assertTrue(new File(db.getWorkTree(), "file4").exists());
+			assertTrue(new File(db.getWorkTree(), "file5").exists());
+
+			Iterator<RevCommit> history = git.log().call().iterator();
+			RevCommit cpCommit1 = history.next();
+			RevCommit cpCommit2 = history.next();
+			RevCommit cpCommit3 = history.next();
+			RevCommit cpCommit4 = history.next();
+			RevCommit cpCommitInit = history.next();
+			assertFalse(history.hasNext());
+
+			assertEquals("commit5: extra commit text after footer line\n\n"
+					+ "Signed-off-by: Alice <alice@example.com>\n"
+					+ "Signed-off-by: Bob <bob@example.com>\n\n"
+					+ "some extra description after footer\n\n"
+					+ "(cherry picked from commit c3c9959207dc7ae7c83da5d36dc14ef2ca42d572)",
+					cpCommit1.getFullMessage());
+			assertEquals("commit4: extra commit text before footer line\n\n"
+					+ "Commit message details\n\n"
+					+ "Signed-off-by: Alice <alice@example.com>\n"
+					+ "Signed-off-by: Bob <bob@example.com>\n"
+					+ "(cherry picked from commit af3e8106c12cb946a37b403ddb2dd6c11a883698)",
+					cpCommit2.getFullMessage());
+			assertEquals("commit3: multiple footer lines\n\n"
+					+ "Signed-off-by: Alice <alice@example.com>\n"
+					+ "Signed-off-by: Bob <bob@example.com>\n"
+					+ "(cherry picked from commit 6d60f1a70a11a32dff4402c157c4ac328c32ce6c)",
+					cpCommit3.getFullMessage());
+			assertEquals("commit2: simple single footer line\n\n"
+					+ "Signed-off-by: Alice <alice@example.com>\n"
+					+ "(cherry picked from commit 92bf0ec458814ecc73da8e050e60547d2ea6cce5)",
+					cpCommit4.getFullMessage());
+
+			assertEquals("commit1: no footer line",
+					cpCommitInit.getFullMessage());
+		}
+	}
+
+	private RevCommit addFileAndCommit(Git git, String fileName,
+			String fileText, String commitMessage)
+			throws IOException, GitAPIException {
+		writeTrashFile(fileName, fileText);
+		git.add().addFilepattern(fileName).call();
+		return git.commit().setMessage(commitMessage).call();
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
index 16f7cd1..987c98e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/RebaseCommandTest.java
@@ -332,6 +332,40 @@ public void testRebaseNoMergeBase() throws Exception {
 	}
 
 	/**
+	 * Create a commit A and an unrelated commit B creating the same file with
+	 * different content. Then rebase A onto B. The rebase should stop with a
+	 * conflict.
+	 *
+	 * @throws Exception
+	 *             on errors
+	 */
+	@Test
+	public void testRebaseNoMergeBaseConflict() throws Exception {
+		writeTrashFile(FILE1, FILE1);
+		git.add().addFilepattern(FILE1).call();
+		RevCommit first = git.commit().setMessage("Add file").call();
+		File file1 = new File(db.getWorkTree(), FILE1);
+		assertTrue(file1.exists());
+		// Create an independent branch
+		git.checkout().setOrphan(true).setName("orphan").call();
+		git.rm().addFilepattern(FILE1).call();
+		assertFalse(file1.exists());
+		writeTrashFile(FILE1, "something else");
+		git.add().addFilepattern(FILE1).call();
+		git.commit().setMessage("Orphan").call();
+		checkoutBranch("refs/heads/master");
+		assertEquals(first.getId(), db.resolve("HEAD"));
+		RebaseResult res = git.rebase().setUpstream("refs/heads/orphan").call();
+		assertEquals(Status.STOPPED, res.getStatus());
+		assertEquals(first, res.getCurrentCommit());
+		checkFile(file1, "<<<<<<< Upstream, based on orphan\n"
+				+ "something else\n"
+				+ "=======\n"
+				+ "file1\n"
+				+ ">>>>>>> " + first.abbreviate(7).name() + " Add file\n");
+	}
+
+	/**
 	 * Create the following commits and then attempt to rebase topic onto
 	 * master. This will serialize the branches.
 	 *
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileTest.java
index 77e5b7c..44694ac 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsPackFileTest.java
@@ -14,6 +14,8 @@
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.ByteArrayOutputStream;
@@ -24,14 +26,18 @@
 
 import org.eclipse.jgit.internal.storage.dfs.DfsObjDatabase.PackSource;
 import org.eclipse.jgit.internal.storage.dfs.DfsReader.PackLoadListener;
+import org.eclipse.jgit.internal.storage.file.PackBitmapIndex;
 import org.eclipse.jgit.internal.storage.pack.PackExt;
 import org.eclipse.jgit.internal.storage.pack.PackOutputStream;
 import org.eclipse.jgit.internal.storage.pack.PackWriter;
 import org.eclipse.jgit.junit.JGitTestUtil;
 import org.eclipse.jgit.junit.TestRng;
+import org.eclipse.jgit.lib.BatchRefUpdate;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.NullProgressMonitor;
 import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.transport.ReceiveCommand;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -123,6 +129,41 @@ public void testLoadObjectSizeIndex() throws IOException {
 	}
 
 	@Test
+	public void testGetBitmapIndex() throws IOException {
+		bypassCache = false;
+		clearCache = true;
+		ObjectId objectId = setupPack(512, 800);
+
+		// Add a ref for GC
+		BatchRefUpdate batchRefUpdate = db.getRefDatabase().newBatchUpdate();
+		batchRefUpdate.addCommand(new ReceiveCommand(ObjectId.zeroId(),
+				objectId, "refs/heads/master"));
+		try (RevWalk rw = new RevWalk(db)) {
+			batchRefUpdate.execute(rw, NullProgressMonitor.INSTANCE);
+		}
+		DfsGarbageCollector gc = new DfsGarbageCollector(db);
+		gc.pack(NullProgressMonitor.INSTANCE);
+
+		DfsReader reader = db.getObjectDatabase().newReader();
+		PackBitmapIndex bitmapIndex = db.getObjectDatabase().getPacks()[0]
+				.getBitmapIndex(reader);
+		assertNotNull(bitmapIndex);
+		assertEquals(1, bitmapIndex.getObjectCount());
+	}
+
+	@Test
+	public void testGetBitmapIndex_noBitmaps() throws IOException {
+		bypassCache = false;
+		clearCache = true;
+		setupPack(512, 800);
+
+		DfsReader reader = db.getObjectDatabase().newReader();
+		PackBitmapIndex bitmapIndex = db.getObjectDatabase().getPacks()[0]
+				.getBitmapIndex(reader);
+		assertNull(bitmapIndex);
+	}
+
+	@Test
 	public void testLoadObjectSizeIndex_noIndex() throws IOException {
 		bypassCache = false;
 		clearCache = true;
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsReaderTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsReaderTest.java
index eb8ceec..254184e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsReaderTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/dfs/DfsReaderTest.java
@@ -12,6 +12,7 @@
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_MIN_BYTES_OBJ_SIZE_INDEX;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION;
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
+import static org.eclipse.jgit.lib.Constants.OBJ_COMMIT;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -39,8 +40,56 @@ public void setUp() {
 	}
 
 	@Test
-	public void isNotLargerThan_objAboveThreshold()
-			throws IOException {
+	public void getObjectSize_noIndex_blob() throws IOException {
+		ObjectId obj = insertBlobWithSize(100);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			long size = ctx.getObjectSize(obj, OBJ_BLOB);
+			assertEquals(100, size);
+		}
+	}
+
+	@Test
+	public void getObjectSize_noIndex_commit() throws IOException {
+		ObjectId obj = insertObjectWithSize(OBJ_COMMIT, 110);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			long size = ctx.getObjectSize(obj, OBJ_COMMIT);
+			assertEquals(110, size);
+		}
+	}
+
+	@Test
+	public void getObjectSize_index_indexedBlob() throws IOException {
+		setObjectSizeIndexMinBytes(100);
+		ObjectId obj = insertBlobWithSize(200);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			long size = ctx.getObjectSize(obj, OBJ_BLOB);
+			assertEquals(200, size);
+		}
+	}
+
+	@Test
+	public void getObjectSize_index_nonIndexedBlob() throws IOException {
+		setObjectSizeIndexMinBytes(100);
+		ObjectId obj = insertBlobWithSize(50);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			long size = ctx.getObjectSize(obj, OBJ_BLOB);
+			assertEquals(50, size);
+		}
+	}
+
+	@Test
+	public void getObjectSize_index_commit() throws IOException {
+		setObjectSizeIndexMinBytes(100);
+		insertBlobWithSize(110);
+		ObjectId obj = insertObjectWithSize(OBJ_COMMIT, 120);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			long size = ctx.getObjectSize(obj, OBJ_COMMIT);
+			assertEquals(120, size);
+		}
+	}
+
+	@Test
+	public void isNotLargerThan_objAboveThreshold() throws IOException {
 		setObjectSizeIndexMinBytes(100);
 		ObjectId obj = insertBlobWithSize(200);
 		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
@@ -76,10 +125,8 @@ public void isNotLargerThan_objAboveThreshold()
 		}
 	}
 
-
 	@Test
-	public void isNotLargerThan_objBelowThreshold()
-			throws IOException {
+	public void isNotLargerThan_objBelowThreshold() throws IOException {
 		setObjectSizeIndexMinBytes(100);
 		insertBlobWithSize(1000); // index not empty
 		ObjectId obj = insertBlobWithSize(50);
@@ -168,22 +215,26 @@ public void packLoadListener_has_openIdx() throws IOException {
 			ctx.addPackLoadListener(listener);
 			boolean has = ctx.has(obj);
 			assertTrue(has);
-			assertEquals(Integer.valueOf(1), listener.callsPerExt.get(PackExt.INDEX));
+			assertEquals(Integer.valueOf(1),
+					listener.callsPerExt.get(PackExt.INDEX));
 		}
 	}
 
 	@Test
-	public void packLoadListener_notLargerThan_openMultipleIndices() throws IOException {
-			setObjectSizeIndexMinBytes(100);
-			ObjectId obj = insertBlobWithSize(200);
-			try (DfsReader ctx = db.getObjectDatabase().newReader()) {
-				CounterPackLoadListener listener = new CounterPackLoadListener();
-				ctx.addPackLoadListener(listener);
-				boolean notLargerThan = ctx.isNotLargerThan(obj, OBJ_BLOB, 1000);
-				assertTrue(notLargerThan);
-				assertEquals(Integer.valueOf(1), listener.callsPerExt.get(PackExt.INDEX));
-				assertEquals(Integer.valueOf(1), listener.callsPerExt.get(PackExt.OBJECT_SIZE_INDEX));
-			}
+	public void packLoadListener_notLargerThan_openMultipleIndices()
+			throws IOException {
+		setObjectSizeIndexMinBytes(100);
+		ObjectId obj = insertBlobWithSize(200);
+		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
+			CounterPackLoadListener listener = new CounterPackLoadListener();
+			ctx.addPackLoadListener(listener);
+			boolean notLargerThan = ctx.isNotLargerThan(obj, OBJ_BLOB, 1000);
+			assertTrue(notLargerThan);
+			assertEquals(Integer.valueOf(1),
+					listener.callsPerExt.get(PackExt.INDEX));
+			assertEquals(Integer.valueOf(1),
+					listener.callsPerExt.get(PackExt.OBJECT_SIZE_INDEX));
+		}
 	}
 
 	@Test
@@ -195,20 +246,24 @@ public void packLoadListener_has_openMultipleIndices() throws IOException {
 		try (DfsReader ctx = db.getObjectDatabase().newReader()) {
 			CounterPackLoadListener listener = new CounterPackLoadListener();
 			ctx.addPackLoadListener(listener);
-			ObjectId oid = ObjectId.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f129");
+			ObjectId oid = ObjectId
+					.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f129");
 			boolean has = ctx.has(oid);
 			assertFalse(has);
 			// Open 3 indices trying to find the pack
-			assertEquals(Integer.valueOf(3), listener.callsPerExt.get(PackExt.INDEX));
+			assertEquals(Integer.valueOf(3),
+					listener.callsPerExt.get(PackExt.INDEX));
 		}
 	}
 
-
 	@Test
-	public void packLoadListener_has_repeatedCalls_openMultipleIndices() throws IOException {
+	public void packLoadListener_has_repeatedCalls_openMultipleIndices()
+			throws IOException {
 		// Two objects NOT in the repo
-		ObjectId oid = ObjectId.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f129");
-		ObjectId oid2 = ObjectId.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f130");
+		ObjectId oid = ObjectId
+				.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f129");
+		ObjectId oid2 = ObjectId
+				.fromString("aa48de2aa61d9dffa8a05439dc115fe82f10f130");
 
 		setObjectSizeIndexMinBytes(100);
 		insertBlobWithSize(200);
@@ -222,7 +277,8 @@ public void packLoadListener_has_repeatedCalls_openMultipleIndices() throws IOEx
 			ctx.has(oid2);
 			assertFalse(has);
 			// The 3 indices were loaded only once each
-			assertEquals(Integer.valueOf(3), listener.callsPerExt.get(PackExt.INDEX));
+			assertEquals(Integer.valueOf(3),
+					listener.callsPerExt.get(PackExt.INDEX));
 		}
 	}
 
@@ -231,8 +287,8 @@ private static class CounterPackLoadListener implements PackLoadListener {
 
 		@SuppressWarnings("boxing")
 		@Override
-		public void onIndexLoad(String packName, PackSource src, PackExt ext, long size,
-				Object loadedIdx) {
+		public void onIndexLoad(String packName, PackSource src, PackExt ext,
+				long size, Object loadedIdx) {
 			callsPerExt.merge(ext, 1, Integer::sum);
 		}
 
@@ -243,13 +299,16 @@ public void onBlockLoad(String packName, PackSource src, PackExt ext,
 		}
 	}
 
-	private ObjectId insertBlobWithSize(int size)
+	private ObjectId insertBlobWithSize(int size) throws IOException {
+		return insertObjectWithSize(OBJ_BLOB, size);
+	}
+
+	private ObjectId insertObjectWithSize(int object_type, int size)
 			throws IOException {
 		TestRng testRng = new TestRng(JGitTestUtil.getName());
 		ObjectId oid;
 		try (ObjectInserter ins = db.newObjectInserter()) {
-				oid = ins.insert(OBJ_BLOB,
-						testRng.nextBytes(size));
+			oid = ins.insert(object_type, testRng.nextBytes(size));
 			ins.flush();
 		}
 		return oid;
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndexTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndexTest.java
new file mode 100644
index 0000000..f47c385
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndexTest.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2023, Google LLC  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
+ * http://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.internal.storage.file;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.jgit.internal.storage.file.BasePackBitmapIndex.StoredBitmap;
+import org.eclipse.jgit.lib.AnyObjectId;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectIdOwnerMap;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.googlecode.javaewah.EWAHCompressedBitmap;
+
+public class BasePackBitmapIndexTest {
+
+	private ObjectId baseOid;
+
+	private StoredBitmap baseBitmap;
+
+	private ObjectId xorOid;
+
+	private StoredBitmap xorBitmap;
+
+	private ObjectIdOwnerMap<StoredBitmap> bitmaps;
+
+	@Before
+	public void setUp() {
+		baseOid = ObjectId
+				.fromString("c46f36f2bfc96d6d6f75bd71ee33625293aee690");
+		baseBitmap = newBaseStoredBitmap(baseOid, bitmapOf(100));
+		xorOid = ObjectId
+				.fromString("52c18ae15f8fa3787f920e68791367dae2e1af2d");
+		xorBitmap = newXorStoredBitmap(xorOid, bitmapOf(200, 300), baseBitmap);
+		bitmaps = new ObjectIdOwnerMap<>();
+		bitmaps.add(baseBitmap);
+		bitmaps.add(xorBitmap);
+	}
+
+	@Test
+	public void testBitmapCounts() {
+		TestPackBitmapIndex index = new TestPackBitmapIndex(bitmaps);
+
+		assertEquals(1, index.getBaseBitmapCount());
+		assertEquals(1, index.getXorBitmapCount());
+		assertEquals(2, index.getBitmapCount());
+	}
+
+	@Test
+	public void testBitmapCounts_xorResolved() {
+		TestPackBitmapIndex index = new TestPackBitmapIndex(bitmaps);
+		index.getBitmap(xorOid);
+
+		assertEquals(2, index.getBaseBitmapCount());
+		assertEquals(0, index.getXorBitmapCount());
+		assertEquals(2, index.getBitmapCount());
+	}
+
+	@Test
+	public void testBitmapSizes() {
+		TestPackBitmapIndex index = new TestPackBitmapIndex(bitmaps);
+
+		assertEquals(baseBitmap.getCurrentSizeInBytes(),
+				index.getBaseBitmapSizeInBytes());
+		assertEquals(xorBitmap.getCurrentSizeInBytes(),
+				index.getXorBitmapSizeInBytes());
+	}
+
+	@Test
+	public void testBitmapSizes_xorResolved() {
+		TestPackBitmapIndex index = new TestPackBitmapIndex(bitmaps);
+		index.getBitmap(xorOid);
+
+		assertTrue(baseBitmap.getCurrentSizeInBytes() < index
+				.getBaseBitmapSizeInBytes());
+		assertEquals(0, index.getXorBitmapSizeInBytes());
+	}
+
+	private static final StoredBitmap newBaseStoredBitmap(ObjectId oid,
+			EWAHCompressedBitmap base) {
+		return new StoredBitmap(oid, base, null, 0);
+	}
+
+	private static StoredBitmap newXorStoredBitmap(ObjectId oid,
+			EWAHCompressedBitmap xorMask, StoredBitmap base) {
+		return new StoredBitmap(oid, xorMask, base, 0);
+	}
+
+	private static final EWAHCompressedBitmap bitmapOf(int... bits) {
+		EWAHCompressedBitmap b = new EWAHCompressedBitmap();
+		for (int bit : bits)
+			b.set(bit);
+		return b;
+	}
+
+	private static class TestPackBitmapIndex extends BasePackBitmapIndex {
+		TestPackBitmapIndex(ObjectIdOwnerMap<StoredBitmap> bitmaps) {
+			super(bitmaps);
+		}
+
+		@Override
+		public int findPosition(AnyObjectId objectId) {
+			throw new IllegalStateException();
+		}
+
+		@Override
+		public ObjectId getObject(int position)
+				throws IllegalArgumentException {
+			throw new IllegalStateException();
+		}
+
+		@Override
+		public EWAHCompressedBitmap ofObjectType(EWAHCompressedBitmap bitmap,
+				int type) {
+			throw new IllegalStateException();
+		}
+
+		@Override
+		public int getObjectCount() {
+			throw new IllegalStateException();
+		}
+
+		@Override
+		public int getBitmapCount() {
+			return getBitmaps().size();
+		}
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/StoredBitmapTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/StoredBitmapTest.java
index f5c7c67..684ee52 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/StoredBitmapTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/StoredBitmapTest.java
@@ -11,6 +11,8 @@
 package org.eclipse.jgit.internal.storage.file;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import org.eclipse.jgit.internal.storage.file.BasePackBitmapIndex.StoredBitmap;
 import org.eclipse.jgit.lib.ObjectId;
@@ -44,6 +46,33 @@ public void testGetBitmapWithThreeXor() {
 		assertEquals(bitmapOf(50, 90), sb.getBitmap());
 	}
 
+	@Test
+	public void testGetSizeWithoutXor() {
+		EWAHCompressedBitmap base = bitmapOf(100);
+		StoredBitmap sb = newStoredBitmap(base);
+		assertEquals(base.sizeInBytes(), sb.getCurrentSizeInBytes());
+		sb.getBitmap();
+		assertEquals(base.sizeInBytes(), sb.getCurrentSizeInBytes());
+	}
+
+	@Test
+	public void testGetSizeWithOneXor() {
+		EWAHCompressedBitmap base = bitmapOf(100, 101);
+		EWAHCompressedBitmap xor = bitmapOf(100);
+		StoredBitmap sb = newStoredBitmap(base, xor);
+		assertEquals(xor.sizeInBytes(), sb.getCurrentSizeInBytes());
+	}
+
+	@Test
+	public void testIsBase() {
+		EWAHCompressedBitmap one = bitmapOf(100, 101);
+		EWAHCompressedBitmap two = bitmapOf(100);
+		StoredBitmap baseBitmap = newStoredBitmap(one);
+		StoredBitmap xoredBitmap = newStoredBitmap(one, two);
+		assertTrue(baseBitmap.isBase());
+		assertFalse(xoredBitmap.isBase());
+	}
+
 	private static final StoredBitmap newStoredBitmap(
 			EWAHCompressedBitmap... bitmaps) {
 		StoredBitmap sb = null;
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapWalkerTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapWalkerTest.java
new file mode 100644
index 0000000..a59a71d
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/BitmapWalkerTest.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2023, Google Inc.
+ *
+ * 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.revwalk;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.eclipse.jgit.internal.storage.file.FileRepository;
+import org.eclipse.jgit.internal.storage.file.GC;
+import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
+import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.AnyObjectId;
+import org.eclipse.jgit.lib.BitmapIndex;
+import org.eclipse.jgit.lib.BitmapIndex.Bitmap;
+import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
+import org.eclipse.jgit.lib.BitmapIndex.BitmapLookupListener;
+import org.eclipse.jgit.lib.NullProgressMonitor;
+import org.eclipse.jgit.lib.ObjectReader;
+import org.junit.Before;
+import org.junit.Test;
+
+public class BitmapWalkerTest extends LocalDiskRepositoryTestCase {
+
+	private static final String MAIN = "refs/heads/main";
+
+	TestRepository<FileRepository> repo;
+
+	RevCommit tipWithBitmap;
+
+	@Override
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		FileRepository db = createWorkRepository();
+		repo = new TestRepository<>(db);
+
+		RevCommit base = repo.commit().create();
+		RevCommit one = repo.commit().parent(base).create();
+		tipWithBitmap = repo.commit().parent(one).create();
+		repo.update(MAIN, tipWithBitmap);
+
+		GC gc = new GC(repo.getRepository());
+		gc.setAuto(false);
+		gc.gc().get();
+
+		assertNotNull(repo.getRevWalk().getObjectReader().getBitmapIndex());
+	}
+
+	private static class BitmapWalkCounter implements BitmapLookupListener {
+		int withBitmap;
+
+		int withoutBitmap;
+
+		@Override
+		public void onBitmapFound(AnyObjectId oid) {
+			withBitmap += 1;
+		}
+
+		@Override
+		public void onBitmapNotFound(AnyObjectId oid) {
+			withoutBitmap += 1;
+		}
+	}
+
+	@Test
+	public void counters_bitmapAtTip() throws Exception {
+		try (RevWalk rw = repo.getRevWalk();
+				ObjectReader or = rw.getObjectReader()) {
+			BitmapWalkCounter counter = new BitmapWalkCounter();
+			BitmapIndex bitmapIndex = or.getBitmapIndex();
+			bitmapIndex.addBitmapLookupListener(counter);
+			BitmapWalker bw = new BitmapWalker(rw.toObjectWalkWithSameObjects(),
+					bitmapIndex, NullProgressMonitor.INSTANCE);
+			BitmapBuilder bitmap = bw.findObjects(List.of(tipWithBitmap), null,
+					true);
+			// First commit has a tree, so in total 4 objects
+			assertEquals(4, bitmap.cardinality());
+			assertEquals(1, counter.withBitmap);
+			assertEquals(0, counter.withoutBitmap);
+			assertEquals(0, bw.getCountOfBitmapIndexMisses());
+		}
+	}
+
+	@Test
+	public void counters_bitmapAfterAStep() throws Exception {
+		System.out.println("Old tip: " + tipWithBitmap);
+		RevCommit newTip = repo.commit().parent(tipWithBitmap).create();
+		System.out.println("New tip: " + newTip);
+		try (RevWalk rw = repo.getRevWalk();
+				ObjectReader or = rw.getObjectReader()) {
+			BitmapWalkCounter counter = new BitmapWalkCounter();
+			BitmapIndex bitmapIndex = or.getBitmapIndex();
+			bitmapIndex.addBitmapLookupListener(counter);
+			BitmapWalker bw = new BitmapWalker(rw.toObjectWalkWithSameObjects(),
+					bitmapIndex, NullProgressMonitor.INSTANCE);
+
+			bw.findObjects(List.of(newTip), null, true);
+
+			assertEquals(1, counter.withBitmap);
+			// It checks bitmap before marking as interesting, and again in the
+			// walk
+			assertEquals(2, counter.withoutBitmap);
+			assertEquals(1, bw.getCountOfBitmapIndexMisses());
+		}
+	}
+
+	@Test
+	public void counters_bitmapAfterThreeSteps() throws Exception {
+		RevCommit newOne = repo.commit().parent(tipWithBitmap).create();
+		RevCommit newTwo = repo.commit().parent(newOne).create();
+		RevCommit newTip = repo.commit().parent(newTwo).create();
+
+		try (RevWalk rw = repo.getRevWalk();
+				ObjectReader or = rw.getObjectReader()) {
+			BitmapWalkCounter counter = new BitmapWalkCounter();
+			BitmapIndex bitmapIndex = or.getBitmapIndex();
+			bitmapIndex.addBitmapLookupListener(counter);
+			BitmapWalker bw = new BitmapWalker(rw.toObjectWalkWithSameObjects(),
+					bitmapIndex, NullProgressMonitor.INSTANCE);
+
+			bw.findObjects(List.of(newTip), null, true);
+
+			assertEquals(1, counter.withBitmap);
+			assertEquals(4, counter.withoutBitmap);
+			assertEquals(3, bw.getCountOfBitmapIndexMisses());
+		}
+	}
+
+	@Test
+	public void counters_bitmapAfterThreeStepsWithSeen() throws Exception {
+		RevCommit newOne = repo.commit().parent(tipWithBitmap).create();
+		RevCommit newTwo = repo.commit().parent(newOne).create();
+		RevCommit newTip = repo.commit().parent(newTwo).create();
+
+		try (RevWalk rw = repo.getRevWalk();
+				ObjectReader or = rw.getObjectReader()) {
+			BitmapIndex bitmapIndex = or.getBitmapIndex();
+			Bitmap seen = bitmapIndex.getBitmap(tipWithBitmap);
+			BitmapBuilder seenBB = bitmapIndex.newBitmapBuilder().or(seen);
+			BitmapWalkCounter counter = new BitmapWalkCounter();
+			bitmapIndex.addBitmapLookupListener(counter);
+			BitmapWalker bw = new BitmapWalker(rw.toObjectWalkWithSameObjects(),
+					bitmapIndex, NullProgressMonitor.INSTANCE);
+
+			bw.findObjects(List.of(newTip), seenBB, true);
+
+			assertEquals(0, counter.withBitmap);
+			assertEquals(4, counter.withoutBitmap);
+			assertEquals(3, bw.getCountOfBitmapIndexMisses());
+		}
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/FooterLineTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/FooterLineTest.java
index 303aedc..657c3d2 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/FooterLineTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/FooterLineTest.java
@@ -80,6 +80,33 @@ public void testNoFooters_ShortBodyWithLF() {
 	}
 
 	@Test
+	public void testNoFooters_noRawMsg_SingleLineNoHeaders() {
+		String noRawMsg = "commit message with no header lines\n";
+		List<FooterLine> footers = FooterLine.fromMessage(noRawMsg);
+		assertNotNull(footers);
+		assertEquals(0, footers.size());
+	}
+
+	@Test
+	public void testOneFooter_noRawMsg_MultiParagraphNoHeaders() {
+		String noRawMsg = "subject\n\n"
+			+ "Not: footer\n\n"
+			+ "Footer: value\n";
+		List<FooterLine> footers = FooterLine.fromMessage(noRawMsg);
+		assertNotNull(footers);
+		assertEquals(1, footers.size());
+	}
+
+	@Test
+	public void testOneFooter_longSubject_NoHeaders() {
+		String noRawMsg = "50+ chars loooooooooooooong custom commit message.\n\n"
+				+ "Footer: value\n";
+		List<FooterLine> footers = FooterLine.fromMessage(noRawMsg);
+		assertNotNull(footers);
+		assertEquals(1, footers.size());
+	}
+
+	@Test
 	public void testSignedOffBy_OneUserNoLF() {
 		String msg = buildMessage("subject\n\nbody of commit\n" + "\n"
 			+ "Signed-off-by: A. U. Thor <a@example.com>");
@@ -264,18 +291,26 @@ public void testSignedOffBy_SkipNonFooter() {
 		f = footers.get(0);
 		assertEquals("Signed-off-by", f.getKey());
 		assertEquals("A. U. Thor <a@example.com>", f.getValue());
+		assertEquals(217, f.getStartOffset());
+		assertEquals(258, f.getEndOffset());
 
 		f = footers.get(1);
 		assertEquals("CC", f.getKey());
 		assertEquals("<some.mailing.list@example.com>", f.getValue());
+		assertEquals(259, f.getStartOffset());
+		assertEquals(305, f.getEndOffset());
 
 		f = footers.get(2);
 		assertEquals("Acked-by", f.getKey());
 		assertEquals("Some Reviewer <sr@example.com>", f.getValue());
+		assertEquals(356, f.getStartOffset());
+		assertEquals(396, f.getEndOffset());
 
 		f = footers.get(3);
 		assertEquals("Signed-off-by", f.getKey());
 		assertEquals("Main Tain Er <mte@example.com>", f.getValue());
+		assertEquals(397, f.getStartOffset());
+		assertEquals(442, f.getEndOffset());
 	}
 
 	@Test
@@ -369,6 +404,26 @@ public void testMultilineFooters_multipleWhitespaceAreAllowed() {
 				f.getValue());
 	}
 
+	@Test
+	public void testFirstLineNeverFooter() {
+		String msg = buildMessage(
+				String.join("\n", "First-Line: is never a footer", "Foo: ter",
+						"1-is: also a footer"));
+		List<FooterLine> footers = FooterLine.fromMessage(msg);
+		assertNotNull(footers);
+		assertEquals(2, footers.size());
+	}
+
+	@Test
+	public void testLineAfterFooters() {
+		String msg = buildMessage(
+				String.join("\n", "Subject line: is never a footer", "Foo: ter",
+						"1-is: also a footer", "this is not a footer"));
+		List<FooterLine> footers = FooterLine.fromMessage(msg);
+		assertNotNull(footers);
+		assertEquals(2, footers.size());
+	}
+
 	private String buildMessage(String msg) {
 		StringBuilder buf = new StringBuilder();
 		buf.append("tree " + ObjectId.zeroId().name() + "\n");
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java
index 51236e1..3a7fa23 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FSTest.java
@@ -29,8 +29,12 @@
 import java.time.Duration;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
 import org.eclipse.jgit.errors.CommandFailedException;
@@ -196,6 +200,23 @@ public void testReadPipeCommandStartFailure()
 	}
 
 	@Test
+	@SuppressWarnings("boxing")
+	public void testConcurrentSymlinkSupport()
+			throws ExecutionException, InterruptedException {
+		Assume.assumeTrue(FS.DETECTED.supportsSymlinks());
+		int n = 3;
+		List<CompletableFuture<Boolean>> futures = new ArrayList<>();
+		for (int i = 0; i < n; i++) {
+			futures.add(CompletableFuture.supplyAsync(
+					() -> FS.DETECTED.newInstance().supportsSymlinks()));
+		}
+
+		for (int i = 0; i < n; i++) {
+			assertTrue(futures.get(i).get());
+		}
+	}
+
+	@Test
 	public void testFsTimestampResolution() throws Exception {
 		DateTimeFormatter formatter = DateTimeFormatter
 				.ofPattern("uuuu-MMM-dd HH:mm:ss.nnnnnnnnn", Locale.ENGLISH)
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtilsTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtilsTest.java
index e80c075..e4ef302 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtilsTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/RawParseUtilsTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011, Leonard Broman <leonard.broman@gmail.com> and others
+ * Copyright (C) 2011, 2024 Leonard Broman <leonard.broman@gmail.com> 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
@@ -15,6 +15,7 @@
 
 import java.nio.charset.Charset;
 import java.nio.charset.UnsupportedCharsetException;
+import java.util.List;
 
 import org.eclipse.jgit.lib.Constants;
 import org.junit.Test;
@@ -24,7 +25,7 @@
 public class RawParseUtilsTest {
 	String commit = "tree e3a1035abd2b319bb01e57d69b0ba6cab289297e\n" +
 		"parent 54e895b87c0768d2317a2b17062e3ad9f76a8105\n" +
-		"committer A U Thor <author@xample.com 1528968566 +0200\n" +
+			"committer A U Thor <author@example.com> 1528968566 +0200\n" +
 		"gpgsig -----BEGIN PGP SIGNATURE-----\n" +
 		" \n" +
 		" wsBcBAABCAAQBQJbGB4pCRBK7hj4Ov3rIwAAdHIIAENrvz23867ZgqrmyPemBEZP\n" +
@@ -67,21 +68,24 @@ public void testParseEncoding_badEncoding() {
 	public void testHeaderStart() {
 		byte[] headerName = "some".getBytes(UTF_8);
 		byte[] commitBytes = commit.getBytes(UTF_8);
-		assertEquals(625, RawParseUtils.headerStart(headerName, commitBytes, 0));
-		assertEquals(625, RawParseUtils.headerStart(headerName, commitBytes, 4));
+		assertEquals(627,
+				RawParseUtils.headerStart(headerName, commitBytes, 0));
+		assertEquals(627,
+				RawParseUtils.headerStart(headerName, commitBytes, 4));
 
 		byte[] missingHeaderName = "missing".getBytes(UTF_8);
 		assertEquals(-1, RawParseUtils.headerStart(missingHeaderName,
 							   commitBytes, 0));
 
 		byte[] fauxHeaderName = "other".getBytes(UTF_8);
-		assertEquals(-1, RawParseUtils.headerStart(fauxHeaderName, commitBytes, 625 + 4));
+		assertEquals(-1, RawParseUtils.headerStart(fauxHeaderName, commitBytes,
+				627 + 4));
 	}
 
 	@Test
 	public void testHeaderEnd() {
 		byte[] commitBytes = commit.getBytes(UTF_8);
-		int[] expected = new int[] {45, 93, 148, 619, 637};
+		int[] expected = new int[] { 45, 93, 150, 621, 639 };
 		int start = 0;
 		for (int i = 0; i < expected.length; i++) {
 			start = RawParseUtils.headerEnd(commitBytes, start);
@@ -89,4 +93,44 @@ public void testHeaderEnd() {
 			start += 1;
 		}
 	}
+
+	@Test
+	public void testHeaderValue() {
+		byte[] commitBytes = commit.getBytes(UTF_8);
+		List<String> headers = List.of(
+				"e3a1035abd2b319bb01e57d69b0ba6cab289297e",
+				"54e895b87c0768d2317a2b17062e3ad9f76a8105",
+				"A U Thor <author@example.com> 1528968566 +0200",
+				"-----BEGIN PGP SIGNATURE-----\n"
+						+ "\n"
+						+ "wsBcBAABCAAQBQJbGB4pCRBK7hj4Ov3rIwAAdHIIAENrvz23867ZgqrmyPemBEZP\n"
+						+ "U24B1Tlq/DWvce2buaxmbNQngKZ0pv2s8VMc11916WfTIC9EKvioatmpjduWvhqj\n"
+						+ "znQTFyiMor30pyYsfrqFuQZvqBW01o8GEWqLg8zjf9Rf0R3LlOEw86aT8CdHRlm6\n"
+						+ "wlb22xb8qoX4RB+LYfz7MhK5F+yLOPXZdJnAVbuyoMGRnDpwdzjL5Hj671+XJxN5\n"
+						+ "SasRdhxkkfw/ZnHxaKEc4juMz8Nziz27elRwhOQqlTYoXNJnsV//wy5Losd7aKi1\n"
+						+ "xXXyUpndEOmT0CIcKHrN/kbYoVL28OJaxoBuva3WYQaRrzEe3X02NMxZe9gkSqA=\n"
+						+ "=TClh\n"
+						+ "-----END PGP SIGNATURE-----",
+				"other header");
+		int start = 0;
+		for (String header : headers) {
+			int endOfTag = RawParseUtils.next(commitBytes, start, ' ');
+			int end = RawParseUtils.headerEnd(commitBytes, start);
+
+			assertEquals(header, new String(
+					RawParseUtils.headerValue(commitBytes, endOfTag, end),
+					UTF_8));
+			start = end + 1;
+		}
+	}
+
+	@Test
+	public void testLastHeaderEnd() {
+		byte[] raw = "headerA A header\nheaderB Another header".getBytes(UTF_8);
+		int bStart = RawParseUtils.headerStart("headerB".getBytes(UTF_8), raw,
+				0);
+		assertEquals(25, bStart);
+		int bEnd = RawParseUtils.nextLfSkippingSplitLines(raw, bStart);
+		assertEquals(raw.length, bEnd);
+	}
 }
diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
index f9b6a84..00e7f53 100644
--- a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
@@ -4,14 +4,14 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ui
 Bundle-SymbolicName: org.eclipse.jgit.ui
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-11
-Export-Package: org.eclipse.jgit.awtui;version="6.8.1"
-Import-Package: org.eclipse.jgit.errors;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.lib;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.nls;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revplot;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.revwalk;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.transport;version="[6.8.1,6.9.0)",
- org.eclipse.jgit.util;version="[6.8.1,6.9.0)"
+Export-Package: org.eclipse.jgit.awtui;version="6.9.1"
+Import-Package: org.eclipse.jgit.errors;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.lib;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.nls;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revplot;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.revwalk;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.transport;version="[6.9.1,6.10.0)",
+ org.eclipse.jgit.util;version="[6.9.1,6.10.0)"
diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
index a4e59a2..8462fb0 100644
--- a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit.ui - Sources
 Bundle-SymbolicName: org.eclipse.jgit.ui.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ui;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml
index b051ad5..9f7cfad 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ui</artifactId>
diff --git a/org.eclipse.jgit/.settings/.api_filters b/org.eclipse.jgit/.settings/.api_filters
index 506a89a..dda62f2 100644
--- a/org.eclipse.jgit/.settings/.api_filters
+++ b/org.eclipse.jgit/.settings/.api_filters
@@ -1,32 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <component id="org.eclipse.jgit" version="2">
-    <resource path="src/org/eclipse/jgit/api/GarbageCollectCommand.java" type="org.eclipse.jgit.api.GarbageCollectCommand">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="setPackKeptObjects(boolean)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/lib/BitmapIndex.java" type="org.eclipse.jgit.lib.BitmapIndex">
+    <resource path="src/org/eclipse/jgit/lib/GpgSignatureVerifier.java" type="org.eclipse.jgit.lib.GpgSignatureVerifier">
         <filter id="404000815">
             <message_arguments>
-                <message_argument value="org.eclipse.jgit.lib.BitmapIndex"/>
-                <message_argument value="addBitmapLookupListener(BitmapIndex.BitmapLookupListener)"/>
-            </message_arguments>
-        </filter>
-    </resource>
-    <resource path="src/org/eclipse/jgit/lib/ConfigConstants.java" type="org.eclipse.jgit.lib.ConfigConstants">
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="CONFIG_KEY_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="CONFIG_REPACK_SECTION"/>
+                <message_argument value="org.eclipse.jgit.lib.GpgSignatureVerifier"/>
+                <message_argument value="verify(GpgConfig, byte[], byte[])"/>
             </message_arguments>
         </filter>
     </resource>
@@ -34,25 +12,7 @@
         <filter id="336658481">
             <message_arguments>
                 <message_argument value="org.eclipse.jgit.storage.pack.PackConfig"/>
-                <message_argument value="DEFAULT_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="DEFAULT_PACK_KEPT_OBJECTS"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="isPackKeptObjects()"/>
-            </message_arguments>
-        </filter>
-        <filter id="1142947843">
-            <message_arguments>
-                <message_argument value="5.13.3"/>
-                <message_argument value="setPackKeptObjects(boolean)"/>
+                <message_argument value="DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT"/>
             </message_arguments>
         </filter>
     </resource>
diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF
index b0215f5..b2b01fd 100644
--- a/org.eclipse.jgit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/MANIFEST.MF
@@ -3,12 +3,12 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit
 Bundle-SymbolicName: org.eclipse.jgit
-Bundle-Version: 6.8.1.qualifier
+Bundle-Version: 6.9.1.qualifier
 Bundle-Localization: OSGI-INF/l10n/plugin
 Bundle-Vendor: %Bundle-Vendor
 Eclipse-ExtensibleAPI: true
-Export-Package: org.eclipse.jgit.annotations;version="6.8.1",
- org.eclipse.jgit.api;version="6.8.1";
+Export-Package: org.eclipse.jgit.annotations;version="6.9.1",
+ org.eclipse.jgit.api;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.notes,
    org.eclipse.jgit.dircache,
@@ -23,18 +23,18 @@
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.blame,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.api.errors;version="6.8.1";
+ org.eclipse.jgit.api.errors;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.attributes;version="6.8.1";
+ org.eclipse.jgit.attributes;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.blame;version="6.8.1";
+ org.eclipse.jgit.blame;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.diff;version="6.8.1";
+ org.eclipse.jgit.diff;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.revwalk,
@@ -42,53 +42,53 @@
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.dircache;version="6.8.1";
+ org.eclipse.jgit.dircache;version="6.9.1";
   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="6.8.1";
+ org.eclipse.jgit.errors;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.internal.storage.pack",
- org.eclipse.jgit.events;version="6.8.1";
+ org.eclipse.jgit.events;version="6.9.1";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.fnmatch;version="6.8.1",
- org.eclipse.jgit.gitrepo;version="6.8.1";
+ org.eclipse.jgit.fnmatch;version="6.9.1",
+ org.eclipse.jgit.gitrepo;version="6.9.1";
   uses:="org.xml.sax.helpers,
    org.eclipse.jgit.api,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.xml.sax",
- org.eclipse.jgit.gitrepo.internal;version="6.8.1";x-internal:=true,
- org.eclipse.jgit.hooks;version="6.8.1";uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.ignore;version="6.8.1",
- org.eclipse.jgit.ignore.internal;version="6.8.1";
+ org.eclipse.jgit.gitrepo.internal;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.hooks;version="6.9.1";uses:="org.eclipse.jgit.lib",
+ org.eclipse.jgit.ignore;version="6.9.1",
+ org.eclipse.jgit.ignore.internal;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal;version="6.8.1";
+ org.eclipse.jgit.internal;version="6.9.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.test",
- org.eclipse.jgit.internal.diff;version="6.8.1";
+ org.eclipse.jgit.internal.diff;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.diffmergetool;version="6.8.1";
+ org.eclipse.jgit.internal.diffmergetool;version="6.9.1";
   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="6.8.1";
+ org.eclipse.jgit.internal.fsck;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.revwalk;version="6.8.1";
+ org.eclipse.jgit.internal.revwalk;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.commitgraph;version="6.8.1";
+ org.eclipse.jgit.internal.storage.commitgraph;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.dfs;version="6.8.1";
+ org.eclipse.jgit.internal.storage.dfs;version="6.9.1";
   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="6.8.1";
+ org.eclipse.jgit.internal.storage.file;version="6.9.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.junit.http,
@@ -97,36 +97,36 @@
    org.eclipse.jgit.pgm,
    org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.ssh.apache",
- org.eclipse.jgit.internal.storage.io;version="6.8.1";
+ org.eclipse.jgit.internal.storage.io;version="6.9.1";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.memory;version="6.8.1";
+ org.eclipse.jgit.internal.storage.memory;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.pack;version="6.8.1";
+ org.eclipse.jgit.internal.storage.pack;version="6.9.1";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.reftable;version="6.8.1";
+ org.eclipse.jgit.internal.storage.reftable;version="6.9.1";
   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="6.8.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.connectivity;version="6.8.1";
+ org.eclipse.jgit.internal.submodule;version="6.9.1";x-internal:=true,
+ org.eclipse.jgit.internal.transport.connectivity;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.http;version="6.8.1";
+ org.eclipse.jgit.internal.transport.http;version="6.9.1";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.parser;version="6.8.1";
+ org.eclipse.jgit.internal.transport.parser;version="6.9.1";
   x-friends:="org.eclipse.jgit.http.server,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.ssh;version="6.8.1";
+ org.eclipse.jgit.internal.transport.ssh;version="6.9.1";
   x-friends:="org.eclipse.jgit.ssh.apache,
    org.eclipse.jgit.ssh.jsch,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.util;version="6.8.1";
+ org.eclipse.jgit.internal.util;version="6.9.1";
   x-friends:=" org.eclipse.jgit.junit",
- org.eclipse.jgit.lib;version="6.8.1";
+ org.eclipse.jgit.lib;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.sha1,
    org.eclipse.jgit.dircache,
@@ -140,12 +140,12 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.submodule,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.lib.internal;version="6.8.1";
+ org.eclipse.jgit.lib.internal;version="6.9.1";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.pgm,
    org.eclipse.egit.ui",
- org.eclipse.jgit.logging;version="6.8.1",
- org.eclipse.jgit.merge;version="6.8.1";
+ org.eclipse.jgit.logging;version="6.9.1",
+ org.eclipse.jgit.merge;version="6.9.1";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -154,40 +154,40 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.api,
    org.eclipse.jgit.attributes",
- org.eclipse.jgit.nls;version="6.8.1",
- org.eclipse.jgit.notes;version="6.8.1";
+ org.eclipse.jgit.nls;version="6.9.1",
+ org.eclipse.jgit.notes;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.patch;version="6.8.1";
+ org.eclipse.jgit.patch;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.revplot;version="6.8.1";
+ org.eclipse.jgit.revplot;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk",
- org.eclipse.jgit.revwalk;version="6.8.1";
+ org.eclipse.jgit.revwalk;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.revwalk.filter,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.revwalk.filter;version="6.8.1";
+ org.eclipse.jgit.revwalk.filter;version="6.9.1";
   uses:="org.eclipse.jgit.revwalk,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.file;version="6.8.1";
+ org.eclipse.jgit.storage.file;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.pack;version="6.8.1";
+ org.eclipse.jgit.storage.pack;version="6.9.1";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.submodule;version="6.8.1";
+ org.eclipse.jgit.submodule;version="6.9.1";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.transport;version="6.8.1";
+ org.eclipse.jgit.transport;version="6.9.1";
   uses:="javax.crypto,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.lib,
@@ -200,21 +200,21 @@
    org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.storage.pack,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.transport.http;version="6.8.1";
+ org.eclipse.jgit.transport.http;version="6.9.1";
   uses:="javax.net.ssl",
- org.eclipse.jgit.transport.resolver;version="6.8.1";
+ org.eclipse.jgit.transport.resolver;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.treewalk;version="6.8.1";
+ org.eclipse.jgit.treewalk;version="6.9.1";
   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="6.8.1";
+ org.eclipse.jgit.treewalk.filter;version="6.9.1";
   uses:="org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util;version="6.8.1";
+ org.eclipse.jgit.util;version="6.9.1";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.hooks,
    org.eclipse.jgit.revwalk,
@@ -227,18 +227,18 @@
    org.eclipse.jgit.treewalk,
    javax.net.ssl,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.util.io;version="6.8.1";
+ org.eclipse.jgit.util.io;version="6.9.1";
   uses:="org.eclipse.jgit.attributes,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util.sha1;version="6.8.1",
- org.eclipse.jgit.util.time;version="6.8.1"
+ org.eclipse.jgit.util.sha1;version="6.9.1",
+ org.eclipse.jgit.util.time;version="6.9.1"
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)",
  javax.crypto,
  javax.management,
  javax.net.ssl,
  org.apache.commons.codec.digest;version="1.15.0",
- org.slf4j;version="[1.7.0,2.0.0)",
+ org.slf4j;version="[1.7.0,3.0.0)",
  org.xml.sax,
  org.xml.sax.helpers
diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
index 4db2870..70e1e49 100644
--- a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
+++ b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
@@ -3,5 +3,5 @@
 Bundle-Name: org.eclipse.jgit - Sources
 Bundle-SymbolicName: org.eclipse.jgit.source
 Bundle-Vendor: Eclipse.org - JGit
-Bundle-Version: 6.8.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit;version="6.8.1.qualifier";roots="."
+Bundle-Version: 6.9.1.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit;version="6.9.1.qualifier";roots="."
diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml
index 8e18b4c..49a6092 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>6.8.1-SNAPSHOT</version>
+    <version>6.9.1-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 19c9008..bbfd0b0 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -716,7 +716,6 @@
 shortReadOfOptionalDIRCExtensionExpectedAnotherBytes=Short read of optional DIRC extension {0}; expected another {1} bytes within the section.
 shortSkipOfBlock=Short skip of block.
 shutdownCleanup=Cleanup {} during JVM shutdown
-shutdownCleanupFailed=Cleanup during JVM shutdown failed
 shutdownCleanupListenerFailed=Cleanup of {0} during JVM shutdown failed
 signatureVerificationError=Signature verification failed
 signatureVerificationUnavailable=No signature verifier registered
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java
index 38e795b..a1c6478 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommand.java
@@ -9,6 +9,7 @@
  */
 package org.eclipse.jgit.api;
 
+import static org.eclipse.jgit.api.CherryPickCommitMessageProvider.ORIGINAL;
 import static org.eclipse.jgit.lib.Constants.OBJECT_ID_ABBREV_STRING_LENGTH;
 
 import java.io.IOException;
@@ -66,6 +67,8 @@ public class CherryPickCommand extends GitCommand<CherryPickResult> {
 
 	private String ourCommitName = null;
 
+	private CherryPickCommitMessageProvider messageProvider = ORIGINAL;
+
 	private MergeStrategy strategy = MergeStrategy.RECURSIVE;
 
 	private ContentMergeStrategy contentStrategy;
@@ -168,8 +171,10 @@ public CherryPickResult call() throws GitAPIException, NoMessageException,
 					dco.checkout();
 					if (!noCommit) {
 						try (Git git = new Git(getRepository())) {
+							String commitMessage = messageProvider
+									.getCherryPickedCommitMessage(srcCommit);
 							newHead = git.commit()
-									.setMessage(srcCommit.getFullMessage())
+									.setMessage(commitMessage)
 									.setReflogComment(reflogPrefix + " " //$NON-NLS-1$
 											+ srcCommit.getShortMessage())
 									.setAuthor(srcCommit.getAuthorIdent())
@@ -297,6 +302,22 @@ public CherryPickCommand setOurCommitName(String ourCommitName) {
 	}
 
 	/**
+	 * Set a message provider for a target cherry-picked commit<br>
+	 * By default original commit message is used (see
+	 * {@link CherryPickCommitMessageProvider#ORIGINAL})
+	 *
+	 * @param messageProvider
+	 *            the commit message provider
+	 * @return {@code this}
+	 * @since 6.9
+	 */
+	public CherryPickCommand setCherryPickCommitMessageProvider(
+			CherryPickCommitMessageProvider messageProvider) {
+		this.messageProvider = messageProvider;
+		return this;
+	}
+
+	/**
 	 * Set the prefix to use in the reflog.
 	 * <p>
 	 * This is primarily needed for implementing rebase in terms of
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommitMessageProvider.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommitMessageProvider.java
new file mode 100644
index 0000000..50d65b6
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CherryPickCommitMessageProvider.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2023 Dmitrii Naumenko <dmitrii.naumenko@jetbrains.com>
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is aailable at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.api;
+
+import java.util.List;
+
+import org.eclipse.jgit.revwalk.FooterLine;
+import org.eclipse.jgit.revwalk.RevCommit;
+
+/**
+ * The interface is used to construct a cherry-picked commit message based on
+ * the original commit
+ *
+ * @see #ORIGINAL
+ * @see #ORIGINAL_WITH_REFERENCE
+ * @since 6.9
+ */
+public interface CherryPickCommitMessageProvider {
+
+	/**
+	 * This provider returns the original commit message
+	 */
+	static final CherryPickCommitMessageProvider ORIGINAL = RevCommit::getFullMessage;
+
+	/**
+	 * This provider returns the original commit message with original commit
+	 * hash in SHA-1 form.<br>
+	 * Example:
+	 *
+	 * <pre>
+	 * <code>my original commit message
+	 *
+	 * (cherry picked from commit 75355897dc28e9975afed028c1a6d8c6b97b2a3c)</code>
+	 * </pre>
+	 *
+	 * This is similar to <code>-x</code> flag in git-scm (see <a href=
+	 * "https://git-scm.com/docs/git-cherry-pick#_options">https://git-scm.com/docs/git-cherry-pick#_options</a>)
+	 */
+	static final CherryPickCommitMessageProvider ORIGINAL_WITH_REFERENCE = srcCommit -> {
+		String fullMessage = srcCommit.getFullMessage();
+
+		// Don't add extra new line after footer (aka trailer)
+		// https://stackoverflow.com/questions/70007405/git-log-exclude-cherry-pick-messages-for-trailers
+		// https://lore.kernel.org/git/7vmx136cdc.fsf@alter.siamese.dyndns.org
+		String separator = messageEndsWithFooter(srcCommit) ? "\n" : "\n\n"; //$NON-NLS-1$//$NON-NLS-2$
+		String revisionString = srcCommit.getName();
+		return String.format("%s%s(cherry picked from commit %s)", //$NON-NLS-1$
+				fullMessage, separator, revisionString);
+	};
+
+	/**
+	 * @param srcCommit
+	 *            original cherry-picked commit
+	 * @return target cherry-picked commit message
+	 */
+	String getCherryPickedCommitMessage(RevCommit srcCommit);
+
+	private static boolean messageEndsWithFooter(RevCommit srcCommit) {
+		byte[] rawBuffer = srcCommit.getRawBuffer();
+		List<FooterLine> footers = srcCommit.getFooterLines();
+		int maxFooterEnd = footers.stream().mapToInt(FooterLine::getEndOffset)
+				.max().orElse(-1);
+		return rawBuffer.length == maxFooterEnd;
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
index 0f7b8af..757aff8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
@@ -1064,12 +1064,16 @@ private RebaseResult stop(RevCommit commitToPick, RebaseResult.Status status)
 		String authorScript = toAuthorScript(author);
 		rebaseState.createFile(AUTHOR_SCRIPT, authorScript);
 		rebaseState.createFile(MESSAGE, commitToPick.getFullMessage());
-		ByteArrayOutputStream bos = new ByteArrayOutputStream();
-		try (DiffFormatter df = new DiffFormatter(bos)) {
-			df.setRepository(repo);
-			df.format(commitToPick.getParent(0), commitToPick);
+		if (commitToPick.getParentCount() > 0) {
+			ByteArrayOutputStream bos = new ByteArrayOutputStream();
+			try (DiffFormatter df = new DiffFormatter(bos)) {
+				df.setRepository(repo);
+				df.format(commitToPick.getParent(0), commitToPick);
+			}
+			rebaseState.createFile(PATCH, new String(bos.toByteArray(), UTF_8));
+		} else {
+			rebaseState.createFile(PATCH, ""); //$NON-NLS-1$
 		}
-		rebaseState.createFile(PATCH, new String(bos.toByteArray(), UTF_8));
 		rebaseState.createFile(STOPPED_SHA,
 				repo.newObjectReader()
 				.abbreviate(
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 700b54a..ef464e3 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -745,7 +745,6 @@ public static JGitText get() {
 	/***/ public String shortReadOfOptionalDIRCExtensionExpectedAnotherBytes;
 	/***/ public String shortSkipOfBlock;
 	/***/ public String shutdownCleanup;
-	/***/ public String shutdownCleanupFailed;
 	/***/ public String shutdownCleanupListenerFailed;
 	/***/ public String signatureVerificationError;
 	/***/ public String signatureVerificationUnavailable;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/ChangedPathFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/ChangedPathFilter.java
index 53d921e..ad3ce50 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/ChangedPathFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/commitgraph/ChangedPathFilter.java
@@ -87,6 +87,7 @@ private ChangedPathFilter(byte[] data, int offset, int length) {
 	 *            the paths that the filter must match
 	 * @return the corresponding filter
 	 */
+	@SuppressWarnings("ByteBufferBackingArray")
 	public static ChangedPathFilter fromPaths(Set<ByteBuffer> paths) {
 		if (paths.isEmpty()) {
 			return EMPTY;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java
index 2f8d964..a07d841 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsInserter.java
@@ -83,6 +83,8 @@ public class DfsInserter extends ObjectInserter {
 	private boolean rollback;
 	private boolean checkExisting = true;
 
+	private int minBytesForObjectSizeIndex = -1;
+
 	/**
 	 * Initialize a new inserter.
 	 *
@@ -91,6 +93,8 @@ public class DfsInserter extends ObjectInserter {
 	 */
 	protected DfsInserter(DfsObjDatabase db) {
 		this.db = db;
+		PackConfig pc = new PackConfig(db.getRepository().getConfig());
+		this.minBytesForObjectSizeIndex = pc.getMinBytesForObjSizeIndex();
 	}
 
 	/**
@@ -109,6 +113,20 @@ void setCompressionLevel(int compression) {
 		this.compression = compression;
 	}
 
+	/**
+	 * Set minimum size for an object to be included in the object size index.
+	 *
+	 * <p>
+	 * Use 0 for all and -1 for nothing (the pack won't have object size index).
+	 *
+	 * @param minBytes
+	 *            only objects with size bigger or equal to this are included in
+	 *            the index.
+	 */
+	protected void setMinBytesForObjectSizeIndex(int minBytes) {
+		this.minBytesForObjectSizeIndex = minBytes;
+	}
+
 	@Override
 	public DfsPackParser newPackParser(InputStream in) throws IOException {
 		return new DfsPackParser(db, this, in);
@@ -195,15 +213,11 @@ public void flush() throws IOException {
 		sortObjectsById();
 
 		PackIndex index = writePackIndex(packDsc, packHash, objectList);
-		PackConfig pConfig = new PackConfig(db.getRepository().getConfig());
-		if (pConfig.isWriteObjSizeIndex()) {
-			writeObjectSizeIndex(packDsc, objectList,
-					pConfig.getMinBytesForObjSizeIndex());
-		}
+		writeObjectSizeIndex(packDsc, objectList);
 		db.commitPack(Collections.singletonList(packDsc), null);
 		rollback = false;
 
-		DfsPackFile p = new DfsPackFile(cache, packDsc);
+		DfsPackFile p = db.createDfsPackFile(cache, packDsc);
 		if (index != null)
 			p.setPackIndex(index);
 		db.addPack(p);
@@ -323,10 +337,14 @@ private static void index(OutputStream out, byte[] packHash,
 	}
 
 	void writeObjectSizeIndex(DfsPackDescription pack,
-			List<PackedObjectInfo> packedObjs, int minSize) throws IOException {
+			List<PackedObjectInfo> packedObjs) throws IOException {
+		if (minBytesForObjectSizeIndex < 0) {
+			return;
+		}
 		try (DfsOutputStream os = db.writeFile(pack, PackExt.OBJECT_SIZE_INDEX);
 				CountingOutputStream cnt = new CountingOutputStream(os)) {
-			PackObjectSizeIndexWriter.createWriter(os, minSize)
+			PackObjectSizeIndexWriter
+					.createWriter(os, minBytesForObjectSizeIndex)
 					.write(packedObjs);
 			pack.addFileExt(OBJECT_SIZE_INDEX);
 			pack.setBlockSize(OBJECT_SIZE_INDEX, os.blockSize());
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 2375698..9f6eb10 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
@@ -592,7 +592,7 @@ private PackList scanPacksImpl(PackList old) throws IOException {
 			if (oldPack != null) {
 				newPacks.add(oldPack);
 			} else if (dsc.hasFileExt(PackExt.PACK)) {
-				newPacks.add(new DfsPackFile(cache, dsc));
+				newPacks.add(createDfsPackFile(cache, dsc));
 				foundNew = true;
 			}
 
@@ -617,6 +617,23 @@ private PackList scanPacksImpl(PackList old) throws IOException {
 				newReftables.toArray(new DfsReftable[0]));
 	}
 
+	/**
+	 * Create instances of DfsPackFile
+	 *
+	 * Implementors can decide to construct or wrap DfsPackFile in different
+	 * ways.
+	 *
+	 * @param cache
+	 *            block cache
+	 * @param dsc
+	 *            pack description
+	 * @return the dfs packfile
+	 */
+	protected DfsPackFile createDfsPackFile(DfsBlockCache cache,
+			DfsPackDescription dsc) {
+		return new DfsPackFile(cache, dsc);
+	}
+
 	private static Map<DfsPackDescription, DfsPackFile> packMap(PackList old) {
 		Map<DfsPackDescription, DfsPackFile> forReuse = new HashMap<>();
 		for (DfsPackFile p : old.packs) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
index e0f0e13..42b1d23 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackFile.java
@@ -65,8 +65,11 @@
  */
 public final class DfsPackFile extends BlockBasedFile {
 	private static final int REC_SIZE = Constants.OBJECT_ID_LENGTH + 8;
+
 	private static final long REF_POSITION = 0;
 
+	private static final PackBitmapIndexLoader DEFAULT_BITMAP_LOADER = new StreamPackBitmapIndexLoader();
+
 	/** Index mapping {@link ObjectId} to position within the pack stream. */
 	private volatile PackIndex index;
 
@@ -79,6 +82,8 @@ public final class DfsPackFile extends BlockBasedFile {
 	/** Index of compressed commit graph mapping entire object graph. */
 	private volatile CommitGraph commitGraph;
 
+	private final PackBitmapIndexLoader bitmapLoader;
+
 	/** Index by size */
 	private boolean objectSizeIndexLoadAttempted;
 
@@ -105,6 +110,10 @@ public final class DfsPackFile extends BlockBasedFile {
 	 *            description of the pack within the DFS.
 	 */
 	DfsPackFile(DfsBlockCache cache, DfsPackDescription desc) {
+		this(cache, desc, DEFAULT_BITMAP_LOADER);
+	}
+
+	DfsPackFile(DfsBlockCache cache, DfsPackDescription desc, PackBitmapIndexLoader bitmapLoader) {
 		super(cache, desc, PACK);
 
 		int bs = desc.getBlockSize(PACK);
@@ -114,6 +123,8 @@ public final class DfsPackFile extends BlockBasedFile {
 
 		long sz = desc.getFileSize(PACK);
 		length = sz > 0 ? sz : -1;
+
+		this.bitmapLoader = bitmapLoader;
 	}
 
 	/**
@@ -206,7 +217,7 @@ final boolean isGarbage() {
 	 *             the bitmap index is not available, or is corrupt.
 	 */
 	public PackBitmapIndex getBitmapIndex(DfsReader ctx) throws IOException {
-		if (invalid || isGarbage() || !desc.hasFileExt(BITMAP_INDEX)) {
+		if (invalid || isGarbage() || !bitmapLoader.hasBitmaps(desc)) {
 			return null;
 		}
 
@@ -214,6 +225,15 @@ public PackBitmapIndex getBitmapIndex(DfsReader ctx) throws IOException {
 			return bitmapIndex;
 		}
 
+		if (!bitmapLoader.keepInDfs(desc)) {
+			PackBitmapIndexLoader.LoadResult result = bitmapLoader
+					.loadPackBitmapIndex(ctx, this);
+			if (bitmapIndex == null && result.bitmapIndex != null) {
+				bitmapIndex = result.bitmapIndex;
+			}
+			return bitmapIndex;
+		}
+
 		DfsStreamKey bitmapKey = desc.getStreamKey(BITMAP_INDEX);
 		AtomicBoolean cacheHit = new AtomicBoolean(true);
 		DfsBlockCache.Ref<PackBitmapIndex> idxref = cache
@@ -1252,31 +1272,11 @@ private DfsBlockCache.Ref<PackObjectSizeIndex> loadObjectSizeIndex(
 	private DfsBlockCache.Ref<PackBitmapIndex> loadBitmapIndex(DfsReader ctx,
 			DfsStreamKey bitmapKey) throws IOException {
 		ctx.stats.readBitmap++;
-		long start = System.nanoTime();
-		try (ReadableChannel rc = ctx.db.openFile(desc, BITMAP_INDEX)) {
-			long size;
-			PackBitmapIndex bmidx;
-			try {
-				bmidx = PackBitmapIndex.read(alignTo8kBlocks(rc),
-						() -> idx(ctx), () -> getReverseIdx(ctx),
-						ctx.getOptions().shouldLoadRevIndexInParallel());
-			} finally {
-				size = rc.position();
-				ctx.stats.readBitmapIdxBytes += size;
-				ctx.stats.readBitmapIdxMicros += elapsedMicros(start);
-			}
-			bitmapIndex = bmidx;
-			return new DfsBlockCache.Ref<>(
-					bitmapKey, REF_POSITION, size, bmidx);
-		} catch (EOFException e) {
-			throw new IOException(MessageFormat.format(
-					DfsText.get().shortReadOfIndex,
-					desc.getFileName(BITMAP_INDEX)), e);
-		} catch (IOException e) {
-			throw new IOException(MessageFormat.format(
-					DfsText.get().cannotReadIndex,
-					desc.getFileName(BITMAP_INDEX)), e);
-		}
+		PackBitmapIndexLoader.LoadResult result = bitmapLoader
+				.loadPackBitmapIndex(ctx, this);
+		bitmapIndex = result.bitmapIndex;
+		return new DfsBlockCache.Ref<>(bitmapKey, REF_POSITION,
+				result.bytesRead, result.bitmapIndex);
 	}
 
 	private DfsBlockCache.Ref<CommitGraph> loadCommitGraph(DfsReader ctx,
@@ -1317,4 +1317,105 @@ private static InputStream alignTo8kBlocks(ReadableChannel rc) {
 		}
 		return new BufferedInputStream(in, bs);
 	}
+
+	/**
+	 * Loads the PackBitmapIndex associated with this packfile
+	 */
+	public interface PackBitmapIndexLoader {
+		/**
+		 * Does this pack has bitmaps associated?
+		 *
+		 * @param desc
+		 *            the pack
+		 * @return true if the pack has bitmaps
+		 */
+		boolean hasBitmaps(DfsPackDescription desc);
+
+		/**
+		 * If the returned instance must be kept in DFS cache
+		 *
+		 * It should be true when the instance is expensive to load and can be
+		 * reused.
+		 *
+		 * @param desc
+		 *            the pack
+		 * @return true if the returned bitmap index should be kept in DFS
+		 */
+		boolean keepInDfs(DfsPackDescription desc);
+
+		/**
+		 * Returns a PackBitmapIndex for this pack, if the pack has bitmaps
+		 * associated.
+		 *
+		 * @param ctx
+		 *            the reader
+		 * @param pack
+		 *            the pack
+		 * @return the pack bitmap index and bytes size (when applicable)
+		 * @throws IOException
+		 *             error accessing storage
+		 */
+		LoadResult loadPackBitmapIndex(DfsReader ctx, DfsPackFile pack)
+				throws IOException;
+
+		/**
+		 * The instance of the pack bitmap index and the amount of bytes loaded.
+		 *
+		 * The bytes can be 0, if the implementation doesn't do any initial
+		 * loading.
+		 */
+		class LoadResult {
+			final PackBitmapIndex bitmapIndex;
+
+			final long bytesRead;
+
+			LoadResult(PackBitmapIndex packBitmapIndex, long bytesRead) {
+				this.bitmapIndex = packBitmapIndex;
+				this.bytesRead = bytesRead;
+			}
+		}
+	}
+
+	/**
+	 * Load the packbitmapindex from the BITMAP_INDEX pack extension
+	 */
+	private static final class StreamPackBitmapIndexLoader implements PackBitmapIndexLoader {
+		@Override
+		public boolean hasBitmaps(DfsPackDescription desc) {
+			return desc.hasFileExt(BITMAP_INDEX);
+		}
+
+		@Override
+		public boolean keepInDfs(DfsPackDescription desc) {
+			return true;
+		}
+
+		@Override
+		public LoadResult loadPackBitmapIndex(DfsReader ctx, DfsPackFile pack)
+				throws IOException {
+			DfsPackDescription desc = pack.getPackDescription();
+			try (ReadableChannel rc = ctx.db.openFile(desc, BITMAP_INDEX)) {
+				long size;
+				PackBitmapIndex bmidx;
+				try {
+					bmidx = PackBitmapIndex.read(alignTo8kBlocks(rc),
+							() -> pack.idx(ctx), () -> pack.getReverseIdx(ctx),
+							ctx.getOptions().shouldLoadRevIndexInParallel());
+				} finally {
+					size = rc.position();
+				}
+				return new LoadResult(bmidx, size);
+			} catch (EOFException e) {
+				throw new IOException(
+						MessageFormat.format(DfsText.get().shortReadOfIndex,
+								desc.getFileName(BITMAP_INDEX)),
+						e);
+			} catch (IOException e) {
+				throw new IOException(
+						MessageFormat.format(DfsText.get().cannotReadIndex,
+								desc.getFileName(BITMAP_INDEX)),
+						e);
+			}
+		}
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackParser.java
index 8c7b0ec..b19f65c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackParser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackParser.java
@@ -26,7 +26,6 @@
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ProgressMonitor;
-import org.eclipse.jgit.storage.pack.PackConfig;
 import org.eclipse.jgit.transport.PackLock;
 import org.eclipse.jgit.transport.PackParser;
 import org.eclipse.jgit.transport.PackedObjectInfo;
@@ -123,15 +122,11 @@ public PackLock parse(ProgressMonitor receiving, ProgressMonitor resolving)
 			packDsc.setBlockSize(PACK, blockSize);
 
 			writePackIndex();
-			PackConfig pConfig = new PackConfig(objdb.getRepository().getConfig());
-			if (pConfig.isWriteObjSizeIndex()) {
-				objins.writeObjectSizeIndex(packDsc, getSortedObjectList(null),
-						pConfig.getMinBytesForObjSizeIndex());
-			}
+			objins.writeObjectSizeIndex(packDsc, getSortedObjectList(null));
 			objdb.commitPack(Collections.singletonList(packDsc), null);
 			rollback = false;
 
-			DfsPackFile p = new DfsPackFile(blockCache, packDsc);
+			DfsPackFile p = objdb.createDfsPackFile(blockCache, packDsc);
 			p.setBlockSize(blockSize);
 			if (packIndex != null)
 				p.setPackIndex(packIndex);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java
index 3f0adcb..a342796 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReader.java
@@ -28,6 +28,7 @@
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
 
+import org.eclipse.jgit.annotations.NonNull;
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.errors.StoredObjectRepresentationNotAvailableException;
@@ -120,11 +121,23 @@ public BitmapIndex getBitmapIndex() throws IOException {
 		for (DfsPackFile pack : db.getPacks()) {
 			PackBitmapIndex bitmapIndex = pack.getBitmapIndex(this);
 			if (bitmapIndex != null)
-				return new BitmapIndexImpl(bitmapIndex);
+				return createBitmapIndex(bitmapIndex);
 		}
 		return null;
 	}
 
+	/**
+	 * Give subclasses a chance to record pack index stats
+	 *
+	 * @param packBitmapIndex
+	 *            packBitmapIndex found in a pack (never null)
+	 * @return an instance of BitmapIndex
+	 */
+	protected BitmapIndex createBitmapIndex(
+			@NonNull PackBitmapIndex packBitmapIndex) {
+		return new BitmapIndexImpl(packBitmapIndex);
+	}
+
 	@Override
 	public Optional<CommitGraph> getCommitGraph() throws IOException {
 		for (DfsPackFile pack : db.getPacks()) {
@@ -490,30 +503,28 @@ public void release() {
 	public long getObjectSize(AnyObjectId objectId, int typeHint)
 			throws MissingObjectException, IncorrectObjectTypeException,
 			IOException {
-		if (last != null && !skipGarbagePack(last)) {
-			long sz = last.getObjectSize(this, objectId);
-			if (0 <= sz) {
-				return sz;
+		DfsPackFile pack = findPackWithObject(objectId);
+		if (pack == null) {
+			if (typeHint == OBJ_ANY) {
+				throw new MissingObjectException(objectId.copy(),
+						JGitText.get().unknownObjectType2);
 			}
+			throw new MissingObjectException(objectId.copy(), typeHint);
 		}
 
-		PackList packList = db.getPackList();
-		long sz = getObjectSizeImpl(packList, objectId);
-		if (0 <= sz) {
+		if (typeHint != Constants.OBJ_BLOB || !pack.hasObjectSizeIndex(this)) {
+			return pack.getObjectSize(this, objectId);
+		}
+
+		long sz = pack.getIndexedObjectSize(this, objectId);
+		if (sz >= 0) {
+			stats.objectSizeIndexHit += 1;
 			return sz;
 		}
-		if (packList.dirty()) {
-			sz = getObjectSizeImpl(packList, objectId);
-			if (0 <= sz) {
-				return sz;
-			}
-		}
 
-		if (typeHint == OBJ_ANY) {
-			throw new MissingObjectException(objectId.copy(),
-					JGitText.get().unknownObjectType2);
-		}
-		throw new MissingObjectException(objectId.copy(), typeHint);
+		// Object wasn't in the index
+		stats.objectSizeIndexMiss += 1;
+		return pack.getObjectSize(this, objectId);
 	}
 
 
@@ -569,21 +580,6 @@ private DfsPackFile findPackWithObject(AnyObjectId objectId)
 		return null;
 	}
 
-	private long getObjectSizeImpl(PackList packList, AnyObjectId objectId)
-			throws IOException {
-		for (DfsPackFile pack : packList.packs) {
-			if (pack == last || skipGarbagePack(pack)) {
-				continue;
-			}
-			long sz = pack.getObjectSize(this, objectId);
-			if (0 <= sz) {
-				last = pack;
-				return sz;
-			}
-		}
-		return -1;
-	}
-
 	@Override
 	public DfsObjectToPack newObjectToPack(AnyObjectId objectId, int type) {
 		return new DfsObjectToPack(objectId, type);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java
index 906fade..c2b3926 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/BasePackBitmapIndex.java
@@ -35,6 +35,50 @@ ObjectIdOwnerMap<StoredBitmap> getBitmaps() {
 		return bitmaps;
 	}
 
+	@Override
+	public int getBaseBitmapCount() {
+		int bases = 0;
+		for (StoredBitmap sb : getBitmaps()) {
+			if (sb.isBase()) {
+				bases += 1;
+			}
+		}
+		return bases;
+	}
+
+	@Override
+	public long getBaseBitmapSizeInBytes() {
+		long baseSize = 0;
+		for (StoredBitmap sb : getBitmaps()) {
+			if (sb.isBase()) {
+				baseSize += sb.getCurrentSizeInBytes();
+			}
+		}
+		return baseSize;
+	}
+
+	@Override
+	public int getXorBitmapCount() {
+		int xored = 0;
+		for (StoredBitmap sb : getBitmaps()) {
+			if (!sb.isBase()) {
+				xored += 1;
+			}
+		}
+		return xored;
+	}
+
+	@Override
+	public long getXorBitmapSizeInBytes() {
+		long xorSize = 0;
+		for (StoredBitmap sb : getBitmaps()) {
+			if (!sb.isBase()) {
+				xorSize += sb.getCurrentSizeInBytes();
+			}
+		}
+		return xorSize;
+	}
+
 	/**
 	 * Data representation of the bitmap entry restored from a pack index. The
 	 * commit of the bitmap is the map key.
@@ -74,8 +118,9 @@ EWAHCompressedBitmap getBitmap() {
 		EWAHCompressedBitmap getBitmapWithoutCaching() {
 			// Fast path to immediately return the expanded result.
 			Object r = bitmapContainer;
-			if (r instanceof EWAHCompressedBitmap)
+			if (r instanceof EWAHCompressedBitmap) {
 				return (EWAHCompressedBitmap) r;
+			}
 
 			// Expand the bitmap but not cache the result.
 			XorCompressedBitmap xb = (XorCompressedBitmap) r;
@@ -100,10 +145,38 @@ EWAHCompressedBitmap getBitmapWithoutCaching() {
 		int getFlags() {
 			return flags;
 		}
+
+		/**
+		 * This bitmap is (currently) a base or a XOR mask
+		 *
+		 * @return true if this bitmap is a base (a ready map).
+		 */
+		boolean isBase() {
+			return bitmapContainer instanceof EWAHCompressedBitmap;
+		}
+
+		/**
+		 * Size in bytes of this bitmap in its current representation
+		 *
+		 * If this is a XOR'ed bitmap, size is different before/after
+		 * {@link #getBitmap()}. Before is the byte size of the xor mask,
+		 * afterwards is the size of the "ready" bitmap
+		 *
+		 * @return size in bytes of the bitmap in its current representation
+		 */
+		long getCurrentSizeInBytes() {
+			Object r = bitmapContainer;
+			if (r instanceof EWAHCompressedBitmap) {
+				return ((EWAHCompressedBitmap) r).sizeInBytes();
+			}
+			XorCompressedBitmap xor = ((XorCompressedBitmap) r);
+			return xor.bitmap.sizeInBytes();
+		}
 	}
 
 	private static final class XorCompressedBitmap {
 		final EWAHCompressedBitmap bitmap;
+
 		final StoredBitmap xorBitmap;
 
 		XorCompressedBitmap(EWAHCompressedBitmap b, StoredBitmap xb) {
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 5409c4f..fc058ab 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
@@ -1934,7 +1934,7 @@ public void close() {
 					token.close();
 				}
 				if (wasLocked) {
-					FileUtils.delete(pidFile.toFile(), FileUtils.RETRY);
+					FileUtils.delete(pidFile.toFile(), FileUtils.RETRY | FileUtils.SKIP_MISSING);
 				}
 			} catch (IOException e) {
 				LOG.error(MessageFormat
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LooseObjects.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LooseObjects.java
index 278c846..b4bb2a9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LooseObjects.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/LooseObjects.java
@@ -167,6 +167,9 @@ ObjectLoader open(WindowCursor curs, AnyObjectId id) throws IOException {
 		while (readAttempts < MAX_LOOSE_OBJECT_STALE_READ_ATTEMPTS) {
 			readAttempts++;
 			File path = fileFor(id);
+			if (trustFolderStat && !path.exists()) {
+				break;
+			}
 			try {
 				return getObjectLoader(curs, path, id);
 			} catch (FileNotFoundException noFile) {
@@ -279,7 +282,7 @@ InsertLooseObjectResult insert(File tmp, ObjectId id) throws IOException {
 			// that already exists. We can't be sure renameTo() would
 			// fail on all platforms if dst exists, so we check first.
 			//
-			FileUtils.delete(tmp, FileUtils.RETRY);
+			FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			return InsertLooseObjectResult.EXISTS_LOOSE;
 		}
 
@@ -297,7 +300,7 @@ InsertLooseObjectResult insert(File tmp, ObjectId id) throws IOException {
 			// Any other IO error is considered a failure.
 			//
 			LOG.error(e.getMessage(), e);
-			FileUtils.delete(tmp, FileUtils.RETRY);
+			FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			return InsertLooseObjectResult.FAILURE;
 		}
 
@@ -309,7 +312,7 @@ InsertLooseObjectResult insert(File tmp, ObjectId id) throws IOException {
 			// know what went wrong, so fail.
 			//
 			LOG.error(e.getMessage(), e);
-			FileUtils.delete(tmp, FileUtils.RETRY);
+			FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			return InsertLooseObjectResult.FAILURE;
 		}
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
index 579f931..9f21481 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java
@@ -548,11 +548,11 @@ InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id,
 		// If the object is already in the repository, remove temporary file.
 		//
 		if (loose.hasCached(id)) {
-			FileUtils.delete(tmp, FileUtils.RETRY);
+			FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			return InsertLooseObjectResult.EXISTS_LOOSE;
 		}
 		if (!createDuplicate && has(id)) {
-			FileUtils.delete(tmp, FileUtils.RETRY);
+			FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			return InsertLooseObjectResult.EXISTS_PACKED;
 		}
 		return loose.insert(tmp, id);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryInserter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryInserter.java
index 2f30a97..24fead8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryInserter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectoryInserter.java
@@ -204,7 +204,7 @@ private File toTemp(final SHA1 md, final int type, long len,
 			return tmp;
 		} finally {
 			if (delete) {
-				FileUtils.delete(tmp, FileUtils.RETRY);
+				FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			}
 		}
 	}
@@ -232,7 +232,7 @@ private File toTemp(final int type, final byte[] buf, final int pos,
 			return tmp;
 		} finally {
 			if (delete) {
-				FileUtils.delete(tmp, FileUtils.RETRY);
+				FileUtils.delete(tmp, FileUtils.RETRY | FileUtils.SKIP_MISSING);
 			}
 		}
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java
index 333967c..212dbb2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/Pack.java
@@ -63,8 +63,8 @@
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectLoader;
-import org.eclipse.jgit.util.Hex;
 import org.eclipse.jgit.util.FileUtils;
+import org.eclipse.jgit.util.Hex;
 import org.eclipse.jgit.util.LongList;
 import org.eclipse.jgit.util.NB;
 import org.eclipse.jgit.util.RawParseUtils;
@@ -1162,16 +1162,12 @@ synchronized PackBitmapIndex getBitmapIndex() throws IOException {
 			// Once upon a time the bitmap or index files existed. Now one
 			// of them has been removed. Most likely an external gc has
 			// removed index, packfile or the bitmap
-			bitmapIdxFile = null;
-			return null;
 		} catch (IOException e) {
 			if (!FileUtils.isStaleFileHandleInCausalChain(e)) {
 				throw e;
 			}
 			// Ignore NFS stale handle exception the same way as
 			// FileNotFoundException above.
-			bitmapIdxFile = null;
-			return null;
 		}
 		bitmapIdxFile = null;
 		return null;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndex.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndex.java
index 2334bd4..def4f3d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndex.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndex.java
@@ -196,6 +196,41 @@ public abstract EWAHCompressedBitmap ofObjectType(
 	public abstract int getBitmapCount();
 
 	/**
+	 * Returns the number of bitmaps in this bitmap index ready to use, not
+	 * XOR'ed against other entries.
+	 *
+	 * @return the number of bitmaps in this bitmap index ready to use.
+	 */
+	public abstract int getBaseBitmapCount();
+
+	/**
+	 * Current size in bytes of all base bitmaps in the index.
+	 *
+	 * Resolving xors for bitmaps can affect this size.
+	 *
+	 * @return Current size (in bytes) of all base bitmaps in this index.
+	 */
+	public abstract long getBaseBitmapSizeInBytes();
+
+	/**
+	 * Returns the number of bitmaps in this bitmap index XOR'ed against other
+	 * entries.
+	 *
+	 * @return the number of bitmaps in this bitmap index represented as XOR
+	 *         masks.
+	 */
+	public abstract int getXorBitmapCount();
+
+	/**
+	 * Current size in bytes of all XOR'ed bitmaps in the index.
+	 *
+	 * Resolving xors for bitmaps can affect this size.
+	 *
+	 * @return Current size (in bytes) of all xor bitmaps in this index.
+	 */
+	public abstract long getXorBitmapSizeInBytes();
+
+	/**
 	 * Supplier that propagates IOException.
 	 *
 	 * @param <T>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
index 91c3683..bb7cfd0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackBitmapIndexRemapper.java
@@ -95,6 +95,26 @@ public int getObjectCount() {
 	}
 
 	@Override
+	public int getBaseBitmapCount() {
+		return newPackIndex.getBaseBitmapCount();
+	}
+
+	@Override
+	public long getBaseBitmapSizeInBytes() {
+		return newPackIndex.getBaseBitmapSizeInBytes();
+	}
+
+	@Override
+	public int getXorBitmapCount() {
+		return newPackIndex.getXorBitmapCount();
+	}
+
+	@Override
+	public long getXorBitmapSizeInBytes() {
+		return newPackIndex.getXorBitmapSizeInBytes();
+	}
+
+	@Override
 	public EWAHCompressedBitmap ofObjectType(
 			EWAHCompressedBitmap bitmap, int type) {
 		return newPackIndex.ofObjectType(bitmap, type);
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 e270297..169dce1 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
@@ -37,6 +37,7 @@
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.security.DigestInputStream;
 import java.security.MessageDigest;
 import java.text.MessageFormat;
@@ -64,6 +65,7 @@
 import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.CoreConfig.TrustPackedRefsStat;
+import org.eclipse.jgit.lib.CoreConfig.TrustLooseRefStat;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectIdRef;
 import org.eclipse.jgit.lib.Ref;
@@ -181,6 +183,8 @@ public class RefDirectory extends RefDatabase {
 
 	private final TrustPackedRefsStat trustPackedRefsStat;
 
+	private final TrustLooseRefStat trustLooseRefStat;
+
 	RefDirectory(RefDirectory refDb) {
 		parent = refDb.parent;
 		gitDir = refDb.gitDir;
@@ -192,6 +196,7 @@ public class RefDirectory extends RefDatabase {
 		packedRefs.set(refDb.packedRefs.get());
 		trustFolderStat = refDb.trustFolderStat;
 		trustPackedRefsStat = refDb.trustPackedRefsStat;
+		trustLooseRefStat = refDb.trustLooseRefStat;
 		inProcessPackedRefsLock = refDb.inProcessPackedRefsLock;
 	}
 
@@ -213,6 +218,10 @@ public class RefDirectory extends RefDatabase {
 				.getEnum(ConfigConstants.CONFIG_CORE_SECTION, null,
 						ConfigConstants.CONFIG_KEY_TRUST_PACKED_REFS_STAT,
 						TrustPackedRefsStat.UNSET);
+		trustLooseRefStat = db.getConfig()
+				.getEnum(ConfigConstants.CONFIG_CORE_SECTION, null,
+						ConfigConstants.CONFIG_KEY_TRUST_LOOSE_REF_STAT,
+						TrustLooseRefStat.ALWAYS);
 		inProcessPackedRefsLock = new ReentrantLock(true);
 	}
 
@@ -1136,6 +1145,11 @@ private Ref readRef(String name, RefList<Ref> packed) throws IOException {
 
 	LooseRef scanRef(LooseRef ref, String name) throws IOException {
 		final File path = fileFor(name);
+
+		if (trustLooseRefStat.equals(TrustLooseRefStat.AFTER_OPEN)) {
+			refreshPathToLooseRef(Paths.get(name));
+		}
+
 		FileSnapshot currentSnapshot = null;
 
 		if (ref != null) {
@@ -1221,6 +1235,29 @@ class LooseItems {
 		return new LooseUnpeeled(loose.snapshot, name, id);
 	}
 
+	/**
+	 * Workaround for issues caused by NFS caching. Refresh directories starting
+	 * from the repository root to a loose ref by opening an input stream. This
+	 * refreshes file attributes of the loose ref (at least on some NFS
+	 * clients).
+	 *
+	 * @param refPath
+	 *            path of a loose ref relative to the repository root
+	 */
+	void refreshPathToLooseRef(Path refPath) {
+		for (int i = 1; i < refPath.getNameCount(); i++) {
+			File dir = fileFor(refPath.subpath(0, i).toString());
+			// Use Files.newInputStream(Path) as it is consistent with other
+			// code where a refresh is being done (see getPackedRefs()) and also
+			// it performs slightly better than Files.newDirectoryStream(Path)
+			try (InputStream stream = Files.newInputStream(dir.toPath())) {
+				// open the dir to refresh attributes (on some NFS clients)
+			} catch (IOException e) {
+				break; // loose ref may not exist
+			}
+		}
+	}
+
 	private static boolean isSymRef(byte[] buf, int n) {
 		if (n < 6)
 			return false;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
index 6e02b36..9e95231 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java
@@ -2029,8 +2029,8 @@ private void findObjectsToPack(@NonNull ProgressMonitor countingMonitor,
 		if (!shallowPack && useBitmaps) {
 			BitmapIndex bitmapIndex = reader.getBitmapIndex();
 			if (bitmapIndex != null) {
-				BitmapWalker bitmapWalker = new BitmapWalker(
-						walker, bitmapIndex, countingMonitor);
+				BitmapWalker bitmapWalker = new BitmapWalker(walker,
+						bitmapIndex, countingMonitor);
 				findObjectsToPackUsingBitmaps(bitmapWalker, want, have);
 				endPhase(countingMonitor);
 				stats.timeCounting = System.currentTimeMillis() - countingStart;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java
index 8b5cea7..dabc1f0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java
@@ -28,16 +28,16 @@
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.internal.revwalk.AddUnseenToBitmapFilter;
 import org.eclipse.jgit.internal.storage.file.BitmapIndexImpl;
-import org.eclipse.jgit.internal.storage.file.BitmapIndexImpl.CompressedBitmap;
 import org.eclipse.jgit.internal.storage.file.PackBitmapIndex;
 import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder;
 import org.eclipse.jgit.internal.storage.file.PackBitmapIndexRemapper;
+import org.eclipse.jgit.internal.storage.file.BitmapIndexImpl.CompressedBitmap;
 import org.eclipse.jgit.lib.AnyObjectId;
-import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.lib.ProgressMonitor;
+import org.eclipse.jgit.lib.BitmapIndex.BitmapBuilder;
 import org.eclipse.jgit.revwalk.BitmapWalker;
 import org.eclipse.jgit.revwalk.ObjectWalk;
 import org.eclipse.jgit.revwalk.RevCommit;
@@ -77,6 +77,7 @@ class PackWriterBitmapPreparer {
 	private final int recentCommitSpan;
 	private final int distantCommitSpan;
 	private final int excessiveBranchCount;
+	private final int excessiveBranchTipCount;
 	private final long inactiveBranchTimestamp;
 
 	PackWriterBitmapPreparer(ObjectReader reader,
@@ -96,6 +97,8 @@ class PackWriterBitmapPreparer {
 		this.recentCommitSpan = config.getBitmapRecentCommitSpan();
 		this.distantCommitSpan = config.getBitmapDistantCommitSpan();
 		this.excessiveBranchCount = config.getBitmapExcessiveBranchCount();
+		this.excessiveBranchTipCount = Math.max(excessiveBranchCount,
+				config.getBitmapExcessiveBranchTipCount());
 		long now = SystemReader.getInstance().getCurrentTime();
 		long ageInSeconds = (long) config.getBitmapInactiveBranchAgeInDays()
 				* DAY_IN_SECONDS;
@@ -163,11 +166,17 @@ Collection<BitmapCommit> selectCommits(int expectedCommitCount,
 			rw2.setRetainBody(false);
 			rw2.setRevFilter(new NotInBitmapFilter(seen));
 
+			int newWantsCount = selectionHelper.newWantsByNewest.size();
+			int maxBranches = Math.min(excessiveBranchTipCount, newWantsCount);
+			Set<RevCommit> excessiveBranches = new HashSet<>(
+					selectionHelper.newWantsByNewest.subList(maxBranches,
+							newWantsCount));
 			// For each branch, do a revwalk to enumerate its commits. Exclude
 			// both reused commits and any commits seen in a previous branch.
 			// Then iterate through all new commits from oldest to newest,
 			// selecting well-spaced commits in this branch.
-			for (RevCommit rc : selectionHelper.newWantsByNewest) {
+			for (RevCommit rc : selectionHelper.newWantsByNewest.subList(0,
+					maxBranches)) {
 				BitmapBuilder tipBitmap = commitBitmapIndex.newBitmapBuilder();
 				rw2.markStart((RevCommit) rw2.peel(rw2.parseAny(rc)));
 				RevCommit rc2;
@@ -223,7 +232,7 @@ Collection<BitmapCommit> selectCommits(int expectedCommitCount,
 					pm.update(1);
 
 					// Always pick the items in wants, prefer merge commits.
-					if (selectionHelper.newWants.remove(c)) {
+					if (!excessiveBranches.contains(c) && selectionHelper.newWants.remove(c)) {
 						if (nextIn > 0) {
 							nextFlg = 0;
 						}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/util/ShutdownHook.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/util/ShutdownHook.java
index d6c5a81..f52025f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/util/ShutdownHook.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/util/ShutdownHook.java
@@ -82,7 +82,9 @@ private void cleanup() {
 			}).get(30L, TimeUnit.SECONDS);
 		} catch (RejectedExecutionException | InterruptedException
 				| ExecutionException | TimeoutException e) {
-			LOG.error(JGitText.get().shutdownCleanupFailed, e);
+			// message isn't localized since during shutdown there's no
+			// guarantee which classes are still loaded
+			LOG.error("Cleanup during JVM shutdown failed", e); //$NON-NLS-1$
 		}
 		runner.shutdownNow();
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/AbstractGpgSignatureVerifier.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/AbstractGpgSignatureVerifier.java
new file mode 100644
index 0000000..06a89dc
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/AbstractGpgSignatureVerifier.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2024, Thomas Wolf <twolf@apache.org> and others
+*
+* This program and the accompanying materials are made available under the
+* terms of the Eclipse Distribution License v. 1.0 which is available at
+* https://www.eclipse.org/org/documents/edl-v10.php.
+*
+* SPDX-License-Identifier: BSD-3-Clause
+*/
+package org.eclipse.jgit.lib;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevObject;
+import org.eclipse.jgit.revwalk.RevTag;
+import org.eclipse.jgit.util.RawParseUtils;
+
+/**
+ * Provides a base implementation of
+ * {@link GpgSignatureVerifier#verifySignature(RevObject, GpgConfig)}.
+ *
+ * @since 6.9
+ */
+public abstract class AbstractGpgSignatureVerifier
+		implements GpgSignatureVerifier {
+
+	@Override
+	public SignatureVerification verifySignature(RevObject object,
+			GpgConfig config) throws IOException {
+		if (object instanceof RevCommit) {
+			RevCommit commit = (RevCommit) object;
+			byte[] signatureData = commit.getRawGpgSignature();
+			if (signatureData == null) {
+				return null;
+			}
+			byte[] raw = commit.getRawBuffer();
+			// Now remove the GPG signature
+			byte[] header = { 'g', 'p', 'g', 's', 'i', 'g' };
+			int start = RawParseUtils.headerStart(header, raw, 0);
+			if (start < 0) {
+				return null;
+			}
+			int end = RawParseUtils.nextLfSkippingSplitLines(raw, start);
+			// start is at the beginning of the header's content
+			start -= header.length + 1;
+			// end is on the terminating LF; we need to skip that, too
+			if (end < raw.length) {
+				end++;
+			}
+			byte[] data = new byte[raw.length - (end - start)];
+			System.arraycopy(raw, 0, data, 0, start);
+			System.arraycopy(raw, end, data, start, raw.length - end);
+			return verify(config, data, signatureData);
+		} else if (object instanceof RevTag) {
+			RevTag tag = (RevTag) object;
+			byte[] signatureData = tag.getRawGpgSignature();
+			if (signatureData == null) {
+				return null;
+			}
+			byte[] raw = tag.getRawBuffer();
+			// The signature is just tacked onto the end of the message, which
+			// is last in the buffer.
+			byte[] data = Arrays.copyOfRange(raw, 0,
+					raw.length - signatureData.length);
+			return verify(config, data, signatureData);
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
index c7b4e45..0edf3c5 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
@@ -751,6 +751,13 @@ public final class ConfigConstants {
 	public static final String CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_COUNT = "bitmapexcessivebranchcount";
 
 	/**
+	 * The "pack.bitmapExcessiveBranchTipCount" key
+	 *
+	 * @since 6.9
+	 */
+	public static final String CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT = "bitmapexcessivebranchtipcount";
+
+	/**
 	 * The "pack.bitmapExcludedRefsPrefixes" key
 	 * @since 5.13.2
 	 */
@@ -965,6 +972,13 @@ public final class ConfigConstants {
 	public static final String CONFIG_KEY_TRUST_PACKED_REFS_STAT = "trustPackedRefsStat";
 
 	/**
+	 * The "trustLooseRefStat" key
+	 *
+	 * @since 6.9
+	 */
+	public static final String CONFIG_KEY_TRUST_LOOSE_REF_STAT = "trustLooseRefStat";
+
+	/**
 	 * The "pack.preserveOldPacks" key
 	 *
 	 * @since 5.13.2
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
index 4de1801..9fa5d75 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CoreConfig.java
@@ -144,6 +144,21 @@ public enum TrustPackedRefsStat {
 		UNSET
 	}
 
+	/**
+	 * Permissible values for {@code core.trustLooseRefStat}.
+	 *
+	 * @since 6.9
+	 */
+	public enum TrustLooseRefStat {
+
+		/** Trust file attributes of the loose ref. */
+		ALWAYS,
+
+		/** Open and close parent directories of the loose ref file until the
+		 * repository root to refresh its file attributes and then trust it. */
+		AFTER_OPEN,
+	}
+
 	private final int compression;
 
 	private final int packIndexVersion;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifier.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifier.java
index a7a39c9..91c9bab 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifier.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GpgSignatureVerifier.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2021, Thomas Wolf <thomas.wolf@paranor.ch> and others
+ * Copyright (C) 2021, 2024 Thomas Wolf <twolf@apache.org> and others
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0 which is available at
@@ -18,7 +18,8 @@
 import org.eclipse.jgit.revwalk.RevObject;
 
 /**
- * A {@code GpgVerifier} can verify GPG signatures on git commits and tags.
+ * A {@code GpgSignatureVerifier} can verify GPG signatures on git commits and
+ * tags.
  *
  * @since 5.11
  */
@@ -42,6 +43,28 @@ public interface GpgSignatureVerifier {
 	SignatureVerification verifySignature(@NonNull RevObject object,
 			@NonNull GpgConfig config) throws IOException;
 
+	/**
+	 * Verifies a given signature for given data.
+	 *
+	 * @param config
+	 *            the {@link GpgConfig}
+	 * @param data
+	 *            the signature is for
+	 * @param signatureData
+	 *            the ASCII-armored signature
+	 * @return a {@link SignatureVerification} describing the outcome
+	 * @throws IOException
+	 *             if the signature cannot be parsed
+	 * @throws JGitInternalException
+	 *             if signature verification fails
+	 * @since 6.9
+	 */
+	default SignatureVerification verify(@NonNull GpgConfig config, byte[] data,
+			byte[] signatureData) throws IOException {
+		// Default implementation for backwards compatibility; override as
+		// appropriate
+		return verify(data, signatureData);
+	}
 
 	/**
 	 * Verifies a given signature for given data.
@@ -55,7 +78,10 @@ SignatureVerification verifySignature(@NonNull RevObject object,
 	 *             if the signature cannot be parsed
 	 * @throws JGitInternalException
 	 *             if signature verification fails
+	 * @deprecated since 6.9, use {@link #verify(GpgConfig, byte[], byte[])}
+	 *             instead
 	 */
+	@Deprecated
 	public SignatureVerification verify(byte[] data, byte[] signatureData)
 			throws IOException;
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/FooterLine.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/FooterLine.java
index f58eb82..fa7fb31 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/FooterLine.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/FooterLine.java
@@ -81,14 +81,25 @@ public static List<FooterLine> fromMessage(
 			// empty
 		}
 
-		int msgB = RawParseUtils.commitMessage(raw, 0);
+		// The first non-header line is never a footer.
+		int msgB = RawParseUtils.nextLfSkippingSplitLines(raw,
+				RawParseUtils.hasAnyKnownHeaders(raw)
+						? RawParseUtils.commitMessage(raw, 0)
+						: 0);
 		ArrayList<FooterLine> r = new ArrayList<>(4);
 		Charset enc = RawParseUtils.guessEncoding(raw);
 
 		// Search for the beginning of last paragraph
 		int parStart = parEnd;
-		for (; parStart > msgB && (raw[parStart - 1] != '\n' || raw[parStart - 2] != '\n'); --parStart) {
-			// empty
+		for (; parStart > msgB; --parStart) {
+			if (parStart < 2) {
+				// Too close to beginning: this is not a raw message
+				parStart = 0;
+				break;
+			}
+			if (raw[parStart - 1] == '\n' && raw[parStart - 2] == '\n') {
+				break;
+			}
 		}
 
 		for (int ptr = parStart; ptr < parEnd;) {
@@ -101,7 +112,8 @@ public static List<FooterLine> fromMessage(
 			}
 
 			// Skip over the ': *' at the end of the key before the value.
-			int valStart, valEnd;
+			int valStart;
+			int valEnd;
 			for (valStart = keyEnd + 1; valStart < raw.length
 					&& raw[valStart] == ' '; ++valStart) {
 				// empty
@@ -115,6 +127,10 @@ public static List<FooterLine> fromMessage(
 					break;
 				}
 			}
+			if (keyStart == msgB) {
+				// Fist line cannot be a footer
+				continue;
+			}
 			r.add(new FooterLine(raw, enc, keyStart, keyEnd, valStart, valEnd));
 		}
 
@@ -235,6 +251,28 @@ public String getEmailAddress() {
 		return RawParseUtils.decode(enc, buffer, lt, gt - 1);
 	}
 
+	/**
+	 * @return start offset of the footer relative to the original raw message
+	 *         byte buffer
+	 *
+	 * @see #fromMessage(byte[])
+	 * @since 6.9
+	 */
+	public int getStartOffset() {
+		return keyStart;
+	}
+
+	/**
+	 * @return end offset of the footer relative to the original raw message
+	 *         byte buffer
+	 *
+	 * @see #fromMessage(byte[])
+	 * @since 6.9
+	 */
+	public int getEndOffset() {
+		return valEnd;
+	}
+
 	@Override
 	public String toString() {
 		return getKey() + ": " + getValue(); //$NON-NLS-1$
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
index 1f0f131..743a8cc 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
@@ -17,7 +17,6 @@
 import java.nio.charset.Charset;
 import java.nio.charset.IllegalCharsetNameException;
 import java.nio.charset.UnsupportedCharsetException;
-import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.jgit.annotations.Nullable;
@@ -409,7 +408,7 @@ public RevCommit getParent(int nth) {
 			return null;
 		}
 		final int end = RawParseUtils.headerEnd(raw, start);
-		return Arrays.copyOfRange(raw, start, end);
+		return RawParseUtils.headerValue(raw, start, end);
 	}
 
 	/**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java
index 414af30..6854b60 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/StartGenerator.java
@@ -94,7 +94,7 @@ RevCommit next() throws MissingObjectException,
 		final DateRevQueue pending;
 		int pendingOutputType = 0;
 		if (q instanceof DateRevQueue) {
-			pending = (DateRevQueue) q;
+			pending = (DateRevQueue)q;
 		} else {
 			pending = RevWalk.newDateRevQueue(q);
 		}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackConfig.java
index d524524..8373d68 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/pack/PackConfig.java
@@ -16,6 +16,7 @@
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_CONTIGUOUS_COMMIT_COUNT;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_DISTANT_COMMIT_SPAN;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_COUNT;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_EXCLUDED_REFS_PREFIXES;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_INACTIVE_BRANCH_AGE_INDAYS;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BITMAP_RECENT_COMMIT_COUNT;
@@ -240,6 +241,17 @@ public class PackConfig {
 	public static final int DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT = 100;
 
 	/**
+	 * Default maxium count of branches to create tip bitmaps for. If the number
+	 * of branches exceeds this, then tip bitmaps will only be created for the
+	 * most recently active branches. Branches exceeding this count will receive
+	 * 0 bitmaps: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT}
+	 *
+	 * @see #setBitmapExcessiveBranchTipCount(int)
+	 * @since 6.9
+	 */
+	public static final int DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT = Integer.MAX_VALUE;
+
+	/**
 	 * Default age at which a branch is considered inactive. Age is taken as the
 	 * number of days ago that the most recent commit was made to a branch. Only
 	 * affects bitmap processing if bitmaps are enabled and the
@@ -330,6 +342,8 @@ public class PackConfig {
 
 	private int bitmapExcessiveBranchCount = DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT;
 
+	private int bitmapExcessiveBranchTipCount = DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT;
+
 	private int bitmapInactiveBranchAgeInDays = DEFAULT_BITMAP_INACTIVE_BRANCH_AGE_IN_DAYS;
 
 	private String[] bitmapExcludedRefsPrefixes = DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES;
@@ -1190,7 +1204,8 @@ public void setBitmapDistantCommitSpan(int span) {
 	 * a repository exceeds this number and bitmaps are enabled, "inactive"
 	 * branches will have fewer bitmaps than "active" branches.
 	 *
-	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT}
+	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT}. See
+	 * also {@link #getBitmapExcessiveBranchTipCount}.
 	 *
 	 * @return the count of branches deemed "excessive"
 	 * @since 4.2
@@ -1204,7 +1219,8 @@ public int getBitmapExcessiveBranchCount() {
 	 * a repository exceeds this number and bitmaps are enabled, "inactive"
 	 * branches will have fewer bitmaps than "active" branches.
 	 *
-	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT}
+	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT}. See
+	 * also {@link #setBitmapExcessiveBranchTipCount(int)}.
 	 *
 	 * @param count
 	 *            the count of branches deemed "excessive"
@@ -1215,6 +1231,57 @@ public void setBitmapExcessiveBranchCount(int count) {
 	}
 
 	/**
+	 * Get the count of branches deemed "excessive". If the count of branches in
+	 * a repository exceeds this number and bitmaps are enabled, branches
+	 * exceeding this count will have no bitmaps selected. Branches are indexed
+	 * most recent first.
+	 *
+	 * <li>The first {@code DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT} most active
+	 * branches have full bitmap coverage.
+	 * <li>The {@code DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT} to {@code
+	 * 	  DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT} most active branches have
+	 * only the tip commit covered.
+	 * <li>The remaining branches have no bitmap coverage.
+	 *
+	 * If {@link #getBitmapExcessiveBranchCount()} is greater, then that value
+	 * will override this value.
+	 *
+	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT}
+	 *
+	 * @return the count of branch tips deemed "excessive"
+	 * @since 6.9
+	 */
+	public int getBitmapExcessiveBranchTipCount() {
+		return bitmapExcessiveBranchTipCount;
+	}
+
+	/**
+	 * Get the count of branches deemed "excessive". If the count of branches in
+	 * a repository exceeds this number and bitmaps are enabled, branches
+	 * exceeding this count will have no bitmaps selected. Branches are indexed
+	 * most recent first.
+	 *
+	 * <li>The first {@code DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT} most active
+	 * branches have full bitmap coverage.
+	 * <li>The {@code DEFAULT_BITMAP_EXCESSIVE_BRANCH_COUNT} to {@code
+	 * 	  DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT} most active branches have
+	 * only the tip commit covered.
+	 * <li>The remaining branches have no bitmap coverage.
+	 *
+	 * If {@link #getBitmapExcessiveBranchCount()} is greater, then that value
+	 * will override this value.
+	 *
+	 * Default setting: {@value #DEFAULT_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT}
+	 *
+	 * @param count
+	 *            the count of branch tips deemed "excessive"
+	 * @since 6.9
+	 */
+	public void setBitmapExcessiveBranchTipCount(int count) {
+		bitmapExcessiveBranchTipCount = count;
+	}
+
+	/**
 	 * Get the age in days that marks a branch as "inactive".
 	 *
 	 * Default setting: {@value #DEFAULT_BITMAP_INACTIVE_BRANCH_AGE_IN_DAYS}
@@ -1390,6 +1457,9 @@ public void fromConfig(Config rc) {
 		setBitmapExcessiveBranchCount(rc.getInt(CONFIG_PACK_SECTION,
 				CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_COUNT,
 				getBitmapExcessiveBranchCount()));
+		setBitmapExcessiveBranchTipCount(rc.getInt(CONFIG_PACK_SECTION,
+				CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_TIP_COUNT,
+				getBitmapExcessiveBranchTipCount()));
 		setBitmapInactiveBranchAgeInDays(rc.getInt(CONFIG_PACK_SECTION,
 				CONFIG_KEY_BITMAP_INACTIVE_BRANCH_AGE_INDAYS,
 				getBitmapInactiveBranchAgeInDays()));
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
index e0a3517..469a3d6 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
@@ -402,11 +402,14 @@ private void clearState() {
 	protected void doFetch(final ProgressMonitor monitor,
 			final Collection<Ref> want, final Set<ObjectId> have,
 			OutputStream outputStream) throws TransportException {
+		boolean hasObjects = !have.isEmpty();
 		try {
 			noProgress = monitor == NullProgressMonitor.INSTANCE;
 
-			markRefsAdvertised();
-			markReachable(want, have, maxTimeWanted(want));
+			if (hasObjects) {
+				markRefsAdvertised();
+			}
+			markReachable(want, have, maxTimeWanted(want, hasObjects));
 
 			if (TransferConfig.ProtocolVersion.V2
 					.equals(getProtocolVersion())) {
@@ -418,7 +421,7 @@ protected void doFetch(final ProgressMonitor monitor,
 				state = new TemporaryBuffer.Heap(Integer.MAX_VALUE);
 				pckState = new PacketLineOut(state);
 				try {
-					doFetchV2(monitor, want, outputStream);
+					doFetchV2(monitor, want, outputStream, hasObjects);
 				} finally {
 					clearState();
 				}
@@ -430,7 +433,7 @@ protected void doFetch(final ProgressMonitor monitor,
 				pckState = new PacketLineOut(state);
 			}
 			PacketLineOut output = statelessRPC ? pckState : pckOut;
-			if (sendWants(want, output)) {
+			if (sendWants(want, output, hasObjects)) {
 				boolean mayHaveShallow = depth != null || deepenSince != null || !deepenNots.isEmpty();
 				Set<ObjectId> shallowCommits = local.getObjectDatabase().getShallowCommits();
 				if (isCapableOf(GitProtocolConstants.CAPABILITY_SHALLOW)) {
@@ -457,7 +460,8 @@ protected void doFetch(final ProgressMonitor monitor,
 	}
 
 	private void doFetchV2(ProgressMonitor monitor, Collection<Ref> want,
-			OutputStream outputStream) throws IOException, CancelledException {
+			OutputStream outputStream, boolean hasObjects)
+			throws IOException, CancelledException {
 		sideband = true;
 		negotiateBegin();
 
@@ -479,7 +483,7 @@ private void doFetchV2(ProgressMonitor monitor, Collection<Ref> want,
 			pckState.writeString(capability);
 		}
 
-		if (!sendWants(want, pckState)) {
+		if (!sendWants(want, pckState, hasObjects)) {
 			// We already have everything we wanted.
 			return;
 		}
@@ -666,8 +670,12 @@ FetchConfig getFetchConfig() {
 		return local.getConfig().get(FetchConfig::new);
 	}
 
-	private int maxTimeWanted(Collection<Ref> wants) {
+	private int maxTimeWanted(Collection<Ref> wants, boolean hasObjects) {
 		int maxTime = 0;
+		if (!hasObjects) {
+			// we don't have any objects locally, we can immediately bail out
+			return maxTime;
+		}
 		for (Ref r : wants) {
 			try {
 				final RevObject obj = walk.parseAny(r.getObjectId());
@@ -769,7 +777,8 @@ private void markReachable(ObjectId id) {
 		}
 	}
 
-	private boolean sendWants(Collection<Ref> want, PacketLineOut p)
+	private boolean sendWants(Collection<Ref> want, PacketLineOut p,
+			boolean hasObjects)
 			throws IOException {
 		boolean first = true;
 		for (Ref r : want) {
@@ -778,7 +787,9 @@ private boolean sendWants(Collection<Ref> want, PacketLineOut p)
 				continue;
 			}
 			// if depth is set we need to fetch the objects even if they are already available
-			if (transport.getDepth() == null) {
+			if (transport.getDepth() == null
+					// only check reachable objects when we have objects
+					&& hasObjects) {
 				try {
 					if (walk.parseAny(objectId).has(REACHABLE)) {
 						// We already have this object. Asking for it is
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
index fc9789d..e1f2b19 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PackParser.java
@@ -1566,7 +1566,7 @@ protected abstract void onEndWholeObject(PackedObjectInfo info)
 	 * @param baseStreamPosition
 	 *            position of the base object in the incoming stream. The base
 	 *            must be before the delta, therefore {@code baseStreamPosition
-	 *            &lt; deltaStreamPosition}. This is <b>not</b> the position
+	 *            < deltaStreamPosition}. This is <b>not</b> the position
 	 *            returned by a prior end object event.
 	 * @param inflatedSize
 	 *            size of the delta when fully inflated. The size stored within
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushCertificateParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushCertificateParser.java
index 5009ecf..463d053 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushCertificateParser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PushCertificateParser.java
@@ -10,8 +10,8 @@
 
 package org.eclipse.jgit.transport;
 
-import static org.eclipse.jgit.transport.ReceivePack.parseCommand;
 import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_PUSH_CERT;
+import static org.eclipse.jgit.transport.ReceivePack.parseCommand;
 
 import java.io.EOFException;
 import java.io.IOException;
@@ -317,7 +317,7 @@ private static String parseHeader(String s, String header)
 	 * certificate.
 	 * <p>
 	 * This method doesn't parse the first line {@code "push-cert \NUL
-	 * &lt;capabilities&gt;"}, but assumes the first line including the
+	 * <capabilities>"}, but assumes the first line including the
 	 * capabilities has already been handled by the caller.
 	 *
 	 * @param pckIn
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
index ac973a9..a8e1dae 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -1024,7 +1024,7 @@ private void detectSymlinkSupport() {
 		File tempFile = null;
 		try {
 			tempFile = File.createTempFile("tempsymlinktarget", ""); //$NON-NLS-1$ //$NON-NLS-2$
-			File linkName = new File(tempFile.getParentFile(), "tempsymlink"); //$NON-NLS-1$
+			File linkName = new File(tempFile.getPath() + "-tempsymlink"); //$NON-NLS-1$
 			createSymLink(linkName, tempFile.getPath());
 			supportSymlinks = Boolean.TRUE;
 			linkName.delete();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
index 71fae81..46d0bc8 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
@@ -16,7 +16,12 @@
 import static org.eclipse.jgit.lib.ObjectChecker.author;
 import static org.eclipse.jgit.lib.ObjectChecker.committer;
 import static org.eclipse.jgit.lib.ObjectChecker.encoding;
+import static org.eclipse.jgit.lib.ObjectChecker.object;
+import static org.eclipse.jgit.lib.ObjectChecker.parent;
+import static org.eclipse.jgit.lib.ObjectChecker.tag;
 import static org.eclipse.jgit.lib.ObjectChecker.tagger;
+import static org.eclipse.jgit.lib.ObjectChecker.tree;
+import static org.eclipse.jgit.lib.ObjectChecker.type;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.CharacterCodingException;
@@ -520,17 +525,24 @@ public static final int nextLF(byte[] b, int ptr, char chrA) {
 	}
 
 	/**
-	 * Locate the end of the header.  Note that headers may be
-	 * more than one line long.
+	 * Locate the first end of line after the given position, while treating
+	 * following lines which are starting with spaces as part of the current
+	 * line.
+	 * <p>
+	 * For example, {@code nextLfSkippingSplitLines(
+	 * "row \n with space at beginning of a following line\nThe actual next line",
+	 * 0)} will return the position of {@code "\nThe actual next line"}.
+	 *
 	 * @param b
 	 *            buffer to scan.
 	 * @param ptr
-	 *            position within buffer to start looking for the end-of-header.
-	 * @return new position just after the header.  This is either
-	 * b.length, or the index of the header's terminating newline.
-	 * @since 5.1
+	 *            position within buffer to start looking for the next line.
+	 * @return new position just after the line end of the last line-split. This
+	 *         is either b.length, or the index of the current split-line's
+	 *         terminating newline.
+	 * @since 6.9
 	 */
-	public static final int headerEnd(final byte[] b, int ptr) {
+	public static final int nextLfSkippingSplitLines(final byte[] b, int ptr) {
 		final int sz = b.length;
 		while (ptr < sz) {
 			final byte c = b[ptr++];
@@ -538,7 +550,62 @@ public static final int headerEnd(final byte[] b, int ptr) {
 				return ptr - 1;
 			}
 		}
-		return ptr - 1;
+		return ptr;
+	}
+
+	/**
+	 * Extract a part of a buffer as a header value, removing the single blanks
+	 * at the front of continuation lines.
+	 *
+	 * @param b
+	 *            buffer to extract the header from
+	 * @param start
+	 *            of the header value, see
+	 *            {@link #headerStart(byte[], byte[], int)}
+	 * @param end
+	 *            of the header; see
+	 *            {@link #nextLfSkippingSplitLines(byte[], int)}
+	 * @return the header value, with blanks indicating continuation lines
+	 *         stripped
+	 * @since 6.9
+	 */
+	public static final byte[] headerValue(final byte[] b, int start, int end) {
+		byte[] data = new byte[end - start];
+		int out = 0;
+		byte last = '\0';
+		for (int in = start; in < end; in++) {
+			byte ch = b[in];
+			if (ch != ' ' || last != '\n') {
+				data[out++] = ch;
+			}
+			last = ch;
+		}
+		if (out == data.length) {
+			return data;
+		}
+		return Arrays.copyOf(data, out);
+	}
+
+	/**
+	 * Locate the first end of header after the given position. Note that
+	 * headers may be more than one line long.
+	 * <p>
+	 * Also note that there might be multiple headers. If you wish to find the
+	 * last header's end - call this in a loop.
+	 *
+	 * @param b
+	 *            buffer to scan.
+	 * @param ptr
+	 *            position within buffer to start looking for the header
+	 *            (normally a new-line).
+	 * @return new position just after the line end. This is either b.length, or
+	 *         the index of the header's terminating newline.
+	 * @since 5.1
+	 * @deprecated use {{@link #nextLfSkippingSplitLines}} directly instead
+	 */
+	@Deprecated
+	public static final int headerEnd(final byte[] b, int ptr) {
+		return nextLfSkippingSplitLines(b, ptr);
 	}
 
 	/**
@@ -576,6 +643,22 @@ public static final int headerStart(byte[] headerName, byte[] b, int ptr) {
 	}
 
 	/**
+	 * Returns whether the message starts with any known headers.
+	 *
+	 * @param b
+	 *            buffer to scan.
+	 * @return whether the message starts with any known headers
+	 * @since 6.9
+	 */
+	public static final boolean hasAnyKnownHeaders(byte[] b) {
+		return match(b, 0, tree) != -1 || match(b, 0, parent) != -1
+				|| match(b, 0, author) != -1 || match(b, 0, committer) != -1
+				|| match(b, 0, encoding) != -1 || match(b, 0, object) != -1
+				|| match(b, 0, type) != -1 || match(b, 0, tag) != -1
+				|| match(b, 0, tagger) != -1;
+	}
+
+	/**
 	 * Locate the first position before a given character.
 	 *
 	 * @param b
@@ -1258,6 +1341,7 @@ public static final int tagMessage(byte[] b, int ptr) {
 		final int sz = b.length;
 		if (ptr == 0)
 			ptr += 48; // skip the "object ..." line.
+		// Assume the rest of the current paragraph is all headers.
 		while (ptr < sz && b[ptr] != '\n')
 			ptr = nextLF(b, ptr);
 		if (ptr < sz && b[ptr] == '\n')
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 4a48762..ed62c71 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
@@ -174,6 +174,67 @@ public int getTimezone(long when) {
 		}
 	}
 
+	/**
+	 * Delegating SystemReader. Reduces boiler-plate code applications need to
+	 * implement when overriding only a few of the SystemReader's methods.
+	 *
+	 * @since 6.9
+	 */
+	public static class Delegate extends SystemReader {
+
+		private final SystemReader delegate;
+
+		/**
+		 * Create a delegating system reader
+		 *
+		 * @param delegate
+		 *            the system reader to delegate to
+		 */
+		public Delegate(SystemReader delegate) {
+			this.delegate = delegate;
+		}
+
+		@Override
+		public String getHostname() {
+			return delegate.getHostname();
+		}
+
+		@Override
+		public String getenv(String variable) {
+			return delegate.getenv(variable);
+		}
+
+		@Override
+		public String getProperty(String key) {
+			return delegate.getProperty(key);
+		}
+
+		@Override
+		public FileBasedConfig openUserConfig(Config parent, FS fs) {
+			return delegate.openUserConfig(parent, fs);
+		}
+
+		@Override
+		public FileBasedConfig openSystemConfig(Config parent, FS fs) {
+			return delegate.openSystemConfig(parent, fs);
+		}
+
+		@Override
+		public FileBasedConfig openJGitConfig(Config parent, FS fs) {
+			return delegate.openJGitConfig(parent, fs);
+		}
+
+		@Override
+		public long getCurrentTime() {
+			return delegate.getCurrentTime();
+		}
+
+		@Override
+		public int getTimezone(long when) {
+			return delegate.getTimezone(when);
+		}
+	}
+
 	private static volatile SystemReader INSTANCE = DEFAULT;
 
 	/**
diff --git a/pom.xml b/pom.xml
index 9533ee4..f14e2de 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>6.8.1-SNAPSHOT</version>
+  <version>6.9.1-SNAPSHOT</version>
 
   <name>JGit - Parent</name>
   <url>${jgit-url}</url>
@@ -118,37 +118,37 @@
 
     <project.build.outputTimestamp>${commit.time.iso}</project.build.outputTimestamp>
 
-    <jgit-last-release-version>6.7.0.202309050840-r</jgit-last-release-version>
+    <jgit-last-release-version>6.8.0.202311291450-r</jgit-last-release-version>
     <ant-version>1.10.14</ant-version>
-    <apache-sshd-version>2.11.0</apache-sshd-version>
+    <apache-sshd-version>2.12.0</apache-sshd-version>
     <jsch-version>0.1.55</jsch-version>
     <jzlib-version>1.1.3</jzlib-version>
     <javaewah-version>1.2.3</javaewah-version>
     <junit-version>4.13.2</junit-version>
     <test-fork-count>1C</test-fork-count>
     <args4j-version>2.33</args4j-version>
-    <commons-compress-version>1.25.0</commons-compress-version>
+    <commons-compress-version>1.26.0</commons-compress-version>
     <osgi-core-version>6.0.0</osgi-core-version>
     <servlet-api-version>4.0.4</servlet-api-version>
-    <jetty-version>10.0.18</jetty-version>
-    <japicmp-version>0.17.2</japicmp-version>
+    <jetty-version>10.0.20</jetty-version>
+    <japicmp-version>0.18.5</japicmp-version>
     <httpclient-version>4.5.14</httpclient-version>
     <httpcore-version>4.4.16</httpcore-version>
     <slf4j-version>1.7.36</slf4j-version>
-    <maven-javadoc-plugin-version>3.5.0</maven-javadoc-plugin-version>
+    <maven-javadoc-plugin-version>3.6.3</maven-javadoc-plugin-version>
     <gson-version>2.10.1</gson-version>
     <bouncycastle-version>1.77</bouncycastle-version>
-    <spotbugs-maven-plugin-version>4.7.3.4</spotbugs-maven-plugin-version>
-    <maven-project-info-reports-plugin-version>3.4.3</maven-project-info-reports-plugin-version>
-    <maven-jxr-plugin-version>3.3.0</maven-jxr-plugin-version>
-    <maven-surefire-plugin-version>3.0.0</maven-surefire-plugin-version>
+    <spotbugs-maven-plugin-version>4.8.3.1</spotbugs-maven-plugin-version>
+    <maven-project-info-reports-plugin-version>3.5.1</maven-project-info-reports-plugin-version>
+    <maven-jxr-plugin-version>3.3.2</maven-jxr-plugin-version>
+    <maven-surefire-plugin-version>3.2.5</maven-surefire-plugin-version>
     <maven-surefire-report-plugin-version>${maven-surefire-plugin-version}</maven-surefire-report-plugin-version>
-    <maven-compiler-plugin-version>3.11.0</maven-compiler-plugin-version>
+    <maven-compiler-plugin-version>3.12.1</maven-compiler-plugin-version>
     <plexus-compiler-version>2.13.0</plexus-compiler-version>
     <hamcrest-version>2.2</hamcrest-version>
-    <assertj-version>3.24.2</assertj-version>
-    <jna-version>5.13.0</jna-version>
-    <byte-buddy-version>1.14.9</byte-buddy-version>
+    <assertj-version>3.25.3</assertj-version>
+    <jna-version>5.14.0</jna-version>
+    <byte-buddy-version>1.14.12</byte-buddy-version>
 
     <!-- Properties to enable jacoco code coverage analysis -->
     <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
@@ -208,13 +208,13 @@
 
         <plugin>
           <artifactId>maven-clean-plugin</artifactId>
-          <version>3.2.0</version>
+          <version>3.3.2</version>
         </plugin>
 
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-shade-plugin</artifactId>
-          <version>3.4.1</version>
+          <version>3.5.1</version>
         </plugin>
 
         <plugin>
@@ -226,7 +226,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-dependency-plugin</artifactId>
-          <version>3.5.0</version>
+          <version>3.6.1</version>
         </plugin>
 
         <plugin>
@@ -255,7 +255,7 @@
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>build-helper-maven-plugin</artifactId>
-          <version>3.4.0</version>
+          <version>3.5.0</version>
         </plugin>
 
         <plugin>
@@ -263,7 +263,6 @@
           <artifactId>spotbugs-maven-plugin</artifactId>
           <version>${spotbugs-maven-plugin-version}</version>
           <configuration>
-            <findbugsXmlOutput>true</findbugsXmlOutput>
             <failOnError>false</failOnError>
           </configuration>
           <executions>
@@ -278,9 +277,9 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.20.0</version>
+          <version>3.21.2</version>
           <configuration>
-            <sourceEncoding>utf-8</sourceEncoding>
+            <inputEncoding>${project.build.sourceEncoding}</inputEncoding>
             <minimumTokens>100</minimumTokens>
             <targetJdk>${java.version}</targetJdk>
             <format>xml</format>
@@ -301,17 +300,17 @@
         <plugin>
           <groupId>org.eclipse.cbi.maven.plugins</groupId>
           <artifactId>eclipse-jarsigner-plugin</artifactId>
-          <version>1.4.2</version>
+          <version>1.4.3</version>
         </plugin>
         <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
-          <version>0.8.10</version>
+          <version>0.8.11</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-site-plugin</artifactId>
-          <version>4.0.0-M9</version>
+          <version>4.0.0-M13</version>
           <dependencies>
             <dependency><!-- add support for ssh/scp -->
               <groupId>org.apache.maven.wagon</groupId>
@@ -368,7 +367,7 @@
         <plugin>
           <groupId>org.cyclonedx</groupId>
           <artifactId>cyclonedx-maven-plugin</artifactId>
-          <version>2.7.9</version>
+          <version>2.7.10</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -379,6 +378,11 @@
             <reproducible>true</reproducible>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-enforcer-plugin</artifactId>
+          <version>3.4.1</version>
+        </plugin>
       </plugins>
     </pluginManagement>
 
@@ -386,7 +390,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-enforcer-plugin</artifactId>
-        <version>3.3.0</version>
         <executions>
           <execution>
             <id>enforce-maven</id>
@@ -620,7 +623,7 @@
       <plugin>
         <groupId>io.github.git-commit-id</groupId>
         <artifactId>git-commit-id-maven-plugin</artifactId>
-        <version>6.0.0</version>
+        <version>7.0.0</version>
         <executions>
           <execution>
             <id>get-the-git-infos</id>
@@ -980,7 +983,7 @@
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
-        <version>5.7.0</version>
+        <version>5.10.0</version>
       </dependency>
 
       <dependency>
@@ -1089,7 +1092,7 @@
               <dependency>
                 <groupId>org.eclipse.jdt</groupId>
                 <artifactId>ecj</artifactId>
-                <version>3.35.0</version>
+                <version>3.36.0</version>
               </dependency>
             </dependencies>
           </plugin>