Commit 172239021f7ba04fe7327647b213799853a9eb89

Patrick Steinhardt 2020-02-19T11:27:00

Merge pull request #5291 from libgit2/ethomson/0_99 Release 0.99

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f001d3..113e554 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -110,8 +110,8 @@ STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_V
 STRING(REGEX REPLACE "^.*LIBGIT2_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" LIBGIT2_VERSION_REV "${GIT2_HEADER}")
 SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${LIBGIT2_VERSION_REV}")
 
-FILE(STRINGS "${libgit2_SOURCE_DIR}/include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION [0-9]+$")
-STRING(REGEX REPLACE "^.*LIBGIT2_SOVERSION ([0-9]+)$" "\\1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION}")
+FILE(STRINGS "${libgit2_SOURCE_DIR}/include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION \"([0-9.]+)\"$")
+STRING(REGEX REPLACE "^.*LIBGIT2_SOVERSION \"([0-9.]+)\"$" "\\1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION}")
 
 IF (DEPRECATE_HARD)
 	ADD_DEFINITIONS(-DGIT_DEPRECATE_HARD)
diff --git a/docs/changelog.md b/docs/changelog.md
index c751649..2c50a66 100644
--- a/docs/changelog.md
+++ b/docs/changelog.md
@@ -1,5 +1,289 @@
-v0.28 + 1
----------
+v0.99
+-----
+
+This is v0.99 "Torschlusspanik".  This will be the last minor release
+before libgit2 v1.0.  We expect to only respond to bugs in this release,
+to stabilize it for next major release.
+
+It contains significant refactorings, but is expected to be API-compatible
+with v0.28.0.
+
+### Changes or improvements
+
+* When fetching from an anonymous remote using a URL with authentication
+  information provided in the URL (eg `https://foo:bar@example.com/repo`),
+  we would erroneously include the literal URL in the FETCH_HEAD file.
+  We now remove that to match git's behavior.
+
+* Some credential structures, enums and values have been renamed:
+  `git_cred` is now `git_credential`.  `git_credtype_t` is now
+  `git_credential_t`.  Functions and types beginning with
+  `git_cred_` now begin with `git_credential`, and constants beginning
+  with `GIT_CREDTYPE` now begin with `GIT_CREDENTIAL`.  The former names
+  are deprecated.
+
+* Several function signatures have been changed to return an `int` to
+  indicate error conditions.  We encourage you to check them for errors
+  in the standard way. 
+
+  * `git_attr_cache_flush`
+  * `git_error_set_str`
+  * `git_index_name_clear`
+  * `git_index_reuc_clear`
+  * `git_libgit2_version`
+  * `git_mempack_reset`
+  * `git_oid_cpy`
+  * `git_oid_fmt`
+  * `git_oid_fromraw`
+  * `git_oid_nfmt`
+  * `git_oid_pathfmt`
+  * `git_remote_stop`
+  * `git_remote_disconnect`
+  * `git_repository__cleanup`
+  * `git_repository_set_config`
+  * `git_repository_set_index`
+  * `git_repository_set_odb`
+  * `git_repository_set_refdb`
+  * `git_revwalk_reset`
+  * `git_revwalk_simplify_first_parent`
+  * `git_revwalk_sorting`
+  * `git_treebuilder_clear`
+  * `git_treebuilder_filter`
+
+* The NTLM and Negotiate authentication mechanisms are now supported when
+  talking to git implementations hosted on Apache or nginx servers.
+
+* The `HEAD` symbolic reference can no longer be deleted.
+
+* `git_merge_driver_source_repo` no longer returns a `const git_repository *`,
+  it now returns a non-`const` `git_repository *`.
+
+* Relative symbolic links are now supported on Windows when `core.symlinks`
+  is enabled.
+
+* Servers that provide query parameters with a redirect are now supported.
+
+* `git_submodule_sync` will now resolve relative URLs.
+
+* When creating git endpoint URLs, double-slashes are no longer used when
+  the given git URL has a trailing slash.
+
+* On Windows, a `DllMain` function is no longer included and thread-local
+  storage has moved to fiber-local storage in order to prevent race
+  conditions during shutdown.
+
+* The tracing mechanism (`GIT_TRACE`) is now enabled by default and does
+  not need to be explicitly enabled in CMake.
+
+* The size of Git objects is now represented by `git_object_size_t`
+  instead of `off_t`.
+
+* Binary patches without data can now be parsed.
+
+* A configuration snapshot can now be created from another configuration
+  snapshot, not just a "true" configuration object.
+
+* The `git_commit_with_signature` API will now ensure that referenced
+  objects exist in the object database.
+
+* Stash messages containing newlines will now be replaced with spaces;
+  they will no longer be (erroneously) written to the repository.
+
+* `git_commit_create_with_signature` now verifies the commit information
+  to ensure that it points to a valid tree and valid parents.
+
+* `git_apply` has an option `GIT_APPLY_CHECK` that will only do a dry-run.
+  The index and working directory will remain unmodified, and application
+  will report if it would have worked.
+
+* Patches produced by Mercurial (those that lack some git extended headers)
+  can now be parsed and applied.
+
+* Reference locks are obeyed correctly on POSIX platforms, instead of
+  being removed.
+
+* Patches with empty new files can now be read and applied.
+
+* `git_apply_to_tree` can now correctly apply patches that add new files.
+
+* The program data configuration on Windows (`C:\ProgramData\Git\config`)
+  must be owned by an administrator, a system account or the current user
+  to be read.
+
+* `git_blob_filtered_content` is now deprecated in favor of `git_blob_filter`.
+
+* Configuration files can now be included conditionally using the
+  `onbranch` conditional.
+
+* Checkout can now properly create and remove symbolic links to directories
+  on Windows.
+
+* Stash no longer recomputes trees when committing a worktree, for
+  improved performance.
+
+* Repository templates can now include a `HEAD` file to default the
+  initial default branch.
+
+* Some configuration structures, enums and values have been renamed:
+  `git_cvar_map` is now `git_configmap`, `git_cvar_t` is now
+  `git_configmap_t`, `GIT_CVAR_FALSE` is now `GIT_CONFIGMAP_FALSE`,
+  `GIT_CVAR_TRUE` is now `GIT_CONFIGMAP_TRUE`, `GIT_CVAR_INT32` is now
+  `GIT_CONFIGMAP_INT32`, and `GIT_CVAR_STRING` is now `GIT_CONFIGMAP_STRING`.
+  The former names are deprecated.
+
+* Repositories can now be created at the root of a Windows drive.
+
+* Configuration lookups are now more efficiently cached.
+
+* `git_commit_create_with_signature` now supports a `NULL` signature,
+  which will create a commit without adding a signature.
+
+* When a repository lacks an `info` "common directory", we will no
+  longer erroneously return `GIT_ENOTFOUND` for all attribute lookups.
+
+* Several attribute macros have been renamed: `GIT_ATTR_TRUE` is now
+  `GIT_ATTR_IS_TRUE`, `GIT_ATTR_FALSE` is now `GIT_ATTR_IS_FALSE`,
+  `GIT_ATTR_UNSPECIFIED` is now `GIT_ATTR_IS_UNSPECIFIED`.  The 
+  attribute enum `git_attr_t` is now `git_attr_value_t` and its
+  values have been renamed: `GIT_ATTR_UNSPECIFIED_T` is now
+  `GIT_ATTR_VALUE_UNSPECIFIED`, `GIT_ATTR_TRUE_T` is now
+  `GIT_ATTR_VALUE_TRUE`, `GIT_ATTR_FALSE_T` is now `GIT_ATTR_VALUE_FALSE`,
+  and `GIT_ATTR_VALUE_T` is now `GIT_ATTR_VALUE_STRING`.  The
+  former names are deprecated.
+
+* `git_object__size` is now `git_object_size`.  The former name is
+  deprecated.
+
+* `git_tag_create_frombuffer` is now `git_tag_create_from_buffer`.  The
+  former name is deprecated.
+
+* Several blob creation functions have been renamed:
+  `git_blob_create_frombuffer` is now named `git_blob_create_from_buffer`,
+  `git_blob_create_fromdisk` is now named `git_blob_create_from_disk`,
+  `git_blob_create_fromworkdir` is now named `git_blob_create_from_workdir`,
+  `git_blob_create_fromstream` is now named `git_blob_create_from_stream`,
+  and `git_blob_create_fromstream_commit` is now named
+  `git_blob_create_from_stream_commit`.  The former names are deprecated.
+
+* The function `git_oid_iszero` is now named `git_oid_is_zero`.  The
+  former name is deprecated.
+
+* Pattern matching is now done using `wildmatch` instead of `fnmatch`
+  for compatibility with git.
+
+* The option initialization functions suffixed by `init_options` are now
+  suffixed with `options_init`.  (For example, `git_checkout_init_options`
+  is now `git_checkout_options_init`.)  The former names are deprecated.
+
+* NTLM2 authentication is now supported on non-Windows platforms.
+
+* The `git_cred_sign_callback` callback is now named `git_cred_sign_cb`.
+  The `git_cred_ssh_interactive_callback` callback is now named
+  `git_cred_ssh_interactive_cb`.
+
+* Ignore files now:
+
+  * honor escaped trailing whitespace.
+  * do not incorrectly negate sibling paths of a negated pattern.
+  * honor rules that stop ignoring files after a wildcard
+
+* Attribute files now:
+
+  * honor leading and trailing whitespace.
+  * treat paths beginning with `\` as absolute only on Windows.
+  * properly handle escaped characters.
+  * stop reading macros defined in subdirectories
+
+* The C locale is now correctly used when parsing regular expressions.
+
+* The system PCRE2 or PCRE regular expression libraries are now used
+  when `regcomp_l` is not available on the system.  If none of these
+  are available on the system, an included version of PCRE is used.
+
+* Wildcards in reference specifications are now supported beyond simply
+  a bare wildcard (`*`) for compatibility with git.
+
+* When `git_ignore_path_is_ignored` is provided a path with a trailing
+  slash (eg, `dir/`), it will now treat it as a directory for the
+  purposes of ignore matching.
+
+* Patches that add or remove a file with a space in the path can now
+  be correctly parsed.
+
+* The `git_remote_completion_type` type is now `git_remote_completion_t`.
+  The former name is deprecated.
+
+* The `git_odb_backend_malloc` is now `git_odb_backend_data_alloc`.  The
+  former name is deprecated.
+
+* The `git_transfer_progress_cb` callback is now `git_indexer_progress_cb`
+  and the `git_transfer_progress` structure is now `git_indexer_progress`.
+  The former names are deprecated.
+
+* The example projects are now contained in a single `lg2` executable
+  for ease of use.
+
+* libgit2 now correctly handles more URLs, such as
+  `http://example.com:/repo.git` (colon but no port),
+  `http://example.com` (no path),
+  and `http://example.com:8080/` (path is /, nonstandard port).
+
+* A carefully constructed commit object with a very large number
+  of parents may lead to potential out-of-bounds writes or
+  potential denial of service.
+
+* The ProgramData configuration file is always read for compatibility
+  with Git for Windows and Portable Git installations.  The ProgramData
+  location is not necessarily writable only by administrators, so we
+  now ensure that the configuration file is owned by the administrator
+  or the current user.
+
+### API additions
+
+* The SSH host key now supports SHA-256 when `GIT_CERT_SSH_SHA256` is set.
+
+* The diff format option `GIT_DIFF_FORMAT_PATCH_ID` can now be used to
+  emit an output like `git patch-id`.
+
+* The `git_apply_options_init` function will initialize a
+  `git_apply_options` structure.
+
+* The remote callbacks structure adds a `git_url_resolve_cb` callback
+  that is invoked when connecting to a server, so that applications
+  may edit or replace the URL before connection.
+
+* The information about the original `HEAD` in a rebase operation is
+  available with `git_rebase_orig_head_name`.  Its ID is available with
+  `git_rebase_orig_head_id`.  The `onto` reference name is available with
+  `git_rebase_onto_name` and its ID is available with `git_rebase_onto_id`.
+
+* ODB backends can now free backend data when an error occurs during its
+  backend data creation using `git_odb_backend_data_free`.
+
+* Options may be specified to `git_repository_foreach_head` to control
+  its behavior: `GIT_REPOSITORY_FOREACH_HEAD_SKIP_REPO` will not skip
+  the main repository's HEAD reference, while
+  `GIT_REPOSITORY_FOREACH_HEAD_SKIP_WORKTREES` will now skip the
+  worktree HEAD references.
+
+* The `GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS` option can be specified to
+  `git_libgit2_opts()` to avoid looking for `.keep` files that correspond
+  to packfiles.  This setting can improve performance when packfiles are
+  stored on high-latency filesystems like network filesystems.
+
+* Blobs can now be filtered with `git_blob_filter`, which allows for
+  options to be set with `git_blob_filter_options`, including
+  `GIT_FILTER_NO_SYSTEM_ATTRIBUTES` to disable filtering with system-level
+  attributes in `/etc/gitattributes` and `GIT_ATTR_CHECK_INCLUDE_HEAD` to
+  enable filtering with `.gitattributes` files in the HEAD revision.
+
+### API removals
+
+* The unused `git_headlist_cb` function declaration was removed.
+
+* The unused `git_time_monotonic` API is removed.
+
+* The erroneously exported `inttypes.h` header was removed.
 
 # Security Fixes
 
@@ -82,22 +366,62 @@ v0.28 + 1
   "CollisionDetection". If you were using `SHA1_BACKEND` previously, you'll
   need to check the value you've used, or switch to the autodetection.
 
-### Changes or improvements
-
-* libgit2 now correctly handles more URLs, such as
-  `http://example.com:/repo.git` (colon but no port),
-  `http://example.com` (no path),
-  and `http://example.com:8080/` (path is /, nonstandard port).
-
-* A carefully constructed commit object with a very large number
-  of parents may lead to potential out-of-bounds writes or
-  potential denial of service.
-
-* The ProgramData configuration file is always read for compatibility
-  with Git for Windows and Portable Git installations.  The ProgramData
-  location is not necessarily writable only by administrators, so we
-  now ensure that the configuration file is owned by the administrator
-  or the current user.
+### Authors
+
+The following individuals provided changes that were included in this
+release:
+
+* Aaron Patterson
+* Alberto Fanjul
+* Anders Borum
+* Augie Fackler
+* Augustin Fabre
+* Ayush Shridhar
+* brian m. carlson
+* buddyspike
+* Carlos Martín Nieto
+* cheese1
+* Dan Skorupski
+* Daniel Cohen Gindi
+* Dave Lee
+* David Brooks
+* David Turner
+* Denis Laxalde
+* Dhruva Krishnamurthy
+* Dominik Ritter
+* Drew DeVault
+* Edward Thomson
+* Eric Huss
+* Erik Aigner
+* Etienne Samson
+* Gregory Herrero
+* Heiko Voigt
+* Ian Hattendorf
+* Jacques Germishuys
+* Janardhan Pulivarthi
+* Jason Haslam
+* Johannes Schindelin
+* Jordan Wallet
+* Josh Bleecher Snyder
+* kas
+* kdj0c
+* Laurence McGlashan
+* lhchavez
+* Lukas Berk
+* Max Kostyukevich
+* Patrick Steinhardt
+* pcpthm
+* Remy Suen
+* Robert Coup
+* romkatv
+* Scott Furry
+* Sebastian Henke
+* Stefan Widgren
+* Steve King Jr
+* Sven Strickroth
+* Tobias Nießen
+* Tyler Ang-Wanek
+* Tyler Wanek
 
 v0.28
 -----
diff --git a/include/git2/version.h b/include/git2/version.h
index 148808c..4a824ff 100644
--- a/include/git2/version.h
+++ b/include/git2/version.h
@@ -7,12 +7,12 @@
 #ifndef INCLUDE_git_version_h__
 #define INCLUDE_git_version_h__
 
-#define LIBGIT2_VERSION "0.28.0"
+#define LIBGIT2_VERSION "0.99.0"
 #define LIBGIT2_VER_MAJOR 0
-#define LIBGIT2_VER_MINOR 28
+#define LIBGIT2_VER_MINOR 99
 #define LIBGIT2_VER_REVISION 0
 #define LIBGIT2_VER_PATCH 0
 
-#define LIBGIT2_SOVERSION 28
+#define LIBGIT2_SOVERSION "0.99"
 
 #endif