Eclipse JGit: Java implementation of Git 5.6.0

Features

Reftable

  • Implement FileReftableDatabase

    Reftable is a binary, block-based storage format for the ref-database. It provides several advantages over the traditional packed + loose refs storage

    Storage format:
    • O(1) write performance, even for deletions and transactions.
    • atomic updates to the ref database.
    • O(log N) lookup and prefix scans
    • free from restrictions imposed by the file system: it is case-sensitive even on case-insensitive file systems, and has no inherent limitations for directory/file conflicts
  • prefix compression reduces space usage for repetitive ref names, such as gerrit's refs/changes/xx/xxxxx format.
  • FileReftableDatabase is based on FileReftableStack, which does compactions inline. This is simple, and has good median performance, but every so often it will rewrite the entire ref database.
  • Add FileRepository#convertToReftable so existing testdata can be reused.
  • pgm: add write stats to BenchmarkReftable
  • pgm: add command to convert repo to reftable
  • reftable: enforce ascending order in sortAndWriteRefs
  • Documentation/technical/reftable: document rename in reflog
  • Introduce RefDatabase#hasFastTipsWithSha1

Other Features

  • 553471 Add ability to redirect stderr from git hooks
  • 553469 Add possibility to get pure stderr output from AbortedByHookException
  • 500266 Support for core.hooksPath
  • JGit pgm: Add support for excluding paths from Git log command
  • JGit pgm: Format blame output to match canonical git
  • 552173 pgm: Add --mirror option to clone command
  • 552173 Implement mirror option in CloneCommand
  • RepositoryCache: don't require HEAD in git repositories using reftable
  • 552467 DiffFormatter: support core.quotePath = false
  • 550878 IndexDiff/SubmoduleWalk: make the RepositoryBuilder configurable
  • transport: Merge BaseReceivePack into ReceivePack
  • 551850 Store filesystem timestamp resolution in extra jgit config $XDG_CONFIG_HOME/jgit/config
  • 550335 GPG: implement more OpenPGP UserId matching formats
  • ProtocolV2Parser: Introduce advertise sideband-all option
  • PackWriter/Statistics: Report offloaded size
  • CachedPackUriProvider: Add size to the pack information
  • http: Allow specifying a custom error handler for UploadPack
  • UploadPack: Introduce ErrorWriter
  • 549832 Apache HTTP: support proxy authentication
  • DfsCachedPack: Add accessor for packfile object
  • dfs: Take size as long instead of int in the DfsBlockCache

Performance and memory consumption improvements

  • BitmappedReachabilityChecker: Use only one bitmap for the whole check
  • checkNotAdvertisedWants: Be lazy converting Ref to RevCommit to reduce the latency for reachability checks over big sets of references
  • UploadPack: Prioritize references for non-advertised wants checks

Bug Fixes

  • 434330 Make blame work correctly on merge conflicts
  • [spotbugs] Fix potential NPE in FSTest
  • UploadPackTest: Fix unused parameter in checkUnadvertisedIfUnallowed
  • TopoSortGenerator: simplify first-parent handling
  • 552160 RewriteGenerator: avoid adding null parent to avoid NPE
  • 521613 IndexDiff/SubmoduleWalk: handle submodule.<name>.ignore correctly
  • BaseReceivePack: Add hasReceivedPack method to enable avoiding IllegalStateException if getPackSize is called when the pack size is not set
  • 551850 Prepend hostname to config subsection used to store file timestamp resolution
  • 552636 WorkingTreeModifiedEvent: must be fired explicitly after merge
  • 549690 HttpSupport.proxyFor(): use only scheme, host, and port
  • 552288 GpgKeyLocator: Return a signing key for a user instead of the master key
  • 552288 GpgKeyLocator: Return subkeys instead of the first key for subkeys
  • AppServer: Stop using deprecated SslContextFactory constructor
  • IndexDiff: close SubmoduleWalk and use already loaded DirCache
  • CachedPackUriProvider: size should be a long (not an int)
  • 551664 Fix parsing of core.logAllRefUpdates
  • Fix NPE in DfsPackCompactor.compactReftables
  • Fire WorkingTreeModifiedEvent if cherry-pick failed with conflicts
  • Remove an old work-around for core.autocrlf = input
  • ReceivePack: Prevent pointing a branch to a non-commit object

Build and Release Engineering

  • Update bouncycastle version to 1.64
  • Upgrade Jetty to 9.4.22.v20191022
  • Use Java 8 source and target in Maven
  • Update Orbit to R20191126223242 for 2019-12
  • Upgrade maven-enforcer-plugin to 3.0.0-M3
  • Upgrade maven-jar-plugin to 3.2.0
  • Upgrade maven-source-plugin to 3.2.0
  • Upgrade jacoco-maven-plugin to 0.8.5
  • Upgrade ecj plugin to 3.19.0
  • Upgrade eclipse-jarsigner-plugin to 1.1.7
  • Upgrade wagon-ssh to 3.3.4
  • Update Tycho to 1.5.1
  • Require Maven version 3.6.2
  • Bazel: Bump bazel version to 1.0.0
  • Bazel: Use java_plugin and java_binary from @rules_java in jmh.bzl
  • Bazel: Reuse version from .bazelversion for minimum used version check
  • Move KetchSystem.delay to FileUtils.
  • Fix benchmark pom.xml to include distribution managment config
  • Run JMH benchmarks using bazel
  • Benchmark for creating files and FileSnapshots
  • Implement benchmark for looking up FileStore of a given Path
  • JMH benchmark for SimpleLruCache
  • Create 4.14 staging target platform
  • Rename servlet-api-3_1 to match Gerrit master
  • Update Eclipse SUA to latest 2.0 version

     
Release Date
Release Type
Minor release
This release is part of Eclipse IDE 2019-12