diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c3ad4480..e9fa64c14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,169 +4,22 @@ v0.22 + 1 v0.22 ------ -* File unlocks are atomic again via rename. Read-only files on Windows are - made read-write if necessary. +### Changes or improvements -* Share open packfiles across repositories to share descriptors and mmaps. +* `git_signature_new()` now requires a non-empty email address. -* Use a map for the treebuilder, making insertion O(1) +* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X. -* 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. +* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1 + in OpenSSL. -* The index' tree cache is now filled upon read-tree and write-tree - 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) - -* The git_transport structure definition has moved into the sys/transport.h - file. - -* 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 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. - -* 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. - -* The git_transport_register function no longer takes a priority and takes - a URL scheme name (eg "http") instead of a prefix like "http://" - -* The git_remote_set_transport function now sets a transport factory function, - rather than a pre-existing transport instance. - -* 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. - -* 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_remote_supported_url() and git_remote_is_valid_url() have been - removed as they have become essentially useless with rsync-style ssh paths. - -* 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 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. - -* git_clone_into and git_clone_local_into have been removed from the - public API in favour of git_clone callbacks - -* 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. - -* Rename git_remote_load() to git_remote_lookup() to bring it in line - with the rest of the lookup functions. - -* 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. - -* 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. - -* 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 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. - -* git_note_create() has changed the position of the notes reference - name to match git_note_remove(). - -* The THREADSAFE option to build libgit2 with threading support has - been flipped to be on by default. - -* 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. - -* The fetch behavior of remotes with autotag set to GIT_REMOTE_DOWNLOAD_TAGS_ALL +* 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. -* 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 - 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. - -* 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_treebuilder_create was renamed to git_treebuilder_new to better - reflect it being a constructor rather than something which writes to - disk. - -* git_checkout now handles case-changing renames correctly on +* `git_checkout()` now handles case-changing renames correctly on case-insensitive filesystems; for example renaming "readme" to "README". -* git_index_name_entrycount() and git_index_reuc_entrycount() now - return size_t instead of unsigned int. - * The search for libssh2 is now done via pkg-config instead of a custom search of a few directories. @@ -176,45 +29,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. - -* 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. - -* git_branch_upstream_remote() has been introduced to provide the - branch..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. - * Provide built-in objects for the empty blob (e69de29) and empty tree (4b825dc) objects. -* Introduce GIT_REPOSITORY_INIT_RELATIVE_GITLINK to use relative paths - when writing gitlinks, as is used by git core for submodules. +* The index' tree cache is now filled upon read-tree and write-tree + and the cache is written to disk. -* Introduce git_describe_commit and git_describe_workdir to provide +* 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 + +* 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..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. + +* 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. + +* 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.