Eclipse JGit: Java implementation of Git 5.6.0 Release Review

Type
Release
State
Successful
End Date of the Review Period

Reviews run for a minimum of one week. The outcome of the review is decided on this date. This is the last day to make comments or ask questions about this review.

Release

5.6.0

Description

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

     
Conforms To UI/UX Guidelines
Not verified
This release is part of Eclipse IDE 2019-12