]> git.proxmox.com Git - libgit2.git/blame - CHANGELOG.md
Merge pull request #2828 from ethomson/treediff_dont_patch
[libgit2.git] / CHANGELOG.md
CommitLineData
c8b64f70
CMN
1v0.22 + 1
2------
3
16bcf0c7
CMN
4### Changes or improvements
5
4d6f55ac
ET
6* Rename and copy detection is enabled for small files.
7
16bcf0c7
CMN
8### API additions
9
10### API removals
11
12### Breaking API changes
13
c8b64f70 14v0.22
d30447cb
CMN
15------
16
b91f28be 17### Changes or improvements
e1fc03c9 18
b91f28be 19* `git_signature_new()` now requires a non-empty email address.
274c3fa6 20
b91f28be 21* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
d412165f 22
b91f28be
CMN
23* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
24 in OpenSSL.
d412165f 25
b91f28be
CMN
26* The fetch behavior of remotes with autotag set to `GIT_REMOTE_DOWNLOAD_TAGS_ALL`
27 has been changed to match git 1.9.0 and later. In this mode, libgit2 now
28 fetches all tags in addition to whatever else needs to be fetched.
c180c065 29
b91f28be
CMN
30* `git_checkout()` now handles case-changing renames correctly on
31 case-insensitive filesystems; for example renaming "readme" to "README".
7449c82e 32
b91f28be
CMN
33* The search for libssh2 is now done via pkg-config instead of a
34 custom search of a few directories.
3753110a 35
b91f28be
CMN
36* Add support for core.protectHFS and core.protectNTFS. Add more
37 validation for filenames which we write such as references.
5192bcc5 38
b91f28be
CMN
39* The local transport now generates textual progress output like
40 git-upload-pack does ("counting objects").
c180c065 41
b91f28be
CMN
42* `git_checkout_index()` can now check out an in-memory index that is not
43 necessarily the repository's index, so you may check out an index
44 that was produced by git_merge and friends while retaining the cached
45 information.
1697cd6f 46
b91f28be
CMN
47* Remove the default timeout for receiving / sending data over HTTP using
48 the WinHTTP transport layer.
d4256ed5 49
b91f28be 50* Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
46c8f7f8 51
b91f28be
CMN
52* Provide built-in objects for the empty blob (e69de29) and empty
53 tree (4b825dc) objects.
262eec23 54
b91f28be
CMN
55* The index' tree cache is now filled upon read-tree and write-tree
56 and the cache is written to disk.
0862f617 57
b91f28be 58* LF -> CRLF filter refuses to handle mixed-EOL files
1697cd6f 59
b91f28be 60* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
1697cd6f 61
b91f28be
CMN
62* File unlocks are atomic again via rename. Read-only files on Windows are
63 made read-write if necessary.
d58a64e9 64
b91f28be 65* Share open packfiles across repositories to share descriptors and mmaps.
6812afaf 66
b91f28be 67* Use a map for the treebuilder, making insertion O(1)
2cd3cb8e 68
b91f28be
CMN
69* The build system now accepts an option EMBED_SSH_PATH which when set
70 tells it to include a copy of libssh2 at the given location. This is
71 enabled for MSVC.
9fef46de
CMN
72
73* Add support for refspecs with the asterisk in the middle of a
74 pattern.
7db0e6ee 75
c5837cad
CMN
76* Fetching now performs opportunistic updates. To achieve this, we
77 introduce a difference between active and passive refspecs, which
b91f28be 78 make `git_remote_download()` and `git_remote_fetch()` to take a list of
c5837cad
CMN
79 resfpecs to be the active list, similarly to how git fetch accepts a
80 list on the command-line.
81
b91f28be
CMN
82* The THREADSAFE option to build libgit2 with threading support has
83 been flipped to be on by default.
209425ce 84
b91f28be
CMN
85* The remote object has learnt to prune remote-tracking branches. If
86 the remote is configured to do so, this will happen via
87 `git_remote_fetch()`. You can also call `git_remote_prune()` after
88 connecting or fetching to perform the prune.
89
90
91### API additions
d524b2d3 92
b91f28be
CMN
93* Introduce `git_buf_text_is_binary()` and `git_buf_text_contains_nul()` for
94 consumers to perform binary detection on a git_buf.
95
96* `git_branch_upstream_remote()` has been introduced to provide the
97 branch.<name>.remote configuration value.
98
99* Introduce `git_describe_commit()` and `git_describe_workdir()` to provide
100 a description of the current commit (and working tree, respectively)
101 based on the nearest tag or reference
102
103* Introduce `git_merge_bases()` and the `git_oidarray` type to expose all
7db0e6ee 104 merge bases between two commits.
eca07bcd 105
b91f28be 106* Introduce `git_merge_bases_many()` to expose all merge bases between
eca07bcd 107 multiple commits.
67917281 108
67917281 109* Introduce rebase functionality (using the merge algorithm only).
b91f28be
CMN
110 Introduce `git_rebase_init()` to begin a new rebase session,
111 `git_rebase_open()` to open an in-progress rebase session,
112 `git_rebase_commit()` to commit the current rebase operation,
113 `git_rebase_next()` to apply the next rebase operation,
114 `git_rebase_abort()` to abort an in-progress rebase and `git_rebase_finish()`
67917281
ET
115 to complete a rebase operation.
116
b91f28be
CMN
117* Introduce `git_note_author()` and `git_note_committer()` to get the author
118 and committer information on a `git_note`, respectively.
79b0ae4e 119
b91f28be
CMN
120* A factory function for ssh has been added which allows to change the
121 path of the programs to execute for receive-pack and upload-pack on
122 the server, `git_transport_ssh_with_paths()`.
21083a71 123
b91f28be
CMN
124* The ssh transport supports asking the remote host for accepted
125 credential types as well as multiple challeges using a single
126 connection. This requires to know which username you want to connect
127 as, so this introduces the USERNAME credential type which the ssh
128 transport will use to ask for the username.
d88766c4 129
b91f28be
CMN
130* The `GIT_EPEEL` error code has been introduced when we cannot peel a tag
131 to the requested object type; if the given object otherwise cannot be
132 peeled, `GIT_EINVALIDSPEC` is returned.
68182085 133
b91f28be
CMN
134* Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
135 when writing gitlinks, as is used by git core for submodules.
e284c451 136
b91f28be 137* `git_remote_prune()` has been added. See above for description.
799e22ea 138
8aba3d47 139
b91f28be
CMN
140* Introduce reference transactions, which allow multiple references to
141 be locked at the same time and updates be queued. This also allows
142 us to safely update a reflog with arbitrary contents, as we need to
143 do for stash.
6d91dc53 144
b91f28be 145### API removals
dce7b1a4 146
b91f28be
CMN
147* `git_remote_supported_url()` and `git_remote_is_valid_url()` have been
148 removed as they have become essentially useless with rsync-style ssh paths.
149
150* `git_clone_into()` and `git_clone_local_into()` have been removed from the
151 public API in favour of `git_clone callbacks`.
152
153* The option to ignore certificate errors via `git_remote_cert_check()`
154 is no longer present. Instead, `git_remote_callbacks` has gained a new
155 entry which lets the user perform their own certificate checks.
156
157### Breaking API changes
208a2c8a 158
b91f28be
CMN
159* `git_cherry_pick()` is now `git_cherrypick()`.
160
161* The `git_submodule_update()` function was renamed to
162 `git_submodule_update_strategy()`. `git_submodule_update()` is now used to
163 provide functionalty similar to "git submodule update".
164
165* `git_treebuilder_create()` was renamed to `git_treebuilder_new()` to better
208a2c8a
CMN
166 reflect it being a constructor rather than something which writes to
167 disk.
40d79154 168
b91f28be
CMN
169* `git_treebuilder_new()` (was `git_treebuilder_create()`) now takes a
170 repository so that it can query repository configuration.
171 Subsequently, `git_treebuilder_write()` no longer takes a repository.
aad27e6e 172
b91f28be
CMN
173* `git_threads_init()` and `git_threads_shutdown()` have been renamed to
174 `git_libgit2_init()` and `git_libgit2_shutdown()` to better explain what
175 their purpose is, as it's grown to be more than just about threads.
aad27e6e 176
b91f28be
CMN
177* `git_libgit2_init()` and `git_libgit2_shutdown()` now return the number of
178 initializations of the library, so consumers may schedule work on the
179 first initialization.
aad27e6e 180
b91f28be
CMN
181* The `git_transport_register()` function no longer takes a priority and takes
182 a URL scheme name (eg "http") instead of a prefix like "http://"
aad27e6e 183
b91f28be
CMN
184* `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
185 return size_t instead of unsigned int.
9d1f97df 186
b91f28be
CMN
187* The `context_lines` and `interhunk_lines` fields in `git_diff`_options are
188 now `uint32_t` instead of `uint16_t`. This allows to set them to `UINT_MAX`,
189 in effect asking for "infinite" context e.g. to iterate over all the
190 unmodified lines of a diff.
974d21c8 191
b91f28be
CMN
192* `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
193 pathspec searching is needed.
974d21c8 194
b91f28be
CMN
195* `git_note_create()` has changed the position of the notes reference
196 name to match `git_note_remove()`.
974d21c8 197
b91f28be
CMN
198* Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
199 with the rest of the lookup functions.
974d21c8 200
b91f28be
CMN
201* `git_remote_rename()` now takes the repository and the remote's
202 current name. Accepting a remote indicates we want to change it,
203 which we only did partially. It is much clearer if we accept a name
204 and no loaded objects are changed.
974d21c8 205
b91f28be
CMN
206* `git_remote_delete()` now accepts the repository and the remote's name
207 instead of a loaded remote.
974d21c8 208
b91f28be
CMN
209* `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
210 for multiple functions (including rebase)
974d21c8 211
b91f28be
CMN
212* The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
213 `remote_name` members for remote customization.
974d21c8 214
b91f28be
CMN
215 Instead, the `git_clone_options` struct has two new members, `remote_cb` and
216 `remote_cb_payload`, which allow the caller to completely override the remote
217 creation process. If needed, the caller can use this callback to give their
218 remote a name other than the default (origin) or disable cert checking.
974d21c8 219
b91f28be
CMN
220 The `remote_callbacks` member has been preserved for convenience, although it
221 is not used when a remote creation callback is supplied.
974d21c8 222
b91f28be
CMN
223* The `git_clone`_options struct now provides `repository_cb` and
224 `repository_cb_payload` to allow the user to create a repository with
225 custom options.
974d21c8 226
b91f28be
CMN
227* The `git_push` struct to perform a push has been replaced with
228 `git_remote_upload()`. The refspecs and options are passed as a
229 function argument. `git_push_update_tips()` is now also
230 `git_remote_update_tips()` and the callbacks are in the same struct as
231 the rest.
974d21c8 232
b91f28be
CMN
233* The `git_remote_set_transport()` function now sets a transport factory function,
234 rather than a pre-existing transport instance.
61cd037e 235
b91f28be
CMN
236* The `git_transport` structure definition has moved into the sys/transport.h
237 file.
238
239* libgit2 no longer automatically sets the OpenSSL locking
240 functions. This is not something which we can know to do. A
241 last-resort convenience function is provided in sys/openssl.h,
242 `git_openssl_set_locking()` which can be used to set the locking.