]> git.proxmox.com Git - libgit2.git/blobdiff - CHANGELOG.md
Merge pull request #3097 from libgit2/cmn/submodule-config-state
[libgit2.git] / CHANGELOG.md
index bae46fe507322c10d2647eb9d52764bdaf4f5ab8..86f995545b38531af1992699916e69f116f1cd56 100644 (file)
 v0.22 + 1
 ------
 
-v0.22
-------
+### Changes or improvements
 
-* File unlocks are atomic again via rename. Read-only files on Windows are
-  made read-write if necessary.
+* Patience and minimal diff drivers can now be used for merges.
 
-* Share open packfiles across repositories to share descriptors and mmaps.
+* Merges can now ignore whitespace changes.
 
-* Use a map for the treebuilder, making insertion O(1)
+* Updated binary identification in CRLF filtering to avoid false positives in
+  UTF-8 files.
 
-* Introduce reference transactions, which allow multiple references to
-  be locked at the same time and updates be queued. This also allows
-  us to safely update a reflog with arbitrary contents, as we need to
-  do for stash.
+* Rename and copy detection is enabled for small files.
 
-* The index' tree cache is now filled upon read-tree and write-tree
-  and the cache is written to disk.
+* Checkout can now handle an initial checkout of a repository, making
+  `GIT_CHECKOUT_SAFE_CREATE` unnecessary for users of clone.
 
-* LF -> CRLF filter refuses to handle mixed-EOL files
+* The signature parameter in the ref-modifying functions has been
+  removed. Use `git_repository_set_ident()` and
+  `git_repository_ident()` to override the signature to be used.
 
-* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
+* The local transport now auto-scales the number of threads to use
+  when creating the packfile instead of sticking to one.
 
-* The git_transport structure definition has moved into the sys/transport.h
-  file.
+* Reference renaming now uses the right id for the old value.
 
-* The ssh transport supports asking the remote host for accepted
-  credential types as well as multiple challeges using a single
-  connection. This requires to know which username you want to connect
-  as, so this introduces the USERNAME credential type which the ssh
-  transport will use to ask for the username.
+* The annotated version of branch creation, HEAD detaching and reset
+  allow for specifying the expression from the user to be put into the
+  reflog.
 
-* The build system now accepts an option EMBED_SSH_PATH which when set
-  tells it to include a copy of libssh2 at the given location. This is
-  enabled for MSVC.
+* `git_rebase_commit` now returns `GIT_EUNMERGED` when you attempt to
+  commit with unstaged changes.
 
-* libgit2 no longer automatically sets the OpenSSL locking
-  functions. This is not something which we can know to do. A
-  last-resort convenience function is provided in sys/openssl.h,
-  git_openssl_set_locking() which can be used to set the locking.
+* On Mac OS X, we now use SecureTransport to provide the cryptographic
+support for HTTPS connections insead of OpenSSL.
 
-* The git_transport_register function no longer takes a priority and takes
-  a URL scheme name (eg "http") instead of a prefix like "http://"
+* Checkout can now accept an index for the baseline computations via the
+  `baseline_index` member.
 
-* The git_remote_set_transport function now sets a transport factory function,
-  rather than a pre-existing transport instance.
+* The configuration for fetching is no longer stored inside the
+  `git_remote` struct but has been moved to a `git_fetch_options`. The
+  remote functions now take these options or the callbacks instead of
+  setting them beforehand.
 
-* A factory function for ssh has been added which allows to change the
-  path of the programs to execute for receive-pack and upload-pack on
-  the server, git_transport_ssh_with_paths.
+* The index now uses diffs for `add_all()` and `update_all()` which
+  gives it a speed boost and closer semantics to git.
 
-* git_remote_rename() now takes the repository and the remote's
-  current name. Accepting a remote indicates we want to change it,
-  which we only did partially. It is much clearer if we accept a name
-  and no loaded objects are changed.
+* The ssh transport now reports the stderr output from the server as
+  the error message, which allows you to get the "repository not
+  found" messages.
 
-* git_remote_delete() now accepts the repository and the remote's name
-  instead of a loaded remote.
+* `git_index_conflict_add()` will remove staged entries that exist for
+  conflicted paths.
 
-* git_remote_supported_url() and git_remote_is_valid_url() have been
-  removed as they have become essentially useless with rsync-style ssh paths.
+* The flags for a `git_diff_file` will now have the `GIT_DIFF_FLAG_EXISTS`
+  bit set when a file exists on that side of the diff.  This is useful
+  for understanding whether a side of the diff exists in the presence of
+  a conflict.
 
-* The git_clone_options struct no longer provides the ignore_cert_errors or
-  remote_name members for remote customization.
+* The constructor for a write-stream into the odb now takes
+  `git_off_t` instead of `size_t` for the size of the blob, which
+  allows putting large files into the odb on 32-bit systems.
 
-  Instead, the git_clone_options struct has two new members, remote_cb and
-  remote_cb_payload, which allow the caller to completely override the remote
-  creation process. If needed, the caller can use this callback to give their
-  remote a name other than the default (origin) or disable cert checking.
+* The remote's push and pull URLs now honor the url.$URL.insteadOf
+  configuration. This allows modifying URL prefixes to a custom
+  value via gitconfig.
 
-  The remote_callbacks member has been preserved for convenience, although it
-  is not used when a remote creation callback is supplied.
+* `git_diff_foreach`, `git_diff_blobs`, `git_diff_blob_to_buffer`,
+  and `git_diff_buffers` now accept a new binary callback of type
+  `git_diff_binary_cb` that includes the binary diff information.
 
-* The git_clone_options struct now provides repository_cb and
-  repository_cb_payload to allow the user to create a repository with
-  custom options.
+* The race condition mitigations described in `racy-git.txt` have been
+  implemented.
 
-* The option to ignore certificate errors via git_remote_cert_check()
-  is no longer present. Instead, git_remote_callbacks has gained a new
-  entry which lets the user perform their own certificate checks.
+* If libcurl is installed, we will use it to connect to HTTP(S)
+  servers.
 
-* git_clone_into and git_clone_local_into have been removed from the
-  public API in favour of git_clone callbacks
+### API additions
 
-* Add support for refspecs with the asterisk in the middle of a
-  pattern.
+* The `git_merge_options` gained a `file_flags` member.
 
-* Fetching now performs opportunistic updates. To achieve this, we
-  introduce a difference between active and passive refspecs, which
-  make git_remote_download and git_remote_fetch to take a list of
-  resfpecs to be the active list, similarly to how git fetch accepts a
-  list on the command-line.
+* Parsing and retrieving a configuration value as a path is exposed
+  via `git_config_parse_path()` and `git_config_get_path()`
+  respectively.
 
-* Rename git_remote_load() to git_remote_lookup() to bring it in line
-  with the rest of the lookup functions.
+* `git_repository_set_ident()` and `git_repository_ident()` serve to
+  set and query which identity will be used when writing to the
+  reflog.
 
-* The git_push struct to perform a push has been replaced with
-  git_remote_upload(). The refspecs and options are passed as a
-  function argument. git_push_update_tips() is now also
-  git_remote_update_tips() and the callbacks are in the same struct as
-  the rest.
+* `git_config_entry_free()` frees a config entry.
 
-* Introduce git_merge_bases() and the git_oidarray type to expose all
-  merge bases between two commits.
+* `git_config_get_string_buf()` provides a way to safely retrieve a
+  string from a non-snapshot configuration.
 
-* Introduce git_merge_bases_many() to expose all merge bases between
-  multiple commits.
+* `git_annotated_commit_from_revspec()` allows to get an annotated
+  commit from an extended sha synatx string.
 
-* git_merge_head is now git_annotated_commit, to better reflect its usage
-  for multiple functions (including rebase)
+* `git_repository_set_head_detached_from_annotated()`,
+  `git_branch_create_from_annotated()` and
+  `git_reset_from_annotated()` allow for the caller to provide an
+  annotated commit through which they can control what expression is
+  put into the reflog as the source/target.
 
-* Introduce rebase functionality (using the merge algorithm only).
-  Introduce git_rebase_init() to begin a new rebase session,
-  git_rebase_open() to open an in-progress rebase session,
-  git_rebase_commit() to commit the current rebase operation,
-  git_rebase_next() to apply the next rebase operation,
-  git_rebase_abort() to abort an in-progress rebase and git_rebase_finish()
-  to complete a rebase operation.
+* `git_index_add_frombuffer()` can now create a blob from memory
+  buffer and add it to the index which is attached to a repository.
 
-* Introduce git_note_author() and git_note_committer() to get the author
-  and committer information on a git_note, respectively.
+* The structure `git_fetch_options` has been added to determine the
+  runtime configuration for fetching, such as callbacks, pruning and
+  autotag behaviour. It has the runtime initializer
+  `git_fetch_init_options()`.
 
-* git_note_create() has changed the position of the notes reference
-  name to match git_note_remove().
+* The enum `git_fetch_prune_t` has been added, letting you specify the
+  pruning behaviour for a fetch.
 
-* The THREADSAFE option to build libgit2 with threading support has
-  been flipped to be on by default.
+* A push operation will notify the caller of what updates it indends
+  to perform on the remote, which provides similar information to
+  git's pre-push hook.
 
-* The context_lines and interhunk_lines fields in git_diff_options are
-  now uint32_t instead of uint16_t. This allows to set them to UINT_MAX,
-  in effect asking for "infinite" context e.g. to iterate over all the
-  unmodified lines of a diff.
+* `git_stash_apply()` can now apply a stashed state from the stash list,
+  placing the data into the working directory and index.
 
-* git_status_file now takes an exact path. Use git_status_list_new if
-  pathspec searching is needed.
+* `git_stash_pop()` will apply a stashed state (like `git_stash_apply()`)
+  but will remove the stashed state after a successful application.
 
-* The fetch behavior of remotes with autotag set to GIT_REMOTE_DOWNLOAD_TAGS_ALL
-  has been changed to match git 1.9.0 and later. In this mode, libgit2 now
-  fetches all tags in addition to whatever else needs to be fetched.
+* A new error code `GIT_EEOF` indicates an early EOF from the
+  server. This typically indicates an error with the URL or
+  configuration of the server, and tools can use this to show messages
+  about failing to communicate with the server.
 
-* The remote object has learnt to prune remote-tracking branches. If
-  the remote is configured to do so, this will happen via
-  git_remote_fetch(). You can also call git_remote_prune() after
-  connecting or fetching to perform the prune.
+* `git_diff_index_to_workdir()` and `git_diff_tree_to_index()` will now
+  produce deltas of type `GIT_DELTA_CONFLICTED` to indicate that the index
+  side of the delta is a conflict.
 
-* git_threads_init() and git_threads_shutdown() have been renamed to
-  git_libgit2_init() and git_libgit2_shutdown() to better explain what
-  their purpose is, as it's grown to be more than just about threads.
+* The `git_status` family of functions will now produce status of type
+  `GIT_STATUS_CONFLICTED` to indicate that a conflict exists for that file
+  in the index.
 
-* git_libgit2_init() and git_libgit2_shutdown() now return the number of
-  initializations of the library, so consumers may schedule work on the
-  first initialization.
+* `git_index_entry_is_conflict()` is a utility function to determine if
+  a given index entry has a non-zero stage entry, indicating that it is
+  one side of a conflict.
 
-* git_treebuilder_new (was git_treebuilder_create) now takes a
-  repository so that it can query repository configuration.
-  Subsequently, git_treebuilder_write no longer takes a repository.
+* It is now possible to pass a keypair via a buffer instead of a
+  path. For this, `GIT_CREDTYPE_SSH_MEMORY` and
+  `git_cred_ssh_key_memory_new()` have been added.
 
-* git_treebuilder_create was renamed to git_treebuilder_new to better
-  reflect it being a constructor rather than something which writes to
-  disk.
+* `git_filter_list_contains` will indicate whether a particular
+  filter will be run in the given filter list.
 
-* git_checkout now handles case-changing renames correctly on
-  case-insensitive filesystems; for example renaming "readme" to "README".
+* `git_commit_header_field()` has been added, which allows retrieving
+  the contents of an arbitrary header field.
 
-* git_index_name_entrycount() and git_index_reuc_entrycount() now
-  return size_t instead of unsigned int.
+### API removals
+
+* `git_remote_save()` and `git_remote_clear_refspecs()` have been
+  removed. Remote's configuration is changed via the configuration
+  directly or through a convenience function which performs changes to
+  the configuration directly.
+
+* `git_remote_set_callbacks()`, `git_remote_get_callbacks()` and
+  `git_remote_set_transport()` have been removed and the remote no
+  longer stores this configuration.
+
+* `git_remote_set_fetch_refpecs()` and
+  `git_remote_set_push_refspecs()` have been removed. There is no
+  longer a way to set the base refspecs at run-time.
+
+### Breaking API changes
+
+* `git_smart_subtransport_cb` now has a `param` parameter.
+
+* The `git_merge_options` structure member `flags` has been renamed
+  to `tree_flags`.
+
+* The `git_merge_file_options` structure member `flags` is now
+  an unsigned int. It was previously a `git_merge_file_flags_t`.
+
+* `GIT_CHECKOUT_SAFE_CREATE` has been removed.  Most users will generally
+  be able to switch to `GIT_CHECKOUT_SAFE`, but if you require missing
+  file handling during checkout, you may now use `GIT_CHECKOUT_SAFE |
+  GIT_CHECKOUT_RECREATE_MISSING`.
+
+* The `git_clone_options` and `git_submodule_update_options`
+  structures no longer have a `signature` field.
+
+* The following functions have removed the signature and/or log message
+  parameters in favour of git-emulating ones.
+
+    * `git_branch_create()`, `git_branch_move()`
+    * `git_rebase_init()`, `git_rebase_abort()`
+    * `git_reference_symbolic_create_matching()`,
+      `git_reference_symbolic_create()`, `git_reference_create()`,
+      `git_reference_create_matching()`,
+      `git_reference_symbolic_set_target()`,
+      `git_reference_set_target()`, `git_reference_rename()`
+    * `git_remote_update_tips()`, `git_remote_fetch()`, `git_remote_push()`
+    * `git_repository_set_head()`,
+      `git_repository_set_head_detached()`,
+      `git_repository_detach_head()`
+    * `git_reset()`
+
+* `git_config_get_entry()` now gives back a ref-counted
+  `git_config_entry`. You must free it when you no longer need it.
+
+* `git_config_get_string()` will return an error if used on a
+  non-snapshot configuration, as there can be no guarantee that the
+  returned pointer is valid.
+
+* `git_note_default_ref()` now uses a `git_buf` to return the string,
+  as the string is otherwise not guaranteed to stay allocated.
+
+* `git_rebase_operation_current()` will return `GIT_REBASE_NO_OPERATION`
+  if it is called immediately after creating a rebase session but before
+  you have applied the first patch.
+
+* `git_rebase_options` now contains a `git_checkout_options` struct
+  that will be used for functions that modify the working directory,
+  namely `git_checkout_init`, `git_checkout_next` and
+  `git_checkout_abort`.  As a result, `git_rebase_open` now also takes
+  a `git_rebase_options` and only the `git_rebase_init` and
+  `git_rebase_open` functions take a `git_rebase_options`, where they
+  will persist the options to subsequent `git_rebase` calls.
+
+* The `git_clone_options` struct now has fetch options in a
+  `fetch_opts` field instead of remote callbacks in
+  `remote_callbacks`.
+
+* The remote callbacks has gained a new member `push_negotiation`
+  which gets called before sending the update commands to the server.
+
+* The following functions now longer act on a remote instance but
+  change the repository's configuration. Their signatures have changed
+  accordingly:
+
+    * `git_remote_set_url()`, `git_remote_seturl()`
+    * `git_remote_add_fetch()`, `git_remote_add_push()` and
+    * `git_remote_set_autotag()`
+
+* `git_remote_connect()` and `git_remote_prune()` now take a pointer
+  to the callbacks.
+
+* `git_remote_fetch()` and `git_remote_download()` now take a pointer
+  to fetch options which determine the runtime configuration.
+
+* The `git_remote_autotag_option_t` values have been changed. It has
+  gained a `_FALLBACK` default value to specify no override for the
+  configured setting.
+
+* `git_remote_update_tips()` now takes a pointer to the callbacks as
+  well as a boolean whether to write `FETCH_HEAD` and the autotag
+  setting.
+
+* `git_remote_create_anonymous()` no longer takes a fetch refspec as
+  url-only remotes cannot have configured refspecs.
+
+* The `git_submodule_update_options` struct now has fetch options in
+  the `fetch_opts` field instead of callbacks in the
+  `remote_callbacks` field.
+
+* The `push` function in the `git_transport` interface now takes a
+  pointer to the remote callbacks.
+
+* The `git_index_entry` struct's fields' types have been changed to
+  more accurately reflect what is in fact stored in the
+  index. Specifically, time and file size are 32 bits intead of 64, as
+  these values are truncated.
+
+* `GIT_EMERGECONFLICT` is now `GIT_ECONFLICT`, which more accurately
+  describes the nature of the error.
+
+v0.22
+------
+
+### Changes or improvements
+
+* `git_signature_new()` now requires a non-empty email address.
+
+* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
+
+* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
+  in OpenSSL.
+
+* The fetch behavior of remotes with autotag set to `GIT_REMOTE_DOWNLOAD_TAGS_ALL`
+  has been changed to match git 1.9.0 and later. In this mode, libgit2 now
+  fetches all tags in addition to whatever else needs to be fetched.
+
+* `git_checkout()` now handles case-changing renames correctly on
+  case-insensitive filesystems; for example renaming "readme" to "README".
 
 * The search for libssh2 is now done via pkg-config instead of a
   custom search of a few directories.
@@ -176,41 +295,204 @@ v0.22
 * The local transport now generates textual progress output like
   git-upload-pack does ("counting objects").
 
-* The git_submodule_update function was renamed to
-  git_submodule_update_strategy. git_submodule_update is now used to
-  provide functionalty similar to "git submodule update".
-
-* git_checkout_index() can now check out an in-memory index that is not
+* `git_checkout_index()` can now check out an in-memory index that is not
   necessarily the repository's index, so you may check out an index
   that was produced by git_merge and friends while retaining the cached
   information.
 
-* git_cherry_pick() is now git_cherrypick().
-
-* Introduce git_buf_text_is_binary() and git_buf_text_contains_nul() for
-  consumers to perform binary detection on a git_buf.
-
 * Remove the default timeout for receiving / sending data over HTTP using
   the WinHTTP transport layer.
 
 * Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
 
-* git_signature_new() now requires a non-empty email address.
+* Provide built-in objects for the empty blob (e69de29) and empty
+  tree (4b825dc) objects.
 
-* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
+* The index' tree cache is now filled upon read-tree and write-tree
+  and the cache is written to disk.
 
-* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
-  in OpenSSL.
+* LF -> CRLF filter refuses to handle mixed-EOL files
+
+* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
+
+* File unlocks are atomic again via rename. Read-only files on Windows are
+  made read-write if necessary.
+
+* Share open packfiles across repositories to share descriptors and mmaps.
+
+* Use a map for the treebuilder, making insertion O(1)
+
+* The build system now accepts an option EMBED_SSH_PATH which when set
+  tells it to include a copy of libssh2 at the given location. This is
+  enabled for MSVC.
+
+* Add support for refspecs with the asterisk in the middle of a
+  pattern.
+
+* Fetching now performs opportunistic updates. To achieve this, we
+  introduce a difference between active and passive refspecs, which
+  make `git_remote_download()` and `git_remote_fetch()` to take a list of
+  resfpecs to be the active list, similarly to how git fetch accepts a
+  list on the command-line.
+
+* The THREADSAFE option to build libgit2 with threading support has
+  been flipped to be on by default.
+
+* The remote object has learnt to prune remote-tracking branches. If
+  the remote is configured to do so, this will happen via
+  `git_remote_fetch()`. You can also call `git_remote_prune()` after
+  connecting or fetching to perform the prune.
+
+
+### API additions
 
-* git_branch_upstream_remote() has been introduced to provide the
+* Introduce `git_buf_text_is_binary()` and `git_buf_text_contains_nul()` for
+  consumers to perform binary detection on a git_buf.
+
+* `git_branch_upstream_remote()` has been introduced to provide the
   branch.<name>.remote configuration value.
 
-* The GIT_EPEEL error code has been introduced when we cannot peel a tag
-  to the requested object type; if the given object otherwise cannot be
-  peeled, GIT_EINVALIDSPEC is returned.
+* Introduce `git_describe_commit()` and `git_describe_workdir()` to provide
+  a description of the current commit (and working tree, respectively)
+  based on the nearest tag or reference
 
-* Provide built-in objects for the empty blob (e69de29) and empty
-  tree (4b825dc) objects.
+* Introduce `git_merge_bases()` and the `git_oidarray` type to expose all
+  merge bases between two commits.
+
+* Introduce `git_merge_bases_many()` to expose all merge bases between
+  multiple commits.
+
+* Introduce rebase functionality (using the merge algorithm only).
+  Introduce `git_rebase_init()` to begin a new rebase session,
+  `git_rebase_open()` to open an in-progress rebase session,
+  `git_rebase_commit()` to commit the current rebase operation,
+  `git_rebase_next()` to apply the next rebase operation,
+  `git_rebase_abort()` to abort an in-progress rebase and `git_rebase_finish()`
+  to complete a rebase operation.
+
+* Introduce `git_note_author()` and `git_note_committer()` to get the author
+  and committer information on a `git_note`, respectively.
 
-* Introduce GIT_REPOSITORY_INIT_RELATIVE_GITLINK to use relative paths
+* A factory function for ssh has been added which allows to change the
+  path of the programs to execute for receive-pack and upload-pack on
+  the server, `git_transport_ssh_with_paths()`.
+
+* The ssh transport supports asking the remote host for accepted
+  credential types as well as multiple challeges using a single
+  connection. This requires to know which username you want to connect
+  as, so this introduces the USERNAME credential type which the ssh
+  transport will use to ask for the username.
+
+* The `GIT_EPEEL` error code has been introduced when we cannot peel a tag
+  to the requested object type; if the given object otherwise cannot be
+  peeled, `GIT_EINVALIDSPEC` is returned.
+
+* Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
   when writing gitlinks, as is used by git core for submodules.
+
+* `git_remote_prune()` has been added. See above for description.
+
+
+* Introduce reference transactions, which allow multiple references to
+  be locked at the same time and updates be queued. This also allows
+  us to safely update a reflog with arbitrary contents, as we need to
+  do for stash.
+
+### API removals
+
+* `git_remote_supported_url()` and `git_remote_is_valid_url()` have been
+  removed as they have become essentially useless with rsync-style ssh paths.
+
+* `git_clone_into()` and `git_clone_local_into()` have been removed from the
+  public API in favour of `git_clone callbacks`.
+
+* The option to ignore certificate errors via `git_remote_cert_check()`
+  is no longer present. Instead, `git_remote_callbacks` has gained a new
+  entry which lets the user perform their own certificate checks.
+
+### Breaking API changes
+
+* `git_cherry_pick()` is now `git_cherrypick()`.
+
+* The `git_submodule_update()` function was renamed to
+  `git_submodule_update_strategy()`. `git_submodule_update()` is now used to
+  provide functionalty similar to "git submodule update".
+
+* `git_treebuilder_create()` was renamed to `git_treebuilder_new()` to better
+  reflect it being a constructor rather than something which writes to
+  disk.
+
+* `git_treebuilder_new()` (was `git_treebuilder_create()`) now takes a
+  repository so that it can query repository configuration.
+  Subsequently, `git_treebuilder_write()` no longer takes a repository.
+
+* `git_threads_init()` and `git_threads_shutdown()` have been renamed to
+  `git_libgit2_init()` and `git_libgit2_shutdown()` to better explain what
+  their purpose is, as it's grown to be more than just about threads.
+
+* `git_libgit2_init()` and `git_libgit2_shutdown()` now return the number of
+  initializations of the library, so consumers may schedule work on the
+  first initialization.
+
+* The `git_transport_register()` function no longer takes a priority and takes
+  a URL scheme name (eg "http") instead of a prefix like "http://"
+
+* `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
+  return size_t instead of unsigned int.
+
+* The `context_lines` and `interhunk_lines` fields in `git_diff`_options are
+  now `uint32_t` instead of `uint16_t`. This allows to set them to `UINT_MAX`,
+  in effect asking for "infinite" context e.g. to iterate over all the
+  unmodified lines of a diff.
+
+* `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
+  pathspec searching is needed.
+
+* `git_note_create()` has changed the position of the notes reference
+  name to match `git_note_remove()`.
+
+* Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
+  with the rest of the lookup functions.
+
+* `git_remote_rename()` now takes the repository and the remote's
+  current name. Accepting a remote indicates we want to change it,
+  which we only did partially. It is much clearer if we accept a name
+  and no loaded objects are changed.
+
+* `git_remote_delete()` now accepts the repository and the remote's name
+  instead of a loaded remote.
+
+* `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
+  for multiple functions (including rebase)
+
+* The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
+  `remote_name` members for remote customization.
+
+  Instead, the `git_clone_options` struct has two new members, `remote_cb` and
+  `remote_cb_payload`, which allow the caller to completely override the remote
+  creation process. If needed, the caller can use this callback to give their
+  remote a name other than the default (origin) or disable cert checking.
+
+  The `remote_callbacks` member has been preserved for convenience, although it
+  is not used when a remote creation callback is supplied.
+
+* The `git_clone`_options struct now provides `repository_cb` and
+  `repository_cb_payload` to allow the user to create a repository with
+  custom options.
+
+* The `git_push` struct to perform a push has been replaced with
+  `git_remote_upload()`. The refspecs and options are passed as a
+  function argument. `git_push_update_tips()` is now also
+  `git_remote_update_tips()` and the callbacks are in the same struct as
+  the rest.
+
+* The `git_remote_set_transport()` function now sets a transport factory function,
+  rather than a pre-existing transport instance.
+
+* The `git_transport` structure definition has moved into the sys/transport.h
+  file.
+
+* libgit2 no longer automatically sets the OpenSSL locking
+  functions. This is not something which we can know to do. A
+  last-resort convenience function is provided in sys/openssl.h,
+  `git_openssl_set_locking()` which can be used to set the locking.