]> git.proxmox.com Git - libgit2.git/blame - CHANGELOG.md
Merge pull request #3085 from yongthecoder/regfree
[libgit2.git] / CHANGELOG.md
CommitLineData
c8b64f70
CMN
1v0.22 + 1
2------
3
16bcf0c7
CMN
4### Changes or improvements
5
70b0f128
JG
6* Patience and minimal diff drivers can now be used for merges.
7
8* Merges can now ignore whitespace changes.
9
0161e096
SS
10* Updated binary identification in CRLF filtering to avoid false positives in
11 UTF-8 files.
12
4d6f55ac
ET
13* Rename and copy detection is enabled for small files.
14
96b82b11
ET
15* Checkout can now handle an initial checkout of a repository, making
16 `GIT_CHECKOUT_SAFE_CREATE` unnecessary for users of clone.
17
659cf202
CMN
18* The signature parameter in the ref-modifying functions has been
19 removed. Use `git_repository_set_ident()` and
20 `git_repository_ident()` to override the signature to be used.
21
0ef54a63
CMN
22* The local transport now auto-scales the number of threads to use
23 when creating the packfile instead of sticking to one.
24
8acf058f
CMN
25* Reference renaming now uses the right id for the old value.
26
27* The annotated version of branch creation, HEAD detaching and reset
28 allow for specifying the expression from the user to be put into the
29 reflog.
30
aa9bb425 31* `git_rebase_commit` now returns `GIT_EUNMERGED` when you attempt to
eaf0d688
ET
32 commit with unstaged changes.
33
85247df0
CMN
34* On Mac OS X, we now use SecureTransport to provide the cryptographic
35support for HTTPS connections insead of OpenSSL.
36
16bcf0c7
CMN
37### API additions
38
70b0f128
JG
39* The `git_merge_options` gained a `file_flags` member.
40
eac773d9
CMN
41* Parsing and retrieving a configuration value as a path is exposed
42 via `git_config_parse_path()` and `git_config_get_path()`
43 respectively.
44
659cf202
CMN
45* `git_repository_set_ident()` and `git_repository_ident()` serve to
46 set and query which identity will be used when writing to the
47 reflog.
48
9a97f49e
CMN
49* `git_config_entry_free()` frees a config entry.
50
51* `git_config_get_string_buf()` provides a way to safely retrieve a
52 string from a non-snapshot configuration.
53
8acf058f
CMN
54* `git_annotated_commit_from_revspec()` allows to get an annotated
55 commit from an extended sha synatx string.
56
57* `git_repository_set_head_detached_from_annotated()`,
58 `git_branch_create_from_annotated()` and
59 `git_reset_from_annotated()` allow for the caller to provide an
60 annotated commit through which they can control what expression is
61 put into the reflog as the source/target.
d578b45f 62
a275fbc0
DP
63* `git_index_add_frombuffer()` can now create a blob from memory
64 buffer and add it to the index which is attached to a repository.
65
16bcf0c7
CMN
66### API removals
67
68### Breaking API changes
69
70b0f128
JG
70* The `git_merge_options` structure member `flags` has been renamed
71 to `tree_flags`.
72
b8c50808 73* The `git_merge_file_options` structure member `flags` is now
70b0f128
JG
74 an unsigned int. It was previously a `git_merge_file_flags_t`.
75
96b82b11
ET
76* `GIT_CHECKOUT_SAFE_CREATE` has been removed. Most users will generally
77 be able to switch to `GIT_CHECKOUT_SAFE`, but if you require missing
78 file handling during checkout, you may now use `GIT_CHECKOUT_SAFE |
79 GIT_CHECKOUT_RECREATE_MISSING`.
80
41513659
CMN
81* The `git_clone_options` and `git_submodule_update_options`
82 structures no longer have a `signature` field.
83
84* The following functions have removed the signature and/or log message
85 parameters in favour of git-emulating ones.
86
87 * `git_branch_create()`, `git_branch_move()`
88 * `git_rebase_init()`, `git_rebase_abort()`
89 * `git_reference_symbolic_create_matching()`,
90 `git_reference_symbolic_create()`, `git_reference_create()`,
91 `git_reference_create_matching()`,
92 `git_reference_symbolic_set_target()`,
93 `git_reference_set_target()`, `git_reference_rename()`
94 * `git_remote_update_tips()`, `git_remote_fetch()`, `git_remote_push()`
95 * `git_repository_set_head()`,
96 `git_repository_set_head_detached()`,
97 `git_repository_detach_head()`
98 * `git_reset()`
99
9a97f49e
CMN
100* `git_config_get_entry()` now gives back a ref-counted
101 `git_config_entry`. You must free it when you no longer need it.
102
103* `git_config_get_string()` will return an error if used on a
104 non-snapshot configuration, as there can be no guarantee that the
105 returned pointer is valid.
106
385449b1
CMN
107* `git_note_default_ref()` now uses a `git_buf` to return the string,
108 as the string is otherwise not guaranteed to stay allocated.
109
30640aa9
ET
110* `git_rebase_operation_current()` will return `GIT_REBASE_NO_OPERATION`
111 if it is called immediately after creating a rebase session but before
112 you have applied the first patch.
113
f3a199dd
ET
114* `git_rebase_options` now contains an optional pointer to
115 `git_checkout_options` that will be used for functions that modify
116 the working directory, namely `git_checkout_init`, `git_checkout_next`
117 and `git_checkout_abort`. As a result, `git_rebase_open` now also
118 takes a `git_rebase_options` and only the `git_rebase_init` and
119 `git_rebase_open` functions take a `git_rebase_options`, where they
120 will persist the options to subsequent `git_rebase` calls.
121
c8b64f70 122v0.22
d30447cb
CMN
123------
124
b91f28be 125### Changes or improvements
e1fc03c9 126
b91f28be 127* `git_signature_new()` now requires a non-empty email address.
274c3fa6 128
b91f28be 129* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
d412165f 130
b91f28be
CMN
131* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
132 in OpenSSL.
d412165f 133
b91f28be
CMN
134* The fetch behavior of remotes with autotag set to `GIT_REMOTE_DOWNLOAD_TAGS_ALL`
135 has been changed to match git 1.9.0 and later. In this mode, libgit2 now
136 fetches all tags in addition to whatever else needs to be fetched.
c180c065 137
b91f28be
CMN
138* `git_checkout()` now handles case-changing renames correctly on
139 case-insensitive filesystems; for example renaming "readme" to "README".
7449c82e 140
b91f28be
CMN
141* The search for libssh2 is now done via pkg-config instead of a
142 custom search of a few directories.
3753110a 143
b91f28be
CMN
144* Add support for core.protectHFS and core.protectNTFS. Add more
145 validation for filenames which we write such as references.
5192bcc5 146
b91f28be
CMN
147* The local transport now generates textual progress output like
148 git-upload-pack does ("counting objects").
c180c065 149
b91f28be
CMN
150* `git_checkout_index()` can now check out an in-memory index that is not
151 necessarily the repository's index, so you may check out an index
152 that was produced by git_merge and friends while retaining the cached
153 information.
1697cd6f 154
b91f28be
CMN
155* Remove the default timeout for receiving / sending data over HTTP using
156 the WinHTTP transport layer.
d4256ed5 157
b91f28be 158* Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
46c8f7f8 159
b91f28be
CMN
160* Provide built-in objects for the empty blob (e69de29) and empty
161 tree (4b825dc) objects.
262eec23 162
b91f28be
CMN
163* The index' tree cache is now filled upon read-tree and write-tree
164 and the cache is written to disk.
0862f617 165
b91f28be 166* LF -> CRLF filter refuses to handle mixed-EOL files
1697cd6f 167
b91f28be 168* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
1697cd6f 169
b91f28be
CMN
170* File unlocks are atomic again via rename. Read-only files on Windows are
171 made read-write if necessary.
d58a64e9 172
b91f28be 173* Share open packfiles across repositories to share descriptors and mmaps.
6812afaf 174
b91f28be 175* Use a map for the treebuilder, making insertion O(1)
2cd3cb8e 176
b91f28be
CMN
177* The build system now accepts an option EMBED_SSH_PATH which when set
178 tells it to include a copy of libssh2 at the given location. This is
179 enabled for MSVC.
9fef46de
CMN
180
181* Add support for refspecs with the asterisk in the middle of a
182 pattern.
7db0e6ee 183
c5837cad
CMN
184* Fetching now performs opportunistic updates. To achieve this, we
185 introduce a difference between active and passive refspecs, which
b91f28be 186 make `git_remote_download()` and `git_remote_fetch()` to take a list of
c5837cad
CMN
187 resfpecs to be the active list, similarly to how git fetch accepts a
188 list on the command-line.
189
b91f28be
CMN
190* The THREADSAFE option to build libgit2 with threading support has
191 been flipped to be on by default.
209425ce 192
b91f28be
CMN
193* The remote object has learnt to prune remote-tracking branches. If
194 the remote is configured to do so, this will happen via
195 `git_remote_fetch()`. You can also call `git_remote_prune()` after
196 connecting or fetching to perform the prune.
197
198
199### API additions
d524b2d3 200
b91f28be
CMN
201* Introduce `git_buf_text_is_binary()` and `git_buf_text_contains_nul()` for
202 consumers to perform binary detection on a git_buf.
203
204* `git_branch_upstream_remote()` has been introduced to provide the
205 branch.<name>.remote configuration value.
206
207* Introduce `git_describe_commit()` and `git_describe_workdir()` to provide
208 a description of the current commit (and working tree, respectively)
209 based on the nearest tag or reference
210
211* Introduce `git_merge_bases()` and the `git_oidarray` type to expose all
7db0e6ee 212 merge bases between two commits.
eca07bcd 213
b91f28be 214* Introduce `git_merge_bases_many()` to expose all merge bases between
eca07bcd 215 multiple commits.
67917281 216
67917281 217* Introduce rebase functionality (using the merge algorithm only).
b91f28be
CMN
218 Introduce `git_rebase_init()` to begin a new rebase session,
219 `git_rebase_open()` to open an in-progress rebase session,
220 `git_rebase_commit()` to commit the current rebase operation,
221 `git_rebase_next()` to apply the next rebase operation,
222 `git_rebase_abort()` to abort an in-progress rebase and `git_rebase_finish()`
67917281
ET
223 to complete a rebase operation.
224
b91f28be
CMN
225* Introduce `git_note_author()` and `git_note_committer()` to get the author
226 and committer information on a `git_note`, respectively.
79b0ae4e 227
b91f28be
CMN
228* A factory function for ssh has been added which allows to change the
229 path of the programs to execute for receive-pack and upload-pack on
230 the server, `git_transport_ssh_with_paths()`.
21083a71 231
b91f28be
CMN
232* The ssh transport supports asking the remote host for accepted
233 credential types as well as multiple challeges using a single
234 connection. This requires to know which username you want to connect
235 as, so this introduces the USERNAME credential type which the ssh
236 transport will use to ask for the username.
d88766c4 237
b91f28be
CMN
238* The `GIT_EPEEL` error code has been introduced when we cannot peel a tag
239 to the requested object type; if the given object otherwise cannot be
240 peeled, `GIT_EINVALIDSPEC` is returned.
68182085 241
b91f28be
CMN
242* Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
243 when writing gitlinks, as is used by git core for submodules.
e284c451 244
b91f28be 245* `git_remote_prune()` has been added. See above for description.
799e22ea 246
8aba3d47 247
b91f28be
CMN
248* Introduce reference transactions, which allow multiple references to
249 be locked at the same time and updates be queued. This also allows
250 us to safely update a reflog with arbitrary contents, as we need to
251 do for stash.
6d91dc53 252
b91f28be 253### API removals
dce7b1a4 254
b91f28be
CMN
255* `git_remote_supported_url()` and `git_remote_is_valid_url()` have been
256 removed as they have become essentially useless with rsync-style ssh paths.
257
258* `git_clone_into()` and `git_clone_local_into()` have been removed from the
259 public API in favour of `git_clone callbacks`.
260
261* The option to ignore certificate errors via `git_remote_cert_check()`
262 is no longer present. Instead, `git_remote_callbacks` has gained a new
263 entry which lets the user perform their own certificate checks.
264
265### Breaking API changes
208a2c8a 266
b91f28be
CMN
267* `git_cherry_pick()` is now `git_cherrypick()`.
268
269* The `git_submodule_update()` function was renamed to
270 `git_submodule_update_strategy()`. `git_submodule_update()` is now used to
271 provide functionalty similar to "git submodule update".
272
273* `git_treebuilder_create()` was renamed to `git_treebuilder_new()` to better
208a2c8a
CMN
274 reflect it being a constructor rather than something which writes to
275 disk.
40d79154 276
b91f28be
CMN
277* `git_treebuilder_new()` (was `git_treebuilder_create()`) now takes a
278 repository so that it can query repository configuration.
279 Subsequently, `git_treebuilder_write()` no longer takes a repository.
aad27e6e 280
b91f28be
CMN
281* `git_threads_init()` and `git_threads_shutdown()` have been renamed to
282 `git_libgit2_init()` and `git_libgit2_shutdown()` to better explain what
283 their purpose is, as it's grown to be more than just about threads.
aad27e6e 284
b91f28be
CMN
285* `git_libgit2_init()` and `git_libgit2_shutdown()` now return the number of
286 initializations of the library, so consumers may schedule work on the
287 first initialization.
aad27e6e 288
b91f28be
CMN
289* The `git_transport_register()` function no longer takes a priority and takes
290 a URL scheme name (eg "http") instead of a prefix like "http://"
aad27e6e 291
b91f28be
CMN
292* `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
293 return size_t instead of unsigned int.
9d1f97df 294
b91f28be
CMN
295* The `context_lines` and `interhunk_lines` fields in `git_diff`_options are
296 now `uint32_t` instead of `uint16_t`. This allows to set them to `UINT_MAX`,
297 in effect asking for "infinite" context e.g. to iterate over all the
298 unmodified lines of a diff.
974d21c8 299
b91f28be
CMN
300* `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
301 pathspec searching is needed.
974d21c8 302
b91f28be
CMN
303* `git_note_create()` has changed the position of the notes reference
304 name to match `git_note_remove()`.
974d21c8 305
b91f28be
CMN
306* Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
307 with the rest of the lookup functions.
974d21c8 308
b91f28be
CMN
309* `git_remote_rename()` now takes the repository and the remote's
310 current name. Accepting a remote indicates we want to change it,
311 which we only did partially. It is much clearer if we accept a name
312 and no loaded objects are changed.
974d21c8 313
b91f28be
CMN
314* `git_remote_delete()` now accepts the repository and the remote's name
315 instead of a loaded remote.
974d21c8 316
b91f28be
CMN
317* `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
318 for multiple functions (including rebase)
974d21c8 319
b91f28be
CMN
320* The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
321 `remote_name` members for remote customization.
974d21c8 322
b91f28be
CMN
323 Instead, the `git_clone_options` struct has two new members, `remote_cb` and
324 `remote_cb_payload`, which allow the caller to completely override the remote
325 creation process. If needed, the caller can use this callback to give their
326 remote a name other than the default (origin) or disable cert checking.
974d21c8 327
b91f28be
CMN
328 The `remote_callbacks` member has been preserved for convenience, although it
329 is not used when a remote creation callback is supplied.
974d21c8 330
b91f28be
CMN
331* The `git_clone`_options struct now provides `repository_cb` and
332 `repository_cb_payload` to allow the user to create a repository with
333 custom options.
974d21c8 334
b91f28be
CMN
335* The `git_push` struct to perform a push has been replaced with
336 `git_remote_upload()`. The refspecs and options are passed as a
337 function argument. `git_push_update_tips()` is now also
338 `git_remote_update_tips()` and the callbacks are in the same struct as
339 the rest.
974d21c8 340
b91f28be
CMN
341* The `git_remote_set_transport()` function now sets a transport factory function,
342 rather than a pre-existing transport instance.
61cd037e 343
b91f28be
CMN
344* The `git_transport` structure definition has moved into the sys/transport.h
345 file.
346
347* libgit2 no longer automatically sets the OpenSSL locking
348 functions. This is not something which we can know to do. A
349 last-resort convenience function is provided in sys/openssl.h,
350 `git_openssl_set_locking()` which can be used to set the locking.