]>
Commit | Line | Data |
---|---|---|
c8b64f70 CMN |
1 | v0.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 | 111 | v0.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. |