Commit b91f28be by Carlos Martín Nieto

Reformat the changelog

This should provide a easier way to see what kinds of changes we have,
and a single place to look at the breaking changes.
parent d4b24101
...@@ -4,217 +4,229 @@ v0.22 + 1 ...@@ -4,217 +4,229 @@ v0.22 + 1
v0.22 v0.22
------ ------
* File unlocks are atomic again via rename. Read-only files on Windows are ### Changes or improvements
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)
* Introduce reference transactions, which allow multiple references to * `git_signature_new()` now requires a non-empty email address.
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.
* The index' tree cache is now filled upon read-tree and write-tree * Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
and the cache is written to disk.
* LF -> CRLF filter refuses to handle mixed-EOL files
* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4) * Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
in OpenSSL.
* The git_transport structure definition has moved into the sys/transport.h * The fetch behavior of remotes with autotag set to `GIT_REMOTE_DOWNLOAD_TAGS_ALL`
file. 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.
* The ssh transport supports asking the remote host for accepted * `git_checkout()` now handles case-changing renames correctly on
credential types as well as multiple challeges using a single case-insensitive filesystems; for example renaming "readme" to "README".
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 build system now accepts an option EMBED_SSH_PATH which when set * The search for libssh2 is now done via pkg-config instead of a
tells it to include a copy of libssh2 at the given location. This is custom search of a few directories.
enabled for MSVC.
* libgit2 no longer automatically sets the OpenSSL locking * Add support for core.protectHFS and core.protectNTFS. Add more
functions. This is not something which we can know to do. A validation for filenames which we write such as references.
last-resort convenience function is provided in sys/openssl.h,
git_openssl_set_locking() which can be used to set the locking.
* The git_transport_register function no longer takes a priority and takes * The local transport now generates textual progress output like
a URL scheme name (eg "http") instead of a prefix like "http://" git-upload-pack does ("counting objects").
* The git_remote_set_transport function now sets a transport factory function, * `git_checkout_index()` can now check out an in-memory index that is not
rather than a pre-existing transport instance. 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.
* A factory function for ssh has been added which allows to change the * Remove the default timeout for receiving / sending data over HTTP using
path of the programs to execute for receive-pack and upload-pack on the WinHTTP transport layer.
the server, git_transport_ssh_with_paths.
* git_remote_rename() now takes the repository and the remote's * Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
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 * Provide built-in objects for the empty blob (e69de29) and empty
instead of a loaded remote. tree (4b825dc) objects.
* git_remote_supported_url() and git_remote_is_valid_url() have been * The index' tree cache is now filled upon read-tree and write-tree
removed as they have become essentially useless with rsync-style ssh paths. and the cache is written to disk.
* The git_clone_options struct no longer provides the ignore_cert_errors or * LF -> CRLF filter refuses to handle mixed-EOL files
remote_name members for remote customization.
Instead, the git_clone_options struct has two new members, remote_cb and * LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
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 * File unlocks are atomic again via rename. Read-only files on Windows are
is not used when a remote creation callback is supplied. made read-write if necessary.
* The git_clone_options struct now provides repository_cb and * Share open packfiles across repositories to share descriptors and mmaps.
repository_cb_payload to allow the user to create a repository with
custom options.
* The option to ignore certificate errors via git_remote_cert_check() * Use a map for the treebuilder, making insertion O(1)
is no longer present. Instead, git_remote_callbacks has gained a new
entry which lets the user perform their own certificate checks.
* git_clone_into and git_clone_local_into have been removed from the * The build system now accepts an option EMBED_SSH_PATH which when set
public API in favour of git_clone callbacks 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 * Add support for refspecs with the asterisk in the middle of a
pattern. pattern.
* Fetching now performs opportunistic updates. To achieve this, we * Fetching now performs opportunistic updates. To achieve this, we
introduce a difference between active and passive refspecs, which introduce a difference between active and passive refspecs, which
make git_remote_download and git_remote_fetch to take a list of 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 resfpecs to be the active list, similarly to how git fetch accepts a
list on the command-line. list on the command-line.
* Rename git_remote_load() to git_remote_lookup() to bring it in line * The THREADSAFE option to build libgit2 with threading support has
with the rest of the lookup functions. been flipped to be on by default.
* The git_push struct to perform a push has been replaced with * The remote object has learnt to prune remote-tracking branches. If
git_remote_upload(). The refspecs and options are passed as a the remote is configured to do so, this will happen via
function argument. git_push_update_tips() is now also `git_remote_fetch()`. You can also call `git_remote_prune()` after
git_remote_update_tips() and the callbacks are in the same struct as connecting or fetching to perform the prune.
the rest.
### API additions
* Introduce git_merge_bases() and the git_oidarray type to expose all * 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.
* 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
* Introduce `git_merge_bases()` and the `git_oidarray` type to expose all
merge bases between two commits. merge bases between two commits.
* Introduce git_merge_bases_many() to expose all merge bases between * Introduce `git_merge_bases_many()` to expose all merge bases between
multiple commits. multiple commits.
* git_merge_head is now git_annotated_commit, to better reflect its usage
for multiple functions (including rebase)
* Introduce rebase functionality (using the merge algorithm only). * Introduce rebase functionality (using the merge algorithm only).
Introduce git_rebase_init() to begin a new rebase session, Introduce `git_rebase_init()` to begin a new rebase session,
git_rebase_open() to open an in-progress rebase session, `git_rebase_open()` to open an in-progress rebase session,
git_rebase_commit() to commit the current rebase operation, `git_rebase_commit()` to commit the current rebase operation,
git_rebase_next() to apply the next rebase operation, `git_rebase_next()` to apply the next rebase operation,
git_rebase_abort() to abort an in-progress rebase and git_rebase_finish() `git_rebase_abort()` to abort an in-progress rebase and `git_rebase_finish()`
to complete a rebase operation. to complete a rebase operation.
* Introduce git_note_author() and git_note_committer() to get the author * Introduce `git_note_author()` and `git_note_committer()` to get the author
and committer information on a git_note, respectively. and committer information on a `git_note`, respectively.
* git_note_create() has changed the position of the notes reference * A factory function for ssh has been added which allows to change the
name to match git_note_remove(). path of the programs to execute for receive-pack and upload-pack on
the server, `git_transport_ssh_with_paths()`.
* The THREADSAFE option to build libgit2 with threading support has * The ssh transport supports asking the remote host for accepted
been flipped to be on by default. 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 context_lines and interhunk_lines fields in git_diff_options are * The `GIT_EPEEL` error code has been introduced when we cannot peel a tag
now uint32_t instead of uint16_t. This allows to set them to UINT_MAX, to the requested object type; if the given object otherwise cannot be
in effect asking for "infinite" context e.g. to iterate over all the peeled, `GIT_EINVALIDSPEC` is returned.
unmodified lines of a diff.
* git_status_file now takes an exact path. Use git_status_list_new if * Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
pathspec searching is needed. when writing gitlinks, as is used by git core for submodules.
* The fetch behavior of remotes with autotag set to GIT_REMOTE_DOWNLOAD_TAGS_ALL * `git_remote_prune()` has been added. See above for description.
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.
* 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_threads_init() and git_threads_shutdown() have been renamed to * Introduce reference transactions, which allow multiple references to
git_libgit2_init() and git_libgit2_shutdown() to better explain what be locked at the same time and updates be queued. This also allows
their purpose is, as it's grown to be more than just about threads. us to safely update a reflog with arbitrary contents, as we need to
do for stash.
* git_libgit2_init() and git_libgit2_shutdown() now return the number of ### API removals
initializations of the library, so consumers may schedule work on the
first initialization.
* git_treebuilder_new (was git_treebuilder_create) now takes a * `git_remote_supported_url()` and `git_remote_is_valid_url()` have been
repository so that it can query repository configuration. removed as they have become essentially useless with rsync-style ssh paths.
Subsequently, git_treebuilder_write no longer takes a repository.
* `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_treebuilder_create was renamed to git_treebuilder_new to better * `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 reflect it being a constructor rather than something which writes to
disk. disk.
* git_checkout now handles case-changing renames correctly on * `git_treebuilder_new()` (was `git_treebuilder_create()`) now takes a
case-insensitive filesystems; for example renaming "readme" to "README". repository so that it can query repository configuration.
Subsequently, `git_treebuilder_write()` no longer takes a repository.
* git_index_name_entrycount() and git_index_reuc_entrycount() now * `git_threads_init()` and `git_threads_shutdown()` have been renamed to
return size_t instead of unsigned int. `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 search for libssh2 is now done via pkg-config instead of a * `git_libgit2_init()` and `git_libgit2_shutdown()` now return the number of
custom search of a few directories. initializations of the library, so consumers may schedule work on the
first initialization.
* Add support for core.protectHFS and core.protectNTFS. Add more * The `git_transport_register()` function no longer takes a priority and takes
validation for filenames which we write such as references. a URL scheme name (eg "http") instead of a prefix like "http://"
* The local transport now generates textual progress output like * `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
git-upload-pack does ("counting objects"). return size_t instead of unsigned int.
* The git_submodule_update function was renamed to * The `context_lines` and `interhunk_lines` fields in `git_diff`_options are
git_submodule_update_strategy. git_submodule_update is now used to now `uint32_t` instead of `uint16_t`. This allows to set them to `UINT_MAX`,
provide functionalty similar to "git submodule update". in effect asking for "infinite" context e.g. to iterate over all the
unmodified lines of a diff.
* git_checkout_index() can now check out an in-memory index that is not * `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
necessarily the repository's index, so you may check out an index pathspec searching is needed.
that was produced by git_merge and friends while retaining the cached
information.
* git_cherry_pick() is now git_cherrypick(). * `git_note_create()` has changed the position of the notes reference
name to match `git_note_remove()`.
* Introduce git_buf_text_is_binary() and git_buf_text_contains_nul() for * Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
consumers to perform binary detection on a git_buf. with the rest of the lookup functions.
* Remove the default timeout for receiving / sending data over HTTP using * `git_remote_rename()` now takes the repository and the remote's
the WinHTTP transport layer. 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.
* Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems. * `git_remote_delete()` now accepts the repository and the remote's name
instead of a loaded remote.
* git_signature_new() now requires a non-empty email address. * `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
for multiple functions (including rebase)
* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X. * The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
`remote_name` members for remote customization.
* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1 Instead, the `git_clone_options` struct has two new members, `remote_cb` and
in OpenSSL. `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.
* git_branch_upstream_remote() has been introduced to provide the The `remote_callbacks` member has been preserved for convenience, although it
branch.<name>.remote configuration value. is not used when a remote creation callback is supplied.
* The GIT_EPEEL error code has been introduced when we cannot peel a tag * The `git_clone`_options struct now provides `repository_cb` and
to the requested object type; if the given object otherwise cannot be `repository_cb_payload` to allow the user to create a repository with
peeled, GIT_EINVALIDSPEC is returned. custom options.
* Provide built-in objects for the empty blob (e69de29) and empty * The `git_push` struct to perform a push has been replaced with
tree (4b825dc) objects. `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.
* Introduce GIT_REPOSITORY_INIT_RELATIVE_GITLINK to use relative paths * The `git_remote_set_transport()` function now sets a transport factory function,
when writing gitlinks, as is used by git core for submodules. rather than a pre-existing transport instance.
* Introduce git_describe_commit and git_describe_workdir to provide * The `git_transport` structure definition has moved into the sys/transport.h
a description of the current commit (and working tree, respectively) file.
based on the nearest tag or reference
* 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.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment