rugged 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -0
- data/README.md +1 -1
- data/ext/rugged/rugged.c +7 -4
- data/ext/rugged/rugged_object.c +1 -1
- data/ext/rugged/rugged_repo.c +3 -3
- data/lib/rugged/repository.rb +2 -2
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +11 -6
- data/vendor/libgit2/COPYING +109 -1
- data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
- data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +4 -0
- data/vendor/libgit2/cmake/SelectHashes.cmake +1 -0
- data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +17 -5
- data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
- data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
- data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
- data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
- data/vendor/libgit2/deps/ntlmclient/ntlm.c +150 -118
- data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
- data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
- data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
- data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
- data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
- data/vendor/libgit2/include/git2/attr.h +89 -0
- data/vendor/libgit2/include/git2/blame.h +93 -42
- data/vendor/libgit2/include/git2/blob.h +14 -2
- data/vendor/libgit2/include/git2/branch.h +25 -0
- data/vendor/libgit2/include/git2/cert.h +42 -5
- data/vendor/libgit2/include/git2/checkout.h +28 -12
- data/vendor/libgit2/include/git2/commit.h +35 -19
- data/vendor/libgit2/include/git2/common.h +14 -4
- data/vendor/libgit2/include/git2/deprecated.h +206 -6
- data/vendor/libgit2/include/git2/diff.h +34 -19
- data/vendor/libgit2/include/git2/errors.h +6 -6
- data/vendor/libgit2/include/git2/filter.h +57 -17
- data/vendor/libgit2/include/git2/graph.h +20 -2
- data/vendor/libgit2/include/git2/index.h +2 -2
- data/vendor/libgit2/include/git2/odb.h +29 -0
- data/vendor/libgit2/include/git2/patch.h +8 -0
- data/vendor/libgit2/include/git2/rebase.h +25 -1
- data/vendor/libgit2/include/git2/refs.h +6 -2
- data/vendor/libgit2/include/git2/remote.h +59 -6
- data/vendor/libgit2/include/git2/revparse.h +5 -5
- data/vendor/libgit2/include/git2/status.h +115 -59
- data/vendor/libgit2/include/git2/submodule.h +9 -0
- data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
- data/vendor/libgit2/include/git2/sys/filter.h +49 -28
- data/vendor/libgit2/include/git2/sys/midx.h +74 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
- data/vendor/libgit2/include/git2/sys/transport.h +1 -0
- data/vendor/libgit2/include/git2/tag.h +12 -0
- data/vendor/libgit2/include/git2/tree.h +0 -14
- data/vendor/libgit2/include/git2/types.h +9 -0
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2/worktree.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +25 -4
- data/vendor/libgit2/src/alloc.c +21 -8
- data/vendor/libgit2/src/allocators/failalloc.c +92 -0
- data/vendor/libgit2/src/allocators/failalloc.h +23 -0
- data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
- data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
- data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
- data/vendor/libgit2/src/annotated_commit.c +21 -9
- data/vendor/libgit2/src/apply.c +16 -7
- data/vendor/libgit2/src/array.h +11 -11
- data/vendor/libgit2/src/attr.c +181 -74
- data/vendor/libgit2/src/attr_file.c +84 -39
- data/vendor/libgit2/src/attr_file.h +32 -11
- data/vendor/libgit2/src/attrcache.c +42 -37
- data/vendor/libgit2/src/attrcache.h +4 -5
- data/vendor/libgit2/src/blame.c +11 -5
- data/vendor/libgit2/src/blob.c +35 -24
- data/vendor/libgit2/src/branch.c +69 -17
- data/vendor/libgit2/src/buffer.c +334 -25
- data/vendor/libgit2/src/buffer.h +153 -2
- data/vendor/libgit2/src/cache.c +2 -2
- data/vendor/libgit2/src/cache.h +7 -7
- data/vendor/libgit2/src/cc-compat.h +10 -2
- data/vendor/libgit2/src/checkout.c +48 -26
- data/vendor/libgit2/src/cherrypick.c +6 -2
- data/vendor/libgit2/src/clone.c +41 -47
- data/vendor/libgit2/src/commit.c +41 -28
- data/vendor/libgit2/src/commit_graph.c +1209 -0
- data/vendor/libgit2/src/commit_graph.h +162 -0
- data/vendor/libgit2/src/commit_list.c +46 -0
- data/vendor/libgit2/src/commit_list.h +2 -0
- data/vendor/libgit2/src/common.h +25 -2
- data/vendor/libgit2/src/config.c +37 -15
- data/vendor/libgit2/src/config_cache.c +5 -3
- data/vendor/libgit2/src/config_file.c +16 -8
- data/vendor/libgit2/src/config_parse.c +4 -6
- data/vendor/libgit2/src/crlf.c +16 -6
- data/vendor/libgit2/src/date.c +4 -3
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/describe.c +6 -3
- data/vendor/libgit2/src/diff.c +11 -8
- data/vendor/libgit2/src/diff_driver.c +21 -17
- data/vendor/libgit2/src/diff_file.c +2 -6
- data/vendor/libgit2/src/diff_generate.c +46 -17
- data/vendor/libgit2/src/diff_print.c +19 -6
- data/vendor/libgit2/src/diff_stats.c +7 -5
- data/vendor/libgit2/src/diff_tform.c +9 -8
- data/vendor/libgit2/src/diff_xdiff.c +4 -2
- data/vendor/libgit2/src/diff_xdiff.h +1 -1
- data/vendor/libgit2/src/errors.c +24 -19
- data/vendor/libgit2/src/features.h.in +5 -1
- data/vendor/libgit2/src/fetch.c +5 -2
- data/vendor/libgit2/src/fetchhead.c +8 -4
- data/vendor/libgit2/src/filebuf.c +9 -7
- data/vendor/libgit2/src/filter.c +206 -110
- data/vendor/libgit2/src/filter.h +24 -5
- data/vendor/libgit2/src/futils.c +5 -5
- data/vendor/libgit2/src/futils.h +1 -1
- data/vendor/libgit2/src/graph.c +64 -9
- data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
- data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
- data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
- data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
- data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
- data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
- data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
- data/vendor/libgit2/src/hash.c +16 -13
- data/vendor/libgit2/src/hash.h +1 -1
- data/vendor/libgit2/src/hashsig.c +23 -10
- data/vendor/libgit2/src/ident.c +13 -3
- data/vendor/libgit2/src/ignore.c +35 -19
- data/vendor/libgit2/src/index.c +106 -70
- data/vendor/libgit2/src/index.h +1 -1
- data/vendor/libgit2/src/indexer.c +31 -29
- data/vendor/libgit2/src/integer.h +64 -2
- data/vendor/libgit2/src/iterator.c +36 -24
- data/vendor/libgit2/src/iterator.h +1 -1
- data/vendor/libgit2/src/khash.h +2 -11
- data/vendor/libgit2/src/{settings.c → libgit2.c} +117 -50
- data/vendor/libgit2/src/libgit2.h +15 -0
- data/vendor/libgit2/src/mailmap.c +23 -10
- data/vendor/libgit2/src/map.h +3 -3
- data/vendor/libgit2/src/merge.c +70 -30
- data/vendor/libgit2/src/merge.h +2 -1
- data/vendor/libgit2/src/merge_driver.c +19 -13
- data/vendor/libgit2/src/merge_file.c +11 -3
- data/vendor/libgit2/src/message.c +3 -1
- data/vendor/libgit2/src/midx.c +471 -10
- data/vendor/libgit2/src/midx.h +28 -1
- data/vendor/libgit2/src/mwindow.c +103 -59
- data/vendor/libgit2/src/mwindow.h +3 -3
- data/vendor/libgit2/src/net.c +127 -3
- data/vendor/libgit2/src/net.h +16 -2
- data/vendor/libgit2/src/netops.c +6 -4
- data/vendor/libgit2/src/netops.h +2 -2
- data/vendor/libgit2/src/notes.c +10 -10
- data/vendor/libgit2/src/object.c +22 -14
- data/vendor/libgit2/src/odb.c +285 -48
- data/vendor/libgit2/src/odb.h +16 -2
- data/vendor/libgit2/src/odb_loose.c +28 -18
- data/vendor/libgit2/src/odb_mempack.c +1 -1
- data/vendor/libgit2/src/odb_pack.c +391 -114
- data/vendor/libgit2/src/oid.c +5 -4
- data/vendor/libgit2/src/pack-objects.c +54 -48
- data/vendor/libgit2/src/pack.c +329 -119
- data/vendor/libgit2/src/pack.h +25 -7
- data/vendor/libgit2/src/patch.c +14 -7
- data/vendor/libgit2/src/patch_generate.c +2 -2
- data/vendor/libgit2/src/patch_parse.c +2 -1
- data/vendor/libgit2/src/path.c +98 -53
- data/vendor/libgit2/src/path.h +79 -6
- data/vendor/libgit2/src/pathspec.c +8 -8
- data/vendor/libgit2/src/pool.c +13 -7
- data/vendor/libgit2/src/posix.c +11 -3
- data/vendor/libgit2/src/reader.c +10 -6
- data/vendor/libgit2/src/rebase.c +93 -49
- data/vendor/libgit2/src/refdb.c +30 -13
- data/vendor/libgit2/src/refdb_fs.c +121 -69
- data/vendor/libgit2/src/reflog.c +19 -14
- data/vendor/libgit2/src/refs.c +76 -41
- data/vendor/libgit2/src/refspec.c +32 -12
- data/vendor/libgit2/src/remote.c +272 -102
- data/vendor/libgit2/src/remote.h +2 -1
- data/vendor/libgit2/src/repository.c +176 -103
- data/vendor/libgit2/src/repository.h +12 -1
- data/vendor/libgit2/src/reset.c +7 -6
- data/vendor/libgit2/src/revert.c +6 -2
- data/vendor/libgit2/src/revparse.c +14 -9
- data/vendor/libgit2/src/revwalk.c +32 -15
- data/vendor/libgit2/src/runtime.c +162 -0
- data/vendor/libgit2/src/runtime.h +62 -0
- data/vendor/libgit2/src/settings.h +11 -0
- data/vendor/libgit2/src/signature.c +6 -5
- data/vendor/libgit2/src/sortedcache.h +10 -8
- data/vendor/libgit2/src/stash.c +3 -1
- data/vendor/libgit2/src/status.c +7 -4
- data/vendor/libgit2/src/strarray.c +2 -1
- data/vendor/libgit2/src/streams/mbedtls.c +14 -17
- data/vendor/libgit2/src/streams/mbedtls.h +1 -1
- data/vendor/libgit2/src/streams/openssl.c +101 -201
- data/vendor/libgit2/src/streams/openssl.h +9 -1
- data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
- data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
- data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
- data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
- data/vendor/libgit2/src/streams/registry.c +5 -6
- data/vendor/libgit2/src/streams/socket.c +6 -2
- data/vendor/libgit2/src/streams/stransport.c +6 -3
- data/vendor/libgit2/src/streams/tls.c +5 -3
- data/vendor/libgit2/src/submodule.c +128 -62
- data/vendor/libgit2/src/submodule.h +9 -9
- data/vendor/libgit2/src/sysdir.c +4 -6
- data/vendor/libgit2/src/tag.c +47 -11
- data/vendor/libgit2/src/thread.c +140 -0
- data/vendor/libgit2/src/thread.h +479 -0
- data/vendor/libgit2/src/threadstate.c +83 -0
- data/vendor/libgit2/src/threadstate.h +24 -0
- data/vendor/libgit2/src/trace.c +2 -2
- data/vendor/libgit2/src/trace.h +17 -13
- data/vendor/libgit2/src/transaction.c +19 -8
- data/vendor/libgit2/src/transport.c +3 -3
- data/vendor/libgit2/src/transports/auth.c +1 -1
- data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
- data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
- data/vendor/libgit2/src/transports/credential.c +15 -7
- data/vendor/libgit2/src/transports/git.c +1 -3
- data/vendor/libgit2/src/transports/http.c +19 -17
- data/vendor/libgit2/src/transports/http.h +1 -0
- data/vendor/libgit2/src/transports/httpclient.c +53 -26
- data/vendor/libgit2/src/transports/httpclient.h +1 -1
- data/vendor/libgit2/src/transports/local.c +3 -3
- data/vendor/libgit2/src/transports/smart.c +12 -7
- data/vendor/libgit2/src/transports/smart.h +1 -1
- data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
- data/vendor/libgit2/src/transports/ssh.c +51 -17
- data/vendor/libgit2/src/transports/winhttp.c +41 -31
- data/vendor/libgit2/src/tree.c +100 -77
- data/vendor/libgit2/src/tree.h +1 -0
- data/vendor/libgit2/src/tsort.c +0 -2
- data/vendor/libgit2/src/unix/map.c +3 -1
- data/vendor/libgit2/src/unix/pthread.h +2 -1
- data/vendor/libgit2/src/utf8.c +150 -0
- data/vendor/libgit2/src/utf8.h +52 -0
- data/vendor/libgit2/src/util.c +53 -129
- data/vendor/libgit2/src/util.h +33 -39
- data/vendor/libgit2/src/vector.c +23 -19
- data/vendor/libgit2/src/vector.h +4 -2
- data/vendor/libgit2/src/win32/findfile.c +4 -2
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
- data/vendor/libgit2/src/win32/path_w32.c +22 -24
- data/vendor/libgit2/src/win32/path_w32.h +0 -1
- data/vendor/libgit2/src/win32/posix_w32.c +7 -1
- data/vendor/libgit2/src/win32/precompiled.h +0 -1
- data/vendor/libgit2/src/win32/reparse.h +4 -4
- data/vendor/libgit2/src/win32/thread.c +24 -15
- data/vendor/libgit2/src/win32/thread.h +1 -1
- data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
- data/vendor/libgit2/src/win32/w32_common.h +18 -9
- data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
- data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
- data/vendor/libgit2/src/win32/w32_util.h +6 -6
- data/vendor/libgit2/src/worktree.c +27 -16
- data/vendor/libgit2/src/zstream.c +1 -1
- metadata +32 -16
- data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
- data/vendor/libgit2/src/buf_text.c +0 -316
- data/vendor/libgit2/src/buf_text.h +0 -122
- data/vendor/libgit2/src/global.c +0 -363
- data/vendor/libgit2/src/global.h +0 -41
- data/vendor/libgit2/src/thread-utils.c +0 -58
- data/vendor/libgit2/src/thread-utils.h +0 -369
- data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
- data/vendor/libgit2/src/win32/w32_stack.c +0 -188
- data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -0,0 +1,162 @@
|
|
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_commit_graph_h__
|
9
|
+
#define INCLUDE_commit_graph_h__
|
10
|
+
|
11
|
+
#include "common.h"
|
12
|
+
|
13
|
+
#include "git2/types.h"
|
14
|
+
#include "git2/sys/commit_graph.h"
|
15
|
+
|
16
|
+
#include "map.h"
|
17
|
+
#include "vector.h"
|
18
|
+
|
19
|
+
/**
|
20
|
+
* A commit-graph file.
|
21
|
+
*
|
22
|
+
* This file contains metadata about commits, particularly the generation
|
23
|
+
* number for each one. This can help speed up graph operations without
|
24
|
+
* requiring a full graph traversal.
|
25
|
+
*
|
26
|
+
* Support for this feature was added in git 2.19.
|
27
|
+
*/
|
28
|
+
typedef struct git_commit_graph_file {
|
29
|
+
git_map graph_map;
|
30
|
+
|
31
|
+
/* The OID Fanout table. */
|
32
|
+
const uint32_t *oid_fanout;
|
33
|
+
/* The total number of commits in the graph. */
|
34
|
+
uint32_t num_commits;
|
35
|
+
|
36
|
+
/* The OID Lookup table. */
|
37
|
+
git_oid *oid_lookup;
|
38
|
+
|
39
|
+
/*
|
40
|
+
* The Commit Data table. Each entry contains the OID of the commit followed
|
41
|
+
* by two 8-byte fields in network byte order:
|
42
|
+
* - The indices of the first two parents (32 bits each).
|
43
|
+
* - The generation number (first 30 bits) and commit time in seconds since
|
44
|
+
* UNIX epoch (34 bits).
|
45
|
+
*/
|
46
|
+
const unsigned char *commit_data;
|
47
|
+
|
48
|
+
/*
|
49
|
+
* The Extra Edge List table. Each 4-byte entry is a network byte order index
|
50
|
+
* of one of the i-th (i > 0) parents of commits in the `commit_data` table,
|
51
|
+
* when the commit has more than 2 parents.
|
52
|
+
*/
|
53
|
+
const unsigned char *extra_edge_list;
|
54
|
+
/* The number of entries in the Extra Edge List table. Each entry is 4 bytes wide. */
|
55
|
+
size_t num_extra_edge_list;
|
56
|
+
|
57
|
+
/* The trailer of the file. Contains the SHA1-checksum of the whole file. */
|
58
|
+
git_oid checksum;
|
59
|
+
} git_commit_graph_file;
|
60
|
+
|
61
|
+
/**
|
62
|
+
* An entry in the commit-graph file. Provides a subset of the information that
|
63
|
+
* can be obtained from the commit header.
|
64
|
+
*/
|
65
|
+
typedef struct git_commit_graph_entry {
|
66
|
+
/* The generation number of the commit within the graph */
|
67
|
+
size_t generation;
|
68
|
+
|
69
|
+
/* Time in seconds from UNIX epoch. */
|
70
|
+
git_time_t commit_time;
|
71
|
+
|
72
|
+
/* The number of parents of the commit. */
|
73
|
+
size_t parent_count;
|
74
|
+
|
75
|
+
/*
|
76
|
+
* The indices of the parent commits within the Commit Data table. The value
|
77
|
+
* of `GIT_COMMIT_GRAPH_MISSING_PARENT` indicates that no parent is in that
|
78
|
+
* position.
|
79
|
+
*/
|
80
|
+
size_t parent_indices[2];
|
81
|
+
|
82
|
+
/* The index within the Extra Edge List of any parent after the first two. */
|
83
|
+
size_t extra_parents_index;
|
84
|
+
|
85
|
+
/* The SHA-1 hash of the root tree of the commit. */
|
86
|
+
git_oid tree_oid;
|
87
|
+
|
88
|
+
/* The SHA-1 hash of the requested commit. */
|
89
|
+
git_oid sha1;
|
90
|
+
} git_commit_graph_entry;
|
91
|
+
|
92
|
+
/* A wrapper for git_commit_graph_file to enable lazy loading in the ODB. */
|
93
|
+
struct git_commit_graph {
|
94
|
+
/* The path to the commit-graph file. Something like ".git/objects/info/commit-graph". */
|
95
|
+
git_buf filename;
|
96
|
+
|
97
|
+
/* The underlying commit-graph file. */
|
98
|
+
git_commit_graph_file *file;
|
99
|
+
|
100
|
+
/* Whether the commit-graph file was already checked for validity. */
|
101
|
+
bool checked;
|
102
|
+
};
|
103
|
+
|
104
|
+
/** Create a new commit-graph, optionally opening the underlying file. */
|
105
|
+
int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
|
106
|
+
|
107
|
+
/** Open and validate a commit-graph file. */
|
108
|
+
int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
|
109
|
+
|
110
|
+
/*
|
111
|
+
* Attempt to get the git_commit_graph's commit-graph file. This object is
|
112
|
+
* still owned by the git_commit_graph. If the repository does not contain a commit graph,
|
113
|
+
* it will return GIT_ENOTFOUND.
|
114
|
+
*
|
115
|
+
* This function is not thread-safe.
|
116
|
+
*/
|
117
|
+
int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph *cgraph);
|
118
|
+
|
119
|
+
/* Marks the commit-graph file as needing a refresh. */
|
120
|
+
void git_commit_graph_refresh(git_commit_graph *cgraph);
|
121
|
+
|
122
|
+
/*
|
123
|
+
* A writer for `commit-graph` files.
|
124
|
+
*/
|
125
|
+
struct git_commit_graph_writer {
|
126
|
+
/*
|
127
|
+
* The path of the `objects/info` directory where the `commit-graph` will be
|
128
|
+
* stored.
|
129
|
+
*/
|
130
|
+
git_buf objects_info_dir;
|
131
|
+
|
132
|
+
/* The list of packed commits. */
|
133
|
+
git_vector commits;
|
134
|
+
};
|
135
|
+
|
136
|
+
/*
|
137
|
+
* Returns whether the git_commit_graph_file needs to be reloaded since the
|
138
|
+
* contents of the commit-graph file have changed on disk.
|
139
|
+
*/
|
140
|
+
bool git_commit_graph_file_needs_refresh(
|
141
|
+
const git_commit_graph_file *file, const char *path);
|
142
|
+
|
143
|
+
int git_commit_graph_entry_find(
|
144
|
+
git_commit_graph_entry *e,
|
145
|
+
const git_commit_graph_file *file,
|
146
|
+
const git_oid *short_oid,
|
147
|
+
size_t len);
|
148
|
+
int git_commit_graph_entry_parent(
|
149
|
+
git_commit_graph_entry *parent,
|
150
|
+
const git_commit_graph_file *file,
|
151
|
+
const git_commit_graph_entry *entry,
|
152
|
+
size_t n);
|
153
|
+
int git_commit_graph_file_close(git_commit_graph_file *cgraph);
|
154
|
+
void git_commit_graph_file_free(git_commit_graph_file *cgraph);
|
155
|
+
|
156
|
+
/* This is exposed for use in the fuzzers. */
|
157
|
+
int git_commit_graph_file_parse(
|
158
|
+
git_commit_graph_file *file,
|
159
|
+
const unsigned char *data,
|
160
|
+
size_t size);
|
161
|
+
|
162
|
+
#endif
|
@@ -12,6 +12,24 @@
|
|
12
12
|
#include "odb.h"
|
13
13
|
#include "commit.h"
|
14
14
|
|
15
|
+
int git_commit_list_generation_cmp(const void *a, const void *b)
|
16
|
+
{
|
17
|
+
uint32_t generation_a = ((git_commit_list_node *) a)->generation;
|
18
|
+
uint32_t generation_b = ((git_commit_list_node *) b)->generation;
|
19
|
+
|
20
|
+
if (!generation_a || !generation_b) {
|
21
|
+
/* Fall back to comparing by timestamps if at least one commit lacks a generation. */
|
22
|
+
return git_commit_list_time_cmp(a, b);
|
23
|
+
}
|
24
|
+
|
25
|
+
if (generation_a < generation_b)
|
26
|
+
return 1;
|
27
|
+
if (generation_a > generation_b)
|
28
|
+
return -1;
|
29
|
+
|
30
|
+
return 0;
|
31
|
+
}
|
32
|
+
|
15
33
|
int git_commit_list_time_cmp(const void *a, const void *b)
|
16
34
|
{
|
17
35
|
int64_t time_a = ((git_commit_list_node *) a)->time;
|
@@ -124,6 +142,7 @@ static int commit_quick_parse(
|
|
124
142
|
return -1;
|
125
143
|
}
|
126
144
|
|
145
|
+
node->generation = 0;
|
127
146
|
node->time = commit->committer->when.time;
|
128
147
|
node->out_degree = (uint16_t) git_array_size(commit->parent_ids);
|
129
148
|
node->parents = alloc_parents(walk, node, node->out_degree);
|
@@ -143,11 +162,38 @@ static int commit_quick_parse(
|
|
143
162
|
int git_commit_list_parse(git_revwalk *walk, git_commit_list_node *commit)
|
144
163
|
{
|
145
164
|
git_odb_object *obj;
|
165
|
+
git_commit_graph_file *cgraph_file = NULL;
|
146
166
|
int error;
|
147
167
|
|
148
168
|
if (commit->parsed)
|
149
169
|
return 0;
|
150
170
|
|
171
|
+
/* Let's try to use the commit graph first. */
|
172
|
+
git_odb__get_commit_graph_file(&cgraph_file, walk->odb);
|
173
|
+
if (cgraph_file) {
|
174
|
+
git_commit_graph_entry e;
|
175
|
+
|
176
|
+
error = git_commit_graph_entry_find(&e, cgraph_file, &commit->oid, GIT_OID_RAWSZ);
|
177
|
+
if (error == 0 && git__is_uint16(e.parent_count)) {
|
178
|
+
size_t i;
|
179
|
+
commit->generation = (uint32_t)e.generation;
|
180
|
+
commit->time = e.commit_time;
|
181
|
+
commit->out_degree = (uint16_t)e.parent_count;
|
182
|
+
commit->parents = alloc_parents(walk, commit, commit->out_degree);
|
183
|
+
GIT_ERROR_CHECK_ALLOC(commit->parents);
|
184
|
+
|
185
|
+
for (i = 0; i < commit->out_degree; ++i) {
|
186
|
+
git_commit_graph_entry parent;
|
187
|
+
error = git_commit_graph_entry_parent(&parent, cgraph_file, &e, i);
|
188
|
+
if (error < 0)
|
189
|
+
return error;
|
190
|
+
commit->parents[i] = git_revwalk__commit_lookup(walk, &parent.sha1);
|
191
|
+
}
|
192
|
+
commit->parsed = 1;
|
193
|
+
return 0;
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
151
197
|
if ((error = git_odb_read(&obj, walk->odb, &commit->oid)) < 0)
|
152
198
|
return error;
|
153
199
|
|
@@ -26,6 +26,7 @@
|
|
26
26
|
typedef struct git_commit_list_node {
|
27
27
|
git_oid oid;
|
28
28
|
int64_t time;
|
29
|
+
uint32_t generation;
|
29
30
|
unsigned int seen:1,
|
30
31
|
uninteresting:1,
|
31
32
|
topo_delay:1,
|
@@ -45,6 +46,7 @@ typedef struct git_commit_list {
|
|
45
46
|
} git_commit_list;
|
46
47
|
|
47
48
|
git_commit_list_node *git_commit_list_alloc_node(git_revwalk *walk);
|
49
|
+
int git_commit_list_generation_cmp(const void *a, const void *b);
|
48
50
|
int git_commit_list_time_cmp(const void *a, const void *b);
|
49
51
|
void git_commit_list_free(git_commit_list **list_p);
|
50
52
|
git_commit_list *git_commit_list_insert(git_commit_list_node *item, git_commit_list **list_p);
|
data/vendor/libgit2/src/common.h
CHANGED
@@ -19,6 +19,8 @@
|
|
19
19
|
# define GIT_INLINE(type) static __inline type
|
20
20
|
#elif defined(__GNUC__)
|
21
21
|
# define GIT_INLINE(type) static __inline__ type
|
22
|
+
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
23
|
+
# define GIT_INLINE(type) static inline type
|
22
24
|
#else
|
23
25
|
# define GIT_INLINE(type) static type
|
24
26
|
#endif
|
@@ -28,6 +30,24 @@
|
|
28
30
|
# define __has_builtin(x) 0
|
29
31
|
#endif
|
30
32
|
|
33
|
+
/**
|
34
|
+
* Declare that a function's return value must be used.
|
35
|
+
*
|
36
|
+
* Used mostly to guard against potential silent bugs at runtime. This is
|
37
|
+
* recommended to be added to functions that:
|
38
|
+
*
|
39
|
+
* - Allocate / reallocate memory. This prevents memory leaks or errors where
|
40
|
+
* buffers are expected to have grown to a certain size, but could not be
|
41
|
+
* resized.
|
42
|
+
* - Acquire locks. When a lock cannot be acquired, that will almost certainly
|
43
|
+
* cause a data race / undefined behavior.
|
44
|
+
*/
|
45
|
+
#if defined(__GNUC__)
|
46
|
+
# define GIT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
|
47
|
+
#else
|
48
|
+
# define GIT_WARN_UNUSED_RESULT
|
49
|
+
#endif
|
50
|
+
|
31
51
|
#include <assert.h>
|
32
52
|
#include <errno.h>
|
33
53
|
#include <limits.h>
|
@@ -63,7 +83,9 @@
|
|
63
83
|
# include <pthread.h>
|
64
84
|
# include <sched.h>
|
65
85
|
# endif
|
66
|
-
|
86
|
+
|
87
|
+
#define GIT_LIBGIT2_CALL
|
88
|
+
#define GIT_SYSTEM_CALL
|
67
89
|
|
68
90
|
#ifdef GIT_USE_STAT_ATIMESPEC
|
69
91
|
# define st_atim st_atimespec
|
@@ -78,9 +100,10 @@
|
|
78
100
|
#include "git2/types.h"
|
79
101
|
#include "git2/errors.h"
|
80
102
|
#include "errors.h"
|
81
|
-
#include "thread
|
103
|
+
#include "thread.h"
|
82
104
|
#include "integer.h"
|
83
105
|
#include "assert_safe.h"
|
106
|
+
#include "utf8.h"
|
84
107
|
|
85
108
|
/*
|
86
109
|
* Include the declarations for deprecated functions; this ensures
|
data/vendor/libgit2/src/config.c
CHANGED
@@ -10,7 +10,6 @@
|
|
10
10
|
#include "git2/config.h"
|
11
11
|
#include "git2/sys/config.h"
|
12
12
|
|
13
|
-
#include "buf_text.h"
|
14
13
|
#include "config_backend.h"
|
15
14
|
#include "regexp.h"
|
16
15
|
#include "sysdir.h"
|
@@ -108,7 +107,8 @@ int git_config_add_file_ondisk(
|
|
108
107
|
struct stat st;
|
109
108
|
int res;
|
110
109
|
|
111
|
-
|
110
|
+
GIT_ASSERT_ARG(cfg);
|
111
|
+
GIT_ASSERT_ARG(path);
|
112
112
|
|
113
113
|
res = p_stat(path, &st);
|
114
114
|
if (res < 0 && errno != ENOENT && errno != ENOTDIR) {
|
@@ -316,7 +316,8 @@ int git_config_add_backend(
|
|
316
316
|
backend_internal *internal;
|
317
317
|
int result;
|
318
318
|
|
319
|
-
|
319
|
+
GIT_ASSERT_ARG(cfg);
|
320
|
+
GIT_ASSERT_ARG(backend);
|
320
321
|
|
321
322
|
GIT_ERROR_CHECK_VERSION(backend, GIT_CONFIG_BACKEND_VERSION, "git_config_backend");
|
322
323
|
|
@@ -514,7 +515,8 @@ int git_config_backend_foreach_match(
|
|
514
515
|
git_regexp regex;
|
515
516
|
int error = 0;
|
516
517
|
|
517
|
-
|
518
|
+
GIT_ASSERT_ARG(backend);
|
519
|
+
GIT_ASSERT_ARG(cb);
|
518
520
|
|
519
521
|
if (regexp && git_regexp_compile(®ex, regexp, 0) < 0)
|
520
522
|
return -1;
|
@@ -886,7 +888,8 @@ int git_config_get_string_buf(
|
|
886
888
|
int ret;
|
887
889
|
const char *str;
|
888
890
|
|
889
|
-
git_buf_sanitize(out)
|
891
|
+
if ((ret = git_buf_sanitize(out)) < 0)
|
892
|
+
return ret;
|
890
893
|
|
891
894
|
ret = get_entry(&entry, cfg, name, true, GET_ALL_ERRORS);
|
892
895
|
str = !ret ? (entry->value ? entry->value : "") : NULL;
|
@@ -1084,19 +1087,31 @@ void git_config_iterator_free(git_config_iterator *iter)
|
|
1084
1087
|
|
1085
1088
|
int git_config_find_global(git_buf *path)
|
1086
1089
|
{
|
1087
|
-
|
1090
|
+
int error;
|
1091
|
+
|
1092
|
+
if ((error = git_buf_sanitize(path)) < 0)
|
1093
|
+
return error;
|
1094
|
+
|
1088
1095
|
return git_sysdir_find_global_file(path, GIT_CONFIG_FILENAME_GLOBAL);
|
1089
1096
|
}
|
1090
1097
|
|
1091
1098
|
int git_config_find_xdg(git_buf *path)
|
1092
1099
|
{
|
1093
|
-
|
1100
|
+
int error;
|
1101
|
+
|
1102
|
+
if ((error = git_buf_sanitize(path)) < 0)
|
1103
|
+
return error;
|
1104
|
+
|
1094
1105
|
return git_sysdir_find_xdg_file(path, GIT_CONFIG_FILENAME_XDG);
|
1095
1106
|
}
|
1096
1107
|
|
1097
1108
|
int git_config_find_system(git_buf *path)
|
1098
1109
|
{
|
1099
|
-
|
1110
|
+
int error;
|
1111
|
+
|
1112
|
+
if ((error = git_buf_sanitize(path)) < 0)
|
1113
|
+
return error;
|
1114
|
+
|
1100
1115
|
return git_sysdir_find_system_file(path, GIT_CONFIG_FILENAME_SYSTEM);
|
1101
1116
|
}
|
1102
1117
|
|
@@ -1104,7 +1119,9 @@ int git_config_find_programdata(git_buf *path)
|
|
1104
1119
|
{
|
1105
1120
|
int ret;
|
1106
1121
|
|
1107
|
-
git_buf_sanitize(path)
|
1122
|
+
if ((ret = git_buf_sanitize(path)) < 0)
|
1123
|
+
return ret;
|
1124
|
+
|
1108
1125
|
ret = git_sysdir_find_programdata_file(path,
|
1109
1126
|
GIT_CONFIG_FILENAME_PROGRAMDATA);
|
1110
1127
|
if (ret != GIT_OK)
|
@@ -1182,7 +1199,7 @@ int git_config_lock(git_transaction **out, git_config *cfg)
|
|
1182
1199
|
git_config_backend *backend;
|
1183
1200
|
backend_internal *internal;
|
1184
1201
|
|
1185
|
-
|
1202
|
+
GIT_ASSERT_ARG(cfg);
|
1186
1203
|
|
1187
1204
|
internal = git_vector_get(&cfg->backends, 0);
|
1188
1205
|
if (!internal || !internal->backend) {
|
@@ -1202,7 +1219,7 @@ int git_config_unlock(git_config *cfg, int commit)
|
|
1202
1219
|
git_config_backend *backend;
|
1203
1220
|
backend_internal *internal;
|
1204
1221
|
|
1205
|
-
|
1222
|
+
GIT_ASSERT_ARG(cfg);
|
1206
1223
|
|
1207
1224
|
internal = git_vector_get(&cfg->backends, 0);
|
1208
1225
|
if (!internal || !internal->backend) {
|
@@ -1360,9 +1377,13 @@ fail_parse:
|
|
1360
1377
|
|
1361
1378
|
int git_config_parse_path(git_buf *out, const char *value)
|
1362
1379
|
{
|
1363
|
-
|
1380
|
+
int error;
|
1364
1381
|
|
1365
|
-
|
1382
|
+
GIT_ASSERT_ARG(out);
|
1383
|
+
GIT_ASSERT_ARG(value);
|
1384
|
+
|
1385
|
+
if ((error = git_buf_sanitize(out)) < 0)
|
1386
|
+
return error;
|
1366
1387
|
|
1367
1388
|
if (value[0] == '~') {
|
1368
1389
|
if (value[1] != '\0' && value[1] != '/') {
|
@@ -1405,7 +1426,8 @@ int git_config__normalize_name(const char *in, char **out)
|
|
1405
1426
|
{
|
1406
1427
|
char *name, *fdot, *ldot;
|
1407
1428
|
|
1408
|
-
|
1429
|
+
GIT_ASSERT_ARG(in);
|
1430
|
+
GIT_ASSERT_ARG(out);
|
1409
1431
|
|
1410
1432
|
name = git__strdup(in);
|
1411
1433
|
GIT_ERROR_CHECK_ALLOC(name);
|
@@ -1474,7 +1496,7 @@ int git_config_rename_section(
|
|
1474
1496
|
int error = 0;
|
1475
1497
|
struct rename_data data;
|
1476
1498
|
|
1477
|
-
|
1499
|
+
git_buf_puts_escape_regex(&pattern, old_section_name);
|
1478
1500
|
|
1479
1501
|
if ((error = git_buf_puts(&pattern, "\\..+")) < 0)
|
1480
1502
|
goto cleanup;
|