rugged 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -51,6 +51,7 @@ typedef enum {
|
|
|
51
51
|
GIT_CONFIGMAP_PROTECTHFS, /* core.protectHFS */
|
|
52
52
|
GIT_CONFIGMAP_PROTECTNTFS, /* core.protectNTFS */
|
|
53
53
|
GIT_CONFIGMAP_FSYNCOBJECTFILES, /* core.fsyncObjectFiles */
|
|
54
|
+
GIT_CONFIGMAP_LONGPATHS, /* core.longpaths */
|
|
54
55
|
GIT_CONFIGMAP_CACHE_MAX
|
|
55
56
|
} git_configmap_item;
|
|
56
57
|
|
|
@@ -116,6 +117,8 @@ typedef enum {
|
|
|
116
117
|
GIT_PROTECTNTFS_DEFAULT = GIT_CONFIGMAP_TRUE,
|
|
117
118
|
/* core.fsyncObjectFiles */
|
|
118
119
|
GIT_FSYNCOBJECTFILES_DEFAULT = GIT_CONFIGMAP_FALSE,
|
|
120
|
+
/* core.longpaths */
|
|
121
|
+
GIT_LONGPATHS_DEFAULT = GIT_CONFIGMAP_FALSE,
|
|
119
122
|
} git_configmap_value;
|
|
120
123
|
|
|
121
124
|
/* internal repository init flags */
|
|
@@ -152,7 +155,7 @@ struct git_repository {
|
|
|
152
155
|
|
|
153
156
|
unsigned int lru_counter;
|
|
154
157
|
|
|
155
|
-
|
|
158
|
+
git_atomic32 attr_session_key;
|
|
156
159
|
|
|
157
160
|
intptr_t configmap_cache[GIT_CONFIGMAP_CACHE_MAX];
|
|
158
161
|
git_strmap *submodule_cache;
|
|
@@ -238,4 +241,12 @@ bool git_repository__reserved_names(
|
|
|
238
241
|
*/
|
|
239
242
|
int git_repository_initialbranch(git_buf *out, git_repository *repo);
|
|
240
243
|
|
|
244
|
+
/*
|
|
245
|
+
* Given a relative `path`, this makes it absolute based on the
|
|
246
|
+
* repository's working directory. This will perform validation
|
|
247
|
+
* to ensure that the path is not longer than MAX_PATH on Windows
|
|
248
|
+
* (unless `core.longpaths` is set in the repo config).
|
|
249
|
+
*/
|
|
250
|
+
int git_repository_workdir_path(git_buf *out, git_repository *repo, const char *path);
|
|
251
|
+
|
|
241
252
|
#endif
|
data/vendor/libgit2/src/reset.c
CHANGED
|
@@ -33,7 +33,7 @@ int git_reset_default(
|
|
|
33
33
|
int error;
|
|
34
34
|
git_index *index = NULL;
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
GIT_ASSERT_ARG(pathspecs && pathspecs->count > 0);
|
|
37
37
|
|
|
38
38
|
memset(&entry, 0, sizeof(git_index_entry));
|
|
39
39
|
|
|
@@ -62,10 +62,10 @@ int git_reset_default(
|
|
|
62
62
|
for (i = 0, max_i = git_diff_num_deltas(diff); i < max_i; ++i) {
|
|
63
63
|
const git_diff_delta *delta = git_diff_get_delta(diff, i);
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
GIT_ASSERT(delta->status == GIT_DELTA_ADDED ||
|
|
66
|
+
delta->status == GIT_DELTA_MODIFIED ||
|
|
67
|
+
delta->status == GIT_DELTA_CONFLICTED ||
|
|
68
|
+
delta->status == GIT_DELTA_DELETED);
|
|
69
69
|
|
|
70
70
|
error = git_index_conflict_remove(index, delta->old_file.path);
|
|
71
71
|
if (error < 0) {
|
|
@@ -113,7 +113,8 @@ static int reset(
|
|
|
113
113
|
git_checkout_options opts = GIT_CHECKOUT_OPTIONS_INIT;
|
|
114
114
|
git_buf log_message = GIT_BUF_INIT;
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
GIT_ASSERT_ARG(repo);
|
|
117
|
+
GIT_ASSERT_ARG(target);
|
|
117
118
|
|
|
118
119
|
if (checkout_opts)
|
|
119
120
|
opts = *checkout_opts;
|
data/vendor/libgit2/src/revert.c
CHANGED
|
@@ -129,7 +129,10 @@ int git_revert_commit(
|
|
|
129
129
|
git_tree *parent_tree = NULL, *our_tree = NULL, *revert_tree = NULL;
|
|
130
130
|
int parent = 0, error = 0;
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
GIT_ASSERT_ARG(out);
|
|
133
|
+
GIT_ASSERT_ARG(repo);
|
|
134
|
+
GIT_ASSERT_ARG(revert_commit);
|
|
135
|
+
GIT_ASSERT_ARG(our_commit);
|
|
133
136
|
|
|
134
137
|
if (git_commit_parentcount(revert_commit) > 1) {
|
|
135
138
|
if (!mainline)
|
|
@@ -180,7 +183,8 @@ int git_revert(
|
|
|
180
183
|
git_indexwriter indexwriter = GIT_INDEXWRITER_INIT;
|
|
181
184
|
int error;
|
|
182
185
|
|
|
183
|
-
|
|
186
|
+
GIT_ASSERT_ARG(repo);
|
|
187
|
+
GIT_ASSERT_ARG(commit);
|
|
184
188
|
|
|
185
189
|
GIT_ERROR_CHECK_VERSION(given_opts, GIT_REVERT_OPTIONS_VERSION, "git_revert_options");
|
|
186
190
|
|
|
@@ -317,7 +317,7 @@ static int handle_at_syntax(git_object **out, git_reference **ref, const char *s
|
|
|
317
317
|
git_buf identifier = GIT_BUF_INIT;
|
|
318
318
|
git_time_t timestamp;
|
|
319
319
|
|
|
320
|
-
|
|
320
|
+
GIT_ASSERT(*out == NULL);
|
|
321
321
|
|
|
322
322
|
if (git_buf_put(&identifier, spec, identifier_len) < 0)
|
|
323
323
|
return -1;
|
|
@@ -524,7 +524,7 @@ static int extract_curly_braces_content(git_buf *buf, const char *spec, size_t *
|
|
|
524
524
|
{
|
|
525
525
|
git_buf_clear(buf);
|
|
526
526
|
|
|
527
|
-
|
|
527
|
+
GIT_ASSERT_ARG(spec[*pos] == '^' || spec[*pos] == '@');
|
|
528
528
|
|
|
529
529
|
(*pos)++;
|
|
530
530
|
|
|
@@ -550,7 +550,7 @@ static int extract_path(git_buf *buf, const char *spec, size_t *pos)
|
|
|
550
550
|
{
|
|
551
551
|
git_buf_clear(buf);
|
|
552
552
|
|
|
553
|
-
|
|
553
|
+
GIT_ASSERT_ARG(spec[*pos] == ':');
|
|
554
554
|
|
|
555
555
|
(*pos)++;
|
|
556
556
|
|
|
@@ -568,7 +568,7 @@ static int extract_how_many(int *n, const char *spec, size_t *pos)
|
|
|
568
568
|
int parsed, accumulated;
|
|
569
569
|
char kind = spec[*pos];
|
|
570
570
|
|
|
571
|
-
|
|
571
|
+
GIT_ASSERT_ARG(spec[*pos] == '^' || spec[*pos] == '~');
|
|
572
572
|
|
|
573
573
|
accumulated = 0;
|
|
574
574
|
|
|
@@ -676,7 +676,10 @@ static int revparse(
|
|
|
676
676
|
|
|
677
677
|
bool should_return_reference = true;
|
|
678
678
|
|
|
679
|
-
|
|
679
|
+
GIT_ASSERT_ARG(object_out);
|
|
680
|
+
GIT_ASSERT_ARG(reference_out);
|
|
681
|
+
GIT_ASSERT_ARG(repo);
|
|
682
|
+
GIT_ASSERT_ARG(spec);
|
|
680
683
|
|
|
681
684
|
*object_out = NULL;
|
|
682
685
|
*reference_out = NULL;
|
|
@@ -882,14 +885,16 @@ int git_revparse(
|
|
|
882
885
|
const char *dotdot;
|
|
883
886
|
int error = 0;
|
|
884
887
|
|
|
885
|
-
|
|
888
|
+
GIT_ASSERT_ARG(revspec);
|
|
889
|
+
GIT_ASSERT_ARG(repo);
|
|
890
|
+
GIT_ASSERT_ARG(spec);
|
|
886
891
|
|
|
887
892
|
memset(revspec, 0x0, sizeof(*revspec));
|
|
888
893
|
|
|
889
894
|
if ((dotdot = strstr(spec, "..")) != NULL) {
|
|
890
895
|
char *lstr;
|
|
891
896
|
const char *rstr;
|
|
892
|
-
revspec->flags =
|
|
897
|
+
revspec->flags = GIT_REVSPEC_RANGE;
|
|
893
898
|
|
|
894
899
|
/*
|
|
895
900
|
* Following git.git, don't allow '..' because it makes command line
|
|
@@ -905,7 +910,7 @@ int git_revparse(
|
|
|
905
910
|
lstr = git__substrdup(spec, dotdot - spec);
|
|
906
911
|
rstr = dotdot + 2;
|
|
907
912
|
if (dotdot[2] == '.') {
|
|
908
|
-
revspec->flags |=
|
|
913
|
+
revspec->flags |= GIT_REVSPEC_MERGE_BASE;
|
|
909
914
|
rstr++;
|
|
910
915
|
}
|
|
911
916
|
|
|
@@ -923,7 +928,7 @@ int git_revparse(
|
|
|
923
928
|
|
|
924
929
|
git__free((void*)lstr);
|
|
925
930
|
} else {
|
|
926
|
-
revspec->flags =
|
|
931
|
+
revspec->flags = GIT_REVSPEC_SINGLE;
|
|
927
932
|
error = git_revparse_single(&revspec->from, repo, spec);
|
|
928
933
|
}
|
|
929
934
|
|
|
@@ -99,7 +99,8 @@ int git_revwalk_push(git_revwalk *walk, const git_oid *oid)
|
|
|
99
99
|
{
|
|
100
100
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
GIT_ASSERT_ARG(walk);
|
|
103
|
+
GIT_ASSERT_ARG(oid);
|
|
103
104
|
|
|
104
105
|
return git_revwalk__push_commit(walk, oid, &opts);
|
|
105
106
|
}
|
|
@@ -108,7 +109,9 @@ int git_revwalk_push(git_revwalk *walk, const git_oid *oid)
|
|
|
108
109
|
int git_revwalk_hide(git_revwalk *walk, const git_oid *oid)
|
|
109
110
|
{
|
|
110
111
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
111
|
-
|
|
112
|
+
|
|
113
|
+
GIT_ASSERT_ARG(walk);
|
|
114
|
+
GIT_ASSERT_ARG(oid);
|
|
112
115
|
|
|
113
116
|
opts.uninteresting = 1;
|
|
114
117
|
return git_revwalk__push_commit(walk, oid, &opts);
|
|
@@ -133,7 +136,8 @@ int git_revwalk__push_glob(git_revwalk *walk, const char *glob, const git_revwal
|
|
|
133
136
|
git_reference_iterator *iter;
|
|
134
137
|
size_t wildcard;
|
|
135
138
|
|
|
136
|
-
|
|
139
|
+
GIT_ASSERT_ARG(walk);
|
|
140
|
+
GIT_ASSERT_ARG(glob);
|
|
137
141
|
|
|
138
142
|
if (given_opts)
|
|
139
143
|
memcpy(&opts, given_opts, sizeof(opts));
|
|
@@ -172,7 +176,9 @@ out:
|
|
|
172
176
|
int git_revwalk_push_glob(git_revwalk *walk, const char *glob)
|
|
173
177
|
{
|
|
174
178
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
175
|
-
|
|
179
|
+
|
|
180
|
+
GIT_ASSERT_ARG(walk);
|
|
181
|
+
GIT_ASSERT_ARG(glob);
|
|
176
182
|
|
|
177
183
|
return git_revwalk__push_glob(walk, glob, &opts);
|
|
178
184
|
}
|
|
@@ -180,7 +186,9 @@ int git_revwalk_push_glob(git_revwalk *walk, const char *glob)
|
|
|
180
186
|
int git_revwalk_hide_glob(git_revwalk *walk, const char *glob)
|
|
181
187
|
{
|
|
182
188
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
183
|
-
|
|
189
|
+
|
|
190
|
+
GIT_ASSERT_ARG(walk);
|
|
191
|
+
GIT_ASSERT_ARG(glob);
|
|
184
192
|
|
|
185
193
|
opts.uninteresting = 1;
|
|
186
194
|
return git_revwalk__push_glob(walk, glob, &opts);
|
|
@@ -189,7 +197,8 @@ int git_revwalk_hide_glob(git_revwalk *walk, const char *glob)
|
|
|
189
197
|
int git_revwalk_push_head(git_revwalk *walk)
|
|
190
198
|
{
|
|
191
199
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
192
|
-
|
|
200
|
+
|
|
201
|
+
GIT_ASSERT_ARG(walk);
|
|
193
202
|
|
|
194
203
|
return git_revwalk__push_ref(walk, GIT_HEAD_FILE, &opts);
|
|
195
204
|
}
|
|
@@ -197,7 +206,8 @@ int git_revwalk_push_head(git_revwalk *walk)
|
|
|
197
206
|
int git_revwalk_hide_head(git_revwalk *walk)
|
|
198
207
|
{
|
|
199
208
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
200
|
-
|
|
209
|
+
|
|
210
|
+
GIT_ASSERT_ARG(walk);
|
|
201
211
|
|
|
202
212
|
opts.uninteresting = 1;
|
|
203
213
|
return git_revwalk__push_ref(walk, GIT_HEAD_FILE, &opts);
|
|
@@ -206,7 +216,9 @@ int git_revwalk_hide_head(git_revwalk *walk)
|
|
|
206
216
|
int git_revwalk_push_ref(git_revwalk *walk, const char *refname)
|
|
207
217
|
{
|
|
208
218
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
209
|
-
|
|
219
|
+
|
|
220
|
+
GIT_ASSERT_ARG(walk);
|
|
221
|
+
GIT_ASSERT_ARG(refname);
|
|
210
222
|
|
|
211
223
|
return git_revwalk__push_ref(walk, refname, &opts);
|
|
212
224
|
}
|
|
@@ -226,7 +238,7 @@ int git_revwalk_push_range(git_revwalk *walk, const char *range)
|
|
|
226
238
|
goto out;
|
|
227
239
|
}
|
|
228
240
|
|
|
229
|
-
if (revspec.flags &
|
|
241
|
+
if (revspec.flags & GIT_REVSPEC_MERGE_BASE) {
|
|
230
242
|
/* TODO: support "<commit>...<commit>" */
|
|
231
243
|
git_error_set(GIT_ERROR_INVALID, "symmetric differences not implemented in revwalk");
|
|
232
244
|
error = GIT_EINVALIDSPEC;
|
|
@@ -249,7 +261,10 @@ out:
|
|
|
249
261
|
int git_revwalk_hide_ref(git_revwalk *walk, const char *refname)
|
|
250
262
|
{
|
|
251
263
|
git_revwalk__push_options opts = GIT_REVWALK__PUSH_OPTIONS_INIT;
|
|
252
|
-
|
|
264
|
+
|
|
265
|
+
GIT_ASSERT_ARG(walk);
|
|
266
|
+
GIT_ASSERT_ARG(refname);
|
|
267
|
+
|
|
253
268
|
opts.uninteresting = 1;
|
|
254
269
|
return git_revwalk__push_ref(walk, refname, &opts);
|
|
255
270
|
}
|
|
@@ -694,13 +709,14 @@ void git_revwalk_free(git_revwalk *walk)
|
|
|
694
709
|
|
|
695
710
|
git_repository *git_revwalk_repository(git_revwalk *walk)
|
|
696
711
|
{
|
|
697
|
-
|
|
712
|
+
GIT_ASSERT_ARG_WITH_RETVAL(walk, NULL);
|
|
713
|
+
|
|
698
714
|
return walk->repo;
|
|
699
715
|
}
|
|
700
716
|
|
|
701
717
|
int git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode)
|
|
702
718
|
{
|
|
703
|
-
|
|
719
|
+
GIT_ASSERT_ARG(walk);
|
|
704
720
|
|
|
705
721
|
if (walk->walking)
|
|
706
722
|
git_revwalk_reset(walk);
|
|
@@ -732,7 +748,8 @@ int git_revwalk_next(git_oid *oid, git_revwalk *walk)
|
|
|
732
748
|
int error;
|
|
733
749
|
git_commit_list_node *next;
|
|
734
750
|
|
|
735
|
-
|
|
751
|
+
GIT_ASSERT_ARG(walk);
|
|
752
|
+
GIT_ASSERT_ARG(oid);
|
|
736
753
|
|
|
737
754
|
if (!walk->walking) {
|
|
738
755
|
if ((error = prepare_walk(walk)) < 0)
|
|
@@ -757,7 +774,7 @@ int git_revwalk_reset(git_revwalk *walk)
|
|
|
757
774
|
{
|
|
758
775
|
git_commit_list_node *commit;
|
|
759
776
|
|
|
760
|
-
|
|
777
|
+
GIT_ASSERT_ARG(walk);
|
|
761
778
|
|
|
762
779
|
git_oidmap_foreach_value(walk->commits, commit, {
|
|
763
780
|
commit->seen = 0;
|
|
@@ -787,7 +804,7 @@ int git_revwalk_add_hide_cb(
|
|
|
787
804
|
git_revwalk_hide_cb hide_cb,
|
|
788
805
|
void *payload)
|
|
789
806
|
{
|
|
790
|
-
|
|
807
|
+
GIT_ASSERT_ARG(walk);
|
|
791
808
|
|
|
792
809
|
if (walk->walking)
|
|
793
810
|
git_revwalk_reset(walk);
|
|
@@ -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
|
+
#include "common.h"
|
|
9
|
+
#include "runtime.h"
|
|
10
|
+
|
|
11
|
+
static git_runtime_shutdown_fn shutdown_callback[32];
|
|
12
|
+
static git_atomic32 shutdown_callback_count;
|
|
13
|
+
|
|
14
|
+
static git_atomic32 init_count;
|
|
15
|
+
|
|
16
|
+
static int init_common(git_runtime_init_fn init_fns[], size_t cnt)
|
|
17
|
+
{
|
|
18
|
+
size_t i;
|
|
19
|
+
int ret;
|
|
20
|
+
|
|
21
|
+
/* Initialize subsystems that have global state */
|
|
22
|
+
for (i = 0; i < cnt; i++) {
|
|
23
|
+
if ((ret = init_fns[i]()) != 0)
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
GIT_MEMORY_BARRIER;
|
|
28
|
+
|
|
29
|
+
return ret;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static void shutdown_common(void)
|
|
33
|
+
{
|
|
34
|
+
git_runtime_shutdown_fn cb;
|
|
35
|
+
int pos;
|
|
36
|
+
|
|
37
|
+
for (pos = git_atomic32_get(&shutdown_callback_count);
|
|
38
|
+
pos > 0;
|
|
39
|
+
pos = git_atomic32_dec(&shutdown_callback_count)) {
|
|
40
|
+
cb = git_atomic_swap(shutdown_callback[pos - 1], NULL);
|
|
41
|
+
|
|
42
|
+
if (cb != NULL)
|
|
43
|
+
cb();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
int git_runtime_shutdown_register(git_runtime_shutdown_fn callback)
|
|
48
|
+
{
|
|
49
|
+
int count = git_atomic32_inc(&shutdown_callback_count);
|
|
50
|
+
|
|
51
|
+
if (count > (int)ARRAY_SIZE(shutdown_callback) || count == 0) {
|
|
52
|
+
git_error_set(GIT_ERROR_INVALID,
|
|
53
|
+
"too many shutdown callbacks registered");
|
|
54
|
+
git_atomic32_dec(&shutdown_callback_count);
|
|
55
|
+
return -1;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
shutdown_callback[count - 1] = callback;
|
|
59
|
+
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
#if defined(GIT_THREADS) && defined(GIT_WIN32)
|
|
64
|
+
|
|
65
|
+
/*
|
|
66
|
+
* On Win32, we use a spinlock to provide locking semantics. This is
|
|
67
|
+
* lighter-weight than a proper critical section.
|
|
68
|
+
*/
|
|
69
|
+
static volatile LONG init_spinlock = 0;
|
|
70
|
+
|
|
71
|
+
GIT_INLINE(int) init_lock(void)
|
|
72
|
+
{
|
|
73
|
+
while (InterlockedCompareExchange(&init_spinlock, 1, 0)) { Sleep(0); }
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
GIT_INLINE(int) init_unlock(void)
|
|
78
|
+
{
|
|
79
|
+
InterlockedExchange(&init_spinlock, 0);
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#elif defined(GIT_THREADS) && defined(_POSIX_THREADS)
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* On POSIX, we need to use a proper mutex for locking. We might prefer
|
|
87
|
+
* a spinlock here, too, but there's no static initializer for a
|
|
88
|
+
* pthread_spinlock_t.
|
|
89
|
+
*/
|
|
90
|
+
static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
91
|
+
|
|
92
|
+
GIT_INLINE(int) init_lock(void)
|
|
93
|
+
{
|
|
94
|
+
return pthread_mutex_lock(&init_mutex) == 0 ? 0 : -1;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
GIT_INLINE(int) init_unlock(void)
|
|
98
|
+
{
|
|
99
|
+
return pthread_mutex_unlock(&init_mutex) == 0 ? 0 : -1;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
#elif defined(GIT_THREADS)
|
|
103
|
+
# error unknown threading model
|
|
104
|
+
#else
|
|
105
|
+
|
|
106
|
+
# define init_lock() git__noop()
|
|
107
|
+
# define init_unlock() git__noop()
|
|
108
|
+
|
|
109
|
+
#endif
|
|
110
|
+
|
|
111
|
+
int git_runtime_init(git_runtime_init_fn init_fns[], size_t cnt)
|
|
112
|
+
{
|
|
113
|
+
int ret;
|
|
114
|
+
|
|
115
|
+
if (init_lock() < 0)
|
|
116
|
+
return -1;
|
|
117
|
+
|
|
118
|
+
/* Only do work on a 0 -> 1 transition of the refcount */
|
|
119
|
+
if ((ret = git_atomic32_inc(&init_count)) == 1) {
|
|
120
|
+
if (init_common(init_fns, cnt) < 0)
|
|
121
|
+
ret = -1;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if (init_unlock() < 0)
|
|
125
|
+
return -1;
|
|
126
|
+
|
|
127
|
+
return ret;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
int git_runtime_init_count(void)
|
|
131
|
+
{
|
|
132
|
+
int ret;
|
|
133
|
+
|
|
134
|
+
if (init_lock() < 0)
|
|
135
|
+
return -1;
|
|
136
|
+
|
|
137
|
+
ret = git_atomic32_get(&init_count);
|
|
138
|
+
|
|
139
|
+
if (init_unlock() < 0)
|
|
140
|
+
return -1;
|
|
141
|
+
|
|
142
|
+
return ret;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
int git_runtime_shutdown(void)
|
|
146
|
+
{
|
|
147
|
+
int ret;
|
|
148
|
+
|
|
149
|
+
/* Enter the lock */
|
|
150
|
+
if (init_lock() < 0)
|
|
151
|
+
return -1;
|
|
152
|
+
|
|
153
|
+
/* Only do work on a 1 -> 0 transition of the refcount */
|
|
154
|
+
if ((ret = git_atomic32_dec(&init_count)) == 0)
|
|
155
|
+
shutdown_common();
|
|
156
|
+
|
|
157
|
+
/* Exit the lock */
|
|
158
|
+
if (init_unlock() < 0)
|
|
159
|
+
return -1;
|
|
160
|
+
|
|
161
|
+
return ret;
|
|
162
|
+
}
|