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