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