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
data/vendor/libgit2/src/remote.h
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
|
16
16
|
#include "refspec.h"
|
17
17
|
#include "vector.h"
|
18
|
+
#include "net.h"
|
18
19
|
|
19
20
|
#define GIT_REMOTE_ORIGIN "origin"
|
20
21
|
|
@@ -46,7 +47,7 @@ typedef struct git_remote_connection_opts {
|
|
46
47
|
int git_remote__connect(git_remote *remote, git_direction direction, const git_remote_callbacks *callbacks, const git_remote_connection_opts *conn);
|
47
48
|
|
48
49
|
int git_remote__urlfordirection(git_buf *url_out, struct git_remote *remote, int direction, const git_remote_callbacks *callbacks);
|
49
|
-
int
|
50
|
+
int git_remote__http_proxy(char **out, git_remote *remote, git_net_url *url);
|
50
51
|
|
51
52
|
git_refspec *git_remote__matching_refspec(git_remote *remote, const char *refname);
|
52
53
|
git_refspec *git_remote__matching_dst_refspec(git_remote *remote, const char *refname);
|
@@ -93,7 +93,7 @@ static void set_odb(git_repository *repo, git_odb *odb)
|
|
93
93
|
GIT_REFCOUNT_INC(odb);
|
94
94
|
}
|
95
95
|
|
96
|
-
if ((odb =
|
96
|
+
if ((odb = git_atomic_swap(repo->_odb, odb)) != NULL) {
|
97
97
|
GIT_REFCOUNT_OWN(odb, NULL);
|
98
98
|
git_odb_free(odb);
|
99
99
|
}
|
@@ -106,7 +106,7 @@ static void set_refdb(git_repository *repo, git_refdb *refdb)
|
|
106
106
|
GIT_REFCOUNT_INC(refdb);
|
107
107
|
}
|
108
108
|
|
109
|
-
if ((refdb =
|
109
|
+
if ((refdb = git_atomic_swap(repo->_refdb, refdb)) != NULL) {
|
110
110
|
GIT_REFCOUNT_OWN(refdb, NULL);
|
111
111
|
git_refdb_free(refdb);
|
112
112
|
}
|
@@ -119,7 +119,7 @@ static void set_config(git_repository *repo, git_config *config)
|
|
119
119
|
GIT_REFCOUNT_INC(config);
|
120
120
|
}
|
121
121
|
|
122
|
-
if ((config =
|
122
|
+
if ((config = git_atomic_swap(repo->_config, config)) != NULL) {
|
123
123
|
GIT_REFCOUNT_OWN(config, NULL);
|
124
124
|
git_config_free(config);
|
125
125
|
}
|
@@ -134,7 +134,7 @@ static void set_index(git_repository *repo, git_index *index)
|
|
134
134
|
GIT_REFCOUNT_INC(index);
|
135
135
|
}
|
136
136
|
|
137
|
-
if ((index =
|
137
|
+
if ((index = git_atomic_swap(repo->_index, index)) != NULL) {
|
138
138
|
GIT_REFCOUNT_OWN(index, NULL);
|
139
139
|
git_index_free(index);
|
140
140
|
}
|
@@ -142,7 +142,7 @@ static void set_index(git_repository *repo, git_index *index)
|
|
142
142
|
|
143
143
|
int git_repository__cleanup(git_repository *repo)
|
144
144
|
{
|
145
|
-
|
145
|
+
GIT_ASSERT_ARG(repo);
|
146
146
|
|
147
147
|
git_repository_submodule_cache_clear(repo);
|
148
148
|
git_cache_clear(&repo->objects);
|
@@ -186,6 +186,63 @@ void git_repository_free(git_repository *repo)
|
|
186
186
|
git__free(repo);
|
187
187
|
}
|
188
188
|
|
189
|
+
/* Check if we have a separate commondir (e.g. we have a worktree) */
|
190
|
+
static int lookup_commondir(bool *separate, git_buf *commondir, git_buf *repository_path)
|
191
|
+
{
|
192
|
+
git_buf common_link = GIT_BUF_INIT;
|
193
|
+
int error;
|
194
|
+
|
195
|
+
/*
|
196
|
+
* If there's no commondir file, the repository path is the
|
197
|
+
* common path, but it needs a trailing slash.
|
198
|
+
*/
|
199
|
+
if (!git_path_contains_file(repository_path, GIT_COMMONDIR_FILE)) {
|
200
|
+
if ((error = git_buf_set(commondir, repository_path->ptr, repository_path->size)) == 0)
|
201
|
+
error = git_path_to_dir(commondir);
|
202
|
+
|
203
|
+
*separate = false;
|
204
|
+
goto done;
|
205
|
+
}
|
206
|
+
|
207
|
+
*separate = true;
|
208
|
+
|
209
|
+
if ((error = git_buf_joinpath(&common_link, repository_path->ptr, GIT_COMMONDIR_FILE)) < 0 ||
|
210
|
+
(error = git_futils_readbuffer(&common_link, common_link.ptr)) < 0)
|
211
|
+
goto done;
|
212
|
+
|
213
|
+
git_buf_rtrim(&common_link);
|
214
|
+
if (git_path_is_relative(common_link.ptr)) {
|
215
|
+
if ((error = git_buf_joinpath(commondir, repository_path->ptr, common_link.ptr)) < 0)
|
216
|
+
goto done;
|
217
|
+
} else {
|
218
|
+
git_buf_swap(commondir, &common_link);
|
219
|
+
}
|
220
|
+
|
221
|
+
git_buf_dispose(&common_link);
|
222
|
+
|
223
|
+
/* Make sure the commondir path always has a trailing slash */
|
224
|
+
error = git_path_prettify_dir(commondir, commondir->ptr, NULL);
|
225
|
+
|
226
|
+
done:
|
227
|
+
return error;
|
228
|
+
}
|
229
|
+
|
230
|
+
GIT_INLINE(int) validate_repo_path(git_buf *path)
|
231
|
+
{
|
232
|
+
/*
|
233
|
+
* The longest static path in a repository (or commondir) is the
|
234
|
+
* packed refs file. (Loose refs may be longer since they
|
235
|
+
* include the reference name, but will be validated when the
|
236
|
+
* path is constructed.)
|
237
|
+
*/
|
238
|
+
static size_t suffix_len =
|
239
|
+
CONST_STRLEN("objects/pack/pack-.pack.lock") +
|
240
|
+
GIT_OID_HEXSZ;
|
241
|
+
|
242
|
+
return git_path_validate_filesystem_with_suffix(
|
243
|
+
path->ptr, path->size, suffix_len);
|
244
|
+
}
|
245
|
+
|
189
246
|
/*
|
190
247
|
* Git repository open methods
|
191
248
|
*
|
@@ -193,48 +250,30 @@ void git_repository_free(git_repository *repo)
|
|
193
250
|
*/
|
194
251
|
static int is_valid_repository_path(bool *out, git_buf *repository_path, git_buf *common_path)
|
195
252
|
{
|
253
|
+
bool separate_commondir = false;
|
196
254
|
int error;
|
197
255
|
|
198
256
|
*out = false;
|
199
257
|
|
200
|
-
|
201
|
-
|
202
|
-
if (git_path_contains_file(repository_path, GIT_COMMONDIR_FILE)) {
|
203
|
-
git_buf common_link = GIT_BUF_INIT;
|
204
|
-
|
205
|
-
if ((error = git_buf_joinpath(&common_link, repository_path->ptr, GIT_COMMONDIR_FILE)) < 0 ||
|
206
|
-
(error = git_futils_readbuffer(&common_link, common_link.ptr)) < 0)
|
207
|
-
return error;
|
208
|
-
|
209
|
-
git_buf_rtrim(&common_link);
|
210
|
-
if (git_path_is_relative(common_link.ptr)) {
|
211
|
-
if ((error = git_buf_joinpath(common_path, repository_path->ptr, common_link.ptr)) < 0)
|
212
|
-
return error;
|
213
|
-
} else {
|
214
|
-
git_buf_swap(common_path, &common_link);
|
215
|
-
}
|
216
|
-
|
217
|
-
git_buf_dispose(&common_link);
|
218
|
-
}
|
219
|
-
else {
|
220
|
-
if ((error = git_buf_set(common_path, repository_path->ptr, repository_path->size)) < 0)
|
221
|
-
return error;
|
222
|
-
}
|
223
|
-
|
224
|
-
/* Make sure the commondir path always has a trailing * slash */
|
225
|
-
if (git_buf_rfind(common_path, '/') != (ssize_t)common_path->size - 1)
|
226
|
-
if ((error = git_buf_putc(common_path, '/')) < 0)
|
227
|
-
return error;
|
258
|
+
if ((error = lookup_commondir(&separate_commondir, common_path, repository_path)) < 0)
|
259
|
+
return error;
|
228
260
|
|
229
261
|
/* Ensure HEAD file exists */
|
230
262
|
if (git_path_contains_file(repository_path, GIT_HEAD_FILE) == false)
|
231
263
|
return 0;
|
264
|
+
|
232
265
|
/* Check files in common dir */
|
233
266
|
if (git_path_contains_dir(common_path, GIT_OBJECTS_DIR) == false)
|
234
267
|
return 0;
|
235
268
|
if (git_path_contains_dir(common_path, GIT_REFS_DIR) == false)
|
236
269
|
return 0;
|
237
270
|
|
271
|
+
/* Ensure the repo (and commondir) are valid paths */
|
272
|
+
if ((error = validate_repo_path(common_path)) < 0 ||
|
273
|
+
(separate_commondir &&
|
274
|
+
(error = validate_repo_path(repository_path)) < 0))
|
275
|
+
return error;
|
276
|
+
|
238
277
|
*out = true;
|
239
278
|
return 0;
|
240
279
|
}
|
@@ -368,7 +407,7 @@ static size_t find_ceiling_dir_offset(
|
|
368
407
|
const char *ceil, *sep;
|
369
408
|
size_t len, max_len = 0, min_len;
|
370
409
|
|
371
|
-
|
410
|
+
GIT_ASSERT_ARG(path);
|
372
411
|
|
373
412
|
min_len = (size_t)(git_path_root(path) + 1);
|
374
413
|
|
@@ -414,7 +453,8 @@ static int read_gitfile(git_buf *path_out, const char *file_path)
|
|
414
453
|
git_buf file = GIT_BUF_INIT;
|
415
454
|
size_t prefix_len = strlen(GIT_FILE_CONTENT_PREFIX);
|
416
455
|
|
417
|
-
|
456
|
+
GIT_ASSERT_ARG(path_out);
|
457
|
+
GIT_ASSERT_ARG(file_path);
|
418
458
|
|
419
459
|
if (git_futils_readbuffer(&file, file_path) < 0)
|
420
460
|
return -1;
|
@@ -901,7 +941,8 @@ int git_repository_open_from_worktree(git_repository **repo_out, git_worktree *w
|
|
901
941
|
size_t len;
|
902
942
|
int err;
|
903
943
|
|
904
|
-
|
944
|
+
GIT_ASSERT_ARG(repo_out);
|
945
|
+
GIT_ASSERT_ARG(wt);
|
905
946
|
|
906
947
|
*repo_out = NULL;
|
907
948
|
len = strlen(wt->gitlink_path);
|
@@ -945,10 +986,12 @@ int git_repository_discover(
|
|
945
986
|
const char *ceiling_dirs)
|
946
987
|
{
|
947
988
|
uint32_t flags = across_fs ? GIT_REPOSITORY_OPEN_CROSS_FS : 0;
|
989
|
+
int error;
|
948
990
|
|
949
|
-
|
991
|
+
GIT_ASSERT_ARG(start_path);
|
950
992
|
|
951
|
-
git_buf_sanitize(out)
|
993
|
+
if ((error = git_buf_sanitize(out)) < 0)
|
994
|
+
return error;
|
952
995
|
|
953
996
|
return find_repo(out, NULL, NULL, NULL, start_path, flags, ceiling_dirs);
|
954
997
|
}
|
@@ -965,7 +1008,7 @@ static int load_config(
|
|
965
1008
|
git_buf config_path = GIT_BUF_INIT;
|
966
1009
|
git_config *cfg = NULL;
|
967
1010
|
|
968
|
-
|
1011
|
+
GIT_ASSERT_ARG(out);
|
969
1012
|
|
970
1013
|
if ((error = git_config_new(&cfg)) < 0)
|
971
1014
|
return error;
|
@@ -1050,8 +1093,7 @@ int git_repository_config__weakptr(git_config **out, git_repository *repo)
|
|
1050
1093
|
if (!error) {
|
1051
1094
|
GIT_REFCOUNT_OWN(config, repo);
|
1052
1095
|
|
1053
|
-
|
1054
|
-
if (config != NULL) {
|
1096
|
+
if (git_atomic_compare_and_swap(&repo->_config, NULL, config) != NULL) {
|
1055
1097
|
GIT_REFCOUNT_OWN(config, NULL);
|
1056
1098
|
git_config_free(config);
|
1057
1099
|
}
|
@@ -1089,7 +1131,9 @@ int git_repository_config_snapshot(git_config **out, git_repository *repo)
|
|
1089
1131
|
|
1090
1132
|
int git_repository_set_config(git_repository *repo, git_config *config)
|
1091
1133
|
{
|
1092
|
-
|
1134
|
+
GIT_ASSERT_ARG(repo);
|
1135
|
+
GIT_ASSERT_ARG(config);
|
1136
|
+
|
1093
1137
|
set_config(repo, config);
|
1094
1138
|
return 0;
|
1095
1139
|
}
|
@@ -1098,9 +1142,11 @@ int git_repository_odb__weakptr(git_odb **out, git_repository *repo)
|
|
1098
1142
|
{
|
1099
1143
|
int error = 0;
|
1100
1144
|
|
1101
|
-
|
1145
|
+
GIT_ASSERT_ARG(repo);
|
1146
|
+
GIT_ASSERT_ARG(out);
|
1102
1147
|
|
1103
|
-
|
1148
|
+
*out = git_atomic_load(repo->_odb);
|
1149
|
+
if (*out == NULL) {
|
1104
1150
|
git_buf odb_path = GIT_BUF_INIT;
|
1105
1151
|
git_odb *odb;
|
1106
1152
|
|
@@ -1117,16 +1163,15 @@ int git_repository_odb__weakptr(git_odb **out, git_repository *repo)
|
|
1117
1163
|
return error;
|
1118
1164
|
}
|
1119
1165
|
|
1120
|
-
|
1121
|
-
if (odb != NULL) {
|
1166
|
+
if (git_atomic_compare_and_swap(&repo->_odb, NULL, odb) != NULL) {
|
1122
1167
|
GIT_REFCOUNT_OWN(odb, NULL);
|
1123
1168
|
git_odb_free(odb);
|
1124
1169
|
}
|
1125
1170
|
|
1126
1171
|
git_buf_dispose(&odb_path);
|
1172
|
+
*out = git_atomic_load(repo->_odb);
|
1127
1173
|
}
|
1128
1174
|
|
1129
|
-
*out = repo->_odb;
|
1130
1175
|
return error;
|
1131
1176
|
}
|
1132
1177
|
|
@@ -1141,7 +1186,9 @@ int git_repository_odb(git_odb **out, git_repository *repo)
|
|
1141
1186
|
|
1142
1187
|
int git_repository_set_odb(git_repository *repo, git_odb *odb)
|
1143
1188
|
{
|
1144
|
-
|
1189
|
+
GIT_ASSERT_ARG(repo);
|
1190
|
+
GIT_ASSERT_ARG(odb);
|
1191
|
+
|
1145
1192
|
set_odb(repo, odb);
|
1146
1193
|
return 0;
|
1147
1194
|
}
|
@@ -1150,7 +1197,8 @@ int git_repository_refdb__weakptr(git_refdb **out, git_repository *repo)
|
|
1150
1197
|
{
|
1151
1198
|
int error = 0;
|
1152
1199
|
|
1153
|
-
|
1200
|
+
GIT_ASSERT_ARG(out);
|
1201
|
+
GIT_ASSERT_ARG(repo);
|
1154
1202
|
|
1155
1203
|
if (repo->_refdb == NULL) {
|
1156
1204
|
git_refdb *refdb;
|
@@ -1159,8 +1207,7 @@ int git_repository_refdb__weakptr(git_refdb **out, git_repository *repo)
|
|
1159
1207
|
if (!error) {
|
1160
1208
|
GIT_REFCOUNT_OWN(refdb, repo);
|
1161
1209
|
|
1162
|
-
|
1163
|
-
if (refdb != NULL) {
|
1210
|
+
if (git_atomic_compare_and_swap(&repo->_refdb, NULL, refdb) != NULL) {
|
1164
1211
|
GIT_REFCOUNT_OWN(refdb, NULL);
|
1165
1212
|
git_refdb_free(refdb);
|
1166
1213
|
}
|
@@ -1182,7 +1229,9 @@ int git_repository_refdb(git_refdb **out, git_repository *repo)
|
|
1182
1229
|
|
1183
1230
|
int git_repository_set_refdb(git_repository *repo, git_refdb *refdb)
|
1184
1231
|
{
|
1185
|
-
|
1232
|
+
GIT_ASSERT_ARG(repo);
|
1233
|
+
GIT_ASSERT_ARG(refdb);
|
1234
|
+
|
1186
1235
|
set_refdb(repo, refdb);
|
1187
1236
|
return 0;
|
1188
1237
|
}
|
@@ -1191,7 +1240,8 @@ int git_repository_index__weakptr(git_index **out, git_repository *repo)
|
|
1191
1240
|
{
|
1192
1241
|
int error = 0;
|
1193
1242
|
|
1194
|
-
|
1243
|
+
GIT_ASSERT_ARG(out);
|
1244
|
+
GIT_ASSERT_ARG(repo);
|
1195
1245
|
|
1196
1246
|
if (repo->_index == NULL) {
|
1197
1247
|
git_buf index_path = GIT_BUF_INIT;
|
@@ -1204,8 +1254,7 @@ int git_repository_index__weakptr(git_index **out, git_repository *repo)
|
|
1204
1254
|
if (!error) {
|
1205
1255
|
GIT_REFCOUNT_OWN(index, repo);
|
1206
1256
|
|
1207
|
-
|
1208
|
-
if (index != NULL) {
|
1257
|
+
if (git_atomic_compare_and_swap(&repo->_index, NULL, index) != NULL) {
|
1209
1258
|
GIT_REFCOUNT_OWN(index, NULL);
|
1210
1259
|
git_index_free(index);
|
1211
1260
|
}
|
@@ -1232,7 +1281,7 @@ int git_repository_index(git_index **out, git_repository *repo)
|
|
1232
1281
|
|
1233
1282
|
int git_repository_set_index(git_repository *repo, git_index *index)
|
1234
1283
|
{
|
1235
|
-
|
1284
|
+
GIT_ASSERT_ARG(repo);
|
1236
1285
|
set_index(repo, index);
|
1237
1286
|
return 0;
|
1238
1287
|
}
|
@@ -2131,7 +2180,9 @@ int git_repository_init_ext(
|
|
2131
2180
|
bool is_valid;
|
2132
2181
|
int error;
|
2133
2182
|
|
2134
|
-
|
2183
|
+
GIT_ASSERT_ARG(out);
|
2184
|
+
GIT_ASSERT_ARG(given_repo);
|
2185
|
+
GIT_ASSERT_ARG(opts);
|
2135
2186
|
|
2136
2187
|
GIT_ERROR_CHECK_VERSION(opts, GIT_REPOSITORY_INIT_OPTIONS_VERSION, "git_repository_init_options");
|
2137
2188
|
|
@@ -2207,7 +2258,8 @@ int git_repository_head_detached_for_worktree(git_repository *repo, const char *
|
|
2207
2258
|
git_reference *ref = NULL;
|
2208
2259
|
int error;
|
2209
2260
|
|
2210
|
-
|
2261
|
+
GIT_ASSERT_ARG(repo);
|
2262
|
+
GIT_ASSERT_ARG(name);
|
2211
2263
|
|
2212
2264
|
if ((error = git_repository_head_for_worktree(&ref, repo, name)) < 0)
|
2213
2265
|
goto out;
|
@@ -2224,7 +2276,7 @@ int git_repository_head(git_reference **head_out, git_repository *repo)
|
|
2224
2276
|
git_reference *head;
|
2225
2277
|
int error;
|
2226
2278
|
|
2227
|
-
|
2279
|
+
GIT_ASSERT_ARG(head_out);
|
2228
2280
|
|
2229
2281
|
if ((error = git_reference_lookup(&head, repo, GIT_HEAD_FILE)) < 0)
|
2230
2282
|
return error;
|
@@ -2247,7 +2299,9 @@ int git_repository_head_for_worktree(git_reference **out, git_repository *repo,
|
|
2247
2299
|
git_reference *head = NULL;
|
2248
2300
|
int error;
|
2249
2301
|
|
2250
|
-
|
2302
|
+
GIT_ASSERT_ARG(out);
|
2303
|
+
GIT_ASSERT_ARG(repo);
|
2304
|
+
GIT_ASSERT_ARG(name);
|
2251
2305
|
|
2252
2306
|
*out = NULL;
|
2253
2307
|
|
@@ -2281,6 +2335,12 @@ int git_repository_foreach_worktree(git_repository *repo,
|
|
2281
2335
|
int error;
|
2282
2336
|
size_t i;
|
2283
2337
|
|
2338
|
+
/* apply operation to repository supplied when commondir is empty, implying there's
|
2339
|
+
* no linked worktrees to iterate, which can occur when using custom odb/refdb
|
2340
|
+
*/
|
2341
|
+
if (!repo->commondir)
|
2342
|
+
return cb(repo, payload);
|
2343
|
+
|
2284
2344
|
if ((error = git_repository_open(&worktree_repo, repo->commondir)) < 0 ||
|
2285
2345
|
(error = cb(worktree_repo, payload) != 0))
|
2286
2346
|
goto out;
|
@@ -2358,7 +2418,7 @@ int git_repository_initialbranch(git_buf *out, git_repository *repo)
|
|
2358
2418
|
git_config *config;
|
2359
2419
|
git_config_entry *entry = NULL;
|
2360
2420
|
const char *branch;
|
2361
|
-
int error;
|
2421
|
+
int valid, error;
|
2362
2422
|
|
2363
2423
|
if ((error = git_repository_config__weakptr(&config, repo)) < 0)
|
2364
2424
|
return error;
|
@@ -2375,10 +2435,11 @@ int git_repository_initialbranch(git_buf *out, git_repository *repo)
|
|
2375
2435
|
}
|
2376
2436
|
|
2377
2437
|
if ((error = git_buf_puts(out, GIT_REFS_HEADS_DIR)) < 0 ||
|
2378
|
-
(error = git_buf_puts(out, branch)) < 0
|
2438
|
+
(error = git_buf_puts(out, branch)) < 0 ||
|
2439
|
+
(error = git_reference_name_is_valid(&valid, out->ptr)) < 0)
|
2379
2440
|
goto done;
|
2380
2441
|
|
2381
|
-
if (!
|
2442
|
+
if (!valid) {
|
2382
2443
|
git_error_set(GIT_ERROR_INVALID, "the value of init.defaultBranch is not a valid branch name");
|
2383
2444
|
error = -1;
|
2384
2445
|
}
|
@@ -2459,13 +2520,13 @@ int git_repository_item_path(git_buf *out, const git_repository *repo, git_repos
|
|
2459
2520
|
|
2460
2521
|
const char *git_repository_path(const git_repository *repo)
|
2461
2522
|
{
|
2462
|
-
|
2523
|
+
GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
|
2463
2524
|
return repo->gitdir;
|
2464
2525
|
}
|
2465
2526
|
|
2466
2527
|
const char *git_repository_workdir(const git_repository *repo)
|
2467
2528
|
{
|
2468
|
-
|
2529
|
+
GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
|
2469
2530
|
|
2470
2531
|
if (repo->is_bare)
|
2471
2532
|
return NULL;
|
@@ -2473,9 +2534,25 @@ const char *git_repository_workdir(const git_repository *repo)
|
|
2473
2534
|
return repo->workdir;
|
2474
2535
|
}
|
2475
2536
|
|
2537
|
+
int git_repository_workdir_path(
|
2538
|
+
git_buf *out, git_repository *repo, const char *path)
|
2539
|
+
{
|
2540
|
+
int error;
|
2541
|
+
|
2542
|
+
if (!repo->workdir) {
|
2543
|
+
git_error_set(GIT_ERROR_REPOSITORY, "repository has no working directory");
|
2544
|
+
return GIT_EBAREREPO;
|
2545
|
+
}
|
2546
|
+
|
2547
|
+
if (!(error = git_buf_joinpath(out, repo->workdir, path)))
|
2548
|
+
error = git_path_validate_workdir_buf(repo, out);
|
2549
|
+
|
2550
|
+
return error;
|
2551
|
+
}
|
2552
|
+
|
2476
2553
|
const char *git_repository_commondir(const git_repository *repo)
|
2477
2554
|
{
|
2478
|
-
|
2555
|
+
GIT_ASSERT_ARG_WITH_RETVAL(repo, NULL);
|
2479
2556
|
return repo->commondir;
|
2480
2557
|
}
|
2481
2558
|
|
@@ -2485,7 +2562,8 @@ int git_repository_set_workdir(
|
|
2485
2562
|
int error = 0;
|
2486
2563
|
git_buf path = GIT_BUF_INIT;
|
2487
2564
|
|
2488
|
-
|
2565
|
+
GIT_ASSERT_ARG(repo);
|
2566
|
+
GIT_ASSERT_ARG(workdir);
|
2489
2567
|
|
2490
2568
|
if (git_path_prettify_dir(&path, workdir, NULL) < 0)
|
2491
2569
|
return -1;
|
@@ -2525,13 +2603,13 @@ int git_repository_set_workdir(
|
|
2525
2603
|
|
2526
2604
|
int git_repository_is_bare(const git_repository *repo)
|
2527
2605
|
{
|
2528
|
-
|
2606
|
+
GIT_ASSERT_ARG(repo);
|
2529
2607
|
return repo->is_bare;
|
2530
2608
|
}
|
2531
2609
|
|
2532
2610
|
int git_repository_is_worktree(const git_repository *repo)
|
2533
2611
|
{
|
2534
|
-
|
2612
|
+
GIT_ASSERT_ARG(repo);
|
2535
2613
|
return repo->is_worktree;
|
2536
2614
|
}
|
2537
2615
|
|
@@ -2540,7 +2618,7 @@ int git_repository_set_bare(git_repository *repo)
|
|
2540
2618
|
int error;
|
2541
2619
|
git_config *config;
|
2542
2620
|
|
2543
|
-
|
2621
|
+
GIT_ASSERT_ARG(repo);
|
2544
2622
|
|
2545
2623
|
if (repo->is_bare)
|
2546
2624
|
return 0;
|
@@ -2608,7 +2686,8 @@ int git_repository_message(git_buf *out, git_repository *repo)
|
|
2608
2686
|
struct stat st;
|
2609
2687
|
int error;
|
2610
2688
|
|
2611
|
-
git_buf_sanitize(out)
|
2689
|
+
if ((error = git_buf_sanitize(out)) < 0)
|
2690
|
+
return error;
|
2612
2691
|
|
2613
2692
|
if (git_buf_joinpath(&path, repo->gitdir, GIT_MERGE_MSG_FILE) < 0)
|
2614
2693
|
return -1;
|
@@ -2653,16 +2732,19 @@ int git_repository_hashfile(
|
|
2653
2732
|
uint64_t len;
|
2654
2733
|
git_buf full_path = GIT_BUF_INIT;
|
2655
2734
|
|
2656
|
-
|
2735
|
+
/* as_path can be NULL */
|
2736
|
+
GIT_ASSERT_ARG(out);
|
2737
|
+
GIT_ASSERT_ARG(path);
|
2738
|
+
GIT_ASSERT_ARG(repo);
|
2657
2739
|
|
2658
2740
|
/* At some point, it would be nice if repo could be NULL to just
|
2659
2741
|
* apply filter rules defined in system and global files, but for
|
2660
2742
|
* now that is not possible because git_filters_load() needs it.
|
2661
2743
|
*/
|
2662
2744
|
|
2663
|
-
error = git_path_join_unrooted(
|
2664
|
-
&full_path, path, git_repository_workdir(repo), NULL)
|
2665
|
-
|
2745
|
+
if ((error = git_path_join_unrooted(
|
2746
|
+
&full_path, path, git_repository_workdir(repo), NULL)) < 0 ||
|
2747
|
+
(error = git_path_validate_workdir_buf(repo, &full_path)) < 0)
|
2666
2748
|
return error;
|
2667
2749
|
|
2668
2750
|
if (!as_path)
|
@@ -2738,7 +2820,8 @@ static int detach(git_repository *repo, const git_oid *id, const char *new)
|
|
2738
2820
|
git_object *object = NULL, *peeled = NULL;
|
2739
2821
|
git_reference *new_head = NULL, *current = NULL;
|
2740
2822
|
|
2741
|
-
|
2823
|
+
GIT_ASSERT_ARG(repo);
|
2824
|
+
GIT_ASSERT_ARG(id);
|
2742
2825
|
|
2743
2826
|
if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
|
2744
2827
|
return error;
|
@@ -2774,7 +2857,8 @@ int git_repository_set_head(
|
|
2774
2857
|
git_buf log_message = GIT_BUF_INIT;
|
2775
2858
|
int error;
|
2776
2859
|
|
2777
|
-
|
2860
|
+
GIT_ASSERT_ARG(repo);
|
2861
|
+
GIT_ASSERT_ARG(refname);
|
2778
2862
|
|
2779
2863
|
if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
|
2780
2864
|
return error;
|
@@ -2826,7 +2910,8 @@ int git_repository_set_head_detached_from_annotated(
|
|
2826
2910
|
git_repository *repo,
|
2827
2911
|
const git_annotated_commit *commitish)
|
2828
2912
|
{
|
2829
|
-
|
2913
|
+
GIT_ASSERT_ARG(repo);
|
2914
|
+
GIT_ASSERT_ARG(commitish);
|
2830
2915
|
|
2831
2916
|
return detach(repo, git_annotated_commit_id(commitish), commitish->description);
|
2832
2917
|
}
|
@@ -2838,7 +2923,7 @@ int git_repository_detach_head(git_repository* repo)
|
|
2838
2923
|
git_buf log_message = GIT_BUF_INIT;
|
2839
2924
|
int error;
|
2840
2925
|
|
2841
|
-
|
2926
|
+
GIT_ASSERT_ARG(repo);
|
2842
2927
|
|
2843
2928
|
if ((error = git_reference_lookup(¤t, repo, GIT_HEAD_FILE)) < 0)
|
2844
2929
|
return error;
|
@@ -2873,7 +2958,7 @@ int git_repository_state(git_repository *repo)
|
|
2873
2958
|
git_buf repo_path = GIT_BUF_INIT;
|
2874
2959
|
int state = GIT_REPOSITORY_STATE_NONE;
|
2875
2960
|
|
2876
|
-
|
2961
|
+
GIT_ASSERT_ARG(repo);
|
2877
2962
|
|
2878
2963
|
if (git_buf_puts(&repo_path, repo->gitdir) < 0)
|
2879
2964
|
return -1;
|
@@ -2950,7 +3035,7 @@ static const char *state_files[] = {
|
|
2950
3035
|
|
2951
3036
|
int git_repository_state_cleanup(git_repository *repo)
|
2952
3037
|
{
|
2953
|
-
|
3038
|
+
GIT_ASSERT_ARG(repo);
|
2954
3039
|
|
2955
3040
|
return git_repository__cleanup_files(repo, state_files, ARRAY_SIZE(state_files));
|
2956
3041
|
}
|
@@ -3016,8 +3101,8 @@ int git_repository_set_ident(git_repository *repo, const char *name, const char
|
|
3016
3101
|
GIT_ERROR_CHECK_ALLOC(tmp_email);
|
3017
3102
|
}
|
3018
3103
|
|
3019
|
-
tmp_name =
|
3020
|
-
tmp_email =
|
3104
|
+
tmp_name = git_atomic_swap(repo->ident_name, tmp_name);
|
3105
|
+
tmp_email = git_atomic_swap(repo->ident_email, tmp_email);
|
3021
3106
|
|
3022
3107
|
git__free(tmp_name);
|
3023
3108
|
git__free(tmp_email);
|
@@ -3027,28 +3112,16 @@ int git_repository_set_ident(git_repository *repo, const char *name, const char
|
|
3027
3112
|
|
3028
3113
|
int git_repository_submodule_cache_all(git_repository *repo)
|
3029
3114
|
{
|
3030
|
-
|
3031
|
-
|
3032
|
-
assert(repo);
|
3033
|
-
|
3034
|
-
if ((error = git_strmap_new(&repo->submodule_cache)))
|
3035
|
-
return error;
|
3036
|
-
|
3037
|
-
error = git_submodule__map(repo, repo->submodule_cache);
|
3038
|
-
return error;
|
3115
|
+
GIT_ASSERT_ARG(repo);
|
3116
|
+
return git_submodule_cache_init(&repo->submodule_cache, repo);
|
3039
3117
|
}
|
3040
3118
|
|
3041
3119
|
int git_repository_submodule_cache_clear(git_repository *repo)
|
3042
3120
|
{
|
3043
|
-
|
3044
|
-
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3048
|
-
|
3049
|
-
git_submodule_free(sm);
|
3050
|
-
});
|
3051
|
-
git_strmap_free(repo->submodule_cache);
|
3052
|
-
repo->submodule_cache = 0;
|
3053
|
-
return 0;
|
3121
|
+
int error = 0;
|
3122
|
+
GIT_ASSERT_ARG(repo);
|
3123
|
+
|
3124
|
+
error = git_submodule_cache_free(repo->submodule_cache);
|
3125
|
+
repo->submodule_cache = NULL;
|
3126
|
+
return error;
|
3054
3127
|
}
|