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