Blame CHANGELOG.md

Packit Service 20376f
v0.26.8
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This as a security release fixing the following list of issues:
Packit Service 20376f
Packit Service 20376f
- The function family `git__strtol` is used to parse integers
Packit Service 20376f
  from a buffer. As the functions do not take a buffer length as
Packit Service 20376f
  argument, they will scan either until the end of the current
Packit Service 20376f
  number or until a NUL byte is encountered. Many callers have
Packit Service 20376f
  been misusing the function and called it on potentially
Packit Service 20376f
  non-NUL-terminated buffers, resulting in possible out-of-bounds
Packit Service 20376f
  reads. Callers have been fixed to use `git__strntol` functions
Packit Service 20376f
  instead and `git__strtol` functions were removed.
Packit Service 20376f
Packit Service 20376f
- The function `git__strntol64` relied on the undefined behavior
Packit Service 20376f
  of signed integer overflows. While the code tried to detect
Packit Service 20376f
  such overflows after they have happened, this is unspecified
Packit Service 20376f
  behavior and may lead to weird behavior on uncommon platforms.
Packit Service 20376f
Packit Service 20376f
- In the case where `git__strntol32` was unable to parse an
Packit Service 20376f
  integer because it doesn't fit into an `int32_t`, it printed an
Packit Service 20376f
  error message containing the string that is currently being
Packit Service 20376f
  parsed. The code didn't truncate the string though, which
Packit Service 20376f
  caused it to print the complete string until a NUL byte is
Packit Service 20376f
  encountered and not only the currently parsed number. In case
Packit Service 20376f
  where the string was not NUL terminated, this could have lead
Packit Service 20376f
  to an out-of-bounds read.
Packit Service 20376f
Packit Service 20376f
- When parsing tags, all unknown fields that appear before the
Packit Service 20376f
  tag message are skipped. This skipping is done by using a plain
Packit Service 20376f
  `strstr(buffer, "\n\n")` to search for the two newlines that
Packit Service 20376f
  separate tag fields from tag message. As it is not possible to
Packit Service 20376f
  supply a buffer length to `strstr`, this call may skip over the
Packit Service 20376f
  buffer's end and thus result in an out of bounds read. As
Packit Service 20376f
  `strstr` may return a pointer that is out of bounds, the
Packit Service 20376f
  following computation of `buffer_end - buffer` will overflow
Packit Service 20376f
  and result in an allocation of an invalid length. Note that
Packit Service 20376f
  when reading objects from the object database, we make sure to
Packit Service 20376f
  always NUL terminate them, making the use of `strstr` safe.
Packit Service 20376f
Packit Service 20376f
- When parsing the "encoding" field of a commit, we may perform
Packit Service 20376f
  an out of bounds read due to using `git__prefixcmp` instead of
Packit Service 20376f
  `git__prefixncmp`. This can result in the parsed commit object
Packit Service 20376f
  containing uninitialized data in both its message encoding and
Packit Service 20376f
  message fields. Note that when reading objects from the object
Packit Service 20376f
  database, we make sure to always NUL terminate them, making the
Packit Service 20376f
  use of `strstr` safe.
Packit Service 20376f
Packit Service 20376f
v0.26.7
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing the following list of issues:
Packit Service 20376f
Packit Service 20376f
- Submodule URLs and paths with a leading "-" are now ignored.
Packit Service 20376f
  This is due to the recently discovered CVE-2018-17456, which
Packit Service 20376f
  can lead to arbitrary code execution in upstream git. While
Packit Service 20376f
  libgit2 itself is not vulnerable, it can be used to inject
Packit Service 20376f
  options in an implementation which performs a recursive clone
Packit Service 20376f
  by executing an external command.
Packit Service 20376f
Packit Service 20376f
- When running repack while doing repo writes,
Packit Service 20376f
  `packfile_load__cb()` could see some temporary files in the
Packit Service 20376f
  directory that were bigger than the usual, and makes `memcmp`
Packit Service 20376f
  overflow on the `p->pack_name` string. This issue was reported
Packit Service 20376f
  and fixed by bisho.
Packit Service 20376f
Packit Service 20376f
- The configuration file parser used unbounded recursion to parse
Packit Service 20376f
  multiline variables, which could lead to a stack overflow. The
Packit Service 20376f
  issue was reported by the oss-fuzz project, issue 10048 and
Packit Service 20376f
  fixed by Nelson Elhage.
Packit Service 20376f
Packit Service 20376f
- The fix to the unbounded recursion introduced a memory leak in
Packit Service 20376f
  the config parser. While this leak was never in a public
Packit Service 20376f
  release, the oss-fuzz project reported this as issue 10127. The
Packit Service 20376f
  fix was implemented by Nelson Elhage and Patrick Steinhardt.
Packit Service 20376f
Packit Service 20376f
- When parsing "ok" packets received via the smart protocol, our
Packit Service 20376f
  parsing code did not correctly verify the bounds of the
Packit Service 20376f
  packets, which could result in a heap-buffer overflow. The
Packit Service 20376f
  issue was reported by the oss-fuzz project, issue 9749 and
Packit Service 20376f
  fixed by Patrick Steinhardt.
Packit Service 20376f
Packit Service 20376f
- The parsing code for the smart protocol has been tightened in
Packit Service 20376f
  general, fixing heap-buffer overflows when parsing the packet
Packit Service 20376f
  type as well as for "ACK" and "unpack" packets. The issue was
Packit Service 20376f
  discovered and fixed by Patrick Steinhardt.
Packit Service 20376f
Packit Service 20376f
- Fixed potential integer overflows on platforms with 16 bit
Packit Service 20376f
  integers when parsing packets for the smart protocol. The issue
Packit Service 20376f
  was discovered and fixed by Patrick Steinhardt.
Packit Service 20376f
Packit Service 20376f
- Fixed potential NULL pointer dereference when parsing
Packit Service 20376f
  configuration files which have "include.path" statements
Packit Service 20376f
  without a value.
Packit Service 20376f
Packit Service 20376f
v0.26.6
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing out-of-bounds reads when
Packit Service 20376f
processing smart-protocol "ng" packets.
Packit Service 20376f
Packit Service 20376f
When parsing an "ng" packet, we keep track of both the current position
Packit Service 20376f
as well as the remaining length of the packet itself. But instead of
Packit Service 20376f
taking care not to exceed the length, we pass the current pointer's
Packit Service 20376f
position to `strchr`, which will search for a certain character until
Packit Service 20376f
hitting NUL. It is thus possible to create a crafted packet which
Packit Service 20376f
doesn't contain a NUL byte to trigger an out-of-bounds read.
Packit Service 20376f
Packit Service 20376f
The issue was discovered by the oss-fuzz project, issue 9406.
Packit Service 20376f
Packit Service 20376f
v0.26.5
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing out-of-bounds reads when
Packit Service 20376f
reading objects from a packfile. This corresponds to
Packit Service 20376f
CVE-2018-10887 and CVE-2018-10888, which were both reported by
Packit Service 20376f
Riccardo Schirone.
Packit Service 20376f
Packit Service 20376f
When packing objects into a single so-called packfile, objects
Packit Service 20376f
may not get stored as complete copies but instead as deltas
Packit Service 20376f
against another object "base". A specially crafted delta object
Packit Service 20376f
could trigger an integer overflow and thus bypass our input
Packit Service 20376f
validation, which may result in copying memory before or after
Packit Service 20376f
the base object into the final deflated object. This may lead to
Packit Service 20376f
objects containing copies of system memory being written into the
Packit Service 20376f
object database. As the hash of those objects cannot be easily
Packit Service 20376f
controlled by the attacker, it is unlikely that any of those
Packit Service 20376f
objects will be valid and referenced by the commit graph.
Packit Service 20376f
Packit Service 20376f
Note that the error could also be triggered by the function
Packit Service 20376f
`git_apply__patch`. But as this function is not in use outside of
Packit Service 20376f
our test suite, it is not a possible attack vector.
Packit Service 20376f
Packit Service 20376f
v0.26.4
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing insufficient validation of submodule names
Packit Service 20376f
(CVE-2018-11235, reported by Etienne Stalmans) and disallows `.gitmodules` files
Packit Service 20376f
as symlinks.
Packit Service 20376f
Packit Service 20376f
While submodule names come from the untrusted ".gitmodules" file, we blindly
Packit Service 20376f
append the name to "$GIT_DIR/modules" to construct the final path of the
Packit Service 20376f
submodule repository. In case the name contains e.g. "../", an adversary would
Packit Service 20376f
be able to escape your repository and write data at arbitrary paths. In
Packit Service 20376f
accordance with git, we now enforce some rules for submodule names which will
Packit Service 20376f
cause libgit2 to ignore these malicious names.
Packit Service 20376f
Packit Service 20376f
Adding a symlink as `.gitmodules` into the index from the workdir or checking
Packit Service 20376f
out such files is not allowed as this can make a Git implementation write
Packit Service 20376f
outside of the repository and bypass the `fsck` checks for CVE-2018-11235.
Packit Service 20376f
Packit Service 20376f
libgit2 is not susceptible to CVE-2018-11233.
Packit Service 20376f
Packit Service 20376f
v0.26.3
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a bugfix release. It includes the following non-exclusive list of
Packit Service 20376f
improvements, which have been backported from the master branch:
Packit Service 20376f
Packit Service 20376f
* Fix cloning of the libgit2 project with `git clone --recursive` by removing an
Packit Service 20376f
  invalid submodule from our testing data.
Packit Service 20376f
Packit Service 20376f
* Fix endianness of the port in `p_getaddrinfo()`.
Packit Service 20376f
Packit Service 20376f
* Fix handling of negative gitignore rules with wildcards.
Packit Service 20376f
Packit Service 20376f
* Fix handling of case-insensitive negative gitignore rules.
Packit Service 20376f
Packit Service 20376f
* Fix resolving references to a tag if the reference is stored with its fully
Packit Service 20376f
  resolved OID in the packed-refs file.
Packit Service 20376f
Packit Service 20376f
* Fix checkout not treating worktree files as modified when only their mode has
Packit Service 20376f
  changed.
Packit Service 20376f
Packit Service 20376f
* Fix rename detection with `GIT_DIFF_FIND_RENAMES_FROM_REWRITES`.
Packit Service 20376f
Packit Service 20376f
* Enable Windows 7 and earlier to use TLS 1.2.
Packit Service 20376f
Packit Service 20376f
v0.26.2
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing memory handling issues when reading crafted
Packit Service 20376f
repository index files. The issues allow for possible denial of service due to
Packit Service 20376f
allocation of large memory and out-of-bound reads.
Packit Service 20376f
Packit Service 20376f
As the index is never transferred via the network, exploitation requires an
Packit Service 20376f
attacker to have access to the local repository.
Packit Service 20376f
Packit Service 20376f
v0.26.1
Packit Service 20376f
---------
Packit Service 20376f
Packit Service 20376f
This is a security release fixing the following CVEs in the bundled zlib
Packit Service 20376f
library:
Packit Service 20376f
Packit Service 20376f
* CVE-2016-9843
Packit Service 20376f
* CVE-2016-9841
Packit Service 20376f
* CVE-2016-9842
Packit Service 20376f
* CVE-2016-9840
Packit Service 20376f
Packit Service 20376f
All users compiling libgit2 with the bundled zlib instead of using the
Packit Service 20376f
system-provided zlib must upgrade.
Packit Service 20376f
Packit Service 20376f
v0.26
Packit Service 20376f
-----
Packit Service 20376f
Packit Service 20376f
### Changes or improvements
Packit Service 20376f
Packit Service 20376f
* Support for opening, creating and modifying worktrees.
Packit Service 20376f
Packit Service 20376f
* We can now detect SHA1 collisions resulting from the SHAttered attack. These
Packit Service 20376f
  checks can be enabled at build time via `-DUSE_SHA1DC`.
Packit Service 20376f
Packit Service 20376f
* Fix for missing implementation of `git_merge_driver_source` getters.
Packit Service 20376f
Packit Service 20376f
* Fix for installed pkg-config file being broken when the prefix contains
Packit Service 20376f
  spaces.
Packit Service 20376f
Packit Service 20376f
* We now detect when the hashsum of on-disk objects does not match their
Packit Service 20376f
  expected hashsum.
Packit Service 20376f
Packit Service 20376f
* We now support open-ended ranges (e.g. "master..", "...master") in our
Packit Service 20376f
  revision range parsing code.
Packit Service 20376f
Packit Service 20376f
* We now correctly compute ignores with leading "/" in subdirectories.
Packit Service 20376f
Packit Service 20376f
* We now optionally call `fsync` on loose objects, packfiles and their indexes,
Packit Service 20376f
  loose references and packed reference files.
Packit Service 20376f
Packit Service 20376f
* We can now build against OpenSSL v1.1 and against LibreSSL.
Packit Service 20376f
Packit Service 20376f
* `GIT_MERGE_OPTIONS_INIT` now includes a setting to perform rename detection.
Packit Service 20376f
  This aligns this structure with the default by `git_merge` and
Packit Service 20376f
  `git_merge_trees` when `NULL` was provided for the options.
Packit Service 20376f
Packit Service 20376f
* Improvements for reading index v4 files.
Packit Service 20376f
Packit Service 20376f
* Perform additional retries for filesystem operations on Windows when files
Packit Service 20376f
  are temporarily locked by other processes.
Packit Service 20376f
Packit Service 20376f
### API additions
Packit Service 20376f
Packit Service 20376f
* New family of functions to handle worktrees:
Packit Service 20376f
Packit Service 20376f
    * `git_worktree_list()` lets you look up worktrees for a repository.
Packit Service 20376f
    * `git_worktree_lookup()` lets you get a specific worktree.
Packit Service 20376f
    * `git_worktree_open_from_repository()` lets you get the associated worktree
Packit Service 20376f
      of a repository.
Packit Service 20376f
      a worktree.
Packit Service 20376f
    * `git_worktree_add` lets you create new worktrees.
Packit Service 20376f
    * `git_worktree_prune` lets you remove worktrees from disk.
Packit Service 20376f
    * `git_worktree_lock()` and `git_worktree_unlock()` let you lock
Packit Service 20376f
      respectively unlock a worktree.
Packit Service 20376f
    * `git_repository_open_from_worktree()` lets you open a repository via
Packit Service 20376f
    * `git_repository_head_for_worktree()` lets you get the current `HEAD` for a
Packit Service 20376f
      linked worktree.
Packit Service 20376f
    * `git_repository_head_detached_for_worktree()` lets you check whether a
Packit Service 20376f
      linked worktree is in detached HEAD mode.
Packit Service 20376f
Packit Service 20376f
* `git_repository_item_path()` lets you retrieve paths for various repository
Packit Service 20376f
  files.
Packit Service 20376f
Packit Service 20376f
* `git_repository_commondir()` lets you retrieve the common directory of a
Packit Service 20376f
  repository.
Packit Service 20376f
Packit Service 20376f
* `git_branch_is_checked_out()` allows you to check whether a branch is checked
Packit Service 20376f
  out in a repository or any of its worktrees.
Packit Service 20376f
Packit Service 20376f
* `git_repository_submodule_cache_all()` and
Packit Service 20376f
  `git_repository_submodule_cache_clear()` functions allow you to prime or clear
Packit Service 20376f
  the submodule cache of a repository.
Packit Service 20376f
Packit Service 20376f
* You can disable strict hash verifications via the
Packit Service 20376f
  `GIT_OPT_ENABLE_STRICT_HASH_VERIFICATION` option with `git_libgit2_opts()`.
Packit Service 20376f
Packit Service 20376f
* You can enable us calling `fsync` for various files inside the ".git"
Packit Service 20376f
  directory by setting the `GIT_OPT_ENABLE_FSYNC_GITDIR` option with
Packit Service 20376f
  `git_libgit2_opts()`.
Packit Service 20376f
Packit Service 20376f
* You can now enable "offset deltas" when creating packfiles and negotiating
Packit Service 20376f
  packfiles with a remote server by setting `GIT_OPT_ENABLE_OFS_DELTA` option
Packit Service 20376f
  with `GIT_libgit2_opts()`.
Packit Service 20376f
Packit Service 20376f
* You can now set the default share mode on Windows for opening files using
Packit Service 20376f
  `GIT_OPT_SET_WINDOWS_SHAREMODE` option with `git_libgit2_opts()`.
Packit Service 20376f
  You can query the current share mode with `GIT_OPT_GET_WINDOWS_SHAREMODE`.
Packit Service 20376f
Packit Service 20376f
* `git_transport_smart_proxy_options()' enables you to get the proxy options for
Packit Service 20376f
  smart transports.
Packit Service 20376f
Packit Service 20376f
* The `GIT_FILTER_INIT` macro and the `git_filter_init` function are provided
Packit Service 20376f
  to initialize a `git_filter` structure.
Packit Service 20376f
Packit Service 20376f
### Breaking API changes
Packit Service 20376f
Packit Service 20376f
* `clone_checkout_strategy` has been removed from
Packit Service 20376f
  `git_submodule_update_option`. The checkout strategy used to clone will
Packit Service 20376f
  be the same strategy specified in `checkout_opts`.
Packit Service 20376f
Packit Service 20376f
v0.25
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
### Changes or improvements
Packit Service 20376f
Packit Service 20376f
* Fix repository discovery with `git_repository_discover` and
Packit Service 20376f
  `git_repository_open_ext` to match git's handling of a ceiling
Packit Service 20376f
  directory at the current directory. git only checks ceiling
Packit Service 20376f
  directories when its search ascends to a parent directory.  A ceiling
Packit Service 20376f
  directory matching the starting directory will not prevent git from
Packit Service 20376f
  finding a repository in the starting directory or a parent directory.
Packit Service 20376f
Packit Service 20376f
* Do not fail when deleting remotes in the presence of broken
Packit Service 20376f
  global configs which contain branches.
Packit Service 20376f
Packit Service 20376f
* Support for reading and writing git index v4 files
Packit Service 20376f
Packit Service 20376f
* Improve the performance of the revwalk and bring us closer to git's code.
Packit Service 20376f
Packit Service 20376f
* The reference db has improved support for concurrency and returns `GIT_ELOCKED`
Packit Service 20376f
  when an operation could not be performed due to locking.
Packit Service 20376f
Packit Service 20376f
* Nanosecond resolution is now activated by default, following git's change to
Packit Service 20376f
  do this.
Packit Service 20376f
Packit Service 20376f
* We now restrict the set of ciphers we let OpenSSL use by default.
Packit Service 20376f
Packit Service 20376f
* Users can now register their own merge drivers for use with `.gitattributes`.
Packit Service 20376f
  The library also gained built-in support for the union merge driver.
Packit Service 20376f
Packit Service 20376f
* The default for creating references is now to validate that the object does
Packit Service 20376f
  exist.
Packit Service 20376f
Packit Service 20376f
* Add `git_proxy_options` which is used by the different networking
Packit Service 20376f
  implementations to let the caller specify the proxy settings instead of
Packit Service 20376f
  relying on the environment variables.
Packit Service 20376f
Packit Service 20376f
### API additions
Packit Service 20376f
Packit Service 20376f
* You can now get the user-agent used by libgit2 using the
Packit Service 20376f
  `GIT_OPT_GET_USER_AGENT` option with `git_libgit2_opts()`.
Packit Service 20376f
  It is the counterpart to `GIT_OPT_SET_USER_AGENT`.
Packit Service 20376f
Packit Service 20376f
* The `GIT_OPT_SET_SSL_CIPHERS` option for `git_libgit2_opts()` lets you specify
Packit Service 20376f
  a custom list of ciphers to use for OpenSSL.
Packit Service 20376f
Packit Service 20376f
* `git_commit_create_buffer()` creates a commit and writes it into a
Packit Service 20376f
  user-provided buffer instead of writing it into the object db. Combine it with
Packit Service 20376f
  `git_commit_create_with_signature()` in order to create a commit with a
Packit Service 20376f
  cryptographic signature.
Packit Service 20376f
Packit Service 20376f
* `git_blob_create_fromstream()` and
Packit Service 20376f
  `git_blob_create_fromstream_commit()` allow you to create a blob by
Packit Service 20376f
  writing into a stream. Useful when you do not know the final size or
Packit Service 20376f
  want to copy the contents from another stream.
Packit Service 20376f
Packit Service 20376f
* New flags for `git_repository_open_ext`:
Packit Service 20376f
Packit Service 20376f
    * `GIT_REPOSITORY_OPEN_NO_DOTGIT` - Do not check for a repository by
Packit Service 20376f
      appending `/.git` to the `start_path`; only open the repository if
Packit Service 20376f
      `start_path` itself points to the git directory.
Packit Service 20376f
    * `GIT_REPOSITORY_OPEN_FROM_ENV` - Find and open a git repository,
Packit Service 20376f
      respecting the environment variables used by the git command-line
Packit Service 20376f
      tools. If set, `git_repository_open_ext` will ignore the other
Packit Service 20376f
      flags and the `ceiling_dirs` argument, and will allow a NULL
Packit Service 20376f
      `path` to use `GIT_DIR` or search from the current directory. The
Packit Service 20376f
      search for a repository will respect `$GIT_CEILING_DIRECTORIES`
Packit Service 20376f
      and `$GIT_DISCOVERY_ACROSS_FILESYSTEM`.  The opened repository
Packit Service 20376f
      will respect `$GIT_INDEX_FILE`, `$GIT_NAMESPACE`,
Packit Service 20376f
      `$GIT_OBJECT_DIRECTORY`, and `$GIT_ALTERNATE_OBJECT_DIRECTORIES`.
Packit Service 20376f
      In the future, this flag will also cause `git_repository_open_ext`
Packit Service 20376f
      to respect `$GIT_WORK_TREE` and `$GIT_COMMON_DIR`; currently,
Packit Service 20376f
      `git_repository_open_ext` with this flag will error out if either
Packit Service 20376f
      `$GIT_WORK_TREE` or `$GIT_COMMON_DIR` is set.
Packit Service 20376f
Packit Service 20376f
* `git_diff_from_buffer()` can create a `git_diff` object from the contents
Packit Service 20376f
  of a git-style patch file.
Packit Service 20376f
Packit Service 20376f
* `git_index_version()` and `git_index_set_version()` to get and set
Packit Service 20376f
  the index version
Packit Service 20376f
Packit Service 20376f
* `git_odb_expand_ids()` lets you check for the existence of multiple
Packit Service 20376f
  objects at once.
Packit Service 20376f
Packit Service 20376f
* The new `git_blob_dup()`, `git_commit_dup()`, `git_tag_dup()` and
Packit Service 20376f
  `git_tree_dup()` functions provide type-specific wrappers for
Packit Service 20376f
  `git_object_dup()` to reduce noise and increase type safety for callers.
Packit Service 20376f
Packit Service 20376f
* `git_reference_dup()` lets you duplicate a reference to aid in ownership
Packit Service 20376f
  management and cleanup.
Packit Service 20376f
Packit Service 20376f
* `git_signature_from_buffer()` lets you create a signature from a string in the
Packit Service 20376f
  format that appear in objects.
Packit Service 20376f
Packit Service 20376f
* `git_tree_create_updated()` lets you create a tree based on another one
Packit Service 20376f
  together with a list of updates. For the covered update cases, it's more
Packit Service 20376f
  efficient than the `git_index` route.
Packit Service 20376f
Packit Service 20376f
* `git_apply_patch()` applies hunks from a `git_patch` to a buffer.
Packit Service 20376f
Packit Service 20376f
* `git_diff_to_buf()` lets you print an entire diff directory to a buffer,
Packit Service 20376f
  similar to how `git_patch_to_buf()` works.
Packit Service 20376f
Packit Service 20376f
* `git_proxy_init_options()` is added to initialize a `git_proxy_options`
Packit Service 20376f
  structure at run-time.
Packit Service 20376f
Packit Service 20376f
* `git_merge_driver_register()`, `git_merge_driver_unregister()` let you
Packit Service 20376f
  register and unregister a custom merge driver to be used when `.gitattributes`
Packit Service 20376f
  specifies it.
Packit Service 20376f
Packit Service 20376f
* `git_merge_driver_lookup()` can be used to look up a merge driver by name.
Packit Service 20376f
Packit Service 20376f
* `git_merge_driver_source_repo()`, `git_merge_driver_source_ancestor()`,
Packit Service 20376f
  `git_merge_driver_source_ours()`, `git_merge_driver_source_theirs()`,
Packit Service 20376f
  `git_merge_driver_source_file_options()` added as accessors to
Packit Service 20376f
  `git_merge_driver_source`.
Packit Service 20376f
Packit Service 20376f
### API removals
Packit Service 20376f
Packit Service 20376f
* `git_blob_create_fromchunks()` has been removed in favour of
Packit Service 20376f
  `git_blob_create_fromstream()`.
Packit Service 20376f
Packit Service 20376f
### Breaking API changes
Packit Service 20376f
Packit Service 20376f
* `git_packbuilder_object_count` and `git_packbuilder_written` now
Packit Service 20376f
  return a `size_t` instead of a `uint32_t` for more thorough
Packit Service 20376f
  compatibility with the rest of the library.
Packit Service 20376f
Packit Service 20376f
* `git_packbuiler_progress` now provides explicitly sized `uint32_t`
Packit Service 20376f
  values instead of `unsigned int`.
Packit Service 20376f
Packit Service 20376f
* `git_diff_file` now includes an `id_abbrev` field that reflects the
Packit Service 20376f
  number of nibbles set in the `id` field.
Packit Service 20376f
Packit Service 20376f
* `git_odb_backend` now has a `freshen` function pointer.  This optional
Packit Service 20376f
  function pointer is similar to the `exists` function, but it will update
Packit Service 20376f
  a last-used marker.  For filesystem-based object databases, this updates
Packit Service 20376f
  the timestamp of the file containing the object, to indicate "freshness".
Packit Service 20376f
  If this is `NULL`, then it will not be called and the `exists` function
Packit Service 20376f
  will be used instead.
Packit Service 20376f
Packit Service 20376f
* `git_remote_connect()` now accepts `git_proxy_options` argument, and
Packit Service 20376f
  `git_fetch_options` and `git_push_options` each have a `proxy_opts` field.
Packit Service 20376f
Packit Service 20376f
* `git_merge_options` now provides a `default_driver` that can be used
Packit Service 20376f
  to provide the name of a merge driver to be used to handle files changed
Packit Service 20376f
  during a merge.
Packit Service 20376f
Packit Service 20376f
v0.24
Packit Service 20376f
-------
Packit Service 20376f
Packit Service 20376f
### Changes or improvements
Packit Service 20376f
Packit Service 20376f
* Custom merge drivers can now be registered, which allows callers to
Packit Service 20376f
  configure callbacks to honor `merge=driver` configuration in
Packit Service 20376f
  `.gitattributes`.
Packit Service 20376f
Packit Service 20376f
* Custom filters can now be registered with wildcard attributes, for
Packit Service 20376f
  example `filter=*`.  Consumers should examine the attributes parameter
Packit Service 20376f
  of the `check` function for details.
Packit Service 20376f
Packit Service 20376f
* Symlinks are now followed when locking a file, which can be
Packit Service 20376f
  necessary when multiple worktrees share a base repository.
Packit Service 20376f
Packit Service 20376f
* You can now set your own user-agent to be sent for HTTP requests by
Packit Service 20376f
  using the `GIT_OPT_SET_USER_AGENT` with `git_libgit2_opts()`.
Packit Service 20376f
Packit Service 20376f
* You can set custom HTTP header fields to be sent along with requests
Packit Service 20376f
  by passing them in the fetch and push options.
Packit Service 20376f
Packit Service 20376f
* Tree objects are now assumed to be sorted. If a tree is not
Packit Service 20376f
  correctly formed, it will give bad results. This is the git approach
Packit Service 20376f
  and cuts a significant amount of time when reading the trees.
Packit Service 20376f
Packit Service 20376f
* Filter registration is now protected against concurrent
Packit Service 20376f
  registration.
Packit Service 20376f
Packit Service 20376f
* Filenames which are not valid on Windows in an index no longer cause
Packit Service 20376f
  to fail to parse it on that OS.
Packit Service 20376f
Packit Service 20376f
* Rebases can now be performed purely in-memory, without touching the
Packit Service 20376f
  repository's workdir.
Packit Service 20376f
Packit Service 20376f
* When adding objects to the index, or when creating new tree or commit
Packit Service 20376f
  objects, the inputs are validated to ensure that the dependent objects
Packit Service 20376f
  exist and are of the correct type.  This object validation can be
Packit Service 20376f
  disabled with the GIT_OPT_ENABLE_STRICT_OBJECT_CREATION option.
Packit Service 20376f
Packit Service 20376f
* The WinHTTP transport's handling of bad credentials now behaves like
Packit Service 20376f
  the others, asking for credentials again.
Packit Service 20376f
Packit Service 20376f
### API additions
Packit Service 20376f
Packit Service 20376f
* `git_config_lock()` has been added, which allow for
Packit Service 20376f
  transactional/atomic complex updates to the configuration, removing
Packit Service 20376f
  the opportunity for concurrent operations and not committing any
Packit Service 20376f
  changes until the unlock.
Packit Service 20376f
Packit Service 20376f
* `git_diff_options` added a new callback `progress_cb` to report on the
Packit Service 20376f
  progress of the diff as files are being compared. The documentation of
Packit Service 20376f
  the existing callback `notify_cb` was updated to reflect that it only
Packit Service 20376f
  gets called when new deltas are added to the diff.
Packit Service 20376f
Packit Service 20376f
* `git_fetch_options` and `git_push_options` have gained a `custom_headers`
Packit Service 20376f
  field to set the extra HTTP header fields to send.
Packit Service 20376f
Packit Service 20376f
* `git_stream_register_tls()` lets you register a callback to be used
Packit Service 20376f
  as the constructor for a TLS stream instead of the libgit2 built-in
Packit Service 20376f
  one.
Packit Service 20376f
Packit Service 20376f
* `git_commit_header_field()` allows you to look up a specific header
Packit Service 20376f
  field in a commit.
Packit Service 20376f
Packit Service 20376f
* `git_commit_extract_signature()` extracts the signature from a
Packit Service 20376f
  commit and gives you both the signature and the signed data so you
Packit Service 20376f
  can verify it.
Packit Service 20376f
Packit Service 20376f
### API removals
Packit Service 20376f
Packit Service 20376f
* No APIs were removed in this version.
Packit Service 20376f
Packit Service 20376f
### Breaking API changes
Packit Service 20376f
Packit Service 20376f
* The `git_merge_tree_flag_t` is now `git_merge_flag_t`.  Subsequently,
Packit Service 20376f
  its members are no longer prefixed with `GIT_MERGE_TREE_FLAG` but are
Packit Service 20376f
  now prefixed with `GIT_MERGE_FLAG`, and the `tree_flags` field of the
Packit Service 20376f
  `git_merge_options` structure is now named `flags`.
Packit Service 20376f
Packit Service 20376f
* The `git_merge_file_flags_t` enum is now `git_merge_file_flag_t` for
Packit Service 20376f
  consistency with other enum type names.
Packit Service 20376f
Packit Service 20376f
* `git_cert` descendent types now have a proper `parent` member
Packit Service 20376f
Packit Service 20376f
* It is the responsibility of the refdb backend to decide what to do
Packit Service 20376f
  with the reflog on ref deletion. The file-based backend must delete
Packit Service 20376f
  it, a database-backed one may wish to archive it.
Packit Service 20376f
Packit Service 20376f
* `git_config_backend` has gained two entries. `lock` and `unlock`
Packit Service 20376f
  with which to implement the transactional/atomic semantics for the
Packit Service 20376f
  configuration backend.
Packit Service 20376f
Packit Service 20376f
* `git_index_add` and `git_index_conflict_add()` will now use the case
Packit Service 20376f
  as provided by the caller on case insensitive systems.  Previous
Packit Service 20376f
  versions would keep the case as it existed in the index.  This does
Packit Service 20376f
  not affect the higher-level `git_index_add_bypath` or
Packit Service 20376f
  `git_index_add_frombuffer` functions.
Packit Service 20376f
Packit Service 20376f
* The `notify_payload` field of `git_diff_options` was renamed to `payload`
Packit Service 20376f
  to reflect that it's also the payload for the new progress callback.
Packit Service 20376f
Packit Service 20376f
* The `git_config_level_t` enum has gained a higher-priority value
Packit Service 20376f
  `GIT_CONFIG_LEVEL_PROGRAMDATA` which represent a rough Windows equivalent
Packit Service 20376f
  to the system level configuration.
Packit Service 20376f
Packit Service 20376f
* `git_rebase_options` now has a `merge_options` field.
Packit Service 20376f
Packit Service 20376f
* The index no longer performs locking itself. This is not something
Packit Service 20376f
  users of the library should have been relying on as it's not part of
Packit Service 20376f
  the concurrency guarantees.
Packit Service 20376f
Packit Service 20376f
* `git_remote_connect()` now takes a `custom_headers` argument to set
Packit Service 20376f
  the extra HTTP header fields to send.
Packit Service 20376f
Packit Service 20376f
v0.23
Packit Service 20376f
------
Packit Service 20376f
Packit Service 20376f
### Changes or improvements
Packit Service 20376f
Packit Service 20376f
* Patience and minimal diff drivers can now be used for merges.
Packit Service 20376f
Packit Service 20376f
* Merges can now ignore whitespace changes.
Packit Service 20376f
Packit Service 20376f
* Updated binary identification in CRLF filtering to avoid false positives in
Packit Service 20376f
  UTF-8 files.
Packit Service 20376f
Packit Service 20376f
* Rename and copy detection is enabled for small files.
Packit Service 20376f
Packit Service 20376f
* Checkout can now handle an initial checkout of a repository, making
Packit Service 20376f
  `GIT_CHECKOUT_SAFE_CREATE` unnecessary for users of clone.
Packit Service 20376f
Packit Service 20376f
* The signature parameter in the ref-modifying functions has been
Packit Service 20376f
  removed. Use `git_repository_set_ident()` and
Packit Service 20376f
  `git_repository_ident()` to override the signature to be used.
Packit Service 20376f
Packit Service 20376f
* The local transport now auto-scales the number of threads to use
Packit Service 20376f
  when creating the packfile instead of sticking to one.
Packit Service 20376f
Packit Service 20376f
* Reference renaming now uses the right id for the old value.
Packit Service 20376f
Packit Service 20376f
* The annotated version of branch creation, HEAD detaching and reset
Packit Service 20376f
  allow for specifying the expression from the user to be put into the
Packit Service 20376f
  reflog.
Packit Service 20376f
Packit Service 20376f
* `git_rebase_commit` now returns `GIT_EUNMERGED` when you attempt to
Packit Service 20376f
  commit with unstaged changes.
Packit Service 20376f
Packit Service 20376f
* On Mac OS X, we now use SecureTransport to provide the cryptographic
Packit Service 20376f
  support for HTTPS connections insead of OpenSSL.
Packit Service 20376f
Packit Service 20376f
* Checkout can now accept an index for the baseline computations via the
Packit Service 20376f
  `baseline_index` member.
Packit Service 20376f
Packit Service 20376f
* The configuration for fetching is no longer stored inside the
Packit Service 20376f
  `git_remote` struct but has been moved to a `git_fetch_options`. The
Packit Service 20376f
  remote functions now take these options or the callbacks instead of
Packit Service 20376f
  setting them beforehand.
Packit Service 20376f
Packit Service 20376f
* `git_submodule` instances are no longer cached or shared across
Packit Service 20376f
  lookup. Each submodule represents the configuration at the time of
Packit Service 20376f
  loading.
Packit Service 20376f
Packit Service 20376f
* The index now uses diffs for `add_all()` and `update_all()` which
Packit Service 20376f
  gives it a speed boost and closer semantics to git.
Packit Service 20376f
Packit Service 20376f
* The ssh transport now reports the stderr output from the server as
Packit Service 20376f
  the error message, which allows you to get the "repository not
Packit Service 20376f
  found" messages.
Packit Service 20376f
Packit Service 20376f
* `git_index_conflict_add()` will remove staged entries that exist for
Packit Service 20376f
  conflicted paths.
Packit Service 20376f
Packit Service 20376f
* The flags for a `git_diff_file` will now have the `GIT_DIFF_FLAG_EXISTS`
Packit Service 20376f
  bit set when a file exists on that side of the diff.  This is useful
Packit Service 20376f
  for understanding whether a side of the diff exists in the presence of
Packit Service 20376f
  a conflict.
Packit Service 20376f
Packit Service 20376f
* The constructor for a write-stream into the odb now takes
Packit Service 20376f
  `git_off_t` instead of `size_t` for the size of the blob, which
Packit Service 20376f
  allows putting large files into the odb on 32-bit systems.
Packit Service 20376f
Packit Service 20376f
* The remote's push and pull URLs now honor the url.$URL.insteadOf
Packit Service 20376f
  configuration. This allows modifying URL prefixes to a custom
Packit Service 20376f
  value via gitconfig.
Packit Service 20376f
Packit Service 20376f
* `git_diff_foreach`, `git_diff_blobs`, `git_diff_blob_to_buffer`,
Packit Service 20376f
  and `git_diff_buffers` now accept a new binary callback of type
Packit Service 20376f
  `git_diff_binary_cb` that includes the binary diff information.
Packit Service 20376f
Packit Service 20376f
* The race condition mitigations described in `racy-git.txt` have been
Packit Service 20376f
  implemented.
Packit Service 20376f
Packit Service 20376f
* If libcurl is installed, we will use it to connect to HTTP(S)
Packit Service 20376f
  servers.
Packit Service 20376f
Packit Service 20376f
### API additions
Packit Service 20376f
Packit Service 20376f
* The `git_merge_options` gained a `file_flags` member.
Packit Service 20376f
Packit Service 20376f
* Parsing and retrieving a configuration value as a path is exposed
Packit Service 20376f
  via `git_config_parse_path()` and `git_config_get_path()`
Packit Service 20376f
  respectively.
Packit Service 20376f
Packit Service 20376f
* `git_repository_set_ident()` and `git_repository_ident()` serve to
Packit Service 20376f
  set and query which identity will be used when writing to the
Packit Service 20376f
  reflog.
Packit Service 20376f
Packit Service 20376f
* `git_config_entry_free()` frees a config entry.
Packit Service 20376f
Packit Service 20376f
* `git_config_get_string_buf()` provides a way to safely retrieve a
Packit Service 20376f
  string from a non-snapshot configuration.
Packit Service 20376f
Packit Service 20376f
* `git_annotated_commit_from_revspec()` allows to get an annotated
Packit Service 20376f
  commit from an extended sha synatx string.
Packit Service 20376f
Packit Service 20376f
* `git_repository_set_head_detached_from_annotated()`,
Packit Service 20376f
  `git_branch_create_from_annotated()` and
Packit Service 20376f
  `git_reset_from_annotated()` allow for the caller to provide an
Packit Service 20376f
  annotated commit through which they can control what expression is
Packit Service 20376f
  put into the reflog as the source/target.
Packit Service 20376f
Packit Service 20376f
* `git_index_add_frombuffer()` can now create a blob from memory
Packit Service 20376f
  buffer and add it to the index which is attached to a repository.
Packit Service 20376f
Packit Service 20376f
* The structure `git_fetch_options` has been added to determine the
Packit Service 20376f
  runtime configuration for fetching, such as callbacks, pruning and
Packit Service 20376f
  autotag behaviour. It has the runtime initializer
Packit Service 20376f
  `git_fetch_init_options()`.
Packit Service 20376f
Packit Service 20376f
* The enum `git_fetch_prune_t` has been added, letting you specify the
Packit Service 20376f
  pruning behaviour for a fetch.
Packit Service 20376f
Packit Service 20376f
* A push operation will notify the caller of what updates it indends
Packit Service 20376f
  to perform on the remote, which provides similar information to
Packit Service 20376f
  git's pre-push hook.
Packit Service 20376f
Packit Service 20376f
* `git_stash_apply()` can now apply a stashed state from the stash list,
Packit Service 20376f
  placing the data into the working directory and index.
Packit Service 20376f
Packit Service 20376f
* `git_stash_pop()` will apply a stashed state (like `git_stash_apply()`)
Packit Service 20376f
  but will remove the stashed state after a successful application.
Packit Service 20376f
Packit Service 20376f
* A new error code `GIT_EEOF` indicates an early EOF from the
Packit Service 20376f
  server. This typically indicates an error with the URL or
Packit Service 20376f
  configuration of the server, and tools can use this to show messages
Packit Service 20376f
  about failing to communicate with the server.
Packit Service 20376f
Packit Service 20376f
* A new error code `GIT_EINVALID` indicates that an argument to a
Packit Service 20376f
  function is invalid, or an invalid operation was requested.
Packit Service 20376f
Packit Service 20376f
* `git_diff_index_to_workdir()` and `git_diff_tree_to_index()` will now
Packit Service 20376f
  produce deltas of type `GIT_DELTA_CONFLICTED` to indicate that the index
Packit Service 20376f
  side of the delta is a conflict.
Packit Service 20376f
Packit Service 20376f
* The `git_status` family of functions will now produce status of type
Packit Service 20376f
  `GIT_STATUS_CONFLICTED` to indicate that a conflict exists for that file
Packit Service 20376f
  in the index.
Packit Service 20376f
Packit Service 20376f
* `git_index_entry_is_conflict()` is a utility function to determine if
Packit Service 20376f
  a given index entry has a non-zero stage entry, indicating that it is
Packit Service 20376f
  one side of a conflict.
Packit Service 20376f
Packit Service 20376f
* It is now possible to pass a keypair via a buffer instead of a
Packit Service 20376f
  path. For this, `GIT_CREDTYPE_SSH_MEMORY` and
Packit Service 20376f
  `git_cred_ssh_key_memory_new()` have been added.
Packit Service 20376f
Packit Service 20376f
* `git_filter_list_contains` will indicate whether a particular
Packit Service 20376f
  filter will be run in the given filter list.
Packit Service 20376f
Packit Service 20376f
* `git_commit_header_field()` has been added, which allows retrieving
Packit Service 20376f
  the contents of an arbitrary header field.
Packit Service 20376f
Packit Service 20376f
* `git_submodule_set_branch()` allows to set the configured branch for
Packit Service 20376f
  a submodule.
Packit Service 20376f
Packit Service 20376f
### API removals
Packit Service 20376f
Packit Service 20376f
* `git_remote_save()` and `git_remote_clear_refspecs()` have been
Packit Service 20376f
  removed. Remote's configuration is changed via the configuration
Packit Service 20376f
  directly or through a convenience function which performs changes to
Packit Service 20376f
  the configuration directly.
Packit Service 20376f
Packit Service 20376f
* `git_remote_set_callbacks()`, `git_remote_get_callbacks()` and
Packit Service 20376f
  `git_remote_set_transport()` have been removed and the remote no
Packit Service 20376f
  longer stores this configuration.
Packit Service 20376f
Packit Service 20376f
* `git_remote_set_fetch_refpecs()` and
Packit Service 20376f
  `git_remote_set_push_refspecs()` have been removed. There is no
Packit Service 20376f
  longer a way to set the base refspecs at run-time.
Packit Service 20376f
Packit Service 20376f
* `git_submodule_save()` has been removed. The submodules are no
Packit Service 20376f
  longer configured via the objects.
Packit Service 20376f
Packit Service 20376f
* `git_submodule_reload_all()` has been removed as we no longer cache
Packit Service 20376f
  submodules.
Packit Service 20376f
Packit Service 20376f
### Breaking API changes
Packit Service 20376f
Packit Service 20376f
* `git_smart_subtransport_cb` now has a `param` parameter.
Packit Service 20376f
Packit Service 20376f
* The `git_merge_options` structure member `flags` has been renamed
Packit Service 20376f
  to `tree_flags`.
Packit Service 20376f
Packit Service 20376f
* The `git_merge_file_options` structure member `flags` is now
Packit Service 20376f
  an unsigned int. It was previously a `git_merge_file_flags_t`.
Packit Service 20376f
Packit Service 20376f
* `GIT_CHECKOUT_SAFE_CREATE` has been removed.  Most users will generally
Packit Service 20376f
  be able to switch to `GIT_CHECKOUT_SAFE`, but if you require missing
Packit Service 20376f
  file handling during checkout, you may now use `GIT_CHECKOUT_SAFE |
Packit Service 20376f
  GIT_CHECKOUT_RECREATE_MISSING`.
Packit Service 20376f
Packit Service 20376f
* The `git_clone_options` and `git_submodule_update_options`
Packit Service 20376f
  structures no longer have a `signature` field.
Packit Service 20376f
Packit Service 20376f
* The following functions have removed the signature and/or log message
Packit Service 20376f
  parameters in favour of git-emulating ones.
Packit Service 20376f
Packit Service 20376f
    * `git_branch_create()`, `git_branch_move()`
Packit Service 20376f
    * `git_rebase_init()`, `git_rebase_abort()`
Packit Service 20376f
    * `git_reference_symbolic_create_matching()`,
Packit Service 20376f
      `git_reference_symbolic_create()`, `git_reference_create()`,
Packit Service 20376f
      `git_reference_create_matching()`,
Packit Service 20376f
      `git_reference_symbolic_set_target()`,
Packit Service 20376f
      `git_reference_set_target()`, `git_reference_rename()`
Packit Service 20376f
    * `git_remote_update_tips()`, `git_remote_fetch()`, `git_remote_push()`
Packit Service 20376f
    * `git_repository_set_head()`,
Packit Service 20376f
      `git_repository_set_head_detached()`,
Packit Service 20376f
      `git_repository_detach_head()`
Packit Service 20376f
    * `git_reset()`
Packit Service 20376f
Packit Service 20376f
* `git_config_get_entry()` now gives back a ref-counted
Packit Service 20376f
  `git_config_entry`. You must free it when you no longer need it.
Packit Service 20376f
Packit Service 20376f
* `git_config_get_string()` will return an error if used on a
Packit Service 20376f
  non-snapshot configuration, as there can be no guarantee that the
Packit Service 20376f
  returned pointer is valid.
Packit Service 20376f
Packit Service 20376f
* `git_note_default_ref()` now uses a `git_buf` to return the string,
Packit Service 20376f
  as the string is otherwise not guaranteed to stay allocated.
Packit Service 20376f
Packit Service 20376f
* `git_rebase_operation_current()` will return `GIT_REBASE_NO_OPERATION`
Packit Service 20376f
  if it is called immediately after creating a rebase session but before
Packit Service 20376f
  you have applied the first patch.
Packit Service 20376f
Packit Service 20376f
* `git_rebase_options` now contains a `git_checkout_options` struct
Packit Service 20376f
  that will be used for functions that modify the working directory,
Packit Service 20376f
  namely `git_rebase_init`, `git_rebase_next` and
Packit Service 20376f
  `git_rebase_abort`.  As a result, `git_rebase_open` now also takes
Packit Service 20376f
  a `git_rebase_options` and only the `git_rebase_init` and
Packit Service 20376f
  `git_rebase_open` functions take a `git_rebase_options`, where they
Packit Service 20376f
  will persist the options to subsequent `git_rebase` calls.
Packit Service 20376f
Packit Service 20376f
* The `git_clone_options` struct now has fetch options in a
Packit Service 20376f
  `fetch_opts` field instead of remote callbacks in
Packit Service 20376f
  `remote_callbacks`.
Packit Service 20376f
Packit Service 20376f
* The remote callbacks has gained a new member `push_negotiation`
Packit Service 20376f
  which gets called before sending the update commands to the server.
Packit Service 20376f
Packit Service 20376f
* The following functions no longer act on a remote instance but
Packit Service 20376f
  change the repository's configuration. Their signatures have changed
Packit Service 20376f
  accordingly:
Packit Service 20376f
Packit Service 20376f
    * `git_remote_set_url()`, `git_remote_seturl()`
Packit Service 20376f
    * `git_remote_add_fetch()`, `git_remote_add_push()` and
Packit Service 20376f
    * `git_remote_set_autotag()`
Packit Service 20376f
Packit Service 20376f
* `git_remote_connect()` and `git_remote_prune()` now take a pointer
Packit Service 20376f
  to the callbacks.
Packit Service 20376f
Packit Service 20376f
* `git_remote_fetch()` and `git_remote_download()` now take a pointer
Packit Service 20376f
  to fetch options which determine the runtime configuration.
Packit Service 20376f
Packit Service 20376f
* The `git_remote_autotag_option_t` values have been changed. It has
Packit Service 20376f
  gained a `_UNSPECIFIED` default value to specify no override for the
Packit Service 20376f
  configured setting.
Packit Service 20376f
Packit Service 20376f
* `git_remote_update_tips()` now takes a pointer to the callbacks as
Packit Service 20376f
  well as a boolean whether to write `FETCH_HEAD` and the autotag
Packit Service 20376f
  setting.
Packit Service 20376f
Packit Service 20376f
* `git_remote_create_anonymous()` no longer takes a fetch refspec as
Packit Service 20376f
  url-only remotes cannot have configured refspecs.
Packit Service 20376f
Packit Service 20376f
* The `git_submodule_update_options` struct now has fetch options in
Packit Service 20376f
  the `fetch_opts` field instead of callbacks in the
Packit Service 20376f
  `remote_callbacks` field.
Packit Service 20376f
Packit Service 20376f
* The following functions no longer act on a submodule instance but
Packit Service 20376f
  change the repository's configuration. Their signatures have changed
Packit Service 20376f
  accordingly:
Packit Service 20376f
Packit Service 20376f
    * `git_submodule_set_url()`, `git_submodule_set_ignore()`,
Packit Service 20376f
      `git_submodule_set_update()`,
Packit Service 20376f
      `git_submodule_set_fetch_recurse_submodules()`.
Packit Service 20376f
Packit Service 20376f
* `git_submodule_status()` no longer takes a submodule instance but a
Packit Service 20376f
  repsitory, a submodule name and an ignore setting.
Packit Service 20376f
Packit Service 20376f
* The `push` function in the `git_transport` interface now takes a
Packit Service 20376f
  pointer to the remote callbacks.
Packit Service 20376f
Packit Service 20376f
* The `git_index_entry` struct's fields' types have been changed to
Packit Service 20376f
  more accurately reflect what is in fact stored in the
Packit Service 20376f
  index. Specifically, time and file size are 32 bits intead of 64, as
Packit Service 20376f
  these values are truncated.
Packit Service 20376f
Packit Service 20376f
* `GIT_EMERGECONFLICT` is now `GIT_ECONFLICT`, which more accurately
Packit Service 20376f
  describes the nature of the error.
Packit Service 20376f
Packit Service 20376f
* It is no longer allowed to call `git_buf_grow()` on buffers
Packit Service 20376f
  borrowing the memory they point to.
Packit Service 20376f
Packit Service 20376f
v0.22
Packit Service 20376f
------
Packit Service 20376f
Packit Service 20376f
### Changes or improvements
Packit Service 20376f
Packit Service 20376f
* `git_signature_new()` now requires a non-empty email address.
Packit Service 20376f
Packit Service 20376f
* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
Packit Service 20376f
Packit Service 20376f
* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
Packit Service 20376f
  in OpenSSL.
Packit Service 20376f
Packit Service 20376f
* The fetch behavior of remotes with autotag set to `GIT_REMOTE_DOWNLOAD_TAGS_ALL`
Packit Service 20376f
  has been changed to match git 1.9.0 and later. In this mode, libgit2 now
Packit Service 20376f
  fetches all tags in addition to whatever else needs to be fetched.
Packit Service 20376f
Packit Service 20376f
* `git_checkout()` now handles case-changing renames correctly on
Packit Service 20376f
  case-insensitive filesystems; for example renaming "readme" to "README".
Packit Service 20376f
Packit Service 20376f
* The search for libssh2 is now done via pkg-config instead of a
Packit Service 20376f
  custom search of a few directories.
Packit Service 20376f
Packit Service 20376f
* Add support for core.protectHFS and core.protectNTFS. Add more
Packit Service 20376f
  validation for filenames which we write such as references.
Packit Service 20376f
Packit Service 20376f
* The local transport now generates textual progress output like
Packit Service 20376f
  git-upload-pack does ("counting objects").
Packit Service 20376f
Packit Service 20376f
* `git_checkout_index()` can now check out an in-memory index that is not
Packit Service 20376f
  necessarily the repository's index, so you may check out an index
Packit Service 20376f
  that was produced by git_merge and friends while retaining the cached
Packit Service 20376f
  information.
Packit Service 20376f
Packit Service 20376f
* Remove the default timeout for receiving / sending data over HTTP using
Packit Service 20376f
  the WinHTTP transport layer.
Packit Service 20376f
Packit Service 20376f
* Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
Packit Service 20376f
Packit Service 20376f
* Provide built-in objects for the empty blob (e69de29) and empty
Packit Service 20376f
  tree (4b825dc) objects.
Packit Service 20376f
Packit Service 20376f
* The index' tree cache is now filled upon read-tree and write-tree
Packit Service 20376f
  and the cache is written to disk.
Packit Service 20376f
Packit Service 20376f
* LF -> CRLF filter refuses to handle mixed-EOL files
Packit Service 20376f
Packit Service 20376f
* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
Packit Service 20376f
Packit Service 20376f
* File unlocks are atomic again via rename. Read-only files on Windows are
Packit Service 20376f
  made read-write if necessary.
Packit Service 20376f
Packit Service 20376f
* Share open packfiles across repositories to share descriptors and mmaps.
Packit Service 20376f
Packit Service 20376f
* Use a map for the treebuilder, making insertion O(1)
Packit Service 20376f
Packit Service 20376f
* The build system now accepts an option EMBED_SSH_PATH which when set
Packit Service 20376f
  tells it to include a copy of libssh2 at the given location. This is
Packit Service 20376f
  enabled for MSVC.
Packit Service 20376f
Packit Service 20376f
* Add support for refspecs with the asterisk in the middle of a
Packit Service 20376f
  pattern.
Packit Service 20376f
Packit Service 20376f
* Fetching now performs opportunistic updates. To achieve this, we
Packit Service 20376f
  introduce a difference between active and passive refspecs, which
Packit Service 20376f
  make `git_remote_download()` and `git_remote_fetch()` to take a list of
Packit Service 20376f
  resfpecs to be the active list, similarly to how git fetch accepts a
Packit Service 20376f
  list on the command-line.
Packit Service 20376f
Packit Service 20376f
* The THREADSAFE option to build libgit2 with threading support has
Packit Service 20376f
  been flipped to be on by default.
Packit Service 20376f
Packit Service 20376f
* The remote object has learnt to prune remote-tracking branches. If
Packit Service 20376f
  the remote is configured to do so, this will happen via
Packit Service 20376f
  `git_remote_fetch()`. You can also call `git_remote_prune()` after
Packit Service 20376f
  connecting or fetching to perform the prune.
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
### API additions
Packit Service 20376f
Packit Service 20376f
* Introduce `git_buf_text_is_binary()` and `git_buf_text_contains_nul()` for
Packit Service 20376f
  consumers to perform binary detection on a git_buf.
Packit Service 20376f
Packit Service 20376f
* `git_branch_upstream_remote()` has been introduced to provide the
Packit Service 20376f
  branch.<name>.remote configuration value.
Packit Service 20376f
Packit Service 20376f
* Introduce `git_describe_commit()` and `git_describe_workdir()` to provide
Packit Service 20376f
  a description of the current commit (and working tree, respectively)
Packit Service 20376f
  based on the nearest tag or reference
Packit Service 20376f
Packit Service 20376f
* Introduce `git_merge_bases()` and the `git_oidarray` type to expose all
Packit Service 20376f
  merge bases between two commits.
Packit Service 20376f
Packit Service 20376f
* Introduce `git_merge_bases_many()` to expose all merge bases between
Packit Service 20376f
  multiple commits.
Packit Service 20376f
Packit Service 20376f
* Introduce rebase functionality (using the merge algorithm only).
Packit Service 20376f
  Introduce `git_rebase_init()` to begin a new rebase session,
Packit Service 20376f
  `git_rebase_open()` to open an in-progress rebase session,
Packit Service 20376f
  `git_rebase_commit()` to commit the current rebase operation,
Packit Service 20376f
  `git_rebase_next()` to apply the next rebase operation,
Packit Service 20376f
  `git_rebase_abort()` to abort an in-progress rebase and `git_rebase_finish()`
Packit Service 20376f
  to complete a rebase operation.
Packit Service 20376f
Packit Service 20376f
* Introduce `git_note_author()` and `git_note_committer()` to get the author
Packit Service 20376f
  and committer information on a `git_note`, respectively.
Packit Service 20376f
Packit Service 20376f
* A factory function for ssh has been added which allows to change the
Packit Service 20376f
  path of the programs to execute for receive-pack and upload-pack on
Packit Service 20376f
  the server, `git_transport_ssh_with_paths()`.
Packit Service 20376f
Packit Service 20376f
* The ssh transport supports asking the remote host for accepted
Packit Service 20376f
  credential types as well as multiple challeges using a single
Packit Service 20376f
  connection. This requires to know which username you want to connect
Packit Service 20376f
  as, so this introduces the USERNAME credential type which the ssh
Packit Service 20376f
  transport will use to ask for the username.
Packit Service 20376f
Packit Service 20376f
* The `GIT_EPEEL` error code has been introduced when we cannot peel a tag
Packit Service 20376f
  to the requested object type; if the given object otherwise cannot be
Packit Service 20376f
  peeled, `GIT_EINVALIDSPEC` is returned.
Packit Service 20376f
Packit Service 20376f
* Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
Packit Service 20376f
  when writing gitlinks, as is used by git core for submodules.
Packit Service 20376f
Packit Service 20376f
* `git_remote_prune()` has been added. See above for description.
Packit Service 20376f
Packit Service 20376f
Packit Service 20376f
* Introduce reference transactions, which allow multiple references to
Packit Service 20376f
  be locked at the same time and updates be queued. This also allows
Packit Service 20376f
  us to safely update a reflog with arbitrary contents, as we need to
Packit Service 20376f
  do for stash.
Packit Service 20376f
Packit Service 20376f
### API removals
Packit Service 20376f
Packit Service 20376f
* `git_remote_supported_url()` and `git_remote_is_valid_url()` have been
Packit Service 20376f
  removed as they have become essentially useless with rsync-style ssh paths.
Packit Service 20376f
Packit Service 20376f
* `git_clone_into()` and `git_clone_local_into()` have been removed from the
Packit Service 20376f
  public API in favour of `git_clone callbacks`.
Packit Service 20376f
Packit Service 20376f
* The option to ignore certificate errors via `git_remote_cert_check()`
Packit Service 20376f
  is no longer present. Instead, `git_remote_callbacks` has gained a new
Packit Service 20376f
  entry which lets the user perform their own certificate checks.
Packit Service 20376f
Packit Service 20376f
### Breaking API changes
Packit Service 20376f
Packit Service 20376f
* `git_cherry_pick()` is now `git_cherrypick()`.
Packit Service 20376f
Packit Service 20376f
* The `git_submodule_update()` function was renamed to
Packit Service 20376f
  `git_submodule_update_strategy()`. `git_submodule_update()` is now used to
Packit Service 20376f
  provide functionalty similar to "git submodule update".
Packit Service 20376f
Packit Service 20376f
* `git_treebuilder_create()` was renamed to `git_treebuilder_new()` to better
Packit Service 20376f
  reflect it being a constructor rather than something which writes to
Packit Service 20376f
  disk.
Packit Service 20376f
Packit Service 20376f
* `git_treebuilder_new()` (was `git_treebuilder_create()`) now takes a
Packit Service 20376f
  repository so that it can query repository configuration.
Packit Service 20376f
  Subsequently, `git_treebuilder_write()` no longer takes a repository.
Packit Service 20376f
Packit Service 20376f
* `git_threads_init()` and `git_threads_shutdown()` have been renamed to
Packit Service 20376f
  `git_libgit2_init()` and `git_libgit2_shutdown()` to better explain what
Packit Service 20376f
  their purpose is, as it's grown to be more than just about threads.
Packit Service 20376f
Packit Service 20376f
* `git_libgit2_init()` and `git_libgit2_shutdown()` now return the number of
Packit Service 20376f
  initializations of the library, so consumers may schedule work on the
Packit Service 20376f
  first initialization.
Packit Service 20376f
Packit Service 20376f
* The `git_transport_register()` function no longer takes a priority and takes
Packit Service 20376f
  a URL scheme name (eg "http") instead of a prefix like "http://"
Packit Service 20376f
Packit Service 20376f
* `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
Packit Service 20376f
  return size_t instead of unsigned int.
Packit Service 20376f
Packit Service 20376f
* The `context_lines` and `interhunk_lines` fields in `git_diff`_options are
Packit Service 20376f
  now `uint32_t` instead of `uint16_t`. This allows to set them to `UINT_MAX`,
Packit Service 20376f
  in effect asking for "infinite" context e.g. to iterate over all the
Packit Service 20376f
  unmodified lines of a diff.
Packit Service 20376f
Packit Service 20376f
* `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
Packit Service 20376f
  pathspec searching is needed.
Packit Service 20376f
Packit Service 20376f
* `git_note_create()` has changed the position of the notes reference
Packit Service 20376f
  name to match `git_note_remove()`.
Packit Service 20376f
Packit Service 20376f
* Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
Packit Service 20376f
  with the rest of the lookup functions.
Packit Service 20376f
Packit Service 20376f
* `git_remote_rename()` now takes the repository and the remote's
Packit Service 20376f
  current name. Accepting a remote indicates we want to change it,
Packit Service 20376f
  which we only did partially. It is much clearer if we accept a name
Packit Service 20376f
  and no loaded objects are changed.
Packit Service 20376f
Packit Service 20376f
* `git_remote_delete()` now accepts the repository and the remote's name
Packit Service 20376f
  instead of a loaded remote.
Packit Service 20376f
Packit Service 20376f
* `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
Packit Service 20376f
  for multiple functions (including rebase)
Packit Service 20376f
Packit Service 20376f
* The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
Packit Service 20376f
  `remote_name` members for remote customization.
Packit Service 20376f
Packit Service 20376f
  Instead, the `git_clone_options` struct has two new members, `remote_cb` and
Packit Service 20376f
  `remote_cb_payload`, which allow the caller to completely override the remote
Packit Service 20376f
  creation process. If needed, the caller can use this callback to give their
Packit Service 20376f
  remote a name other than the default (origin) or disable cert checking.
Packit Service 20376f
Packit Service 20376f
  The `remote_callbacks` member has been preserved for convenience, although it
Packit Service 20376f
  is not used when a remote creation callback is supplied.
Packit Service 20376f
Packit Service 20376f
* The `git_clone`_options struct now provides `repository_cb` and
Packit Service 20376f
  `repository_cb_payload` to allow the user to create a repository with
Packit Service 20376f
  custom options.
Packit Service 20376f
Packit Service 20376f
* The `git_push` struct to perform a push has been replaced with
Packit Service 20376f
  `git_remote_upload()`. The refspecs and options are passed as a
Packit Service 20376f
  function argument. `git_push_update_tips()` is now also
Packit Service 20376f
  `git_remote_update_tips()` and the callbacks are in the same struct as
Packit Service 20376f
  the rest.
Packit Service 20376f
Packit Service 20376f
* The `git_remote_set_transport()` function now sets a transport factory function,
Packit Service 20376f
  rather than a pre-existing transport instance.
Packit Service 20376f
Packit Service 20376f
* The `git_transport` structure definition has moved into the sys/transport.h
Packit Service 20376f
  file.
Packit Service 20376f
Packit Service 20376f
* libgit2 no longer automatically sets the OpenSSL locking
Packit Service 20376f
  functions. This is not something which we can know to do. A
Packit Service 20376f
  last-resort convenience function is provided in sys/openssl.h,
Packit Service 20376f
  `git_openssl_set_locking()` which can be used to set the locking.