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
data/vendor/libgit2/src/remote.c
CHANGED
|
@@ -82,9 +82,11 @@ static int download_tags_value(git_remote *remote, git_config *cfg)
|
|
|
82
82
|
|
|
83
83
|
static int ensure_remote_name_is_valid(const char *name)
|
|
84
84
|
{
|
|
85
|
-
int error
|
|
85
|
+
int valid, error;
|
|
86
|
+
|
|
87
|
+
error = git_remote_name_is_valid(&valid, name);
|
|
86
88
|
|
|
87
|
-
if (!
|
|
89
|
+
if (!error && !valid) {
|
|
88
90
|
git_error_set(
|
|
89
91
|
GIT_ERROR_CONFIG,
|
|
90
92
|
"'%s' is not a valid remote name.", name ? name : "(null)");
|
|
@@ -119,7 +121,7 @@ static int write_add_refspec(git_repository *repo, const char *name, const char
|
|
|
119
121
|
return error;
|
|
120
122
|
|
|
121
123
|
/*
|
|
122
|
-
* "$^" is
|
|
124
|
+
* "$^" is an unmatchable regexp: it will not match anything at all, so
|
|
123
125
|
* all values will be considered new and we will not replace any
|
|
124
126
|
* present value.
|
|
125
127
|
*/
|
|
@@ -208,7 +210,8 @@ int git_remote_create_with_opts(git_remote **out, const char *url, const git_rem
|
|
|
208
210
|
const git_remote_create_options dummy_opts = GIT_REMOTE_CREATE_OPTIONS_INIT;
|
|
209
211
|
int error = -1;
|
|
210
212
|
|
|
211
|
-
|
|
213
|
+
GIT_ASSERT_ARG(out);
|
|
214
|
+
GIT_ASSERT_ARG(url);
|
|
212
215
|
|
|
213
216
|
if (!opts) {
|
|
214
217
|
opts = &dummy_opts;
|
|
@@ -457,7 +460,9 @@ int git_remote_lookup(git_remote **out, git_repository *repo, const char *name)
|
|
|
457
460
|
struct refspec_cb_data data = { NULL };
|
|
458
461
|
bool optional_setting_found = false, found;
|
|
459
462
|
|
|
460
|
-
|
|
463
|
+
GIT_ASSERT_ARG(out);
|
|
464
|
+
GIT_ASSERT_ARG(repo);
|
|
465
|
+
GIT_ASSERT_ARG(name);
|
|
461
466
|
|
|
462
467
|
if ((error = ensure_remote_name_is_valid(name)) < 0)
|
|
463
468
|
return error;
|
|
@@ -579,29 +584,46 @@ static int lookup_remote_prune_config(git_remote *remote, git_config *config, co
|
|
|
579
584
|
|
|
580
585
|
const char *git_remote_name(const git_remote *remote)
|
|
581
586
|
{
|
|
582
|
-
|
|
587
|
+
GIT_ASSERT_ARG_WITH_RETVAL(remote, NULL);
|
|
583
588
|
return remote->name;
|
|
584
589
|
}
|
|
585
590
|
|
|
586
591
|
git_repository *git_remote_owner(const git_remote *remote)
|
|
587
592
|
{
|
|
588
|
-
|
|
593
|
+
GIT_ASSERT_ARG_WITH_RETVAL(remote, NULL);
|
|
589
594
|
return remote->repo;
|
|
590
595
|
}
|
|
591
596
|
|
|
592
597
|
const char *git_remote_url(const git_remote *remote)
|
|
593
598
|
{
|
|
594
|
-
|
|
599
|
+
GIT_ASSERT_ARG_WITH_RETVAL(remote, NULL);
|
|
595
600
|
return remote->url;
|
|
596
601
|
}
|
|
597
602
|
|
|
603
|
+
int git_remote_set_instance_url(git_remote *remote, const char *url)
|
|
604
|
+
{
|
|
605
|
+
char *tmp;
|
|
606
|
+
|
|
607
|
+
GIT_ASSERT_ARG(remote);
|
|
608
|
+
GIT_ASSERT_ARG(url);
|
|
609
|
+
|
|
610
|
+
if ((tmp = git__strdup(url)) == NULL)
|
|
611
|
+
return -1;
|
|
612
|
+
|
|
613
|
+
git__free(remote->url);
|
|
614
|
+
remote->url = tmp;
|
|
615
|
+
|
|
616
|
+
return 0;
|
|
617
|
+
}
|
|
618
|
+
|
|
598
619
|
static int set_url(git_repository *repo, const char *remote, const char *pattern, const char *url)
|
|
599
620
|
{
|
|
600
621
|
git_config *cfg;
|
|
601
622
|
git_buf buf = GIT_BUF_INIT, canonical_url = GIT_BUF_INIT;
|
|
602
623
|
int error;
|
|
603
624
|
|
|
604
|
-
|
|
625
|
+
GIT_ASSERT_ARG(repo);
|
|
626
|
+
GIT_ASSERT_ARG(remote);
|
|
605
627
|
|
|
606
628
|
if ((error = ensure_remote_name_is_valid(remote)) < 0)
|
|
607
629
|
return error;
|
|
@@ -635,44 +657,84 @@ int git_remote_set_url(git_repository *repo, const char *remote, const char *url
|
|
|
635
657
|
|
|
636
658
|
const char *git_remote_pushurl(const git_remote *remote)
|
|
637
659
|
{
|
|
638
|
-
|
|
660
|
+
GIT_ASSERT_ARG_WITH_RETVAL(remote, NULL);
|
|
639
661
|
return remote->pushurl;
|
|
640
662
|
}
|
|
641
663
|
|
|
664
|
+
int git_remote_set_instance_pushurl(git_remote *remote, const char *url)
|
|
665
|
+
{
|
|
666
|
+
char *tmp;
|
|
667
|
+
|
|
668
|
+
GIT_ASSERT_ARG(remote);
|
|
669
|
+
GIT_ASSERT_ARG(url);
|
|
670
|
+
|
|
671
|
+
if ((tmp = git__strdup(url)) == NULL)
|
|
672
|
+
return -1;
|
|
673
|
+
|
|
674
|
+
git__free(remote->pushurl);
|
|
675
|
+
remote->pushurl = tmp;
|
|
676
|
+
|
|
677
|
+
return 0;
|
|
678
|
+
}
|
|
679
|
+
|
|
642
680
|
int git_remote_set_pushurl(git_repository *repo, const char *remote, const char* url)
|
|
643
681
|
{
|
|
644
682
|
return set_url(repo, remote, CONFIG_PUSHURL_FMT, url);
|
|
645
683
|
}
|
|
646
684
|
|
|
647
|
-
static int resolve_url(
|
|
685
|
+
static int resolve_url(
|
|
686
|
+
git_buf *resolved_url,
|
|
687
|
+
const char *url,
|
|
688
|
+
int direction,
|
|
689
|
+
const git_remote_callbacks *callbacks)
|
|
648
690
|
{
|
|
649
|
-
|
|
691
|
+
#ifdef GIT_DEPRECATE_HARD
|
|
692
|
+
GIT_UNUSED(direction);
|
|
693
|
+
GIT_UNUSED(callbacks);
|
|
694
|
+
#else
|
|
695
|
+
int status, error;
|
|
650
696
|
|
|
651
697
|
if (callbacks && callbacks->resolve_url) {
|
|
652
698
|
git_buf_clear(resolved_url);
|
|
653
699
|
status = callbacks->resolve_url(resolved_url, url, direction, callbacks->payload);
|
|
654
700
|
if (status != GIT_PASSTHROUGH) {
|
|
655
701
|
git_error_set_after_callback_function(status, "git_resolve_url_cb");
|
|
656
|
-
|
|
702
|
+
|
|
703
|
+
if ((error = git_buf_sanitize(resolved_url)) < 0)
|
|
704
|
+
return error;
|
|
705
|
+
|
|
657
706
|
return status;
|
|
658
707
|
}
|
|
659
708
|
}
|
|
709
|
+
#endif
|
|
660
710
|
|
|
661
711
|
return git_buf_sets(resolved_url, url);
|
|
662
712
|
}
|
|
663
713
|
|
|
664
|
-
int git_remote__urlfordirection(
|
|
714
|
+
int git_remote__urlfordirection(
|
|
715
|
+
git_buf *url_out,
|
|
716
|
+
struct git_remote *remote,
|
|
717
|
+
int direction,
|
|
718
|
+
const git_remote_callbacks *callbacks)
|
|
665
719
|
{
|
|
666
720
|
const char *url = NULL;
|
|
667
721
|
|
|
668
|
-
|
|
669
|
-
|
|
722
|
+
GIT_ASSERT_ARG(remote);
|
|
723
|
+
GIT_ASSERT_ARG(direction == GIT_DIRECTION_FETCH || direction == GIT_DIRECTION_PUSH);
|
|
670
724
|
|
|
671
|
-
if (
|
|
725
|
+
if (callbacks && callbacks->remote_ready) {
|
|
726
|
+
int status = callbacks->remote_ready(remote, direction, callbacks->payload);
|
|
727
|
+
|
|
728
|
+
if (status != 0 && status != GIT_PASSTHROUGH) {
|
|
729
|
+
git_error_set_after_callback_function(status, "git_remote_ready_cb");
|
|
730
|
+
return status;
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
if (direction == GIT_DIRECTION_FETCH)
|
|
672
735
|
url = remote->url;
|
|
673
|
-
|
|
736
|
+
else if (direction == GIT_DIRECTION_PUSH)
|
|
674
737
|
url = remote->pushurl ? remote->pushurl : remote->url;
|
|
675
|
-
}
|
|
676
738
|
|
|
677
739
|
if (!url) {
|
|
678
740
|
git_error_set(GIT_ERROR_INVALID,
|
|
@@ -681,6 +743,7 @@ int git_remote__urlfordirection(git_buf *url_out, struct git_remote *remote, int
|
|
|
681
743
|
direction == GIT_DIRECTION_FETCH ? "fetch" : "push");
|
|
682
744
|
return GIT_EINVALID;
|
|
683
745
|
}
|
|
746
|
+
|
|
684
747
|
return resolve_url(url_out, url, direction, callbacks);
|
|
685
748
|
}
|
|
686
749
|
|
|
@@ -711,7 +774,7 @@ int git_remote__connect(git_remote *remote, git_direction direction, const git_r
|
|
|
711
774
|
git_credential_acquire_cb credentials = NULL;
|
|
712
775
|
git_transport_cb transport = NULL;
|
|
713
776
|
|
|
714
|
-
|
|
777
|
+
GIT_ASSERT_ARG(remote);
|
|
715
778
|
|
|
716
779
|
if (callbacks) {
|
|
717
780
|
GIT_ERROR_CHECK_VERSION(callbacks, GIT_REMOTE_CALLBACKS_VERSION, "git_remote_callbacks");
|
|
@@ -776,7 +839,7 @@ int git_remote_connect(git_remote *remote, git_direction direction, const git_re
|
|
|
776
839
|
|
|
777
840
|
int git_remote_ls(const git_remote_head ***out, size_t *size, git_remote *remote)
|
|
778
841
|
{
|
|
779
|
-
|
|
842
|
+
GIT_ASSERT_ARG(remote);
|
|
780
843
|
|
|
781
844
|
if (!remote->transport) {
|
|
782
845
|
git_error_set(GIT_ERROR_NET, "this remote has never connected");
|
|
@@ -786,75 +849,140 @@ int git_remote_ls(const git_remote_head ***out, size_t *size, git_remote *remote
|
|
|
786
849
|
return remote->transport->ls(out, size, remote->transport);
|
|
787
850
|
}
|
|
788
851
|
|
|
789
|
-
int
|
|
852
|
+
static int lookup_config(char **out, git_config *cfg, const char *name)
|
|
790
853
|
{
|
|
791
|
-
git_config *cfg;
|
|
792
854
|
git_config_entry *ce = NULL;
|
|
793
|
-
git_buf val = GIT_BUF_INIT;
|
|
794
855
|
int error;
|
|
795
856
|
|
|
796
|
-
|
|
857
|
+
if ((error = git_config__lookup_entry(&ce, cfg, name, false)) < 0)
|
|
858
|
+
return error;
|
|
859
|
+
|
|
860
|
+
if (ce && ce->value) {
|
|
861
|
+
*out = git__strdup(ce->value);
|
|
862
|
+
GIT_ERROR_CHECK_ALLOC(*out);
|
|
863
|
+
} else {
|
|
864
|
+
error = GIT_ENOTFOUND;
|
|
865
|
+
}
|
|
797
866
|
|
|
798
|
-
|
|
799
|
-
|
|
867
|
+
git_config_entry_free(ce);
|
|
868
|
+
return error;
|
|
869
|
+
}
|
|
800
870
|
|
|
801
|
-
|
|
871
|
+
static void url_config_trim(git_net_url *url)
|
|
872
|
+
{
|
|
873
|
+
size_t len = strlen(url->path);
|
|
802
874
|
|
|
803
|
-
if (
|
|
804
|
-
|
|
875
|
+
if (url->path[len - 1] == '/') {
|
|
876
|
+
len--;
|
|
877
|
+
} else {
|
|
878
|
+
while (len && url->path[len - 1] != '/')
|
|
879
|
+
len--;
|
|
880
|
+
}
|
|
805
881
|
|
|
806
|
-
|
|
807
|
-
|
|
882
|
+
url->path[len] = '\0';
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
static int http_proxy_config(char **out, git_remote *remote, git_net_url *url)
|
|
886
|
+
{
|
|
887
|
+
git_config *cfg;
|
|
888
|
+
git_buf buf = GIT_BUF_INIT;
|
|
889
|
+
git_net_url lookup_url = GIT_NET_URL_INIT;
|
|
890
|
+
int error;
|
|
891
|
+
|
|
892
|
+
if ((error = git_net_url_dup(&lookup_url, url)) < 0 ||
|
|
893
|
+
(error = git_repository_config__weakptr(&cfg, remote->repo)) < 0)
|
|
894
|
+
goto done;
|
|
808
895
|
|
|
809
896
|
/* remote.<name>.proxy config setting */
|
|
810
897
|
if (remote->name && remote->name[0]) {
|
|
811
|
-
|
|
898
|
+
git_buf_clear(&buf);
|
|
812
899
|
|
|
813
|
-
if ((error = git_buf_printf(&buf, "remote.%s.proxy", remote->name)) < 0
|
|
814
|
-
|
|
900
|
+
if ((error = git_buf_printf(&buf, "remote.%s.proxy", remote->name)) < 0 ||
|
|
901
|
+
(error = lookup_config(out, cfg, buf.ptr)) != GIT_ENOTFOUND)
|
|
902
|
+
goto done;
|
|
903
|
+
}
|
|
815
904
|
|
|
816
|
-
|
|
817
|
-
|
|
905
|
+
while (true) {
|
|
906
|
+
git_buf_clear(&buf);
|
|
818
907
|
|
|
819
|
-
if (error < 0
|
|
820
|
-
|
|
908
|
+
if ((error = git_buf_puts(&buf, "http.")) < 0 ||
|
|
909
|
+
(error = git_net_url_fmt(&buf, &lookup_url)) < 0 ||
|
|
910
|
+
(error = git_buf_puts(&buf, ".proxy")) < 0 ||
|
|
911
|
+
(error = lookup_config(out, cfg, buf.ptr)) != GIT_ENOTFOUND)
|
|
912
|
+
goto done;
|
|
821
913
|
|
|
822
|
-
if (
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
914
|
+
if (! lookup_url.path[0])
|
|
915
|
+
break;
|
|
916
|
+
|
|
917
|
+
url_config_trim(&lookup_url);
|
|
826
918
|
}
|
|
827
919
|
|
|
828
|
-
|
|
829
|
-
if ((error = git_config__lookup_entry(&ce, cfg, "http.proxy", false)) < 0)
|
|
830
|
-
return error;
|
|
920
|
+
git_buf_clear(&buf);
|
|
831
921
|
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
922
|
+
error = lookup_config(out, cfg, "http.proxy");
|
|
923
|
+
|
|
924
|
+
done:
|
|
925
|
+
git_buf_dispose(&buf);
|
|
926
|
+
git_net_url_dispose(&lookup_url);
|
|
927
|
+
return error;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
static int http_proxy_env(char **out, git_remote *remote, git_net_url *url)
|
|
931
|
+
{
|
|
932
|
+
git_buf proxy_env = GIT_BUF_INIT, no_proxy_env = GIT_BUF_INIT;
|
|
933
|
+
bool use_ssl = (strcmp(url->scheme, "https") == 0);
|
|
934
|
+
int error;
|
|
935
|
+
|
|
936
|
+
GIT_UNUSED(remote);
|
|
836
937
|
|
|
837
938
|
/* http_proxy / https_proxy environment variables */
|
|
838
|
-
error = git__getenv(&
|
|
939
|
+
error = git__getenv(&proxy_env, use_ssl ? "https_proxy" : "http_proxy");
|
|
839
940
|
|
|
840
941
|
/* try uppercase environment variables */
|
|
841
942
|
if (error == GIT_ENOTFOUND)
|
|
842
|
-
error = git__getenv(&
|
|
943
|
+
error = git__getenv(&proxy_env, use_ssl ? "HTTPS_PROXY" : "HTTP_PROXY");
|
|
843
944
|
|
|
844
|
-
if (error
|
|
845
|
-
|
|
846
|
-
git_error_clear();
|
|
847
|
-
error = 0;
|
|
848
|
-
}
|
|
945
|
+
if (error)
|
|
946
|
+
goto done;
|
|
849
947
|
|
|
850
|
-
|
|
851
|
-
|
|
948
|
+
/* no_proxy/NO_PROXY environment variables */
|
|
949
|
+
error = git__getenv(&no_proxy_env, "no_proxy");
|
|
852
950
|
|
|
853
|
-
|
|
951
|
+
if (error == GIT_ENOTFOUND)
|
|
952
|
+
error = git__getenv(&no_proxy_env, "NO_PROXY");
|
|
854
953
|
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
954
|
+
if (error && error != GIT_ENOTFOUND)
|
|
955
|
+
goto done;
|
|
956
|
+
|
|
957
|
+
if (!git_net_url_matches_pattern_list(url, no_proxy_env.ptr))
|
|
958
|
+
*out = git_buf_detach(&proxy_env);
|
|
959
|
+
else
|
|
960
|
+
error = GIT_ENOTFOUND;
|
|
961
|
+
|
|
962
|
+
done:
|
|
963
|
+
git_buf_dispose(&proxy_env);
|
|
964
|
+
git_buf_dispose(&no_proxy_env);
|
|
965
|
+
return error;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
int git_remote__http_proxy(char **out, git_remote *remote, git_net_url *url)
|
|
969
|
+
{
|
|
970
|
+
int error;
|
|
971
|
+
|
|
972
|
+
GIT_ASSERT_ARG(out);
|
|
973
|
+
GIT_ASSERT_ARG(remote);
|
|
974
|
+
GIT_ASSERT_ARG(remote->repo);
|
|
975
|
+
|
|
976
|
+
*out = NULL;
|
|
977
|
+
|
|
978
|
+
/*
|
|
979
|
+
* Go through the possible sources for proxy configuration,
|
|
980
|
+
* Examine the various git config options first, then
|
|
981
|
+
* consult environment variables.
|
|
982
|
+
*/
|
|
983
|
+
if ((error = http_proxy_config(out, remote, url)) != GIT_ENOTFOUND ||
|
|
984
|
+
(error = http_proxy_env(out, remote, url)) != GIT_ENOTFOUND)
|
|
985
|
+
return error;
|
|
858
986
|
|
|
859
987
|
return 0;
|
|
860
988
|
}
|
|
@@ -922,7 +1050,7 @@ int git_remote_download(git_remote *remote, const git_strarray *refspecs, const
|
|
|
922
1050
|
const git_strarray *custom_headers = NULL;
|
|
923
1051
|
const git_proxy_options *proxy = NULL;
|
|
924
1052
|
|
|
925
|
-
|
|
1053
|
+
GIT_ASSERT_ARG(remote);
|
|
926
1054
|
|
|
927
1055
|
if (!remote->repo) {
|
|
928
1056
|
git_error_set(GIT_ERROR_INVALID, "cannot download detached remote");
|
|
@@ -1061,7 +1189,8 @@ static int remote_head_for_fetchspec_src(git_remote_head **out, git_vector *upda
|
|
|
1061
1189
|
unsigned int i;
|
|
1062
1190
|
git_remote_head *remote_ref;
|
|
1063
1191
|
|
|
1064
|
-
|
|
1192
|
+
GIT_ASSERT_ARG(update_heads);
|
|
1193
|
+
GIT_ASSERT_ARG(fetchspec_src);
|
|
1065
1194
|
|
|
1066
1195
|
*out = NULL;
|
|
1067
1196
|
|
|
@@ -1112,10 +1241,12 @@ static int remote_head_for_ref(git_remote_head **out, git_remote *remote, git_re
|
|
|
1112
1241
|
git_reference *resolved_ref = NULL;
|
|
1113
1242
|
git_buf remote_name = GIT_BUF_INIT;
|
|
1114
1243
|
git_config *config = NULL;
|
|
1115
|
-
const char *ref_name
|
|
1244
|
+
const char *ref_name;
|
|
1116
1245
|
int error = 0, update;
|
|
1117
1246
|
|
|
1118
|
-
|
|
1247
|
+
GIT_ASSERT_ARG(out);
|
|
1248
|
+
GIT_ASSERT_ARG(spec);
|
|
1249
|
+
GIT_ASSERT_ARG(ref);
|
|
1119
1250
|
|
|
1120
1251
|
*out = NULL;
|
|
1121
1252
|
|
|
@@ -1125,7 +1256,7 @@ static int remote_head_for_ref(git_remote_head **out, git_remote *remote, git_re
|
|
|
1125
1256
|
if (error == GIT_ENOTFOUND && git_reference_type(ref) == GIT_REFERENCE_SYMBOLIC) {
|
|
1126
1257
|
ref_name = git_reference_symbolic_target(ref);
|
|
1127
1258
|
error = 0;
|
|
1128
|
-
} else
|
|
1259
|
+
} else {
|
|
1129
1260
|
ref_name = git_reference_name(resolved_ref);
|
|
1130
1261
|
}
|
|
1131
1262
|
|
|
@@ -1162,7 +1293,7 @@ static int git_remote_write_fetchhead(git_remote *remote, git_refspec *spec, git
|
|
|
1162
1293
|
unsigned int i = 0;
|
|
1163
1294
|
int error = 0;
|
|
1164
1295
|
|
|
1165
|
-
|
|
1296
|
+
GIT_ASSERT_ARG(remote);
|
|
1166
1297
|
|
|
1167
1298
|
/* no heads, nothing to do */
|
|
1168
1299
|
if (update_heads->length == 0)
|
|
@@ -1305,7 +1436,7 @@ int git_remote_prune(git_remote *remote, const git_remote_callbacks *callbacks)
|
|
|
1305
1436
|
if (error == GIT_ENOTFOUND)
|
|
1306
1437
|
continue;
|
|
1307
1438
|
|
|
1308
|
-
/*
|
|
1439
|
+
/* If we did find a source, remove it from the candidates. */
|
|
1309
1440
|
if ((error = git_vector_set((void **) &src_name, &candidates, i, NULL)) < 0)
|
|
1310
1441
|
goto cleanup;
|
|
1311
1442
|
|
|
@@ -1368,7 +1499,7 @@ static int update_tips_for_spec(
|
|
|
1368
1499
|
git_vector *refs,
|
|
1369
1500
|
const char *log_message)
|
|
1370
1501
|
{
|
|
1371
|
-
int error = 0, autotag;
|
|
1502
|
+
int error = 0, autotag, valid;
|
|
1372
1503
|
unsigned int i = 0;
|
|
1373
1504
|
git_buf refname = GIT_BUF_INIT;
|
|
1374
1505
|
git_oid old;
|
|
@@ -1378,7 +1509,7 @@ static int update_tips_for_spec(
|
|
|
1378
1509
|
git_refspec tagspec;
|
|
1379
1510
|
git_vector update_heads;
|
|
1380
1511
|
|
|
1381
|
-
|
|
1512
|
+
GIT_ASSERT_ARG(remote);
|
|
1382
1513
|
|
|
1383
1514
|
if (git_repository_odb__weakptr(&odb, remote->repo) < 0)
|
|
1384
1515
|
return -1;
|
|
@@ -1396,7 +1527,10 @@ static int update_tips_for_spec(
|
|
|
1396
1527
|
git_buf_clear(&refname);
|
|
1397
1528
|
|
|
1398
1529
|
/* Ignore malformed ref names (which also saves us from tag^{} */
|
|
1399
|
-
if (
|
|
1530
|
+
if (git_reference_name_is_valid(&valid, head->name) < 0)
|
|
1531
|
+
goto on_error;
|
|
1532
|
+
|
|
1533
|
+
if (!valid)
|
|
1400
1534
|
continue;
|
|
1401
1535
|
|
|
1402
1536
|
/* If we have a tag, see if the auto-follow rules say to update it */
|
|
@@ -1445,6 +1579,11 @@ static int update_tips_for_spec(
|
|
|
1445
1579
|
if (error < 0 && error != GIT_ENOTFOUND)
|
|
1446
1580
|
goto on_error;
|
|
1447
1581
|
|
|
1582
|
+
if (!(error || error == GIT_ENOTFOUND)
|
|
1583
|
+
&& !spec->force
|
|
1584
|
+
&& !git_graph_descendant_of(remote->repo, &head->oid, &old))
|
|
1585
|
+
continue;
|
|
1586
|
+
|
|
1448
1587
|
if (error == GIT_ENOTFOUND) {
|
|
1449
1588
|
memset(&old, 0, GIT_OID_RAWSZ);
|
|
1450
1589
|
|
|
@@ -1505,6 +1644,7 @@ static int next_head(const git_remote *remote, git_vector *refs,
|
|
|
1505
1644
|
git_remote_head *head;
|
|
1506
1645
|
git_refspec *spec, *passive_spec;
|
|
1507
1646
|
size_t i, j, k;
|
|
1647
|
+
int valid;
|
|
1508
1648
|
|
|
1509
1649
|
active = &remote->active_refspecs;
|
|
1510
1650
|
passive = &remote->passive_refspecs;
|
|
@@ -1516,7 +1656,10 @@ static int next_head(const git_remote *remote, git_vector *refs,
|
|
|
1516
1656
|
for (; i < refs->length; i++) {
|
|
1517
1657
|
head = git_vector_get(refs, i);
|
|
1518
1658
|
|
|
1519
|
-
if (
|
|
1659
|
+
if (git_reference_name_is_valid(&valid, head->name) < 0)
|
|
1660
|
+
return -1;
|
|
1661
|
+
|
|
1662
|
+
if (!valid)
|
|
1520
1663
|
continue;
|
|
1521
1664
|
|
|
1522
1665
|
for (; j < active->length; j++) {
|
|
@@ -1663,7 +1806,7 @@ int git_remote_update_tips(
|
|
|
1663
1806
|
goto out;
|
|
1664
1807
|
}
|
|
1665
1808
|
|
|
1666
|
-
/*
|
|
1809
|
+
/* Only try to do opportunistic updates if the refpec lists differ. */
|
|
1667
1810
|
if (remote->passed_refspecs)
|
|
1668
1811
|
error = opportunistic_updates(remote, callbacks, &refs, reflog_message);
|
|
1669
1812
|
|
|
@@ -1675,7 +1818,7 @@ out:
|
|
|
1675
1818
|
|
|
1676
1819
|
int git_remote_connected(const git_remote *remote)
|
|
1677
1820
|
{
|
|
1678
|
-
|
|
1821
|
+
GIT_ASSERT_ARG(remote);
|
|
1679
1822
|
|
|
1680
1823
|
if (!remote->transport || !remote->transport->is_connected)
|
|
1681
1824
|
return 0;
|
|
@@ -1686,7 +1829,7 @@ int git_remote_connected(const git_remote *remote)
|
|
|
1686
1829
|
|
|
1687
1830
|
int git_remote_stop(git_remote *remote)
|
|
1688
1831
|
{
|
|
1689
|
-
|
|
1832
|
+
GIT_ASSERT_ARG(remote);
|
|
1690
1833
|
|
|
1691
1834
|
if (remote->transport && remote->transport->cancel)
|
|
1692
1835
|
remote->transport->cancel(remote->transport);
|
|
@@ -1696,7 +1839,7 @@ int git_remote_stop(git_remote *remote)
|
|
|
1696
1839
|
|
|
1697
1840
|
int git_remote_disconnect(git_remote *remote)
|
|
1698
1841
|
{
|
|
1699
|
-
|
|
1842
|
+
GIT_ASSERT_ARG(remote);
|
|
1700
1843
|
|
|
1701
1844
|
if (git_remote_connected(remote))
|
|
1702
1845
|
remote->transport->close(remote->transport);
|
|
@@ -1782,7 +1925,7 @@ int git_remote_list(git_strarray *remotes_list, git_repository *repo)
|
|
|
1782
1925
|
|
|
1783
1926
|
const git_indexer_progress *git_remote_stats(git_remote *remote)
|
|
1784
1927
|
{
|
|
1785
|
-
|
|
1928
|
+
GIT_ASSERT_ARG_WITH_RETVAL(remote, NULL);
|
|
1786
1929
|
return &remote->stats;
|
|
1787
1930
|
}
|
|
1788
1931
|
|
|
@@ -1797,7 +1940,7 @@ int git_remote_set_autotag(git_repository *repo, const char *remote, git_remote_
|
|
|
1797
1940
|
git_config *config;
|
|
1798
1941
|
int error;
|
|
1799
1942
|
|
|
1800
|
-
|
|
1943
|
+
GIT_ASSERT_ARG(repo && remote);
|
|
1801
1944
|
|
|
1802
1945
|
if ((error = ensure_remote_name_is_valid(remote)) < 0)
|
|
1803
1946
|
return error;
|
|
@@ -2061,7 +2204,7 @@ int git_remote_rename(git_strarray *out, git_repository *repo, const char *name,
|
|
|
2061
2204
|
git_vector problem_refspecs = GIT_VECTOR_INIT;
|
|
2062
2205
|
git_remote *remote = NULL;
|
|
2063
2206
|
|
|
2064
|
-
|
|
2207
|
+
GIT_ASSERT_ARG(out && repo && name && new_name);
|
|
2065
2208
|
|
|
2066
2209
|
if ((error = git_remote_lookup(&remote, repo, name)) < 0)
|
|
2067
2210
|
return error;
|
|
@@ -2095,24 +2238,34 @@ cleanup:
|
|
|
2095
2238
|
return error;
|
|
2096
2239
|
}
|
|
2097
2240
|
|
|
2098
|
-
int
|
|
2099
|
-
const char *remote_name)
|
|
2241
|
+
int git_remote_name_is_valid(int *valid, const char *remote_name)
|
|
2100
2242
|
{
|
|
2101
2243
|
git_buf buf = GIT_BUF_INIT;
|
|
2102
|
-
git_refspec refspec;
|
|
2103
|
-
int error
|
|
2244
|
+
git_refspec refspec = {0};
|
|
2245
|
+
int error;
|
|
2246
|
+
|
|
2247
|
+
GIT_ASSERT(valid);
|
|
2248
|
+
|
|
2249
|
+
*valid = 0;
|
|
2104
2250
|
|
|
2105
2251
|
if (!remote_name || *remote_name == '\0')
|
|
2106
2252
|
return 0;
|
|
2107
2253
|
|
|
2108
|
-
git_buf_printf(&buf, "refs/heads/test:refs/remotes/%s/test", remote_name)
|
|
2254
|
+
if ((error = git_buf_printf(&buf, "refs/heads/test:refs/remotes/%s/test", remote_name)) < 0)
|
|
2255
|
+
goto done;
|
|
2256
|
+
|
|
2109
2257
|
error = git_refspec__parse(&refspec, git_buf_cstr(&buf), true);
|
|
2110
2258
|
|
|
2259
|
+
if (!error)
|
|
2260
|
+
*valid = 1;
|
|
2261
|
+
else if (error == GIT_EINVALIDSPEC)
|
|
2262
|
+
error = 0;
|
|
2263
|
+
|
|
2264
|
+
done:
|
|
2111
2265
|
git_buf_dispose(&buf);
|
|
2112
2266
|
git_refspec__dispose(&refspec);
|
|
2113
2267
|
|
|
2114
|
-
|
|
2115
|
-
return error == 0;
|
|
2268
|
+
return error;
|
|
2116
2269
|
}
|
|
2117
2270
|
|
|
2118
2271
|
git_refspec *git_remote__matching_refspec(git_remote *remote, const char *refname)
|
|
@@ -2227,7 +2380,7 @@ static const char *name_offset(size_t *len_out, const char *name)
|
|
|
2227
2380
|
prefix_len = strlen("remote.");
|
|
2228
2381
|
dot = strchr(name + prefix_len, '.');
|
|
2229
2382
|
|
|
2230
|
-
|
|
2383
|
+
GIT_ASSERT_ARG_WITH_RETVAL(dot, NULL);
|
|
2231
2384
|
|
|
2232
2385
|
*len_out = dot - name - prefix_len;
|
|
2233
2386
|
return name + prefix_len;
|
|
@@ -2257,10 +2410,13 @@ static int remove_branch_config_related_entries(
|
|
|
2257
2410
|
if (strcmp(remote_name, entry->value))
|
|
2258
2411
|
continue;
|
|
2259
2412
|
|
|
2260
|
-
branch = name_offset(&branch_len, entry->name)
|
|
2413
|
+
if ((branch = name_offset(&branch_len, entry->name)) == NULL) {
|
|
2414
|
+
error = -1;
|
|
2415
|
+
break;
|
|
2416
|
+
}
|
|
2261
2417
|
|
|
2262
2418
|
git_buf_clear(&buf);
|
|
2263
|
-
if (git_buf_printf(&buf, "branch.%.*s.merge", (int)branch_len, branch) < 0)
|
|
2419
|
+
if ((error = git_buf_printf(&buf, "branch.%.*s.merge", (int)branch_len, branch)) < 0)
|
|
2264
2420
|
break;
|
|
2265
2421
|
|
|
2266
2422
|
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0) {
|
|
@@ -2270,7 +2426,7 @@ static int remove_branch_config_related_entries(
|
|
|
2270
2426
|
}
|
|
2271
2427
|
|
|
2272
2428
|
git_buf_clear(&buf);
|
|
2273
|
-
if (git_buf_printf(&buf, "branch.%.*s.remote", (int)branch_len, branch) < 0)
|
|
2429
|
+
if ((error = git_buf_printf(&buf, "branch.%.*s.remote", (int)branch_len, branch)) < 0)
|
|
2274
2430
|
break;
|
|
2275
2431
|
|
|
2276
2432
|
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0) {
|
|
@@ -2365,7 +2521,8 @@ int git_remote_delete(git_repository *repo, const char *name)
|
|
|
2365
2521
|
{
|
|
2366
2522
|
int error;
|
|
2367
2523
|
|
|
2368
|
-
|
|
2524
|
+
GIT_ASSERT_ARG(repo);
|
|
2525
|
+
GIT_ASSERT_ARG(name);
|
|
2369
2526
|
|
|
2370
2527
|
if ((error = remove_branch_config_related_entries(repo, name)) < 0 ||
|
|
2371
2528
|
(error = remove_remote_tracking(repo, name)) < 0 ||
|
|
@@ -2384,7 +2541,7 @@ int git_remote_default_branch(git_buf *out, git_remote *remote)
|
|
|
2384
2541
|
git_buf local_default = GIT_BUF_INIT;
|
|
2385
2542
|
int error;
|
|
2386
2543
|
|
|
2387
|
-
|
|
2544
|
+
GIT_ASSERT_ARG(out);
|
|
2388
2545
|
|
|
2389
2546
|
if ((error = git_remote_ls(&heads, &heads_len, remote)) < 0)
|
|
2390
2547
|
goto done;
|
|
@@ -2394,7 +2551,8 @@ int git_remote_default_branch(git_buf *out, git_remote *remote)
|
|
|
2394
2551
|
goto done;
|
|
2395
2552
|
}
|
|
2396
2553
|
|
|
2397
|
-
git_buf_sanitize(out)
|
|
2554
|
+
if ((error = git_buf_sanitize(out)) < 0)
|
|
2555
|
+
return error;
|
|
2398
2556
|
|
|
2399
2557
|
/* the first one must be HEAD so if that has the symref info, we're done */
|
|
2400
2558
|
if (heads[0]->symref_target) {
|
|
@@ -2452,7 +2610,7 @@ int git_remote_upload(git_remote *remote, const git_strarray *refspecs, const gi
|
|
|
2452
2610
|
const git_remote_callbacks *cbs = NULL;
|
|
2453
2611
|
git_remote_connection_opts conn = GIT_REMOTE_CONNECTION_OPTIONS_INIT;
|
|
2454
2612
|
|
|
2455
|
-
|
|
2613
|
+
GIT_ASSERT_ARG(remote);
|
|
2456
2614
|
|
|
2457
2615
|
if (!remote->repo) {
|
|
2458
2616
|
git_error_set(GIT_ERROR_INVALID, "cannot download detached remote");
|
|
@@ -2518,7 +2676,7 @@ int git_remote_push(git_remote *remote, const git_strarray *refspecs, const git_
|
|
|
2518
2676
|
const git_strarray *custom_headers = NULL;
|
|
2519
2677
|
const git_proxy_options *proxy = NULL;
|
|
2520
2678
|
|
|
2521
|
-
|
|
2679
|
+
GIT_ASSERT_ARG(remote);
|
|
2522
2680
|
|
|
2523
2681
|
if (!remote->repo) {
|
|
2524
2682
|
git_error_set(GIT_ERROR_INVALID, "cannot download detached remote");
|
|
@@ -2533,8 +2691,6 @@ int git_remote_push(git_remote *remote, const git_strarray *refspecs, const git_
|
|
|
2533
2691
|
proxy = &opts->proxy_opts;
|
|
2534
2692
|
}
|
|
2535
2693
|
|
|
2536
|
-
assert(remote);
|
|
2537
|
-
|
|
2538
2694
|
if ((error = git_remote_connect(remote, GIT_DIRECTION_PUSH, cbs, proxy, custom_headers)) < 0)
|
|
2539
2695
|
return error;
|
|
2540
2696
|
|
|
@@ -2561,9 +2717,9 @@ char *apply_insteadof(git_config *config, const char *url, int direction)
|
|
|
2561
2717
|
git_config_entry *entry;
|
|
2562
2718
|
git_config_iterator *iter;
|
|
2563
2719
|
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2720
|
+
GIT_ASSERT_ARG_WITH_RETVAL(config, NULL);
|
|
2721
|
+
GIT_ASSERT_ARG_WITH_RETVAL(url, NULL);
|
|
2722
|
+
GIT_ASSERT_ARG_WITH_RETVAL(direction == GIT_DIRECTION_FETCH || direction == GIT_DIRECTION_PUSH, NULL);
|
|
2567
2723
|
|
|
2568
2724
|
/* Add 1 to prefix/suffix length due to the additional escaped dot */
|
|
2569
2725
|
prefix_length = strlen(PREFIX) + 1;
|
|
@@ -2611,3 +2767,17 @@ char *apply_insteadof(git_config *config, const char *url, int direction)
|
|
|
2611
2767
|
|
|
2612
2768
|
return result.ptr;
|
|
2613
2769
|
}
|
|
2770
|
+
|
|
2771
|
+
/* Deprecated functions */
|
|
2772
|
+
|
|
2773
|
+
#ifndef GIT_DEPRECATE_HARD
|
|
2774
|
+
|
|
2775
|
+
int git_remote_is_valid_name(const char *remote_name)
|
|
2776
|
+
{
|
|
2777
|
+
int valid = 0;
|
|
2778
|
+
|
|
2779
|
+
git_remote_name_is_valid(&valid, remote_name);
|
|
2780
|
+
return valid;
|
|
2781
|
+
}
|
|
2782
|
+
|
|
2783
|
+
#endif
|