Merge branch 'stable-5.12' into stable-5.13

* stable-5.12:
  Add missing since tag for SshBasicTestBase
  Add missing since tag for SshTestHarness#publicKey2
  Silence API errors
  Prevent infinite loop rescanning the pack list on
PackMismatchException
  Remove blank in maven.config

Change-Id: Ibe6652374ab5971105e62b05279f218c8c130fee
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..14db7e6
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Community Code of Conduct
+
+**Version 1.2  
+August 19, 2020**
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as community members, contributors, committers, and project leaders pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+*   Using welcoming and inclusive language
+*   Being respectful of differing viewpoints and experiences
+*   Gracefully accepting constructive criticism
+*   Focusing on what is best for the community
+*   Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+*   The use of sexualized language or imagery and unwelcome sexual attention or advances
+*   Trolling, insulting/derogatory comments, and personal or political attacks
+*   Public or private harassment
+*   Publishing others' private information, such as a physical or electronic address, without explicit permission
+*   Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+With the support of the Eclipse Foundation staff (the “Staff”), project committers and leaders are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project committers and leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the Eclipse Foundation project or its community in public spaces. Examples of representing a project or community include posting via an official social media account, or acting as a project representative at an online or offline event. Representation of a project may be further defined and clarified by project committers, leaders, or the EMO.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Staff at codeofconduct@eclipse.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The Staff is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project committers or leaders who do not follow the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the Staff.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org) , version 1.4, available at [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct/)
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4818589..e0859d2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,44 +1,33 @@
-Contributing
-============
+# Contributing
 
-Please refer to the contributor guide for all the details:
+Please refer to the [contributor guide](https://wiki.eclipse.org/EGit/Contributor_Guide) for all the details.
+Contributions require that you sign the [Eclipse Contributor Agreement](https://www.eclipse.org/legal/ECA.php).
 
-https://wiki.eclipse.org/EGit/Contributor_Guide
-
-
-Reporting bugs
---------------
+## Reporting bugs
 
 For anything other than small changes, it's a good idea to open a bug
 report for it (in case one doesn't already exist). This gives others the
-chance to give input and is useful for tracking. Create one here:
+chance to give input and is useful for tracking. 
+[Create JGit bugs here](https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JGit).
 
-https://bugs.eclipse.org/bugs/enter_bug.cgi?product=JGit
+## Submitting changes
 
-
-Submitting changes
-------------------
-
-We use Gerrit to review all changes by committers or contributors before
-they are merged:
-
-https://git.eclipse.org/r/
-
-Make sure you have an account and have set up the `commit-msg` hook
+- We use [Gerrit](https://git.eclipse.org/r/) to review all changes by committers
+or contributors before they are merged.
+- Make sure you have an account and have set up the `commit-msg` hook
 before committing.
-
-When committing your changes, see the contributor guide or other commits
+- When committing your changes, see the contributor guide or other commits
 on what your commit message should include.
-
-Run the following to push your change for review (with `username`
+- Run the following to push your change for review (with `username`
 replaced by your Gerrit username):
 
-    git push ssh://username@git.eclipse.org:29418/jgit/jgit.git HEAD:refs/for/master
+```bash
+git push ssh://username@git.eclipse.org:29418/jgit/jgit.git HEAD:refs/for/master
+```
 
-Add the link to the review as a comment on the bug report, so that
+- Add the link to the review as a comment on the bug report, so that
 people coming from the bug report can find it.
-
-Then wait for someone to review your change. If there is something to be
+- Then wait for someone to review your change. If there is something to be
 corrected, amend your commit and push it again.
 
 Have fun :).
diff --git a/DEPENDENCIES b/DEPENDENCIES
index 9dbca62..ebbe480 100644
--- a/DEPENDENCIES
+++ b/DEPENDENCIES
@@ -1,66 +1,69 @@
 maven/mavencentral/args4j/args4j/2.33, MIT, approved, CQ11068
-maven/mavencentral/com.google.code.gson/gson/2.8.6, Apache-2.0, approved, CQ23102
-maven/mavencentral/com.googlecode.javaewah/JavaEWAH/1.1.7, Apache-2.0, approved, CQ11658
+maven/mavencentral/com.google.code.gson/gson/2.8.7, Apache-2.0, approved, CQ23496
+maven/mavencentral/com.googlecode.javaewah/JavaEWAH/1.1.12, Apache-2.0, approved, CQ11658
 maven/mavencentral/com.jcraft/jsch/0.1.55, BSD-3-Clause, approved, CQ19435
 maven/mavencentral/com.jcraft/jzlib/1.1.1, BSD-2-Clause, approved, CQ6218
-maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0, approved, CQ15971
+maven/mavencentral/commons-codec/commons-codec/1.11, Apache-2.0 AND BSD-3-Clause, approved, CQ15971
 maven/mavencentral/commons-logging/commons-logging/1.2, Apache-2.0, approved, CQ10162
-maven/mavencentral/javax.servlet/javax.servlet-api/3.1.0, Apache-2.0 AND (CDDL-1.1 OR GPL-2.0 WITH Classpath-exception-2.0), approved, emo_ip_team
+maven/mavencentral/javax.servlet/javax.servlet-api/3.1.0, Apache-2.0 AND (CDDL-1.1 OR GPL-2.0 WITH Classpath-exception-2.0), approved, CQ7248
 maven/mavencentral/junit/junit/4.13, , approved, CQ22796
 maven/mavencentral/log4j/log4j/1.2.15, Apache-2.0, approved, CQ7837
 maven/mavencentral/net.bytebuddy/byte-buddy-agent/1.9.0, Apache-2.0, approved, clearlydefined
 maven/mavencentral/net.bytebuddy/byte-buddy/1.9.0, Apache-2.0, approved, clearlydefined
-maven/mavencentral/net.i2p.crypto/eddsa/0.3.0, CC0, approved, CQ17804
+maven/mavencentral/net.i2p.crypto/eddsa/0.3.0, CC0-1.0, approved, CQ22537
 maven/mavencentral/net.sf.jopt-simple/jopt-simple/4.6, MIT, approved, clearlydefined
 maven/mavencentral/org.apache.ant/ant-launcher/1.10.10, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
 maven/mavencentral/org.apache.ant/ant/1.10.10, Apache-2.0 AND W3C AND LicenseRef-Public-Domain, approved, CQ15560
-maven/mavencentral/org.apache.commons/commons-compress/1.19, Apache-2.0, approved, clearlydefined
+maven/mavencentral/org.apache.commons/commons-compress/1.20, Apache-2.0 AND BSD-3-Clause AND LicenseRef-Public-Domain, approved, CQ21771
 maven/mavencentral/org.apache.commons/commons-math3/3.2, Apache-2.0, approved, clearlydefined
-maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0, approved, CQ22761
-maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.14, Apache-2.0, approved, CQ18704
-maven/mavencentral/org.apache.sshd/sshd-common/2.6.0, Apache-2.0 AND ISC, approved, CQ22992
-maven/mavencentral/org.apache.sshd/sshd-core/2.6.0, Apache-2.0 AND ISC, approved, CQ22992
-maven/mavencentral/org.apache.sshd/sshd-osgi/2.6.0, Apache-2.0 AND ISC, approved, CQ22992
-maven/mavencentral/org.apache.sshd/sshd-sftp/2.6.0, Apache-2.0 AND ISC, approved, CQ22993
-maven/mavencentral/org.assertj/assertj-core/3.14.0, Apache-2.0, approved, clearlydefined
-maven/mavencentral/org.bouncycastle/bcpg-jdk15on/1.65, Apache-2.0, approved, CQ21975
-maven/mavencentral/org.bouncycastle/bcpkix-jdk15on/1.65, MIT AND LicenseRef-Public-Domain, approved, CQ21976
-maven/mavencentral/org.bouncycastle/bcprov-jdk15on/1.65.01, MIT AND LicenseRef-Public-Domain, approved, CQ21977
-maven/mavencentral/org.eclipse.jetty/jetty-http/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-io/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-security/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-server/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-servlet/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-util-ajax/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jetty/jetty-util/9.4.41.v20210516, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/5.12.0-SNAPSHOT, , approved, eclipse
-maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/5.12.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.apache.httpcomponents/httpclient/4.5.13, Apache-2.0 AND LicenseRef-Public-Domain, approved, CQ23527
+maven/mavencentral/org.apache.httpcomponents/httpcore/4.4.14, Apache-2.0, approved, CQ23528
+maven/mavencentral/org.apache.sshd/sshd-common/2.7.0, Apache-2.0 and ISC, approved, CQ23469
+maven/mavencentral/org.apache.sshd/sshd-core/2.7.0, Apache-2.0, approved, CQ23469
+maven/mavencentral/org.apache.sshd/sshd-osgi/2.7.0, Apache-2.0 and ISC, approved, CQ23469
+maven/mavencentral/org.apache.sshd/sshd-sftp/2.7.0, Apache-2.0, approved, CQ23470
+maven/mavencentral/org.assertj/assertj-core/3.20.2, Apache-2.0, approved, clearlydefined
+maven/mavencentral/org.bouncycastle/bcpg-jdk15on/1.69, MIT and Apache-2.0, approved, CQ23472
+maven/mavencentral/org.bouncycastle/bcpkix-jdk15on/1.69, MIT, approved, CQ23473
+maven/mavencentral/org.bouncycastle/bcprov-jdk15on/1.69, MIT, approved, CQ23471
+maven/mavencentral/org.bouncycastle/bcutil-jdk15on/1.69, MIT, approved, CQ23474
+maven/mavencentral/org.eclipse.jetty/jetty-http/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-io/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-security/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-server/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-servlet/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-util-ajax/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jetty/jetty-util/9.4.43.v20210629, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ant/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.archive/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.gpg.bc/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.apache/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.server/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.http.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.http/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit.ssh/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.junit/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.server/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.lfs/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.pgm/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.apache/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ssh.jsch/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.test/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit.ui/5.13.0-SNAPSHOT, , approved, eclipse
+maven/mavencentral/org.eclipse.jgit/org.eclipse.jgit/5.13.0-SNAPSHOT, , approved, eclipse
 maven/mavencentral/org.hamcrest/hamcrest-core/1.3, BSD-2-Clause, approved, CQ7063
+maven/mavencentral/org.hamcrest/hamcrest/2.2, BSD-2-Clause, approved, clearlydefined
 maven/mavencentral/org.mockito/mockito-core/2.23.0, MIT, approved, CQ17976
 maven/mavencentral/org.objenesis/objenesis/2.6, Apache-2.0, approved, CQ15478
-maven/mavencentral/org.openjdk.jmh/jmh-core/1.21, GPL-2.0, approved, CQ20517
-maven/mavencentral/org.openjdk.jmh/jmh-generator-annprocess/1.21, GPL-2.0, approved, CQ20518
+maven/mavencentral/org.openjdk.jmh/jmh-core/1.32, GPL-2.0, approved, CQ23499
+maven/mavencentral/org.openjdk.jmh/jmh-generator-annprocess/1.32, GPL-2.0, approved, CQ23500
 maven/mavencentral/org.osgi/org.osgi.core/4.3.1, Apache-2.0, approved, CQ10111
+maven/mavencentral/org.slf4j/jcl-over-slf4j/1.7.30, Apache-2.0, approved, CQ12843
 maven/mavencentral/org.slf4j/slf4j-api/1.7.30, MIT, approved, CQ13368
 maven/mavencentral/org.slf4j/slf4j-log4j12/1.7.30, MIT, approved, CQ7665
-maven/mavencentral/org.tukaani/xz/1.8, LicenseRef-Public-Domain, approved, CQ15386
+maven/mavencentral/org.tukaani/xz/1.9, LicenseRef-Public-Domain, approved, CQ23498
diff --git a/Documentation/config-options.md b/Documentation/config-options.md
index a9ca48c..5d76483 100644
--- a/Documentation/config-options.md
+++ b/Documentation/config-options.md
@@ -42,6 +42,7 @@
 | `core.precomposeUnicode` | `true` on Mac OS | ✅ | MacOS only. When `true`, JGit reverts the unicode decomposition of filenames done by Mac OS. |
 | `core.quotePath` | `true` | ✅ | Commands that output paths (e.g. ls-files, diff), will quote "unusual" characters in the pathname by enclosing the pathname in double-quotes and escaping those characters with backslashes in the same way C escapes control characters (e.g. `\t` for TAB, `\n` for LF, `\\` for backslash) or bytes with values larger than `0x80` (e.g. octal `\302\265` for "micro" in UTF-8). |
 | `core.repositoryFormatVersion` | `1` | ⃞ | Internal version identifying the repository format and layout version. Don't set manually. |
+| `core.sha1Implementation` | `java` | ⃞ | Choose the SHA1 implementation used by JGit. Set it to `java` to use JGit's Java implementation which detects SHA1 collisions if system property `org.eclipse.jgit.util.sha1.detectCollision` is unset or `true`. Set it to `jdkNative` to use the native implementation available in the JDK, can also be set using system property `org.eclipse.jgit.util.sha1.implementation`. If both are set the system property takes precedence. Performance of `jdkNative` is around 10% higher than `java` when `detectCollision=false` and 30% higher when `detectCollision=true`.|
 | `core.streamFileThreshold` | `50 MiB` | ⃞ | The size threshold beyond which objects must be streamed. |
 | `core.supportsAtomicFileCreation` | `true` | ⃞ | Whether the filesystem supports atomic file creation. |
 | `core.symlinks` | Auto detect if filesystem supports symlinks| ✅ | If false, symbolic links are checked out as small plain files that contain the link text. |
@@ -86,6 +87,7 @@
 | `pack.bitmapContiguousCommitCount` | `100` | ⃞ | Count of most recent commits for which to build bitmaps. |
 | `pack.bitmapDistantCommitSpan` | `5000` | ⃞ | Span of commits when building bitmaps for distant history. |
 | `pack.bitmapExcessiveBranchCount` | `100` | ⃞ | The count of branches deemed "excessive". If the count of branches in a repository exceeds this number and bitmaps are enabled, "inactive" branches will have fewer bitmaps than "active" branches. |
+| `pack.bitmapExcludedRefsPrefixes` | | ⃞ | The refs prefixes to be excluded when building bitmaps. May be specified more than once to exclude multiple prefixes. |
 | `pack.bitmapInactiveBranchAgeInDays` | `90` | ⃞ | Age in days that marks a branch as "inactive" for bitmap creation. |
 | `pack.bitmapRecentCommitCount` | `20000`  | ⃞ | Count at which to switch from `bitmapRecentCommitSpan` to `bitmapDistantCommitSpan`. |
 | `pack.bitmapRecentCommitSpan` | `100` | ⃞ | Span of commits when building bitmaps for recent history. |
@@ -98,10 +100,11 @@
 | `pack.depth` | `50` | ✅ | Maximum depth of delta chain set up for the pack writer. |
 | `pack.indexVersion` | `2` | ✅ | Pack index file format version. |
 | `pack.minSizePreventRacyPack` | `100 MiB` | ⃞ | Minimum packfile size for which we wait before opening a newly written pack to prevent its lastModified timestamp could be racy if `pack.waitPreventRacyPack` is `true`. |
-| `pack.preserveOldPacks` | `false` | ⃞ | Whether to preserve old packs in a preserved directory. |
-| `prunePreserved`, only via API of PackConfig | `false` | ⃞ | Whether to remove preserved pack files in a preserved directory. |
+| `pack.preserveOldPacks` | `false` | ⃞ | Whether to preserve old packs during gc in the `objects/pack/preserved` directory. This can avoid rare races between gc removing pack files and other concurrent operations. If this option is false data loss can occur in rare cases when an object is believed to be unreferenced when object repacking is running, and then garbage collection deletes it while another concurrent operation references this object shortly before garbage collection deletes it. When this happens, a new reference is created which points to a now missing object. |
+| `pack.prunePreserved` | `false` | ⃞ | Whether to prune preserved pack files from the previous run of gc from the `objects/pack/preserved` directory. This helps to limit the additional storage space needed to preserve old packs when `pack.preserveOldPacks = true`. |
 | `pack.reuseDeltas` | `true` |⃞ | Whether to reuse deltas existing in repository. |
 | `pack.reuseObjects` | `true` | ⃞ | Whether to reuse existing objects representation in repository. |
+| `pack.searchForReuseTimeout` | | ⃞ | Search for reuse phase timeout. Expressed as a `Duration`, i.e.: `50sec`. |
 | `pack.singlePack` | `false` | ⃞ | Whether all of `refs/*` should be packed in a single pack. |
 | `pack.threads` | `0` (auto-detect number of processors) | ✅ | Number of threads to use for delta compression. |
 | `pack.waitPreventRacyPack` | `false` | ⃞ | Whether we wait before opening a newly written pack to prevent its lastModified timestamp could be racy. |
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000..e6f57c6
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,49 @@
+<!--- https://www.eclipse.org/security/ --->
+_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
+
+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.
+
+Contact the [Eclipse Security Team](mailto:security@eclipse.org).
+
+**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,
+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.
+
+## 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).
+
+Publicly disclosed issues are listed on the
+[Disclosed Vulnerabilities Page](https://www.eclipse.org/security/known.php).
\ No newline at end of file
diff --git a/WORKSPACE b/WORKSPACE
index d9c407a..ac7c2ee 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -55,20 +55,20 @@
     ],
 )
 
-JMH_VERS = "1.21"
+JMH_VERS = "1.32"
 
 maven_jar(
     name = "jmh-core",
     artifact = "org.openjdk.jmh:jmh-core:" + JMH_VERS,
     attach_source = False,
-    sha1 = "442447101f63074c61063858033fbfde8a076873",
+    sha1 = "9a8b69ea08118fd4e5d30a152d37b7087ee4a720",
 )
 
 maven_jar(
     name = "jmh-annotations",
     artifact = "org.openjdk.jmh:jmh-generator-annprocess:" + JMH_VERS,
     attach_source = False,
-    sha1 = "7aac374614a8a76cad16b91f1a4419d31a7dcda3",
+    sha1 = "0a28eccc75e0d65984ce25e1ec4dd021a0ca6c57",
 )
 
 maven_jar(
@@ -105,8 +105,8 @@
 
 maven_jar(
     name = "javaewah",
-    artifact = "com.googlecode.javaewah:JavaEWAH:1.1.7",
-    sha1 = "570dde3cd706ae10c62fe19b150928cfdb415e87",
+    artifact = "com.googlecode.javaewah:JavaEWAH:1.1.13",
+    sha1 = "32cd724a42dc73f99ca08453d11a4bb83e0034c7",
 )
 
 maven_jar(
@@ -123,14 +123,14 @@
 
 maven_jar(
     name = "sshd-osgi",
-    artifact = "org.apache.sshd:sshd-osgi:2.6.0",
-    sha1 = "40e365bb799e1bff3d31dc858b1e59a93c123f29",
+    artifact = "org.apache.sshd:sshd-osgi:2.7.0",
+    sha1 = "a101aad0f79ad424498098f7e91c39d3d92177c1",
 )
 
 maven_jar(
     name = "sshd-sftp",
-    artifact = "org.apache.sshd:sshd-sftp:2.6.0",
-    sha1 = "6eddfe8fdf59a3d9a49151e4177f8c1bebeb30c9",
+    artifact = "org.apache.sshd:sshd-sftp:2.7.0",
+    sha1 = "0c9eff7145e20b338c1dd6aca36ba93ed7c0147c",
 )
 
 maven_jar(
@@ -165,14 +165,14 @@
 
 maven_jar(
     name = "commons-compress",
-    artifact = "org.apache.commons:commons-compress:1.19",
-    sha1 = "7e65777fb451ddab6a9c054beb879e521b7eab78",
+    artifact = "org.apache.commons:commons-compress:1.21",
+    sha1 = "4ec95b60d4e86b5c95a0e919cb172a0af98011ef",
 )
 
 maven_jar(
     name = "tukaani-xz",
-    artifact = "org.tukaani:xz:1.8",
-    sha1 = "c4f7d054303948eb6a4066194253886c8af07128",
+    artifact = "org.tukaani:xz:1.9",
+    sha1 = "1ea4bec1a921180164852c65006d928617bd2caf",
 )
 
 maven_jar(
@@ -183,20 +183,14 @@
 
 maven_jar(
     name = "junit",
-    artifact = "junit:junit:4.13",
-    sha1 = "e49ccba652b735c93bd6e6f59760d8254cf597dd",
+    artifact = "junit:junit:4.13.2",
+    sha1 = "8ac9e16d933b6fb43bc7f576336b8f4d7eb5ba12",
 )
 
 maven_jar(
-    name = "hamcrest-library",
-    artifact = "org.hamcrest:hamcrest-library:1.3",
-    sha1 = "4785a3c21320980282f9f33d0d1264a69040538f",
-)
-
-maven_jar(
-    name = "hamcrest-core",
-    artifact = "org.hamcrest:hamcrest-core:1.3",
-    sha1 = "42a25dc3219429f0e5d060061f71acb49bf010a0",
+    name = "hamcrest",
+    artifact = "org.hamcrest:hamcrest:2.2",
+    sha1 = "1820c0968dba3a11a1b30669bb1f01978a91dedc",
 )
 
 maven_jar(
@@ -207,8 +201,8 @@
 
 maven_jar(
     name = "assertj-core",
-    artifact = "org.assertj:assertj-core:3.14.0",
-    sha1 = "3b7b0fcac821f3d167764e9926573cd64f78f9e9",
+    artifact = "org.assertj:assertj-core:3.20.2",
+    sha1 = "66f1f0ebd6db2b24e4a731979171da16ba919cd5",
 )
 
 BYTE_BUDDY_VERSION = "1.9.0"
@@ -233,80 +227,87 @@
 
 maven_jar(
     name = "gson",
-    artifact = "com.google.code.gson:gson:2.8.6",
-    sha1 = "9180733b7df8542621dc12e21e87557e8c99b8cb",
+    artifact = "com.google.code.gson:gson:2.8.8",
+    sha1 = "431fc3cbc0ff81abdbfde070062741089c3ba874",
 )
 
-JETTY_VER = "9.4.41.v20210516"
+JETTY_VER = "9.4.43.v20210629"
 
 maven_jar(
     name = "jetty-servlet",
     artifact = "org.eclipse.jetty:jetty-servlet:" + JETTY_VER,
-    sha1 = "ea45368ea7fd04026038f89e6910f17f70939641",
-    src_sha1 = "4acf6b0d1449ccd39b195783e3639ab0da51f7bf",
+    sha1 = "ee000c7dcdbe7b4ef94e3fa67be8f56a46915944",
+    src_sha1 = "50236764fe1d3619ca07f346e148189c4f5b801a",
 )
 
 maven_jar(
     name = "jetty-security",
     artifact = "org.eclipse.jetty:jetty-security:" + JETTY_VER,
-    sha1 = "5ba69b1189a9d1f425ed03cbc2c901e0e6023c4d",
-    src_sha1 = "d46f8cb4dad66751d3a588309c6bbc15b80fbad4",
+    sha1 = "ae1958da077c46bac61be9b8de2b45a3aa112353",
+    src_sha1 = "6e5271e91da37e381f566e0db07ab4d936d86104",
 )
 
 maven_jar(
     name = "jetty-server",
     artifact = "org.eclipse.jetty:jetty-server:" + JETTY_VER,
-    sha1 = "25b1963b0a1c56202ec37046adc55861815107ce",
-    src_sha1 = "a7f82c9df737316cf0dfafe4a33ca4ae89d780db",
+    sha1 = "8ba04f6b5d00223983684a563a3edaa12282bcf0",
+    src_sha1 = "51600567dbd082fb03feeb9c786f5e7cc9e0a17d",
 )
 
 maven_jar(
     name = "jetty-http",
     artifact = "org.eclipse.jetty:jetty-http:" + JETTY_VER,
-    sha1 = "0d460bece4dd9666b46cbd18f8d7fd31cf02ecd9",
-    src_sha1 = "6fa009d950b8fdab8e94003e6295c08d42ee85b7",
+    sha1 = "5171466337a6da7efbf317490b9c4574c0b4b640",
+    src_sha1 = "52f477161fd0fc90869f48a145aa2c86624c496e",
 )
 
 maven_jar(
     name = "jetty-io",
     artifact = "org.eclipse.jetty:jetty-io:" + JETTY_VER,
-    sha1 = "820eea368623939c2113902b1ca7a98186f64a73",
-    src_sha1 = "4373285dafb5f79210815d9c15de106cc3e9ac4d",
+    sha1 = "acf672c64ac21851069c5b5b789e5c185a25933f",
+    src_sha1 = "824d5cffce7a72af7c11d9cd87f86184e2a05c17",
 )
 
 maven_jar(
     name = "jetty-util",
     artifact = "org.eclipse.jetty:jetty-util:" + JETTY_VER,
-    sha1 = "548c76ea00d7eb3e2bcea273174e5d030639d109",
-    src_sha1 = "ba188de552a0c310f69cf12bea887413ce8f0e78",
+    sha1 = "97306fd3c76171602caad2acc54ca779c9240d5f",
+    src_sha1 = "dffff7271c248d4e21e2b1629c57896b8e631051",
 )
 
 maven_jar(
     name = "jetty-util-ajax",
     artifact = "org.eclipse.jetty:jetty-util-ajax:" + JETTY_VER,
-    sha1 = "d4c1d66fc62796a17548e6c344fbf89b5889f873",
-    src_sha1 = "b60cf77be68137eee4ee13d83c47d684d14b6d90",
+    sha1 = "2500d180c6e8e28eb3b75372b6ea9d457cf37658",
+    src_sha1 = "682470f5ad074e64fc0e9c93bdc2784482f79362",
 )
 
-BOUNCYCASTLE_VER = "1.65"
+BOUNCYCASTLE_VER = "1.69"
 
 maven_jar(
     name = "bcpg",
     artifact = "org.bouncycastle:bcpg-jdk15on:" + BOUNCYCASTLE_VER,
-    sha1 = "f32fc02cc29c9fdcc35c0de4d16964f01777067c",
-    src_sha1 = "508476d5383c7d086b400f5e7c5a8cf4dc8ac4e2",
+    sha1 = "d99a08c3f651b26e8eb668e941b0bbd2c09ece08",
+    src_sha1 = "de1fc261b44a8eb60583413a31ffc98ce3dce38b",
 )
 
 maven_jar(
     name = "bcprov",
-    artifact = "org.bouncycastle:bcprov-jdk15on:1.65.01",
-    sha1 = "0fbd478ea7b07acc3902b9585a37fd88393f8427",
-    src_sha1 = "8f54635075628c69b6c037e800dd0b03ffb8dd51",
+    artifact = "org.bouncycastle:bcprov-jdk15on:" + BOUNCYCASTLE_VER,
+    sha1 = "91e1628251cf3ca90093ce9d0fe67e5b7dab3850",
+    src_sha1 = "67dc6476845f6b29cb520b5df61db65ae56718e4",
+)
+
+maven_jar(
+    name = "bcutil",
+    artifact = "org.bouncycastle:bcutil-jdk15on:" + BOUNCYCASTLE_VER,
+    sha1 = "c3edf93d346e97f64f041e448e7455c39c7eff64",
+    src_sha1 = "deeb3fbbf373e05e2a20941f9a8ce90e9aeab3d2",
 )
 
 maven_jar(
     name = "bcpkix",
     artifact = "org.bouncycastle:bcpkix-jdk15on:" + BOUNCYCASTLE_VER,
-    sha1 = "c9507d93e4b453320b57d9ac21bdd67d65a00bbc",
-    src_sha1 = "16c71e83af43927d20ccad19defcbb0babcbdb26",
+    sha1 = "45c36fb72fafb0b688c6af795e6cc803f6f79ee5",
+    src_sha1 = "8bc5214401459bd91eea816b516079da38374e90",
 )
diff --git a/lib/BUILD b/lib/BUILD
index 83709a3..68344e4 100644
--- a/lib/BUILD
+++ b/lib/BUILD
@@ -148,7 +148,6 @@
 java_library(
     name = "jsch",
     visibility = [
-        "//org.eclipse.jgit:__pkg__",
         "//org.eclipse.jgit.junit.ssh:__pkg__",
         "//org.eclipse.jgit.ssh.jsch:__pkg__",
         "//org.eclipse.jgit.ssh.jsch.test:__pkg__",
@@ -159,7 +158,6 @@
 java_library(
     name = "bcpg",
     visibility = [
-        "//org.eclipse.jgit:__pkg__",
         "//org.eclipse.jgit.gpg.bc:__pkg__",
         "//org.eclipse.jgit.gpg.bc.test:__pkg__",
         "//org.eclipse.jgit.test:__pkg__",
@@ -170,7 +168,6 @@
 java_library(
     name = "bcprov",
     visibility = [
-        "//org.eclipse.jgit:__pkg__",
         "//org.eclipse.jgit.gpg.bc:__pkg__",
         "//org.eclipse.jgit.gpg.bc.test:__pkg__",
         "//org.eclipse.jgit.test:__pkg__",
@@ -179,9 +176,18 @@
 )
 
 java_library(
+    name = "bcutil",
+    visibility = [
+        "//org.eclipse.jgit.gpg.bc:__pkg__",
+        "//org.eclipse.jgit.gpg.bc.test:__pkg__",
+        "//org.eclipse.jgit.test:__pkg__",
+    ],
+    exports = ["@bcutil//jar"],
+)
+
+java_library(
     name = "bcpkix",
     visibility = [
-        "//org.eclipse.jgit:__pkg__",
         "//org.eclipse.jgit.gpg.bc:__pkg__",
         "//org.eclipse.jgit.test:__pkg__",
     ],
@@ -191,7 +197,6 @@
 java_library(
     name = "jzlib",
     visibility = [
-        "//org.eclipse.jgit:__pkg__",
         "//org.eclipse.jgit.ssh.jsch:__pkg__",
         "//org.eclipse.jgit.test:__pkg__",
     ],
@@ -205,8 +210,7 @@
     exports = [
         "@bytebuddy-agent//jar",
         "@bytebuddy//jar",
-        "@hamcrest-core//jar",
-        "@hamcrest-library//jar",
+        "@hamcrest//jar",
         "@junit//jar",
         "@mockito//jar",
         "@objenesis//jar",
@@ -256,7 +260,6 @@
 
 java_library(
     name = "slf4j-simple",
-    testonly = 1,
     visibility = ["//visibility:public"],
     exports = ["@slf4j-simple//jar"],
 )
diff --git a/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.ant.test/META-INF/MANIFEST.MF
index 75451de..f137298 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.tools.ant,
- org.eclipse.jgit.ant.tasks;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.hamcrest.core;version="[1.1.0,2.0.0)",
+ org.eclipse.jgit.ant.tasks;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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 b318fae..e7eba1f 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 ce257c3..2dac802 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.tools.ant,
-  org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)"
+  org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)"
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.ant;version="5.12.1",
- org.eclipse.jgit.ant.tasks;version="5.12.1";
+Export-Package: org.eclipse.jgit.ant;version="5.13.2",
+ org.eclipse.jgit.ant.tasks;version="5.13.2";
   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 9d9ad0c..5b6c640 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ant;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ant;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.ant/pom.xml b/org.eclipse.jgit.ant/pom.xml
index 4e4a041..c14f922 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ant</artifactId>
@@ -38,7 +38,7 @@
     <dependency>
       <groupId>org.apache.ant</groupId>
       <artifactId>ant</artifactId>
-      <version>1.10.10</version>
+      <version>1.10.12</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.archive/META-INF/MANIFEST.MF b/org.eclipse.jgit.archive/META-INF/MANIFEST.MF
index 3c9e551..6fc3dbd 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -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="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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="5.12.1";
+Export-Package: org.eclipse.jgit.archive;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.api,
    org.apache.commons.compress.archivers,
    org.osgi.framework",
- org.eclipse.jgit.archive.internal;version="5.12.1";x-internal:=true
+ org.eclipse.jgit.archive.internal;version="5.13.2";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 54a18ec..38f56d8 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.archive;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.archive;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.archive/pom.xml b/org.eclipse.jgit.archive/pom.xml
index b67af49..631f5b3 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 dd4b4a9..9e3d68d 100644
--- a/org.eclipse.jgit.benchmarks/pom.xml
+++ b/org.eclipse.jgit.benchmarks/pom.xml
@@ -14,7 +14,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.eclipse.jgit</groupId>
-  <version>5.12.1-SNAPSHOT</version>
+  <version>5.13.2-SNAPSHOT</version>
   <artifactId>org.eclipse.jgit.benchmarks</artifactId>
   <packaging>jar</packaging>
 
@@ -23,7 +23,7 @@
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <javac.target>1.8</javac.target>
-    <jmh.version>1.21</jmh.version>
+    <jmh.version>1.32</jmh.version>
     <uberjar.name>benchmarks</uberjar.name>
   </properties>
 
@@ -37,13 +37,17 @@
       <groupId>org.openjdk.jmh</groupId>
       <artifactId>jmh-generator-annprocess</artifactId>
       <version>${jmh.version}</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.jgit</groupId>
+      <artifactId>org.eclipse.jgit.junit</artifactId>
+      <version>${project.version}</version>
+    </dependency>
   </dependencies>
 
   <build>
@@ -71,6 +75,7 @@
       </plugin>
       <plugin>
         <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.8.1</version>
         <configuration>
           <encoding>UTF-8</encoding>
           <source>1.8</source>
@@ -160,7 +165,7 @@
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-jxr-plugin</artifactId>
-          <version>3.0.0</version>
+          <version>3.1.1</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java
index 97c847b..913ca5a 100644
--- a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java
+++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/CreateFileSnapshotBenchmark.java
@@ -69,8 +69,6 @@ public FileSnapshot testCreateFileSnapshot() {
 	public static void main(String[] args) throws RunnerException {
 		Options opt = new OptionsBuilder()
 				.include(CreateFileSnapshotBenchmark.class.getSimpleName())
-				// .addProfiler(StackProfiler.class)
-				// .addProfiler(GCProfiler.class)
 				.forks(1).jvmArgs("-ea").build();
 		new Runner(opt).run();
 	}
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/FileMoveBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/FileMoveBenchmark.java
index d3ada22..2ec5f1f 100644
--- a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/FileMoveBenchmark.java
+++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/FileMoveBenchmark.java
@@ -128,8 +128,6 @@ public static void main(String[] args) throws RunnerException {
 		Options opt = new OptionsBuilder()
 				.include(FileMoveBenchmark.class
 						.getSimpleName())
-				// .addProfiler(StackProfiler.class)
-				// .addProfiler(GCProfiler.class)
 				.forks(1).jvmArgs("-ea").build();
 		new Runner(opt).run();
 	}
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/LookupFileStoreBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/LookupFileStoreBenchmark.java
index 858e2dc..393edcb 100644
--- a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/LookupFileStoreBenchmark.java
+++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/LookupFileStoreBenchmark.java
@@ -56,8 +56,6 @@ public FileStore testLookupFileStore() throws IOException {
 	public static void main(String[] args) throws RunnerException {
 		Options opt = new OptionsBuilder()
 				.include(LookupFileStoreBenchmark.class.getSimpleName())
-				.addProfiler(StackProfiler.class)
-				// .addProfiler(GCProfiler.class)
 				.forks(1).jvmArgs("-ea").build();
 		new Runner(opt).run();
 	}
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SHA1Benchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SHA1Benchmark.java
new file mode 100644
index 0000000..a2b5933
--- /dev/null
+++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SHA1Benchmark.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2022, 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
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.benchmarks;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.util.concurrent.TimeUnit;
+
+import org.eclipse.jgit.junit.MockSystemReader;
+import org.eclipse.jgit.util.SystemReader;
+import org.eclipse.jgit.util.sha1.SHA1;
+import org.eclipse.jgit.util.sha1.SHA1.Sha1Implementation;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
+import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Param;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.Setup;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.annotations.TearDown;
+import org.openjdk.jmh.annotations.Warmup;
+import org.openjdk.jmh.infra.Blackhole;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+@State(Scope.Thread)
+public class SHA1Benchmark {
+
+	@State(Scope.Benchmark)
+	public static class BenchmarkState {
+
+		@Param({ "1", "2", "4", "8", "16", "32", "64" })
+		int size;
+
+		@Param({ "false", "true" })
+		boolean detectCollision;
+
+		@Param({ "java", "jdkNative" })
+		String impl;
+
+		private SecureRandom rnd;
+
+		byte[] content;
+
+		@Setup
+		public void setupBenchmark() {
+			SystemReader.setInstance(new MockSystemReader());
+			if (impl.equalsIgnoreCase(Sha1Implementation.JDKNATIVE.name())) {
+				System.setProperty("org.eclipse.jgit.util.sha1.implementation",
+						Sha1Implementation.JDKNATIVE.name());
+			}
+			content = new byte[size * 1024];
+			try {
+				rnd = SecureRandom.getInstanceStrong();
+			} catch (NoSuchAlgorithmException e) {
+				// ignore
+			}
+			rnd.nextBytes(content);
+		}
+
+		@TearDown
+		public void teardown() {
+			SystemReader.setInstance(null);
+			rnd = null;
+		}
+	}
+
+	@Benchmark
+	@BenchmarkMode({ Mode.AverageTime })
+	@OutputTimeUnit(TimeUnit.MICROSECONDS)
+	@Warmup(iterations = 2, time = 100, timeUnit = TimeUnit.MILLISECONDS)
+	@Measurement(iterations = 2, time = 5, timeUnit = TimeUnit.SECONDS)
+	@Fork(1)
+	public void testSHA1(Blackhole blackhole, BenchmarkState state) {
+		SHA1 hash = SHA1.newInstance();
+		hash.setDetectCollision(state.detectCollision);
+		hash.update(state.content);
+		blackhole.consume(hash.digest());
+	}
+
+	public static void main(String[] args) throws RunnerException {
+		Options opt = new OptionsBuilder()
+				.include(SHA1Benchmark.class.getSimpleName())
+				.forks(1).jvmArgs("-ea").build();
+		new Runner(opt).run();
+	}
+}
diff --git a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SimpleLruCacheBenchmark.java b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SimpleLruCacheBenchmark.java
index 73cc1c2..caefd75 100644
--- a/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SimpleLruCacheBenchmark.java
+++ b/org.eclipse.jgit.benchmarks/src/org/eclipse/jgit/benchmarks/SimpleLruCacheBenchmark.java
@@ -71,8 +71,6 @@ public SimpleLruCache<String, String> testCacheRead() {
 	public static void main(String[] args) throws RunnerException {
 		Options opt = new OptionsBuilder()
 				.include(SimpleLruCacheBenchmark.class.getSimpleName())
-				// .addProfiler(StackProfiler.class)
-				// .addProfiler(GCProfiler.class)
 				.forks(1).jvmArgs("-ea").build();
 		new Runner(opt).run();
 	}
diff --git a/org.eclipse.jgit.coverage/pom.xml b/org.eclipse.jgit.coverage/pom.xml
index c84b8f3..c9c6f0b 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -27,88 +27,88 @@
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.archive</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.apache</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.server</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ui</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
 
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ant.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.http.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.pgm.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.lfs.server.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
-      <version>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-SNAPSHOT</version>
     </dependency>
   </dependencies>
 
diff --git a/org.eclipse.jgit.gpg.bc.test/BUILD b/org.eclipse.jgit.gpg.bc.test/BUILD
index 4c86eff..35b125f 100644
--- a/org.eclipse.jgit.gpg.bc.test/BUILD
+++ b/org.eclipse.jgit.gpg.bc.test/BUILD
@@ -15,6 +15,7 @@
     deps = [
         "//lib:bcpg",
         "//lib:bcprov",
+        "//lib:bcutil",
         "//lib:junit",
         "//org.eclipse.jgit.gpg.bc:gpg-bc",
         "//org.eclipse.jgit:jgit",
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 0c9cee3..09637ba 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -12,13 +12,12 @@
  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="[5.12.1,5.13.0)",
- org.eclipse.jgit.gpg.bc.internal.keys;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.sha1;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.gpg.bc.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.sha1;version="[5.13.2,5.14.0)",
+ org.hamcrest;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.gpg.bc.internal;x-internal:=true,
  org.eclipse.jgit.gpg.bc.internal.keys;x-internal:=true
-Require-Bundle: org.hamcrest.core;bundle-version="[1.1.0,2.0.0)",
- org.hamcrest.library;bundle-version="[1.1.0,2.0.0)"
diff --git a/org.eclipse.jgit.gpg.bc.test/pom.xml b/org.eclipse.jgit.gpg.bc.test/pom.xml
index 6ecbc00..f00ccc0 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc.test</artifactId>
diff --git a/org.eclipse.jgit.gpg.bc/BUILD b/org.eclipse.jgit.gpg.bc/BUILD
index 4fe1e47..9b9ae5f 100644
--- a/org.eclipse.jgit.gpg.bc/BUILD
+++ b/org.eclipse.jgit.gpg.bc/BUILD
@@ -15,6 +15,7 @@
         "//lib:bcpg",
         "//lib:bcpkix",
         "//lib:bcprov",
+        "//lib:bcutil",
         "//lib:slf4j-api",
         "//org.eclipse.jgit:jgit",
     ],
diff --git a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
index f1854b0..68beae6 100644
--- a/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.gpg.bc/META-INF/MANIFEST.MF
@@ -3,35 +3,35 @@
 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="[5.12.1,5.13.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[5.13.2,5.14.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.bouncycastle.asn1;version="[1.65.0,2.0.0)",
- org.bouncycastle.asn1.cryptlib;version="[1.65.0,2.0.0)",
- org.bouncycastle.asn1.x9;version="[1.65.0,2.0.0)",
- org.bouncycastle.bcpg;version="[1.65.0,2.0.0)",
- org.bouncycastle.bcpg.sig;version="[1.65.0,2.0.0)",
- org.bouncycastle.crypto.ec;version="[1.65.0,2.0.0)",
- org.bouncycastle.gpg;version="[1.65.0,2.0.0)",
- org.bouncycastle.gpg.keybox;version="[1.65.0,2.0.0)",
- org.bouncycastle.gpg.keybox.jcajce;version="[1.65.0,2.0.0)",
- org.bouncycastle.jcajce.interfaces;version="[1.65.0,2.0.0)",
- org.bouncycastle.jcajce.util;version="[1.65.0,2.0.0)",
- org.bouncycastle.jce.provider;version="[1.65.0,2.0.0)",
- org.bouncycastle.math.ec;version="[1.65.0,2.0.0)",
- org.bouncycastle.math.field;version="[1.65.0,2.0.0)",
- org.bouncycastle.openpgp;version="[1.65.0,2.0.0)",
- org.bouncycastle.openpgp.jcajce;version="[1.65.0,2.0.0)",
- 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;version="[1.65.0,2.0.0)",
- org.bouncycastle.util.encoders;version="[1.65.0,2.0.0)",
- org.bouncycastle.util.io;version="[1.65.0,2.0.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
+Import-Package: org.bouncycastle.asn1;version="[1.69.0,2.0.0)",
+ org.bouncycastle.asn1.cryptlib;version="[1.69.0,2.0.0)",
+ org.bouncycastle.asn1.x9;version="[1.69.0,2.0.0)",
+ org.bouncycastle.bcpg;version="[1.69.0,2.0.0)",
+ org.bouncycastle.bcpg.sig;version="[1.69.0,2.0.0)",
+ org.bouncycastle.crypto.ec;version="[1.69.0,2.0.0)",
+ org.bouncycastle.gpg;version="[1.69.0,2.0.0)",
+ org.bouncycastle.gpg.keybox;version="[1.69.0,2.0.0)",
+ org.bouncycastle.gpg.keybox.jcajce;version="[1.69.0,2.0.0)",
+ org.bouncycastle.jcajce.interfaces;version="[1.69.0,2.0.0)",
+ org.bouncycastle.jcajce.util;version="[1.69.0,2.0.0)",
+ org.bouncycastle.jce.provider;version="[1.69.0,2.0.0)",
+ org.bouncycastle.math.ec;version="[1.69.0,2.0.0)",
+ org.bouncycastle.math.field;version="[1.69.0,2.0.0)",
+ org.bouncycastle.openpgp;version="[1.69.0,2.0.0)",
+ org.bouncycastle.openpgp.jcajce;version="[1.69.0,2.0.0)",
+ org.bouncycastle.openpgp.operator;version="[1.69.0,2.0.0)",
+ org.bouncycastle.openpgp.operator.jcajce;version="[1.69.0,2.0.0)",
+ 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="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
  org.slf4j;version="[1.7.0,2.0.0)"
-Export-Package: org.eclipse.jgit.gpg.bc;version="5.12.1",
- org.eclipse.jgit.gpg.bc.internal;version="5.12.1";x-friends:="org.eclipse.jgit.gpg.bc.test",
- org.eclipse.jgit.gpg.bc.internal.keys;version="5.12.1";x-friends:="org.eclipse.jgit.gpg.bc.test"
+Export-Package: org.eclipse.jgit.gpg.bc;version="5.13.2",
+ org.eclipse.jgit.gpg.bc.internal;version="5.13.2";x-friends:="org.eclipse.jgit.gpg.bc.test",
+ org.eclipse.jgit.gpg.bc.internal.keys;version="5.13.2";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 cd000ba..d276c08 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.gpg.bc;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.gpg.bc/pom.xml b/org.eclipse.jgit.gpg.bc/pom.xml
index 8c78f6e..4d6afa0 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.gpg.bc</artifactId>
@@ -51,6 +51,11 @@
 
     <dependency>
       <groupId>org.bouncycastle</groupId>
+      <artifactId>bcutil-jdk15on</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
       <artifactId>bcpkix-jdk15on</artifactId>
     </dependency>
 
diff --git a/org.eclipse.jgit.gpg.bc/resources/org/eclipse/jgit/gpg/bc/internal/BCText.properties b/org.eclipse.jgit.gpg.bc/resources/org/eclipse/jgit/gpg/bc/internal/BCText.properties
index e4b1bab..ab83298 100644
--- a/org.eclipse.jgit.gpg.bc/resources/org/eclipse/jgit/gpg/bc/internal/BCText.properties
+++ b/org.eclipse.jgit.gpg.bc/resources/org/eclipse/jgit/gpg/bc/internal/BCText.properties
@@ -13,6 +13,8 @@
 gpgNotASigningKey=Secret key ({0}) is not suitable for signing
 gpgKeyInfo=GPG Key (fingerprint {0})
 gpgSigningCancelled=Signing was cancelled
+logWarnGnuPGHome=Cannot access GPG home directory given by environment variable GNUPGHOME={}
+logWarnGpgHomeProperty=Cannot access GPG home directory given by Java system property jgit.gpg.home={}
 nonSignatureError=Signature does not decode into a signature object
 secretKeyTooShort=Secret key file corrupt; only {0} bytes read
 sexprHexNotClosed=Hex number in s-expression not closed
diff --git a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BCText.java b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BCText.java
index aedf8a5..68ee2fd 100644
--- a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BCText.java
+++ b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BCText.java
@@ -42,6 +42,8 @@ public static BCText get() {
 	/***/ public String gpgNotASigningKey;
 	/***/ public String gpgKeyInfo;
 	/***/ public String gpgSigningCancelled;
+	/***/ public String logWarnGnuPGHome;
+	/***/ public String logWarnGpgHomeProperty;
 	/***/ public String nonSignatureError;
 	/***/ public String secretKeyTooShort;
 	/***/ public String sexprHexNotClosed;
diff --git a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgKeyLocator.java b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgKeyLocator.java
index cf4d3d2..8cd03bd 100644
--- a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgKeyLocator.java
+++ b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgKeyLocator.java
@@ -29,6 +29,8 @@
 import java.text.MessageFormat;
 import java.util.Iterator;
 import java.util.Locale;
+import java.util.function.Consumer;
+import java.util.function.Function;
 
 import org.bouncycastle.gpg.keybox.BlobType;
 import org.bouncycastle.gpg.keybox.KeyBlob;
@@ -98,29 +100,54 @@ private static class NoOpenPgpKeyException extends Exception {
 
 	private static Path findGpgDirectory() {
 		SystemReader system = SystemReader.getInstance();
+		Function<String, Path> resolveTilde = s -> {
+			if (s.startsWith("~/") || s.startsWith("~" + File.separatorChar)) { //$NON-NLS-1$ //$NON-NLS-2$
+				return new File(FS.DETECTED.userHome(), s.substring(2))
+						.getAbsoluteFile().toPath();
+			}
+			return Paths.get(s);
+		};
+		Path path = checkDirectory(system.getProperty("jgit.gpg.home"), //$NON-NLS-1$
+				resolveTilde,
+				s -> log.warn(BCText.get().logWarnGpgHomeProperty, s));
+		if (path != null) {
+			return path;
+		}
+		path = checkDirectory(system.getenv("GNUPGHOME"), resolveTilde, //$NON-NLS-1$
+				s -> log.warn(BCText.get().logWarnGnuPGHome, s));
+		if (path != null) {
+			return path;
+		}
 		if (system.isWindows()) {
 			// On Windows prefer %APPDATA%\gnupg if it exists, even if Cygwin is
 			// used.
-			String appData = system.getenv("APPDATA"); //$NON-NLS-1$
-			if (appData != null && !appData.isEmpty()) {
-				try {
-					Path directory = Paths.get(appData).resolve("gnupg"); //$NON-NLS-1$
-					if (Files.isDirectory(directory)) {
-						return directory;
-					}
-				} catch (SecurityException | InvalidPathException e) {
-					// Ignore and return the default location below.
-				}
+			path = checkDirectory(system.getenv("APPDATA"), //$NON-NLS-1$
+					s -> Paths.get(s).resolve("gnupg"), null); //$NON-NLS-1$
+			if (path != null) {
+				return path;
 			}
 		}
 		// All systems, including Cygwin and even Windows if
 		// %APPDATA%\gnupg doesn't exist: ~/.gnupg
-		File home = FS.DETECTED.userHome();
-		if (home == null) {
-			// Oops. What now?
-			home = new File(".").getAbsoluteFile(); //$NON-NLS-1$
+		return resolveTilde.apply("~/.gnupg"); //$NON-NLS-1$
+	}
+
+	private static Path checkDirectory(String dir,
+			Function<String, Path> toPath, Consumer<String> warn) {
+		if (!StringUtils.isEmptyOrNull(dir)) {
+			try {
+				Path directory = toPath.apply(dir);
+				if (Files.isDirectory(directory)) {
+					return directory;
+				}
+			} catch (SecurityException | InvalidPathException e) {
+				// Ignore, warn, and try other known directories
+			}
+			if (warn != null) {
+				warn.accept(dir);
+			}
 		}
-		return home.toPath().resolve(".gnupg"); //$NON-NLS-1$
+		return null;
 	}
 
 	/**
diff --git a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSigner.java b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSigner.java
index 211bd7b..763b7f7 100644
--- a/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSigner.java
+++ b/org.eclipse.jgit.gpg.bc/src/org/eclipse/jgit/gpg/bc/internal/BouncyCastleGpgSigner.java
@@ -195,7 +195,7 @@ public void signObject(@NonNull ObjectBuilder object,
 				}
 			}
 			if (userId != null) {
-				subpackets.setSignerUserID(false, userId);
+				subpackets.addSignerUserID(false, userId);
 			}
 			signatureGenerator
 					.setHashedSubpackets(subpackets.generate());
diff --git a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
index 69799a9..a707cbd 100644
--- a/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.http.apache/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.http.apache
 Bundle-SymbolicName: org.eclipse.jgit.http.apache
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
@@ -25,11 +25,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="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)"
-Export-Package: org.eclipse.jgit.transport.http.apache;version="5.12.1";
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)"
+Export-Package: org.eclipse.jgit.transport.http.apache;version="5.13.2";
   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 0210cf6..8b48031 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.apache;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.apache/pom.xml b/org.eclipse.jgit.http.apache/pom.xml
index b3fb85d..5455623 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.apache</artifactId>
diff --git a/org.eclipse.jgit.http.server/.settings/.api_filters b/org.eclipse.jgit.http.server/.settings/.api_filters
new file mode 100644
index 0000000..951a53b
--- /dev/null
+++ b/org.eclipse.jgit.http.server/.settings/.api_filters
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<component id="org.eclipse.jgit.http.server" version="2">
+    <resource path="src/org/eclipse/jgit/http/server/GitServlet.java" type="org.eclipse.jgit.http.server.GitServlet">
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.9.1"/>
+                <message_argument value="setReceivePackErrorHandler(ReceivePackErrorHandler)"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.9.1"/>
+                <message_argument value="setUploadPackErrorHandler(UploadPackErrorHandler)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+</component>
diff --git a/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.server/META-INF/MANIFEST.MF
index c20a9e0..a008bcc 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.http.server;version="5.12.1",
- org.eclipse.jgit.http.server.glue;version="5.12.1";
+Export-Package: org.eclipse.jgit.http.server;version="5.13.2",
+ org.eclipse.jgit.http.server.glue;version="5.13.2";
   uses:="javax.servlet,javax.servlet.http",
- org.eclipse.jgit.http.server.resolver;version="5.12.1";
+ org.eclipse.jgit.http.server.resolver;version="5.13.2";
   uses:="org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.transport,
@@ -18,14 +18,14 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: javax.servlet;version="[2.5.0,3.2.0)",
  javax.servlet.http;version="[2.5.0,3.2.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.parser;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.resolver;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)"
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.resolver;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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 856f91e..16582df 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.http.server;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.http.server/pom.xml b/org.eclipse.jgit.http.server/pom.xml
index f142173..1e70fcd 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.server</artifactId>
diff --git a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
index 2759b8a..c4f845e 100644
--- a/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
+++ b/org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java
@@ -195,6 +195,8 @@ public void flush() throws IOException {
 				log(up.getRepository(), e.getCause());
 				consumeRequestBody(req);
 				out.close();
+			} finally {
+				up.close();
 			}
 		};
 
diff --git a/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.http.test/META-INF/MANIFEST.MF
index b8a653d..4b17a9c 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -28,30 +28,29 @@
  org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.thread;version="[9.4.5,10.0.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.http.server;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.http.server.glue;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.http.server.resolver;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http.apache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.resolver;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.hamcrest;version="[1.1.0,2.0.0)",
- org.hamcrest.core;version="[1.1.0,2.0.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.http.server;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.http.server.glue;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.http.server.resolver;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http.apache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.resolver;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.hamcrest;version="[1.1.0,3.0.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)",
  org.junit.runner;version="[4.13,5.0.0)",
  org.junit.runners;version="[4.13,5.0.0)"
-Require-Bundle: org.hamcrest.library;bundle-version="[1.1.0,2.0.0)"
diff --git a/org.eclipse.jgit.http.test/build.properties b/org.eclipse.jgit.http.test/build.properties
index a909f13..a12a660 100644
--- a/org.eclipse.jgit.http.test/build.properties
+++ b/org.eclipse.jgit.http.test/build.properties
@@ -4,5 +4,4 @@
 bin.includes = META-INF/,\
                .,\
                plugin.properties
-additional.bundles = org.apache.log4j,\
-                     org.slf4j.binding.log4j12
+additional.bundles = org.slf4j.binding.simple
diff --git a/org.eclipse.jgit.http.test/pom.xml b/org.eclipse.jgit.http.test/pom.xml
index 67b4012..314c5e6 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.http.test</artifactId>
@@ -52,9 +52,9 @@
 
     <dependency>
       <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-library</artifactId>
+      <artifactId>hamcrest</artifactId>
       <scope>test</scope>
-      <version>[1.1.0,2.0.0)</version>
+      <version>${hamcrest-version}</version>
     </dependency>
 
     <dependency>
diff --git a/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF b/org.eclipse.jgit.junit.http/META-INF/MANIFEST.MF
index b5e6ff3..cdfff08 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
@@ -22,16 +22,16 @@
  org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.ssl;version="[9.4.5,10.0.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.http.server;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.resolver;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.http.server;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.resolver;version="[5.13.2,5.14.0)",
  org.junit;version="[4.13,5.0.0)"
-Export-Package: org.eclipse.jgit.junit.http;version="5.12.1";
+Export-Package: org.eclipse.jgit.junit.http;version="5.13.2";
   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 d9204d3..f3a6738 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.http;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.http/pom.xml b/org.eclipse.jgit.junit.http/pom.xml
index b155ff3..f0b9fe3 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 b777174..aa116f3 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.sshd.common;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.config.keys;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.file.virtualfs;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.helpers;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.io;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.kex;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.keyprovider;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.session;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.signature;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.buffer;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.logging;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.security;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.threads;version="[2.6.0,2.7.0)",
- org.apache.sshd.core;version="[2.6.0,2.7.0)",
- org.apache.sshd.server;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.auth;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.auth.gss;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.auth.keyboard;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.auth.password;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.command;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.session;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.shell;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.subsystem;version="[2.6.0,2.7.0)",
- org.apache.sshd.sftp;version="[2.6.0,2.7.0)",
- org.apache.sshd.sftp.server;version="[2.6.0,2.7.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+Import-Package: org.apache.sshd.common;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.config.keys;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.file.virtualfs;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.helpers;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.io;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.kex;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.keyprovider;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.session;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.signature;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.buffer;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.logging;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.security;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.threads;version="[2.7.0,2.8.0)",
+ org.apache.sshd.core;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.auth;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.auth.gss;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.auth.keyboard;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.auth.password;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.command;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.session;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.shell;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.subsystem;version="[2.7.0,2.8.0)",
+ org.apache.sshd.sftp;version="[2.7.0,2.8.0)",
+ org.apache.sshd.sftp.server;version="[2.7.0,2.8.0)",
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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="5.12.1"
+Export-Package: org.eclipse.jgit.junit.ssh;version="5.13.2"
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 eb562a0..50cc7dd 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit.ssh;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit.ssh/pom.xml b/org.eclipse.jgit.junit.ssh/pom.xml
index efec573..d826aab 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 fa61ce2..0c8667c 100644
--- a/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.junit/META-INF/MANIFEST.MF
@@ -3,35 +3,35 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.junit
 Bundle-SymbolicName: org.eclipse.jgit.junit
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.dircache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.merge;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="5.12.1",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.time;version="[5.12.1,5.13.0)",
+Import-Package: org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.dircache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.merge;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="5.13.2",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.time;version="[5.13.2,5.14.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="5.12.1";
+Export-Package: org.eclipse.jgit.junit;version="5.13.2";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -44,4 +44,4 @@
    org.junit.runners.model,
    org.junit.runner,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.junit.time;version="5.12.1";uses:="org.eclipse.jgit.util.time"
+ org.eclipse.jgit.junit.time;version="5.13.2";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 a4b46e4..8af72d0 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.junit;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.junit;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.junit/pom.xml b/org.eclipse.jgit.junit/pom.xml
index 884abf0..129794f 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.junit</artifactId>
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 296ff9e..be94fa4 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -28,25 +28,25 @@
  org.eclipse.jetty.util.log;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.security;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.thread;version="[9.4.5,10.0.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.server;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.server.fs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.test;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.hamcrest.core;version="[1.1.0,2.0.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.server;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.test;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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)",
  org.junit.runner;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 318f74e..e3766a3 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 1596feb..fd639ab 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs.server;version="5.12.1";
+Export-Package: org.eclipse.jgit.lfs.server;version="5.13.2";
   uses:="javax.servlet.http,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.fs;version="5.12.1";
+ org.eclipse.jgit.lfs.server.fs;version="5.13.2";
   uses:="javax.servlet,
    javax.servlet.http,
    org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib",
- org.eclipse.jgit.lfs.server.internal;version="5.12.1";x-internal:=true,
- org.eclipse.jgit.lfs.server.s3;version="5.12.1";
+ org.eclipse.jgit.lfs.server.internal;version="5.13.2";x-internal:=true,
+ org.eclipse.jgit.lfs.server.s3;version="5.13.2";
   uses:="org.eclipse.jgit.lfs.server,
    org.eclipse.jgit.lfs.lib"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -24,15 +24,15 @@
  javax.servlet.annotation;version="[3.1.0,4.0.0)",
  javax.servlet.http;version="[3.1.0,4.0.0)",
  org.apache.http;version="[4.3.0,5.0.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http.apache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http.apache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
  org.slf4j;version="[1.7.0,2.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 5e4ae52..f9d349a 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs.server;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs.server/pom.xml b/org.eclipse.jgit.lfs.server/pom.xml
index 02d70fb..d19d2e8 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.lfs.server</artifactId>
diff --git a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
index 7399ba1..2c19952 100644
--- a/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs.test/META-INF/MANIFEST.MF
@@ -3,24 +3,24 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs.test
 Bundle-SymbolicName: org.eclipse.jgit.lfs.test
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.attributes;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.hamcrest.core;version="[1.1.0,2.0.0)",
+Import-Package: org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.attributes;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.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="5.12.1";x-friends:="org.eclipse.jgit.lfs.server.test"
+Export-Package: org.eclipse.jgit.lfs.test;version="5.13.2";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 5e58aa5..9a7dfd8 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 db8247a..bbf1666 100644
--- a/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.lfs/META-INF/MANIFEST.MF
@@ -3,31 +3,31 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.lfs
 Bundle-SymbolicName: org.eclipse.jgit.lfs
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.eclipse.jgit.lfs;version="5.12.1",
- org.eclipse.jgit.lfs.errors;version="5.12.1",
- org.eclipse.jgit.lfs.internal;version="5.12.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="5.12.1"
+Export-Package: org.eclipse.jgit.lfs;version="5.13.2",
+ org.eclipse.jgit.lfs.errors;version="5.13.2",
+ org.eclipse.jgit.lfs.internal;version="5.13.2";x-friends:="org.eclipse.jgit.lfs.test,org.eclipse.jgit.lfs.server.fs,org.eclipse.jgit.lfs.server",
+ org.eclipse.jgit.lfs.lib;version="5.13.2"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: com.google.gson;version="[2.8.0,3.0.0)",
  com.google.gson.stream;version="[2.8.0,3.0.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)";resolution:=optional,
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.attributes;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.diff;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.hooks;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)"
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)";resolution:=optional,
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.attributes;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.diff;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.hooks;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.0)"
diff --git a/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.lfs/META-INF/SOURCE-MANIFEST.MF
index 9aca20a..a9e8cdd 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.lfs;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.lfs/pom.xml b/org.eclipse.jgit.lfs/pom.xml
index 505d0e9..ce14437 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 ed16046..70ab819 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="5.12.1.qualifier"
+      version="5.13.2.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 6e0d1df..42b35e8 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 d148646..b5dcc65 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="5.13.2" 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 59863ee..9036883 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 d392f13..23f8aa7 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="5.13.2" 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 dc4f3ec..d87b7ec 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.junit.feature/feature.xml
index a3730b7..7c52f88 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="5.12.1.qualifier"
+      version="5.13.2.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="5.12.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="5.13.2" 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 5717376..5453b2a 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 bfaa0fa..c0d9e40 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="5.13.2" 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 3e34991..4c133ff 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.pgm.feature/feature.xml
index 46556f6..1e18de9 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="5.12.1.qualifier"
+      version="5.13.2.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="5.12.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.lfs" version="5.12.1" match="equivalent"/>
-      <import feature="org.eclipse.jgit.ssh.apache" version="5.12.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="5.13.2" match="equivalent"/>
+      <import feature="org.eclipse.jgit.lfs" version="5.13.2" match="equivalent"/>
+      <import feature="org.eclipse.jgit.ssh.apache" version="5.13.2" 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 2ba4119..239194d 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <groupId>org.eclipse.jgit.feature</groupId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml
index a56cf0a..3417e09 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.repository/category.xml
@@ -111,12 +111,6 @@
    <bundle id="org.apache.httpcomponents.httpcore.source">
       <category name="JGit-dependency-bundles"/>
    </bundle>
-   <bundle id="org.apache.log4j">
-      <category name="JGit-dependency-bundles"/>
-   </bundle>
-   <bundle id="org.apache.log4j.source">
-      <category name="JGit-dependency-bundles"/>
-   </bundle>
    <bundle id="org.apache.sshd.osgi">
       <category name="JGit-dependency-bundles"/>
    </bundle>
@@ -147,6 +141,12 @@
    <bundle id="org.bouncycastle.bcprov.source">
       <category name="JGit-dependency-bundles"/>
    </bundle>
+   <bundle id="org.bouncycastle.bcutil">
+      <category name="JGit-dependency-bundles"/>
+   </bundle>
+   <bundle id="org.bouncycastle.bcutil.source">
+      <category name="JGit-dependency-bundles"/>
+   </bundle>
    <bundle id="org.kohsuke.args4j">
       <category name="JGit-dependency-bundles"/>
    </bundle>
@@ -159,10 +159,10 @@
    <bundle id="org.slf4j.api.source">
       <category name="JGit-dependency-bundles"/>
    </bundle>
-   <bundle id="org.slf4j.binding.log4j12">
+   <bundle id="org.slf4j.binding.simple">
       <category name="JGit-dependency-bundles"/>
    </bundle>
-   <bundle id="org.slf4j.binding.log4j12.source">
+   <bundle id="org.slf4j.binding.simple.source">
       <category name="JGit-dependency-bundles"/>
    </bundle>
    <bundle id="org.tukaani.xz">
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 68781c1..3a8f1f0 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.repository</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.source.feature/feature.xml
index 3607076..f4d3dd8 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="5.13.2" 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 fb3fcad..429e93a 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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>5.12.1-SNAPSHOT</version>
+      <version>5.13.2-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 d748508..96743eb 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import feature="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import feature="org.eclipse.jgit" version="5.13.2" 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 a9cd770..6cedb63 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 8147102..df166c6 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="5.12.1.qualifier"
+      version="5.13.2.qualifier"
       provider-name="%providerName">
 
    <description url="http://www.eclipse.org/jgit/">
@@ -23,7 +23,7 @@
    </url>
 
    <requires>
-      <import plugin="org.eclipse.jgit" version="5.12.1" match="equivalent"/>
+      <import plugin="org.eclipse.jgit" version="5.13.2" 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 dcf998f..0feed9d 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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
index 92d1ade..16ba671 100644
--- 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
@@ -2,4 +2,4 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: JGit Target Platform Bundle
 Bundle-SymbolicName: org.eclipse.jgit.target
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target
index 5ea5e1f..6a63544 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.10" sequenceNumber="1638646958">
+<target name="jgit-4.10" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd
index 3fb33d8..b84531a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.10.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.10" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2018-12/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target
index be5c036..a0c7710 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.11" sequenceNumber="1638646958">
+<target name="jgit-4.11" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd
index f29a9fe..5ce2914 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.11.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.11" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2019-03/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target
index b87e086..21a5797 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.12" sequenceNumber="1638646958">
+<target name="jgit-4.12" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd
index 35bf3b0..9419fa4 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.12.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.12" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2019-06/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target
index 01fc3bd..e7e9c68 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.13" sequenceNumber="1638646958">
+<target name="jgit-4.13" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd
index 6da9b00..0009050 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.13.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.13" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2019-09/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.target
index dd67575..aa104b5 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.14" sequenceNumber="1638646958">
+<target name="jgit-4.14" sequenceNumber="1639438136">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.tpd
index 9514d61..b15127b 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.14.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.14" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2019-12/201912181000/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.target
index a67ec8e..9854511 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.15" sequenceNumber="1638646958">
+<target name="jgit-4.15" sequenceNumber="1639438136">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.tpd
index edf5cec..3702bae 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.15.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.15" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-03/202003181000/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.target
index 12f7038..202faf1 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.16" sequenceNumber="1638646958">
+<target name="jgit-4.16" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.tpd
index 54e8a96..a3e056a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.16.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.16" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-06/" {
 	org.eclipse.osgi lazy
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 b5a1eba..a0ea860 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,79 +1,80 @@
 <?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="1638646958">
+<target name="jgit-4.17" sequenceNumber="1639438139">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
index 2b2af1a..d54157a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.17.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.17" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-09/" {
 	org.eclipse.osgi lazy
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 787bfde..168ae2c 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,79 +1,80 @@
 <?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="1638646958">
+<target name="jgit-4.18" sequenceNumber="1639438139">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
index 0f42bb6..5886b71 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.18.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.18" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2020-12/" {
 	org.eclipse.osgi lazy
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 54f5880..a686b5f 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,79 +1,80 @@
 <?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="1638646958">
+<target name="jgit-4.19-staging" sequenceNumber="1639438136">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
index 5e4305c..0221796 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.19.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.19-staging" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/staging/2021-03/" {
 	org.eclipse.osgi lazy
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 6b70dd3..86183bf 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,79 +1,80 @@
 <?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="1638646959">
+<target name="jgit-4.20" sequenceNumber="1639438139">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
index c750cbe..3cad11f 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.20.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.20" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2021-06/" {
 	org.eclipse.osgi lazy
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
new file mode 100644
index 0000000..4d6beef
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.target
@@ -0,0 +1,97 @@
+<?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="1639438138">
+  <locations>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
+    </location>
+    <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
+      <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
+      <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
+      <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
+      <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
+      <unit id="javax.servlet" version="3.1.0.v201410161800"/>
+      <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
+      <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
+      <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
+      <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
+      <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
+      <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
+      <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
+      <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
+      <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
+      <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
+      <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
+      <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
+      <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
+      <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
+      <unit id="org.mockito.source" version="2.23.0.v20200310-1642"/>
+      <unit id="org.objenesis" version="2.6.0.v20180420-1519"/>
+      <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
+      <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
+    </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/releases/2021-09/"/>
+    </location>
+  </locations>
+</target>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
new file mode 100644
index 0000000..d3bbbdb
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.21.tpd
@@ -0,0 +1,8 @@
+target "jgit-4.21" with source configurePhase
+
+include "projects/jetty-9.4.x.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
+
+location "https://download.eclipse.org/releases/2021-09/" {
+	org.eclipse.osgi lazy
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target
index 44b3d8e..d56f3d6 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.6" sequenceNumber="1638646958">
+<target name="jgit-4.6" sequenceNumber="1639438149">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd
index 96a6073..e348974 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.6.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.6" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/neon/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target
index ff01fa1..8f82cfa 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.7" sequenceNumber="1638646958">
+<target name="jgit-4.7" sequenceNumber="1639438145">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd
index bfb68b2..9773d54 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.7.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.7" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/oxygen/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target
index 7104e33..cc02ef5 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.8" sequenceNumber="1638646958">
+<target name="jgit-4.8" sequenceNumber="1639438139">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd
index e3e6b21..efa81cd 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.8.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.8" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/photon/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target
index 5aa6c90..997abb4 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.target
@@ -1,79 +1,80 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
 <!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
-<target name="jgit-4.9" sequenceNumber="1638646958">
+<target name="jgit-4.9" sequenceNumber="1639438138">
   <locations>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="org.eclipse.jetty.client" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.client.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.continuation.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.http.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.io.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.security.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.server.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.servlet.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.source" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax" version="9.4.41.v20210516"/>
-      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.41.v20210516"/>
-      <repository id="jetty-9.4.40" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/"/>
+      <unit id="org.eclipse.jetty.client" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.client.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.continuation.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.http.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.io.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.security.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.server.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.servlet.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.source" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax" version="9.4.43.v20210629"/>
+      <unit id="org.eclipse.jetty.util.ajax.source" version="9.4.43.v20210629"/>
+      <repository id="jetty-9.4.x" location="https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
-      <unit id="com.google.gson" version="2.8.6.v20201231-1626"/>
-      <unit id="com.google.gson.source" version="2.8.6.v20201231-1626"/>
+      <unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
+      <unit id="com.google.gson.source" version="2.8.8.v20211029-0838"/>
       <unit id="com.jcraft.jsch" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jsch.source" version="0.1.55.v20190404-1902"/>
       <unit id="com.jcraft.jzlib" version="1.1.1.v201205102305"/>
       <unit id="com.jcraft.jzlib.source" version="1.1.1.v201205102305"/>
-      <unit id="javaewah" version="1.1.7.v20200107-0831"/>
-      <unit id="javaewah.source" version="1.1.7.v20200107-0831"/>
+      <unit id="javaewah" version="1.1.13.v20211029-0839"/>
+      <unit id="javaewah.source" version="1.1.13.v20211029-0839"/>
       <unit id="javax.servlet" version="3.1.0.v201410161800"/>
       <unit id="javax.servlet.source" version="3.1.0.v201410161800"/>
       <unit id="net.bytebuddy.byte-buddy" version="1.9.0.v20181107-1410"/>
       <unit id="net.bytebuddy.byte-buddy-agent" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy-agent.source" version="1.9.0.v20181106-1534"/>
       <unit id="net.bytebuddy.byte-buddy.source" version="1.9.0.v20181107-1410"/>
-      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20181102-1323"/>
-      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20181102-1323"/>
-      <unit id="org.apache.ant" version="1.10.10.v20210426-1926"/>
-      <unit id="org.apache.ant.source" version="1.10.10.v20210426-1926"/>
+      <unit id="net.i2p.crypto.eddsa" version="0.3.0.v20210923-1401"/>
+      <unit id="net.i2p.crypto.eddsa.source" version="0.3.0.v20210923-1401"/>
+      <unit id="org.apache.ant" version="1.10.12.v20211102-1452"/>
+      <unit id="org.apache.ant.source" version="1.10.12.v20211102-1452"/>
       <unit id="org.apache.commons.codec" version="1.14.0.v20200818-1422"/>
       <unit id="org.apache.commons.codec.source" version="1.14.0.v20200818-1422"/>
-      <unit id="org.apache.commons.compress" version="1.19.0.v20200106-2343"/>
-      <unit id="org.apache.commons.compress.source" version="1.19.0.v20200106-2343"/>
+      <unit id="org.apache.commons.compress" version="1.21.0.v20211103-2100"/>
+      <unit id="org.apache.commons.compress.source" version="1.21.0.v20211103-2100"/>
       <unit id="org.apache.commons.logging" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.commons.logging.source" version="1.2.0.v20180409-1502"/>
       <unit id="org.apache.httpcomponents.httpclient" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpclient.source" version="4.5.13.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore" version="4.4.14.v20210128-2225"/>
       <unit id="org.apache.httpcomponents.httpcore.source" version="4.4.14.v20210128-2225"/>
-      <unit id="org.apache.log4j" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.log4j.source" version="1.2.15.v201012070815"/>
-      <unit id="org.apache.sshd.osgi" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.osgi.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp" version="2.6.0.v20210201-2003"/>
-      <unit id="org.apache.sshd.sftp.source" version="2.6.0.v20210201-2003"/>
-      <unit id="org.assertj" version="3.14.0.v20200120-1926"/>
-      <unit id="org.assertj.source" version="3.14.0.v20200120-1926"/>
-      <unit id="org.bouncycastle.bcpg" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpg.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcpkix.source" version="1.65.0.v20200527-1955"/>
-      <unit id="org.bouncycastle.bcprov" version="1.65.1.v20200529-1514"/>
-      <unit id="org.bouncycastle.bcprov.source" version="1.65.1.v20200529-1514"/>
-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>
+      <unit id="org.apache.sshd.osgi" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.osgi.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp" version="2.7.0.v20210623-0618"/>
+      <unit id="org.apache.sshd.sftp.source" version="2.7.0.v20210623-0618"/>
+      <unit id="org.assertj" version="3.20.2.v20210706-1104"/>
+      <unit id="org.assertj.source" version="3.20.2.v20210706-1104"/>
+      <unit id="org.bouncycastle.bcpg" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpg.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcpkix.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcprov" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcprov.source" version="1.69.0.v20210923-1401"/>
+      <unit id="org.bouncycastle.bcutil" version="1.69.0.v20210713-1924"/>
+      <unit id="org.bouncycastle.bcutil.source" version="1.69.0.v20210713-1924"/>
+      <unit id="org.hamcrest" version="2.2.0.v20210711-0821"/>
+      <unit id="org.hamcrest.source" version="2.2.0.v20210711-0821"/>
       <unit id="org.hamcrest.core" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.core.source" version="1.3.0.v20180420-1519"/>
       <unit id="org.hamcrest.library" version="1.3.0.v20180524-2246"/>
       <unit id="org.hamcrest.library.source" version="1.3.0.v20180524-2246"/>
-      <unit id="org.junit" version="4.13.0.v20200204-1500"/>
-      <unit id="org.junit.source" version="4.13.0.v20200204-1500"/>
+      <unit id="org.junit" version="4.13.2.v20211018-1956"/>
+      <unit id="org.junit.source" version="4.13.2.v20211018-1956"/>
       <unit id="org.kohsuke.args4j" version="2.33.0.v20160323-2218"/>
       <unit id="org.kohsuke.args4j.source" version="2.33.0.v20160323-2218"/>
       <unit id="org.mockito" version="2.23.0.v20200310-1642"/>
@@ -82,11 +83,11 @@
       <unit id="org.objenesis.source" version="2.6.0.v20180420-1519"/>
       <unit id="org.slf4j.api" version="1.7.30.v20200204-2150"/>
       <unit id="org.slf4j.api.source" version="1.7.30.v20200204-2150"/>
-      <unit id="org.slf4j.binding.log4j12" version="1.7.30.v20201108-2042"/>
-      <unit id="org.slf4j.binding.log4j12.source" version="1.7.30.v20201108-2042"/>
-      <unit id="org.tukaani.xz" version="1.8.0.v20180207-1613"/>
-      <unit id="org.tukaani.xz.source" version="1.8.0.v20180207-1613"/>
-      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210602031627/repository"/>
+      <unit id="org.slf4j.binding.simple" version="1.7.30.v20200204-2150"/>
+      <unit id="org.slf4j.binding.simple.source" version="1.7.30.v20200204-2150"/>
+      <unit id="org.tukaani.xz" version="1.9.0.v20210624-1259"/>
+      <unit id="org.tukaani.xz.source" version="1.9.0.v20210624-1259"/>
+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository"/>
     </location>
     <location includeMode="slicer" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="true" type="InstallableUnit">
       <unit id="org.eclipse.osgi" version="0.0.0"/>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd
index 938d80b..5f70306 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/jgit-4.9.tpd
@@ -1,7 +1,7 @@
 target "jgit-4.9" with source configurePhase
 
 include "projects/jetty-9.4.x.tpd"
-include "orbit/R20210602031627-2021-06.tpd"
+include "orbit/R20211213173813-2021-12.tpd"
 
 location "https://download.eclipse.org/releases/2018-09/" {
 	org.eclipse.osgi lazy
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20210825222808-2021-09.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20210825222808-2021-09.tpd
new file mode 100644
index 0000000..059a584
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20210825222808-2021-09.tpd
@@ -0,0 +1,69 @@
+target "R20210825222808-2021-09" with source configurePhase
+// see https://download.eclipse.org/tools/orbit/downloads/
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20210825222808/repository" {
+	com.google.gson [2.8.7.v20210624-1215,2.8.7.v20210624-1215]
+	com.google.gson.source [2.8.7.v20210624-1215,2.8.7.v20210624-1215]
+	com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902]
+	com.jcraft.jsch.source [0.1.55.v20190404-1902,0.1.55.v20190404-1902]
+	com.jcraft.jzlib [1.1.1.v201205102305,1.1.1.v201205102305]
+	com.jcraft.jzlib.source [1.1.1.v201205102305,1.1.1.v201205102305]
+	javaewah [1.1.12.v20210622-2206,1.1.12.v20210622-2206]
+	javaewah.source [1.1.12.v20210622-2206,1.1.12.v20210622-2206]
+	javax.servlet [3.1.0.v201410161800,3.1.0.v201410161800]
+	javax.servlet.source [3.1.0.v201410161800,3.1.0.v201410161800]
+	net.bytebuddy.byte-buddy [1.9.0.v20181107-1410,1.9.0.v20181107-1410]
+	net.bytebuddy.byte-buddy-agent [1.9.0.v20181106-1534,1.9.0.v20181106-1534]
+	net.bytebuddy.byte-buddy-agent.source [1.9.0.v20181106-1534,1.9.0.v20181106-1534]
+	net.bytebuddy.byte-buddy.source [1.9.0.v20181107-1410,1.9.0.v20181107-1410]
+	net.i2p.crypto.eddsa [0.3.0.v20181102-1323,0.3.0.v20181102-1323]
+	net.i2p.crypto.eddsa.source [0.3.0.v20181102-1323,0.3.0.v20181102-1323]
+	org.apache.ant [1.10.11.v20210720-1445,1.10.11.v20210720-1445]
+	org.apache.ant.source [1.10.11.v20210720-1445,1.10.11.v20210720-1445]
+	org.apache.commons.codec [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
+	org.apache.commons.codec.source [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
+	org.apache.commons.compress [1.20.0.v20210713-1928,1.20.0.v20210713-1928]
+	org.apache.commons.compress.source [1.20.0.v20210713-1928,1.20.0.v20210713-1928]
+	org.apache.commons.logging [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.commons.logging.source [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.httpcomponents.httpclient [4.5.13.v20210128-2225,4.5.13.v20210128-2225]
+	org.apache.httpcomponents.httpclient.source [4.5.13.v20210128-2225,4.5.13.v20210128-2225]
+	org.apache.httpcomponents.httpcore [4.4.14.v20210128-2225,4.4.14.v20210128-2225]
+	org.apache.httpcomponents.httpcore.source [4.4.14.v20210128-2225,4.4.14.v20210128-2225]
+	org.apache.log4j [1.2.15.v201012070815,1.2.15.v201012070815]
+	org.apache.log4j.source [1.2.15.v201012070815,1.2.15.v201012070815]
+	org.apache.sshd.osgi [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.osgi.source [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.sftp [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.sftp.source [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.assertj [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.assertj.source [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.bouncycastle.bcpg [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpg.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpkix [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpkix.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcprov [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcprov.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcutil [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcutil.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.hamcrest [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.source [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.library [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.hamcrest.library.source [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.junit [4.13.0.v20200204-1500,4.13.0.v20200204-1500]
+	org.junit.source [4.13.0.v20200204-1500,4.13.0.v20200204-1500]
+	org.kohsuke.args4j [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.kohsuke.args4j.source [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.mockito [2.23.0.v20200310-1642,2.23.0.v20200310-1642]
+	org.mockito.source [2.23.0.v20200310-1642,2.23.0.v20200310-1642]
+	org.objenesis [2.6.0.v20180420-1519,2.6.0.v20180420-1519]
+	org.objenesis.source [2.6.0.v20180420-1519,2.6.0.v20180420-1519]
+	org.slf4j.api [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.slf4j.api.source [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.slf4j.binding.log4j12 [1.7.30.v20201108-2042,1.7.30.v20201108-2042]
+	org.slf4j.binding.log4j12.source [1.7.30.v20201108-2042,1.7.30.v20201108-2042]
+	org.tukaani.xz [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+	org.tukaani.xz.source [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20211213173813-2021-12.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20211213173813-2021-12.tpd
new file mode 100644
index 0000000..aeeed56
--- /dev/null
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/orbit/R20211213173813-2021-12.tpd
@@ -0,0 +1,67 @@
+target "R20211213173813-2021-12" with source configurePhase
+// see https://download.eclipse.org/tools/orbit/downloads/
+
+location "https://download.eclipse.org/tools/orbit/downloads/drops/R20211213173813/repository" {
+	com.google.gson [2.8.8.v20211029-0838,2.8.8.v20211029-0838]
+	com.google.gson.source [2.8.8.v20211029-0838,2.8.8.v20211029-0838]
+	com.jcraft.jsch [0.1.55.v20190404-1902,0.1.55.v20190404-1902]
+	com.jcraft.jsch.source [0.1.55.v20190404-1902,0.1.55.v20190404-1902]
+	com.jcraft.jzlib [1.1.1.v201205102305,1.1.1.v201205102305]
+	com.jcraft.jzlib.source [1.1.1.v201205102305,1.1.1.v201205102305]
+	javaewah [1.1.13.v20211029-0839,1.1.13.v20211029-0839]
+	javaewah.source [1.1.13.v20211029-0839,1.1.13.v20211029-0839]
+	javax.servlet [3.1.0.v201410161800,3.1.0.v201410161800]
+	javax.servlet.source [3.1.0.v201410161800,3.1.0.v201410161800]
+	net.bytebuddy.byte-buddy [1.9.0.v20181107-1410,1.9.0.v20181107-1410]
+	net.bytebuddy.byte-buddy-agent [1.9.0.v20181106-1534,1.9.0.v20181106-1534]
+	net.bytebuddy.byte-buddy-agent.source [1.9.0.v20181106-1534,1.9.0.v20181106-1534]
+	net.bytebuddy.byte-buddy.source [1.9.0.v20181107-1410,1.9.0.v20181107-1410]
+	net.i2p.crypto.eddsa [0.3.0.v20210923-1401,0.3.0.v20210923-1401]
+	net.i2p.crypto.eddsa.source [0.3.0.v20210923-1401,0.3.0.v20210923-1401]
+	org.apache.ant [1.10.12.v20211102-1452,1.10.12.v20211102-1452]
+	org.apache.ant.source [1.10.12.v20211102-1452,1.10.12.v20211102-1452]
+	org.apache.commons.codec [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
+	org.apache.commons.codec.source [1.14.0.v20200818-1422,1.14.0.v20200818-1422]
+	org.apache.commons.compress [1.21.0.v20211103-2100,1.21.0.v20211103-2100]
+	org.apache.commons.compress.source [1.21.0.v20211103-2100,1.21.0.v20211103-2100]
+	org.apache.commons.logging [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.commons.logging.source [1.2.0.v20180409-1502,1.2.0.v20180409-1502]
+	org.apache.httpcomponents.httpclient [4.5.13.v20210128-2225,4.5.13.v20210128-2225]
+	org.apache.httpcomponents.httpclient.source [4.5.13.v20210128-2225,4.5.13.v20210128-2225]
+	org.apache.httpcomponents.httpcore [4.4.14.v20210128-2225,4.4.14.v20210128-2225]
+	org.apache.httpcomponents.httpcore.source [4.4.14.v20210128-2225,4.4.14.v20210128-2225]
+	org.apache.sshd.osgi [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.osgi.source [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.sftp [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.apache.sshd.sftp.source [2.7.0.v20210623-0618,2.7.0.v20210623-0618]
+	org.assertj [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.assertj.source [3.20.2.v20210706-1104,3.20.2.v20210706-1104]
+	org.bouncycastle.bcpg [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpg.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpkix [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcpkix.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcprov [1.69.0.v20210923-1401,1.69.0.v20210923-1401]
+	org.bouncycastle.bcprov.source [1.69.0.v20210923-1401,1.69.0.v20210923-1401]
+	org.bouncycastle.bcutil [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.bouncycastle.bcutil.source [1.69.0.v20210713-1924,1.69.0.v20210713-1924]
+	org.hamcrest [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.source [2.2.0.v20210711-0821,2.2.0.v20210711-0821]
+	org.hamcrest.core [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.core.source [1.3.0.v20180420-1519,1.3.0.v20180420-1519]
+	org.hamcrest.library [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.hamcrest.library.source [1.3.0.v20180524-2246,1.3.0.v20180524-2246]
+	org.junit [4.13.2.v20211018-1956,4.13.2.v20211018-1956]
+	org.junit.source [4.13.2.v20211018-1956,4.13.2.v20211018-1956]
+	org.kohsuke.args4j [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.kohsuke.args4j.source [2.33.0.v20160323-2218,2.33.0.v20160323-2218]
+	org.mockito [2.23.0.v20200310-1642,2.23.0.v20200310-1642]
+	org.mockito.source [2.23.0.v20200310-1642,2.23.0.v20200310-1642]
+	org.objenesis [2.6.0.v20180420-1519,2.6.0.v20180420-1519]
+	org.objenesis.source [2.6.0.v20180420-1519,2.6.0.v20180420-1519]
+	org.slf4j.api [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.slf4j.api.source [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.slf4j.binding.simple [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.slf4j.binding.simple.source [1.7.30.v20200204-2150,1.7.30.v20200204-2150]
+	org.tukaani.xz [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+	org.tukaani.xz.source [1.9.0.v20210624-1259,1.9.0.v20210624-1259]
+}
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
index 5847b79..abafbce 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/pom.xml
@@ -16,7 +16,7 @@
   <parent>
     <groupId>org.eclipse.jgit</groupId>
     <artifactId>jgit.tycho.parent</artifactId>
-    <version>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.target</artifactId>
diff --git a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.4.x.tpd b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.4.x.tpd
index ce10829..9e8936a 100644
--- a/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.4.x.tpd
+++ b/org.eclipse.jgit.packaging/org.eclipse.jgit.target/projects/jetty-9.4.x.tpd
@@ -1,22 +1,22 @@
 target "jetty-9.4.x" with source configurePhase
 
-location jetty-9.4.40 "https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.41.v20210516/" {
-	org.eclipse.jetty.client [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.client.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.continuation [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.continuation.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.http [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.http.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.io [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.io.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.security [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.security.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.server [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.server.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.servlet [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.servlet.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.util [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.util.source [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.util.ajax [9.4.41.v20210516,9.4.41.v20210516]
-	org.eclipse.jetty.util.ajax.source [9.4.41.v20210516,9.4.41.v20210516]
+location jetty-9.4.x "https://archive.eclipse.org/jetty/updates/jetty-bundles-9.x/jetty-bundles-9.x/9.4.43.v20210629/" {
+	org.eclipse.jetty.client [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.client.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.continuation [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.continuation.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.http [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.http.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.io [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.io.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.security [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.security.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.server [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.server.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.servlet [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.servlet.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.util [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.util.source [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.util.ajax [9.4.43.v20210629,9.4.43.v20210629]
+	org.eclipse.jetty.util.ajax.source [9.4.43.v20210629,9.4.43.v20210629]
 }
diff --git a/org.eclipse.jgit.packaging/pom.xml b/org.eclipse.jgit.packaging/pom.xml
index 38be93b..bd6a942 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>5.12.1-SNAPSHOT</version>
+  <version>5.13.2-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>JGit Tycho Parent</name>
diff --git a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
index 704ad7c..47b5bbd 100644
--- a/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.pgm.test/META-INF/MANIFEST.MF
@@ -3,29 +3,29 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.pgm.test
 Bundle-SymbolicName: org.eclipse.jgit.pgm.test
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.diff;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.dircache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="5.12.1",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.merge;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.pgm;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.pgm.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.pgm.opt;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)",
- org.hamcrest.core;bundle-version="[1.1.0,2.0.0)",
+Import-Package: org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.diff;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.dircache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="5.13.2",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.merge;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.pgm;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.pgm.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.pgm.opt;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.0)",
+ org.hamcrest.core;bundle-version="[2.2.0,3.0.0)",
  org.junit;version="[4.13,5.0.0)",
  org.junit.rules;version="[4.13,5.0.0)",
  org.kohsuke.args4j;version="[2.33.0,3.0.0)"
diff --git a/org.eclipse.jgit.pgm.test/pom.xml b/org.eclipse.jgit.pgm.test/pom.xml
index 77dd85f..7cfcbc1 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 b4a1858..b9da8bd 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -14,46 +14,46 @@
  org.eclipse.jetty.servlet;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util;version="[9.4.5,10.0.0)",
  org.eclipse.jetty.util.component;version="[9.4.5,10.0.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.archive;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.awtui;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.blame;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.diff;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.dircache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.gitrepo;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.io;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.server;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.server.fs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs.server.s3;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.merge;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.notes;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revplot;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http.apache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.resolver;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.sshd;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.archive;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.awtui;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.blame;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.diff;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.dircache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.gitrepo;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.io;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.server;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.server.fs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs.server.s3;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.merge;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.notes;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revplot;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http.apache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.resolver;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.sshd;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.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="5.12.1";
+Export-Package: org.eclipse.jgit.console;version="5.13.2";
  uses:="org.eclipse.jgit.transport,
   org.eclipse.jgit.util",
- org.eclipse.jgit.pgm;version="5.12.1";
+ org.eclipse.jgit.pgm;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.awtui,
@@ -65,14 +65,14 @@
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.api,
    javax.swing",
- org.eclipse.jgit.pgm.debug;version="5.12.1";
+ org.eclipse.jgit.pgm.debug;version="5.13.2";
   uses:="org.eclipse.jgit.util.io,
    org.eclipse.jgit.pgm,
    org.eclipse.jetty.servlet",
- org.eclipse.jgit.pgm.internal;version="5.12.1";
+ org.eclipse.jgit.pgm.internal;version="5.13.2";
   x-friends:="org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.test",
- org.eclipse.jgit.pgm.opt;version="5.12.1";
+ org.eclipse.jgit.pgm.opt;version="5.13.2";
   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 8f433d5..9dc769d 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.pgm;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.pgm/build.properties b/org.eclipse.jgit.pgm/build.properties
index 4b38114..302dded 100644
--- a/org.eclipse.jgit.pgm/build.properties
+++ b/org.eclipse.jgit.pgm/build.properties
@@ -6,4 +6,4 @@
                .,\
                plugin.properties,\
                about.html,\
-               resources/log4j.properties
+               resources/simplelogger.properties
diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml
index 36da4aa..3d9fcba 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.pgm</artifactId>
@@ -97,12 +97,7 @@
 
     <dependency>
       <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-log4j12</artifactId>
-    </dependency>
-
-    <dependency>
-      <groupId>log4j</groupId>
-      <artifactId>log4j</artifactId>
+      <artifactId>slf4j-simple</artifactId>
     </dependency>
 
     <dependency>
diff --git a/org.eclipse.jgit.pgm/resources/log4j.properties b/org.eclipse.jgit.pgm/resources/log4j.properties
deleted file mode 100644
index 1496c5a..0000000
--- a/org.eclipse.jgit.pgm/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootLogger=WARN, stderr
-
-log4j.appender.stderr=org.apache.log4j.ConsoleAppender
-log4j.appender.stderr.Target=System.err
-log4j.appender.stderr.layout=org.apache.log4j.PatternLayout
-log4j.appender.stderr.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
index 38deab9..9745003 100644
--- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
+++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties
@@ -8,7 +8,7 @@
 # default meta variable defined in the org.kohsuke.args4j.spi.ExplicitBooleanOptionHandler
 VALUE=VAL
 # default meta variable defined in the org.kohsuke.args4j.spi.StopOptionHandler
-ARGUMENTS=ARGUMENTS
+ARGS=ARGS
 # default meta variable defined in the org.kohsuke.args4j.spi.OneArgumentOptionHandler
 N=N
 
diff --git a/org.eclipse.jgit.pgm/resources/simplelogger.properties b/org.eclipse.jgit.pgm/resources/simplelogger.properties
new file mode 100644
index 0000000..98c19ce
--- /dev/null
+++ b/org.eclipse.jgit.pgm/resources/simplelogger.properties
@@ -0,0 +1,6 @@
+org.slf4j.simpleLogger.defaultLogLevel=warn
+org.slf4j.simpleLogger.logFile=System.err
+org.slf4j.simpleLogger.showDateTime=true
+org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss
+org.slf4j.simpleLogger.showThreadName=true
+org.slf4j.simpleLogger.showLogName=true
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java
index 177be70..c87f0b6 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Gc.java
@@ -10,6 +10,7 @@
 
 package org.eclipse.jgit.pgm;
 
+import org.eclipse.jgit.api.GarbageCollectCommand;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.lib.TextProgressMonitor;
@@ -21,20 +22,25 @@ class Gc extends TextBuiltin {
 	private boolean aggressive;
 
 	@Option(name = "--preserve-oldpacks", usage = "usage_PreserveOldPacks")
-	private boolean preserveOldPacks;
+	private Boolean preserveOldPacks;
 
 	@Option(name = "--prune-preserved", usage = "usage_PrunePreserved")
-	private boolean prunePreserved;
+	private Boolean prunePreserved;
 
 	/** {@inheritDoc} */
 	@Override
 	protected void run() {
 		Git git = Git.wrap(db);
 		try {
-			git.gc().setAggressive(aggressive)
-					.setPreserveOldPacks(preserveOldPacks)
-					.setPrunePreserved(prunePreserved)
-					.setProgressMonitor(new TextProgressMonitor(errw)).call();
+			GarbageCollectCommand command = git.gc().setAggressive(aggressive)
+					.setProgressMonitor(new TextProgressMonitor(errw));
+			if (preserveOldPacks != null) {
+				command.setPreserveOldPacks(preserveOldPacks.booleanValue());
+			}
+			if (prunePreserved != null) {
+				command.setPrunePreserved(prunePreserved.booleanValue());
+			}
+			command.call();
 		} catch (GitAPIException e) {
 			throw die(e.getMessage(), e);
 		}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java
index f70e72d..600200d 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/TextBuiltin.java
@@ -219,8 +219,12 @@ public final void execute(String[] args) throws Exception {
 		case APACHE: {
 			SshdSessionFactory factory = new SshdSessionFactory(
 					new JGitKeyCache(), new DefaultProxyDataFactory());
-			Runtime.getRuntime()
-					.addShutdownHook(new Thread(factory::close));
+			try {
+				Runtime.getRuntime()
+						.addShutdownHook(new Thread(factory::close));
+			} catch (IllegalStateException e) {
+				// ignore - the VM is already shutting down
+			}
 			SshSessionFactory.setInstance(factory);
 			break;
 		}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java
index 96c72d9..6535119 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/opt/PathTreeFilterHandler.java
@@ -25,7 +25,7 @@
 import org.kohsuke.args4j.spi.Setter;
 
 /**
- * Create a {@link org.eclipse.jgit.treewalk.filter.TreeFilter} to patch math
+ * Create a {@link org.eclipse.jgit.treewalk.filter.TreeFilter} to match path
  * names.
  * <p>
  * This handler consumes all arguments to the end of the command line, and is
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 2a905a1..c2e32b2 100644
--- a/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.apache.test/META-INF/MANIFEST.MF
@@ -3,33 +3,34 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.apache.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.apache.test
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.sshd.client.config.hosts;version="[2.6.0,2.7.0)",
- org.apache.sshd.common;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.auth;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.config.keys;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.helpers;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.keyprovider;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.session;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.signature;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.net;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.security;version="[2.6.0,2.7.0)",
- org.apache.sshd.core;version="[2.6.0,2.7.0)",
- org.apache.sshd.server;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.forward;version="[2.6.0,2.7.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.sshd.proxy;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit.ssh;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.sshd;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+Import-Package: org.apache.sshd.client.config.hosts;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.auth;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.config.keys;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.helpers;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.kex;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.keyprovider;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.session;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.signature;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.net;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.security;version="[2.7.0,2.8.0)",
+ org.apache.sshd.core;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.forward;version="[2.7.0,2.8.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit.ssh;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.sshd;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.hamcrest;version="[1.1.0,3.0.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)"
-Require-Bundle: org.hamcrest.core;bundle-version="[1.3.0,2.0.0)"
diff --git a/org.eclipse.jgit.ssh.apache.test/build.properties b/org.eclipse.jgit.ssh.apache.test/build.properties
index 406c5a7..35d7145 100644
--- a/org.eclipse.jgit.ssh.apache.test/build.properties
+++ b/org.eclipse.jgit.ssh.apache.test/build.properties
@@ -3,5 +3,4 @@
 bin.includes = META-INF/,\
                .,\
                plugin.properties
-additional.bundles = org.apache.log4j,\
-                     org.slf4j.binding.log4j12
+additional.bundles = org.slf4j.binding.simple
diff --git a/org.eclipse.jgit.ssh.apache.test/pom.xml b/org.eclipse.jgit.ssh.apache.test/pom.xml
index 5af16c7..f626b00 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache.test</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java
index c56d230..c1f5fef 100644
--- a/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java
+++ b/org.eclipse.jgit.ssh.apache.test/tst/org/eclipse/jgit/transport/sshd/ApacheSshTest.java
@@ -34,13 +34,18 @@
 
 import org.apache.sshd.client.config.hosts.KnownHostEntry;
 import org.apache.sshd.client.config.hosts.KnownHostHashValue;
+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.PublicKeyEntry;
 import org.apache.sshd.common.config.keys.PublicKeyEntryResolver;
+import org.apache.sshd.common.kex.BuiltinDHFactories;
+import org.apache.sshd.common.kex.DHFactory;
+import org.apache.sshd.common.kex.KeyExchangeFactory;
 import org.apache.sshd.common.session.Session;
 import org.apache.sshd.common.util.net.SshdSocketAddress;
 import org.apache.sshd.server.ServerAuthenticationManager;
+import org.apache.sshd.server.ServerBuilder;
 import org.apache.sshd.server.SshServer;
 import org.apache.sshd.server.forward.StaticDecisionForwardingFilter;
 import org.eclipse.jgit.api.Git;
@@ -702,4 +707,42 @@ public void testConnectAuthSshRsa() throws Exception {
 			session.disconnect();
 		}
 	}
+
+	/**
+	 * Tests that one can log in at an even poorer server that also only has the
+	 * SHA1 KEX methods available. Apparently this is the case for at least some
+	 * Microsoft TFS instances. The user has to enable the poor KEX methods in
+	 * the ssh config explicitly; we don't enable them by default.
+	 *
+	 * @throws Exception
+	 *             on failure
+	 */
+	@Test
+	public void testConnectOnlyRsaSha1() throws Exception {
+		try (SshServer oldServer = createServer(TEST_USER, publicKey1)) {
+			oldServer.setSignatureFactoriesNames("ssh-rsa");
+			List<DHFactory> sha1Factories = BuiltinDHFactories
+					.parseDHFactoriesList(
+							"diffie-hellman-group1-sha1,diffie-hellman-group14-sha1")
+					.getParsedFactories();
+			assertEquals(2, sha1Factories.size());
+			List<KeyExchangeFactory> kexFactories = NamedFactory
+					.setUpTransformedFactories(true, sha1Factories,
+							ServerBuilder.DH2KEX);
+			oldServer.setKeyExchangeFactories(kexFactories);
+			oldServer.start();
+			registerServer(oldServer);
+			installConfig("Host server", //
+					"HostName localhost", //
+					"Port " + oldServer.getPort(), //
+					"User " + TEST_USER, //
+					"IdentityFile " + privateKey1.getAbsolutePath(), //
+					"KexAlgorithms +diffie-hellman-group1-sha1");
+			RemoteSession session = getSessionFactory().getSession(
+					new URIish("ssh://server/doesntmatter"), null, FS.DETECTED,
+					10000);
+			assertNotNull(session);
+			session.disconnect();
+		}
+	}
 }
diff --git a/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF b/org.eclipse.jgit.ssh.apache/META-INF/MANIFEST.MF
index 0645964..caa3455 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: plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.jgit.internal.transport.sshd;version="5.12.1";x-internal:=true;
+Export-Package: org.eclipse.jgit.internal.transport.sshd;version="5.13.2";x-internal:=true;
   uses:="org.apache.sshd.client,
    org.apache.sshd.client.auth,
    org.apache.sshd.client.auth.keyboard,
@@ -23,9 +23,9 @@
    org.apache.sshd.common.signature,
    org.apache.sshd.common.util.buffer,
    org.eclipse.jgit.transport",
- org.eclipse.jgit.internal.transport.sshd.auth;version="5.12.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.sshd.proxy;version="5.12.1";x-friends:="org.eclipse.jgit.ssh.apache.test",
- org.eclipse.jgit.transport.sshd;version="5.12.1";
+ org.eclipse.jgit.internal.transport.sshd.auth;version="5.13.2";x-internal:=true,
+ org.eclipse.jgit.internal.transport.sshd.proxy;version="5.13.2";x-friends:="org.eclipse.jgit.ssh.apache.test",
+ org.eclipse.jgit.transport.sshd;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.apache.sshd.client.config.hosts,
    org.apache.sshd.common.keyprovider,
@@ -33,59 +33,59 @@
    org.apache.sshd.client.session,
    org.apache.sshd.client.keyverifier"
 Import-Package: net.i2p.crypto.eddsa;version="[0.3.0,0.4.0)",
- org.apache.sshd.agent;version="[2.6.0,2.7.0)",
- org.apache.sshd.client;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.auth;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.auth.keyboard;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.auth.password;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.auth.pubkey;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.channel;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.config.hosts;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.config.keys;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.future;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.keyverifier;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.session;version="[2.6.0,2.7.0)",
- org.apache.sshd.client.session.forward;version="[2.6.0,2.7.0)",
- org.apache.sshd.common;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.auth;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.channel;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.compression;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.config.keys;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.config.keys.loader;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.digest;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.forward;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.future;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.helpers;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.io;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.kex;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.kex.extension;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.kex.extension.parser;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.keyprovider;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.mac;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.random;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.session;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.session.helpers;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.signature;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.buffer;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.closeable;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.io;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.io.resource;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.logging;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.net;version="[2.6.0,2.7.0)",
- org.apache.sshd.common.util.security;version="[2.6.0,2.7.0)",
- org.apache.sshd.core;version="[2.6.0,2.7.0)",
- org.apache.sshd.server.auth;version="[2.6.0,2.7.0)",
- org.apache.sshd.sftp;version="[2.6.0,2.7.0)",
- org.apache.sshd.sftp.client;version="[2.6.0,2.7.0)",
- org.apache.sshd.sftp.common;version="[2.6.0,2.7.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.fnmatch;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+ org.apache.sshd.agent;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.auth;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.auth.keyboard;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.auth.password;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.auth.pubkey;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.channel;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.config.hosts;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.config.keys;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.future;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.keyverifier;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.session;version="[2.7.0,2.8.0)",
+ org.apache.sshd.client.session.forward;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.auth;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.channel;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.compression;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.config.keys;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.config.keys.loader;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.config.keys.loader.openssh.kdf;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.digest;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.forward;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.future;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.helpers;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.io;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.kex;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.kex.extension;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.kex.extension.parser;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.keyprovider;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.mac;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.random;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.session;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.session.helpers;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.signature;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.buffer;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.closeable;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.io;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.io.resource;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.logging;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.net;version="[2.7.0,2.8.0)",
+ org.apache.sshd.common.util.security;version="[2.7.0,2.8.0)",
+ org.apache.sshd.core;version="[2.7.0,2.8.0)",
+ org.apache.sshd.server.auth;version="[2.7.0,2.8.0)",
+ org.apache.sshd.sftp;version="[2.7.0,2.8.0)",
+ org.apache.sshd.sftp.client;version="[2.7.0,2.8.0)",
+ org.apache.sshd.sftp.common;version="[2.7.0,2.8.0)",
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.fnmatch;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
  org.slf4j;version="[1.7.0,2.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 80a27d4..9a68194 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.apache;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.apache/pom.xml b/org.eclipse.jgit.ssh.apache/pom.xml
index f754a3a..8ec764f 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.apache</artifactId>
diff --git a/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties b/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties
index 5bc0867..defcbdc 100644
--- a/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties
+++ b/org.eclipse.jgit.ssh.apache/resources/org/eclipse/jgit/internal/transport/sshd/SshdText.properties
@@ -8,6 +8,7 @@
 configNoKnownAlgorithms=Ssh config ''{0}'' ''{1}'' resulted in empty list (none known, or all known removed); using default.
 configProxyJumpNotSsh=Non-ssh URI in ProxyJump ssh config
 configProxyJumpWithPath=ProxyJump ssh config: jump host specification must not have a path
+configUnknownAlgorithm=Ssh config {0}: ignoring unknown algorithm ''{1}'' in {2} {3}
 ftpCloseFailed=Closing the SFTP channel failed
 gssapiFailure=GSS-API error for mechanism OID {0}
 gssapiInitFailure=GSS-API initialization failure for mechanism {0}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitClientSession.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitClientSession.java
index 8183a92..f7b37d7 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitClientSession.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitClientSession.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018, 2019 Thomas Wolf <thomas.wolf@paranor.ch> and others
+ * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> 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
@@ -16,7 +16,6 @@
 import java.io.StreamCorruptedException;
 import java.net.SocketAddress;
 import java.nio.charset.StandardCharsets;
-import java.security.GeneralSecurityException;
 import java.security.PublicKey;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -29,16 +28,27 @@
 import java.util.Objects;
 import java.util.Set;
 
+import org.apache.sshd.client.ClientBuilder;
 import org.apache.sshd.client.ClientFactoryManager;
 import org.apache.sshd.client.config.hosts.HostConfigEntry;
 import org.apache.sshd.client.keyverifier.ServerKeyVerifier;
 import org.apache.sshd.client.session.ClientSessionImpl;
 import org.apache.sshd.common.AttributeRepository;
 import org.apache.sshd.common.FactoryManager;
+import org.apache.sshd.common.NamedResource;
 import org.apache.sshd.common.PropertyResolver;
 import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.io.IoSession;
 import org.apache.sshd.common.io.IoWriteFuture;
+import org.apache.sshd.common.kex.BuiltinDHFactories;
+import org.apache.sshd.common.kex.DHFactory;
+import org.apache.sshd.common.kex.KexProposalOption;
+import org.apache.sshd.common.kex.KeyExchangeFactory;
+import org.apache.sshd.common.kex.extension.KexExtensionHandler;
+import org.apache.sshd.common.kex.extension.KexExtensionHandler.AvailabilityPhase;
+import org.apache.sshd.common.kex.extension.KexExtensions;
+import org.apache.sshd.common.keyprovider.KeyPairProvider;
+import org.apache.sshd.common.signature.BuiltinSignatures;
 import org.apache.sshd.common.util.Readable;
 import org.apache.sshd.common.util.buffer.Buffer;
 import org.eclipse.jgit.errors.InvalidPatternException;
@@ -69,6 +79,8 @@ public class JGitClientSession extends ClientSessionImpl {
 	 */
 	private static final int DEFAULT_MAX_IDENTIFICATION_SIZE = 64 * 1024;
 
+	private static final AttributeKey<Boolean> INITIAL_KEX_DONE = new AttributeKey<>();
+
 	private HostConfigEntry hostConfig;
 
 	private CredentialsProvider credentialsProvider;
@@ -135,51 +147,38 @@ public void setProxyHandler(StatefulProxyConnector handler) {
 	}
 
 	@Override
-	protected IoWriteFuture sendIdentification(String ident)
-			throws IOException {
+	protected IoWriteFuture sendIdentification(String ident,
+			List<String> extraLines) throws Exception {
 		StatefulProxyConnector proxy = proxyHandler;
 		if (proxy != null) {
-			try {
-				// We must not block here; the framework starts reading messages
-				// from the peer only once the initial sendKexInit() following
-				// this call to sendIdentification() has returned!
-				proxy.runWhenDone(() -> {
-					JGitClientSession.super.sendIdentification(ident);
-					return null;
-				});
-				// Called only from the ClientSessionImpl constructor, where the
-				// return value is ignored.
+			// We must not block here; the framework starts reading messages
+			// from the peer only once the initial sendKexInit() following
+			// this call to sendIdentification() has returned!
+			proxy.runWhenDone(() -> {
+				JGitClientSession.super.sendIdentification(ident, extraLines);
 				return null;
-			} catch (IOException e) {
-				throw e;
-			} catch (Exception other) {
-				throw new IOException(other.getLocalizedMessage(), other);
-			}
+			});
+			// Called only from the ClientSessionImpl constructor, where the
+			// return value is ignored.
+			return null;
 		}
-		return super.sendIdentification(ident);
+		return super.sendIdentification(ident, extraLines);
 	}
 
 	@Override
-	protected byte[] sendKexInit()
-			throws IOException, GeneralSecurityException {
+	protected byte[] sendKexInit() throws Exception {
 		StatefulProxyConnector proxy = proxyHandler;
 		if (proxy != null) {
-			try {
-				// We must not block here; the framework starts reading messages
-				// from the peer only once the initial sendKexInit() has
-				// returned!
-				proxy.runWhenDone(() -> {
-					JGitClientSession.super.sendKexInit();
-					return null;
-				});
-				// This is called only from the ClientSessionImpl
-				// constructor, where the return value is ignored.
+			// We must not block here; the framework starts reading messages
+			// from the peer only once the initial sendKexInit() has
+			// returned!
+			proxy.runWhenDone(() -> {
+				JGitClientSession.super.sendKexInit();
 				return null;
-			} catch (IOException | GeneralSecurityException e) {
-				throw e;
-			} catch (Exception other) {
-				throw new IOException(other.getLocalizedMessage(), other);
-			}
+			});
+			// This is called only from the ClientSessionImpl
+			// constructor, where the return value is ignored.
+			return null;
 		}
 		return super.sendKexInit();
 	}
@@ -201,6 +200,50 @@ public void messageReceived(Readable buffer) throws Exception {
 	}
 
 	@Override
+	protected Map<KexProposalOption, String> setNegotiationResult(
+			Map<KexProposalOption, String> guess) {
+		Map<KexProposalOption, String> result = super.setNegotiationResult(
+				guess);
+		// This should be doable with a SessionListener, too, but I don't see
+		// how to add a listener in time to catch the negotiation end for sure
+		// given that the super-constructor already starts KEX.
+		//
+		// TODO: This override can be removed once we use sshd 2.8.0.
+		if (log.isDebugEnabled()) {
+			result.forEach((option, value) -> log.debug(
+					"setNegotiationResult({}) Kex: {} = {}", this, //$NON-NLS-1$
+					option.getDescription(), value));
+		}
+		return result;
+	}
+
+	Set<String> getAllAvailableSignatureAlgorithms() {
+		Set<String> allAvailable = new HashSet<>();
+		BuiltinSignatures.VALUES.forEach(s -> allAvailable.add(s.getName()));
+		BuiltinSignatures.getRegisteredExtensions()
+				.forEach(s -> allAvailable.add(s.getName()));
+		return allAvailable;
+	}
+
+	private void setNewFactories(Collection<String> defaultFactories,
+			Collection<String> finalFactories) {
+		// If new factory names were added make sure we actually have factories
+		// for them all.
+		//
+		// But add new ones at the end: we don't want to change the order for
+		// pubkey auth, and any new ones added here were not included in the
+		// default set for some reason, such as being deprecated or weak.
+		//
+		// The order for KEX is determined by the order in the proposal string,
+		// but the order in pubkey auth is determined by the order in the
+		// factory list (possibly overridden via ssh config
+		// PubkeyAcceptedAlgorithms; see JGitPublicKeyAuthentication).
+		Set<String> resultSet = new LinkedHashSet<>(defaultFactories);
+		resultSet.addAll(finalFactories);
+		setSignatureFactoriesNames(resultSet);
+	}
+
+	@Override
 	protected String resolveAvailableSignaturesProposal(
 			FactoryManager manager) {
 		List<String> defaultSignatures = getSignatureFactoriesNames();
@@ -210,16 +253,17 @@ protected String resolveAvailableSignaturesProposal(
 				.getProperty(SshConstants.HOST_KEY_ALGORITHMS);
 		if (!StringUtils.isEmptyOrNull(algorithms)) {
 			List<String> result = modifyAlgorithmList(defaultSignatures,
-					algorithms, SshConstants.HOST_KEY_ALGORITHMS);
+					getAllAvailableSignatureAlgorithms(), algorithms,
+					SshConstants.HOST_KEY_ALGORITHMS);
 			if (!result.isEmpty()) {
 				if (log.isDebugEnabled()) {
 					log.debug(SshConstants.HOST_KEY_ALGORITHMS + ' ' + result);
 				}
+				setNewFactories(defaultSignatures, result);
 				return String.join(",", result); //$NON-NLS-1$
 			}
 			log.warn(format(SshdText.get().configNoKnownAlgorithms,
-					SshConstants.HOST_KEY_ALGORITHMS,
-					algorithms));
+					SshConstants.HOST_KEY_ALGORITHMS, algorithms));
 		}
 		// No HostKeyAlgorithms; using default -- change order to put existing
 		// keys first.
@@ -234,6 +278,11 @@ protected String resolveAvailableSignaturesProposal(
 				if (key != null) {
 					String keyType = KeyUtils.getKeyType(key);
 					if (keyType != null) {
+						if (KeyPairProvider.SSH_RSA.equals(keyType)) {
+							// Add all available signatures for ssh-rsa.
+							reordered.add(KeyUtils.RSA_SHA512_KEY_TYPE_ALIAS);
+							reordered.add(KeyUtils.RSA_SHA256_KEY_TYPE_ALIAS);
+						}
 						reordered.add(keyType);
 					}
 				}
@@ -242,6 +291,10 @@ protected String resolveAvailableSignaturesProposal(
 			if (log.isDebugEnabled()) {
 				log.debug(SshConstants.HOST_KEY_ALGORITHMS + ' ' + reordered);
 			}
+			// Make sure we actually have factories for them all.
+			if (reordered.size() > defaultSignatures.size()) {
+				setNewFactories(defaultSignatures, reordered);
+			}
 			return String.join(",", reordered); //$NON-NLS-1$
 		}
 		if (log.isDebugEnabled()) {
@@ -251,15 +304,87 @@ protected String resolveAvailableSignaturesProposal(
 		return String.join(",", defaultSignatures); //$NON-NLS-1$
 	}
 
+	private List<String> determineKexProposal() {
+		List<KeyExchangeFactory> kexFactories = getKeyExchangeFactories();
+		List<String> defaultKexMethods = NamedResource
+				.getNameList(kexFactories);
+		HostConfigEntry config = resolveAttribute(
+				JGitSshClient.HOST_CONFIG_ENTRY);
+		String algorithms = config.getProperty(SshConstants.KEX_ALGORITHMS);
+		if (!StringUtils.isEmptyOrNull(algorithms)) {
+			Set<String> allAvailable = new HashSet<>();
+			BuiltinDHFactories.VALUES
+					.forEach(s -> allAvailable.add(s.getName()));
+			BuiltinDHFactories.getRegisteredExtensions()
+					.forEach(s -> allAvailable.add(s.getName()));
+			List<String> result = modifyAlgorithmList(defaultKexMethods,
+					allAvailable, algorithms, SshConstants.KEX_ALGORITHMS);
+			if (!result.isEmpty()) {
+				// If new ones were added, update the installed factories
+				Set<String> configuredKexMethods = new HashSet<>(
+						defaultKexMethods);
+				List<KeyExchangeFactory> newKexFactories = new ArrayList<>();
+				result.forEach(name -> {
+					if (!configuredKexMethods.contains(name)) {
+						DHFactory factory = BuiltinDHFactories
+								.resolveFactory(name);
+						if (factory == null) {
+							// Should not occur here
+							if (log.isDebugEnabled()) {
+								log.debug(
+										"determineKexProposal({}) unknown KEX algorithm {} ignored", //$NON-NLS-1$
+										this, name);
+							}
+						} else {
+							newKexFactories
+									.add(ClientBuilder.DH2KEX.apply(factory));
+						}
+					}
+				});
+				if (!newKexFactories.isEmpty()) {
+					newKexFactories.addAll(kexFactories);
+					setKeyExchangeFactories(newKexFactories);
+				}
+				return result;
+			}
+			log.warn(format(SshdText.get().configNoKnownAlgorithms,
+					SshConstants.KEX_ALGORITHMS, algorithms));
+		}
+		return defaultKexMethods;
+	}
+
+	@Override
+	protected String resolveSessionKexProposal(String hostKeyTypes)
+			throws IOException {
+		String kexMethods = String.join(",", determineKexProposal()); //$NON-NLS-1$
+		Boolean isRekey = getAttribute(INITIAL_KEX_DONE);
+		if (isRekey == null || !isRekey.booleanValue()) {
+			// First time
+			KexExtensionHandler extHandler = getKexExtensionHandler();
+			if (extHandler != null && extHandler.isKexExtensionsAvailable(this,
+					AvailabilityPhase.PROPOSAL)) {
+				if (kexMethods.isEmpty()) {
+					kexMethods = KexExtensions.CLIENT_KEX_EXTENSION;
+				} else {
+					kexMethods += ',' + KexExtensions.CLIENT_KEX_EXTENSION;
+				}
+			}
+			setAttribute(INITIAL_KEX_DONE, Boolean.TRUE);
+		}
+		if (log.isDebugEnabled()) {
+			log.debug(SshConstants.KEX_ALGORITHMS + ' ' + kexMethods);
+		}
+		return kexMethods;
+	}
+
 	/**
 	 * Modifies a given algorithm list according to a list from the ssh config,
-	 * including remove ('-') and reordering ('^') operators. Addition ('+') is
-	 * not handled since we have no way of adding dynamically implementations,
-	 * and the defaultList is supposed to contain all known implementations
-	 * already.
+	 * including add ('+'), remove ('-') and reordering ('^') operators.
 	 *
 	 * @param defaultList
 	 *            to modify
+	 * @param allAvailable
+	 *            all available values
 	 * @param fromConfig
 	 *            telling how to modify the {@code defaultList}, must not be
 	 *            {@code null} or empty
@@ -269,22 +394,22 @@ protected String resolveAvailableSignaturesProposal(
 	 *         set
 	 */
 	public List<String> modifyAlgorithmList(List<String> defaultList,
-			String fromConfig, String overrideKey) {
+			Set<String> allAvailable, String fromConfig, String overrideKey) {
 		Set<String> defaults = new LinkedHashSet<>();
 		defaults.addAll(defaultList);
 		switch (fromConfig.charAt(0)) {
 		case '+':
-			// Additions make not much sense -- it's either in
-			// defaultList already, or we have no implementation for
-			// it. No point in proposing it.
-			return defaultList;
+			List<String> newSignatures = filteredList(allAvailable, overrideKey,
+					fromConfig.substring(1));
+			defaults.addAll(newSignatures);
+			return new ArrayList<>(defaults);
 		case '-':
 			// This takes wildcard patterns!
 			removeFromList(defaults, overrideKey, fromConfig.substring(1));
 			return new ArrayList<>(defaults);
 		case '^':
 			// Specified entries go to the front of the default list
-			List<String> allSignatures = filteredList(defaults,
+			List<String> allSignatures = filteredList(allAvailable, overrideKey,
 					fromConfig.substring(1));
 			Set<String> atFront = new HashSet<>(allSignatures);
 			for (String sig : defaults) {
@@ -296,7 +421,7 @@ public List<String> modifyAlgorithmList(List<String> defaultList,
 		default:
 			// Default is overridden -- only accept the ones for which we do
 			// have an implementation.
-			return filteredList(defaults, fromConfig);
+			return filteredList(allAvailable, overrideKey, fromConfig);
 		}
 	}
 
@@ -323,11 +448,15 @@ private void removeFromList(Set<String> current, String key,
 		}
 	}
 
-	private List<String> filteredList(Set<String> known, String values) {
+	private List<String> filteredList(Set<String> known, String key,
+			String values) {
 		List<String> newNames = new ArrayList<>();
 		for (String newValue : values.split("\\s*,\\s*")) { //$NON-NLS-1$
 			if (known.contains(newValue)) {
 				newNames.add(newValue);
+			} else {
+				log.warn(format(SshdText.get().configUnknownAlgorithm, this,
+						newValue, key, values));
 			}
 		}
 		return newNames;
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitKexExtensionHandler.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitKexExtensionHandler.java
deleted file mode 100644
index 9446aaa..0000000
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitKexExtensionHandler.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2021 Thomas Wolf <thomas.wolf@paranor.ch> 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.internal.transport.sshd;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.apache.sshd.common.AttributeRepository.AttributeKey;
-import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.kex.KexProposalOption;
-import org.apache.sshd.common.kex.extension.KexExtensionHandler;
-import org.apache.sshd.common.kex.extension.KexExtensions;
-import org.apache.sshd.common.kex.extension.parser.ServerSignatureAlgorithms;
-import org.apache.sshd.common.session.Session;
-import org.apache.sshd.common.signature.Signature;
-import org.apache.sshd.common.util.logging.AbstractLoggingBean;
-import org.eclipse.jgit.util.StringUtils;
-
-/**
- * Do not use the DefaultClientKexExtensionHandler from sshd; it doesn't work
- * properly because of misconceptions. See SSHD-1141.
- *
- * @see <a href="https://issues.apache.org/jira/browse/SSHD-1141">SSHD-1141</a>
- */
-public class JGitKexExtensionHandler extends AbstractLoggingBean
-		implements KexExtensionHandler {
-
-	/** Singleton instance. */
-	public static final JGitKexExtensionHandler INSTANCE = new JGitKexExtensionHandler();
-
-	/**
-	 * Session {@link AttributeKey} used to store whether the extension
-	 * indicator was already sent.
-	 */
-	private static final AttributeKey<Boolean> CLIENT_PROPOSAL_MADE = new AttributeKey<>();
-
-	/**
-	 * Session {@link AttributeKey} storing the algorithms announced by the
-	 * server as known.
-	 */
-	public static final AttributeKey<Set<String>> SERVER_ALGORITHMS = new AttributeKey<>();
-
-	private JGitKexExtensionHandler() {
-		// No public instantiation for singleton
-	}
-
-	@Override
-	public boolean isKexExtensionsAvailable(Session session,
-			AvailabilityPhase phase) throws IOException {
-		return !AvailabilityPhase.PREKEX.equals(phase);
-	}
-
-	@Override
-	public void handleKexInitProposal(Session session, boolean initiator,
-			Map<KexProposalOption, String> proposal) throws IOException {
-		// If it's the very first time, we may add the marker telling the server
-		// that we are ready to handle SSH_MSG_EXT_INFO
-		if (session == null || session.isServerSession() || !initiator) {
-			return;
-		}
-		if (session.getAttribute(CLIENT_PROPOSAL_MADE) != null) {
-			return;
-		}
-		String kexAlgorithms = proposal.get(KexProposalOption.SERVERKEYS);
-		if (StringUtils.isEmptyOrNull(kexAlgorithms)) {
-			return;
-		}
-		List<String> algorithms = new ArrayList<>();
-		// We're a client. We mustn't send the server extension, and we should
-		// send the client extension only once.
-		for (String algo : kexAlgorithms.split(",")) { //$NON-NLS-1$
-			if (KexExtensions.CLIENT_KEX_EXTENSION.equalsIgnoreCase(algo)
-					|| KexExtensions.SERVER_KEX_EXTENSION
-							.equalsIgnoreCase(algo)) {
-				continue;
-			}
-			algorithms.add(algo);
-		}
-		// Tell the server that we want to receive SSH2_MSG_EXT_INFO
-		algorithms.add(KexExtensions.CLIENT_KEX_EXTENSION);
-		if (log.isDebugEnabled()) {
-			log.debug(
-					"handleKexInitProposal({}): proposing HostKeyAlgorithms {}", //$NON-NLS-1$
-					session, algorithms);
-		}
-		proposal.put(KexProposalOption.SERVERKEYS,
-				String.join(",", algorithms)); //$NON-NLS-1$
-		session.setAttribute(CLIENT_PROPOSAL_MADE, Boolean.TRUE);
-	}
-
-	@Override
-	public boolean handleKexExtensionRequest(Session session, int index,
-			int count, String name, byte[] data) throws IOException {
-		if (ServerSignatureAlgorithms.NAME.equals(name)) {
-			handleServerSignatureAlgorithms(session,
-					ServerSignatureAlgorithms.INSTANCE.parseExtension(data));
-		}
-		return true;
-	}
-
-	/**
-	 * Perform updates after a server-sig-algs extension has been received.
-	 *
-	 * @param session
-	 *            the message was received for
-	 * @param serverAlgorithms
-	 *            signature algorithm names announced by the server
-	 */
-	protected void handleServerSignatureAlgorithms(Session session,
-			Collection<String> serverAlgorithms) {
-		if (log.isDebugEnabled()) {
-			log.debug("handleServerSignatureAlgorithms({}): {}", session, //$NON-NLS-1$
-					serverAlgorithms);
-		}
-		// Client determines order; server says what it supports. Re-order
-		// such that supported ones are at the front, in client order,
-		// followed by unsupported ones, also in client order.
-		if (serverAlgorithms != null && !serverAlgorithms.isEmpty()) {
-			List<NamedFactory<Signature>> clientAlgorithms = new ArrayList<>(
-					session.getSignatureFactories());
-			if (log.isDebugEnabled()) {
-				log.debug(
-						"handleServerSignatureAlgorithms({}): PubkeyAcceptedAlgorithms before: {}", //$NON-NLS-1$
-						session, clientAlgorithms);
-			}
-			List<NamedFactory<Signature>> unknown = new ArrayList<>();
-			Set<String> known = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
-			known.addAll(serverAlgorithms);
-			for (Iterator<NamedFactory<Signature>> iter = clientAlgorithms
-					.iterator(); iter.hasNext();) {
-				NamedFactory<Signature> algo = iter.next();
-				if (!known.contains(algo.getName())) {
-					unknown.add(algo);
-					iter.remove();
-				}
-			}
-			// Re-add the unknown ones at the end. Per RFC 8308, some
-			// servers may not announce _all_ their supported algorithms,
-			// and a client may use unknown algorithms.
-			clientAlgorithms.addAll(unknown);
-			if (log.isDebugEnabled()) {
-				log.debug(
-						"handleServerSignatureAlgorithms({}): PubkeyAcceptedAlgorithms after: {}", //$NON-NLS-1$
-						session, clientAlgorithms);
-			}
-			session.setAttribute(SERVER_ALGORITHMS, known);
-			session.setSignatureFactories(clientAlgorithms);
-		}
-	}
-}
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 6755094..08da18f 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
@@ -9,216 +9,56 @@
  */
 package org.eclipse.jgit.internal.transport.sshd;
 
-import java.io.IOException;
-import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
-import java.text.MessageFormat;
-import java.util.Deque;
-import java.util.HashSet;
-import java.util.LinkedList;
+import static java.text.MessageFormat.format;
+import static org.eclipse.jgit.transport.SshConstants.PUBKEY_ACCEPTED_ALGORITHMS;
+
 import java.util.List;
-import java.util.Set;
 
 import org.apache.sshd.client.auth.pubkey.UserAuthPublicKey;
+import org.apache.sshd.client.config.hosts.HostConfigEntry;
 import org.apache.sshd.client.session.ClientSession;
 import org.apache.sshd.common.NamedFactory;
-import org.apache.sshd.common.NamedResource;
-import org.apache.sshd.common.RuntimeSshException;
-import org.apache.sshd.common.SshConstants;
-import org.apache.sshd.common.config.keys.KeyUtils;
 import org.apache.sshd.common.signature.Signature;
-import org.apache.sshd.common.signature.SignatureFactoriesHolder;
-import org.apache.sshd.common.util.buffer.Buffer;
+import org.eclipse.jgit.util.StringUtils;
 
 /**
- * Custom {@link UserAuthPublicKey} implementation fixing SSHD-1105: if there
- * are several signature algorithms applicable for a public key type, we must
- * try them all, in the correct order.
- *
- * @see <a href="https://issues.apache.org/jira/browse/SSHD-1105">SSHD-1105</a>
- * @see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=572056">Bug
- *      572056</a>
+ * Custom {@link UserAuthPublicKey} implementation for handling SSH config
+ * PubkeyAcceptedAlgorithms.
  */
 public class JGitPublicKeyAuthentication extends UserAuthPublicKey {
 
-	private final Deque<String> currentAlgorithms = new LinkedList<>();
-
-	private String chosenAlgorithm;
-
 	JGitPublicKeyAuthentication(List<NamedFactory<Signature>> factories) {
 		super(factories);
 	}
 
 	@Override
-	protected boolean sendAuthDataRequest(ClientSession session, String service)
+	public void init(ClientSession rawSession, String service)
 			throws Exception {
-		if (current == null) {
-			currentAlgorithms.clear();
-			chosenAlgorithm = null;
+		if (!(rawSession instanceof JGitClientSession)) {
+			throw new IllegalStateException("Wrong session type: " //$NON-NLS-1$
+					+ rawSession.getClass().getCanonicalName());
 		}
-		String currentAlgorithm = null;
-		if (current != null && !currentAlgorithms.isEmpty()) {
-			currentAlgorithm = currentAlgorithms.poll();
-			if (chosenAlgorithm != null) {
-				Set<String> knownServerAlgorithms = session.getAttribute(
-						JGitKexExtensionHandler.SERVER_ALGORITHMS);
-				if (knownServerAlgorithms != null
-						&& knownServerAlgorithms.contains(chosenAlgorithm)) {
-					// We've tried key 'current' with 'chosenAlgorithm', but it
-					// failed. However, the server had told us it supported
-					// 'chosenAlgorithm'. Thus it makes no sense to continue
-					// with this key and other signature algorithms. Skip to the
-					// next key, if any.
-					currentAlgorithm = null;
-				}
-			}
-		}
-		if (currentAlgorithm == null) {
-			try {
-				if (keys == null || !keys.hasNext()) {
-					if (log.isDebugEnabled()) {
-						log.debug(
-								"sendAuthDataRequest({})[{}] no more keys to send", //$NON-NLS-1$
-								session, service);
-					}
-					current = null;
-					return false;
-				}
-				current = keys.next();
-				currentAlgorithms.clear();
-				chosenAlgorithm = null;
-			} catch (Error e) { // Copied from superclass
-				throw new RuntimeSshException(e);
-			}
-		}
-		PublicKey key;
-		try {
-			key = current.getPublicKey();
-		} catch (Error e) { // Copied from superclass
-			throw new RuntimeSshException(e);
-		}
-		if (currentAlgorithm == null) {
-			String keyType = KeyUtils.getKeyType(key);
-			Set<String> aliases = new HashSet<>(
-					KeyUtils.getAllEquivalentKeyTypes(keyType));
-			aliases.add(keyType);
-			List<NamedFactory<Signature>> existingFactories;
-			if (current instanceof SignatureFactoriesHolder) {
-				existingFactories = ((SignatureFactoriesHolder) current)
-						.getSignatureFactories();
-			} else {
-				existingFactories = getSignatureFactories();
-			}
-			if (existingFactories != null) {
+		JGitClientSession session = ((JGitClientSession) rawSession);
+		HostConfigEntry hostConfig = session.getHostConfigEntry();
+		// Set signature algorithms for public key authentication
+		String pubkeyAlgos = hostConfig.getProperty(PUBKEY_ACCEPTED_ALGORITHMS);
+		if (!StringUtils.isEmptyOrNull(pubkeyAlgos)) {
+			List<String> signatures = session.getSignatureFactoriesNames();
+			signatures = session.modifyAlgorithmList(signatures,
+					session.getAllAvailableSignatureAlgorithms(), pubkeyAlgos,
+					PUBKEY_ACCEPTED_ALGORITHMS);
+			if (!signatures.isEmpty()) {
 				if (log.isDebugEnabled()) {
-					log.debug(
-							"sendAuthDataRequest({})[{}] selecting from PubKeyAcceptedAlgorithms {}", //$NON-NLS-1$
-							session, service,
-							NamedResource.getNames(existingFactories));
+					log.debug(PUBKEY_ACCEPTED_ALGORITHMS + ' ' + signatures);
 				}
-				// Select the factories by name and in order
-				existingFactories.forEach(f -> {
-					if (aliases.contains(f.getName())) {
-						currentAlgorithms.add(f.getName());
-					}
-				});
+				setSignatureFactoriesNames(signatures);
+			} else {
+				log.warn(format(SshdText.get().configNoKnownAlgorithms,
+						PUBKEY_ACCEPTED_ALGORITHMS, pubkeyAlgos));
 			}
-			currentAlgorithm = currentAlgorithms.isEmpty() ? keyType
-					: currentAlgorithms.poll();
 		}
-		String name = getName();
-		if (log.isDebugEnabled()) {
-			log.debug(
-					"sendAuthDataRequest({})[{}] send SSH_MSG_USERAUTH_REQUEST request {} type={} - fingerprint={}", //$NON-NLS-1$
-					session, service, name, currentAlgorithm,
-					KeyUtils.getFingerPrint(key));
-		}
-
-		chosenAlgorithm = currentAlgorithm;
-		Buffer buffer = session
-				.createBuffer(SshConstants.SSH_MSG_USERAUTH_REQUEST);
-		buffer.putString(session.getUsername());
-		buffer.putString(service);
-		buffer.putString(name);
-		buffer.putBoolean(false);
-		buffer.putString(currentAlgorithm);
-		buffer.putPublicKey(key);
-		session.writePacket(buffer);
-		return true;
-	}
-
-	@Override
-	protected boolean processAuthDataRequest(ClientSession session,
-			String service, Buffer buffer) throws Exception {
-		String name = getName();
-		int cmd = buffer.getUByte();
-		if (cmd != SshConstants.SSH_MSG_USERAUTH_PK_OK) {
-			throw new IllegalStateException(MessageFormat.format(
-					SshdText.get().pubkeyAuthWrongCommand,
-					SshConstants.getCommandMessageName(cmd),
-					session.getConnectAddress(), session.getServerVersion()));
-		}
-		PublicKey key;
-		try {
-			key = current.getPublicKey();
-		} catch (Error e) { // Copied from superclass
-			throw new RuntimeSshException(e);
-		}
-		String rspKeyAlgorithm = buffer.getString();
-		PublicKey rspKey = buffer.getPublicKey();
-		if (log.isDebugEnabled()) {
-			log.debug(
-					"processAuthDataRequest({})[{}][{}] SSH_MSG_USERAUTH_PK_OK type={}, fingerprint={}", //$NON-NLS-1$
-					session, service, name, rspKeyAlgorithm,
-					KeyUtils.getFingerPrint(rspKey));
-		}
-		if (!KeyUtils.compareKeys(rspKey, key)) {
-			throw new InvalidKeySpecException(MessageFormat.format(
-					SshdText.get().pubkeyAuthWrongKey,
-					KeyUtils.getFingerPrint(key),
-					KeyUtils.getFingerPrint(rspKey),
-					session.getConnectAddress(), session.getServerVersion()));
-		}
-		if (!chosenAlgorithm.equalsIgnoreCase(rspKeyAlgorithm)) {
-			// 'algo' SHOULD be the same as 'chosenAlgorithm', which is the one
-			// we sent above. See https://tools.ietf.org/html/rfc4252#page-9 .
-			//
-			// However, at least Github (SSH-2.0-babeld-383743ad) servers seem
-			// to return the key type, not the algorithm name.
-			//
-			// So we don't check but just log the inconsistency. We sign using
-			// 'chosenAlgorithm' in any case, so we don't really care what the
-			// server says here.
-			log.warn(MessageFormat.format(
-					SshdText.get().pubkeyAuthWrongSignatureAlgorithm,
-					chosenAlgorithm, rspKeyAlgorithm, session.getConnectAddress(),
-					session.getServerVersion()));
-		}
-		String username = session.getUsername();
-		Buffer out = session
-				.createBuffer(SshConstants.SSH_MSG_USERAUTH_REQUEST);
-		out.putString(username);
-		out.putString(service);
-		out.putString(name);
-		out.putBoolean(true);
-		out.putString(chosenAlgorithm);
-		out.putPublicKey(key);
-		if (log.isDebugEnabled()) {
-			log.debug(
-					"processAuthDataRequest({})[{}][{}]: signing with algorithm {}", //$NON-NLS-1$
-					session, service, name, chosenAlgorithm);
-		}
-		appendSignature(session, service, name, username, chosenAlgorithm, key,
-				out);
-		session.writePacket(out);
-		return true;
-	}
-
-	@Override
-	protected void releaseKeys() throws IOException {
-		currentAlgorithms.clear();
-		current = null;
-		chosenAlgorithm = null;
-		super.releaseKeys();
+		// If we don't set signature factories here, the default ones from the
+		// session will be used.
+		super.init(session, service);
 	}
 }
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java
index 071e197..ae12c20 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/JGitSshClient.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018, 2020 Thomas Wolf <thomas.wolf@paranor.ch> and others
+ * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> 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
@@ -267,24 +267,6 @@ private JGitClientSession createSession(IoSession ioSession,
 		session.setUsername(username);
 		session.setConnectAddress(address);
 		session.setHostConfigEntry(hostConfig);
-		// Set signature algorithms for public key authentication
-		String pubkeyAlgos = hostConfig
-				.getProperty(SshConstants.PUBKEY_ACCEPTED_ALGORITHMS);
-		if (!StringUtils.isEmptyOrNull(pubkeyAlgos)) {
-			List<String> signatures = getSignatureFactoriesNames();
-			signatures = session.modifyAlgorithmList(signatures, pubkeyAlgos,
-					SshConstants.PUBKEY_ACCEPTED_ALGORITHMS);
-			if (!signatures.isEmpty()) {
-				if (log.isDebugEnabled()) {
-					log.debug(SshConstants.PUBKEY_ACCEPTED_ALGORITHMS + ' '
-							+ signatures);
-				}
-				session.setSignatureFactoriesNames(signatures);
-			} else {
-				log.warn(format(SshdText.get().configNoKnownAlgorithms,
-						SshConstants.PUBKEY_ACCEPTED_ALGORITHMS, pubkeyAlgos));
-			}
-		}
 		if (session.getCredentialsProvider() == null) {
 			session.setCredentialsProvider(getCredentialsProvider());
 		}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/OpenSshServerKeyDatabase.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/OpenSshServerKeyDatabase.java
index 1a530b7..85e406f 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/OpenSshServerKeyDatabase.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/OpenSshServerKeyDatabase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018, 2019 Thomas Wolf <thomas.wolf@paranor.ch> and others
+ * Copyright (C) 2018, 2021 Thomas Wolf <thomas.wolf@paranor.ch> 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
@@ -182,10 +182,13 @@ public List<PublicKey> lookup(@NonNull String connectAddress,
 		for (HostKeyFile file : filesToUse) {
 			for (HostEntryPair current : file.get()) {
 				KnownHostEntry entry = current.getHostEntry();
-				for (SshdSocketAddress host : candidates) {
-					if (entry.isHostMatch(host.getHostName(), host.getPort())) {
-						result.add(current.getServerKey());
-						break;
+				if (!isRevoked(entry)) {
+					for (SshdSocketAddress host : candidates) {
+						if (entry.isHostMatch(host.getHostName(),
+								host.getPort())) {
+							result.add(current.getServerKey());
+							break;
+						}
 					}
 				}
 			}
@@ -266,6 +269,10 @@ private static class RevokedKeyException extends Exception {
 		private static final long serialVersionUID = 1L;
 	}
 
+	private boolean isRevoked(KnownHostEntry entry) {
+		return MARKER_REVOKED.equals(entry.getMarker());
+	}
+
 	private boolean find(Collection<SshdSocketAddress> candidates,
 			PublicKey serverKey, List<HostEntryPair> entries,
 			HostEntryPair[] modified) throws RevokedKeyException {
@@ -273,22 +280,22 @@ private boolean find(Collection<SshdSocketAddress> candidates,
 			KnownHostEntry entry = current.getHostEntry();
 			for (SshdSocketAddress host : candidates) {
 				if (entry.isHostMatch(host.getHostName(), host.getPort())) {
-					boolean isRevoked = MARKER_REVOKED
-							.equals(entry.getMarker());
+					boolean revoked = isRevoked(entry);
 					if (KeyUtils.compareKeys(serverKey,
 							current.getServerKey())) {
 						// Exact match
-						if (isRevoked) {
+						if (revoked) {
 							throw new RevokedKeyException();
 						}
 						modified[0] = null;
 						return true;
-					} else if (!isRevoked) {
+					} else if (!revoked) {
 						// Server sent a different key
 						modified[0] = current;
 						// Keep going -- maybe there's another entry for this
 						// host
 					}
+					break;
 				}
 			}
 		}
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java
index 73c2288..c0f5719 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/internal/transport/sshd/SshdText.java
@@ -28,6 +28,7 @@ public static SshdText get() {
 	/***/ public String configNoKnownAlgorithms;
 	/***/ public String configProxyJumpNotSsh;
 	/***/ public String configProxyJumpWithPath;
+	/***/ public String configUnknownAlgorithm;
 	/***/ public String ftpCloseFailed;
 	/***/ public String gssapiFailure;
 	/***/ public String gssapiInitFailure;
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/ServerKeyDatabase.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/ServerKeyDatabase.java
index b8e6cfd..b1b3c18 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/ServerKeyDatabase.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/ServerKeyDatabase.java
@@ -30,7 +30,7 @@
 public interface ServerKeyDatabase {
 
 	/**
-	 * Retrieves all known host keys for the given addresses.
+	 * Retrieves all known and not revoked host keys for the given addresses.
 	 *
 	 * @param connectAddress
 	 *            IP address the session tried to connect to
@@ -39,7 +39,7 @@ public interface ServerKeyDatabase {
 	 * @param config
 	 *            giving access to potentially interesting configuration
 	 *            settings
-	 * @return the list of known keys for the given addresses
+	 * @return the list of known and not revoked keys for the given addresses
 	 */
 	@NonNull
 	List<PublicKey> lookup(@NonNull String connectAddress,
diff --git a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java
index 2d7e0c7..cad959c 100644
--- a/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java
+++ b/org.eclipse.jgit.ssh.apache/src/org/eclipse/jgit/transport/sshd/SshdSessionFactory.java
@@ -47,7 +47,6 @@
 import org.eclipse.jgit.internal.transport.sshd.AuthenticationCanceledException;
 import org.eclipse.jgit.internal.transport.sshd.CachingKeyPairProvider;
 import org.eclipse.jgit.internal.transport.sshd.GssApiWithMicAuthFactory;
-import org.eclipse.jgit.internal.transport.sshd.JGitKexExtensionHandler;
 import org.eclipse.jgit.internal.transport.sshd.JGitPasswordAuthFactory;
 import org.eclipse.jgit.internal.transport.sshd.JGitPublicKeyAuthFactory;
 import org.eclipse.jgit.internal.transport.sshd.JGitServerKeyVerifier;
@@ -217,7 +216,6 @@ public SshdSession getSession(URIish uri,
 						new JGitUserInteraction(credentialsProvider));
 				client.setUserAuthFactories(getUserAuthFactories());
 				client.setKeyIdentityProvider(defaultKeysProvider);
-				client.setKexExtensionHandler(JGitKexExtensionHandler.INSTANCE);
 				// JGit-specific things:
 				JGitSshClient jgitClient = (JGitSshClient) client;
 				jgitClient.setKeyCache(getKeyCache());
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 be16ab0..361a40f 100644
--- a/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch.test/META-INF/MANIFEST.MF
@@ -3,18 +3,18 @@
 Bundle-Name: %Bundle-Name
 Automatic-Module-Name: org.eclipse.jgit.ssh.jsch.test
 Bundle-SymbolicName: org.eclipse.jgit.ssh.jsch.test
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: com.jcraft.jsch;version="[0.1.54,0.2.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit.ssh;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit.ssh;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.hamcrest;version="[1.1.0,3.0.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)"
-Require-Bundle: org.hamcrest.core;bundle-version="[1.3.0,2.0.0)"
diff --git a/org.eclipse.jgit.ssh.jsch.test/pom.xml b/org.eclipse.jgit.ssh.jsch.test/pom.xml
index 8c6533c..43c8d6a 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 0ae2867..abbf1b1 100644
--- a/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
+++ b/org.eclipse.jgit.ssh.jsch/META-INF/MANIFEST.MF
@@ -3,24 +3,24 @@
 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="[5.12.1,5.13.0)"
+Fragment-Host: org.eclipse.jgit;bundle-version="[5.13.2,5.14.0)"
 Bundle-Vendor: %Bundle-Vendor
 Bundle-Localization: plugin
 Bundle-ActivationPolicy: lazy
-Bundle-Version: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.jgit.internal.transport.jsch;version="5.12.1";x-friends:="org.eclipse.egit.core",
- org.eclipse.jgit.transport;version="5.12.1";
+Export-Package: org.eclipse.jgit.internal.transport.jsch;version="5.13.2";x-friends:="org.eclipse.egit.core",
+ org.eclipse.jgit.transport;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.internal.transport.ssh,
    org.eclipse.jgit.util,
    com.jcraft.jsch"
 Import-Package: com.jcraft.jsch;version="[0.1.37,0.2.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.ssh;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.ssh;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.0)",
  org.slf4j;version="[1.7.0,2.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 8a4342b..e4e88e4 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ssh.jsch;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.ssh.jsch/pom.xml b/org.eclipse.jgit.ssh.jsch/pom.xml
index 2bbbe64..72fabb6 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.ssh.jsch</artifactId>
diff --git a/org.eclipse.jgit.ssh.jsch/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java b/org.eclipse.jgit.ssh.jsch/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java
index 88202dd..88b8243 100644
--- a/org.eclipse.jgit.ssh.jsch/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java
+++ b/org.eclipse.jgit.ssh.jsch/src/org/eclipse/jgit/transport/JschConfigSessionFactory.java
@@ -40,6 +40,7 @@
 import org.eclipse.jgit.errors.TransportException;
 import org.eclipse.jgit.internal.transport.jsch.JSchText;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -398,14 +399,26 @@ protected JSch getJSch(OpenSshConfig.Host hc, FS fs) throws JSchException {
 	 */
 	protected JSch createDefaultJSch(FS fs) throws JSchException {
 		final JSch jsch = new JSch();
-		JSch.setConfig("ssh-rsa", JSch.getConfig("signature.rsa")); //$NON-NLS-1$ //$NON-NLS-2$
-		JSch.setConfig("ssh-dss", JSch.getConfig("signature.dss")); //$NON-NLS-1$ //$NON-NLS-2$
+		// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=537790 and
+		// https://bugs.eclipse.org/bugs/show_bug.cgi?id=576604
+		copyGlobalConfigIfNotSet("signature.rsa", "ssh-rsa"); //$NON-NLS-1$ //$NON-NLS-2$
+		copyGlobalConfigIfNotSet("signature.dss", "ssh-dss"); //$NON-NLS-1$ //$NON-NLS-2$
 		configureJSch(jsch);
 		knownHosts(jsch, fs);
 		identities(jsch, fs);
 		return jsch;
 	}
 
+	private void copyGlobalConfigIfNotSet(String from, String to) {
+		String toValue = JSch.getConfig(to);
+		if (StringUtils.isEmptyOrNull(toValue)) {
+			String fromValue = JSch.getConfig(from);
+			if (!StringUtils.isEmptyOrNull(fromValue)) {
+				JSch.setConfig(to, fromValue);
+			}
+		}
+	}
+
 	private static void knownHosts(JSch sch, FS fs) throws JSchException {
 		final File home = fs.userHome();
 		if (home == null)
diff --git a/org.eclipse.jgit.test/META-INF/MANIFEST.MF b/org.eclipse.jgit.test/META-INF/MANIFEST.MF
index 2fba2d3..f7a4ae3 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
@@ -16,59 +16,61 @@
  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.assertj.core.api;version="[3.14.0,4.0.0)",
- org.eclipse.jgit.annotations;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.api.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.archive;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.attributes;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.awtui;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.blame;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.diff;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.dircache;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.events;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.fnmatch;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.gitrepo;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.hooks;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.ignore;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.ignore.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.fsck;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.dfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.io;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.storage.reftable;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.connectivity;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.internal.transport.parser;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.junit.time;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lfs;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.logging;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.merge;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.notes;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.patch;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.pgm;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.pgm.internal;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revplot;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.file;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.storage.pack;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.submodule;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.http;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport.resolver;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.treewalk.filter;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.io;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util.sha1;version="[5.12.1,5.13.0)",
+ org.eclipse.jgit.annotations;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.api.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.archive;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.attributes;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.awtui;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.blame;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.diff;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.dircache;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.events;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.fnmatch;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.gitrepo;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.hooks;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.ignore;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.ignore.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.fsck;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.dfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.io;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.storage.reftable;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.connectivity;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.internal.transport.parser;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.junit.time;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lfs;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.logging;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.merge;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.notes;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.patch;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.pgm;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.pgm.internal;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revplot;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.file;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.storage.pack;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.submodule;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.http;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport.resolver;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.treewalk.filter;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.io;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util.sha1;version="[5.13.2,5.14.0)",
+ org.hamcrest;version="[1.1.0,3.0.0)",
+ org.hamcrest.collection;version="[1.1.0,3.0.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)",
@@ -82,5 +84,3 @@
  org.objenesis;version="[2.6.0,3.0.0)",
  org.slf4j;version="[1.7.0,2.0.0)",
  org.tukaani.xz;version="[1.6.0,2.0)"
-Require-Bundle: org.hamcrest.core;bundle-version="[1.1.0,2.0.0)",
- org.hamcrest.library;bundle-version="[1.1.0,2.0.0)"
diff --git a/org.eclipse.jgit.test/build.properties b/org.eclipse.jgit.test/build.properties
index b527a74..212c8bd 100644
--- a/org.eclipse.jgit.test/build.properties
+++ b/org.eclipse.jgit.test/build.properties
@@ -7,5 +7,4 @@
                plugin.properties,\
                bin-tst/,\
                bin/
-additional.bundles = org.apache.log4j,\
-                     org.slf4j.binding.log4j12
+additional.bundles = org.slf4j.binding.simple
diff --git a/org.eclipse.jgit.test/pom.xml b/org.eclipse.jgit.test/pom.xml
index 3224e99..498cc45 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-SNAPSHOT</version>
   </parent>
 
   <artifactId>org.eclipse.jgit.test</artifactId>
@@ -60,9 +60,9 @@
 
     <dependency>
       <groupId>org.hamcrest</groupId>
-      <artifactId>hamcrest-library</artifactId>
+      <artifactId>hamcrest</artifactId>
       <scope>test</scope>
-      <version>[1.1.0,2.0.0)</version>
+      <version>${hamcrest-version}</version>
     </dependency>
 
     <dependency>
diff --git a/org.eclipse.jgit.test/tests.bzl b/org.eclipse.jgit.test/tests.bzl
index 34df07d..e201bdb 100644
--- a/org.eclipse.jgit.test/tests.bzl
+++ b/org.eclipse.jgit.test/tests.bzl
@@ -36,7 +36,7 @@
             ]
         if src.endswith("SecurityManagerMissingPermissionsTest.java"):
             additional_deps = [
-                "//lib:log4j",
+                "//lib:slf4j-simple",
             ]
         if src.endswith("JDKHttpConnectionTest.java"):
             additional_deps = [
@@ -68,6 +68,7 @@
                 "//lib:javaewah",
                 "//lib:junit",
                 "//lib:slf4j-api",
+                "//lib:slf4j-simple",
                 "//org.eclipse.jgit:jgit",
                 "//org.eclipse.jgit.junit:junit",
                 "//org.eclipse.jgit.lfs:jgit-lfs",
diff --git a/org.eclipse.jgit.test/tst-rsrc/jgit-s3-config.disabled.properties b/org.eclipse.jgit.test/tst-rsrc/jgit-s3-config.disabled.properties
index d540977..3f36282 100644
--- a/org.eclipse.jgit.test/tst-rsrc/jgit-s3-config.disabled.properties
+++ b/org.eclipse.jgit.test/tst-rsrc/jgit-s3-config.disabled.properties
@@ -40,6 +40,15 @@
 # * https://docs.aws.amazon.com/AmazonS3/latest/dev/manage-lifecycle-using-console.html
 #
 
+# AWS API signature version (defaults to 2)
+# aws.api.signature.version=4
+
+# AWS S3 Region Domain (defaults to s3.amazonaws.com)
+# domain: s3-us-east-2.amazonaws.com
+
+# AWS S3 Region (required if aws.api.signature.version=4, must match domain)
+# region: us-east-2
+
 # Test bucket name
 test.bucket=jgit.eclipse.org
 
diff --git a/org.eclipse.jgit.test/tst-rsrc/log4j.properties b/org.eclipse.jgit.test/tst-rsrc/log4j.properties
deleted file mode 100644
index 856a731..0000000
--- a/org.eclipse.jgit.test/tst-rsrc/log4j.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-
-# Root logger option
-log4j.rootLogger=INFO, stdout
-
-# Direct log messages to stdout
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
-log4j.appender.fileLogger.bufferedIO = true
-log4j.appender.fileLogger.bufferSize = 4096
-
-#log4j.logger.org.eclipse.jgit.util.FS = DEBUG
-#log4j.logger.org.eclipse.jgit.internal.storage.file.FileSnapshot = DEBUG
diff --git a/org.eclipse.jgit.test/tst-rsrc/simplelogger.properties b/org.eclipse.jgit.test/tst-rsrc/simplelogger.properties
index 011b2f8..235fea2 100644
--- a/org.eclipse.jgit.test/tst-rsrc/simplelogger.properties
+++ b/org.eclipse.jgit.test/tst-rsrc/simplelogger.properties
@@ -1,9 +1,9 @@
-org.slf4j.simpleLogger.logFile = System.err
-org.slf4j.simpleLogger.cacheOutputStream = true
-org.slf4j.simpleLogger.defaultLogLevel = info
-org.slf4j.simpleLogger.showDateTime = true
-org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSSXXX
-org.slf4j.simpleLogger.showThreadName = true
+org.slf4j.simpleLogger.defaultLogLevel=info
+org.slf4j.simpleLogger.logFile=System.err
+org.slf4j.simpleLogger.showDateTime=true
+org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss
+org.slf4j.simpleLogger.showThreadName=true
+org.slf4j.simpleLogger.showLogName=true
 
 #org.slf4j.simpleLogger.log.org.eclipse.jgit.util.FS = debug
 #org.slf4j.simpleLogger.log.org.eclipse.jgit.internal.storage.file.FileSnapshot = debug
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
index de25870..c928d2a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java
@@ -22,6 +22,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Stream;
 
 import org.eclipse.jgit.api.ListBranchCommand.ListMode;
 import org.eclipse.jgit.api.errors.GitAPIException;
@@ -115,6 +116,49 @@ public void testCloneRepository() throws IOException,
 	}
 
 	@Test
+	public void testCloneRepository_refLogForLocalRefs()
+			throws IOException, JGitInternalException, GitAPIException {
+		File directory = createTempDirectory("testCloneRepository");
+		CloneCommand command = Git.cloneRepository();
+		command.setDirectory(directory);
+		command.setURI(fileUri());
+		Git git2 = command.call();
+		Repository clonedRepo = git2.getRepository();
+		addRepoToClose(clonedRepo);
+
+		List<Ref> clonedRefs = clonedRepo.getRefDatabase().getRefs();
+		Stream<Ref> remoteRefs = clonedRefs.stream()
+				.filter(CloneCommandTest::isRemote);
+		Stream<Ref> localHeadsRefs = clonedRefs.stream()
+				.filter(CloneCommandTest::isLocalHead);
+
+		remoteRefs.forEach(ref -> assertFalse(
+				"Ref " + ref.getName()
+						+ " is remote and should not have a reflog",
+				hasRefLog(clonedRepo, ref)));
+		localHeadsRefs.forEach(ref -> assertTrue(
+				"Ref " + ref.getName()
+						+ " is local head and should have a reflog",
+				hasRefLog(clonedRepo, ref)));
+	}
+
+	private static boolean isRemote(Ref ref) {
+		return ref.getName().startsWith(Constants.R_REMOTES);
+	}
+
+	private static boolean isLocalHead(Ref ref) {
+		return !isRemote(ref) && ref.getName().startsWith(Constants.R_HEADS);
+	}
+
+	private static boolean hasRefLog(Repository repo, Ref ref) {
+		try {
+			return repo.getReflogReader(ref.getName()).getLastEntry() != null;
+		} catch (IOException ioe) {
+			throw new IllegalStateException(ioe);
+		}
+	}
+
+	@Test
 	public void testCloneRepositoryExplicitGitDir() throws IOException,
 			JGitInternalException, GitAPIException {
 		File directory = createTempDirectory("testCloneRepository");
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java
index 6479d15..b608afa 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/FetchCommandTest.java
@@ -77,6 +77,26 @@ public void testFetch() throws Exception {
 	}
 
 	@Test
+	public void testFetchHasRefLogForRemoteRef() throws Exception {
+		// create an initial commit SHA1 for the default branch
+		ObjectId defaultBranchSha1 = remoteGit.commit()
+				.setMessage("initial commit").call().getId();
+
+		git.fetch().setRemote("test")
+				.setRefSpecs("refs/heads/*:refs/remotes/origin/*").call();
+
+		List<Ref> allFetchedRefs = git.getRepository().getRefDatabase()
+				.getRefs();
+		assertEquals(allFetchedRefs.size(), 1);
+		Ref remoteRef = allFetchedRefs.get(0);
+
+		assertTrue(remoteRef.getName().startsWith(Constants.R_REMOTES));
+		assertEquals(defaultBranchSha1, remoteRef.getObjectId());
+		assertNotNull(git.getRepository().getReflogReader(remoteRef.getName())
+				.getLastEntry());
+	}
+
+	@Test
 	public void testForcedFetch() throws Exception {
 		remoteGit.commit().setMessage("commit").call();
 		remoteGit.commit().setMessage("commit2").call();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/SecurityManagerMissingPermissionsTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/SecurityManagerMissingPermissionsTest.java
index a07f370..d0fbdbd 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/SecurityManagerMissingPermissionsTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/SecurityManagerMissingPermissionsTest.java
@@ -13,17 +13,15 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
-import java.io.StringWriter;
+import java.io.PrintStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.security.Policy;
 import java.util.Collections;
 
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.WriterAppender;
 import org.eclipse.jgit.junit.RepositoryTestCase;
 import org.eclipse.jgit.util.FileUtils;
 import org.junit.After;
@@ -38,25 +36,21 @@ public class SecurityManagerMissingPermissionsTest extends RepositoryTestCase {
 	/**
 	 * Collects all logging sent to the logging system.
 	 */
-	private final StringWriter errorOutputWriter = new StringWriter();
-
-	/**
-	 * Appender to intercept all logging sent to the logging system.
-	 */
-	private WriterAppender appender;
+	private final ByteArrayOutputStream errorOutput = new ByteArrayOutputStream();
 
 	private SecurityManager originalSecurityManager;
 
+	private PrintStream defaultErrorOutput;
+
 	@Override
 	@Before
 	public void setUp() throws Exception {
 		originalSecurityManager = System.getSecurityManager();
 
-		appender = new WriterAppender(
-				new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN),
-				errorOutputWriter);
-
-		Logger.getRootLogger().addAppender(appender);
+		// slf4j-simple logs to System.err, redirect it to enable asserting
+		// logged errors
+		defaultErrorOutput = System.err;
+		System.setErr(new PrintStream(errorOutput));
 
 		refreshPolicyAllPermission(Policy.getPolicy());
 		System.setSecurityManager(new SecurityManager());
@@ -85,14 +79,14 @@ public void testCreateNewRepos_MissingPermissions() throws Exception {
 
 		addRepoToClose(git.getRepository());
 
-		assertEquals("", errorOutputWriter.toString());
+		assertEquals("", errorOutput.toString());
 	}
 
 	@Override
 	@After
 	public void tearDown() throws Exception {
 		System.setSecurityManager(originalSecurityManager);
-		Logger.getRootLogger().removeAppender(appender);
+		System.setErr(defaultErrorOutput);
 		super.tearDown();
 	}
 
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
index 62824d3..b694f4a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/DiffFormatterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010, 2020 Google Inc. and others
+ * Copyright (C) 2010, 2021 Google Inc. and others
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0 which is available at
@@ -18,6 +18,8 @@
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.Status;
@@ -34,8 +36,12 @@
 import org.eclipse.jgit.patch.HunkHeader;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
+import org.eclipse.jgit.treewalk.CanonicalTreeParser;
 import org.eclipse.jgit.treewalk.FileTreeIterator;
+import org.eclipse.jgit.treewalk.filter.OrTreeFilter;
 import org.eclipse.jgit.treewalk.filter.PathFilter;
+import org.eclipse.jgit.treewalk.filter.PathSuffixFilter;
+import org.eclipse.jgit.treewalk.filter.TreeFilter;
 import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.RawParseUtils;
 import org.eclipse.jgit.util.io.DisabledOutputStream;
@@ -492,6 +498,68 @@ public void testTrackedFileInIgnoredFolderUnchanged()
 	}
 
 	@Test
+	public void testFilter() throws Exception {
+		RevCommit parent;
+		RevCommit head;
+		try (Git git = new Git(db)) {
+			writeTrashFile("foo.txt", "foo\n");
+			writeTrashFile("src/some.txt", "some\n");
+			writeTrashFile("src/image.png", "image\n");
+			writeTrashFile("src/test.pdf", "test\n");
+			writeTrashFile("src/xyz.txt", "xyz\n");
+			git.add().addFilepattern(".").call();
+			parent = git.commit().setMessage("initial").call();
+			writeTrashFile("foo.txt", "FOO\n");
+			writeTrashFile("src/some.txt", "SOME\n");
+			writeTrashFile("src/image.png", "IMAGE\n");
+			writeTrashFile("src/test.pdf", "TEST\n");
+			writeTrashFile("src/xyz.txt", "XYZ\n");
+			git.add().addFilepattern(".").call();
+			head = git.commit().setMessage("second").call();
+		}
+		try (ByteArrayOutputStream os = new ByteArrayOutputStream();
+				DiffFormatter dfmt = new DiffFormatter(os)) {
+			dfmt.setRepository(db);
+			List<TreeFilter> skip = new ArrayList<>();
+			skip.add(PathSuffixFilter.create(".png"));
+			skip.add(PathSuffixFilter.create(".pdf"));
+			dfmt.setPathFilter(OrTreeFilter.create(skip).negate());
+			dfmt.format(
+					new CanonicalTreeParser(null, db.newObjectReader(),
+							parent.getTree()),
+					new CanonicalTreeParser(null, db.newObjectReader(),
+							head.getTree()));
+			dfmt.flush();
+
+			String actual = os.toString("UTF-8");
+
+			String expected = "diff --git a/foo.txt b/foo.txt\n"
+					+ "index 257cc56..b7d6715 100644\n"
+					+ "--- a/foo.txt\n"
+					+ "+++ b/foo.txt\n"
+					+ "@@ -1 +1 @@\n"
+					+ "-foo\n"
+					+ "+FOO\n"
+					+ "diff --git a/src/some.txt b/src/some.txt\n"
+					+ "index 363ef61..76cea5f 100644\n"
+					+ "--- a/src/some.txt\n"
+					+ "+++ b/src/some.txt\n"
+					+ "@@ -1 +1 @@\n"
+					+ "-some\n"
+					+ "+SOME\n"
+					+ "diff --git a/src/xyz.txt b/src/xyz.txt\n"
+					+ "index cd470e6..d4e3ab0 100644\n"
+					+ "--- a/src/xyz.txt\n"
+					+ "+++ b/src/xyz.txt\n"
+					+ "@@ -1 +1 @@\n"
+					+ "-xyz\n"
+					+ "+XYZ\n";
+
+			assertEquals(expected, actual);
+		}
+	}
+
+	@Test
 	public void testTrackedFileInIgnoredFolderChanged()
 			throws Exception {
 		String expectedDiff = "diff --git a/empty/empty/foo b/empty/empty/foo\n"
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java
index 0fca652..618ccc0 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/dircache/DirCacheBasicTest.java
@@ -17,19 +17,48 @@
 import static org.junit.Assert.fail;
 
 import java.io.File;
+import java.io.IOException;
 import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Collection;
 
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.junit.MockSystemReader;
 import org.eclipse.jgit.junit.RepositoryTestCase;
+import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.util.SystemReader;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
 
+@RunWith(Parameterized.class)
 public class DirCacheBasicTest extends RepositoryTestCase {
+	@Parameter(0)
+	public boolean skipHash;
+
+	@Parameters(name = "skipHash: {0}")
+	public static Collection<Boolean[]> getSkipHashValues() {
+		return Arrays
+				.asList(new Boolean[][] { { Boolean.TRUE },
+						{ Boolean.FALSE } });
+	}
+
+	@Before
+	public void setup() throws IOException {
+		FileBasedConfig cfg = db.getConfig();
+		cfg.setBoolean(ConfigConstants.CONFIG_INDEX_SECTION, null,
+				ConfigConstants.CONFIG_KEY_SKIPHASH, skipHash);
+		cfg.save();
+	}
+
 	@Test
 	public void testReadMissing_RealIndex() throws Exception {
 		final File idx = new File(db.getDirectory(), "index");
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileSnapshotTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileSnapshotTest.java
index 5e87b8f..12773c2 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileSnapshotTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/FileSnapshotTest.java
@@ -209,6 +209,20 @@ public void fileSnapshotEquals() throws Exception {
 		assertTrue(fs2.equals(fs1));
 	}
 
+	@Test
+	public void snapshotAndFileMissingIsNotModified() throws Exception {
+		File doesNotExist = trash.resolve("DOES_NOT_EXIST").toFile();
+		FileSnapshot missing = FileSnapshot.save(doesNotExist);
+		assertFalse(missing.isModified(doesNotExist));
+	}
+
+	@Test
+	public void missingFileEquals() throws Exception {
+		FileSnapshot missing = FileSnapshot.save(
+				trash.resolve("DOES_NOT_EXIST").toFile());
+		assertTrue(missing.equals(FileSnapshot.MISSING_FILE));
+	}
+
 	@SuppressWarnings("boxing")
 	@Test
 	public void detectFileModified() throws IOException {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
index 5cac1e3..d53d5eb 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/GcConcurrentTest.java
@@ -14,10 +14,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.IOException;
+import java.nio.channels.ClosedByInterruptException;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.concurrent.BrokenBarrierException;
@@ -226,10 +226,8 @@ public void testInterruptGc() throws Exception {
 			if (cause instanceof CancelledException) {
 				assertEquals(JGitText.get().operationCanceled,
 						cause.getMessage());
-			} else if (cause instanceof IOException) {
-				Throwable cause2 = cause.getCause();
-				assertTrue(cause2 instanceof InterruptedException
-						|| cause2 instanceof ExecutionException);
+			} else if (cause instanceof ClosedByInterruptException) {
+				// thread was interrupted
 			} else {
 				fail("unexpected exception " + e);
 			}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/LockFileTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/LockFileTest.java
index 509935d..7eab1dc 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/LockFileTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/LockFileTest.java
@@ -200,4 +200,16 @@ public void testLockForAppend() throws Exception {
 		assertFalse(lock.isLocked());
 		checkFile(f, "contentother");
 	}
+
+	@Test
+	public void testUnlockNoop() throws Exception {
+		File f = writeTrashFile("somefile", "content");
+		try {
+			LockFile lock = new LockFile(f);
+			lock.unlock();
+			lock.unlock();
+		} catch (Throwable e) {
+			fail("unlock should be noop if not locked at all.");
+		}
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackWriterTest.java
index e422ab9..71aca9d 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackWriterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/file/PackWriterTest.java
@@ -18,6 +18,10 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -25,6 +29,7 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.text.ParseException;
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -32,6 +37,7 @@
 import java.util.List;
 import java.util.Set;
 
+import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.internal.storage.file.PackIndex.MutableEntry;
 import org.eclipse.jgit.internal.storage.pack.PackExt;
@@ -43,6 +49,7 @@
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectIdSet;
 import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.Sets;
 import org.eclipse.jgit.revwalk.DepthWalk;
@@ -58,6 +65,7 @@
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 public class PackWriterTest extends SampleDataRepositoryTestCase {
 
@@ -626,6 +634,131 @@ public void testShallowFetchShallowAncestorDepth2() throws Exception {
 		}
 	}
 
+	@Test
+	public void testTotalPackFilesScanWhenSearchForReuseTimeoutNotSet()
+			throws Exception {
+		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+		PackWriter mockedPackWriter = Mockito
+				.spy(new PackWriter(config, fileRepository.newObjectReader()));
+
+		doNothing().when(mockedPackWriter).select(any(), any());
+
+		try (FileOutputStream packOS = new FileOutputStream(
+				getPackFileToWrite(fileRepository, mockedPackWriter))) {
+			mockedPackWriter.writePack(NullProgressMonitor.INSTANCE,
+					NullProgressMonitor.INSTANCE, packOS);
+		}
+
+		long numberOfPackFiles = new GC(fileRepository)
+				.getStatistics().numberOfPackFiles;
+		int expectedSelectCalls =
+				// Objects contained in multiple packfiles * number of packfiles
+				2 * (int) numberOfPackFiles +
+				// Objects in single packfile
+						1;
+		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
+				any());
+	}
+
+	@Test
+	public void testTotalPackFilesScanWhenSkippingSearchForReuseTimeoutCheck()
+			throws Exception {
+		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+		PackConfig packConfig = new PackConfig();
+		packConfig.setSearchForReuseTimeout(Duration.ofSeconds(-1));
+		PackWriter mockedPackWriter = Mockito.spy(
+				new PackWriter(packConfig, fileRepository.newObjectReader()));
+
+		doNothing().when(mockedPackWriter).select(any(), any());
+
+		try (FileOutputStream packOS = new FileOutputStream(
+				getPackFileToWrite(fileRepository, mockedPackWriter))) {
+			mockedPackWriter.writePack(NullProgressMonitor.INSTANCE,
+					NullProgressMonitor.INSTANCE, packOS);
+		}
+
+		long numberOfPackFiles = new GC(fileRepository)
+				.getStatistics().numberOfPackFiles;
+		int expectedSelectCalls =
+				// Objects contained in multiple packfiles * number of packfiles
+				2 * (int) numberOfPackFiles +
+				// Objects contained in single packfile
+						1;
+		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
+				any());
+	}
+
+	@Test
+	public void testPartialPackFilesScanWhenDoingSearchForReuseTimeoutCheck()
+			throws Exception {
+		FileRepository fileRepository = setUpRepoWithMultiplePackfiles();
+		PackConfig packConfig = new PackConfig();
+		packConfig.setSearchForReuseTimeout(Duration.ofSeconds(-1));
+		PackWriter mockedPackWriter = Mockito.spy(
+				new PackWriter(packConfig, fileRepository.newObjectReader()));
+		mockedPackWriter.enableSearchForReuseTimeout();
+
+		doNothing().when(mockedPackWriter).select(any(), any());
+
+		try (FileOutputStream packOS = new FileOutputStream(
+				getPackFileToWrite(fileRepository, mockedPackWriter))) {
+			mockedPackWriter.writePack(NullProgressMonitor.INSTANCE,
+					NullProgressMonitor.INSTANCE, packOS);
+		}
+
+		int expectedSelectCalls = 3; // Objects in packfiles
+		verify(mockedPackWriter, times(expectedSelectCalls)).select(any(),
+				any());
+	}
+
+	/**
+	 * Creates objects and packfiles in the following order:
+	 * <ul>
+	 * <li>Creates 2 objects (C1 = commit, T1 = tree)
+	 * <li>Creates packfile P1 (containing C1, T1)
+	 * <li>Creates 1 object (C2 commit)
+	 * <li>Creates packfile P2 (containing C1, T1, C2)
+	 * <li>Create 1 object (C3 commit)
+	 * </ul>
+	 *
+	 * @throws Exception
+	 */
+	private FileRepository setUpRepoWithMultiplePackfiles() throws Exception {
+		FileRepository fileRepository = createWorkRepository();
+		try (Git git = new Git(fileRepository)) {
+			// Creates 2 objects (C1 = commit, T1 = tree)
+			git.commit().setMessage("First commit").call();
+			GC gc = new GC(fileRepository);
+			gc.setPackExpireAgeMillis(Long.MAX_VALUE);
+			gc.setExpireAgeMillis(Long.MAX_VALUE);
+			// Creates packfile P1 (containing C1, T1)
+			gc.gc();
+			// Creates 1 object (C2 commit)
+			git.commit().setMessage("Second commit").call();
+			// Creates packfile P2 (containing C1, T1, C2)
+			gc.gc();
+			// Create 1 object (C3 commit)
+			git.commit().setMessage("Third commit").call();
+		}
+		return fileRepository;
+	}
+
+	private PackFile getPackFileToWrite(FileRepository fileRepository,
+			PackWriter mockedPackWriter) throws IOException {
+		File packdir = fileRepository.getObjectDatabase().getPackDirectory();
+		PackFile packFile = new PackFile(packdir,
+				mockedPackWriter.computeName(), PackExt.PACK);
+
+		Set<ObjectId> all = new HashSet<>();
+		for (Ref r : fileRepository.getRefDatabase().getRefs()) {
+			all.add(r.getObjectId());
+		}
+
+		mockedPackWriter.preparePack(NullProgressMonitor.INSTANCE, all,
+				PackWriter.NONE);
+		return packFile;
+	}
+
 	private FileRepository setupRepoForShallowFetch() throws Exception {
 		FileRepository repo = createBareRepository();
 		// TestRepository will close the repo, but we need to return an open
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/pack/GcCommitSelectionTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/pack/GcCommitSelectionTest.java
index cc826c3..190ac8b 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/pack/GcCommitSelectionTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/internal/storage/pack/GcCommitSelectionTest.java
@@ -83,6 +83,40 @@ private void testBitmapSpansNoMerges(boolean withTags) throws Exception {
 	}
 
 	@Test
+	public void testBitmapDoesNotIncludeAnnotatedTags() throws Exception {
+		/*
+		 * Make sure that the bitmap generated for the following commit
+		 * graph does not include commit2 because it is not reachable by any
+		 * heads, despite being reachable from tag1 through the annotated-tag1.
+		 *
+		 * refs/heads/main
+		 *   ^
+		 *   |
+		 *  commit1 <-- commit2 <- annotated-tag1 <- tag1
+		 *   ^
+		 *   |
+		 *  commit0
+		 */
+		String mainBranch = "refs/heads/main";
+		BranchBuilder bb = tr.branch(mainBranch);
+
+		String commitMsg = "commit msg";
+		String fileBody = "file body";
+		String tagName = "tag1";
+		bb.commit().message(commitMsg + " 1").add("file1", fileBody).create();
+		RevCommit commit1 = bb.commit().message(commitMsg + " 2").add("file2", fileBody).create();
+		RevCommit commit2 = bb.commit().message(commitMsg + " 3").add("file3", fileBody).create();
+		tr.lightweightTag(tagName, tr.tag(tagName, commit2));
+		tr.branch(mainBranch).update(commit1);
+
+		gc.setExpireAgeMillis(0);
+		gc.gc();
+
+		// Create only 2 bitmaps, for commit0 and commit1, excluding commit2
+		assertEquals(2, gc.getStatistics().numberOfBitmaps);
+	}
+
+	@Test
 	public void testBitmapSpansWithMerges() throws Exception {
 		/*
 		 * Commits that are merged. Since 55 is in the oldest history it is
@@ -187,6 +221,24 @@ public void testBitmapsForExcessiveBranches() throws Exception {
 	}
 
 	@Test
+	public void testBitmapsForExcludedBranches() throws Exception {
+		createNewCommitOnNewBranch("main");
+		createNewCommitOnNewBranch("other");
+		PackConfig packConfig = new PackConfig();
+		packConfig.setBitmapExcludedRefsPrefixes(new String[] { "refs/heads/other" });
+		gc.setPackConfig(packConfig);
+		gc.gc();
+		assertEquals(1,
+			gc.getStatistics().numberOfBitmaps);
+	}
+
+	private void createNewCommitOnNewBranch(String branchName) throws Exception {
+		BranchBuilder bb = tr.branch("refs/heads/" + branchName);
+		String msg = "New branch " + branchName;
+		bb.commit().message(msg).add("some-filename.txt", msg).create();
+	}
+
+	@Test
 	public void testSelectionOrderingWithChains() throws Exception {
 		/*-
 		 * Create a history like this, where 'N' is the number of seconds from
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
index 327b554..fe3c1db 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/ConfigTest.java
@@ -34,6 +34,7 @@
 import static org.junit.Assert.fail;
 
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.text.MessageFormat;
@@ -50,6 +51,7 @@
 import org.eclipse.jgit.api.MergeCommand.FastForwardMode;
 import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.junit.JGitTestUtil;
 import org.eclipse.jgit.junit.MockSystemReader;
 import org.eclipse.jgit.merge.MergeConfig;
 import org.eclipse.jgit.storage.file.FileBasedConfig;
@@ -1463,6 +1465,107 @@ public void testWhitespaceContinuation() throws ConfigInvalidException {
 		assertEquals("tr   ue", parseEscapedValue("tr \\\r\n  ue"));
 	}
 
+	@Test
+	public void testCommitTemplateEmptyConfig()
+			throws ConfigInvalidException, IOException {
+		// no values defined nowhere
+		Config config = new Config(null);
+		assertNull(config.get(CommitConfig.KEY).getCommitTemplatePath());
+		assertNull(config.get(CommitConfig.KEY).getCommitTemplateContent());
+	}
+
+	@Test
+	public void testCommitTemplateConfig()
+			throws ConfigInvalidException, IOException {
+
+		File tempFile = tmp.newFile("testCommitTemplate-");
+		String templateContent = "content of the template";
+		JGitTestUtil.write(tempFile, templateContent);
+		String expectedTemplatePath = tempFile.getPath();
+
+		Config config = parse(
+				"[commit]\n\ttemplate = " + expectedTemplatePath + "\n");
+
+		String templatePath = config.get(CommitConfig.KEY)
+				.getCommitTemplatePath();
+		String commitEncoding = config.get(CommitConfig.KEY)
+				.getCommitEncoding();
+		assertEquals(expectedTemplatePath, templatePath);
+		assertEquals(templateContent,
+				config.get(CommitConfig.KEY).getCommitTemplateContent());
+		assertNull("no commitEncoding has been set so it must be null",
+				commitEncoding);
+	}
+
+	@Test
+	public void testCommitTemplateEncoding()
+			throws ConfigInvalidException, IOException {
+		Config config = new Config(null);
+		File tempFile = tmp.newFile("testCommitTemplate-");
+		String templateContent = "content of the template";
+		JGitTestUtil.write(tempFile, templateContent);
+		String expectedTemplatePath = tempFile.getPath();
+		config = parse("[i18n]\n\tcommitEncoding = utf-8\n"
+				+ "[commit]\n\ttemplate = " + expectedTemplatePath + "\n");
+		assertEquals(templateContent,
+				config.get(CommitConfig.KEY).getCommitTemplateContent());
+		String commitEncoding = config.get(CommitConfig.KEY)
+				.getCommitEncoding();
+		assertEquals("commitEncoding has been set to utf-8 it must be utf-8",
+				"utf-8", commitEncoding);
+	}
+
+	@Test
+	public void testCommitTemplatePathInHomeDirecory()
+			throws ConfigInvalidException, IOException {
+		Config config = new Config(null);
+		File tempFile = tmp.newFile("testCommitTemplate-");
+		String templateContent = "content of the template";
+		JGitTestUtil.write(tempFile, templateContent);
+		// proper evaluation of the ~/ directory
+		String homeDir = System.getProperty("user.home");
+		File tempFileInHomeDirectory = File.createTempFile("fileInHomeFolder",
+				".tmp", new File(homeDir));
+		tempFileInHomeDirectory.deleteOnExit();
+		JGitTestUtil.write(tempFileInHomeDirectory, templateContent);
+		String expectedTemplatePath = tempFileInHomeDirectory.getPath()
+				.replace(homeDir, "~");
+		config = parse("[commit]\n\ttemplate = " + expectedTemplatePath + "\n");
+		String templatePath = config.get(CommitConfig.KEY)
+				.getCommitTemplatePath();
+		assertEquals(expectedTemplatePath, templatePath);
+		assertEquals(templateContent,
+				config.get(CommitConfig.KEY).getCommitTemplateContent());
+	}
+
+	@Test(expected = ConfigInvalidException.class)
+	public void testCommitTemplateWithInvalidEncoding()
+			throws ConfigInvalidException, IOException {
+		Config config = new Config(null);
+		File tempFile = tmp.newFile("testCommitTemplate-");
+		String templateContent = "content of the template";
+		JGitTestUtil.write(tempFile, templateContent);
+		config = parse("[i18n]\n\tcommitEncoding = invalidEcoding\n"
+				+ "[commit]\n\ttemplate = " + tempFile.getPath() + "\n");
+		config.get(CommitConfig.KEY).getCommitTemplateContent();
+	}
+
+	@Test(expected = FileNotFoundException.class)
+	public void testCommitTemplateWithInvalidPath()
+			throws ConfigInvalidException, IOException {
+		Config config = new Config(null);
+		File tempFile = tmp.newFile("testCommitTemplate-");
+		String templateContent = "content of the template";
+		JGitTestUtil.write(tempFile, templateContent);
+		// commit message encoding
+		String expectedTemplatePath = "nonExistingTemplate";
+		config = parse("[commit]\n\ttemplate = " + expectedTemplatePath + "\n");
+		String templatePath = config.get(CommitConfig.KEY)
+				.getCommitTemplatePath();
+		assertEquals(expectedTemplatePath, templatePath);
+		config.get(CommitConfig.KEY).getCommitTemplateContent();
+	}
+
 	private static void assertValueRoundTrip(String value)
 			throws ConfigInvalidException {
 		assertValueRoundTrip(value, value);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/TextProgressMonitorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/TextProgressMonitorTest.java
new file mode 100644
index 0000000..55ca2cd
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/TextProgressMonitorTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2023, SAP SE or an SAP affiliate company 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.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TextProgressMonitorTest {
+
+	private TextProgressMonitor m;
+
+	private ByteArrayOutputStream buf;
+
+	@Before
+	public void setup() {
+		buf = new ByteArrayOutputStream();
+		m = new TextProgressMonitor(
+				new OutputStreamWriter(buf, StandardCharsets.UTF_8));
+	}
+
+	@Test
+	public void testSimple() throws Exception {
+		m.beginTask("task", 10);
+		for (int i = 0; i < 10; i++) {
+			m.update(1);
+		}
+		m.endTask();
+		Assert.assertArrayEquals(
+				new String[] { "", "task:                    10% ( 1/10)",
+						"task:                    20% ( 2/10)",
+						"task:                    30% ( 3/10)",
+						"task:                    40% ( 4/10)",
+						"task:                    50% ( 5/10)",
+						"task:                    60% ( 6/10)",
+						"task:                    70% ( 7/10)",
+						"task:                    80% ( 8/10)",
+						"task:                    90% ( 9/10)",
+						"task:                   100% (10/10)",
+						"task:                   100% (10/10)\n" },
+				bufLines());
+	}
+
+	@Test
+	public void testLargeNumbers() throws Exception {
+		m.beginTask("task", 1_000_000_000);
+		for (int i = 0; i < 10; i++) {
+			m.update(100_000_000);
+		}
+		m.endTask();
+		Assert.assertArrayEquals(
+				new String[] { "",
+						"task:                    10% ( 100000000/1000000000)",
+						"task:                    20% ( 200000000/1000000000)",
+						"task:                    30% ( 300000000/1000000000)",
+						"task:                    40% ( 400000000/1000000000)",
+						"task:                    50% ( 500000000/1000000000)",
+						"task:                    60% ( 600000000/1000000000)",
+						"task:                    70% ( 700000000/1000000000)",
+						"task:                    80% ( 800000000/1000000000)",
+						"task:                    90% ( 900000000/1000000000)",
+						"task:                   100% (1000000000/1000000000)",
+						"task:                   100% (1000000000/1000000000)\n" },
+				bufLines());
+	}
+
+	String[] bufLines() throws UnsupportedEncodingException {
+		String s = new String(buf.toString(StandardCharsets.UTF_8.name()));
+		return s.split("\r");
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
index 31629f3..5cce11a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/RevWalkPathFilter1Test.java
@@ -15,6 +15,7 @@
 
 import java.util.Collections;
 
+import org.eclipse.jgit.dircache.DirCacheEntry;
 import org.eclipse.jgit.treewalk.filter.AndTreeFilter;
 import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
 import org.eclipse.jgit.treewalk.filter.TreeFilter;
@@ -253,4 +254,23 @@ public void testStringOfPearls_FilePath3_NoParentRewriting()
 		assertEquals(0, a.getParentCount());
 		assertNull(rw.next());
 	}
+
+	@Test
+	public void testStopWhenPathDisappears() throws Exception {
+		DirCacheEntry file1 = file("src/d1/file1", blob("a"));
+		DirCacheEntry file2 = file("src/d1/file2", blob("a"));
+		DirCacheEntry file3 = file("src/d1/file3", blob("a"));
+		RevCommit a = commit(tree(file1));
+		RevCommit b = commit(tree(file1, file2), a);
+		RevCommit c = commit(tree(file1, file3), a);
+		RevCommit d = commit(tree(file1, file2, file3), b, c);
+		filter("src/d1");
+		markStart(d);
+		rw.setRewriteParents(false);
+
+		assertCommit(d, rw.next());
+		assertCommit(c, rw.next());
+		assertCommit(b, rw.next());
+		assertCommit(a, rw.next());
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackConnectionTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackConnectionTest.java
index 7d438c1..505f334 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackConnectionTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackConnectionTest.java
@@ -15,11 +15,15 @@
 import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThrows;
 
+import java.io.ByteArrayInputStream;
+import java.io.EOFException;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import org.eclipse.jgit.errors.NoRemoteRepositoryException;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectIdRef;
@@ -30,6 +34,16 @@
 public class BasePackConnectionTest {
 
 	@Test
+	public void testReadAdvertisedRefsShouldThrowExceptionWithOriginalCause() {
+		try (FailingBasePackConnection basePackConnection =
+				new FailingBasePackConnection()) {
+			Exception result = assertThrows(NoRemoteRepositoryException.class,
+					basePackConnection::readAdvertisedRefs);
+			assertEquals(EOFException.class, result.getCause().getClass());
+		}
+	}
+
+	@Test
 	public void testUpdateWithSymRefsAdds() {
 		final Ref mainRef = new ObjectIdRef.Unpeeled(Ref.Storage.LOOSE,
 				"refs/heads/main", ObjectId.fromString(
@@ -244,4 +258,12 @@ public void testUpdateWithSymRefsFillInHead() {
 		assertEquals(oidName, headRef.getObjectId().name());
 		assertEquals(oidName, mainRef.getObjectId().name());
 	}
-}
\ No newline at end of file
+
+	private static class FailingBasePackConnection extends BasePackConnection {
+		FailingBasePackConnection() {
+			super(new TransportLocal(new URIish(),
+					new java.io.File("")));
+			pckIn = new PacketLineIn(new ByteArrayInputStream(new byte[0]));
+		}
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackPushConnectionTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackPushConnectionTest.java
new file mode 100644
index 0000000..cf8c5ff
--- /dev/null
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BasePackPushConnectionTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2022 Darius Jokilehto <darius.jokilehto+os@gmail.com>
+ * Copyright (c) 2022 Antonio Barone <syntonyze@gmail.com>
+ *
+ * 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.transport;
+
+import org.eclipse.jgit.errors.NoRemoteRepositoryException;
+import org.eclipse.jgit.errors.TransportException;
+import org.eclipse.jgit.internal.JGitText;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.EOFException;
+import java.io.IOException;
+import java.util.Arrays;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThrows;
+
+public class BasePackPushConnectionTest {
+	@Test
+	public void testNoRemoteRepository() {
+		NoRemoteRepositoryException openFetchException =
+                new NoRemoteRepositoryException( new URIish(), "not found");
+		IOException ioException = new IOException("not read");
+
+		try (FailingBasePackPushConnection fbppc =
+				new FailingBasePackPushConnection(openFetchException)) {
+			TransportException result = fbppc.noRepository(ioException);
+
+			assertEquals(openFetchException, result);
+			assertThat(Arrays.asList(result.getSuppressed()),
+					hasItem(ioException));
+		}
+	}
+
+	@Test
+	public void testPushNotPermitted() {
+		URIish uri = new URIish();
+		TransportException openFetchException = new TransportException(uri,
+				"a transport exception");
+		IOException ioException = new IOException("not read");
+
+		try (FailingBasePackPushConnection fbppc =
+				new FailingBasePackPushConnection(openFetchException)) {
+			TransportException result = fbppc.noRepository(ioException);
+
+			assertEquals(TransportException.class, result.getClass());
+			assertThat(result.getMessage(),
+					endsWith(JGitText.get().pushNotPermitted));
+			assertEquals(openFetchException, result.getCause());
+			assertThat(Arrays.asList(result.getSuppressed()),
+					hasItem(ioException));
+		}
+	}
+
+	@Test
+	public void testReadAdvertisedRefPropagatesCauseAndSuppressedExceptions() {
+		IOException ioException = new IOException("not read");
+		try (FailingBasePackPushConnection basePackConnection =
+				new FailingBasePackPushConnection(
+						new NoRemoteRepositoryException(
+								new URIish(), "not found", ioException))) {
+			Exception result = assertThrows(NoRemoteRepositoryException.class,
+					basePackConnection::readAdvertisedRefs);
+			assertEquals(ioException, result.getCause());
+			assertThat(Arrays.asList(result.getSuppressed()),
+					hasItem(instanceOf(EOFException.class)));
+		}
+	}
+
+	private static class FailingBasePackPushConnection
+			extends BasePackPushConnection {
+		FailingBasePackPushConnection(TransportException openFetchException) {
+			super(new TransportLocal(new URIish(),
+					new java.io.File("")) {
+				@Override public FetchConnection openFetch()
+						throws TransportException {
+					throw openFetchException;
+				}
+			});
+			pckIn = new PacketLineIn(new ByteArrayInputStream(new byte[0]));
+		}
+	}
+}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ObjectIdMatcher.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ObjectIdMatcher.java
index c3df19a..77e8afb 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ObjectIdMatcher.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/ObjectIdMatcher.java
@@ -16,7 +16,6 @@
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.Sets;
 import org.hamcrest.Description;
-import org.hamcrest.Factory;
 import org.hamcrest.Matcher;
 import org.hamcrest.TypeSafeMatcher;
 
@@ -59,7 +58,6 @@ protected boolean matchesSafely(Collection<ObjectId> resultOids) {
 	 * @return true if examined and specified sets contains exactly the same
 	 *         elements.
 	 */
-	@Factory
 	static Matcher<Collection<ObjectId>> hasOnlyObjectIds(
 			String... oids) {
 		return new ObjectIdMatcher(Sets.of(oids));
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
index 3958de2..127711f 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/UploadPackTest.java
@@ -460,6 +460,8 @@ private static class TestV2Hook implements ProtocolV2Hook {
 
 		private FetchV2Request fetchRequest;
 
+		private ObjectInfoRequest objectInfoRequest;
+
 		@Override
 		public void onCapabilities(CapabilitiesV2Request req) {
 			capabilitiesRequest = req;
@@ -474,6 +476,11 @@ public void onLsRefs(LsRefsV2Request req) {
 		public void onFetch(FetchV2Request req) {
 			fetchRequest = req;
 		}
+
+		@Override
+		public void onObjectInfo(ObjectInfoRequest req) {
+			objectInfoRequest = req;
+		}
 	}
 
 	@Test
@@ -999,6 +1006,108 @@ public void testV2FetchClientStopsNegotiation() throws Exception {
 	}
 
 	@Test
+	public void testV2FetchWithoutWaitForDoneReceivesPackfile()
+			throws Exception {
+		String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
+
+		RevBlob parentBlob = remote.blob(commonInBlob + "a");
+		RevCommit parent = remote
+				.commit(remote.tree(remote.file("foo", parentBlob)));
+		remote.update("branch1", parent);
+
+		RevCommit localParent = null;
+		RevCommit localChild = null;
+		try (TestRepository<InMemoryRepository> local = new TestRepository<>(
+				client)) {
+			RevBlob localParentBlob = local.blob(commonInBlob + "a");
+			localParent = local
+					.commit(local.tree(local.file("foo", localParentBlob)));
+			RevBlob localChildBlob = local.blob(commonInBlob + "b");
+			localChild = local.commit(
+					local.tree(local.file("foo", localChildBlob)), localParent);
+			local.update("branch1", localChild);
+		}
+
+		ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
+				PacketLineIn.delimiter(),
+				"have " + localParent.toObjectId().getName() + "\n",
+				"have " + localChild.toObjectId().getName() + "\n",
+				PacketLineIn.end());
+		PacketLineIn pckIn = new PacketLineIn(recvStream);
+		assertThat(pckIn.readString(), is("acknowledgments"));
+		assertThat(Arrays.asList(pckIn.readString()),
+				hasItems("ACK " + parent.toObjectId().getName()));
+		assertThat(pckIn.readString(), is("ready"));
+		assertTrue(PacketLineIn.isDelimiter(pckIn.readString()));
+		assertThat(pckIn.readString(), is("packfile"));
+		parsePack(recvStream);
+	}
+
+	@Test
+	public void testV2FetchWithWaitForDoneOnlyDoesNegotiation()
+			throws Exception {
+		String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
+
+		RevBlob parentBlob = remote.blob(commonInBlob + "a");
+		RevCommit parent = remote
+				.commit(remote.tree(remote.file("foo", parentBlob)));
+		remote.update("branch1", parent);
+
+		RevCommit localParent = null;
+		RevCommit localChild = null;
+		try (TestRepository<InMemoryRepository> local = new TestRepository<>(
+				client)) {
+			RevBlob localParentBlob = local.blob(commonInBlob + "a");
+			localParent = local
+					.commit(local.tree(local.file("foo", localParentBlob)));
+			RevBlob localChildBlob = local.blob(commonInBlob + "b");
+			localChild = local.commit(
+					local.tree(local.file("foo", localChildBlob)), localParent);
+			local.update("branch1", localChild);
+		}
+
+		ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
+				PacketLineIn.delimiter(), "wait-for-done\n",
+				"have " + localParent.toObjectId().getName() + "\n",
+				"have " + localChild.toObjectId().getName() + "\n",
+				PacketLineIn.end());
+		PacketLineIn pckIn = new PacketLineIn(recvStream);
+		assertThat(pckIn.readString(), is("acknowledgments"));
+		assertThat(Arrays.asList(pckIn.readString()),
+				hasItems("ACK " + parent.toObjectId().getName()));
+		assertTrue(PacketLineIn.isEnd(pckIn.readString()));
+	}
+
+	@Test
+	public void testV2FetchWithWaitForDoneOnlyDoesNegotiationAndNothingToAck()
+			throws Exception {
+		String commonInBlob = "abcdefghijklmnopqrstuvwxyz";
+
+		RevCommit localParent = null;
+		RevCommit localChild = null;
+		try (TestRepository<InMemoryRepository> local = new TestRepository<>(
+				client)) {
+			RevBlob localParentBlob = local.blob(commonInBlob + "a");
+			localParent = local
+					.commit(local.tree(local.file("foo", localParentBlob)));
+			RevBlob localChildBlob = local.blob(commonInBlob + "b");
+			localChild = local.commit(
+					local.tree(local.file("foo", localChildBlob)), localParent);
+			local.update("branch1", localChild);
+		}
+
+		ByteArrayInputStream recvStream = uploadPackV2("command=fetch\n",
+				PacketLineIn.delimiter(), "wait-for-done\n",
+				"have " + localParent.toObjectId().getName() + "\n",
+				"have " + localChild.toObjectId().getName() + "\n",
+				PacketLineIn.end());
+		PacketLineIn pckIn = new PacketLineIn(recvStream);
+		assertThat(pckIn.readString(), is("acknowledgments"));
+		assertThat(pckIn.readString(), is("NAK"));
+		assertTrue(PacketLineIn.isEnd(pckIn.readString()));
+	}
+
+	@Test
 	public void testV2FetchServerStopsNegotiationForRefWithoutParents()
 			throws Exception {
 		RevCommit fooCommit = remote.commit().message("x").create();
@@ -2594,4 +2703,44 @@ public RefDatabase getRefDatabase() {
 			return refdb;
 		}
 	}
+
+	@Test
+	public void testObjectInfo() throws Exception {
+		server.getConfig().setBoolean("uploadpack", null, "advertiseobjectinfo",
+				true);
+
+		RevBlob blob1 = remote.blob("foobar");
+		RevBlob blob2 = remote.blob("fooba");
+		RevTree tree = remote.tree(remote.file("1", blob1),
+				remote.file("2", blob2));
+		RevCommit commit = remote.commit(tree);
+		remote.update("master", commit);
+
+		TestV2Hook hook = new TestV2Hook();
+		ByteArrayInputStream recvStream = uploadPackV2((UploadPack up) -> {
+			up.setProtocolV2Hook(hook);
+		}, "command=object-info\n", "size",
+				"oid " + ObjectId.toString(blob1.getId()),
+				"oid " + ObjectId.toString(blob2.getId()), PacketLineIn.end());
+		PacketLineIn pckIn = new PacketLineIn(recvStream);
+
+		assertThat(hook.objectInfoRequest, notNullValue());
+		assertThat(pckIn.readString(), is("size"));
+		assertThat(pckIn.readString(),
+				is(ObjectId.toString(blob1.getId()) + " 6"));
+		assertThat(pckIn.readString(),
+				is(ObjectId.toString(blob2.getId()) + " 5"));
+		assertTrue(PacketLineIn.isEnd(pckIn.readString()));
+	}
+
+	@Test
+	public void testObjectInfo_invalidOid() throws Exception {
+		server.getConfig().setBoolean("uploadpack", null, "advertiseobjectinfo",
+				true);
+
+		assertThrows(UploadPackInternalServerErrorException.class,
+				() -> uploadPackV2("command=object-info\n", "size",
+						"oid invalid",
+						PacketLineIn.end()));
+	}
 }
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/WalkEncryptionTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/WalkEncryptionTest.java
index f289a92..5adf7fa 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/WalkEncryptionTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/WalkEncryptionTest.java
@@ -99,7 +99,7 @@
 public class WalkEncryptionTest {
 
 	/**
-	 * Logger setup: ${project_loc}/tst-rsrc/log4j.properties
+	 * Logger setup: ${project_loc}/tst-rsrc/simplelogger.properties
 	 */
 	static final Logger logger = LoggerFactory.getLogger(WalkEncryptionTest.class);
 
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java
index d813391..0b5a735 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/PathSuffixFilterTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009, 2013 Google Inc. and others
+ * Copyright (C) 2009, 2021 Google Inc. and others
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0 which is available at
@@ -41,10 +41,11 @@ public void testNonRecursiveFiltering() throws IOException {
 
 	@Test
 	public void testRecursiveFiltering() throws IOException {
-		ObjectId treeId = createTree("a.sth", "a.txt", "sub/b.sth", "sub/b.txt");
+		ObjectId treeId = createTree("a.sth", "a.txt", "sub/b.sth", "sub/b.txt",
+				"t.sth", "t.txt");
 
 		List<String> paths = getMatchingPaths(".txt", treeId, true);
-		List<String> expected = Arrays.asList("a.txt", "sub/b.txt");
+		List<String> expected = Arrays.asList("a.txt", "sub/b.txt", "t.txt");
 
 		assertEquals(expected, paths);
 	}
@@ -59,6 +60,17 @@ public void testEdgeCases() throws IOException {
 		assertEquals(Arrays.asList("abc", "c"), getMatchingPaths("c", treeId));
 	}
 
+	@Test
+	public void testNegated() throws IOException {
+		ObjectId treeId = createTree("a.sth", "a.txt", "sub/b.sth",
+				"sub/b.txt", "t.sth", "t.txt");
+
+		List<String> paths = getMatchingPaths(".txt", treeId, true, true);
+		List<String> expected = Arrays.asList("a.sth", "sub/b.sth", "t.sth");
+
+		assertEquals(expected, paths);
+	}
+
 	private ObjectId createTree(String... paths) throws IOException {
 		final ObjectInserter odi = db.newObjectInserter();
 		final DirCache dc = db.readDirCache();
@@ -80,8 +92,18 @@ private List<String> getMatchingPaths(String suffixFilter,
 
 	private List<String> getMatchingPaths(String suffixFilter,
 			final ObjectId treeId, boolean recursiveWalk) throws IOException {
+		return getMatchingPaths(suffixFilter, treeId, recursiveWalk, false);
+	}
+
+	private List<String> getMatchingPaths(String suffixFilter,
+			final ObjectId treeId, boolean recursiveWalk, boolean negated)
+			throws IOException {
 		try (TreeWalk tw = new TreeWalk(db)) {
-			tw.setFilter(PathSuffixFilter.create(suffixFilter));
+			TreeFilter filter = PathSuffixFilter.create(suffixFilter);
+			if (negated) {
+				filter = filter.negate();
+			}
+			tw.setFilter(filter);
 			tw.setRecursive(recursiveWalk);
 			tw.addTree(treeId);
 
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/sha1/SHA1Test.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/sha1/SHA1Test.java
index ad560c2..abc2854 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/sha1/SHA1Test.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/sha1/SHA1Test.java
@@ -14,6 +14,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeFalse;
 import static org.junit.Assume.assumeTrue;
 
 import java.io.IOException;
@@ -22,11 +23,20 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 
+import org.eclipse.jgit.junit.MockSystemReader;
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.util.IO;
-import org.junit.Test;
+import org.eclipse.jgit.util.SystemReader;
+import org.eclipse.jgit.util.sha1.SHA1.Sha1Implementation;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
 
+@RunWith(Theories.class)
 public class SHA1Test {
 	private static final String TEST1 = "abc";
 
@@ -34,7 +44,32 @@ public class SHA1Test {
 	private static final String TEST2b = "jkijkljklmklmnlmnomnopnopq";
 	private static final String TEST2 = TEST2a + TEST2b;
 
-	@Test
+	@DataPoints
+	public static Sha1Implementation[] getDataPoints() {
+		return new Sha1Implementation[] { Sha1Implementation.JAVA,
+				Sha1Implementation.JDKNATIVE };
+	}
+
+	private Sha1Implementation sha1Implementation;
+
+	public SHA1Test(Sha1Implementation impl) {
+		this.sha1Implementation = impl;
+	}
+
+	@Before
+	public void setUp() throws Exception {
+		MockSystemReader mockSystemReader = new MockSystemReader();
+		SystemReader.setInstance(mockSystemReader);
+			System.setProperty("org.eclipse.jgit.util.sha1.implementation",
+					sha1Implementation.name());
+	}
+
+	@After
+	public void tearDown() {
+		SystemReader.setInstance(null);
+	}
+
+	@Theory
 	public void test0() throws NoSuchAlgorithmException {
 		ObjectId exp = ObjectId
 				.fromString("da39a3ee5e6b4b0d3255bfef95601890afd80709");
@@ -56,7 +91,7 @@ public void test0() throws NoSuchAlgorithmException {
 		assertEquals(exp, s2);
 	}
 
-	@Test
+	@Theory
 	public void test1() throws NoSuchAlgorithmException {
 		ObjectId exp = ObjectId
 				.fromString("a9993e364706816aba3e25717850c26c9cd0d89d");
@@ -78,7 +113,7 @@ public void test1() throws NoSuchAlgorithmException {
 		assertEquals(exp, s2);
 	}
 
-	@Test
+	@Theory
 	public void test2() throws NoSuchAlgorithmException {
 		ObjectId exp = ObjectId
 				.fromString("84983e441c3bd26ebaae4aa1f95129e5e54670f1");
@@ -100,9 +135,13 @@ public void test2() throws NoSuchAlgorithmException {
 		assertEquals(exp, s2);
 	}
 
-	@Test
+	@Theory
 	public void shatteredCollision()
 			throws IOException, NoSuchAlgorithmException {
+		assumeFalse(
+				System.getProperty("org.eclipse.jgit.util.sha1.implementation")
+						.equalsIgnoreCase("jdkNative"));
+
 		byte[] pdf1 = read("shattered-1.pdf", 422435);
 		byte[] pdf2 = read("shattered-2.pdf", 422435);
 		MessageDigest md;
@@ -149,8 +188,12 @@ public void shatteredCollision()
 		}
 	}
 
-	@Test
+	@Theory
 	public void shatteredStoredInGitBlob() throws IOException {
+		assumeFalse(
+				System.getProperty("org.eclipse.jgit.util.sha1.implementation")
+						.equalsIgnoreCase("jdkNative"));
+
 		byte[] pdf1 = read("shattered-1.pdf", 422435);
 		byte[] pdf2 = read("shattered-2.pdf", 422435);
 
@@ -158,8 +201,10 @@ public void shatteredStoredInGitBlob() throws IOException {
 		// the Git blob header permutes the data enough for this specific
 		// attack example to not be detected as a collision. (A different file
 		// pair that takes the Git header into account however, would.)
-		ObjectId id1 = blob(pdf1, SHA1.newInstance().setDetectCollision(true));
-		ObjectId id2 = blob(pdf2, SHA1.newInstance().setDetectCollision(true));
+		ObjectId id1 = blob(pdf1,
+				SHA1.newInstance().setDetectCollision(true));
+		ObjectId id2 = blob(pdf2,
+				SHA1.newInstance().setDetectCollision(true));
 
 		assertEquals(
 				ObjectId.fromString("ba9aaa145ccd24ef760cf31c74d8f7ca1a2e47b0"),
@@ -169,8 +214,12 @@ public void shatteredStoredInGitBlob() throws IOException {
 				id2);
 	}
 
-	@Test
+	@Theory
 	public void detectsShatteredByDefault() throws IOException {
+		assumeFalse(
+				System.getProperty("org.eclipse.jgit.util.sha1.implementation")
+						.equalsIgnoreCase("jdkNative"));
+
 		assumeTrue(System.getProperty("org.eclipse.jgit.util.sha1.detectCollision") == null);
 		assumeTrue(System.getProperty("org.eclipse.jgit.util.sha1.safeHash") == null);
 
diff --git a/org.eclipse.jgit.ui/META-INF/MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/MANIFEST.MF
index 8588995..e2a9f0a 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.jgit.awtui;version="5.12.1"
-Import-Package: org.eclipse.jgit.errors;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.lib;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.nls;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revplot;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.revwalk;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.transport;version="[5.12.1,5.13.0)",
- org.eclipse.jgit.util;version="[5.12.1,5.13.0)"
+Export-Package: org.eclipse.jgit.awtui;version="5.13.2"
+Import-Package: org.eclipse.jgit.errors;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.lib;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.nls;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revplot;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.revwalk;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.transport;version="[5.13.2,5.14.0)",
+ org.eclipse.jgit.util;version="[5.13.2,5.14.0)"
diff --git a/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit.ui/META-INF/SOURCE-MANIFEST.MF
index 009ecdc..1574109 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit.ui;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit.ui;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit.ui/pom.xml b/org.eclipse.jgit.ui/pom.xml
index 7ff29f92..9c0cc32 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 33331fb..1d39171 100644
--- a/org.eclipse.jgit/.settings/.api_filters
+++ b/org.eclipse.jgit/.settings/.api_filters
@@ -1,10 +1,173 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <component id="org.eclipse.jgit" version="2">
-    <resource path="src/org/eclipse/jgit/transport/SshConstants.java" type="org.eclipse.jgit.transport.SshConstants">
+    <resource path="src/org/eclipse/jgit/errors/PackMismatchException.java" type="org.eclipse.jgit.errors.PackMismatchException">
         <filter id="1142947843">
             <message_arguments>
-                <message_argument value="5.11.1"/>
-                <message_argument value="PUBKEY_ACCEPTED_ALGORITHMS"/>
+                <message_argument value="5.9.1"/>
+                <message_argument value="isPermanent()"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.9.1"/>
+                <message_argument value="setPermanent(boolean)"/>
+            </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.2"/>
+                <message_argument value="CONFIG_KEY_BITMAP_EXCLUDED_REFS_PREFIXES"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="CONFIG_KEY_PRESERVE_OLD_PACKS"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="CONFIG_KEY_PRUNE_PRESERVED"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="CONFIG_KEY_SKIPHASH"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="SHA1_IMPLEMENTATION"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/lib/Repository.java" type="org.eclipse.jgit.lib.Repository">
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="getReflogReader(Ref)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/storage/pack/PackConfig.java" type="org.eclipse.jgit.storage.pack.PackConfig">
+        <filter id="336658481">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.storage.pack.PackConfig"/>
+                <message_argument value="DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES"/>
+            </message_arguments>
+        </filter>
+        <filter id="336658481">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.storage.pack.PackConfig"/>
+                <message_argument value="DEFAULT_SEARCH_FOR_REUSE_TIMEOUT"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="getBitmapExcludedRefsPrefixes()"/>
+            </message_arguments>
+        </filter>
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="setBitmapExcludedRefsPrefixes(String[])"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/transport/BasePackPushConnection.java" type="org.eclipse.jgit.transport.BasePackPushConnection">
+        <filter id="338792546">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.transport.BasePackPushConnection"/>
+                <message_argument value="noRepository()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/transport/ProtocolV2Hook.java" type="org.eclipse.jgit.transport.ProtocolV2Hook">
+        <filter id="404000815">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.transport.ProtocolV2Hook"/>
+                <message_argument value="onObjectInfo(ObjectInfoRequest)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/util/sha1/SHA1.java" type="org.eclipse.jgit.util.sha1.SHA1">
+        <filter id="337764418">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="digest()"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="digest(MutableObjectId)"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="hasCollision()"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="reset()"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="setDetectCollision(boolean)"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="toObjectId()"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="update(byte)"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="update(byte[])"/>
+            </message_arguments>
+        </filter>
+        <filter id="421650549">
+            <message_arguments>
+                <message_argument value="org.eclipse.jgit.util.sha1.SHA1"/>
+                <message_argument value="update(byte[], int, int)"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/jgit/util/sha1/SHA1.java" type="org.eclipse.jgit.util.sha1.SHA1$Sha1Implementation">
+        <filter id="1142947843">
+            <message_arguments>
+                <message_argument value="5.13.2"/>
+                <message_argument value="Sha1Implementation"/>
             </message_arguments>
         </filter>
     </resource>
diff --git a/org.eclipse.jgit/META-INF/MANIFEST.MF b/org.eclipse.jgit/META-INF/MANIFEST.MF
index 9a5793a..9e275f9 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: 5.12.1.qualifier
+Bundle-Version: 5.13.2.qualifier
 Bundle-Localization: plugin
 Bundle-Vendor: %Bundle-Vendor
 Eclipse-ExtensibleAPI: true
-Export-Package: org.eclipse.jgit.annotations;version="5.12.1",
- org.eclipse.jgit.api;version="5.12.1";
+Export-Package: org.eclipse.jgit.annotations;version="5.13.2",
+ org.eclipse.jgit.api;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.api.errors;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.attributes;version="5.12.1";
+ org.eclipse.jgit.attributes;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.blame;version="5.12.1";
+ org.eclipse.jgit.blame;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.diff;version="5.12.1";
+ org.eclipse.jgit.diff;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.attributes,
    org.eclipse.jgit.revwalk,
@@ -42,44 +42,44 @@
    org.eclipse.jgit.treewalk.filter,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.util",
- org.eclipse.jgit.dircache;version="5.12.1";
+ org.eclipse.jgit.dircache;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.errors;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.internal.storage.pack",
- org.eclipse.jgit.events;version="5.12.1";
+ org.eclipse.jgit.events;version="5.13.2";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.fnmatch;version="5.12.1",
- org.eclipse.jgit.gitrepo;version="5.12.1";
+ org.eclipse.jgit.fnmatch;version="5.13.2",
+ org.eclipse.jgit.gitrepo;version="5.13.2";
   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="5.12.1";x-internal:=true,
- org.eclipse.jgit.hooks;version="5.12.1";uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.ignore;version="5.12.1",
- org.eclipse.jgit.ignore.internal;version="5.12.1";
+ org.eclipse.jgit.gitrepo.internal;version="5.13.2";x-internal:=true,
+ org.eclipse.jgit.hooks;version="5.13.2";uses:="org.eclipse.jgit.lib",
+ org.eclipse.jgit.ignore;version="5.13.2",
+ org.eclipse.jgit.ignore.internal;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal;version="5.12.1";
+ org.eclipse.jgit.internal;version="5.13.2";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.http.test",
- org.eclipse.jgit.internal.fsck;version="5.12.1";
+ org.eclipse.jgit.internal.fsck;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.revwalk;version="5.12.1";
+ org.eclipse.jgit.internal.revwalk;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.storage.dfs;version="5.12.1";
+ org.eclipse.jgit.internal.storage.dfs;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.internal.storage.file;version="5.13.2";
   x-friends:="org.eclipse.jgit.test,
    org.eclipse.jgit.junit,
    org.eclipse.jgit.junit.http,
@@ -88,31 +88,31 @@
    org.eclipse.jgit.pgm,
    org.eclipse.jgit.pgm.test,
    org.eclipse.jgit.ssh.apache",
- org.eclipse.jgit.internal.storage.io;version="5.12.1";
+ org.eclipse.jgit.internal.storage.io;version="5.13.2";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.pack;version="5.12.1";
+ org.eclipse.jgit.internal.storage.pack;version="5.13.2";
   x-friends:="org.eclipse.jgit.junit,
    org.eclipse.jgit.test,
    org.eclipse.jgit.pgm",
- org.eclipse.jgit.internal.storage.reftable;version="5.12.1";
+ org.eclipse.jgit.internal.storage.reftable;version="5.13.2";
   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="5.12.1";x-internal:=true,
- org.eclipse.jgit.internal.transport.connectivity;version="5.12.1";
+ org.eclipse.jgit.internal.submodule;version="5.13.2";x-internal:=true,
+ org.eclipse.jgit.internal.transport.connectivity;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.http;version="5.12.1";
+ org.eclipse.jgit.internal.transport.http;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.parser;version="5.12.1";
+ org.eclipse.jgit.internal.transport.parser;version="5.13.2";
   x-friends:="org.eclipse.jgit.http.server,
    org.eclipse.jgit.test",
- org.eclipse.jgit.internal.transport.ssh;version="5.12.1";
+ org.eclipse.jgit.internal.transport.ssh;version="5.13.2";
   x-friends:="org.eclipse.jgit.ssh.apache,
    org.eclipse.jgit.ssh.jsch",
- org.eclipse.jgit.lib;version="5.12.1";
+ org.eclipse.jgit.lib;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.util.sha1,
    org.eclipse.jgit.dircache,
@@ -126,10 +126,10 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.submodule,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.lib.internal;version="5.12.1";
+ org.eclipse.jgit.lib.internal;version="5.13.2";
   x-friends:="org.eclipse.jgit.test",
- org.eclipse.jgit.logging;version="5.12.1",
- org.eclipse.jgit.merge;version="5.12.1";
+ org.eclipse.jgit.logging;version="5.13.2",
+ org.eclipse.jgit.merge;version="5.13.2";
   uses:="org.eclipse.jgit.dircache,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
@@ -138,40 +138,40 @@
    org.eclipse.jgit.util,
    org.eclipse.jgit.api,
    org.eclipse.jgit.attributes",
- org.eclipse.jgit.nls;version="5.12.1",
- org.eclipse.jgit.notes;version="5.12.1";
+ org.eclipse.jgit.nls;version="5.13.2",
+ org.eclipse.jgit.notes;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk,
    org.eclipse.jgit.treewalk,
    org.eclipse.jgit.merge",
- org.eclipse.jgit.patch;version="5.12.1";
+ org.eclipse.jgit.patch;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.diff",
- org.eclipse.jgit.revplot;version="5.12.1";
+ org.eclipse.jgit.revplot;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.revwalk",
- org.eclipse.jgit.revwalk;version="5.12.1";
+ org.eclipse.jgit.revwalk;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.revwalk.filter;version="5.13.2";
   uses:="org.eclipse.jgit.revwalk,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.file;version="5.12.1";
+ org.eclipse.jgit.storage.file;version="5.13.2";
   uses:="org.eclipse.jgit.lib,
    org.eclipse.jgit.util",
- org.eclipse.jgit.storage.pack;version="5.12.1";
+ org.eclipse.jgit.storage.pack;version="5.13.2";
   uses:="org.eclipse.jgit.lib",
- org.eclipse.jgit.submodule;version="5.12.1";
+ org.eclipse.jgit.submodule;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.transport;version="5.13.2";
   uses:="javax.crypto,
    org.eclipse.jgit.util.io,
    org.eclipse.jgit.lib,
@@ -184,21 +184,21 @@
    org.eclipse.jgit.transport.resolver,
    org.eclipse.jgit.storage.pack,
    org.eclipse.jgit.errors",
- org.eclipse.jgit.transport.http;version="5.12.1";
+ org.eclipse.jgit.transport.http;version="5.13.2";
   uses:="javax.net.ssl",
- org.eclipse.jgit.transport.resolver;version="5.12.1";
+ org.eclipse.jgit.transport.resolver;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.lib",
- org.eclipse.jgit.treewalk;version="5.12.1";
+ org.eclipse.jgit.treewalk;version="5.13.2";
   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="5.12.1";
+ org.eclipse.jgit.treewalk.filter;version="5.13.2";
   uses:="org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util;version="5.12.1";
+ org.eclipse.jgit.util;version="5.13.2";
   uses:="org.eclipse.jgit.transport,
    org.eclipse.jgit.hooks,
    org.eclipse.jgit.revwalk,
@@ -211,15 +211,16 @@
    org.eclipse.jgit.treewalk,
    javax.net.ssl,
    org.eclipse.jgit.util.time",
- org.eclipse.jgit.util.io;version="5.12.1";
+ org.eclipse.jgit.util.io;version="5.13.2";
   uses:="org.eclipse.jgit.attributes,
    org.eclipse.jgit.lib,
    org.eclipse.jgit.treewalk",
- org.eclipse.jgit.util.sha1;version="5.12.1",
- org.eclipse.jgit.util.time;version="5.12.1"
+ org.eclipse.jgit.util.sha1;version="5.13.2",
+ org.eclipse.jgit.util.time;version="5.13.2"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: com.googlecode.javaewah;version="[1.1.6,2.0.0)",
  javax.crypto,
+ javax.management,
  javax.net.ssl,
  org.slf4j;version="[1.7.0,2.0.0)",
  org.xml.sax,
diff --git a/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF b/org.eclipse.jgit/META-INF/SOURCE-MANIFEST.MF
index 03ddbb7..f547d33 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: 5.12.1.qualifier
-Eclipse-SourceBundle: org.eclipse.jgit;version="5.12.1.qualifier";roots="."
+Bundle-Version: 5.13.2.qualifier
+Eclipse-SourceBundle: org.eclipse.jgit;version="5.13.2.qualifier";roots="."
diff --git a/org.eclipse.jgit/pom.xml b/org.eclipse.jgit/pom.xml
index c9fc127..7913bcb 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>5.12.1-SNAPSHOT</version>
+    <version>5.13.2-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 6180737..f9b0595 100644
--- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
+++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
@@ -137,6 +137,7 @@
 cloneNonEmptyDirectory=Destination path "{0}" already exists and is not an empty directory
 closed=closed
 closeLockTokenFailed=Closing LockToken ''{0}'' failed
+closePidLockFailed=Closing lock file ''{0}'' failed
 collisionOn=Collision on {0}
 commandClosedStderrButDidntExit=Command {0} closed stderr stream but didn''t exit within timeout {1} seconds
 commandRejectedByHook=Rejected by "{0}" hook.\n{1}
@@ -209,12 +210,14 @@
 couldNotGetRepoStatistics=Could not get repository statistics
 couldNotFindTabInLine=Could not find tab in line {0}. Tab is the mandatory separator for the Netscape Cookie File Format.
 couldNotFindSixTabsInLine=Could not find 6 tabs but only {0} in line '{1}'. 7 tab separated columns per line are mandatory for the Netscape Cookie File Format.
+couldNotHashByteArrayWithSha256=Could not hash byte array with SHA-256 algorithm.
 couldNotLockHEAD=Could not lock HEAD
 couldNotPersistCookies=Could not persist received cookies in file ''{0}''
 couldNotReadCookieFile=Could not read cookie file ''{0}''
 couldNotReadIndexInOneGo=Could not read index in one go, only {0} out of {1} read
 couldNotReadObjectWhileParsingCommit=Could not read an object while parsing commit {0}
 couldNotRewindToUpstreamCommit=Could not rewind to upstream commit
+couldNotSignStringWithKey=Could not sign string with key.
 couldNotURLEncodeToUTF8=Could not URL encode to UTF-8
 countingObjects=Counting objects
 corruptPack=Pack file {0} is corrupt, removing it from pack list
@@ -304,6 +307,7 @@
 expectedReportForRefNotReceived={0}: expected report for ref {1} not received
 failedAtomicFileCreation=Atomic file creation failed, number of hard links to file {0} was not 2 but {1}
 failedCreateLockFile=Creating lock file {} failed
+failedPidLock=Failed to lock ''{0}'' guarding git gc
 failedReadHttpsProtocols=Failed to read system property https.protocols, assuming it is not set
 failedToConvert=Failed to convert rest: %s
 failedToDetermineFilterDefinition=An exception occurred while determining filter definitions
@@ -323,6 +327,7 @@
 flagNotFromThis={0} not from this.
 flagsAlreadyCreated={0} flags already created.
 funnyRefname=funny refname
+gcAlreadyRunning=fatal: gc is already running on machine ''{0}'' pid {1}
 gcFailed=Garbage collection failed.
 gcTooManyUnpruned=Too many loose, unpruneable objects after garbage collection. Consider adjusting gc.auto or gc.pruneExpire.
 headRequiredToStash=HEAD required to stash local changes
@@ -361,10 +366,12 @@
 inTheFuture=in the future
 invalidAdvertisementOf=invalid advertisement of {0}
 invalidAncestryLength=Invalid ancestry length
+invalidAwsApiSignatureVersion=Invalid aws.api.signature.version: {0}
 invalidBooleanValue=Invalid boolean value: {0}.{1}={2}
 invalidChannel=Invalid channel {0}
 invalidCommitParentNumber=Invalid commit parent number
 invalidDepth=Invalid depth: {0}
+invalidEncoding=Invalid encoding from git config i18n.commitEncoding: {0}
 invalidEncryption=Invalid encryption
 invalidExpandWildcard=ExpandFromSource on a refspec that can have mismatched wildcards does not make sense.
 invalidFilter=Invalid filter: {0}
@@ -456,6 +463,7 @@
 mismatchOffset=mismatch offset for object {0}
 mismatchCRC=mismatch CRC for object {0}
 missingAccesskey=Missing accesskey.
+missingAwsRegion=Missing region (e.g. us-west-2).
 missingConfigurationForKey=No value for key {0} found in configuration
 missingCookieFile=Configured http.cookieFile ''{0}'' is missing
 missingCRC=missing CRC for object {0}
@@ -633,6 +641,7 @@
 searchForReachableBranches=Finding reachable branches
 saveFileStoreAttributesFailed=Saving measured FileStore attributes to user config failed
 searchForReuse=Finding sources
+searchForReuseTimeout=Search for reuse timed out after {0} seconds
 searchForSizes=Getting sizes
 secondsAgo={0} seconds ago
 selectingCommits=Selecting commits
@@ -669,6 +678,7 @@
 sslTrustForRepo=Skip SSL verification for git operations for repository {0}
 sslTrustNow=Skip SSL verification for this single git operation
 sslVerifyCannotSave=Could not save setting for http.sslVerify
+stalePidLock=Lock file ''{0}'' is older than 12 hours and seems to be stale, lastModified: {1}, trying to lock it
 staleRevFlagsOn=Stale RevFlags on {0}
 startingReadStageWithoutWrittenRequestDataPendingIsNotSupported=Starting read stage without written request data pending is not supported
 stashApplyConflict=Applying stashed changes resulted in a conflict
@@ -736,6 +746,7 @@
 unableToSignCommitNoSecretKey=Unable to sign commit. Signing key not available.
 unauthorized=Unauthorized
 unencodeableFile=Unencodable file: {0}
+unexpectedAwsApiSignatureVersion=Unexpected AWS API Signature Version: {0}
 unexpectedCompareResult=Unexpected metadata comparison result: {0}
 unexpectedEndOfConfigFile=Unexpected end of config file
 unexpectedEndOfInput=Unexpected end of input
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
index cf7bc1f..3aa7114 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CloneCommand.java
@@ -173,7 +173,11 @@ public Git call() throws GitAPIException, InvalidRemoteException,
 		Repository repository = init();
 		FetchResult fetchResult = null;
 		Thread cleanupHook = new Thread(() -> cleanup());
-		Runtime.getRuntime().addShutdownHook(cleanupHook);
+		try {
+			Runtime.getRuntime().addShutdownHook(cleanupHook);
+		} catch (IllegalStateException e) {
+			// ignore - the VM is already shutting down
+		}
 		try {
 			fetchResult = fetch(repository, u);
 		} catch (IOException ioe) {
@@ -197,7 +201,11 @@ public Git call() throws GitAPIException, InvalidRemoteException,
 			cleanup();
 			throw e;
 		} finally {
-			Runtime.getRuntime().removeShutdownHook(cleanupHook);
+			try {
+				Runtime.getRuntime().removeShutdownHook(cleanupHook);
+			} catch (IllegalStateException e) {
+				// ignore - the VM is already shutting down
+			}
 		}
 		if (!noCheckout) {
 			try {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
index 90c1515..7290d83 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/FetchCommand.java
@@ -140,6 +140,9 @@ private void fetchSubmodules(FetchResult results)
 			if (fetchHead == null) {
 				return;
 			}
+			if (revWalk.parseAny(fetchHead).getType() == Constants.OBJ_BLOB) {
+				return;
+			}
 			walk.setTree(revWalk.parseTree(fetchHead));
 			while (walk.next()) {
 				try (Repository submoduleRepo = walk.getRepository()) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java
index 03da615..e560612 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCache.java
@@ -40,6 +40,7 @@
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.internal.storage.file.FileSnapshot;
 import org.eclipse.jgit.internal.storage.file.LockFile;
+import org.eclipse.jgit.internal.storage.io.NullMessageDigest;
 import org.eclipse.jgit.lib.AnyObjectId;
 import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.lib.Config.ConfigEnum;
@@ -327,6 +328,9 @@ public static DirCache lock(final File indexLocation, final FS fs,
 	/** If we read this index from disk, the original format. */
 	private DirCacheVersion version;
 
+	/** Whether to skip computing and checking the index checksum */
+	private boolean skipHash;
+
 	/**
 	 * Create a new in-core index representation.
 	 * <p>
@@ -446,7 +450,8 @@ public void clear() {
 	private void readFrom(InputStream inStream) throws IOException,
 			CorruptObjectException {
 		final BufferedInputStream in = new BufferedInputStream(inStream);
-		final MessageDigest md = Constants.newMessageDigest();
+		readConfig();
+		MessageDigest md = newMessageDigest();
 
 		// Read the index header and verify we understand it.
 		//
@@ -543,8 +548,12 @@ private void readFrom(InputStream inStream) throws IOException,
 		}
 
 		readIndexChecksum = md.digest();
-		if (!Arrays.equals(readIndexChecksum, hdr)) {
-			throw new CorruptObjectException(JGitText.get().DIRCChecksumMismatch);
+		if (!(skipHash
+				|| Arrays.equals(readIndexChecksum, hdr)
+				|| Arrays.equals(NullMessageDigest.getInstance().digest(),
+						hdr))) {
+			throw new CorruptObjectException(
+					JGitText.get().DIRCChecksumMismatch);
 		}
 	}
 
@@ -627,15 +636,9 @@ public void write() throws IOException {
 	}
 
 	void writeTo(File dir, OutputStream os) throws IOException {
-		final MessageDigest foot = Constants.newMessageDigest();
-		final DigestOutputStream dos = new DigestOutputStream(os, foot);
-
-		if (version == null && this.repository != null) {
-			// A new DirCache is being written.
-			DirCacheConfig config = repository.getConfig()
-					.get(DirCacheConfig::new);
-			version = config.getIndexVersion();
-		}
+		readConfig();
+		MessageDigest foot = newMessageDigest();
+		DigestOutputStream dos = new DigestOutputStream(os, foot);
 		if (version == null
 				|| version == DirCacheVersion.DIRC_VERSION_MINIMUM) {
 			version = DirCacheVersion.DIRC_VERSION_MINIMUM;
@@ -707,6 +710,22 @@ void writeTo(File dir, OutputStream os) throws IOException {
 		os.close();
 	}
 
+	private void readConfig() {
+		if (version == null && this.repository != null) {
+			DirCacheConfig config = repository.getConfig()
+					.get(DirCacheConfig::new);
+			version = config.getIndexVersion();
+			skipHash = config.isSkipHash();
+		}
+	}
+
+	private MessageDigest newMessageDigest() {
+		if (skipHash) {
+			return NullMessageDigest.getInstance();
+		}
+		return Constants.newMessageDigest();
+	}
+
 	/**
 	 * Commit this change and release the lock.
 	 * <p>
@@ -1071,6 +1090,8 @@ private static class DirCacheConfig {
 
 		private final DirCacheVersion indexVersion;
 
+		private final boolean skipHash;
+
 		public DirCacheConfig(Config cfg) {
 			boolean manyFiles = cfg.getBoolean(
 					ConfigConstants.CONFIG_FEATURE_SECTION,
@@ -1080,11 +1101,16 @@ public DirCacheConfig(Config cfg) {
 					ConfigConstants.CONFIG_KEY_VERSION,
 					manyFiles ? DirCacheVersion.DIRC_VERSION_PATHCOMPRESS
 							: DirCacheVersion.DIRC_VERSION_EXTENDED);
+			skipHash = cfg.getBoolean(ConfigConstants.CONFIG_INDEX_SECTION,
+					ConfigConstants.CONFIG_KEY_SKIPHASH, false);
 		}
 
 		public DirCacheVersion getIndexVersion() {
 			return indexVersion;
 		}
 
+		public boolean isSkipHash() {
+			return skipHash;
+		}
 	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/errors/NoRemoteRepositoryException.java b/org.eclipse.jgit/src/org/eclipse/jgit/errors/NoRemoteRepositoryException.java
index 58f70f5..1dd976c 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/errors/NoRemoteRepositoryException.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/errors/NoRemoteRepositoryException.java
@@ -29,4 +29,19 @@ public class NoRemoteRepositoryException extends TransportException {
 	public NoRemoteRepositoryException(URIish uri, String s) {
 		super(uri, s);
 	}
+
+	/**
+	 * Constructs an exception indicating a repository does not exist.
+	 *
+	 * @param uri
+	 *            URI used for transport
+	 * @param s
+	 *            message
+	 * @param cause
+	 *            root cause exception
+	 * @since 5.13
+	 */
+	public NoRemoteRepositoryException(URIish uri, String s, Throwable cause) {
+		super(uri, s, cause);
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/errors/SearchForReuseTimeout.java b/org.eclipse.jgit/src/org/eclipse/jgit/errors/SearchForReuseTimeout.java
new file mode 100644
index 0000000..402a850
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/errors/SearchForReuseTimeout.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2021, Fabio Ponciroli <ponch@gerritforge.com>
+ *
+ * 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.errors;
+
+import org.eclipse.jgit.internal.JGitText;
+
+import java.io.IOException;
+import java.text.MessageFormat;
+import java.time.Duration;
+
+/**
+ * Thrown when the search for reuse phase times out.
+ *
+ * @since 5.13
+ */
+public class SearchForReuseTimeout extends IOException {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * Construct a search for reuse timeout error.
+	 *
+	 * @param timeout
+	 *            time exceeded during the search for reuse phase.
+	 */
+	public SearchForReuseTimeout(Duration timeout) {
+		super(MessageFormat.format(JGitText.get().searchForReuseTimeout,
+				Long.valueOf(timeout.getSeconds())));
+	}
+
+	@Override
+	public synchronized Throwable fillInStackTrace() {
+		return this;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
index e1fa144..446d350 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
@@ -165,6 +165,7 @@ public static JGitText get() {
 	/***/ public String cloneNonEmptyDirectory;
 	/***/ public String closeLockTokenFailed;
 	/***/ public String closed;
+	/***/ public String closePidLockFailed;
 	/***/ public String collisionOn;
 	/***/ public String commandClosedStderrButDidntExit;
 	/***/ public String commandRejectedByHook;
@@ -238,12 +239,14 @@ public static JGitText get() {
 	/***/ public String couldNotFindSixTabsInLine;
 	/***/ public String couldNotGetAdvertisedRef;
 	/***/ public String couldNotGetRepoStatistics;
+	/***/ public String couldNotHashByteArrayWithSha256;
 	/***/ public String couldNotLockHEAD;
 	/***/ public String couldNotPersistCookies;
 	/***/ public String couldNotReadCookieFile;
 	/***/ public String couldNotReadIndexInOneGo;
 	/***/ public String couldNotReadObjectWhileParsingCommit;
 	/***/ public String couldNotRewindToUpstreamCommit;
+	/***/ public String couldNotSignStringWithKey;
 	/***/ public String couldNotURLEncodeToUTF8;
 	/***/ public String countingObjects;
 	/***/ public String createBranchFailedUnknownReason;
@@ -332,6 +335,7 @@ public static JGitText get() {
 	/***/ public String expectedReportForRefNotReceived;
 	/***/ public String failedAtomicFileCreation;
 	/***/ public String failedCreateLockFile;
+	/***/ public String failedPidLock;
 	/***/ public String failedReadHttpsProtocols;
 	/***/ public String failedToDetermineFilterDefinition;
 	/***/ public String failedToConvert;
@@ -351,6 +355,7 @@ public static JGitText get() {
 	/***/ public String flagNotFromThis;
 	/***/ public String flagsAlreadyCreated;
 	/***/ public String funnyRefname;
+	/***/ public String gcAlreadyRunning;
 	/***/ public String gcFailed;
 	/***/ public String gcTooManyUnpruned;
 	/***/ public String headRequiredToStash;
@@ -389,10 +394,12 @@ public static JGitText get() {
 	/***/ public String inTheFuture;
 	/***/ public String invalidAdvertisementOf;
 	/***/ public String invalidAncestryLength;
+	/***/ public String invalidAwsApiSignatureVersion;
 	/***/ public String invalidBooleanValue;
 	/***/ public String invalidChannel;
 	/***/ public String invalidCommitParentNumber;
 	/***/ public String invalidDepth;
+	/***/ public String invalidEncoding;
 	/***/ public String invalidEncryption;
 	/***/ public String invalidExpandWildcard;
 	/***/ public String invalidFilter;
@@ -484,6 +491,7 @@ public static JGitText get() {
 	/***/ public String mismatchOffset;
 	/***/ public String mismatchCRC;
 	/***/ public String missingAccesskey;
+	/***/ public String missingAwsRegion;
 	/***/ public String missingConfigurationForKey;
 	/***/ public String missingCookieFile;
 	/***/ public String missingCRC;
@@ -661,6 +669,7 @@ public static JGitText get() {
 	/***/ public String saveFileStoreAttributesFailed;
 	/***/ public String searchForReachableBranches;
 	/***/ public String searchForReuse;
+	/***/ public String searchForReuseTimeout;
 	/***/ public String searchForSizes;
 	/***/ public String secondsAgo;
 	/***/ public String selectingCommits;
@@ -697,6 +706,7 @@ public static JGitText get() {
 	/***/ public String sslTrustForRepo;
 	/***/ public String sslTrustNow;
 	/***/ public String sslVerifyCannotSave;
+	/***/ public String stalePidLock;
 	/***/ public String staleRevFlagsOn;
 	/***/ public String startingReadStageWithoutWrittenRequestDataPendingIsNotSupported;
 	/***/ public String stashApplyConflict;
@@ -764,6 +774,7 @@ public static JGitText get() {
 	/***/ public String unableToSignCommitNoSecretKey;
 	/***/ public String unauthorized;
 	/***/ public String unencodeableFile;
+	/***/ public String unexpectedAwsApiSignatureVersion;
 	/***/ public String unexpectedCompareResult;
 	/***/ public String unexpectedEndOfConfigFile;
 	/***/ public String unexpectedEndOfInput;
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 96ca690..9be3df3 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
@@ -25,6 +25,7 @@
 import java.nio.channels.Channels;
 import java.text.MessageFormat;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.zip.CRC32;
 import java.util.zip.DataFormatException;
 import java.util.zip.Inflater;
@@ -162,10 +163,17 @@ private PackIndex idx(DfsReader ctx) throws IOException {
 
 			try {
 				DfsStreamKey idxKey = desc.getStreamKey(INDEX);
+				AtomicBoolean cacheHit = new AtomicBoolean(true);
 				DfsBlockCache.Ref<PackIndex> idxref = cache.getOrLoadRef(
 						idxKey,
 						REF_POSITION,
-						() -> loadPackIndex(ctx, idxKey));
+						() -> {
+							cacheHit.set(false);
+							return loadPackIndex(ctx, idxKey);
+						});
+				if (cacheHit.get()) {
+					ctx.stats.idxCacheHit++;
+				}
 				PackIndex idx = idxref.get();
 				if (index == null && idx != null) {
 					index = idx;
@@ -200,10 +208,17 @@ PackBitmapIndex getBitmapIndex(DfsReader ctx) throws IOException {
 			PackIndex idx = idx(ctx);
 			PackReverseIndex revidx = getReverseIdx(ctx);
 			DfsStreamKey bitmapKey = desc.getStreamKey(BITMAP_INDEX);
+			AtomicBoolean cacheHit = new AtomicBoolean(true);
 			DfsBlockCache.Ref<PackBitmapIndex> idxref = cache.getOrLoadRef(
 					bitmapKey,
 					REF_POSITION,
-					() -> loadBitmapIndex(ctx, bitmapKey, idx, revidx));
+					() -> {
+						cacheHit.set(false);
+						return loadBitmapIndex(ctx, bitmapKey, idx, revidx);
+					});
+			if (cacheHit.get()) {
+				ctx.stats.bitmapCacheHit++;
+			}
 			PackBitmapIndex bmidx = idxref.get();
 			if (bitmapIndex == null && bmidx != null) {
 				bitmapIndex = bmidx;
@@ -225,10 +240,17 @@ PackReverseIndex getReverseIdx(DfsReader ctx) throws IOException {
 			PackIndex idx = idx(ctx);
 			DfsStreamKey revKey = new DfsStreamKey.ForReverseIndex(
 					desc.getStreamKey(INDEX));
+			AtomicBoolean cacheHit = new AtomicBoolean(true);
 			DfsBlockCache.Ref<PackReverseIndex> revref = cache.getOrLoadRef(
 					revKey,
 					REF_POSITION,
-					() -> loadReverseIdx(revKey, idx));
+					() -> {
+						cacheHit.set(false);
+						return loadReverseIdx(ctx, revKey, idx);
+					});
+			if (cacheHit.get()) {
+				ctx.stats.ridxCacheHit++;
+			}
 			PackReverseIndex revidx = revref.get();
 			if (reverseIndex == null && revidx != null) {
 				reverseIndex = revidx;
@@ -1031,9 +1053,12 @@ private DfsBlockCache.Ref<PackIndex> loadPackIndex(
 	}
 
 	private DfsBlockCache.Ref<PackReverseIndex> loadReverseIdx(
-			DfsStreamKey revKey, PackIndex idx) {
+			DfsReader ctx, DfsStreamKey revKey, PackIndex idx) {
+		ctx.stats.readReverseIdx++;
+		long start = System.nanoTime();
 		PackReverseIndex revidx = new PackReverseIndex(idx);
 		reverseIndex = revidx;
+		ctx.stats.readReverseIdxMicros += elapsedMicros(start);
 		return new DfsBlockCache.Ref<>(
 				revKey,
 				REF_POSITION,
@@ -1064,8 +1089,8 @@ private DfsBlockCache.Ref<PackBitmapIndex> loadBitmapIndex(
 				bmidx = PackBitmapIndex.read(in, idx, revidx);
 			} finally {
 				size = rc.position();
-				ctx.stats.readIdxBytes += size;
-				ctx.stats.readIdxMicros += elapsedMicros(start);
+				ctx.stats.readBitmapIdxBytes += size;
+				ctx.stats.readBitmapIdxMicros += elapsedMicros(start);
 			}
 			bitmapIndex = bmidx;
 			return new DfsBlockCache.Ref<>(
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReaderIoStats.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReaderIoStats.java
index b7a7196..5c47425 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReaderIoStats.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsReaderIoStats.java
@@ -19,18 +19,39 @@ public static class Accumulator {
 		/** Number of times the reader explicitly called scanPacks. */
 		long scanPacks;
 
+		/** Total number of cache hits for pack indexes. */
+		long idxCacheHit;
+
+		/** Total number of cache hits for reverse indexes. */
+		long ridxCacheHit;
+
+		/** Total number of cache hits for bitmap indexes. */
+		long bitmapCacheHit;
+
 		/** Total number of complete pack indexes read into memory. */
 		long readIdx;
 
 		/** Total number of complete bitmap indexes read into memory. */
 		long readBitmap;
 
-		/** Total number of bytes read from indexes. */
+		/** Total number of reverse indexes added into memory. */
+		long readReverseIdx;
+
+		/** Total number of bytes read from pack indexes. */
 		long readIdxBytes;
 
-		/** Total microseconds spent reading pack or bitmap indexes. */
+		/** Total microseconds spent reading pack indexes. */
 		long readIdxMicros;
 
+		/** Total microseconds spent creating reverse indexes. */
+		long readReverseIdxMicros;
+
+		/** Total number of bytes read from bitmap indexes. */
+		long readBitmapIdxBytes;
+
+		/** Total microseconds spent reading bitmap indexes. */
+		long readBitmapIdxMicros;
+
 		/** Total number of block cache hits. */
 		long blockCacheHit;
 
@@ -75,6 +96,33 @@ public long getScanPacks() {
 	}
 
 	/**
+	 * Get total number of pack index cache hits.
+	 *
+	 * @return total number of pack index cache hits.
+	 */
+	public long getPackIndexCacheHits() {
+		return stats.idxCacheHit;
+	}
+
+	/**
+	 * Get total number of reverse index cache hits.
+	 *
+	 * @return total number of reverse index cache hits.
+	 */
+	public long getReverseIndexCacheHits() {
+		return stats.ridxCacheHit;
+	}
+
+	/**
+	 * Get total number of bitmap index cache hits.
+	 *
+	 * @return total number of bitmap index cache hits.
+	 */
+	public long getBitmapIndexCacheHits() {
+		return stats.bitmapCacheHit;
+	}
+
+	/**
 	 * Get total number of complete pack indexes read into memory.
 	 *
 	 * @return total number of complete pack indexes read into memory.
@@ -84,6 +132,15 @@ public long getReadPackIndexCount() {
 	}
 
 	/**
+	 * Get total number of times the reverse index was computed.
+	 *
+	 * @return total number of reverse index was computed.
+	 */
+	public long getReadReverseIndexCount() {
+		return stats.readReverseIdx;
+	}
+
+	/**
 	 * Get total number of complete bitmap indexes read into memory.
 	 *
 	 * @return total number of complete bitmap indexes read into memory.
@@ -93,24 +150,51 @@ public long getReadBitmapIndexCount() {
 	}
 
 	/**
-	 * Get total number of bytes read from indexes.
+	 * Get total number of bytes read from pack indexes.
 	 *
-	 * @return total number of bytes read from indexes.
+	 * @return total number of bytes read from pack indexes.
 	 */
 	public long getReadIndexBytes() {
 		return stats.readIdxBytes;
 	}
 
 	/**
-	 * Get total microseconds spent reading pack or bitmap indexes.
+	 * Get total microseconds spent reading pack indexes.
 	 *
-	 * @return total microseconds spent reading pack or bitmap indexes.
+	 * @return total microseconds spent reading pack indexes.
 	 */
 	public long getReadIndexMicros() {
 		return stats.readIdxMicros;
 	}
 
 	/**
+	 * Get total microseconds spent creating reverse indexes.
+	 *
+	 * @return total microseconds spent creating reverse indexes.
+	 */
+	public long getReadReverseIndexMicros() {
+		return stats.readReverseIdxMicros;
+	}
+
+	/**
+	 * Get total number of bytes read from bitmap indexes.
+	 *
+	 * @return total number of bytes read from bitmap indexes.
+	 */
+	public long getReadBitmapIndexBytes() {
+		return stats.readBitmapIdxBytes;
+	}
+
+	/**
+	 * Get total microseconds spent reading bitmap indexes.
+	 *
+	 * @return total microseconds spent reading bitmap indexes.
+	 */
+	public long getReadBitmapIndexMicros() {
+		return stats.readBitmapIdxMicros;
+	}
+
+	/**
 	 * Get total number of block cache hits.
 	 *
 	 * @return total number of block cache hits.
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
index fecced1..90ee8de 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileRepository.java
@@ -31,6 +31,7 @@
 import java.util.Objects;
 import java.util.Set;
 
+import org.eclipse.jgit.annotations.NonNull;
 import org.eclipse.jgit.annotations.Nullable;
 import org.eclipse.jgit.api.errors.JGitInternalException;
 import org.eclipse.jgit.attributes.AttributesNode;
@@ -525,6 +526,12 @@ public ReflogReader getReflogReader(String refName) throws IOException {
 		return new ReflogReaderImpl(this, ref.getName());
 	}
 
+	@Override
+	public @NonNull ReflogReader getReflogReader(@NonNull Ref ref)
+			throws IOException {
+		return new ReflogReaderImpl(this, ref.getName());
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public AttributesNodeProvider createAttributesNodeProvider() {
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 40c075e..4fc9582 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
@@ -12,17 +12,24 @@
 
 import static org.eclipse.jgit.internal.storage.pack.PackExt.BITMAP_INDEX;
 import static org.eclipse.jgit.internal.storage.pack.PackExt.INDEX;
-import static org.eclipse.jgit.internal.storage.pack.PackExt.PACK;
 import static org.eclipse.jgit.internal.storage.pack.PackExt.KEEP;
+import static org.eclipse.jgit.internal.storage.pack.PackExt.PACK;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
+import java.io.RandomAccessFile;
 import java.io.StringWriter;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.nio.ByteBuffer;
 import java.nio.channels.Channels;
 import java.nio.channels.FileChannel;
+import java.nio.channels.FileLock;
+import java.nio.channels.OverlappingFileLockException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.DirectoryNotEmptyException;
 import java.nio.file.DirectoryStream;
 import java.nio.file.Files;
@@ -44,6 +51,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.Callable;
@@ -83,8 +91,11 @@
 import org.eclipse.jgit.storage.pack.PackConfig;
 import org.eclipse.jgit.treewalk.TreeWalk;
 import org.eclipse.jgit.treewalk.filter.TreeFilter;
+import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FS.LockToken;
 import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.GitDateParser;
+import org.eclipse.jgit.util.StringUtils;
 import org.eclipse.jgit.util.SystemReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -264,13 +275,18 @@ private Collection<Pack> doGc() throws IOException, ParseException {
 		if (automatic && !needGc()) {
 			return Collections.emptyList();
 		}
-		pm.start(6 /* tasks */);
-		packRefs();
-		// TODO: implement reflog_expire(pm, repo);
-		Collection<Pack> newPacks = repack();
-		prune(Collections.emptySet());
-		// TODO: implement rerere_gc(pm);
-		return newPacks;
+		try (PidLock lock = new PidLock()) {
+			if (!lock.lock()) {
+				return Collections.emptyList();
+			}
+			pm.start(6 /* tasks */);
+			packRefs();
+			// TODO: implement reflog_expire(pm, repo);
+			Collection<Pack> newPacks = repack();
+			prune(Collections.emptySet());
+			// TODO: implement rerere_gc(pm);
+			return newPacks;
+		}
 	}
 
 	/**
@@ -796,6 +812,10 @@ public Collection<Pack> repack() throws IOException {
 		Set<ObjectId> tagTargets = new HashSet<>();
 		Set<ObjectId> indexObjects = listNonHEADIndexObjects();
 
+		Set<ObjectId> refsToExcludeFromBitmap = repo.getRefDatabase()
+				.getRefsByPrefix(pconfig.getBitmapExcludedRefsPrefixes())
+				.stream().map(Ref::getObjectId).collect(Collectors.toSet());
+
 		for (Ref ref : refsBefore) {
 			checkCancelled();
 			nonHeads.addAll(listRefLogObjects(ref, 0));
@@ -840,7 +860,7 @@ public Collection<Pack> repack() throws IOException {
 		Pack heads = null;
 		if (!allHeadsAndTags.isEmpty()) {
 			heads = writePack(allHeadsAndTags, PackWriter.NONE, allTags,
-					tagTargets, excluded);
+					refsToExcludeFromBitmap, tagTargets, excluded);
 			if (heads != null) {
 				ret.add(heads);
 				excluded.add(0, heads.getIndex());
@@ -848,13 +868,13 @@ public Collection<Pack> repack() throws IOException {
 		}
 		if (!nonHeads.isEmpty()) {
 			Pack rest = writePack(nonHeads, allHeadsAndTags, PackWriter.NONE,
-					tagTargets, excluded);
+					PackWriter.NONE, tagTargets, excluded);
 			if (rest != null)
 				ret.add(rest);
 		}
 		if (!txnHeads.isEmpty()) {
 			Pack txn = writePack(txnHeads, PackWriter.NONE, PackWriter.NONE,
-					null, excluded);
+					PackWriter.NONE, null, excluded);
 			if (txn != null)
 				ret.add(txn);
 		}
@@ -1019,10 +1039,7 @@ private void deleteTempPacksIdx() {
 	 * @throws IOException
 	 */
 	private Set<ObjectId> listRefLogObjects(Ref ref, long minTime) throws IOException {
-		ReflogReader reflogReader = repo.getReflogReader(ref.getName());
-		if (reflogReader == null) {
-			return Collections.emptySet();
-		}
+		ReflogReader reflogReader = repo.getReflogReader(ref);
 		List<ReflogEntry> rlEntries = reflogReader
 				.getReverseEntries();
 		if (rlEntries == null || rlEntries.isEmpty())
@@ -1126,6 +1143,7 @@ private Set<ObjectId> listNonHEADIndexObjects()
 
 	private Pack writePack(@NonNull Set<? extends ObjectId> want,
 			@NonNull Set<? extends ObjectId> have, @NonNull Set<ObjectId> tags,
+			@NonNull Set<ObjectId> excludedRefsTips,
 			Set<ObjectId> tagTargets, List<ObjectIdSet> excludeObjects)
 			throws IOException {
 		checkCancelled();
@@ -1157,7 +1175,8 @@ private Pack writePack(@NonNull Set<? extends ObjectId> want,
 			if (excludeObjects != null)
 				for (ObjectIdSet idx : excludeObjects)
 					pw.excludeObjects(idx);
-			pw.preparePack(pm, want, have, PackWriter.NONE, tags);
+			pw.preparePack(pm, want, have, PackWriter.NONE,
+					union(tags, excludedRefsTips));
 			if (pw.getObjectCount() == 0)
 				return null;
 			checkCancelled();
@@ -1270,6 +1289,15 @@ private Pack writePack(@NonNull Set<? extends ObjectId> want,
 		}
 	}
 
+	private Set<? extends ObjectId> union(Set<ObjectId> tags,
+			Set<ObjectId> excludedRefsHeadsTips) {
+		HashSet<ObjectId> unionSet = new HashSet<>(
+				tags.size() + excludedRefsHeadsTips.size());
+		unionSet.addAll(tags);
+		unionSet.addAll(excludedRefsHeadsTips);
+		return unionSet;
+	}
+
 	private void checkCancelled() throws CancelledException {
 		if (pm.isCancelled() || Thread.currentThread().isInterrupted()) {
 			throw new CancelledException(JGitText.get().operationCanceled);
@@ -1584,4 +1612,154 @@ private int getLooseObjectLimit() {
 		return repo.getConfig().getInt(ConfigConstants.CONFIG_GC_SECTION,
 				ConfigConstants.CONFIG_KEY_AUTO, DEFAULT_AUTOLIMIT);
 	}
+
+	private class PidLock implements AutoCloseable {
+
+		private static final String GC_PID = "gc.pid"; //$NON-NLS-1$
+
+		private final Path pidFile;
+
+		private LockToken token;
+
+		private FileLock lock;
+
+		private RandomAccessFile f;
+
+		private FileChannel channel;
+
+		PidLock() {
+			pidFile = repo.getDirectory().toPath().resolve(GC_PID);
+		}
+
+		boolean lock() throws IOException {
+			if (Files.exists(pidFile)) {
+				Instant mtime = FS.DETECTED
+						.lastModifiedInstant(pidFile.toFile());
+				Instant twelveHoursAgo = Instant.now().minus(12,
+						ChronoUnit.HOURS);
+				if (mtime.compareTo(twelveHoursAgo) > 0) {
+					gcAlreadyRunning();
+					return false;
+				}
+				LOG.warn(MessageFormat.format(JGitText.get().stalePidLock,
+						pidFile, mtime));
+			}
+			try {
+				token = FS.DETECTED.createNewFileAtomic(pidFile.toFile());
+				f = new RandomAccessFile(pidFile.toFile(), "rw"); //$NON-NLS-1$
+				channel = f.getChannel();
+				lock = channel.tryLock();
+				if (lock == null || !lock.isValid()) {
+					gcAlreadyRunning();
+					return false;
+				}
+				channel.write(ByteBuffer
+						.wrap(getProcDesc().getBytes(StandardCharsets.UTF_8)));
+				Thread cleanupHook = new Thread(() -> close());
+				try {
+					Runtime.getRuntime().addShutdownHook(cleanupHook);
+				} catch (IllegalStateException e) {
+					// ignore - the VM is already shutting down
+				}
+			} catch (IOException | OverlappingFileLockException e) {
+				try {
+					failedToLock();
+				} catch (Exception e1) {
+					LOG.error(
+							MessageFormat.format(
+									JGitText.get().closePidLockFailed, pidFile),
+							e1);
+				}
+				throw e;
+			}
+			return true;
+		}
+
+		private void failedToLock() {
+			close();
+			LOG.error(MessageFormat.format(JGitText.get().failedPidLock,
+					pidFile));
+		}
+
+		private void gcAlreadyRunning() {
+			close();
+			Optional<String> s;
+			try (Stream<String> lines = Files.lines(pidFile)) {
+				s = lines.findFirst();
+				String machine = null;
+				String pid = null;
+				if (s.isPresent()) {
+					String[] c = s.get().split("\\s+"); //$NON-NLS-1$
+					pid = c[0];
+					machine = c[1];
+				}
+				if (!StringUtils.isEmptyOrNull(machine)
+						&& !StringUtils.isEmptyOrNull(pid)) {
+					LOG.error(MessageFormat.format(
+							JGitText.get().gcAlreadyRunning, machine, pid));
+					return;
+				}
+			} catch (IOException e) {
+				// ignore
+			}
+			LOG.error(MessageFormat.format(JGitText.get().failedPidLock,
+					pidFile));
+		}
+
+		private String getProcDesc() {
+			StringBuffer s = new StringBuffer(Long.toString(getPID()));
+			s.append(' ');
+			s.append(getHostName());
+			return s.toString();
+		}
+
+		private long getPID() {
+			String processName = java.lang.management.ManagementFactory
+					.getRuntimeMXBean().getName();
+			if (processName != null && processName.length() > 0) {
+				try {
+					return Long.parseLong(processName.split("@")[0]); //$NON-NLS-1$
+				} catch (Exception e) {
+					return 0;
+				}
+			}
+
+			return 0;
+		}
+
+		private String getHostName() {
+			try {
+				return InetAddress.getLocalHost().getHostName();
+			} catch (UnknownHostException e) {
+				return ""; //$NON-NLS-1$
+			}
+		}
+
+		@Override
+		public void close() {
+			boolean wasLocked = false;
+			try {
+				if (lock != null && lock.isValid()) {
+					lock.release();
+					wasLocked = true;
+				}
+				if (channel != null) {
+					channel.close();
+				}
+				if (f != null) {
+					f.close();
+				}
+				if (token != null) {
+					token.close();
+				}
+				if (wasLocked) {
+					FileUtils.delete(pidFile.toFile(), FileUtils.RETRY);
+				}
+			} catch (IOException e) {
+				LOG.error(MessageFormat
+						.format(JGitText.get().closePidLockFailed, pidFile), e);
+			}
+		}
+
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
index 73f6b4f..22977d3 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java
@@ -33,6 +33,7 @@
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.errors.PackInvalidException;
 import org.eclipse.jgit.errors.PackMismatchException;
+import org.eclipse.jgit.errors.SearchForReuseTimeout;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.internal.storage.pack.ObjectToPack;
 import org.eclipse.jgit.internal.storage.pack.PackExt;
@@ -273,7 +274,10 @@ void selectRepresentation(PackWriter packer, ObjectToPack otp,
 					p.resetTransientErrorCount();
 					if (rep != null) {
 						packer.select(otp, rep);
+						packer.checkSearchForReuseTimeout();
 					}
+				} catch (SearchForReuseTimeout e) {
+					break SEARCH;
 				} catch (PackMismatchException e) {
 					// Pack was modified; refresh the entire pack list.
 					//
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
index 9c1d33d..8b0ea4f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
@@ -86,10 +86,16 @@
  */
 class PackedBatchRefUpdate extends BatchRefUpdate {
 	private RefDirectory refdb;
+	private boolean shouldLockLooseRefs;
 
 	PackedBatchRefUpdate(RefDirectory refdb) {
-		super(refdb);
-		this.refdb = refdb;
+		this(refdb, true);
+	}
+
+	PackedBatchRefUpdate(RefDirectory refdb, boolean shouldLockLooseRefs) {
+	  super(refdb);
+	  this.refdb = refdb;
+	  this.shouldLockLooseRefs = shouldLockLooseRefs;
 	}
 
 	/** {@inheritDoc} */
@@ -155,7 +161,7 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
 		refdb.inProcessPackedRefsLock.lock();
 		try {
 			PackedRefList oldPackedList;
-			if (!refdb.isInClone()) {
+			if (!refdb.isInClone() && shouldLockLooseRefs) {
 				locks = lockLooseRefs(pending);
 				if (locks == null) {
 					return;
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 07e3814..b46ffe3 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
@@ -587,6 +587,21 @@ public PackedBatchRefUpdate newBatchUpdate() {
 		return new PackedBatchRefUpdate(this);
 	}
 
+	/**
+	 * Create a new batch update to attempt on this database.
+	 *
+	 * @param shouldLockLooseRefs
+	 *            whether loose refs should be locked during the batch ref
+	 *            update. Note that this should only be set to {@code false} if
+	 *            the application using this ensures that no other ref updates
+	 *            run concurrently to avoid lost updates caused by a race. In
+	 *            such cases it can improve performance.
+	 * @return a new batch update object
+	 */
+	public PackedBatchRefUpdate newBatchUpdate(boolean shouldLockLooseRefs) {
+		return new PackedBatchRefUpdate(this, shouldLockLooseRefs);
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public boolean performsAtomicTransactions() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/NullMessageDigest.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/NullMessageDigest.java
new file mode 100644
index 0000000..ea5877f
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/io/NullMessageDigest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023, SAP SE 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.internal.storage.io;
+
+import java.security.MessageDigest;
+
+import org.eclipse.jgit.lib.Constants;
+
+/**
+ * Dummy message digest consisting of only null bytes with the length of an
+ * ObjectId. This class can be used to skip computing a real digest.
+ */
+public final class NullMessageDigest extends MessageDigest {
+	private static final byte[] digest = new byte[Constants.OBJECT_ID_LENGTH];
+
+	private static final NullMessageDigest INSTANCE = new NullMessageDigest();
+
+	/**
+	 * Get the only instance of NullMessageDigest
+	 *
+	 * @return the only instance of NullMessageDigest
+	 */
+	public static MessageDigest getInstance() {
+		return INSTANCE;
+	}
+
+	private NullMessageDigest() {
+		super("null"); //$NON-NLS-1$
+	}
+
+	@Override
+	protected void engineUpdate(byte input) {
+		// empty
+	}
+
+	@Override
+	protected void engineUpdate(byte[] input, int offset, int len) {
+		// empty
+	}
+
+	@Override
+	protected byte[] engineDigest() {
+		return digest;
+	}
+
+	@Override
+	protected void engineReset() {
+		// empty
+	}
+}
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 3e4b5df..61f92d2 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
@@ -25,6 +25,7 @@
 import java.lang.ref.WeakReference;
 import java.security.MessageDigest;
 import java.text.MessageFormat;
+import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -54,6 +55,7 @@
 import org.eclipse.jgit.errors.IncorrectObjectTypeException;
 import org.eclipse.jgit.errors.LargeObjectException;
 import org.eclipse.jgit.errors.MissingObjectException;
+import org.eclipse.jgit.errors.SearchForReuseTimeout;
 import org.eclipse.jgit.errors.StoredObjectRepresentationNotAvailableException;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder;
@@ -262,6 +264,12 @@ public static Iterable<PackWriter> getInstances() {
 
 	private boolean indexDisabled;
 
+	private boolean checkSearchForReuseTimeout = false;
+
+	private final Duration searchForReuseTimeout;
+
+	private long searchForReuseStartTimeEpoc;
+
 	private int depth;
 
 	private Collection<? extends ObjectId> unshallowObjects;
@@ -356,6 +364,7 @@ public PackWriter(PackConfig config, final ObjectReader reader,
 
 		deltaBaseAsOffset = config.isDeltaBaseAsOffset();
 		reuseDeltas = config.isReuseDeltas();
+		searchForReuseTimeout = config.getSearchForReuseTimeout();
 		reuseValidate = true; // be paranoid by default
 		stats = statsAccumulator != null ? statsAccumulator
 				: new PackStatistics.Accumulator();
@@ -405,6 +414,24 @@ public boolean isDeltaBaseAsOffset() {
 	}
 
 	/**
+	 * Check whether the search for reuse phase is taking too long. This could
+	 * be the case when the number of objects and pack files is high and the
+	 * system is under pressure. If that's the case and
+	 * checkSearchForReuseTimeout is true abort the search.
+	 *
+	 * @throws SearchForReuseTimeout
+	 *             if the search for reuse is taking too long.
+	 */
+	public void checkSearchForReuseTimeout() throws SearchForReuseTimeout {
+		if (checkSearchForReuseTimeout
+				&& Duration.ofMillis(System.currentTimeMillis()
+						- searchForReuseStartTimeEpoc)
+				.compareTo(searchForReuseTimeout) > 0) {
+			throw new SearchForReuseTimeout(searchForReuseTimeout);
+		}
+	}
+
+	/**
 	 * Set writer delta base format. Delta base can be written as an offset in a
 	 * pack file (new approach reducing file size) or as an object id (legacy
 	 * approach, compatible with old readers).
@@ -420,6 +447,22 @@ public void setDeltaBaseAsOffset(boolean deltaBaseAsOffset) {
 	}
 
 	/**
+	 * Set the writer to check for long search for reuse, exceeding the timeout.
+	 * Selecting an object representation can be an expensive operation. It is
+	 * possible to set a max search for reuse time (see
+	 * PackConfig#CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT for more details).
+	 *
+	 * However some operations, i.e.: GC, need to find the best candidate
+	 * regardless how much time the operation will need to finish.
+	 *
+	 * This method enables the search for reuse timeout check, otherwise
+	 * disabled.
+	 */
+	public void enableSearchForReuseTimeout() {
+		this.checkSearchForReuseTimeout = true;
+	}
+
+	/**
 	 * Check if the writer will reuse commits that are already stored as deltas.
 	 *
 	 * @return true if the writer would reuse commits stored as deltas, assuming
@@ -1306,6 +1349,7 @@ private void searchForReuse(ProgressMonitor monitor) throws IOException {
 		cnt += objectsLists[OBJ_TAG].size();
 
 		long start = System.currentTimeMillis();
+		searchForReuseStartTimeEpoc = start;
 		beginPhase(PackingPhase.FINDING_SOURCES, monitor, cnt);
 		if (cnt <= 4096) {
 			// For small object counts, do everything as one list.
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 f1ede2a..9f2b4d9 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
@@ -408,6 +408,9 @@ private CommitSelectionHelper captureOldAndNewCommits(RevWalk rw,
 		List<RevCommit> newWantsByNewest = new ArrayList<>(want.size());
 		Set<RevCommit> newWants = new HashSet<>(want.size());
 		for (AnyObjectId objectId : want) {
+			if(excludeFromBitmapSelection.contains(objectId)) {
+				continue;
+			}
 			RevObject ro = rw.peel(rw.parseAny(objectId));
 			if (!(ro instanceof RevCommit) || reuse.contains(ro)
 					|| excludeFromBitmapSelection.contains(ro)) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/ssh/OpenSshConfigFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/ssh/OpenSshConfigFile.java
index 6fbb4c5..228c25f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/ssh/OpenSshConfigFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/transport/ssh/OpenSshConfigFile.java
@@ -482,12 +482,18 @@ public static class HostEntry implements SshConfigStore.HostConfig {
 
 		private final List<String> patterns;
 
-		// Constructor used to build the merged entry; never matches anything
-		HostEntry() {
+		/**
+		 * Constructor used to build the merged entry; never matches anything
+		 */
+		public HostEntry() {
 			this.patterns = Collections.emptyList();
 		}
 
-		HostEntry(List<String> patterns) {
+		/**
+		 * @param patterns
+		 *            to be used in matching against host name.
+		 */
+		public HostEntry(List<String> patterns) {
 			this.patterns = patterns;
 		}
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BatchingProgressMonitor.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BatchingProgressMonitor.java
index 2caefa4..49e295a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/BatchingProgressMonitor.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/BatchingProgressMonitor.java
@@ -176,7 +176,7 @@ void update(BatchingProgressMonitor pm, int completed) {
 				}
 			} else {
 				// Display once per second or when 1% is done.
-				int currPercent = lastWork * 100 / totalWork;
+				int currPercent = Math.round(lastWork * 100F / totalWork);
 				if (display) {
 					pm.onUpdate(taskName, lastWork, totalWork, currPercent);
 					output = true;
@@ -201,8 +201,8 @@ void end(BatchingProgressMonitor pm) {
 				if (totalWork == UNKNOWN) {
 					pm.onEndTask(taskName, lastWork);
 				} else {
-					int pDone = lastWork * 100 / totalWork;
-					pm.onEndTask(taskName, lastWork, totalWork, pDone);
+					int currPercent = Math.round(lastWork * 100F / totalWork);
+					pm.onEndTask(taskName, lastWork, totalWork, currPercent);
 				}
 			}
 			if (timerFuture != null)
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java
new file mode 100644
index 0000000..e4e7cd6
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/CommitConfig.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2020 Julian Ruppel <julian.ruppel@sap.com>
+ *
+ * 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.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.StandardCharsets;
+import java.nio.charset.UnsupportedCharsetException;
+import java.text.MessageFormat;
+import org.eclipse.jgit.annotations.Nullable;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.lib.Config.SectionParser;
+import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.IO;
+import org.eclipse.jgit.util.RawParseUtils;
+
+/**
+ * The standard "commit" configuration parameters.
+ *
+ * @since 5.13
+ */
+public class CommitConfig {
+	/**
+	 * Key for {@link Config#get(SectionParser)}.
+	 */
+	public static final Config.SectionParser<CommitConfig> KEY = CommitConfig::new;
+
+	private final static Charset DEFAULT_COMMIT_MESSAGE_ENCODING = StandardCharsets.UTF_8;
+
+	private String i18nCommitEncoding;
+
+	private String commitTemplatePath;
+
+	private CommitConfig(Config rc) {
+		commitTemplatePath = rc.getString(ConfigConstants.CONFIG_COMMIT_SECTION,
+				null, ConfigConstants.CONFIG_KEY_COMMIT_TEMPLATE);
+		i18nCommitEncoding = rc.getString(ConfigConstants.CONFIG_SECTION_I18N,
+				null, ConfigConstants.CONFIG_KEY_COMMIT_ENCODING);
+	}
+
+	/**
+	 * Get the path to the commit template as defined in the git
+	 * {@code commit.template} property.
+	 *
+	 * @return the path to commit template or {@code null} if not present.
+	 */
+	@Nullable
+	public String getCommitTemplatePath() {
+		return commitTemplatePath;
+	}
+
+	/**
+	 * Get the encoding of the commit as defined in the git
+	 * {@code i18n.commitEncoding} property.
+	 *
+	 * @return the encoding or {@code null} if not present.
+	 */
+	@Nullable
+	public String getCommitEncoding() {
+		return i18nCommitEncoding;
+	}
+
+	/**
+	 * Get the content to the commit template as defined in
+	 * {@code commit.template}. If no {@code i18n.commitEncoding} is specified,
+	 * UTF-8 fallback is used.
+	 *
+	 * @return content of the commit template or {@code null} if not present.
+	 * @throws IOException
+	 *             if the template file can not be read
+	 * @throws FileNotFoundException
+	 *             if the template file does not exists
+	 * @throws ConfigInvalidException
+	 *             if a {@code commitEncoding} is specified and is invalid
+	 */
+	@Nullable
+	public String getCommitTemplateContent()
+			throws FileNotFoundException, IOException, ConfigInvalidException {
+
+		if (commitTemplatePath == null) {
+			return null;
+		}
+
+		File commitTemplateFile;
+		if (commitTemplatePath.startsWith("~/")) { //$NON-NLS-1$
+			commitTemplateFile = FS.DETECTED.resolve(FS.DETECTED.userHome(),
+					commitTemplatePath.substring(2));
+		} else {
+			commitTemplateFile = FS.DETECTED.resolve(null, commitTemplatePath);
+		}
+
+		Charset commitMessageEncoding = getEncoding();
+		return RawParseUtils.decode(commitMessageEncoding,
+				IO.readFully(commitTemplateFile));
+
+	}
+
+	private Charset getEncoding() throws ConfigInvalidException {
+		Charset commitMessageEncoding = DEFAULT_COMMIT_MESSAGE_ENCODING;
+
+		if (i18nCommitEncoding == null) {
+			return null;
+		}
+
+		try {
+			commitMessageEncoding = Charset.forName(i18nCommitEncoding);
+		} catch (IllegalCharsetNameException | UnsupportedCharsetException e) {
+			throw new ConfigInvalidException(MessageFormat.format(
+					JGitText.get().invalidEncoding, i18nCommitEncoding), e);
+		}
+
+		return commitMessageEncoding;
+	}
+}
\ No newline at end of file
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 3e3d9b5..634e3f7 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ConfigConstants.java
@@ -125,6 +125,13 @@ public final class ConfigConstants {
 	public static final String CONFIG_COMMIT_SECTION = "commit";
 
 	/**
+	 * The "template" key
+	 *
+	 * @since 5.13
+	 */
+	public static final String CONFIG_KEY_COMMIT_TEMPLATE = "template";
+
+	/**
 	 * The "tag" section
 	 *
 	 * @since 5.11
@@ -342,6 +349,12 @@ public final class ConfigConstants {
 	public static final String CONFIG_KEY_INDEXVERSION = "indexversion";
 
 	/**
+	 * The "skiphash" key
+	 * @since 5.13.2
+	 */
+	public static final String CONFIG_KEY_SKIPHASH = "skiphash";
+
+	/**
 	 * The "hidedotfiles" key
 	 * @since 3.5
 	 */
@@ -431,6 +444,13 @@ public final class ConfigConstants {
 	public static final String CONFIG_KEY_SUPPORTSATOMICFILECREATION = "supportsatomicfilecreation";
 
 	/**
+	 * The "sha1Implementation" key in the "core" section
+	 *
+	 * @since 5.13.2
+	 */
+	public static final String SHA1_IMPLEMENTATION = "sha1implementation";
+
+	/**
 	 * The "noprefix" key in the "diff" section
 	 * @since 3.0
 	 */
@@ -518,6 +538,13 @@ public final class ConfigConstants {
 	public static final String CONFIG_SECTION_I18N = "i18n";
 
 	/**
+	 * The "commitEncoding" key
+	 *
+	 * @since 5.13
+	 */
+	public static final String CONFIG_KEY_COMMIT_ENCODING = "commitEncoding";
+
+	/**
 	 * The "logOutputEncoding" key
 	 *
 	 * @since 5.2
@@ -600,6 +627,12 @@ public final class ConfigConstants {
 	public static final String CONFIG_KEY_BITMAP_EXCESSIVE_BRANCH_COUNT = "bitmapexcessivebranchcount";
 
 	/**
+	 * The "pack.bitmapExcludedRefsPrefixes" key
+	 * @since 5.13.2
+	 */
+	public static final String CONFIG_KEY_BITMAP_EXCLUDED_REFS_PREFIXES = "bitmapexcludedrefsprefixes";
+
+	/**
 	 * The "pack.bitmapInactiveBranchAgeInDays" key
 	 * @since 5.8
 	 */
@@ -736,4 +769,26 @@ public final class ConfigConstants {
 	 * @since 5.11
 	 */
 	public static final String CONFIG_KEY_DEFAULT_BRANCH = "defaultbranch";
+
+	/**
+	 * The "pack.searchForReuseTimeout" key
+	 *
+	 * @since 5.13
+	 */
+	public static final String CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT = "searchforreusetimeout";
+
+	/**
+	 * The "pack.preserveOldPacks" key
+	 *
+	 * @since 5.13.2
+	 */
+	public static final String CONFIG_KEY_PRESERVE_OLD_PACKS = "preserveoldpacks";
+
+	/**
+	 * The "pack.prunePreserved" key
+	 *
+	 * @since 5.13.2
+	 */
+	public static final String CONFIG_KEY_PRUNE_PRESERVED = "prunepreserved";
+
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
index 1e8a6c9..d3b3c6e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Repository.java
@@ -1692,6 +1692,22 @@ public abstract ReflogReader getReflogReader(String refName)
 			throws IOException;
 
 	/**
+	 * Get the reflog reader. Subclasses should override this method and provide
+	 * a more efficient implementation.
+	 *
+	 * @param ref
+	 *            a Ref
+	 * @return a {@link org.eclipse.jgit.lib.ReflogReader} for the supplied ref,
+	 *         or {@code null} if the ref does not exist.
+	 * @throws IOException
+	 * @since 5.13.2
+	 */
+	public @Nullable ReflogReader getReflogReader(@NonNull	Ref ref)
+			throws IOException {
+		return getReflogReader(ref.getName());
+	}
+
+	/**
 	 * Return the information stored in the file $GIT_DIR/MERGE_MSG. In this
 	 * file operations triggering a merge will store a template for the commit
 	 * message of the merge commit.
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
index e465024..822fc53 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/TreeRevFilter.java
@@ -211,7 +211,10 @@ public boolean include(RevWalk walker, RevCommit c)
 				// "empty tree root" and thus their history is not relevant.
 				// Cut our grandparents to be an empty list.
 				//
-				pList[i].parents = RevCommit.NO_PARENTS;
+				tw.reset(pList[i].getTree());
+				if (!tw.next()) {
+					pList[i].parents = RevCommit.NO_PARENTS;
+				}
 			}
 
 			// We have an interesting difference relative to this parent.
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java
index 7b5f00e..2443c4e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileBasedConfig.java
@@ -216,9 +216,10 @@ public void save() throws IOException {
 		}
 
 		final LockFile lf = new LockFile(getFile());
-		if (!lf.lock())
-			throw new LockFailedException(getFile());
 		try {
+			if (!lf.lock()) {
+				throw new LockFailedException(getFile());
+			}
 			lf.setNeedSnapshotNoConfig(true);
 			lf.write(out);
 			if (!lf.commit())
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 f76dd27..163e475 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_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;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_BUILD_BITMAPS;
@@ -29,14 +30,19 @@
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_MIN_SIZE_PREVENT_RACYPACK;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_REUSE_DELTAS;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_REUSE_OBJECTS;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_SINGLE_PACK;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_THREADS;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_WAIT_PREVENT_RACYPACK;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_WINDOW;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_WINDOW_MEMORY;
 import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_PACK_SECTION;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PRESERVE_OLD_PACKS;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PRUNE_PRESERVED;
 
+import java.time.Duration;
 import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
 import java.util.zip.Deflater;
 
 import org.eclipse.jgit.internal.storage.file.PackIndexWriter;
@@ -222,6 +228,24 @@ public class PackConfig {
 	 */
 	public static final int DEFAULT_BITMAP_INACTIVE_BRANCH_AGE_IN_DAYS = 90;
 
+	/**
+	 * Default refs prefixes excluded from the calculation of pack bitmaps.
+	 *
+	 * @see #setBitmapExcludedRefsPrefixes(String[])
+	 * @since 5.13.2
+	 */
+	public static final String[] DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES = new String[0];
+
+	/**
+	 * Default max time to spend during the search for reuse phase. This
+	 * optimization is disabled by default: {@value}
+	 *
+	 * @see #setSearchForReuseTimeout(Duration)
+	 * @since 5.13
+	 */
+	public static final Duration DEFAULT_SEARCH_FOR_REUSE_TIMEOUT = Duration
+			.ofSeconds(Integer.MAX_VALUE);
+
 	private int compressionLevel = Deflater.DEFAULT_COMPRESSION;
 
 	private boolean reuseDeltas = DEFAULT_REUSE_DELTAS;
@@ -272,6 +296,10 @@ public class PackConfig {
 
 	private int bitmapInactiveBranchAgeInDays = DEFAULT_BITMAP_INACTIVE_BRANCH_AGE_IN_DAYS;
 
+	private String[] bitmapExcludedRefsPrefixes = DEFAULT_BITMAP_EXCLUDED_REFS_PREFIXES;
+
+	private Duration searchForReuseTimeout = DEFAULT_SEARCH_FOR_REUSE_TIMEOUT;
+
 	private boolean cutDeltaChains;
 
 	private boolean singlePack;
@@ -342,6 +370,7 @@ public PackConfig(PackConfig cfg) {
 		this.bitmapInactiveBranchAgeInDays = cfg.bitmapInactiveBranchAgeInDays;
 		this.cutDeltaChains = cfg.cutDeltaChains;
 		this.singlePack = cfg.singlePack;
+		this.searchForReuseTimeout = cfg.searchForReuseTimeout;
 	}
 
 	/**
@@ -1104,6 +1133,18 @@ public int getBitmapInactiveBranchAgeInDays() {
 	}
 
 	/**
+	 * Get the max time to spend during the search for reuse phase.
+	 *
+	 * Default setting: {@value #DEFAULT_SEARCH_FOR_REUSE_TIMEOUT}
+	 *
+	 * @return the maximum time to spend during the search for reuse phase.
+	 * @since 5.13
+	 */
+	public Duration getSearchForReuseTimeout() {
+		return searchForReuseTimeout;
+	}
+
+	/**
 	 * Set the age in days that marks a branch as "inactive".
 	 *
 	 * Default setting: {@value #DEFAULT_BITMAP_INACTIVE_BRANCH_AGE_IN_DAYS}
@@ -1117,6 +1158,40 @@ public void setBitmapInactiveBranchAgeInDays(int ageInDays) {
 	}
 
 	/**
+	 * Get the refs prefixes excluded from the Bitmap.
+	 *
+	 * @return the refs prefixes excluded from the Bitmap.
+	 * @since 5.13.2
+	 */
+	public String[] getBitmapExcludedRefsPrefixes() {
+		return bitmapExcludedRefsPrefixes;
+	}
+
+	/**
+	 * Set the refs prefixes excluded from the Bitmap.
+	 *
+	 * @param excludedRefsPrefixes
+	 *            the refs prefixes excluded from the Bitmap.
+	 * @since 5.13.2
+	 */
+	public void setBitmapExcludedRefsPrefixes(String[] excludedRefsPrefixes) {
+		bitmapExcludedRefsPrefixes = excludedRefsPrefixes;
+	}
+
+	/**
+	 * Set the max time to spend during the search for reuse phase.
+	 *
+	 * @param timeout
+	 *            max time allowed during the search for reuse phase
+	 *
+	 *            Default setting: {@value #DEFAULT_SEARCH_FOR_REUSE_TIMEOUT}
+	 * @since 5.13
+	 */
+	public void setSearchForReuseTimeout(Duration timeout) {
+		searchForReuseTimeout = timeout;
+	}
+
+	/**
 	 * Update properties by setting fields from the configuration.
 	 *
 	 * If a property's corresponding variable is not defined in the supplied
@@ -1179,11 +1254,25 @@ public void fromConfig(Config rc) {
 		setBitmapInactiveBranchAgeInDays(rc.getInt(CONFIG_PACK_SECTION,
 				CONFIG_KEY_BITMAP_INACTIVE_BRANCH_AGE_INDAYS,
 				getBitmapInactiveBranchAgeInDays()));
+		String[] excludedRefsPrefixesArray = rc.getStringList(CONFIG_PACK_SECTION,
+			null,
+			CONFIG_KEY_BITMAP_EXCLUDED_REFS_PREFIXES);
+		if(excludedRefsPrefixesArray.length > 0) {
+			setBitmapExcludedRefsPrefixes(excludedRefsPrefixesArray);
+		}
+		setSearchForReuseTimeout(Duration.ofSeconds(rc.getTimeUnit(
+				CONFIG_PACK_SECTION, null,
+				CONFIG_KEY_SEARCH_FOR_REUSE_TIMEOUT,
+				getSearchForReuseTimeout().getSeconds(), TimeUnit.SECONDS)));
 		setWaitPreventRacyPack(rc.getBoolean(CONFIG_PACK_SECTION,
 				CONFIG_KEY_WAIT_PREVENT_RACYPACK, isWaitPreventRacyPack()));
 		setMinSizePreventRacyPack(rc.getLong(CONFIG_PACK_SECTION,
 				CONFIG_KEY_MIN_SIZE_PREVENT_RACYPACK,
 				getMinSizePreventRacyPack()));
+		setPreserveOldPacks(rc.getBoolean(CONFIG_PACK_SECTION,
+				CONFIG_KEY_PRESERVE_OLD_PACKS, DEFAULT_PRESERVE_OLD_PACKS));
+		setPrunePreserved(rc.getBoolean(CONFIG_PACK_SECTION,
+				CONFIG_KEY_PRUNE_PRESERVED, DEFAULT_PRUNE_PRESERVED));
 	}
 
 	/** {@inheritDoc} */
@@ -1216,6 +1305,8 @@ public String toString() {
 				.append(getBitmapExcessiveBranchCount());
 		b.append(", bitmapInactiveBranchAge=") //$NON-NLS-1$
 				.append(getBitmapInactiveBranchAgeInDays());
+		b.append(", searchForReuseTimeout") //$NON-NLS-1$
+				.append(getSearchForReuseTimeout());
 		b.append(", singlePack=").append(getSinglePack()); //$NON-NLS-1$
 		return b.toString();
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
index 9210ec1..3e5af76 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AmazonS3.java
@@ -31,6 +31,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.text.MessageFormat;
 import java.text.SimpleDateFormat;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
@@ -46,7 +47,6 @@
 import java.util.TimeZone;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
-import java.time.Instant;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
@@ -85,6 +85,12 @@
 public class AmazonS3 {
 	private static final Set<String> SIGNED_HEADERS;
 
+	private static final String AWS_API_V2 = "2"; //$NON-NLS-1$
+
+	private static final String AWS_API_V4 = "4"; //$NON-NLS-1$
+
+	private static final String AWS_S3_SERVICE_NAME = "s3"; //$NON-NLS-1$
+
 	private static final String HMAC = "HmacSHA1"; //$NON-NLS-1$
 
 	private static final String X_AMZ_ACL = "x-amz-acl"; //$NON-NLS-1$
@@ -134,11 +140,17 @@ private static MessageDigest newMD5() {
 		}
 	}
 
+	/** AWS API Signature Version. */
+	private final String awsApiSignatureVersion;
+
 	/** AWSAccessKeyId, public string that identifies the user's account. */
 	private final String publicKey;
 
 	/** Decoded form of the private AWSSecretAccessKey, to sign requests. */
-	private final SecretKeySpec privateKey;
+	private final SecretKeySpec secretKeySpec;
+
+	/** AWSSecretAccessKey, private string used to access a user's account. */
+	private final char[] secretKey; // store as char[] for security
 
 	/** Our HTTP proxy support, in case we are behind a firewall. */
 	private final ProxySelector proxySelector;
@@ -158,8 +170,12 @@ private static MessageDigest newMD5() {
 	/** S3 Bucket Domain. */
 	private final String domain;
 
+	/** S3 Region. */
+	private final String region;
+
 	/** Property names used in amazon connection configuration file. */
 	interface Keys {
+		String AWS_API_SIGNATURE_VERSION = "aws.api.signature.version"; //$NON-NLS-1$
 		String ACCESS_KEY = "accesskey"; //$NON-NLS-1$
 		String SECRET_KEY = "secretkey"; //$NON-NLS-1$
 		String PASSWORD = "password"; //$NON-NLS-1$
@@ -167,6 +183,7 @@ interface Keys {
 		String CRYPTO_VER = "crypto.version"; //$NON-NLS-1$
 		String ACL = "acl"; //$NON-NLS-1$
 		String DOMAIN = "domain"; //$NON-NLS-1$
+		String REGION = "region"; //$NON-NLS-1$
 		String HTTP_RETRY = "httpclient.retry-max"; //$NON-NLS-1$
 		String TMP_DIR = "tmpdir"; //$NON-NLS-1$
 	}
@@ -179,6 +196,12 @@ interface Keys {
 	 * For example:
 	 *
 	 * <pre>
+	 * # AWS API signature version, must be one of:
+	 * #   2 - deprecated (not supported in all AWS regions)
+	 * #   4 - latest (supported in all AWS regions)
+	 * # Defaults to 2.
+	 * aws.api.signature.version: 4
+	 *
 	 * # AWS Access and Secret Keys (required)
 	 * accesskey: &lt;YourAWSAccessKey&gt;
 	 * secretkey: &lt;YourAWSSecretKey&gt;
@@ -191,6 +214,9 @@ interface Keys {
 	 * # AWS S3 Region Domain (defaults to s3.amazonaws.com)
 	 * domain: s3.amazonaws.com
 	 *
+	 * # AWS S3 Region (required if aws.api.signature.version = 4)
+	 * region: us-west-2
+	 *
 	 * # Number of times to retry after internal error from S3.
 	 * httpclient.retry-max: 3
 	 *
@@ -203,16 +229,34 @@ interface Keys {
 	 *            connection properties.
 	 */
 	public AmazonS3(final Properties props) {
+		awsApiSignatureVersion = props
+				.getProperty(Keys.AWS_API_SIGNATURE_VERSION, AWS_API_V2);
+		if (awsApiSignatureVersion.equals(AWS_API_V4)) {
+			region = props.getProperty(Keys.REGION);
+			if (region == null) {
+				throw new IllegalArgumentException(
+						JGitText.get().missingAwsRegion);
+			}
+		} else if (awsApiSignatureVersion.equals(AWS_API_V2)) {
+			region = null;
+		} else {
+			throw new IllegalArgumentException(MessageFormat.format(
+					JGitText.get().invalidAwsApiSignatureVersion,
+					awsApiSignatureVersion));
+		}
+
 		domain = props.getProperty(Keys.DOMAIN, "s3.amazonaws.com"); //$NON-NLS-1$
 
 		publicKey = props.getProperty(Keys.ACCESS_KEY);
 		if (publicKey == null)
 			throw new IllegalArgumentException(JGitText.get().missingAccesskey);
 
-		final String secret = props.getProperty(Keys.SECRET_KEY);
-		if (secret == null)
+		final String secretKeyStr = props.getProperty(Keys.SECRET_KEY);
+		if (secretKeyStr == null) {
 			throw new IllegalArgumentException(JGitText.get().missingSecretkey);
-		privateKey = new SecretKeySpec(Constants.encodeASCII(secret), HMAC);
+		}
+		secretKeySpec = new SecretKeySpec(Constants.encodeASCII(secretKeyStr), HMAC);
+		secretKey = secretKeyStr.toCharArray();
 
 		final String pacl = props.getProperty(Keys.ACL, "PRIVATE"); //$NON-NLS-1$
 		if (StringUtils.equalsIgnoreCase("PRIVATE", pacl)) //$NON-NLS-1$
@@ -257,7 +301,7 @@ public URLConnection get(String bucket, String key)
 			throws IOException {
 		for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) {
 			final HttpURLConnection c = open("GET", bucket, key); //$NON-NLS-1$
-			authorize(c);
+			authorize(c, Collections.emptyMap(), 0, null);
 			switch (HttpSupport.response(c)) {
 			case HttpURLConnection.HTTP_OK:
 				encryption.validate(c, X_AMZ_META);
@@ -338,7 +382,7 @@ public void delete(String bucket, String key)
 			throws IOException {
 		for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) {
 			final HttpURLConnection c = open("DELETE", bucket, key); //$NON-NLS-1$
-			authorize(c);
+			authorize(c, Collections.emptyMap(), 0, null);
 			switch (HttpSupport.response(c)) {
 			case HttpURLConnection.HTTP_NO_CONTENT:
 				return;
@@ -384,13 +428,16 @@ public void put(String bucket, String key, byte[] data)
 		}
 
 		final String md5str = Base64.encodeBytes(newMD5().digest(data));
+		final String bodyHash = awsApiSignatureVersion.equals(AWS_API_V4)
+				? AwsRequestSignerV4.calculateBodyHash(data)
+				: null;
 		final String lenstr = String.valueOf(data.length);
 		for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) {
 			final HttpURLConnection c = open("PUT", bucket, key); //$NON-NLS-1$
 			c.setRequestProperty("Content-Length", lenstr); //$NON-NLS-1$
 			c.setRequestProperty("Content-MD5", md5str); //$NON-NLS-1$
 			c.setRequestProperty(X_AMZ_ACL, acl);
-			authorize(c);
+			authorize(c, Collections.emptyMap(), data.length, bodyHash);
 			c.setDoOutput(true);
 			c.setFixedLengthStreamingMode(data.length);
 			try (OutputStream os = c.getOutputStream()) {
@@ -465,6 +512,9 @@ void putImpl(final String bucket, final String key,
 			monitorTask = MessageFormat.format(JGitText.get().progressMonUploading, key);
 
 		final String md5str = Base64.encodeBytes(csum);
+		final String bodyHash = awsApiSignatureVersion.equals(AWS_API_V4)
+				? AwsRequestSignerV4.calculateBodyHash(buf.toByteArray())
+				: null;
 		final long len = buf.length();
 		for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) {
 			final HttpURLConnection c = open("PUT", bucket, key); //$NON-NLS-1$
@@ -472,7 +522,7 @@ void putImpl(final String bucket, final String key,
 			c.setRequestProperty("Content-MD5", md5str); //$NON-NLS-1$
 			c.setRequestProperty(X_AMZ_ACL, acl);
 			encryption.request(c, X_AMZ_META);
-			authorize(c);
+			authorize(c, Collections.emptyMap(), len, bodyHash);
 			c.setDoOutput(true);
 			monitor.beginTask(monitorTask, (int) (len / 1024));
 			try (OutputStream os = c.getOutputStream()) {
@@ -544,8 +594,13 @@ HttpURLConnection open(final String method, final String bucket,
 		urlstr.append('.');
 		urlstr.append(domain);
 		urlstr.append('/');
-		if (key.length() > 0)
-			HttpSupport.encode(urlstr, key);
+		if (key.length() > 0) {
+			if (awsApiSignatureVersion.equals(AWS_API_V2)) {
+				HttpSupport.encode(urlstr, key);
+			} else if (awsApiSignatureVersion.equals(AWS_API_V4)) {
+				urlstr.append(key);
+			}
+		}
 		if (!args.isEmpty()) {
 			final Iterator<Map.Entry<String, String>> i;
 
@@ -572,7 +627,18 @@ HttpURLConnection open(final String method, final String bucket,
 		return c;
 	}
 
-	void authorize(HttpURLConnection c) throws IOException {
+	void authorize(HttpURLConnection httpURLConnection,
+			Map<String, String> queryParams, long contentLength,
+			final String bodyHash) throws IOException {
+		if (awsApiSignatureVersion.equals(AWS_API_V2)) {
+			authorizeV2(httpURLConnection);
+		} else if (awsApiSignatureVersion.equals(AWS_API_V4)) {
+			AwsRequestSignerV4.sign(httpURLConnection, queryParams, contentLength, bodyHash, AWS_S3_SERVICE_NAME,
+					region, publicKey, secretKey);
+		}
+	}
+
+	void authorizeV2(HttpURLConnection c) throws IOException {
 		final Map<String, List<String>> reqHdr = c.getRequestProperties();
 		final SortedMap<String, String> sigHdr = new TreeMap<>();
 		for (Map.Entry<String, List<String>> entry : reqHdr.entrySet()) {
@@ -609,7 +675,7 @@ void authorize(HttpURLConnection c) throws IOException {
 		final String sec;
 		try {
 			final Mac m = Mac.getInstance(HMAC);
-			m.init(privateKey);
+			m.init(secretKeySpec);
 			sec = Base64.encodeBytes(m.doFinal(s.toString().getBytes(UTF_8)));
 		} catch (NoSuchAlgorithmException e) {
 			throw new IOException(MessageFormat.format(JGitText.get().noHMACsupport, HMAC, e.getMessage()));
@@ -673,7 +739,7 @@ void list() throws IOException {
 
 			for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) {
 				final HttpURLConnection c = open("GET", bucket, "", args); //$NON-NLS-1$ //$NON-NLS-2$
-				authorize(c);
+				authorize(c, args, 0, null);
 				switch (HttpSupport.response(c)) {
 				case HttpURLConnection.HTTP_OK:
 					truncated = false;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/AwsRequestSignerV4.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AwsRequestSignerV4.java
new file mode 100644
index 0000000..6b3d397
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/AwsRequestSignerV4.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (C) 2022, Workday 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.transport;
+
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.time.Instant;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.util.Hex;
+import org.eclipse.jgit.util.HttpSupport;
+
+/**
+ * Utility class for signing requests to AWS service endpoints using the V4
+ * signing protocol.
+ *
+ * Reference implementation: <a href=
+ * "https://docs.aws.amazon.com/AmazonS3/latest/API/samples/AWSS3SigV4JavaSamples.zip">AWSS3SigV4JavaSamples.zip</a>
+ *
+ * @see <a href=
+ *      "https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html">AWS
+ *      Signature Version 4</a>
+ *
+ * @since 5.13
+ */
+public final class AwsRequestSignerV4 {
+
+	/** AWS version 4 signing algorithm (for authorization header). **/
+	private static final String ALGORITHM = "HMAC-SHA256"; //$NON-NLS-1$
+
+	/** Java Message Authentication Code (MAC) algorithm name. **/
+	private static final String MAC_ALGORITHM = "HmacSHA256"; //$NON-NLS-1$
+
+	/** AWS version 4 signing scheme. **/
+	private static final String SCHEME = "AWS4"; //$NON-NLS-1$
+
+	/** AWS version 4 terminator string. **/
+	private static final String TERMINATOR = "aws4_request"; //$NON-NLS-1$
+
+	/** SHA-256 hash of an empty request body. **/
+	private static final String EMPTY_BODY_SHA256 = "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"; //$NON-NLS-1$
+
+	/** Date format for the 'x-amz-date' header. **/
+	private static final DateTimeFormatter AMZ_DATE_FORMAT = DateTimeFormatter
+			.ofPattern("yyyyMMdd'T'HHmmss'Z'"); //$NON-NLS-1$
+
+	/** Date format for the string-to-sign's scope. **/
+	private static final DateTimeFormatter SCOPE_DATE_FORMAT = DateTimeFormatter
+			.ofPattern("yyyyMMdd"); //$NON-NLS-1$
+
+	private AwsRequestSignerV4() {
+		// Don't instantiate utility class
+	}
+
+	/**
+	 * Sign the provided request with an AWS4 signature as the 'Authorization'
+	 * header.
+	 *
+	 * @param httpURLConnection
+	 *            The request to sign.
+	 * @param queryParameters
+	 *            The query parameters being sent in the request.
+	 * @param contentLength
+	 *            The content length of the data being sent in the request
+	 * @param bodyHash
+	 *            Hex-encoded SHA-256 hash of the data being sent in the request
+	 * @param serviceName
+	 *            The signing name of the AWS service (e.g. "s3").
+	 * @param regionName
+	 *            The name of the AWS region that will handle the request (e.g.
+	 *            "us-east-1").
+	 * @param awsAccessKey
+	 *            The user's AWS Access Key.
+	 * @param awsSecretKey
+	 *            The user's AWS Secret Key.
+	 */
+	public static void sign(HttpURLConnection httpURLConnection,
+			Map<String, String> queryParameters, long contentLength,
+			String bodyHash, String serviceName, String regionName,
+			String awsAccessKey, char[] awsSecretKey) {
+		// get request headers
+		Map<String, String> headers = new HashMap<>();
+		httpURLConnection.getRequestProperties()
+				.forEach((headerName, headerValues) -> headers.put(headerName,
+						String.join(",", headerValues))); //$NON-NLS-1$
+
+		// add required content headers
+		if (contentLength > 0) {
+			headers.put(HttpSupport.HDR_CONTENT_LENGTH,
+					String.valueOf(contentLength));
+		} else {
+			bodyHash = EMPTY_BODY_SHA256;
+		}
+		headers.put("x-amz-content-sha256", bodyHash); //$NON-NLS-1$
+
+		// add the 'x-amz-date' header
+		OffsetDateTime now = Instant.now().atOffset(ZoneOffset.UTC);
+		String amzDate = now.format(AMZ_DATE_FORMAT);
+		headers.put("x-amz-date", amzDate); //$NON-NLS-1$
+
+		// add the 'host' header
+		URL endpointUrl = httpURLConnection.getURL();
+		int port = endpointUrl.getPort();
+		String hostHeader = (port > -1)
+				? endpointUrl.getHost().concat(":" + port) //$NON-NLS-1$
+				: endpointUrl.getHost();
+		headers.put("Host", hostHeader); //$NON-NLS-1$
+
+		// construct the canonicalized request
+		String canonicalizedHeaderNames = getCanonicalizeHeaderNames(headers);
+		String canonicalizedHeaders = getCanonicalizedHeaderString(headers);
+		String canonicalizedQueryParameters = getCanonicalizedQueryString(
+				queryParameters);
+		String httpMethod = httpURLConnection.getRequestMethod();
+		String canonicalRequest = httpMethod + '\n'
+				+ getCanonicalizedResourcePath(endpointUrl) + '\n'
+				+ canonicalizedQueryParameters + '\n' + canonicalizedHeaders
+				+ '\n' + canonicalizedHeaderNames + '\n' + bodyHash;
+
+		// construct the string-to-sign
+		String scopeDate = now.format(SCOPE_DATE_FORMAT);
+		String scope = scopeDate + '/' + regionName + '/' + serviceName + '/'
+				+ TERMINATOR;
+		String stringToSign = SCHEME + '-' + ALGORITHM + '\n' + amzDate + '\n'
+				+ scope + '\n' + Hex.toHexString(hash(
+						canonicalRequest.getBytes(StandardCharsets.UTF_8)));
+
+		// compute the signing key
+		byte[] secretKey = (SCHEME + new String(awsSecretKey)).getBytes();
+		byte[] dateKey = signStringWithKey(scopeDate, secretKey);
+		byte[] regionKey = signStringWithKey(regionName, dateKey);
+		byte[] serviceKey = signStringWithKey(serviceName, regionKey);
+		byte[] signingKey = signStringWithKey(TERMINATOR, serviceKey);
+		byte[] signature = signStringWithKey(stringToSign, signingKey);
+
+		// construct the authorization header
+		String credentialsAuthorizationHeader = "Credential=" + awsAccessKey //$NON-NLS-1$
+				+ '/' + scope;
+		String signedHeadersAuthorizationHeader = "SignedHeaders=" //$NON-NLS-1$
+				+ canonicalizedHeaderNames;
+		String signatureAuthorizationHeader = "Signature=" //$NON-NLS-1$
+				+ Hex.toHexString(signature);
+		String authorizationHeader = SCHEME + '-' + ALGORITHM + ' '
+				+ credentialsAuthorizationHeader + ", " //$NON-NLS-1$
+				+ signedHeadersAuthorizationHeader + ", " //$NON-NLS-1$
+				+ signatureAuthorizationHeader;
+
+		// Copy back the updated request headers
+		headers.forEach(httpURLConnection::setRequestProperty);
+
+		// Add the 'authorization' header
+		httpURLConnection.setRequestProperty(HttpSupport.HDR_AUTHORIZATION,
+				authorizationHeader);
+	}
+
+	/**
+	 * Calculates the hex-encoded SHA-256 hash of the provided byte array.
+	 *
+	 * @param data
+	 *            Byte array to hash
+	 *
+	 * @return Hex-encoded SHA-256 hash of the provided byte array.
+	 */
+	public static String calculateBodyHash(final byte[] data) {
+		return (data == null || data.length < 1) ? EMPTY_BODY_SHA256
+				: Hex.toHexString(hash(data));
+	}
+
+	/**
+	 * Construct a string listing all request headers in sorted case-insensitive
+	 * order, separated by a ';'.
+	 *
+	 * @param headers
+	 *            Map containing all request headers.
+	 *
+	 * @return String that lists all request headers in sorted case-insensitive
+	 *         order, separated by a ';'.
+	 */
+	private static String getCanonicalizeHeaderNames(
+			Map<String, String> headers) {
+		return headers.keySet().stream().map(String::toLowerCase).sorted()
+				.collect(Collectors.joining(";")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Constructs the canonical header string for a request.
+	 *
+	 * @param headers
+	 *            Map containing all request headers.
+	 *
+	 * @return The canonical headers with values for the request.
+	 */
+	private static String getCanonicalizedHeaderString(
+			Map<String, String> headers) {
+		if (headers == null || headers.isEmpty()) {
+			return ""; //$NON-NLS-1$
+		}
+		StringBuilder sb = new StringBuilder();
+		headers.keySet().stream().sorted(String.CASE_INSENSITIVE_ORDER)
+				.forEach(key -> {
+					String header = key.toLowerCase().replaceAll("\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
+					String value = headers.get(key).replaceAll("\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
+					sb.append(header).append(':').append(value).append('\n');
+				});
+		return sb.toString();
+	}
+
+	/**
+	 * Constructs the canonicalized resource path for an AWS service endpoint.
+	 *
+	 * @param url
+	 *            The AWS service endpoint URL, including the path to any
+	 *            resource.
+	 *
+	 * @return The canonicalized resource path for the AWS service endpoint.
+	 */
+	private static String getCanonicalizedResourcePath(URL url) {
+		if (url == null) {
+			return "/"; //$NON-NLS-1$
+		}
+		String path = url.getPath();
+		if (path == null || path.isEmpty()) {
+			return "/"; //$NON-NLS-1$
+		}
+		String encodedPath = HttpSupport.urlEncode(path, true);
+		if (encodedPath.startsWith("/")) { //$NON-NLS-1$
+			return encodedPath;
+		}
+		return "/".concat(encodedPath); //$NON-NLS-1$
+	}
+
+	/**
+	 * Constructs the canonicalized query string for a request.
+	 *
+	 * @param queryParameters
+	 *            The query parameters in the request.
+	 *
+	 * @return The canonicalized query string for the request.
+	 */
+	public static String getCanonicalizedQueryString(
+			Map<String, String> queryParameters) {
+		if (queryParameters == null || queryParameters.isEmpty()) {
+			return ""; //$NON-NLS-1$
+		}
+		return queryParameters
+				.keySet().stream().sorted().map(
+						key -> HttpSupport.urlEncode(key, false) + '='
+								+ HttpSupport.urlEncode(
+										queryParameters.get(key), false))
+				.collect(Collectors.joining("&")); //$NON-NLS-1$
+	}
+
+	/**
+	 * Hashes the provided byte array using the SHA-256 algorithm.
+	 *
+	 * @param data
+	 *            The byte array to hash.
+	 *
+	 * @return Hashed string contents of the provided byte array.
+	 */
+	public static byte[] hash(byte[] data) {
+		try {
+			MessageDigest md = MessageDigest.getInstance("SHA-256"); //$NON-NLS-1$
+			md.update(data);
+			return md.digest();
+		} catch (Exception e) {
+			throw new RuntimeException(
+					JGitText.get().couldNotHashByteArrayWithSha256, e);
+		}
+	}
+
+	/**
+	 * Signs the provided string data using the specified key.
+	 *
+	 * @param stringToSign
+	 *            The string data to sign.
+	 * @param key
+	 *            The key material of the secret key.
+	 *
+	 * @return Signed string data.
+	 */
+	private static byte[] signStringWithKey(String stringToSign, byte[] key) {
+		try {
+			byte[] data = stringToSign.getBytes(StandardCharsets.UTF_8);
+			Mac mac = Mac.getInstance(MAC_ALGORITHM);
+			mac.init(new SecretKeySpec(key, MAC_ALGORITHM));
+			return mac.doFinal(data);
+		} catch (Exception e) {
+			throw new RuntimeException(JGitText.get().couldNotSignStringWithKey,
+					e);
+		}
+	}
+
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackConnection.java
index 3826bf7..09c559d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackConnection.java
@@ -210,9 +210,7 @@ private boolean readAdvertisedRefsImpl() throws IOException {
 				try {
 					line = readLine();
 				} catch (EOFException e) {
-					TransportException noRepo = noRepository();
-					noRepo.initCause(e);
-					throw noRepo;
+					throw noRepository(e);
 				}
 				if (line != null && VERSION_1.equals(line)) {
 					// Same as V0, except for this extra line. We shouldn't get
@@ -567,11 +565,14 @@ static void updateWithSymRefs(Map<String, Ref> refMap, Map<String, String> symRe
 	 *
 	 * Subclasses may override this method to provide better diagnostics.
 	 *
+	 * @param cause
+	 *            root cause exception
 	 * @return a TransportException saying a repository cannot be found and
 	 *         possibly why.
 	 */
-	protected TransportException noRepository() {
-		return new NoRemoteRepositoryException(uri, JGitText.get().notFound);
+	protected TransportException noRepository(Throwable cause) {
+		return new NoRemoteRepositoryException(uri, JGitText.get().notFound,
+				cause);
 	}
 
 	/**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
index eb1d2ac..b87a85d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackPushConnection.java
@@ -139,7 +139,7 @@ public void push(final ProgressMonitor monitor,
 
 	/** {@inheritDoc} */
 	@Override
-	protected TransportException noRepository() {
+	protected TransportException noRepository(Throwable cause) {
 		// Sadly we cannot tell the "invalid URI" case from "push not allowed".
 		// Opening a fetch connection can help us tell the difference, as any
 		// useful repository is going to support fetch if it also would allow
@@ -147,18 +147,18 @@ protected TransportException noRepository() {
 		// URI is wrong. Otherwise we can correctly state push isn't allowed
 		// as the fetch connection opened successfully.
 		//
+		TransportException te;
 		try {
 			transport.openFetch().close();
-		} catch (NotSupportedException e) {
-			// Fall through.
+			te = new TransportException(uri, JGitText.get().pushNotPermitted);
 		} catch (NoRemoteRepositoryException e) {
 			// Fetch concluded the repository doesn't exist.
-			//
-			return e;
-		} catch (TransportException e) {
-			// Fall through.
+			te = e;
+		} catch (NotSupportedException | TransportException e) {
+			te = new TransportException(uri, JGitText.get().pushNotPermitted, e);
 		}
-		return new TransportException(uri, JGitText.get().pushNotPermitted);
+		te.addSuppressed(cause);
+		return te;
 	}
 
 	/**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java
index 34bad6e..507795a 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchProcess.java
@@ -47,6 +47,7 @@
 import org.eclipse.jgit.lib.Ref;
 import org.eclipse.jgit.lib.RefDatabase;
 import org.eclipse.jgit.revwalk.ObjectWalk;
+import org.eclipse.jgit.revwalk.RevObject;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.util.StringUtils;
 
@@ -205,8 +206,13 @@ else if (tagopt == TagOpt.FETCH_TAGS)
 
 		BatchRefUpdate batch = transport.local.getRefDatabase()
 				.newBatchUpdate()
-				.setAllowNonFastForwards(true)
-				.setRefLogMessage("fetch", true); //$NON-NLS-1$
+				.setAllowNonFastForwards(true);
+
+		// Generate reflog only when fetching updates and not at the first clone
+		if (initialBranch == null) {
+			batch.setRefLogMessage("fetch", true); //$NON-NLS-1$
+		}
+
 		try (RevWalk walk = new RevWalk(transport.local)) {
 			walk.setRetainBody(false);
 			if (monitor instanceof BatchingProgressMonitor) {
@@ -373,11 +379,19 @@ private void updateFETCH_HEAD(FetchResult result) throws IOException {
 	private boolean askForIsComplete() throws TransportException {
 		try {
 			try (ObjectWalk ow = new ObjectWalk(transport.local)) {
-				for (ObjectId want : askFor.keySet())
-					ow.markStart(ow.parseAny(want));
-				for (Ref ref : localRefs().values())
-					ow.markUninteresting(ow.parseAny(ref.getObjectId()));
-				ow.checkConnectivity();
+				boolean hasCommitObject = false;
+				for (ObjectId want : askFor.keySet()) {
+					RevObject obj = ow.parseAny(want);
+					ow.markStart(obj);
+					hasCommitObject |= obj.getType() == Constants.OBJ_COMMIT;
+				}
+				// Checking connectivity makes sense on commits only
+				if (hasCommitObject) {
+					for (Ref ref : localRefs().values()) {
+						ow.markUninteresting(ow.parseAny(ref.getObjectId()));
+					}
+					ow.checkConnectivity();
+				}
 			}
 			return true;
 		} catch (MissingObjectException e) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
index ea63933..50fb9d2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/FetchV2Request.java
@@ -36,6 +36,8 @@ public final class FetchV2Request extends FetchRequest {
 
 	private final boolean doneReceived;
 
+	private final boolean waitForDone;
+
 	@NonNull
 	private final List<String> serverOptions;
 
@@ -50,7 +52,8 @@ public final class FetchV2Request extends FetchRequest {
 			@NonNull Set<ObjectId> clientShallowCommits, int deepenSince,
 			@NonNull List<String> deepenNotRefs, int depth,
 			@NonNull FilterSpec filterSpec,
-			boolean doneReceived, @NonNull Set<String> clientCapabilities,
+			boolean doneReceived, boolean waitForDone,
+			@NonNull Set<String> clientCapabilities,
 			@Nullable String agent, @NonNull List<String> serverOptions,
 			boolean sidebandAll, @NonNull List<String> packfileUriProtocols) {
 		super(wantIds, depth, clientShallowCommits, filterSpec,
@@ -59,6 +62,7 @@ public final class FetchV2Request extends FetchRequest {
 		this.peerHas = requireNonNull(peerHas);
 		this.wantedRefs = requireNonNull(wantedRefs);
 		this.doneReceived = doneReceived;
+		this.waitForDone = waitForDone;
 		this.serverOptions = requireNonNull(serverOptions);
 		this.sidebandAll = sidebandAll;
 		this.packfileUriProtocols = packfileUriProtocols;
@@ -90,7 +94,14 @@ boolean wasDoneReceived() {
 	}
 
 	/**
-	 * Options received in server-option lines. The caller can choose to act on
+	 * @return true if the request had a "wait-for-done" line
+	 */
+	boolean wasWaitForDoneReceived() {
+		return waitForDone;
+	}
+
+	/**
+	 * Options received in server-option lines. The caller can choose to	 act on
 	 * these in an application-specific way
 	 *
 	 * @return Immutable list of server options received in the request
@@ -141,6 +152,8 @@ static final class Builder {
 
 		boolean doneReceived;
 
+		boolean waitForDone;
+
 		@Nullable
 		String agent;
 
@@ -280,6 +293,16 @@ Builder setDoneReceived() {
 		}
 
 		/**
+		 * Mark that the "wait-for-done" line has been received.
+		 *
+		 * @return this builder
+		 */
+		Builder setWaitForDone() {
+			waitForDone = true;
+			return this;
+		}
+
+		/**
 		 * Value of an agent line received after the command and before the
 		 * arguments. E.g. "agent=a.b.c/1.0" should set "a.b.c/1.0".
 		 *
@@ -328,7 +351,7 @@ Builder addPackfileUriProtocol(@NonNull String value) {
 		FetchV2Request build() {
 			return new FetchV2Request(peerHas, wantedRefs, wantIds,
 					clientShallowCommits, deepenSince, deepenNotRefs,
-					depth, filterSpec, doneReceived, clientCapabilities,
+					depth, filterSpec, doneReceived, waitForDone, clientCapabilities,
 					agent, Collections.unmodifiableList(serverOptions),
 					sidebandAll,
 					Collections.unmodifiableList(packfileUriProtocols));
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
index 36fce7a..aaa9308 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/GitProtocolConstants.java
@@ -149,6 +149,13 @@ public final class GitProtocolConstants {
 	public static final String OPTION_SIDEBAND_ALL = "sideband-all"; //$NON-NLS-1$
 
 	/**
+	 * The server waits for client to send "done" before sending any packs back.
+	 *
+	 * @since 5.13
+	 */
+	public static final String OPTION_WAIT_FOR_DONE = "wait-for-done"; //$NON-NLS-1$
+
+	/**
 	 * The client supports atomic pushes. If this option is used, the server
 	 * will update all refs within one atomic transaction.
 	 *
@@ -248,6 +255,13 @@ public final class GitProtocolConstants {
 	public static final String COMMAND_FETCH = "fetch"; //$NON-NLS-1$
 
 	/**
+	 * The server supports the object-info capability.
+	 *
+	 * @since 5.13
+	 */
+	public static final String COMMAND_OBJECT_INFO = "object-info"; //$NON-NLS-1$
+
+	/**
 	 * HTTP header to set by clients to request a specific git protocol version
 	 * in the HTTP transport.
 	 *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ObjectInfoRequest.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ObjectInfoRequest.java
new file mode 100644
index 0000000..86a2716
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ObjectInfoRequest.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2021, 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
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.transport;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.jgit.lib.ObjectId;
+
+/**
+ * object-info request.
+ *
+ * <p>
+ * This is the parsed request for an object-info call, used as input to
+ * {@link ProtocolV2Hook}.
+ *
+ * @see <a href=
+ *      "https://www.kernel.org/pub/software/scm/git/docs/technical/protocol-v2.html#_object_info">object-info
+ *      documentation</a>
+ *
+ * @since 5.13
+ */
+public final class ObjectInfoRequest {
+	private final List<ObjectId> objectIDs;
+
+	private ObjectInfoRequest(List<ObjectId> objectIDs) {
+		this.objectIDs = objectIDs;
+	}
+
+	/** @return object IDs that the client requested. */
+	public List<ObjectId> getObjectIDs() {
+		return this.objectIDs;
+	}
+
+	/** @return A builder of {@link ObjectInfoRequest}. */
+	public static Builder builder() {
+		return new Builder();
+	}
+
+	/** A builder for {@link ObjectInfoRequest}. */
+	public static final class Builder {
+		private List<ObjectId> objectIDs = Collections.emptyList();
+
+		private Builder() {
+		}
+
+		/**
+		 * @param value
+		 * @return the Builder
+		 */
+		public Builder setObjectIDs(List<ObjectId> value) {
+			objectIDs = value;
+			return this;
+		}
+
+		/** @return ObjectInfoRequest */
+		public ObjectInfoRequest build() {
+			return new ObjectInfoRequest(
+					Collections.unmodifiableList(objectIDs));
+		}
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Hook.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Hook.java
index bfa7490..d7626df 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Hook.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Hook.java
@@ -55,4 +55,16 @@ default void onFetch(FetchV2Request req)
 			throws ServiceMayNotContinueException {
 		// Do nothing by default
 	}
+
+	/**
+	 * @param req
+	 *            the object-info request
+	 * @throws ServiceMayNotContinueException
+	 *             abort; the message will be sent to the user
+	 * @since 5.13
+	 */
+	default void onObjectInfo(ObjectInfoRequest req)
+			throws ServiceMayNotContinueException {
+		// Do nothing by default
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2HookChain.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2HookChain.java
index 4cf8db6..7b3a4ce 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2HookChain.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2HookChain.java
@@ -71,6 +71,14 @@ public void onFetch(FetchV2Request req)
 		}
 	}
 
+	@Override
+	public void onObjectInfo(ObjectInfoRequest req)
+			throws ServiceMayNotContinueException {
+		for (ProtocolV2Hook hook : hooks) {
+			hook.onObjectInfo(req);
+		}
+	}
+
 	private ProtocolV2HookChain(List<? extends ProtocolV2Hook> hooks) {
 		this.hooks = Collections.unmodifiableList(hooks);
 	}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
index faccc25..6cec4b9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ProtocolV2Parser.java
@@ -19,6 +19,7 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDEBAND_ALL;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WANT_REF;
 
 import java.io.IOException;
@@ -27,6 +28,7 @@
 import java.util.List;
 import java.util.function.Consumer;
 
+import org.eclipse.jgit.errors.InvalidObjectIdException;
 import org.eclipse.jgit.errors.PackProtocolException;
 import org.eclipse.jgit.internal.JGitText;
 import org.eclipse.jgit.lib.ObjectId;
@@ -123,6 +125,8 @@ FetchV2Request parseFetchRequest(PacketLineIn pckIn)
 				reqBuilder.addPeerHas(ObjectId.fromString(line2.substring(5)));
 			} else if (line2.equals("done")) { //$NON-NLS-1$
 				reqBuilder.setDoneReceived();
+			} else if (line2.equals(OPTION_WAIT_FOR_DONE)) {
+				reqBuilder.setWaitForDone();
 			} else if (line2.equals(OPTION_THIN_PACK)) {
 				reqBuilder.addClientCapability(OPTION_THIN_PACK);
 			} else if (line2.equals(OPTION_NO_PROGRESS)) {
@@ -245,4 +249,38 @@ LsRefsV2Request parseLsRefsRequest(PacketLineIn pckIn)
 		return builder.setRefPrefixes(prefixes).build();
 	}
 
+	ObjectInfoRequest parseObjectInfoRequest(PacketLineIn pckIn)
+			throws PackProtocolException, IOException {
+		ObjectInfoRequest.Builder builder = ObjectInfoRequest.builder();
+		List<ObjectId> objectIDs = new ArrayList<>();
+
+		String line = pckIn.readString();
+
+		if (PacketLineIn.isEnd(line)) {
+			return builder.build();
+		}
+
+		if (!line.equals("size")) { //$NON-NLS-1$
+			throw new PackProtocolException(MessageFormat
+					.format(JGitText.get().unexpectedPacketLine, line));
+		}
+
+		for (String line2 : pckIn.readStrings()) {
+			if (!line2.startsWith("oid ")) { //$NON-NLS-1$
+				throw new PackProtocolException(MessageFormat
+						.format(JGitText.get().unexpectedPacketLine, line2));
+			}
+
+			String oidStr = line2.substring("oid ".length()); //$NON-NLS-1$
+
+			try {
+				objectIDs.add(ObjectId.fromString(oidStr));
+			} catch (InvalidObjectIdException e) {
+				throw new PackProtocolException(MessageFormat
+						.format(JGitText.get().invalidObject, oidStr), e);
+			}
+		}
+
+		return builder.setObjectIDs(objectIDs).build();
+	}
 }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
index 79f60c3..58f8895 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/ReceivePack.java
@@ -29,6 +29,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.UncheckedIOException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -37,6 +38,8 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import org.eclipse.jgit.annotations.Nullable;
 import org.eclipse.jgit.errors.InvalidObjectIdException;
@@ -441,7 +444,7 @@ public Map<String, Ref> getAdvertisedRefs() {
 	 */
 	public void setAdvertisedRefs(Map<String, Ref> allRefs,
 			Set<ObjectId> additionalHaves) {
-		refs = allRefs != null ? allRefs : db.getAllRefs();
+		refs = allRefs != null ? allRefs : getAllRefs();
 		refs = refFilter.filter(refs);
 		advertisedHaves.clear();
 
@@ -1296,6 +1299,21 @@ public ReceivedPackStatistics getReceivedPackStatistics() {
 	}
 
 	/**
+	 * Extract the full list of refs from the ref-db.
+	 *
+	 * @return Map of all refname/ref
+	 */
+	private Map<String, Ref> getAllRefs() {
+		try {
+			return db.getRefDatabase().getRefs().stream()
+					.collect(Collectors.toMap(Ref::getName,
+							Function.identity()));
+		} catch (IOException e) {
+			throw new UncheckedIOException(e);
+		}
+	}
+
+	/**
 	 * Receive a list of commands from the input.
 	 *
 	 * @throws java.io.IOException
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
index 83ffd41..02be434 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java
@@ -120,7 +120,11 @@ static ProtocolVersion parse(@Nullable String name) {
 	private final boolean allowReachableSha1InWant;
 	private final boolean allowFilter;
 	private final boolean allowSidebandAll;
+
 	private final boolean advertiseSidebandAll;
+	private final boolean advertiseWaitForDone;
+	private final boolean advertiseObjectInfo;
+
 	final @Nullable ProtocolVersion protocolVersion;
 	final String[] hideRefs;
 
@@ -206,6 +210,10 @@ public TransferConfig(Config rc) {
 				"uploadpack", "allowsidebandall", false);
 		advertiseSidebandAll = rc.getBoolean("uploadpack",
 				"advertisesidebandall", false);
+		advertiseWaitForDone = rc.getBoolean("uploadpack",
+				"advertisewaitfordone", false);
+		advertiseObjectInfo = rc.getBoolean("uploadpack",
+				"advertiseobjectinfo", false);
 	}
 
 	/**
@@ -305,6 +313,22 @@ public boolean isAdvertiseSidebandAll() {
 	}
 
 	/**
+	 * @return true to advertise wait-for-done all to the clients
+	 * @since 5.13
+	 */
+	public boolean isAdvertiseWaitForDone() {
+		return advertiseWaitForDone;
+	}
+
+	/**
+	 * @return true to advertise object-info to all clients
+	 * @since 5.13
+	 */
+	public boolean isAdvertiseObjectInfo() {
+		return advertiseObjectInfo;
+	}
+
+	/**
 	 * Get {@link org.eclipse.jgit.transport.RefFilter} respecting configured
 	 * hidden refs.
 	 *
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
index 63deff2..160e2e6 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java
@@ -17,6 +17,7 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.CAPABILITY_SERVER_OPTION;
 import static org.eclipse.jgit.transport.GitProtocolConstants.COMMAND_FETCH;
 import static org.eclipse.jgit.transport.GitProtocolConstants.COMMAND_LS_REFS;
+import static org.eclipse.jgit.transport.GitProtocolConstants.COMMAND_OBJECT_INFO;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_AGENT;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_ALLOW_REACHABLE_SHA1_IN_WANT;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_ALLOW_TIP_SHA1_IN_WANT;
@@ -33,10 +34,12 @@
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_SIDE_BAND_64K;
 import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_THIN_PACK;
+import static org.eclipse.jgit.transport.GitProtocolConstants.OPTION_WAIT_FOR_DONE;
 import static org.eclipse.jgit.transport.GitProtocolConstants.VERSION_2_REQUEST;
 import static org.eclipse.jgit.util.RefMap.toRefMap;
 
 import java.io.ByteArrayOutputStream;
+import java.io.Closeable;
 import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -102,7 +105,7 @@
 /**
  * Implements the server side of a fetch connection, transmitting objects.
  */
-public class UploadPack {
+public class UploadPack implements Closeable {
 	/** Policy the server uses to validate client requests */
 	public enum RequestPolicy {
 		/** Client may only ask for objects the server advertised a reference for. */
@@ -728,6 +731,17 @@ private boolean useProtocolV2() {
 				&& clientRequestedV2;
 	}
 
+	@Override
+	public void close() {
+		if (timer != null) {
+			try {
+				timer.terminate();
+			} finally {
+				timer = null;
+			}
+		}
+	}
+
 	/**
 	 * Execute the upload task on the socket.
 	 *
@@ -775,6 +789,8 @@ public void upload(InputStream input, OutputStream output,
 				throw new UploadPackInternalServerErrorException(err);
 			}
 			throw err;
+		} finally {
+			close();
 		}
 	}
 
@@ -784,6 +800,10 @@ public void upload(InputStream input, OutputStream output,
 	 * <p>
 	 * If the client passed extra parameters (e.g., "version=2") through a side
 	 * channel, the caller must call setExtraParameters first to supply them.
+	 * Callers of this method should call {@link #close()} to terminate the
+	 * internal interrupt timer thread. If the caller fails to terminate the
+	 * thread, it will (eventually) terminate itself when the InterruptTimer
+	 * instance is garbage collected.
 	 *
 	 * @param input
 	 *            raw input to read client commands from. Caller must ensure the
@@ -840,13 +860,6 @@ public void uploadWithExceptionPropagation(InputStream input,
 		} finally {
 			msgOut = NullOutputStream.INSTANCE;
 			walk.close();
-			if (timer != null) {
-				try {
-					timer.terminate();
-				} finally {
-					timer = null;
-				}
-			}
 		}
 	}
 
@@ -1193,9 +1206,10 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
 			walk.assumeShallow(req.getClientShallowCommits());
 
 		if (req.wasDoneReceived()) {
-			processHaveLines(req.getPeerHas(), ObjectId.zeroId(),
+			processHaveLines(
+					req.getPeerHas(), ObjectId.zeroId(),
 					new PacketLineOut(NullOutputStream.INSTANCE, false),
-					accumulator);
+					accumulator, req.wasWaitForDoneReceived() ? Option.WAIT_FOR_DONE : Option.NONE);
 		} else {
 			pckOut.writeString(
 					GitProtocolConstants.SECTION_ACKNOWLEDGMENTS + '\n');
@@ -1206,8 +1220,8 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
 			}
 			processHaveLines(req.getPeerHas(), ObjectId.zeroId(),
 					new PacketLineOut(NullOutputStream.INSTANCE, false),
-					accumulator);
-			if (okToGiveUp()) {
+					accumulator, Option.NONE);
+			if (!req.wasWaitForDoneReceived() && okToGiveUp()) {
 				pckOut.writeString("ready\n"); //$NON-NLS-1$
 			} else if (commonBase.isEmpty()) {
 				pckOut.writeString("NAK\n"); //$NON-NLS-1$
@@ -1215,7 +1229,7 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
 			sectionSent = true;
 		}
 
-		if (req.wasDoneReceived() || okToGiveUp()) {
+		if (req.wasDoneReceived() || (!req.wasWaitForDoneReceived() && okToGiveUp())) {
 			if (mayHaveShallow) {
 				if (sectionSent)
 					pckOut.writeDelim();
@@ -1268,6 +1282,32 @@ private void fetchV2(PacketLineOut pckOut) throws IOException {
 		}
 	}
 
+	private void objectInfo(PacketLineOut pckOut) throws IOException {
+		ProtocolV2Parser parser = new ProtocolV2Parser(transferConfig);
+		ObjectInfoRequest req = parser.parseObjectInfoRequest(pckIn);
+
+		protocolV2Hook.onObjectInfo(req);
+
+		ObjectReader or = getRepository().newObjectReader();
+
+		// Size is the only attribute currently supported.
+		pckOut.writeString("size"); //$NON-NLS-1$
+
+		for (ObjectId oid : req.getObjectIDs()) {
+			long size;
+			try {
+				size = or.getObjectSize(oid, ObjectReader.OBJ_ANY);
+			} catch (MissingObjectException e) {
+				throw new PackProtocolException(MessageFormat
+						.format(JGitText.get().missingObject, oid.name()), e);
+			}
+
+			pckOut.writeString(oid.getName() + " " + size); //$NON-NLS-1$
+		}
+
+		pckOut.end();
+	}
+
 	/*
 	 * Returns true if this is the last command and we should tear down the
 	 * connection.
@@ -1294,6 +1334,10 @@ private boolean serveOneCommandV2(PacketLineOut pckOut) throws IOException {
 			fetchV2(pckOut);
 			return false;
 		}
+		if (command.equals("command=" + COMMAND_OBJECT_INFO)) { //$NON-NLS-1$
+			objectInfo(pckOut);
+			return false;
+		}
 		throw new PackProtocolException(MessageFormat
 				.format(JGitText.get().unknownTransportCommand, command));
 	}
@@ -1313,6 +1357,9 @@ private List<String> getV2CapabilityAdvertisement() {
 						? OPTION_SIDEBAND_ALL + ' '
 						: "")
 				+ (cachedPackUriProvider != null ? "packfile-uris " : "")
+				+ (transferConfig.isAdvertiseWaitForDone()
+						? OPTION_WAIT_FOR_DONE + ' '
+						: "")
 				+ OPTION_SHALLOW);
 		caps.add(CAPABILITY_SERVER_OPTION);
 		return caps;
@@ -1657,7 +1704,7 @@ private boolean negotiate(FetchRequest req,
 			}
 
 			if (PacketLineIn.isEnd(line)) {
-				last = processHaveLines(peerHas, last, pckOut, accumulator);
+				last = processHaveLines(peerHas, last, pckOut, accumulator, Option.NONE);
 				if (commonBase.isEmpty() || multiAck != MultiAck.OFF)
 					pckOut.writeString("NAK\n"); //$NON-NLS-1$
 				if (noDone && sentReady) {
@@ -1672,7 +1719,7 @@ private boolean negotiate(FetchRequest req,
 				peerHas.add(ObjectId.fromString(line.substring(5)));
 				accumulator.haves++;
 			} else if (line.equals("done")) { //$NON-NLS-1$
-				last = processHaveLines(peerHas, last, pckOut, accumulator);
+				last = processHaveLines(peerHas, last, pckOut, accumulator, Option.NONE);
 
 				if (commonBase.isEmpty())
 					pckOut.writeString("NAK\n"); //$NON-NLS-1$
@@ -1688,8 +1735,14 @@ else if (multiAck != MultiAck.OFF)
 		}
 	}
 
+	private enum Option {
+		WAIT_FOR_DONE,
+		NONE;
+	}
+
 	private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
-			PacketLineOut out, PackStatistics.Accumulator accumulator)
+			PacketLineOut out, PackStatistics.Accumulator accumulator,
+			Option option)
 			throws IOException {
 		preUploadHook.onBeginNegotiateRound(this, wantIds, peerHas.size());
 		if (wantAll.isEmpty() && !wantIds.isEmpty())
@@ -1755,6 +1808,18 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
 		// create a pack at this point, let the client know so it stops
 		// telling us about its history.
 		//
+		if (option != Option.WAIT_FOR_DONE) {
+			sentReady = shouldGiveUp(peerHas, out, missCnt);
+		}
+
+		preUploadHook.onEndNegotiateRound(this, wantAll, haveCnt, missCnt, sentReady);
+		peerHas.clear();
+		return last;
+	}
+
+	private boolean shouldGiveUp(List<ObjectId> peerHas, PacketLineOut out, int missCnt)
+			throws IOException {
+		boolean sentReady = false;
 		boolean didOkToGiveUp = false;
 		if (0 < missCnt) {
 			for (int i = peerHas.size() - 1; i >= 0; i--) {
@@ -1766,10 +1831,12 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
 						case OFF:
 							break;
 						case CONTINUE:
-							out.writeString("ACK " + id.name() + " continue\n"); //$NON-NLS-1$ //$NON-NLS-2$
+							out.writeString(
+									"ACK " + id.name() + " continue\n"); //$NON-NLS-1$ //$NON-NLS-2$
 							break;
 						case DETAILED:
-							out.writeString("ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$
+							out.writeString(
+									"ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$
 							sentReady = true;
 							break;
 						}
@@ -1779,15 +1846,14 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last,
 			}
 		}
 
-		if (multiAck == MultiAck.DETAILED && !didOkToGiveUp && okToGiveUp()) {
+		if (multiAck == MultiAck.DETAILED && !didOkToGiveUp
+				&& okToGiveUp()) {
 			ObjectId id = peerHas.get(peerHas.size() - 1);
 			out.writeString("ACK " + id.name() + " ready\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			sentReady = true;
 		}
 
-		preUploadHook.onEndNegotiateRound(this, wantAll, haveCnt, missCnt, sentReady);
-		peerHas.clear();
-		return last;
+		return sentReady;
 	}
 
 	private void parseWants(PackStatistics.Accumulator accumulator) throws IOException {
@@ -1926,12 +1992,16 @@ private static void checkNotAdvertisedWants(UploadPack up,
 			throws IOException {
 
 		ObjectReader reader = up.getRevWalk().getObjectReader();
+		Set<ObjectId> directlyVisibleObjects = refIdSet(visibleRefs);
+		List<ObjectId> nonTipWants = notAdvertisedWants.stream()
+				.filter(not(directlyVisibleObjects::contains))
+				.collect(Collectors.toList());
 
 		try (RevWalk walk = new RevWalk(reader)) {
 			walk.setRetainBody(false);
 			// Missing "wants" throw exception here
 			List<RevObject> wantsAsObjs = objectIdsToRevObjects(walk,
-					notAdvertisedWants);
+					nonTipWants);
 			List<RevCommit> wantsAsCommits = wantsAsObjs.stream()
 					.filter(obj -> obj instanceof RevCommit)
 					.map(obj -> (RevCommit) obj)
@@ -1991,6 +2061,10 @@ private static void checkNotAdvertisedWants(UploadPack up,
 		}
 	}
 
+	private static <T> Predicate<T> not(Predicate<T> t) {
+	    return t.negate();
+	}
+
 	static Stream<Ref> importantRefsFirst(
 			Collection<Ref> visibleRefs) {
 		Predicate<Ref> startsWithRefsHeads = ref -> ref.getName()
@@ -2341,6 +2415,7 @@ else if (ref.getName().startsWith(Constants.R_HEADS))
 							GitProtocolConstants.SECTION_PACKFILE + '\n');
 				}
 			}
+			pw.enableSearchForReuseTimeout();
 			pw.writePack(pm, NullProgressMonitor.INSTANCE, packOut);
 
 			if (msgOut != NullOutputStream.INSTANCE) {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathSuffixFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathSuffixFilter.java
index 0c74bfd..3816d5e 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathSuffixFilter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/PathSuffixFilter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2009, Google Inc. and others
+ * Copyright (C) 2009, 2021 Google Inc. and others
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Distribution License v. 1.0 which is available at
@@ -73,6 +73,15 @@ public boolean include(TreeWalk walker) throws MissingObjectException,
 
 	}
 
+	@Override
+	public int matchFilter(TreeWalk walker) throws MissingObjectException,
+			IncorrectObjectTypeException, IOException {
+		if (walker.isSubtree()) {
+			return -1;
+		}
+		return super.matchFilter(walker);
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public boolean shouldBeRecursive() {
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 bf8a46b..e0de9b2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -48,7 +48,6 @@
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -263,8 +262,9 @@ public static final class FileStoreAttributes {
 		 *
 		 * @see java.util.concurrent.Executors#newCachedThreadPool()
 		 */
-		private static final Executor FUTURE_RUNNER = new ThreadPoolExecutor(0,
-				5, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(),
+		private static final ExecutorService FUTURE_RUNNER = new ThreadPoolExecutor(
+				0, 5, 30L, TimeUnit.SECONDS,
+				new LinkedBlockingQueue<Runnable>(),
 				runnable -> {
 					Thread t = new Thread(runnable,
 							"JGit-FileStoreAttributeReader-" //$NON-NLS-1$
@@ -286,8 +286,9 @@ public static final class FileStoreAttributes {
 		 * small keep-alive time to avoid delays on shut-down.
 		 * </p>
 		 */
-		private static final Executor SAVE_RUNNER = new ThreadPoolExecutor(0, 1,
-				1L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(),
+		private static final ExecutorService SAVE_RUNNER = new ThreadPoolExecutor(
+				0, 1, 1L, TimeUnit.MILLISECONDS,
+				new LinkedBlockingQueue<Runnable>(),
 				runnable -> {
 					Thread t = new Thread(runnable,
 							"JGit-FileStoreAttributeWriter-" //$NON-NLS-1$
@@ -297,6 +298,23 @@ public static final class FileStoreAttributes {
 					return t;
 				});
 
+		static {
+			// Shut down the SAVE_RUNNER on System.exit()
+			try {
+				Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+					try {
+						SAVE_RUNNER.shutdownNow();
+						SAVE_RUNNER.awaitTermination(100,
+								TimeUnit.MILLISECONDS);
+					} catch (Exception e) {
+						// Ignore; we're shutting down
+					}
+				}));
+			} catch (IllegalStateException e) {
+				// ignore - may fail if shutdown is already in progress
+			}
+		}
+
 		/**
 		 * Whether FileStore attributes should be determined asynchronously
 		 *
@@ -453,11 +471,13 @@ private static FileStoreAttributes getFileStoreAttributes(Path dir) {
 					return null;
 				}
 				// fall through and return fallback
-			} catch (IOException | InterruptedException
-					| ExecutionException | CancellationException e) {
+			} catch (IOException | ExecutionException | CancellationException e) {
 				LOG.error(e.getMessage(), e);
 			} catch (TimeoutException | SecurityException e) {
 				// use fallback
+			} catch (InterruptedException e) {
+				LOG.error(e.getMessage(), e);
+				Thread.currentThread().interrupt();
 			}
 			LOG.debug("{}: use fallback timestamp resolution for directory {}", //$NON-NLS-1$
 					Thread.currentThread(), dir);
@@ -475,6 +495,7 @@ private static Duration measureMinimalRacyInterval(Path dir) {
 			Path probe = dir.resolve(".probe-" + UUID.randomUUID()); //$NON-NLS-1$
 			Instant end = Instant.now().plusSeconds(3);
 			try {
+				probe.toFile().deleteOnExit();
 				Files.createFile(probe);
 				do {
 					n++;
@@ -529,7 +550,7 @@ private static void write(Path p, String body) throws IOException {
 		}
 
 		private static String read(Path p) throws IOException {
-			final byte[] body = IO.readFully(p.toFile());
+			byte[] body = IO.readFully(p.toFile());
 			return new String(body, 0, body.length, UTF_8);
 		}
 
@@ -541,6 +562,7 @@ private static Optional<Duration> measureFsTimestampResolution(
 			}
 			Path probe = dir.resolve(".probe-" + UUID.randomUUID()); //$NON-NLS-1$
 			try {
+				probe.toFile().deleteOnExit();
 				Files.createFile(probe);
 				Duration fsResolution = getFsResolution(s, dir, probe);
 				Duration clockResolution = measureClockResolution();
@@ -771,7 +793,7 @@ private static void saveToConfig(FileStore s,
 		}
 
 		private static String getConfigKey(FileStore s) {
-			final String storeKey;
+			String storeKey;
 			if (SystemReader.getInstance().isWindows()) {
 				Object attribute = null;
 				try {
@@ -1169,7 +1191,7 @@ public void delete(File f) throws IOException {
 	 *         platform does not require path name translation.
 	 */
 	public File resolve(File dir, String name) {
-		final File abspn = new File(name);
+		File abspn = new File(name);
 		if (abspn.isAbsolute())
 			return abspn;
 		return new File(dir, name);
@@ -1262,7 +1284,7 @@ protected File userHomeImpl() {
 	}
 
 	private File defaultUserHomeImpl() {
-		final String home = AccessController.doPrivileged(
+		String home = AccessController.doPrivileged(
 				(PrivilegedAction<String>) () -> System.getProperty("user.home") //$NON-NLS-1$
 		);
 		if (home == null || home.length() == 0)
@@ -1272,7 +1294,8 @@ private File defaultUserHomeImpl() {
 
 	/**
 	 * Searches the given path to see if it contains one of the given files.
-	 * Returns the first it finds. Returns null if not found or if path is null.
+	 * Returns the first it finds which is executable. Returns null if not found
+	 * or if path is null.
 	 *
 	 * @param path
 	 *            List of paths to search separated by File.pathSeparator
@@ -1282,14 +1305,15 @@ private File defaultUserHomeImpl() {
 	 * @since 3.0
 	 */
 	protected static File searchPath(String path, String... lookFor) {
-		if (path == null)
+		if (path == null) {
 			return null;
+		}
 
 		for (String p : path.split(File.pathSeparator)) {
 			for (String command : lookFor) {
-				final File file = new File(p, command);
+				File file = new File(p, command);
 				try {
-					if (file.isFile()) {
+					if (file.isFile() && file.canExecute()) {
 						return file.getAbsoluteFile();
 					}
 				} catch (SecurityException e) {
@@ -1344,7 +1368,7 @@ protected static String readPipe(File dir, String[] command,
 	protected static String readPipe(File dir, String[] command,
 			String encoding, Map<String, String> env)
 			throws CommandFailedException {
-		final boolean debug = LOG.isDebugEnabled();
+		boolean debug = LOG.isDebugEnabled();
 		try {
 			if (debug) {
 				LOG.debug("readpipe " + Arrays.asList(command) + "," //$NON-NLS-1$ //$NON-NLS-2$
@@ -1865,11 +1889,11 @@ public String relativize(String base, String other) {
 	 * @since 5.0
 	 */
 	public Entry[] list(File directory, FileModeStrategy fileModeStrategy) {
-		final File[] all = directory.listFiles();
+		File[] all = directory.listFiles();
 		if (all == null) {
 			return NO_ENTRIES;
 		}
-		final Entry[] result = new Entry[all.length];
+		Entry[] result = new Entry[all.length];
 		for (int i = 0; i < result.length; i++) {
 			result[i] = new FileEntry(all[i], this, fileModeStrategy);
 		}
@@ -1899,10 +1923,9 @@ public String relativize(String base, String other) {
 	 * @since 4.0
 	 */
 	public ProcessResult runHookIfPresent(Repository repository,
-			final String hookName,
-			String[] args) throws JGitInternalException {
-		return runHookIfPresent(repository, hookName, args, System.out, System.err,
-				null);
+			String hookName, String[] args) throws JGitInternalException {
+		return runHookIfPresent(repository, hookName, args, System.out,
+				System.err, null);
 	}
 
 	/**
@@ -1934,9 +1957,9 @@ public ProcessResult runHookIfPresent(Repository repository,
 	 * @since 5.11
 	 */
 	public ProcessResult runHookIfPresent(Repository repository,
-			final String hookName,
-			String[] args, OutputStream outRedirect, OutputStream errRedirect,
-			String stdinArgs) throws JGitInternalException {
+			String hookName, String[] args, OutputStream outRedirect,
+			OutputStream errRedirect, String stdinArgs)
+			throws JGitInternalException {
 		return new ProcessResult(Status.NOT_SUPPORTED);
 	}
 
@@ -1970,7 +1993,7 @@ public ProcessResult runHookIfPresent(Repository repository,
 	 * @since 5.11
 	 */
 	protected ProcessResult internalRunHookIfPresent(Repository repository,
-			final String hookName, String[] args, OutputStream outRedirect,
+			String hookName, String[] args, OutputStream outRedirect,
 			OutputStream errRedirect, String stdinArgs)
 			throws JGitInternalException {
 		File hookFile = findHook(repository, hookName);
@@ -2166,7 +2189,7 @@ public int runProcess(ProcessBuilder processBuilder,
 			OutputStream outRedirect, OutputStream errRedirect,
 			InputStream inRedirect) throws IOException,
 			InterruptedException {
-		final ExecutorService executor = Executors.newFixedThreadPool(2);
+		ExecutorService executor = Executors.newFixedThreadPool(2);
 		Process process = null;
 		// We'll record the first I/O exception that occurs, but keep on trying
 		// to dispose of our open streams and file handles
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java
index 23a73fa..663a344 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/HttpSupport.java
@@ -186,6 +186,33 @@ public static void encode(StringBuilder urlstr, String key) {
 	}
 
 	/**
+	 * Translates the provided URL into application/x-www-form-urlencoded
+	 * format.
+	 *
+	 * @param url
+	 *            The URL to translate.
+	 * @param keepPathSlash
+	 *            Whether or not to keep "/" in the URL (i.e. don't translate
+	 *            them to "%2F").
+	 *
+	 * @return The translated URL.
+	 * @since 5.13
+	 */
+	public static String urlEncode(String url, boolean keepPathSlash) {
+		String encoded;
+		try {
+			encoded = URLEncoder.encode(url, UTF_8.name());
+		} catch (UnsupportedEncodingException e) {
+			throw new RuntimeException(JGitText.get().couldNotURLEncodeToUTF8,
+					e);
+		}
+		if (keepPathSlash) {
+			encoded = encoded.replace("%2F", "/"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return encoded;
+	}
+
+	/**
 	 * Get the HTTP response code from the request.
 	 * <p>
 	 * Roughly the same as <code>c.getResponseCode()</code> but the
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1.java
index 1420add..56e90d0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017, Google Inc. and others
+ * Copyright (C) 2022, 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
@@ -7,99 +7,98 @@
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
-
 package org.eclipse.jgit.util.sha1;
 
-import static java.lang.Integer.lowestOneBit;
-import static java.lang.Integer.numberOfTrailingZeros;
-import static java.lang.Integer.rotateLeft;
-import static java.lang.Integer.rotateRight;
+import java.io.IOException;
+import java.security.MessageDigest;
 
-import java.text.MessageFormat;
-import java.util.Arrays;
-
-import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.errors.ConfigInvalidException;
+import org.eclipse.jgit.lib.ConfigConstants;
 import org.eclipse.jgit.lib.MutableObjectId;
 import org.eclipse.jgit.lib.ObjectId;
-import org.eclipse.jgit.util.NB;
 import org.eclipse.jgit.util.SystemReader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
- * Pure Java implementation of SHA-1 from FIPS 180-1 / RFC 3174.
- *
+ * SHA-1 interface from FIPS 180-1 / RFC 3174 with optional collision detection.
+ * Some implementations may not support collision detection.
  * <p>
  * See <a href="https://tools.ietf.org/html/rfc3174">RFC 3174</a>.
- * <p>
- * Unlike MessageDigest, this implementation includes the algorithm used by
- * {@code sha1dc} to detect cryptanalytic collision attacks against SHA-1, such
- * as the one used by <a href="https://shattered.it/">SHAttered</a>. See
- * <a href="https://github.com/cr-marcstevens/sha1collisiondetection">
- * sha1collisiondetection</a> for more information.
- * <p>
- * When detectCollision is true (default), this implementation throws
- * {@link org.eclipse.jgit.util.sha1.Sha1CollisionException} from any digest
- * method if a potential collision was detected.
- *
- * @since 4.7
  */
-public class SHA1 {
-	private static final Logger LOG = LoggerFactory.getLogger(SHA1.class);
-	private static final boolean DETECT_COLLISIONS;
+public abstract class SHA1 {
+	/**
+	 * SHA1 implementations available in JGit
+	 *
+	 * @since 5.13.2
+	 */
+	public enum Sha1Implementation {
+		/**
+		 * {@link SHA1Java} implemented in Java, supports collision detection.
+		 */
+		JAVA(SHA1Java.class),
+		/**
+		 * Native implementation based on JDK's {@link MessageDigest}.
+		 */
+		JDKNATIVE(SHA1Native.class);
 
-	static {
-		SystemReader sr = SystemReader.getInstance();
-		String v = sr.getProperty("org.eclipse.jgit.util.sha1.detectCollision"); //$NON-NLS-1$
-		DETECT_COLLISIONS = v != null ? Boolean.parseBoolean(v) : true;
+		private final String implClassName;
+
+		private Sha1Implementation(Class implClass) {
+			this.implClassName = implClass.getName();
+		}
+
+		@Override
+		public String toString() {
+			return implClassName;
+		}
+	}
+
+	private static final Sha1Implementation SHA1_IMPLEMENTATION = fromConfig();
+
+	private static Sha1Implementation fromConfig() {
+		try {
+			return SystemReader.getInstance().getUserConfig().getEnum(
+					ConfigConstants.CONFIG_CORE_SECTION, null,
+					ConfigConstants.SHA1_IMPLEMENTATION,
+					Sha1Implementation.JAVA);
+		} catch (ConfigInvalidException | IOException e) {
+			return Sha1Implementation.JAVA;
+		}
+	}
+
+	private static Sha1Implementation getImplementation() {
+		String fromSystemProperty = System
+				.getProperty("org.eclipse.jgit.util.sha1.implementation"); //$NON-NLS-1$
+		if (fromSystemProperty == null) {
+			return SHA1_IMPLEMENTATION;
+		}
+		if (fromSystemProperty
+				.equalsIgnoreCase(Sha1Implementation.JAVA.name())) {
+			return Sha1Implementation.JAVA;
+		}
+		if (fromSystemProperty
+				.equalsIgnoreCase(Sha1Implementation.JDKNATIVE.name())) {
+			return Sha1Implementation.JDKNATIVE;
+		}
+		return SHA1_IMPLEMENTATION;
 	}
 
 	/**
 	 * Create a new context to compute a SHA-1 hash of data.
+	 * <p>
+	 * If {@code core.sha1Implementation = jdkNative} in the user level global
+	 * git configuration or the system property
+	 * {@code org.eclipse.jgit.util.sha1.implementation = jdkNative} it will
+	 * create an object using the implementation in the JDK. If both are set the
+	 * system property takes precedence. Otherwise the pure Java implementation
+	 * will be used which supports collision detection but is slower.
 	 *
 	 * @return a new context to compute a SHA-1 hash of data.
 	 */
 	public static SHA1 newInstance() {
-		return new SHA1();
-	}
-
-	private final State h = new State();
-	private final int[] w = new int[80];
-
-	/** Buffer to accumulate partial blocks to 64 byte alignment. */
-	private final byte[] buffer = new byte[64];
-
-	/** Total number of bytes in the message. */
-	private long length;
-
-	private boolean detectCollision = DETECT_COLLISIONS;
-	private boolean foundCollision;
-
-	private final int[] w2 = new int[80];
-	private final State state58 = new State();
-	private final State state65 = new State();
-	private final State hIn = new State();
-	private final State hTmp = new State();
-
-	private SHA1() {
-		h.init();
-	}
-
-	/**
-	 * Enable likely collision detection.
-	 * <p>
-	 * Default is {@code true}.
-	 * <p>
-	 * May also be set by system property:
-	 * {@code -Dorg.eclipse.jgit.util.sha1.detectCollision=true}.
-	 *
-	 * @param detect
-	 *            a boolean.
-	 * @return {@code this}
-	 */
-	public SHA1 setDetectCollision(boolean detect) {
-		detectCollision = detect;
-		return this;
+		if (getImplementation() == Sha1Implementation.JDKNATIVE) {
+			return new SHA1Native();
+		}
+		return new SHA1Java();
 	}
 
 	/**
@@ -107,14 +106,7 @@ public SHA1 setDetectCollision(boolean detect) {
 	 *
 	 * @param b a byte.
 	 */
-	public void update(byte b) {
-		int bufferLen = (int) (length & 63);
-		length++;
-		buffer[bufferLen] = b;
-		if (bufferLen == 63) {
-			compress(buffer, 0);
-		}
-	}
+	public abstract void update(byte b);
 
 	/**
 	 * Update the digest computation by adding bytes to the message.
@@ -122,9 +114,7 @@ public void update(byte b) {
 	 * @param in
 	 *            input array of bytes.
 	 */
-	public void update(byte[] in) {
-		update(in, 0, in.length);
-	}
+	public abstract void update(byte[] in);
 
 	/**
 	 * Update the digest computation by adding bytes to the message.
@@ -136,344 +126,7 @@ public void update(byte[] in) {
 	 * @param len
 	 *            number of bytes to hash.
 	 */
-	public void update(byte[] in, int p, int len) {
-		// SHA-1 compress can only process whole 64 byte blocks.
-		// Hold partial updates in buffer, whose length is the low bits.
-		int bufferLen = (int) (length & 63);
-		length += len;
-
-		if (bufferLen > 0) {
-			int n = Math.min(64 - bufferLen, len);
-			System.arraycopy(in, p, buffer, bufferLen, n);
-			p += n;
-			len -= n;
-			if (bufferLen + n < 64) {
-				return;
-			}
-			compress(buffer, 0);
-		}
-		while (len >= 64) {
-			compress(in, p);
-			p += 64;
-			len -= 64;
-		}
-		if (len > 0) {
-			System.arraycopy(in, p, buffer, 0, len);
-		}
-	}
-
-	private void compress(byte[] block, int p) {
-		initBlock(block, p);
-		int ubcDvMask = detectCollision ? UbcCheck.check(w) : 0;
-		compress();
-
-		while (ubcDvMask != 0) {
-			int b = numberOfTrailingZeros(lowestOneBit(ubcDvMask));
-			UbcCheck.DvInfo dv = UbcCheck.DV[b];
-			for (int i = 0; i < 80; i++) {
-				w2[i] = w[i] ^ dv.dm[i];
-			}
-			recompress(dv.testt);
-			if (eq(hTmp, h)) {
-				foundCollision = true;
-				break;
-			}
-			ubcDvMask &= ~(1 << b);
-		}
-	}
-
-	private void initBlock(byte[] block, int p) {
-		for (int t = 0; t < 16; t++) {
-			w[t] = NB.decodeInt32(block, p + (t << 2));
-		}
-
-		// RFC 3174 6.1.b, extend state vector to 80 words.
-		for (int t = 16; t < 80; t++) {
-			int x = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
-			w[t] = rotateLeft(x, 1); // S^1(...)
-		}
-	}
-
-	private void compress() {
-		// Method 1 from RFC 3174 section 6.1.
-		// Method 2 (circular queue of 16 words) is slower.
-		int a = h.a, b = h.b, c = h.c, d = h.d, e = h.e;
-
-		// @formatter:off
-		 e += s1(a, b, c, d,w[ 0]);  b = rotateLeft( b, 30);
-		 d += s1(e, a, b, c,w[ 1]);  a = rotateLeft( a, 30);
-		 c += s1(d, e, a, b,w[ 2]);  e = rotateLeft( e, 30);
-		 b += s1(c, d, e, a,w[ 3]);  d = rotateLeft( d, 30);
-		 a += s1(b, c, d, e,w[ 4]);  c = rotateLeft( c, 30);
-		 e += s1(a, b, c, d,w[ 5]);  b = rotateLeft( b, 30);
-		 d += s1(e, a, b, c,w[ 6]);  a = rotateLeft( a, 30);
-		 c += s1(d, e, a, b,w[ 7]);  e = rotateLeft( e, 30);
-		 b += s1(c, d, e, a,w[ 8]);  d = rotateLeft( d, 30);
-		 a += s1(b, c, d, e,w[ 9]);  c = rotateLeft( c, 30);
-		 e += s1(a, b, c, d,w[ 10]);  b = rotateLeft( b, 30);
-		 d += s1(e, a, b, c,w[ 11]);  a = rotateLeft( a, 30);
-		 c += s1(d, e, a, b,w[ 12]);  e = rotateLeft( e, 30);
-		 b += s1(c, d, e, a,w[ 13]);  d = rotateLeft( d, 30);
-		 a += s1(b, c, d, e,w[ 14]);  c = rotateLeft( c, 30);
-		 e += s1(a, b, c, d,w[ 15]);  b = rotateLeft( b, 30);
-		 d += s1(e, a, b, c,w[ 16]);  a = rotateLeft( a, 30);
-		 c += s1(d, e, a, b,w[ 17]);  e = rotateLeft( e, 30);
-		 b += s1(c, d, e, a,w[ 18]);  d = rotateLeft( d, 30);
-		 a += s1(b, c, d, e,w[ 19]);  c = rotateLeft( c, 30);
-
-		 e += s2(a, b, c, d,w[ 20]);  b = rotateLeft( b, 30);
-		 d += s2(e, a, b, c,w[ 21]);  a = rotateLeft( a, 30);
-		 c += s2(d, e, a, b,w[ 22]);  e = rotateLeft( e, 30);
-		 b += s2(c, d, e, a,w[ 23]);  d = rotateLeft( d, 30);
-		 a += s2(b, c, d, e,w[ 24]);  c = rotateLeft( c, 30);
-		 e += s2(a, b, c, d,w[ 25]);  b = rotateLeft( b, 30);
-		 d += s2(e, a, b, c,w[ 26]);  a = rotateLeft( a, 30);
-		 c += s2(d, e, a, b,w[ 27]);  e = rotateLeft( e, 30);
-		 b += s2(c, d, e, a,w[ 28]);  d = rotateLeft( d, 30);
-		 a += s2(b, c, d, e,w[ 29]);  c = rotateLeft( c, 30);
-		 e += s2(a, b, c, d,w[ 30]);  b = rotateLeft( b, 30);
-		 d += s2(e, a, b, c,w[ 31]);  a = rotateLeft( a, 30);
-		 c += s2(d, e, a, b,w[ 32]);  e = rotateLeft( e, 30);
-		 b += s2(c, d, e, a,w[ 33]);  d = rotateLeft( d, 30);
-		 a += s2(b, c, d, e,w[ 34]);  c = rotateLeft( c, 30);
-		 e += s2(a, b, c, d,w[ 35]);  b = rotateLeft( b, 30);
-		 d += s2(e, a, b, c,w[ 36]);  a = rotateLeft( a, 30);
-		 c += s2(d, e, a, b,w[ 37]);  e = rotateLeft( e, 30);
-		 b += s2(c, d, e, a,w[ 38]);  d = rotateLeft( d, 30);
-		 a += s2(b, c, d, e,w[ 39]);  c = rotateLeft( c, 30);
-
-		 e += s3(a, b, c, d,w[ 40]);  b = rotateLeft( b, 30);
-		 d += s3(e, a, b, c,w[ 41]);  a = rotateLeft( a, 30);
-		 c += s3(d, e, a, b,w[ 42]);  e = rotateLeft( e, 30);
-		 b += s3(c, d, e, a,w[ 43]);  d = rotateLeft( d, 30);
-		 a += s3(b, c, d, e,w[ 44]);  c = rotateLeft( c, 30);
-		 e += s3(a, b, c, d,w[ 45]);  b = rotateLeft( b, 30);
-		 d += s3(e, a, b, c,w[ 46]);  a = rotateLeft( a, 30);
-		 c += s3(d, e, a, b,w[ 47]);  e = rotateLeft( e, 30);
-		 b += s3(c, d, e, a,w[ 48]);  d = rotateLeft( d, 30);
-		 a += s3(b, c, d, e,w[ 49]);  c = rotateLeft( c, 30);
-		 e += s3(a, b, c, d,w[ 50]);  b = rotateLeft( b, 30);
-		 d += s3(e, a, b, c,w[ 51]);  a = rotateLeft( a, 30);
-		 c += s3(d, e, a, b,w[ 52]);  e = rotateLeft( e, 30);
-		 b += s3(c, d, e, a,w[ 53]);  d = rotateLeft( d, 30);
-		 a += s3(b, c, d, e,w[ 54]);  c = rotateLeft( c, 30);
-		 e += s3(a, b, c, d,w[ 55]);  b = rotateLeft( b, 30);
-		 d += s3(e, a, b, c,w[ 56]);  a = rotateLeft( a, 30);
-		 c += s3(d, e, a, b,w[ 57]);  e = rotateLeft( e, 30);
-		state58.save(a, b, c, d, e);
-		 b += s3(c, d, e, a,w[ 58]);  d = rotateLeft( d, 30);
-		 a += s3(b, c, d, e,w[ 59]);  c = rotateLeft( c, 30);
-
-		 e += s4(a, b, c, d,w[ 60]);  b = rotateLeft( b, 30);
-		 d += s4(e, a, b, c,w[ 61]);  a = rotateLeft( a, 30);
-		 c += s4(d, e, a, b,w[ 62]);  e = rotateLeft( e, 30);
-		 b += s4(c, d, e, a,w[ 63]);  d = rotateLeft( d, 30);
-		 a += s4(b, c, d, e,w[ 64]);  c = rotateLeft( c, 30);
-		state65.save(a, b, c, d, e);
-		 e += s4(a, b, c, d,w[ 65]);  b = rotateLeft( b, 30);
-		 d += s4(e, a, b, c,w[ 66]);  a = rotateLeft( a, 30);
-		 c += s4(d, e, a, b,w[ 67]);  e = rotateLeft( e, 30);
-		 b += s4(c, d, e, a,w[ 68]);  d = rotateLeft( d, 30);
-		 a += s4(b, c, d, e,w[ 69]);  c = rotateLeft( c, 30);
-		 e += s4(a, b, c, d,w[ 70]);  b = rotateLeft( b, 30);
-		 d += s4(e, a, b, c,w[ 71]);  a = rotateLeft( a, 30);
-		 c += s4(d, e, a, b,w[ 72]);  e = rotateLeft( e, 30);
-		 b += s4(c, d, e, a,w[ 73]);  d = rotateLeft( d, 30);
-		 a += s4(b, c, d, e,w[ 74]);  c = rotateLeft( c, 30);
-		 e += s4(a, b, c, d,w[ 75]);  b = rotateLeft( b, 30);
-		 d += s4(e, a, b, c,w[ 76]);  a = rotateLeft( a, 30);
-		 c += s4(d, e, a, b,w[ 77]);  e = rotateLeft( e, 30);
-		 b += s4(c, d, e, a,w[ 78]);  d = rotateLeft( d, 30);
-		 a += s4(b, c, d, e,w[ 79]);  c = rotateLeft( c, 30);
-
-		// @formatter:on
-		h.save(h.a + a, h.b + b, h.c + c, h.d + d, h.e + e);
-	}
-
-	private void recompress(int t) {
-		State s;
-		switch (t) {
-		case 58:
-			s = state58;
-			break;
-		case 65:
-			s = state65;
-			break;
-		default:
-			throw new IllegalStateException();
-		}
-		int a = s.a, b = s.b, c = s.c, d = s.d, e = s.e;
-
-		// @formatter:off
-	  if (t == 65) {
-		{ c = rotateRight( c, 30);  a -= s4(b, c, d, e,w2[ 64]);}
-		{ d = rotateRight( d, 30);  b -= s4(c, d, e, a,w2[ 63]);}
-		{ e = rotateRight( e, 30);  c -= s4(d, e, a, b,w2[ 62]);}
-		{ a = rotateRight( a, 30);  d -= s4(e, a, b, c,w2[ 61]);}
-		{ b = rotateRight( b, 30);  e -= s4(a, b, c, d,w2[ 60]);}
-
-		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 59]);}
-		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 58]);}
-	  }
-		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 57]);}
-		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 56]);}
-		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 55]);}
-		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 54]);}
-		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 53]);}
-		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 52]);}
-		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 51]);}
-		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 50]);}
-		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 49]);}
-		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 48]);}
-		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 47]);}
-		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 46]);}
-		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 45]);}
-		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 44]);}
-		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 43]);}
-		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 42]);}
-		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 41]);}
-		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 40]);}
-
-		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 39]);}
-		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 38]);}
-		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 37]);}
-		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 36]);}
-		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 35]);}
-		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 34]);}
-		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 33]);}
-		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 32]);}
-		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 31]);}
-		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 30]);}
-		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 29]);}
-		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 28]);}
-		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 27]);}
-		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 26]);}
-		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 25]);}
-		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 24]);}
-		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 23]);}
-		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 22]);}
-		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 21]);}
-		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 20]);}
-
-		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 19]);}
-		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 18]);}
-		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 17]);}
-		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 16]);}
-		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 15]);}
-		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 14]);}
-		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 13]);}
-		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 12]);}
-		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 11]);}
-		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 10]);}
-		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 9]);}
-		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 8]);}
-		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 7]);}
-		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 6]);}
-		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 5]);}
-		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 4]);}
-		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 3]);}
-		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 2]);}
-		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 1]);}
-		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 0]);}
-
-		hIn.save(a, b, c, d, e);
-		a = s.a; b = s.b; c = s.c; d = s.d; e = s.e;
-
-	  if (t == 58) {
-		{ b += s3(c, d, e, a,w2[ 58]);  d = rotateLeft( d, 30);}
-		{ a += s3(b, c, d, e,w2[ 59]);  c = rotateLeft( c, 30);}
-
-		{ e += s4(a, b, c, d,w2[ 60]);  b = rotateLeft( b, 30);}
-		{ d += s4(e, a, b, c,w2[ 61]);  a = rotateLeft( a, 30);}
-		{ c += s4(d, e, a, b,w2[ 62]);  e = rotateLeft( e, 30);}
-		{ b += s4(c, d, e, a,w2[ 63]);  d = rotateLeft( d, 30);}
-		{ a += s4(b, c, d, e,w2[ 64]);  c = rotateLeft( c, 30);}
-	  }
-		{ e += s4(a, b, c, d,w2[ 65]);  b = rotateLeft( b, 30);}
-		{ d += s4(e, a, b, c,w2[ 66]);  a = rotateLeft( a, 30);}
-		{ c += s4(d, e, a, b,w2[ 67]);  e = rotateLeft( e, 30);}
-		{ b += s4(c, d, e, a,w2[ 68]);  d = rotateLeft( d, 30);}
-		{ a += s4(b, c, d, e,w2[ 69]);  c = rotateLeft( c, 30);}
-		{ e += s4(a, b, c, d,w2[ 70]);  b = rotateLeft( b, 30);}
-		{ d += s4(e, a, b, c,w2[ 71]);  a = rotateLeft( a, 30);}
-		{ c += s4(d, e, a, b,w2[ 72]);  e = rotateLeft( e, 30);}
-		{ b += s4(c, d, e, a,w2[ 73]);  d = rotateLeft( d, 30);}
-		{ a += s4(b, c, d, e,w2[ 74]);  c = rotateLeft( c, 30);}
-		{ e += s4(a, b, c, d,w2[ 75]);  b = rotateLeft( b, 30);}
-		{ d += s4(e, a, b, c,w2[ 76]);  a = rotateLeft( a, 30);}
-		{ c += s4(d, e, a, b,w2[ 77]);  e = rotateLeft( e, 30);}
-		{ b += s4(c, d, e, a,w2[ 78]);  d = rotateLeft( d, 30);}
-		{ a += s4(b, c, d, e,w2[ 79]);  c = rotateLeft( c, 30);}
-
-		// @formatter:on
-		hTmp.save(hIn.a + a, hIn.b + b, hIn.c + c, hIn.d + d, hIn.e + e);
-	}
-
-	private static int s1(int a, int b, int c, int d, int w_t) {
-		return rotateLeft(a, 5)
-				// f: 0 <= t <= 19
-				+ ((b & c) | ((~b) & d))
-				+ 0x5A827999 + w_t;
-	}
-
-	private static int s2(int a, int b, int c, int d, int w_t) {
-		return rotateLeft(a, 5)
-				// f: 20 <= t <= 39
-				+ (b ^ c ^ d)
-				+ 0x6ED9EBA1 + w_t;
-	}
-
-	private static int s3(int a, int b, int c, int d, int w_t) {
-		return rotateLeft(a, 5)
-				// f: 40 <= t <= 59
-				+ ((b & c) | (b & d) | (c & d))
-				+ 0x8F1BBCDC + w_t;
-	}
-
-	private static int s4(int a, int b, int c, int d, int w_t) {
-		return rotateLeft(a, 5)
-				// f: 60 <= t <= 79
-				+ (b ^ c ^ d)
-				+ 0xCA62C1D6 + w_t;
-	}
-
-	private static boolean eq(State q, State r) {
-		return q.a == r.a
-				&& q.b == r.b
-				&& q.c == r.c
-				&& q.d == r.d
-				&& q.e == r.e;
-	}
-
-	private void finish() {
-		int bufferLen = (int) (length & 63);
-		if (bufferLen > 55) {
-			// Last block is too small; pad, compress, pad another block.
-			buffer[bufferLen++] = (byte) 0x80;
-			Arrays.fill(buffer, bufferLen, 64, (byte) 0);
-			compress(buffer, 0);
-			Arrays.fill(buffer, 0, 56, (byte) 0);
-		} else {
-			// Last block can hold padding and length.
-			buffer[bufferLen++] = (byte) 0x80;
-			Arrays.fill(buffer, bufferLen, 56, (byte) 0);
-		}
-
-		// SHA-1 appends the length of the message in bits after the
-		// padding block (above). Here length is in bytes. Multiply by
-		// 8 by shifting by 3 as part of storing the 64 bit byte length
-		// into the two words expected in the trailer.
-		NB.encodeInt32(buffer, 56, (int) (length >>> (32 - 3)));
-		NB.encodeInt32(buffer, 60, (int) (length << 3));
-		compress(buffer, 0);
-
-		if (foundCollision) {
-			ObjectId id = h.toObjectId();
-			LOG.warn(MessageFormat.format(JGitText.get().sha1CollisionDetected,
-					id.name()));
-			throw new Sha1CollisionException(id);
-		}
-	}
+	public abstract void update(byte[] in, int p, int len);
 
 	/**
 	 * Finish the digest and return the resulting hash.
@@ -484,17 +137,7 @@ private void finish() {
 	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
 	 *             if a collision was detected and safeHash is false.
 	 */
-	public byte[] digest() throws Sha1CollisionException {
-		finish();
-
-		byte[] b = new byte[20];
-		NB.encodeInt32(b, 0, h.a);
-		NB.encodeInt32(b, 4, h.b);
-		NB.encodeInt32(b, 8, h.c);
-		NB.encodeInt32(b, 12, h.d);
-		NB.encodeInt32(b, 16, h.e);
-		return b;
-	}
+	public abstract byte[] digest() throws Sha1CollisionException;
 
 	/**
 	 * Finish the digest and return the resulting hash.
@@ -505,10 +148,7 @@ private void finish() {
 	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
 	 *             if a collision was detected and safeHash is false.
 	 */
-	public ObjectId toObjectId() throws Sha1CollisionException {
-		finish();
-		return h.toObjectId();
-	}
+	public abstract ObjectId toObjectId() throws Sha1CollisionException;
 
 	/**
 	 * Finish the digest and return the resulting hash.
@@ -520,60 +160,42 @@ public ObjectId toObjectId() throws Sha1CollisionException {
 	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
 	 *             if a collision was detected and safeHash is false.
 	 */
-	public void digest(MutableObjectId id) throws Sha1CollisionException {
-		finish();
-		id.set(h.a, h.b, h.c, h.d, h.e);
-	}
-
-	/**
-	 * Check if a collision was detected.
-	 *
-	 * <p>
-	 * This method only returns an accurate result after the digest was obtained
-	 * through {@link #digest()}, {@link #digest(MutableObjectId)} or
-	 * {@link #toObjectId()}, as the hashing function must finish processing to
-	 * know the final state.
-	 *
-	 * @return {@code true} if a likely collision was detected.
-	 */
-	public boolean hasCollision() {
-		return foundCollision;
-	}
+	public abstract void digest(MutableObjectId id)
+			throws Sha1CollisionException;
 
 	/**
 	 * Reset this instance to compute another hash.
 	 *
 	 * @return {@code this}.
 	 */
-	public SHA1 reset() {
-		h.init();
-		length = 0;
-		foundCollision = false;
-		return this;
-	}
+	public abstract SHA1 reset();
 
-	private static final class State {
-		int a;
-		int b;
-		int c;
-		int d;
-		int e;
+	/**
+	 * Enable likely collision detection.
+	 * <p>
+	 * Default for implementations supporting collision detection is
+	 * {@code true}.
+	 * <p>
+	 * Implementations not supporting collision detection ignore calls to this
+	 * method.
+	 *
+	 * @param detect
+	 *            a boolean.
+	 * @return {@code this}
+	 */
+	public abstract SHA1 setDetectCollision(boolean detect);
 
-		final void init() {
-			// Magic initialization constants defined by FIPS180.
-			save(0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0);
-		}
-
-		final void save(int a1, int b1, int c1, int d1, int e1) {
-			a = a1;
-			b = b1;
-			c = c1;
-			d = d1;
-			e = e1;
-		}
-
-		ObjectId toObjectId() {
-			return new ObjectId(a, b, c, d, e);
-		}
-	}
-}
+	/**
+	 * Check if a collision was detected. This method only returns an accurate
+	 * result after the digest was obtained through {@link #digest()},
+	 * {@link #digest(MutableObjectId)} or {@link #toObjectId()}, as the hashing
+	 * function must finish processing to know the final state.
+	 * <p>
+	 * Implementations not supporting collision detection always return
+	 * {@code false}.
+	 * <p>
+	 *
+	 * @return {@code true} if a likely collision was detected.
+	 */
+	public abstract boolean hasCollision();
+}
\ No newline at end of file
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Java.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Java.java
new file mode 100644
index 0000000..213ee97
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Java.java
@@ -0,0 +1,579 @@
+/*
+ * Copyright (C) 2017, Google Inc. and others
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Distribution License v. 1.0 which is available at
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+package org.eclipse.jgit.util.sha1;
+
+import static java.lang.Integer.lowestOneBit;
+import static java.lang.Integer.numberOfTrailingZeros;
+import static java.lang.Integer.rotateLeft;
+import static java.lang.Integer.rotateRight;
+
+import java.text.MessageFormat;
+import java.util.Arrays;
+
+import org.eclipse.jgit.internal.JGitText;
+import org.eclipse.jgit.lib.MutableObjectId;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.util.NB;
+import org.eclipse.jgit.util.SystemReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Pure Java implementation of SHA-1 from FIPS 180-1 / RFC 3174.
+ *
+ * <p>
+ * See <a href="https://tools.ietf.org/html/rfc3174">RFC 3174</a>.
+ * <p>
+ * Unlike MessageDigest, this implementation includes the algorithm used by
+ * {@code sha1dc} to detect cryptanalytic collision attacks against SHA-1, such
+ * as the one used by <a href="https://shattered.it/">SHAttered</a>. See
+ * <a href="https://github.com/cr-marcstevens/sha1collisiondetection">
+ * sha1collisiondetection</a> for more information.
+ * <p>
+ * When detectCollision is true (default), this implementation throws
+ * {@link org.eclipse.jgit.util.sha1.Sha1CollisionException} from any digest
+ * method if a potential collision was detected.
+ *
+ * @since 4.7
+ */
+class SHA1Java extends SHA1 {
+	private static final Logger LOG = LoggerFactory.getLogger(SHA1Java.class);
+	private static final boolean DETECT_COLLISIONS;
+
+	static {
+		SystemReader sr = SystemReader.getInstance();
+		String v = sr.getProperty("org.eclipse.jgit.util.sha1.detectCollision"); //$NON-NLS-1$
+		DETECT_COLLISIONS = v != null ? Boolean.parseBoolean(v) : true;
+	}
+
+	private final State h = new State();
+	private final int[] w = new int[80];
+
+	/** Buffer to accumulate partial blocks to 64 byte alignment. */
+	private final byte[] buffer = new byte[64];
+
+	/** Total number of bytes in the message. */
+	private long length;
+
+	private boolean detectCollision = DETECT_COLLISIONS;
+	private boolean foundCollision;
+
+	private final int[] w2 = new int[80];
+	private final State state58 = new State();
+	private final State state65 = new State();
+	private final State hIn = new State();
+	private final State hTmp = new State();
+
+	SHA1Java() {
+		h.init();
+	}
+
+	/**
+	 * Enable likely collision detection.
+	 * <p>
+	 * Default is {@code true}.
+	 * <p>
+	 * May also be set by system property:
+	 * {@code -Dorg.eclipse.jgit.util.sha1.detectCollision=true}.
+	 *
+	 * @param detect
+	 *            a boolean.
+	 * @return {@code this}
+	 */
+	@Override
+	public SHA1 setDetectCollision(boolean detect) {
+		detectCollision = detect;
+		return this;
+	}
+
+	/**
+	 * Update the digest computation by adding a byte.
+	 *
+	 * @param b a byte.
+	 */
+	@Override
+	public void update(byte b) {
+		int bufferLen = (int) (length & 63);
+		length++;
+		buffer[bufferLen] = b;
+		if (bufferLen == 63) {
+			compress(buffer, 0);
+		}
+	}
+
+	/**
+	 * Update the digest computation by adding bytes to the message.
+	 *
+	 * @param in
+	 *            input array of bytes.
+	 */
+	@Override
+	public void update(byte[] in) {
+		update(in, 0, in.length);
+	}
+
+	/**
+	 * Update the digest computation by adding bytes to the message.
+	 *
+	 * @param in
+	 *            input array of bytes.
+	 * @param p
+	 *            offset to start at from {@code in}.
+	 * @param len
+	 *            number of bytes to hash.
+	 */
+	@Override
+	public void update(byte[] in, int p, int len) {
+		// SHA-1 compress can only process whole 64 byte blocks.
+		// Hold partial updates in buffer, whose length is the low bits.
+		int bufferLen = (int) (length & 63);
+		length += len;
+
+		if (bufferLen > 0) {
+			int n = Math.min(64 - bufferLen, len);
+			System.arraycopy(in, p, buffer, bufferLen, n);
+			p += n;
+			len -= n;
+			if (bufferLen + n < 64) {
+				return;
+			}
+			compress(buffer, 0);
+		}
+		while (len >= 64) {
+			compress(in, p);
+			p += 64;
+			len -= 64;
+		}
+		if (len > 0) {
+			System.arraycopy(in, p, buffer, 0, len);
+		}
+	}
+
+	private void compress(byte[] block, int p) {
+		initBlock(block, p);
+		int ubcDvMask = detectCollision ? UbcCheck.check(w) : 0;
+		compress();
+
+		while (ubcDvMask != 0) {
+			int b = numberOfTrailingZeros(lowestOneBit(ubcDvMask));
+			UbcCheck.DvInfo dv = UbcCheck.DV[b];
+			for (int i = 0; i < 80; i++) {
+				w2[i] = w[i] ^ dv.dm[i];
+			}
+			recompress(dv.testt);
+			if (eq(hTmp, h)) {
+				foundCollision = true;
+				break;
+			}
+			ubcDvMask &= ~(1 << b);
+		}
+	}
+
+	private void initBlock(byte[] block, int p) {
+		for (int t = 0; t < 16; t++) {
+			w[t] = NB.decodeInt32(block, p + (t << 2));
+		}
+
+		// RFC 3174 6.1.b, extend state vector to 80 words.
+		for (int t = 16; t < 80; t++) {
+			int x = w[t - 3] ^ w[t - 8] ^ w[t - 14] ^ w[t - 16];
+			w[t] = rotateLeft(x, 1); // S^1(...)
+		}
+	}
+
+	private void compress() {
+		// Method 1 from RFC 3174 section 6.1.
+		// Method 2 (circular queue of 16 words) is slower.
+		int a = h.a, b = h.b, c = h.c, d = h.d, e = h.e;
+
+		// @formatter:off
+		 e += s1(a, b, c, d,w[ 0]);  b = rotateLeft( b, 30);
+		 d += s1(e, a, b, c,w[ 1]);  a = rotateLeft( a, 30);
+		 c += s1(d, e, a, b,w[ 2]);  e = rotateLeft( e, 30);
+		 b += s1(c, d, e, a,w[ 3]);  d = rotateLeft( d, 30);
+		 a += s1(b, c, d, e,w[ 4]);  c = rotateLeft( c, 30);
+		 e += s1(a, b, c, d,w[ 5]);  b = rotateLeft( b, 30);
+		 d += s1(e, a, b, c,w[ 6]);  a = rotateLeft( a, 30);
+		 c += s1(d, e, a, b,w[ 7]);  e = rotateLeft( e, 30);
+		 b += s1(c, d, e, a,w[ 8]);  d = rotateLeft( d, 30);
+		 a += s1(b, c, d, e,w[ 9]);  c = rotateLeft( c, 30);
+		 e += s1(a, b, c, d,w[ 10]);  b = rotateLeft( b, 30);
+		 d += s1(e, a, b, c,w[ 11]);  a = rotateLeft( a, 30);
+		 c += s1(d, e, a, b,w[ 12]);  e = rotateLeft( e, 30);
+		 b += s1(c, d, e, a,w[ 13]);  d = rotateLeft( d, 30);
+		 a += s1(b, c, d, e,w[ 14]);  c = rotateLeft( c, 30);
+		 e += s1(a, b, c, d,w[ 15]);  b = rotateLeft( b, 30);
+		 d += s1(e, a, b, c,w[ 16]);  a = rotateLeft( a, 30);
+		 c += s1(d, e, a, b,w[ 17]);  e = rotateLeft( e, 30);
+		 b += s1(c, d, e, a,w[ 18]);  d = rotateLeft( d, 30);
+		 a += s1(b, c, d, e,w[ 19]);  c = rotateLeft( c, 30);
+
+		 e += s2(a, b, c, d,w[ 20]);  b = rotateLeft( b, 30);
+		 d += s2(e, a, b, c,w[ 21]);  a = rotateLeft( a, 30);
+		 c += s2(d, e, a, b,w[ 22]);  e = rotateLeft( e, 30);
+		 b += s2(c, d, e, a,w[ 23]);  d = rotateLeft( d, 30);
+		 a += s2(b, c, d, e,w[ 24]);  c = rotateLeft( c, 30);
+		 e += s2(a, b, c, d,w[ 25]);  b = rotateLeft( b, 30);
+		 d += s2(e, a, b, c,w[ 26]);  a = rotateLeft( a, 30);
+		 c += s2(d, e, a, b,w[ 27]);  e = rotateLeft( e, 30);
+		 b += s2(c, d, e, a,w[ 28]);  d = rotateLeft( d, 30);
+		 a += s2(b, c, d, e,w[ 29]);  c = rotateLeft( c, 30);
+		 e += s2(a, b, c, d,w[ 30]);  b = rotateLeft( b, 30);
+		 d += s2(e, a, b, c,w[ 31]);  a = rotateLeft( a, 30);
+		 c += s2(d, e, a, b,w[ 32]);  e = rotateLeft( e, 30);
+		 b += s2(c, d, e, a,w[ 33]);  d = rotateLeft( d, 30);
+		 a += s2(b, c, d, e,w[ 34]);  c = rotateLeft( c, 30);
+		 e += s2(a, b, c, d,w[ 35]);  b = rotateLeft( b, 30);
+		 d += s2(e, a, b, c,w[ 36]);  a = rotateLeft( a, 30);
+		 c += s2(d, e, a, b,w[ 37]);  e = rotateLeft( e, 30);
+		 b += s2(c, d, e, a,w[ 38]);  d = rotateLeft( d, 30);
+		 a += s2(b, c, d, e,w[ 39]);  c = rotateLeft( c, 30);
+
+		 e += s3(a, b, c, d,w[ 40]);  b = rotateLeft( b, 30);
+		 d += s3(e, a, b, c,w[ 41]);  a = rotateLeft( a, 30);
+		 c += s3(d, e, a, b,w[ 42]);  e = rotateLeft( e, 30);
+		 b += s3(c, d, e, a,w[ 43]);  d = rotateLeft( d, 30);
+		 a += s3(b, c, d, e,w[ 44]);  c = rotateLeft( c, 30);
+		 e += s3(a, b, c, d,w[ 45]);  b = rotateLeft( b, 30);
+		 d += s3(e, a, b, c,w[ 46]);  a = rotateLeft( a, 30);
+		 c += s3(d, e, a, b,w[ 47]);  e = rotateLeft( e, 30);
+		 b += s3(c, d, e, a,w[ 48]);  d = rotateLeft( d, 30);
+		 a += s3(b, c, d, e,w[ 49]);  c = rotateLeft( c, 30);
+		 e += s3(a, b, c, d,w[ 50]);  b = rotateLeft( b, 30);
+		 d += s3(e, a, b, c,w[ 51]);  a = rotateLeft( a, 30);
+		 c += s3(d, e, a, b,w[ 52]);  e = rotateLeft( e, 30);
+		 b += s3(c, d, e, a,w[ 53]);  d = rotateLeft( d, 30);
+		 a += s3(b, c, d, e,w[ 54]);  c = rotateLeft( c, 30);
+		 e += s3(a, b, c, d,w[ 55]);  b = rotateLeft( b, 30);
+		 d += s3(e, a, b, c,w[ 56]);  a = rotateLeft( a, 30);
+		 c += s3(d, e, a, b,w[ 57]);  e = rotateLeft( e, 30);
+		state58.save(a, b, c, d, e);
+		 b += s3(c, d, e, a,w[ 58]);  d = rotateLeft( d, 30);
+		 a += s3(b, c, d, e,w[ 59]);  c = rotateLeft( c, 30);
+
+		 e += s4(a, b, c, d,w[ 60]);  b = rotateLeft( b, 30);
+		 d += s4(e, a, b, c,w[ 61]);  a = rotateLeft( a, 30);
+		 c += s4(d, e, a, b,w[ 62]);  e = rotateLeft( e, 30);
+		 b += s4(c, d, e, a,w[ 63]);  d = rotateLeft( d, 30);
+		 a += s4(b, c, d, e,w[ 64]);  c = rotateLeft( c, 30);
+		state65.save(a, b, c, d, e);
+		 e += s4(a, b, c, d,w[ 65]);  b = rotateLeft( b, 30);
+		 d += s4(e, a, b, c,w[ 66]);  a = rotateLeft( a, 30);
+		 c += s4(d, e, a, b,w[ 67]);  e = rotateLeft( e, 30);
+		 b += s4(c, d, e, a,w[ 68]);  d = rotateLeft( d, 30);
+		 a += s4(b, c, d, e,w[ 69]);  c = rotateLeft( c, 30);
+		 e += s4(a, b, c, d,w[ 70]);  b = rotateLeft( b, 30);
+		 d += s4(e, a, b, c,w[ 71]);  a = rotateLeft( a, 30);
+		 c += s4(d, e, a, b,w[ 72]);  e = rotateLeft( e, 30);
+		 b += s4(c, d, e, a,w[ 73]);  d = rotateLeft( d, 30);
+		 a += s4(b, c, d, e,w[ 74]);  c = rotateLeft( c, 30);
+		 e += s4(a, b, c, d,w[ 75]);  b = rotateLeft( b, 30);
+		 d += s4(e, a, b, c,w[ 76]);  a = rotateLeft( a, 30);
+		 c += s4(d, e, a, b,w[ 77]);  e = rotateLeft( e, 30);
+		 b += s4(c, d, e, a,w[ 78]);  d = rotateLeft( d, 30);
+		 a += s4(b, c, d, e,w[ 79]);  c = rotateLeft( c, 30);
+
+		// @formatter:on
+		h.save(h.a + a, h.b + b, h.c + c, h.d + d, h.e + e);
+	}
+
+	private void recompress(int t) {
+		State s;
+		switch (t) {
+		case 58:
+			s = state58;
+			break;
+		case 65:
+			s = state65;
+			break;
+		default:
+			throw new IllegalStateException();
+		}
+		int a = s.a, b = s.b, c = s.c, d = s.d, e = s.e;
+
+		// @formatter:off
+	  if (t == 65) {
+		{ c = rotateRight( c, 30);  a -= s4(b, c, d, e,w2[ 64]);}
+		{ d = rotateRight( d, 30);  b -= s4(c, d, e, a,w2[ 63]);}
+		{ e = rotateRight( e, 30);  c -= s4(d, e, a, b,w2[ 62]);}
+		{ a = rotateRight( a, 30);  d -= s4(e, a, b, c,w2[ 61]);}
+		{ b = rotateRight( b, 30);  e -= s4(a, b, c, d,w2[ 60]);}
+
+		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 59]);}
+		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 58]);}
+	  }
+		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 57]);}
+		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 56]);}
+		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 55]);}
+		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 54]);}
+		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 53]);}
+		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 52]);}
+		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 51]);}
+		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 50]);}
+		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 49]);}
+		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 48]);}
+		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 47]);}
+		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 46]);}
+		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 45]);}
+		{ c = rotateRight( c, 30);  a -= s3(b, c, d, e,w2[ 44]);}
+		{ d = rotateRight( d, 30);  b -= s3(c, d, e, a,w2[ 43]);}
+		{ e = rotateRight( e, 30);  c -= s3(d, e, a, b,w2[ 42]);}
+		{ a = rotateRight( a, 30);  d -= s3(e, a, b, c,w2[ 41]);}
+		{ b = rotateRight( b, 30);  e -= s3(a, b, c, d,w2[ 40]);}
+
+		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 39]);}
+		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 38]);}
+		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 37]);}
+		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 36]);}
+		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 35]);}
+		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 34]);}
+		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 33]);}
+		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 32]);}
+		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 31]);}
+		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 30]);}
+		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 29]);}
+		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 28]);}
+		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 27]);}
+		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 26]);}
+		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 25]);}
+		{ c = rotateRight( c, 30);  a -= s2(b, c, d, e,w2[ 24]);}
+		{ d = rotateRight( d, 30);  b -= s2(c, d, e, a,w2[ 23]);}
+		{ e = rotateRight( e, 30);  c -= s2(d, e, a, b,w2[ 22]);}
+		{ a = rotateRight( a, 30);  d -= s2(e, a, b, c,w2[ 21]);}
+		{ b = rotateRight( b, 30);  e -= s2(a, b, c, d,w2[ 20]);}
+
+		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 19]);}
+		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 18]);}
+		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 17]);}
+		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 16]);}
+		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 15]);}
+		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 14]);}
+		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 13]);}
+		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 12]);}
+		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 11]);}
+		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 10]);}
+		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 9]);}
+		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 8]);}
+		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 7]);}
+		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 6]);}
+		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 5]);}
+		{ c = rotateRight( c, 30);  a -= s1(b, c, d, e,w2[ 4]);}
+		{ d = rotateRight( d, 30);  b -= s1(c, d, e, a,w2[ 3]);}
+		{ e = rotateRight( e, 30);  c -= s1(d, e, a, b,w2[ 2]);}
+		{ a = rotateRight( a, 30);  d -= s1(e, a, b, c,w2[ 1]);}
+		{ b = rotateRight( b, 30);  e -= s1(a, b, c, d,w2[ 0]);}
+
+		hIn.save(a, b, c, d, e);
+		a = s.a; b = s.b; c = s.c; d = s.d; e = s.e;
+
+	  if (t == 58) {
+		{ b += s3(c, d, e, a,w2[ 58]);  d = rotateLeft( d, 30);}
+		{ a += s3(b, c, d, e,w2[ 59]);  c = rotateLeft( c, 30);}
+
+		{ e += s4(a, b, c, d,w2[ 60]);  b = rotateLeft( b, 30);}
+		{ d += s4(e, a, b, c,w2[ 61]);  a = rotateLeft( a, 30);}
+		{ c += s4(d, e, a, b,w2[ 62]);  e = rotateLeft( e, 30);}
+		{ b += s4(c, d, e, a,w2[ 63]);  d = rotateLeft( d, 30);}
+		{ a += s4(b, c, d, e,w2[ 64]);  c = rotateLeft( c, 30);}
+	  }
+		{ e += s4(a, b, c, d,w2[ 65]);  b = rotateLeft( b, 30);}
+		{ d += s4(e, a, b, c,w2[ 66]);  a = rotateLeft( a, 30);}
+		{ c += s4(d, e, a, b,w2[ 67]);  e = rotateLeft( e, 30);}
+		{ b += s4(c, d, e, a,w2[ 68]);  d = rotateLeft( d, 30);}
+		{ a += s4(b, c, d, e,w2[ 69]);  c = rotateLeft( c, 30);}
+		{ e += s4(a, b, c, d,w2[ 70]);  b = rotateLeft( b, 30);}
+		{ d += s4(e, a, b, c,w2[ 71]);  a = rotateLeft( a, 30);}
+		{ c += s4(d, e, a, b,w2[ 72]);  e = rotateLeft( e, 30);}
+		{ b += s4(c, d, e, a,w2[ 73]);  d = rotateLeft( d, 30);}
+		{ a += s4(b, c, d, e,w2[ 74]);  c = rotateLeft( c, 30);}
+		{ e += s4(a, b, c, d,w2[ 75]);  b = rotateLeft( b, 30);}
+		{ d += s4(e, a, b, c,w2[ 76]);  a = rotateLeft( a, 30);}
+		{ c += s4(d, e, a, b,w2[ 77]);  e = rotateLeft( e, 30);}
+		{ b += s4(c, d, e, a,w2[ 78]);  d = rotateLeft( d, 30);}
+		{ a += s4(b, c, d, e,w2[ 79]);  c = rotateLeft( c, 30);}
+
+		// @formatter:on
+		hTmp.save(hIn.a + a, hIn.b + b, hIn.c + c, hIn.d + d, hIn.e + e);
+	}
+
+	private static int s1(int a, int b, int c, int d, int w_t) {
+		return rotateLeft(a, 5)
+				// f: 0 <= t <= 19
+				+ ((b & c) | ((~b) & d))
+				+ 0x5A827999 + w_t;
+	}
+
+	private static int s2(int a, int b, int c, int d, int w_t) {
+		return rotateLeft(a, 5)
+				// f: 20 <= t <= 39
+				+ (b ^ c ^ d)
+				+ 0x6ED9EBA1 + w_t;
+	}
+
+	private static int s3(int a, int b, int c, int d, int w_t) {
+		return rotateLeft(a, 5)
+				// f: 40 <= t <= 59
+				+ ((b & c) | (b & d) | (c & d))
+				+ 0x8F1BBCDC + w_t;
+	}
+
+	private static int s4(int a, int b, int c, int d, int w_t) {
+		return rotateLeft(a, 5)
+				// f: 60 <= t <= 79
+				+ (b ^ c ^ d)
+				+ 0xCA62C1D6 + w_t;
+	}
+
+	private static boolean eq(State q, State r) {
+		return q.a == r.a
+				&& q.b == r.b
+				&& q.c == r.c
+				&& q.d == r.d
+				&& q.e == r.e;
+	}
+
+	private void finish() {
+		int bufferLen = (int) (length & 63);
+		if (bufferLen > 55) {
+			// Last block is too small; pad, compress, pad another block.
+			buffer[bufferLen++] = (byte) 0x80;
+			Arrays.fill(buffer, bufferLen, 64, (byte) 0);
+			compress(buffer, 0);
+			Arrays.fill(buffer, 0, 56, (byte) 0);
+		} else {
+			// Last block can hold padding and length.
+			buffer[bufferLen++] = (byte) 0x80;
+			Arrays.fill(buffer, bufferLen, 56, (byte) 0);
+		}
+
+		// SHA-1 appends the length of the message in bits after the
+		// padding block (above). Here length is in bytes. Multiply by
+		// 8 by shifting by 3 as part of storing the 64 bit byte length
+		// into the two words expected in the trailer.
+		NB.encodeInt32(buffer, 56, (int) (length >>> (32 - 3)));
+		NB.encodeInt32(buffer, 60, (int) (length << 3));
+		compress(buffer, 0);
+
+		if (foundCollision) {
+			ObjectId id = h.toObjectId();
+			LOG.warn(MessageFormat.format(JGitText.get().sha1CollisionDetected,
+					id.name()));
+			throw new Sha1CollisionException(id);
+		}
+	}
+
+	/**
+	 * Finish the digest and return the resulting hash.
+	 * <p>
+	 * Once {@code digest()} is called, this instance should be discarded.
+	 *
+	 * @return the bytes for the resulting hash.
+	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
+	 *             if a collision was detected and safeHash is false.
+	 */
+	@Override
+	public byte[] digest() throws Sha1CollisionException {
+		finish();
+
+		byte[] b = new byte[20];
+		NB.encodeInt32(b, 0, h.a);
+		NB.encodeInt32(b, 4, h.b);
+		NB.encodeInt32(b, 8, h.c);
+		NB.encodeInt32(b, 12, h.d);
+		NB.encodeInt32(b, 16, h.e);
+		return b;
+	}
+
+	/**
+	 * Finish the digest and return the resulting hash.
+	 * <p>
+	 * Once {@code digest()} is called, this instance should be discarded.
+	 *
+	 * @return the ObjectId for the resulting hash.
+	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
+	 *             if a collision was detected and safeHash is false.
+	 */
+	@Override
+	public ObjectId toObjectId() throws Sha1CollisionException {
+		finish();
+		return h.toObjectId();
+	}
+
+	/**
+	 * Finish the digest and return the resulting hash.
+	 * <p>
+	 * Once {@code digest()} is called, this instance should be discarded.
+	 *
+	 * @param id
+	 *            destination to copy the digest to.
+	 * @throws org.eclipse.jgit.util.sha1.Sha1CollisionException
+	 *             if a collision was detected and safeHash is false.
+	 */
+	@Override
+	public void digest(MutableObjectId id) throws Sha1CollisionException {
+		finish();
+		id.set(h.a, h.b, h.c, h.d, h.e);
+	}
+
+	/**
+	 * Check if a collision was detected.
+	 *
+	 * <p>
+	 * This method only returns an accurate result after the digest was obtained
+	 * through {@link #digest()}, {@link #digest(MutableObjectId)} or
+	 * {@link #toObjectId()}, as the hashing function must finish processing to
+	 * know the final state.
+	 *
+	 * @return {@code true} if a likely collision was detected.
+	 */
+	@Override
+	public boolean hasCollision() {
+		return foundCollision;
+	}
+
+	/**
+	 * Reset this instance to compute another hash.
+	 *
+	 * @return {@code this}.
+	 */
+	@Override
+	public SHA1 reset() {
+		h.init();
+		length = 0;
+		foundCollision = false;
+		return this;
+	}
+
+	private static final class State {
+		int a;
+		int b;
+		int c;
+		int d;
+		int e;
+
+		final void init() {
+			// Magic initialization constants defined by FIPS180.
+			save(0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0);
+		}
+
+		final void save(int a1, int b1, int c1, int d1, int e1) {
+			a = a1;
+			b = b1;
+			c = c1;
+			d = d1;
+			e = e1;
+		}
+
+		ObjectId toObjectId() {
+			return new ObjectId(a, b, c, d, e);
+		}
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java
new file mode 100644
index 0000000..4599ac0
--- /dev/null
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/SHA1Native.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2022, 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
+ * https://www.eclipse.org/org/documents/edl-v10.php.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+package org.eclipse.jgit.util.sha1;
+
+import java.security.MessageDigest;
+
+import org.eclipse.jgit.lib.Constants;
+import org.eclipse.jgit.lib.MutableObjectId;
+import org.eclipse.jgit.lib.ObjectId;
+
+/**
+ * SHA1 implementation using native implementation from JDK. It doesn't support
+ * collision detection but is faster than the pure Java implementation.
+ */
+class SHA1Native extends SHA1 {
+
+	private final MessageDigest md;
+
+	SHA1Native() {
+		md = Constants.newMessageDigest();
+	}
+
+	@Override
+	public void update(byte b) {
+		md.update(b);
+	}
+
+	@Override
+	public void update(byte[] in) {
+		md.update(in);
+	}
+
+	@Override
+	public void update(byte[] in, int p, int len) {
+		md.update(in, p, len);
+	}
+
+	@Override
+	public byte[] digest() throws Sha1CollisionException {
+		return md.digest();
+	}
+
+	@Override
+	public ObjectId toObjectId() throws Sha1CollisionException {
+		return ObjectId.fromRaw(md.digest());
+	}
+
+	@Override
+	public void digest(MutableObjectId id) throws Sha1CollisionException {
+		id.fromRaw(md.digest());
+	}
+
+	@Override
+	public SHA1 reset() {
+		md.reset();
+		return this;
+	}
+
+	@Override
+	public SHA1 setDetectCollision(boolean detect) {
+		return this;
+	}
+
+	@Override
+	public boolean hasCollision() {
+		return false;
+	}
+}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/Sha1CollisionException.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/Sha1CollisionException.java
index ce95ba5..fc8d7ab 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/Sha1CollisionException.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/sha1/Sha1CollisionException.java
@@ -16,7 +16,7 @@
 import org.eclipse.jgit.lib.ObjectId;
 
 /**
- * Thrown by {@link org.eclipse.jgit.util.sha1.SHA1} if it detects a likely hash
+ * Thrown by {@link org.eclipse.jgit.util.sha1.SHA1Java} if it detects a likely hash
  * collision.
  *
  * @since 4.7
diff --git a/pom.xml b/pom.xml
index 1d1ef33..f67d261 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>5.12.1-SNAPSHOT</version>
+  <version>5.13.2-SNAPSHOT</version>
 
   <name>JGit - Parent</name>
   <url>${jgit-url}</url>
@@ -151,27 +151,26 @@
     <maven.compiler.target>1.8</maven.compiler.target>
     <bundle-manifest>${project.build.directory}/META-INF/MANIFEST.MF</bundle-manifest>
 
-    <jgit-last-release-version>5.11.0.202103091610-r</jgit-last-release-version>
-    <apache-sshd-version>2.6.0</apache-sshd-version>
+    <jgit-last-release-version>5.12.0.202106070339-r</jgit-last-release-version>
+    <apache-sshd-version>2.7.0</apache-sshd-version>
     <jsch-version>0.1.55</jsch-version>
     <jzlib-version>1.1.1</jzlib-version>
-    <javaewah-version>1.1.7</javaewah-version>
-    <junit-version>4.13</junit-version>
+    <javaewah-version>1.1.13</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.19</commons-compress-version>
+    <commons-compress-version>1.21</commons-compress-version>
     <osgi-core-version>4.3.1</osgi-core-version>
     <servlet-api-version>3.1.0</servlet-api-version>
-    <jetty-version>9.4.41.v20210516</jetty-version>
+    <jetty-version>9.4.43.v20210629</jetty-version>
     <japicmp-version>0.15.3</japicmp-version>
     <httpclient-version>4.5.13</httpclient-version>
     <httpcore-version>4.4.14</httpcore-version>
     <slf4j-version>1.7.30</slf4j-version>
-    <log4j-version>1.2.15</log4j-version>
     <maven-javadoc-plugin-version>3.3.1</maven-javadoc-plugin-version>
     <tycho-extras-version>1.7.0</tycho-extras-version>
-    <gson-version>2.8.6</gson-version>
-    <bouncycastle-version>1.65</bouncycastle-version>
+    <gson-version>2.8.8</gson-version>
+    <bouncycastle-version>1.69</bouncycastle-version>
     <spotbugs-maven-plugin-version>4.3.0</spotbugs-maven-plugin-version>
     <maven-project-info-reports-plugin-version>3.1.2</maven-project-info-reports-plugin-version>
     <maven-jxr-plugin-version>3.1.1</maven-jxr-plugin-version>
@@ -179,6 +178,8 @@
     <maven-surefire-report-plugin-version>${maven-surefire-plugin-version}</maven-surefire-report-plugin-version>
     <maven-compiler-plugin-version>3.8.1</maven-compiler-plugin-version>
     <plexus-compiler-version>2.8.8</plexus-compiler-version>
+    <hamcrest-version>2.2</hamcrest-version>
+    <assertj-version>3.20.2</assertj-version>
 
     <!-- Properties to enable jacoco code coverage analysis -->
     <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
@@ -705,7 +706,7 @@
       <dependency>
         <groupId>org.tukaani</groupId>
         <artifactId>xz</artifactId>
-        <version>1.8</version>
+        <version>1.9</version>
         <optional>true</optional>
       </dependency>
 
@@ -741,35 +742,11 @@
 
       <dependency>
         <groupId>org.slf4j</groupId>
-        <artifactId>slf4j-log4j12</artifactId>
+        <artifactId>slf4j-simple</artifactId>
         <version>${slf4j-version}</version>
       </dependency>
 
       <dependency>
-        <groupId>log4j</groupId>
-        <artifactId>log4j</artifactId>
-        <version>${log4j-version}</version>
-        <exclusions>
-          <exclusion>
-            <groupId>javax.mail</groupId>
-            <artifactId>mail</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>javax.jms</groupId>
-            <artifactId>jms</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>com.sun.jdmk</groupId>
-            <artifactId>jmxtools</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>com.sun.jmx</groupId>
-            <artifactId>jmxri</artifactId>
-          </exclusion>
-        </exclusions>
-      </dependency>
-
-      <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
         <version>${gson-version}</version>
@@ -784,7 +761,13 @@
       <dependency>
         <groupId>org.bouncycastle</groupId>
         <artifactId>bcprov-jdk15on</artifactId>
-        <version>1.65.01</version>
+        <version>${bouncycastle-version}</version>
+      </dependency>
+
+      <dependency>
+        <groupId>org.bouncycastle</groupId>
+        <artifactId>bcutil-jdk15on</artifactId>
+        <version>${bouncycastle-version}</version>
       </dependency>
 
       <dependency>
@@ -796,7 +779,7 @@
       <dependency>
         <groupId>org.assertj</groupId>
         <artifactId>assertj-core</artifactId>
-        <version>3.14.0</version>
+        <version>${assertj-version}</version>
       </dependency>
     </dependencies>
   </dependencyManagement>