Eclipse JGit: Java implementation of Git 5.0.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.0.0

Description

Features

  • Fetch: Basic support for protocol v2 of the fetch-pack/upload-pack protocol. This protocol is described in the Git project in "Documentation/technical/protocol-v2.txt".

    Notes:

    - 534847 AdvertiseRefsHook is not executed for v2, to be replaced by an appropriate hook

    - change120007 support for shallow fetch using protocol v2 is not complete
  • Add protocol v2 support in jgit daemon

    With this patch, a server spawned by jgit daemon can be accessed using protocol v2 from a Git client that supports it (for example, "git" with the appropriate patches, to be released with git 2.18). This is only activated if the repository's config has "protocol.version" be 2.
  • Store in IndexChangedEvent if it was caused by JGit itself

    This allows to differentiate if index was changed by an external git command or by JGit itself.
  • 358206 Handle Gerrit Change-Ids for merge commits
  • UploadPack: basic support for filtering by blob size. This is incomplete in that the filter-by-sparse-specification feature also supported by Git is not included yet.
  • Implement --force option in FetchCommand and CLI fetch command

Performance Improvements

  • 388582 Skip ignored directories in FileTreeIterator
  • 532300 Significantly speed up FileTreeIterator on Windows
  • Configure WindowCache settings to use in JGit CLI.

    Set the same defaults as in EGit. Use mmap to map git packfiles into memory. Avoids allocating JGit buffer cache on the Java heap.

Fixes

  • 423206 Make JGit describe behaves same as c-git for lightweight tags
  • 535672 Ensure Jsch checks all configured algorithms
  • 535655 Validate branch names on branch creation
  • 533549 Don't prune symbolic refs when fetch.prune = true
  • Use a secure random generator to seed nonce for digest authentication
  • Retry stale NFS file handles on .git/config file (https://git.eclipse.org/r/#/c/120973/)
  • 529463 ssh: Kill the external process when we're done instead of waiting forever
  • Allow '@' as last character of ref. Previously @ was allowed e.g. in branch names, but not as the last character.
  • Don't throw an exception if a pre-push hook is ignored.
  • LFS: Fix potential NPE in LfsPrePushHook
  • FS#runProcess: Fix OutputStream left unclosed after IOException

Incompatible Changes

  • Remove deprecated Repository#notifyIndexChanged

    Implementors should now override Repository#notifyIndexChanged(boolean)
  • Remove deprecated LfsProtocolServlet#getLargeFileRepository

    Use LfsProtocolServlet##getLargeFileRepository(LfsRequest, String, String) instead.
  • Remove deprecated Lfs#Lfs(Path)

    Use Lfs#Lfs(Repository) instead.
  • Remove deprecated StreamCopyThread#flush
  • Remove deprecated SafeBufferedOutputStream

    Use Java 8 BufferedOutputStream instead.
  • Remove deprecated EolCanonicalizingInputStream

    Use AutoLFInputStream instead.
  • Remove deprecated FileUtils#relativize(String, String)

    Use the more-clearly-named FileUtils#relativizeNativePath(String, String) instead, or directly call FileUtils#relativizePath(String, String, String, boolean).
  • Remove deprecated FileUtil using Java 7 NIO
  • Remove deprecated TreeWalk#getEolStreamType

    Use TreeWalk#getEolStreamType(OperationType) instead.
  • Remove deprecated FileTreeIterator(WorkingTreeIterator, File, FS)

    Use FileTreeIterator#FileTreeIterator(FileTreeIterator, File, FS) instead.
  • Remove deprecated TransportHttp#httpOpen(String, URL)

    Use TransportHttp#httpOpen(String, URL, AcceptEncoding) instead.
  • Remove deprecated ResolveMerger#processEntry method
  • Remove deprecated Repository#getRef

    Use Repository#exactRef(String) or Repository#findRef(String) instead.
  • Remove deprecated BitmapBuilder#add

    Use BitmapBuilder#or or BitmapBuilder#addObject instead.
  • Remove deprecated LockFile(File, FS) constructor

    Use org.eclipse.jgit.internal.storage.file.LockFile#LockFile(File) instead.
  • Remove deprecated IgnoreNode#isIgnored method

    Parameter negateFirstMatch is not honored anymore
  • Remove deprecated Statistics, UploadPackLogger, UploadPackLoggerChain

    Use PackStatistics and PostUploadHook and PostUploadHookChain instead.
  • Remove UploadPack#getPackStatistics

    Use #getStatistics instead
  • Remove UploadPack#getLogger and UploadPack#setLogger
  • Remove deprecated StoredObjectRepresentationnotAvailableException ctor

    Use #StoredObjectRepresentationNotAvailableException(ObjectToPack, Throwable) instead.
  • Remove deprecated ArchiveCommand#putEntry method

    Use #putEntry(Closeable, ObjectId, String, FileMode, ObjectLoader)} instead.
  • Fix misspelled class name: EmtpyCommitException -> EmptyCommitException
  • RemoteAddCommand#setName(String) and #setUri(URIish): return RemoteAddCommand to allow chaining.

Build and Release Engineering

  • Update to latest Photon Orbit R20180606145124
  • Update maven plugins to fix Zip Slip vulnerability
  • Bazel: Add a target to build jgit commandline tool
  • Use eclipse compiler in Maven build. Define profiles "ecj" for using Eclipse compiler and "javac" for using javac including errorprone. By default ecj will be used.
  • Upgrade error_prone_core to 2.3.1
  • Update SUA to current version.

 

Conforms To UI/UX Guidelines
Not verified
This release is part of Eclipse Photon