]> git.proxmox.com Git - libgit2.git/blame - CHANGELOG.md
Merge pull request #2961 from ethomson/filter_relative_paths
[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
16bcf0c7
CMN
18### API additions
19
eac773d9
CMN
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
659cf202
CMN
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
9a97f49e
CMN
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
16bcf0c7
CMN
33### API removals
34
35### Breaking API changes
36
96b82b11
ET
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
41513659
CMN
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
9a97f49e
CMN
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
c8b64f70 68v0.22
d30447cb
CMN
69------
70
b91f28be 71### Changes or improvements
e1fc03c9 72
b91f28be 73* `git_signature_new()` now requires a non-empty email address.
274c3fa6 74
b91f28be 75* Use CommonCrypto libraries for SHA-1 calculation on Mac OS X.
d412165f 76
b91f28be
CMN
77* Disable SSL compression and SSLv2 and SSLv3 ciphers in favor of TLSv1
78 in OpenSSL.
d412165f 79
b91f28be
CMN
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.
c180c065 83
b91f28be
CMN
84* `git_checkout()` now handles case-changing renames correctly on
85 case-insensitive filesystems; for example renaming "readme" to "README".
7449c82e 86
b91f28be
CMN
87* The search for libssh2 is now done via pkg-config instead of a
88 custom search of a few directories.
3753110a 89
b91f28be
CMN
90* Add support for core.protectHFS and core.protectNTFS. Add more
91 validation for filenames which we write such as references.
5192bcc5 92
b91f28be
CMN
93* The local transport now generates textual progress output like
94 git-upload-pack does ("counting objects").
c180c065 95
b91f28be
CMN
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.
1697cd6f 100
b91f28be
CMN
101* Remove the default timeout for receiving / sending data over HTTP using
102 the WinHTTP transport layer.
d4256ed5 103
b91f28be 104* Add SPNEGO (Kerberos) authentication using GSSAPI on Unix systems.
46c8f7f8 105
b91f28be
CMN
106* Provide built-in objects for the empty blob (e69de29) and empty
107 tree (4b825dc) objects.
262eec23 108
b91f28be
CMN
109* The index' tree cache is now filled upon read-tree and write-tree
110 and the cache is written to disk.
0862f617 111
b91f28be 112* LF -> CRLF filter refuses to handle mixed-EOL files
1697cd6f 113
b91f28be 114* LF -> CRLF filter now runs when * text = auto (with Git for Windows 1.9.4)
1697cd6f 115
b91f28be
CMN
116* File unlocks are atomic again via rename. Read-only files on Windows are
117 made read-write if necessary.
d58a64e9 118
b91f28be 119* Share open packfiles across repositories to share descriptors and mmaps.
6812afaf 120
b91f28be 121* Use a map for the treebuilder, making insertion O(1)
2cd3cb8e 122
b91f28be
CMN
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.
9fef46de
CMN
126
127* Add support for refspecs with the asterisk in the middle of a
128 pattern.
7db0e6ee 129
c5837cad
CMN
130* Fetching now performs opportunistic updates. To achieve this, we
131 introduce a difference between active and passive refspecs, which
b91f28be 132 make `git_remote_download()` and `git_remote_fetch()` to take a list of
c5837cad
CMN
133 resfpecs to be the active list, similarly to how git fetch accepts a
134 list on the command-line.
135
b91f28be
CMN
136* The THREADSAFE option to build libgit2 with threading support has
137 been flipped to be on by default.
209425ce 138
b91f28be
CMN
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
d524b2d3 146
b91f28be
CMN
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
7db0e6ee 158 merge bases between two commits.
eca07bcd 159
b91f28be 160* Introduce `git_merge_bases_many()` to expose all merge bases between
eca07bcd 161 multiple commits.
67917281 162
67917281 163* Introduce rebase functionality (using the merge algorithm only).
b91f28be
CMN
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()`
67917281
ET
169 to complete a rebase operation.
170
b91f28be
CMN
171* Introduce `git_note_author()` and `git_note_committer()` to get the author
172 and committer information on a `git_note`, respectively.
79b0ae4e 173
b91f28be
CMN
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()`.
21083a71 177
b91f28be
CMN
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.
d88766c4 183
b91f28be
CMN
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.
68182085 187
b91f28be
CMN
188* Introduce `GIT_REPOSITORY_INIT_RELATIVE_GITLINK` to use relative paths
189 when writing gitlinks, as is used by git core for submodules.
e284c451 190
b91f28be 191* `git_remote_prune()` has been added. See above for description.
799e22ea 192
8aba3d47 193
b91f28be
CMN
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.
6d91dc53 198
b91f28be 199### API removals
dce7b1a4 200
b91f28be
CMN
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
208a2c8a 212
b91f28be
CMN
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
208a2c8a
CMN
220 reflect it being a constructor rather than something which writes to
221 disk.
40d79154 222
b91f28be
CMN
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.
aad27e6e 226
b91f28be
CMN
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.
aad27e6e 230
b91f28be
CMN
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.
aad27e6e 234
b91f28be
CMN
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://"
aad27e6e 237
b91f28be
CMN
238* `git_index_name_entrycount()` and `git_index_reuc_entrycount()` now
239 return size_t instead of unsigned int.
9d1f97df 240
b91f28be
CMN
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.
974d21c8 245
b91f28be
CMN
246* `git_status_file()` now takes an exact path. Use `git_status_list_new()` if
247 pathspec searching is needed.
974d21c8 248
b91f28be
CMN
249* `git_note_create()` has changed the position of the notes reference
250 name to match `git_note_remove()`.
974d21c8 251
b91f28be
CMN
252* Rename `git_remote_load()` to `git_remote_lookup()` to bring it in line
253 with the rest of the lookup functions.
974d21c8 254
b91f28be
CMN
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.
974d21c8 259
b91f28be
CMN
260* `git_remote_delete()` now accepts the repository and the remote's name
261 instead of a loaded remote.
974d21c8 262
b91f28be
CMN
263* `git_merge_head` is now `git_annotated_commit`, to better reflect its usage
264 for multiple functions (including rebase)
974d21c8 265
b91f28be
CMN
266* The `git_clone_options` struct no longer provides the `ignore_cert_errors` or
267 `remote_name` members for remote customization.
974d21c8 268
b91f28be
CMN
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.
974d21c8 273
b91f28be
CMN
274 The `remote_callbacks` member has been preserved for convenience, although it
275 is not used when a remote creation callback is supplied.
974d21c8 276
b91f28be
CMN
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.
974d21c8 280
b91f28be
CMN
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.
974d21c8 286
b91f28be
CMN
287* The `git_remote_set_transport()` function now sets a transport factory function,
288 rather than a pre-existing transport instance.
61cd037e 289
b91f28be
CMN
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.