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