rugged 1.5.1 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +2 -2
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +2 -0
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +1 -0
- data/ext/rugged/rugged_repo.c +5 -2
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +1 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +5 -1
- data/vendor/libgit2/COPYING +30 -0
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +2 -0
- data/vendor/libgit2/include/git2/common.h +13 -6
- data/vendor/libgit2/include/git2/deprecated.h +6 -0
- data/vendor/libgit2/include/git2/diff.h +1 -1
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/indexer.h +29 -0
- data/vendor/libgit2/include/git2/object.h +28 -2
- data/vendor/libgit2/include/git2/odb.h +58 -7
- data/vendor/libgit2/include/git2/odb_backend.h +106 -18
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/repository.h +20 -1
- data/vendor/libgit2/include/git2/stash.h +60 -6
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/sys/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +12 -0
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +0 -6
- data/vendor/libgit2/src/cli/CMakeLists.txt +5 -2
- data/vendor/libgit2/src/cli/cmd_hash_object.c +27 -8
- data/vendor/libgit2/src/cli/opt.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +24 -15
- data/vendor/libgit2/src/libgit2/annotated_commit.c +1 -1
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/attr_file.c +1 -1
- data/vendor/libgit2/src/libgit2/attrcache.c +1 -1
- data/vendor/libgit2/src/libgit2/blame.c +2 -0
- data/vendor/libgit2/src/libgit2/blob.c +4 -2
- data/vendor/libgit2/src/libgit2/blob.h +2 -2
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +3 -3
- data/vendor/libgit2/src/libgit2/clone.c +31 -2
- data/vendor/libgit2/src/libgit2/commit.c +52 -17
- data/vendor/libgit2/src/libgit2/commit.h +25 -7
- data/vendor/libgit2/src/libgit2/commit_graph.c +47 -32
- data/vendor/libgit2/src/libgit2/commit_graph.h +3 -0
- data/vendor/libgit2/src/libgit2/commit_list.c +6 -2
- data/vendor/libgit2/src/libgit2/config.c +1 -1
- data/vendor/libgit2/src/libgit2/config_file.c +2 -2
- data/vendor/libgit2/src/libgit2/describe.c +8 -8
- data/vendor/libgit2/src/libgit2/diff.c +5 -1
- data/vendor/libgit2/src/libgit2/diff_file.c +15 -6
- data/vendor/libgit2/src/libgit2/diff_generate.c +17 -12
- data/vendor/libgit2/src/libgit2/diff_print.c +5 -5
- data/vendor/libgit2/src/libgit2/diff_tform.c +4 -0
- data/vendor/libgit2/src/libgit2/email.c +2 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/libgit2/fetch.c +3 -6
- data/vendor/libgit2/src/libgit2/fetchhead.c +4 -4
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/index.c +13 -12
- data/vendor/libgit2/src/libgit2/indexer.c +107 -44
- data/vendor/libgit2/src/libgit2/iterator.c +4 -2
- data/vendor/libgit2/src/libgit2/libgit2.c +19 -0
- data/vendor/libgit2/src/libgit2/merge.c +3 -3
- data/vendor/libgit2/src/libgit2/midx.c +16 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +5 -2
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -1
- data/vendor/libgit2/src/libgit2/notes.c +5 -5
- data/vendor/libgit2/src/libgit2/object.c +89 -25
- data/vendor/libgit2/src/libgit2/object.h +12 -3
- data/vendor/libgit2/src/libgit2/odb.c +213 -50
- data/vendor/libgit2/src/libgit2/odb.h +43 -4
- data/vendor/libgit2/src/libgit2/odb_loose.c +128 -70
- data/vendor/libgit2/src/libgit2/odb_pack.c +96 -44
- data/vendor/libgit2/src/libgit2/oid.c +134 -76
- data/vendor/libgit2/src/libgit2/oid.h +183 -9
- data/vendor/libgit2/src/libgit2/pack-objects.c +15 -4
- data/vendor/libgit2/src/libgit2/pack.c +92 -69
- data/vendor/libgit2/src/libgit2/pack.h +29 -15
- data/vendor/libgit2/src/libgit2/parse.c +4 -3
- data/vendor/libgit2/src/libgit2/patch_parse.c +5 -5
- data/vendor/libgit2/src/libgit2/push.c +13 -3
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +19 -18
- data/vendor/libgit2/src/libgit2/refdb_fs.c +70 -39
- data/vendor/libgit2/src/libgit2/reflog.c +7 -5
- data/vendor/libgit2/src/libgit2/reflog.h +1 -2
- data/vendor/libgit2/src/libgit2/refs.c +2 -0
- data/vendor/libgit2/src/libgit2/remote.c +38 -37
- data/vendor/libgit2/src/libgit2/remote.h +40 -0
- data/vendor/libgit2/src/libgit2/repository.c +212 -36
- data/vendor/libgit2/src/libgit2/repository.h +9 -0
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +4 -4
- data/vendor/libgit2/src/libgit2/revparse.c +23 -7
- data/vendor/libgit2/src/libgit2/revwalk.c +5 -1
- data/vendor/libgit2/src/libgit2/stash.c +201 -26
- data/vendor/libgit2/src/libgit2/strarray.c +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/libgit2/streams/openssl.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/libgit2/streams/socket.c +4 -1
- data/vendor/libgit2/src/libgit2/submodule.c +6 -2
- data/vendor/libgit2/src/libgit2/sysdir.c +294 -7
- data/vendor/libgit2/src/libgit2/sysdir.h +41 -9
- data/vendor/libgit2/src/libgit2/tag.c +29 -10
- data/vendor/libgit2/src/libgit2/tag.h +2 -2
- data/vendor/libgit2/src/libgit2/threadstate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +9 -0
- data/vendor/libgit2/src/libgit2/transports/httpclient.h +10 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +14 -0
- data/vendor/libgit2/src/libgit2/transports/smart.c +35 -0
- data/vendor/libgit2/src/libgit2/transports/smart.h +10 -1
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +153 -41
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +42 -12
- data/vendor/libgit2/src/libgit2/transports/ssh.c +62 -65
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +9 -4
- data/vendor/libgit2/src/libgit2/tree-cache.c +4 -4
- data/vendor/libgit2/src/libgit2/tree.c +22 -16
- data/vendor/libgit2/src/libgit2/tree.h +2 -2
- data/vendor/libgit2/src/libgit2/worktree.c +5 -0
- data/vendor/libgit2/src/util/CMakeLists.txt +6 -1
- data/vendor/libgit2/src/util/fs_path.c +1 -1
- data/vendor/libgit2/src/util/futils.c +0 -3
- data/vendor/libgit2/src/util/git2_util.h +2 -2
- data/vendor/libgit2/src/util/hash/openssl.c +4 -3
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +0 -112
- data/vendor/libgit2/src/util/hash.h +13 -0
- data/vendor/libgit2/src/util/net.c +338 -84
- data/vendor/libgit2/src/util/net.h +7 -0
- data/vendor/libgit2/src/util/posix.h +2 -0
- data/vendor/libgit2/src/util/rand.c +4 -0
- data/vendor/libgit2/src/util/regexp.c +3 -3
- data/vendor/libgit2/src/util/thread.h +20 -19
- data/vendor/libgit2/src/util/util.h +1 -0
- metadata +7 -5
- data/vendor/libgit2/src/util/win32/findfile.c +0 -286
- data/vendor/libgit2/src/util/win32/findfile.h +0 -22
- /data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +0 -0
@@ -138,19 +138,19 @@ static int commit_graph_parse_oid_lookup(
|
|
138
138
|
struct git_commit_graph_chunk *chunk_oid_lookup)
|
139
139
|
{
|
140
140
|
uint32_t i;
|
141
|
-
unsigned char *oid, *prev_oid, zero_oid[
|
141
|
+
unsigned char *oid, *prev_oid, zero_oid[GIT_OID_SHA1_SIZE] = {0};
|
142
142
|
|
143
143
|
if (chunk_oid_lookup->offset == 0)
|
144
144
|
return commit_graph_error("missing OID Lookup chunk");
|
145
145
|
if (chunk_oid_lookup->length == 0)
|
146
146
|
return commit_graph_error("empty OID Lookup chunk");
|
147
|
-
if (chunk_oid_lookup->length != file->num_commits *
|
147
|
+
if (chunk_oid_lookup->length != file->num_commits * GIT_OID_SHA1_SIZE)
|
148
148
|
return commit_graph_error("OID Lookup chunk has wrong length");
|
149
149
|
|
150
150
|
file->oid_lookup = oid = (unsigned char *)(data + chunk_oid_lookup->offset);
|
151
151
|
prev_oid = zero_oid;
|
152
|
-
for (i = 0; i < file->num_commits; ++i, oid +=
|
153
|
-
if (git_oid_raw_cmp(prev_oid, oid) >= 0)
|
152
|
+
for (i = 0; i < file->num_commits; ++i, oid += GIT_OID_SHA1_SIZE) {
|
153
|
+
if (git_oid_raw_cmp(prev_oid, oid, GIT_OID_SHA1_SIZE) >= 0)
|
154
154
|
return commit_graph_error("OID Lookup index is non-monotonic");
|
155
155
|
prev_oid = oid;
|
156
156
|
}
|
@@ -167,7 +167,7 @@ static int commit_graph_parse_commit_data(
|
|
167
167
|
return commit_graph_error("missing Commit Data chunk");
|
168
168
|
if (chunk_commit_data->length == 0)
|
169
169
|
return commit_graph_error("empty Commit Data chunk");
|
170
|
-
if (chunk_commit_data->length != file->num_commits * (
|
170
|
+
if (chunk_commit_data->length != file->num_commits * (GIT_OID_SHA1_SIZE + 16))
|
171
171
|
return commit_graph_error("Commit Data chunk has wrong length");
|
172
172
|
|
173
173
|
file->commit_data = data + chunk_commit_data->offset;
|
@@ -200,8 +200,7 @@ int git_commit_graph_file_parse(
|
|
200
200
|
const unsigned char *chunk_hdr;
|
201
201
|
struct git_commit_graph_chunk *last_chunk;
|
202
202
|
uint32_t i;
|
203
|
-
|
204
|
-
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
203
|
+
uint64_t last_chunk_offset, chunk_offset, trailer_offset;
|
205
204
|
size_t checksum_size;
|
206
205
|
int error;
|
207
206
|
struct git_commit_graph_chunk chunk_oid_fanout = {0}, chunk_oid_lookup = {0},
|
@@ -210,7 +209,7 @@ int git_commit_graph_file_parse(
|
|
210
209
|
|
211
210
|
GIT_ASSERT_ARG(file);
|
212
211
|
|
213
|
-
if (size < sizeof(struct git_commit_graph_header) +
|
212
|
+
if (size < sizeof(struct git_commit_graph_header) + GIT_OID_SHA1_SIZE)
|
214
213
|
return commit_graph_error("commit-graph is too short");
|
215
214
|
|
216
215
|
hdr = ((struct git_commit_graph_header *)data);
|
@@ -227,23 +226,18 @@ int git_commit_graph_file_parse(
|
|
227
226
|
* headers, and a special zero chunk.
|
228
227
|
*/
|
229
228
|
last_chunk_offset = sizeof(struct git_commit_graph_header) + (1 + hdr->chunks) * 12;
|
230
|
-
trailer_offset = size -
|
229
|
+
trailer_offset = size - GIT_OID_SHA1_SIZE;
|
231
230
|
checksum_size = GIT_HASH_SHA1_SIZE;
|
232
231
|
|
233
232
|
if (trailer_offset < last_chunk_offset)
|
234
233
|
return commit_graph_error("wrong commit-graph size");
|
235
234
|
memcpy(file->checksum, (data + trailer_offset), checksum_size);
|
236
235
|
|
237
|
-
if (git_hash_buf(checksum, data, (size_t)trailer_offset, GIT_HASH_ALGORITHM_SHA1) < 0)
|
238
|
-
return commit_graph_error("could not calculate signature");
|
239
|
-
if (memcmp(checksum, file->checksum, checksum_size) != 0)
|
240
|
-
return commit_graph_error("index signature mismatch");
|
241
|
-
|
242
236
|
chunk_hdr = data + sizeof(struct git_commit_graph_header);
|
243
237
|
last_chunk = NULL;
|
244
238
|
for (i = 0; i < hdr->chunks; ++i, chunk_hdr += 12) {
|
245
|
-
chunk_offset = ((
|
246
|
-
| ((
|
239
|
+
chunk_offset = ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 4)))) << 32
|
240
|
+
| ((uint64_t)ntohl(*((uint32_t *)(chunk_hdr + 8))));
|
247
241
|
if (chunk_offset < last_chunk_offset)
|
248
242
|
return commit_graph_error("chunks are non-monotonic");
|
249
243
|
if (chunk_offset >= trailer_offset)
|
@@ -331,9 +325,29 @@ error:
|
|
331
325
|
return error;
|
332
326
|
}
|
333
327
|
|
328
|
+
int git_commit_graph_validate(git_commit_graph *cgraph) {
|
329
|
+
unsigned char checksum[GIT_HASH_SHA1_SIZE];
|
330
|
+
size_t checksum_size = GIT_HASH_SHA1_SIZE;
|
331
|
+
size_t trailer_offset = cgraph->file->graph_map.len - checksum_size;
|
332
|
+
|
333
|
+
if (cgraph->file->graph_map.len < checksum_size)
|
334
|
+
return commit_graph_error("map length too small");
|
335
|
+
|
336
|
+
if (git_hash_buf(checksum, cgraph->file->graph_map.data, trailer_offset, GIT_HASH_ALGORITHM_SHA1) < 0)
|
337
|
+
return commit_graph_error("could not calculate signature");
|
338
|
+
if (memcmp(checksum, cgraph->file->checksum, checksum_size) != 0)
|
339
|
+
return commit_graph_error("index signature mismatch");
|
340
|
+
|
341
|
+
return 0;
|
342
|
+
}
|
343
|
+
|
334
344
|
int git_commit_graph_open(git_commit_graph **cgraph_out, const char *objects_dir)
|
335
345
|
{
|
336
|
-
|
346
|
+
int error = git_commit_graph_new(cgraph_out, objects_dir, true);
|
347
|
+
if (!error) {
|
348
|
+
return git_commit_graph_validate(*cgraph_out);
|
349
|
+
}
|
350
|
+
return error;
|
337
351
|
}
|
338
352
|
|
339
353
|
int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path)
|
@@ -436,15 +450,15 @@ static int git_commit_graph_entry_get_byindex(
|
|
436
450
|
return GIT_ENOTFOUND;
|
437
451
|
}
|
438
452
|
|
439
|
-
commit_data = file->commit_data + pos * (
|
440
|
-
|
441
|
-
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data +
|
453
|
+
commit_data = file->commit_data + pos * (GIT_OID_SHA1_SIZE + 4 * sizeof(uint32_t));
|
454
|
+
git_oid__fromraw(&e->tree_oid, commit_data, GIT_OID_SHA1);
|
455
|
+
e->parent_indices[0] = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE)));
|
442
456
|
e->parent_indices[1] = ntohl(
|
443
|
-
*((uint32_t *)(commit_data +
|
457
|
+
*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + sizeof(uint32_t))));
|
444
458
|
e->parent_count = (e->parent_indices[0] != GIT_COMMIT_GRAPH_MISSING_PARENT)
|
445
459
|
+ (e->parent_indices[1] != GIT_COMMIT_GRAPH_MISSING_PARENT);
|
446
|
-
e->generation = ntohl(*((uint32_t *)(commit_data +
|
447
|
-
e->commit_time = ntohl(*((uint32_t *)(commit_data +
|
460
|
+
e->generation = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 2 * sizeof(uint32_t))));
|
461
|
+
e->commit_time = ntohl(*((uint32_t *)(commit_data + GIT_OID_SHA1_SIZE + 3 * sizeof(uint32_t))));
|
448
462
|
|
449
463
|
e->commit_time |= (e->generation & UINT64_C(0x3)) << UINT64_C(32);
|
450
464
|
e->generation >>= 2u;
|
@@ -471,7 +485,7 @@ static int git_commit_graph_entry_get_byindex(
|
|
471
485
|
}
|
472
486
|
}
|
473
487
|
|
474
|
-
|
488
|
+
git_oid__fromraw(&e->sha1, &file->oid_lookup[pos * GIT_OID_SHA1_SIZE], GIT_OID_SHA1);
|
475
489
|
return 0;
|
476
490
|
}
|
477
491
|
|
@@ -524,27 +538,27 @@ int git_commit_graph_entry_find(
|
|
524
538
|
hi = ntohl(file->oid_fanout[(int)short_oid->id[0]]);
|
525
539
|
lo = ((short_oid->id[0] == 0x0) ? 0 : ntohl(file->oid_fanout[(int)short_oid->id[0] - 1]));
|
526
540
|
|
527
|
-
pos =
|
541
|
+
pos = git_pack__lookup_id(file->oid_lookup, GIT_OID_SHA1_SIZE, lo, hi, short_oid->id, GIT_OID_SHA1);
|
528
542
|
|
529
543
|
if (pos >= 0) {
|
530
544
|
/* An object matching exactly the oid was found */
|
531
545
|
found = 1;
|
532
|
-
current = file->oid_lookup + (pos *
|
546
|
+
current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
|
533
547
|
} else {
|
534
548
|
/* No object was found */
|
535
549
|
/* pos refers to the object with the "closest" oid to short_oid */
|
536
550
|
pos = -1 - pos;
|
537
551
|
if (pos < (int)file->num_commits) {
|
538
|
-
current = file->oid_lookup + (pos *
|
552
|
+
current = file->oid_lookup + (pos * GIT_OID_SHA1_SIZE);
|
539
553
|
|
540
554
|
if (!git_oid_raw_ncmp(short_oid->id, current, len))
|
541
555
|
found = 1;
|
542
556
|
}
|
543
557
|
}
|
544
558
|
|
545
|
-
if (found && len !=
|
559
|
+
if (found && len != GIT_OID_SHA1_HEXSIZE && pos + 1 < (int)file->num_commits) {
|
546
560
|
/* Check for ambiguousity */
|
547
|
-
const unsigned char *next = current +
|
561
|
+
const unsigned char *next = current + GIT_OID_SHA1_SIZE;
|
548
562
|
|
549
563
|
if (!git_oid_raw_ncmp(short_oid->id, next, len))
|
550
564
|
found = 2;
|
@@ -712,7 +726,8 @@ int git_commit_graph_writer_add_index_file(
|
|
712
726
|
if (error < 0)
|
713
727
|
goto cleanup;
|
714
728
|
|
715
|
-
|
729
|
+
/* TODO: SHA256 */
|
730
|
+
error = git_mwindow_get_pack(&p, idx_path, 0);
|
716
731
|
if (error < 0)
|
717
732
|
goto cleanup;
|
718
733
|
|
@@ -1020,7 +1035,7 @@ static int commit_graph_write(
|
|
1020
1035
|
git_vector_foreach (&w->commits, i, packed_commit) {
|
1021
1036
|
error = git_str_put(&oid_lookup,
|
1022
1037
|
(const char *)&packed_commit->sha1.id,
|
1023
|
-
|
1038
|
+
GIT_OID_SHA1_SIZE);
|
1024
1039
|
|
1025
1040
|
if (error < 0)
|
1026
1041
|
goto cleanup;
|
@@ -1037,7 +1052,7 @@ static int commit_graph_write(
|
|
1037
1052
|
|
1038
1053
|
error = git_str_put(&commit_data,
|
1039
1054
|
(const char *)&packed_commit->tree_oid.id,
|
1040
|
-
|
1055
|
+
GIT_OID_SHA1_SIZE);
|
1041
1056
|
|
1042
1057
|
if (error < 0)
|
1043
1058
|
goto cleanup;
|
@@ -106,6 +106,9 @@ struct git_commit_graph {
|
|
106
106
|
/** Create a new commit-graph, optionally opening the underlying file. */
|
107
107
|
int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
|
108
108
|
|
109
|
+
/** Validate the checksum of a commit graph */
|
110
|
+
int git_commit_graph_validate(git_commit_graph *cgraph);
|
111
|
+
|
109
112
|
/** Open and validate a commit-graph file. */
|
110
113
|
int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
|
111
114
|
|
@@ -124,13 +124,17 @@ static int commit_quick_parse(
|
|
124
124
|
{
|
125
125
|
git_oid *parent_oid;
|
126
126
|
git_commit *commit;
|
127
|
+
git_commit__parse_options parse_opts = {
|
128
|
+
GIT_OID_SHA1,
|
129
|
+
GIT_COMMIT_PARSE_QUICK
|
130
|
+
};
|
127
131
|
size_t i;
|
128
132
|
|
129
133
|
commit = git__calloc(1, sizeof(*commit));
|
130
134
|
GIT_ERROR_CHECK_ALLOC(commit);
|
131
135
|
commit->object.repo = walk->repo;
|
132
136
|
|
133
|
-
if (git_commit__parse_ext(commit, obj,
|
137
|
+
if (git_commit__parse_ext(commit, obj, &parse_opts) < 0) {
|
134
138
|
git__free(commit);
|
135
139
|
return -1;
|
136
140
|
}
|
@@ -172,7 +176,7 @@ int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
|
|
172
176
|
if (cgraph_file) {
|
173
177
|
git_commit_graph_entry e;
|
174
178
|
|
175
|
-
error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid,
|
179
|
+
error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_SHA1_SIZE);
|
176
180
|
if (error == 0 && git__is_uint16(e.parent_count)) {
|
177
181
|
size_t i;
|
178
182
|
commit->generation = (uint32_t)e.generation;
|
@@ -860,7 +860,7 @@ static int git_config__parse_path(git_str *out, const char *value)
|
|
860
860
|
return -1;
|
861
861
|
}
|
862
862
|
|
863
|
-
return
|
863
|
+
return git_sysdir_expand_homedir_file(out, value[1] ? &value[2] : NULL);
|
864
864
|
}
|
865
865
|
|
866
866
|
return git_str_sets(out, value);
|
@@ -528,7 +528,7 @@ static int included_path(git_str *out, const char *dir, const char *path)
|
|
528
528
|
{
|
529
529
|
/* From the user's home */
|
530
530
|
if (path[0] == '~' && path[1] == '/')
|
531
|
-
return
|
531
|
+
return git_sysdir_expand_homedir_file(out, &path[1]);
|
532
532
|
|
533
533
|
return git_fs_path_join_unrooted(out, path, dir, NULL);
|
534
534
|
}
|
@@ -616,7 +616,7 @@ static int do_match_gitdir(
|
|
616
616
|
git_fs_path_dirname_r(&pattern, cfg_file);
|
617
617
|
git_str_joinpath(&pattern, pattern.ptr, condition + 2);
|
618
618
|
} else if (condition[0] == '~' && git_fs_path_is_dirsep(condition[1]))
|
619
|
-
|
619
|
+
git_sysdir_expand_homedir_file(&pattern, condition + 1);
|
620
620
|
else if (!git_fs_path_is_absolute(condition))
|
621
621
|
git_str_joinpath(&pattern, "**", condition);
|
622
622
|
else
|
@@ -8,7 +8,6 @@
|
|
8
8
|
#include "common.h"
|
9
9
|
|
10
10
|
#include "git2/describe.h"
|
11
|
-
#include "git2/strarray.h"
|
12
11
|
#include "git2/diff.h"
|
13
12
|
#include "git2/status.h"
|
14
13
|
|
@@ -19,6 +18,7 @@
|
|
19
18
|
#include "refs.h"
|
20
19
|
#include "repository.h"
|
21
20
|
#include "revwalk.h"
|
21
|
+
#include "strarray.h"
|
22
22
|
#include "tag.h"
|
23
23
|
#include "vector.h"
|
24
24
|
#include "wildmatch.h"
|
@@ -368,7 +368,7 @@ static int find_unique_abbrev_size(
|
|
368
368
|
if ((error = git_repository_odb__weakptr(&odb, repo)) < 0)
|
369
369
|
return error;
|
370
370
|
|
371
|
-
while (size <
|
371
|
+
while (size < GIT_OID_SHA1_HEXSIZE) {
|
372
372
|
if ((error = git_odb_exists_prefix(&dummy, odb, oid_in, size)) == 0) {
|
373
373
|
*out = (int) size;
|
374
374
|
return 0;
|
@@ -383,7 +383,7 @@ static int find_unique_abbrev_size(
|
|
383
383
|
}
|
384
384
|
|
385
385
|
/* If we didn't find any shorter prefix, we have to do the whole thing */
|
386
|
-
*out =
|
386
|
+
*out = GIT_OID_SHA1_HEXSIZE;
|
387
387
|
|
388
388
|
return 0;
|
389
389
|
}
|
@@ -397,7 +397,7 @@ static int show_suffix(
|
|
397
397
|
{
|
398
398
|
int error, size = 0;
|
399
399
|
|
400
|
-
char hex_oid[
|
400
|
+
char hex_oid[GIT_OID_SHA1_HEXSIZE];
|
401
401
|
|
402
402
|
if ((error = find_unique_abbrev_size(&size, repo, id, abbrev_size)) < 0)
|
403
403
|
return error;
|
@@ -414,7 +414,7 @@ static int show_suffix(
|
|
414
414
|
#define MAX_CANDIDATES_TAGS FLAG_BITS - 1
|
415
415
|
|
416
416
|
static int describe_not_found(const git_oid *oid, const char *message_format) {
|
417
|
-
char oid_str[
|
417
|
+
char oid_str[GIT_OID_SHA1_HEXSIZE + 1];
|
418
418
|
git_oid_tostr(oid_str, sizeof(oid_str), oid);
|
419
419
|
|
420
420
|
git_error_set(GIT_ERROR_DESCRIBE, message_format, oid_str);
|
@@ -525,7 +525,7 @@ static int describe(
|
|
525
525
|
if (annotated_cnt && (git_pqueue_size(&list) == 0)) {
|
526
526
|
/*
|
527
527
|
if (debug) {
|
528
|
-
char oid_str[
|
528
|
+
char oid_str[GIT_OID_SHA1_HEXSIZE + 1];
|
529
529
|
git_oid_tostr(oid_str, sizeof(oid_str), &c->oid);
|
530
530
|
|
531
531
|
fprintf(stderr, "finished search at %s\n", oid_str);
|
@@ -592,7 +592,7 @@ static int describe(
|
|
592
592
|
"head", "lightweight", "annotated",
|
593
593
|
};
|
594
594
|
|
595
|
-
char oid_str[
|
595
|
+
char oid_str[GIT_OID_SHA1_HEXSIZE + 1];
|
596
596
|
|
597
597
|
if (debug) {
|
598
598
|
for (cur_match = 0; cur_match < match_cnt; cur_match++) {
|
@@ -816,7 +816,7 @@ static int git_describe__format(
|
|
816
816
|
|
817
817
|
/* If we didn't find *any* tags, we fall back to the commit's id */
|
818
818
|
if (result->fallback_to_id) {
|
819
|
-
char hex_oid[
|
819
|
+
char hex_oid[GIT_OID_SHA1_HEXSIZE + 1] = {0};
|
820
820
|
int size = 0;
|
821
821
|
|
822
822
|
if ((error = find_unique_abbrev_size(
|
@@ -290,7 +290,7 @@ static int flush_hunk(git_oid *result, git_hash_ctx *ctx)
|
|
290
290
|
(error = git_hash_init(ctx)) < 0)
|
291
291
|
return error;
|
292
292
|
|
293
|
-
for (i = 0; i <
|
293
|
+
for (i = 0; i < GIT_OID_SHA1_SIZE; i++) {
|
294
294
|
carry += result->id[i] + hash.id[i];
|
295
295
|
result->id[i] = (unsigned char)carry;
|
296
296
|
carry >>= 8;
|
@@ -381,6 +381,10 @@ int git_diff_patchid(git_oid *out, git_diff *diff, git_diff_patchid_options *opt
|
|
381
381
|
if ((error = (flush_hunk(&args.result, &args.ctx))) < 0)
|
382
382
|
goto out;
|
383
383
|
|
384
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
385
|
+
args.result.type = GIT_OID_SHA1;
|
386
|
+
#endif
|
387
|
+
|
384
388
|
git_oid_cpy(out, &args.result);
|
385
389
|
|
386
390
|
out:
|
@@ -144,6 +144,7 @@ int git_diff_file_content__init_from_src(
|
|
144
144
|
|
145
145
|
if (!src->blob && !src->buf) {
|
146
146
|
fc->flags |= GIT_DIFF_FLAG__NO_DATA;
|
147
|
+
git_oid_clear(&fc->file->id, GIT_OID_SHA1);
|
147
148
|
} else {
|
148
149
|
fc->flags |= GIT_DIFF_FLAG__LOADED;
|
149
150
|
fc->file->flags |= GIT_DIFF_FLAG_VALID_ID;
|
@@ -153,7 +154,7 @@ int git_diff_file_content__init_from_src(
|
|
153
154
|
git_blob_dup((git_blob **)&fc->blob, (git_blob *) src->blob);
|
154
155
|
fc->file->size = git_blob_rawsize(src->blob);
|
155
156
|
git_oid_cpy(&fc->file->id, git_blob_id(src->blob));
|
156
|
-
fc->file->id_abbrev =
|
157
|
+
fc->file->id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
157
158
|
|
158
159
|
fc->map.len = (size_t)fc->file->size;
|
159
160
|
fc->map.data = (char *)git_blob_rawcontent(src->blob);
|
@@ -161,10 +162,10 @@ int git_diff_file_content__init_from_src(
|
|
161
162
|
fc->flags |= GIT_DIFF_FLAG__FREE_BLOB;
|
162
163
|
} else {
|
163
164
|
int error;
|
164
|
-
if ((error =
|
165
|
+
if ((error = git_odb__hash(&fc->file->id, src->buf, src->buflen, GIT_OBJECT_BLOB, GIT_OID_SHA1)) < 0)
|
165
166
|
return error;
|
166
167
|
fc->file->size = src->buflen;
|
167
|
-
fc->file->id_abbrev =
|
168
|
+
fc->file->id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
168
169
|
|
169
170
|
fc->map.len = src->buflen;
|
170
171
|
fc->map.data = (char *)src->buf;
|
@@ -177,7 +178,7 @@ int git_diff_file_content__init_from_src(
|
|
177
178
|
static int diff_file_content_commit_to_str(
|
178
179
|
git_diff_file_content *fc, bool check_status)
|
179
180
|
{
|
180
|
-
char oid[
|
181
|
+
char oid[GIT_OID_SHA1_HEXSIZE+1];
|
181
182
|
git_str content = GIT_STR_INIT;
|
182
183
|
const char *status = "";
|
183
184
|
|
@@ -347,6 +348,13 @@ static int diff_file_content_load_workdir_file(
|
|
347
348
|
goto cleanup;
|
348
349
|
}
|
349
350
|
|
351
|
+
/* if file is empty, don't attempt to mmap or readbuffer */
|
352
|
+
if (fc->file->size == 0) {
|
353
|
+
fc->map.len = 0;
|
354
|
+
fc->map.data = git_str__initstr;
|
355
|
+
goto cleanup;
|
356
|
+
}
|
357
|
+
|
350
358
|
if ((diff_opts->flags & GIT_DIFF_SHOW_BINARY) == 0 &&
|
351
359
|
diff_file_content_binary_by_size(fc))
|
352
360
|
goto cleanup;
|
@@ -410,8 +418,9 @@ static int diff_file_content_load_workdir(
|
|
410
418
|
|
411
419
|
/* once data is loaded, update OID if we didn't have it previously */
|
412
420
|
if (!error && (fc->file->flags & GIT_DIFF_FLAG_VALID_ID) == 0) {
|
413
|
-
error =
|
414
|
-
&fc->file->id, fc->map.data, fc->map.len,
|
421
|
+
error = git_odb__hash(
|
422
|
+
&fc->file->id, fc->map.data, fc->map.len,
|
423
|
+
GIT_OBJECT_BLOB, GIT_OID_SHA1);
|
415
424
|
fc->file->flags |= GIT_DIFF_FLAG_VALID_ID;
|
416
425
|
}
|
417
426
|
|
@@ -61,6 +61,9 @@ static git_diff_delta *diff_delta__alloc(
|
|
61
61
|
}
|
62
62
|
delta->status = status;
|
63
63
|
|
64
|
+
git_oid_clear(&delta->old_file.id, GIT_OID_SHA1);
|
65
|
+
git_oid_clear(&delta->new_file.id, GIT_OID_SHA1);
|
66
|
+
|
64
67
|
return delta;
|
65
68
|
}
|
66
69
|
|
@@ -188,13 +191,15 @@ static int diff_delta__from_one(
|
|
188
191
|
delta->old_file.size = entry->file_size;
|
189
192
|
delta->old_file.flags |= GIT_DIFF_FLAG_EXISTS;
|
190
193
|
git_oid_cpy(&delta->old_file.id, &entry->id);
|
191
|
-
delta->
|
194
|
+
git_oid_clear(&delta->new_file.id, GIT_OID_SHA1);
|
195
|
+
delta->old_file.id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
192
196
|
} else /* ADDED, IGNORED, UNTRACKED */ {
|
193
197
|
delta->new_file.mode = entry->mode;
|
194
198
|
delta->new_file.size = entry->file_size;
|
195
199
|
delta->new_file.flags |= GIT_DIFF_FLAG_EXISTS;
|
200
|
+
git_oid_clear(&delta->old_file.id, GIT_OID_SHA1);
|
196
201
|
git_oid_cpy(&delta->new_file.id, &entry->id);
|
197
|
-
delta->new_file.id_abbrev =
|
202
|
+
delta->new_file.id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
198
203
|
}
|
199
204
|
|
200
205
|
delta->old_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
@@ -249,14 +254,14 @@ static int diff_delta__from_two(
|
|
249
254
|
delta->old_file.size = old_entry->file_size;
|
250
255
|
delta->old_file.mode = old_mode;
|
251
256
|
git_oid_cpy(&delta->old_file.id, old_id);
|
252
|
-
delta->old_file.id_abbrev =
|
257
|
+
delta->old_file.id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
253
258
|
delta->old_file.flags |= GIT_DIFF_FLAG_VALID_ID |
|
254
259
|
GIT_DIFF_FLAG_EXISTS;
|
255
260
|
}
|
256
261
|
|
257
262
|
if (!git_index_entry_is_conflict(new_entry)) {
|
258
263
|
git_oid_cpy(&delta->new_file.id, new_id);
|
259
|
-
delta->new_file.id_abbrev =
|
264
|
+
delta->new_file.id_abbrev = GIT_OID_SHA1_HEXSIZE;
|
260
265
|
delta->new_file.size = new_entry->file_size;
|
261
266
|
delta->new_file.mode = new_mode;
|
262
267
|
delta->old_file.flags |= GIT_DIFF_FLAG_EXISTS;
|
@@ -598,6 +603,7 @@ int git_diff__oid_for_file(
|
|
598
603
|
entry.mode = mode;
|
599
604
|
entry.file_size = (uint32_t)size;
|
600
605
|
entry.path = (char *)path;
|
606
|
+
git_oid_clear(&entry.id, GIT_OID_SHA1);
|
601
607
|
|
602
608
|
return git_diff__oid_for_entry(out, diff, &entry, mode, NULL);
|
603
609
|
}
|
@@ -618,7 +624,7 @@ int git_diff__oid_for_entry(
|
|
618
624
|
GIT_ASSERT(d->type == GIT_DIFF_TYPE_GENERATED);
|
619
625
|
diff = (git_diff_generated *)d;
|
620
626
|
|
621
|
-
|
627
|
+
git_oid_clear(out, GIT_OID_SHA1);
|
622
628
|
|
623
629
|
if (git_repository_workdir_path(&full_path, diff->base.repo, entry.path) < 0)
|
624
630
|
return -1;
|
@@ -654,7 +660,7 @@ int git_diff__oid_for_entry(
|
|
654
660
|
git_error_clear();
|
655
661
|
}
|
656
662
|
} else if (S_ISLNK(mode)) {
|
657
|
-
error = git_odb__hashlink(out, full_path.ptr);
|
663
|
+
error = git_odb__hashlink(out, full_path.ptr, GIT_OID_SHA1);
|
658
664
|
diff->base.perf.oid_calculations++;
|
659
665
|
} else if (!git__is_sizet(entry.file_size)) {
|
660
666
|
git_error_set(GIT_ERROR_NOMEMORY, "file size overflow (for 32-bits) on '%s'",
|
@@ -669,7 +675,8 @@ int git_diff__oid_for_entry(
|
|
669
675
|
error = fd;
|
670
676
|
else {
|
671
677
|
error = git_odb__hashfd_filtered(
|
672
|
-
out, fd, (size_t)entry.file_size,
|
678
|
+
out, fd, (size_t)entry.file_size,
|
679
|
+
GIT_OBJECT_BLOB, GIT_OID_SHA1, fl);
|
673
680
|
p_close(fd);
|
674
681
|
diff->base.perf.oid_calculations++;
|
675
682
|
}
|
@@ -778,7 +785,7 @@ static int maybe_modified(
|
|
778
785
|
git_diff_generated *diff,
|
779
786
|
diff_in_progress *info)
|
780
787
|
{
|
781
|
-
git_oid noid;
|
788
|
+
git_oid noid = GIT_OID_SHA1_ZERO;
|
782
789
|
git_delta_t status = GIT_DELTA_MODIFIED;
|
783
790
|
const git_index_entry *oitem = info->oitem;
|
784
791
|
const git_index_entry *nitem = info->nitem;
|
@@ -792,8 +799,6 @@ static int maybe_modified(
|
|
792
799
|
if (!diff_pathspec_match(&matched_pathspec, diff, oitem))
|
793
800
|
return 0;
|
794
801
|
|
795
|
-
memset(&noid, 0, sizeof(noid));
|
796
|
-
|
797
802
|
/* on platforms with no symlinks, preserve mode of existing symlinks */
|
798
803
|
if (S_ISLNK(omode) && S_ISREG(nmode) && new_is_workdir &&
|
799
804
|
!(diff->diffcaps & GIT_DIFFCAPS_HAS_SYMLINKS))
|
@@ -1695,11 +1700,11 @@ int git_diff__commit(
|
|
1695
1700
|
*out = NULL;
|
1696
1701
|
|
1697
1702
|
if ((parents = git_commit_parentcount(commit)) > 1) {
|
1698
|
-
char commit_oidstr[
|
1703
|
+
char commit_oidstr[GIT_OID_SHA1_HEXSIZE + 1];
|
1699
1704
|
|
1700
1705
|
error = -1;
|
1701
1706
|
git_error_set(GIT_ERROR_INVALID, "commit %s is a merge commit",
|
1702
|
-
git_oid_tostr(commit_oidstr,
|
1707
|
+
git_oid_tostr(commit_oidstr, GIT_OID_SHA1_HEXSIZE + 1, git_commit_id(commit)));
|
1703
1708
|
goto on_error;
|
1704
1709
|
}
|
1705
1710
|
|
@@ -53,8 +53,8 @@ static int diff_print_info_init__common(
|
|
53
53
|
return -1;
|
54
54
|
}
|
55
55
|
|
56
|
-
if (pi->id_strlen >
|
57
|
-
pi->id_strlen =
|
56
|
+
if (pi->id_strlen > GIT_OID_SHA1_HEXSIZE)
|
57
|
+
pi->id_strlen = GIT_OID_SHA1_HEXSIZE;
|
58
58
|
|
59
59
|
memset(&pi->line, 0, sizeof(pi->line));
|
60
60
|
pi->line.old_lineno = -1;
|
@@ -212,7 +212,7 @@ static int diff_print_one_raw(
|
|
212
212
|
git_str *out = pi->buf;
|
213
213
|
int id_abbrev;
|
214
214
|
char code = git_diff_status_char(delta->status);
|
215
|
-
char start_oid[
|
215
|
+
char start_oid[GIT_OID_SHA1_HEXSIZE+1], end_oid[GIT_OID_SHA1_HEXSIZE+1];
|
216
216
|
|
217
217
|
GIT_UNUSED(progress);
|
218
218
|
|
@@ -235,7 +235,7 @@ static int diff_print_one_raw(
|
|
235
235
|
git_oid_tostr(end_oid, pi->id_strlen + 1, &delta->new_file.id);
|
236
236
|
|
237
237
|
git_str_printf(
|
238
|
-
out, (pi->id_strlen <=
|
238
|
+
out, (pi->id_strlen <= GIT_OID_SHA1_HEXSIZE) ?
|
239
239
|
":%06o %06o %s... %s... %c" : ":%06o %06o %s %s %c",
|
240
240
|
delta->old_file.mode, delta->new_file.mode, start_oid, end_oid, code);
|
241
241
|
|
@@ -273,7 +273,7 @@ static int diff_print_oid_range(
|
|
273
273
|
git_str *out, const git_diff_delta *delta, int id_strlen,
|
274
274
|
bool print_index)
|
275
275
|
{
|
276
|
-
char start_oid[
|
276
|
+
char start_oid[GIT_OID_SHA1_HEXSIZE+1], end_oid[GIT_OID_SHA1_HEXSIZE+1];
|
277
277
|
|
278
278
|
if (delta->old_file.mode &&
|
279
279
|
id_strlen > delta->old_file.id_abbrev) {
|
@@ -364,6 +364,7 @@ static int insert_delete_side_of_split(
|
|
364
364
|
memset(&deleted->new_file, 0, sizeof(deleted->new_file));
|
365
365
|
deleted->new_file.path = deleted->old_file.path;
|
366
366
|
deleted->new_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
367
|
+
git_oid_clear(&deleted->new_file.id, GIT_OID_SHA1);
|
367
368
|
|
368
369
|
return git_vector_insert(onto, deleted);
|
369
370
|
}
|
@@ -397,6 +398,7 @@ static int apply_splits_and_deletes(
|
|
397
398
|
memset(&delta->old_file, 0, sizeof(delta->old_file));
|
398
399
|
delta->old_file.path = delta->new_file.path;
|
399
400
|
delta->old_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
401
|
+
git_oid_clear(&delta->old_file.id, GIT_OID_SHA1);
|
400
402
|
}
|
401
403
|
|
402
404
|
/* clean up delta before inserting into new list */
|
@@ -995,6 +997,7 @@ find_best_matches:
|
|
995
997
|
memset(&src->new_file, 0, sizeof(src->new_file));
|
996
998
|
src->new_file.path = src->old_file.path;
|
997
999
|
src->new_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
1000
|
+
git_oid_clear(&src->new_file.id, GIT_OID_SHA1);
|
998
1001
|
|
999
1002
|
num_updates++;
|
1000
1003
|
|
@@ -1020,6 +1023,7 @@ find_best_matches:
|
|
1020
1023
|
memset(&src->old_file, 0, sizeof(src->old_file));
|
1021
1024
|
src->old_file.path = src->new_file.path;
|
1022
1025
|
src->old_file.flags |= GIT_DIFF_FLAG_VALID_ID;
|
1026
|
+
git_oid_clear(&src->old_file.id, GIT_OID_SHA1);
|
1023
1027
|
|
1024
1028
|
src->flags &= ~GIT_DIFF_FLAG__TO_SPLIT;
|
1025
1029
|
num_rewrites--;
|
@@ -130,11 +130,11 @@ static int append_header(
|
|
130
130
|
const git_signature *author,
|
131
131
|
git_email_create_options *opts)
|
132
132
|
{
|
133
|
-
char id[
|
133
|
+
char id[GIT_OID_SHA1_HEXSIZE];
|
134
134
|
int error;
|
135
135
|
|
136
136
|
if ((error = git_oid_fmt(id, commit_id)) < 0 ||
|
137
|
-
(error = git_str_printf(out, "From %.*s %s\n",
|
137
|
+
(error = git_str_printf(out, "From %.*s %s\n", GIT_OID_SHA1_HEXSIZE, id, EMAIL_TIMESTAMP)) < 0 ||
|
138
138
|
(error = git_str_printf(out, "From: %s <%s>\n", author->name, author->email)) < 0 ||
|
139
139
|
(error = append_date(out, &author->when)) < 0 ||
|
140
140
|
(error = append_subject(out, patch_idx, patch_count, summary, opts)) < 0)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
3
|
+
*
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#ifndef INCLUDE_experimental_h__
|
9
|
+
#define INCLUDE_experimental_h__
|
10
|
+
|
11
|
+
#cmakedefine GIT_EXPERIMENTAL_SHA256 1
|
12
|
+
|
13
|
+
#endif
|