rugged 0.24.6.1 → 0.25.0b1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rugged/rugged_repo.c +44 -36
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +10 -21
- data/vendor/libgit2/include/git2/checkout.h +0 -7
- data/vendor/libgit2/include/git2/commit.h +46 -0
- data/vendor/libgit2/include/git2/common.h +1 -16
- data/vendor/libgit2/include/git2/odb.h +47 -1
- data/vendor/libgit2/include/git2/version.h +2 -2
- data/vendor/libgit2/src/array.h +0 -40
- data/vendor/libgit2/src/blame.c +3 -8
- data/vendor/libgit2/src/blame_git.c +9 -20
- data/vendor/libgit2/src/checkout.c +5 -13
- data/vendor/libgit2/src/commit.c +132 -52
- data/vendor/libgit2/src/common.h +1 -1
- data/vendor/libgit2/src/config_cache.c +1 -2
- data/vendor/libgit2/src/config_file.c +20 -14
- data/vendor/libgit2/src/delta-apply.c +5 -36
- data/vendor/libgit2/src/delta-apply.h +0 -12
- data/vendor/libgit2/src/describe.c +1 -2
- data/vendor/libgit2/src/diff_tform.c +3 -5
- data/vendor/libgit2/src/filebuf.c +1 -6
- data/vendor/libgit2/src/global.c +8 -28
- data/vendor/libgit2/src/global.h +0 -1
- data/vendor/libgit2/src/ignore.c +19 -56
- data/vendor/libgit2/src/index.c +8 -27
- data/vendor/libgit2/src/indexer.c +7 -11
- data/vendor/libgit2/src/iterator.c +2 -2
- data/vendor/libgit2/src/merge.c +0 -1
- data/vendor/libgit2/src/mwindow.c +19 -8
- data/vendor/libgit2/src/mwindow.h +2 -1
- data/vendor/libgit2/src/object.c +6 -3
- data/vendor/libgit2/src/odb.c +188 -48
- data/vendor/libgit2/src/odb_loose.c +1 -1
- data/vendor/libgit2/src/odb_pack.c +3 -0
- data/vendor/libgit2/src/openssl_stream.c +27 -60
- data/vendor/libgit2/src/openssl_stream.h +0 -106
- data/vendor/libgit2/src/pack-objects.c +2 -4
- data/vendor/libgit2/src/pack.c +9 -5
- data/vendor/libgit2/src/posix.c +0 -7
- data/vendor/libgit2/src/posix.h +0 -1
- data/vendor/libgit2/src/push.c +6 -6
- data/vendor/libgit2/src/refdb_fs.c +0 -1
- data/vendor/libgit2/src/refs.c +0 -3
- data/vendor/libgit2/src/refspec.c +2 -4
- data/vendor/libgit2/src/remote.c +5 -15
- data/vendor/libgit2/src/repository.c +21 -29
- data/vendor/libgit2/src/settings.c +1 -23
- data/vendor/libgit2/src/stransport_stream.c +9 -15
- data/vendor/libgit2/src/submodule.c +2 -3
- data/vendor/libgit2/src/sysdir.c +47 -41
- data/vendor/libgit2/src/sysdir.h +5 -0
- data/vendor/libgit2/src/tag.c +2 -8
- data/vendor/libgit2/src/thread-utils.h +51 -5
- data/vendor/libgit2/src/transports/http.c +3 -3
- data/vendor/libgit2/src/transports/smart_pkt.c +4 -13
- data/vendor/libgit2/src/transports/smart_protocol.c +17 -61
- data/vendor/libgit2/src/tree.c +100 -83
- data/vendor/libgit2/src/tree.h +5 -4
- data/vendor/libgit2/src/unix/map.c +0 -5
- data/vendor/libgit2/src/util.c +3 -3
- data/vendor/libgit2/src/win32/map.c +5 -24
- data/vendor/libgit2/src/win32/precompiled.h +1 -1
- data/vendor/libgit2/src/win32/{thread.c → pthread.c} +80 -50
- data/vendor/libgit2/src/win32/pthread.h +92 -0
- data/vendor/libgit2/src/xdiff/xprepare.c +1 -2
- metadata +7 -8
- data/vendor/libgit2/src/unix/pthread.h +0 -54
- data/vendor/libgit2/src/win32/thread.h +0 -62
data/vendor/libgit2/src/remote.c
CHANGED
@@ -1414,11 +1414,7 @@ static int update_tips_for_spec(
|
|
1414
1414
|
/* In autotag mode, don't overwrite any locally-existing tags */
|
1415
1415
|
error = git_reference_create(&ref, remote->repo, refname.ptr, &head->oid, !autotag,
|
1416
1416
|
log_message);
|
1417
|
-
|
1418
|
-
if (error == GIT_EEXISTS)
|
1419
|
-
continue;
|
1420
|
-
|
1421
|
-
if (error < 0)
|
1417
|
+
if (error < 0 && error != GIT_EEXISTS)
|
1422
1418
|
goto on_error;
|
1423
1419
|
|
1424
1420
|
git_reference_free(ref);
|
@@ -2228,21 +2224,15 @@ static int remove_branch_config_related_entries(
|
|
2228
2224
|
if (git_buf_printf(&buf, "branch.%.*s.merge", (int)branch_len, branch) < 0)
|
2229
2225
|
break;
|
2230
2226
|
|
2231
|
-
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0)
|
2232
|
-
|
2233
|
-
break;
|
2234
|
-
giterr_clear();
|
2235
|
-
}
|
2227
|
+
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0)
|
2228
|
+
break;
|
2236
2229
|
|
2237
2230
|
git_buf_clear(&buf);
|
2238
2231
|
if (git_buf_printf(&buf, "branch.%.*s.remote", (int)branch_len, branch) < 0)
|
2239
2232
|
break;
|
2240
2233
|
|
2241
|
-
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0)
|
2242
|
-
|
2243
|
-
break;
|
2244
|
-
giterr_clear();
|
2245
|
-
}
|
2234
|
+
if ((error = git_config_delete_entry(config, git_buf_cstr(&buf))) < 0)
|
2235
|
+
break;
|
2246
2236
|
}
|
2247
2237
|
|
2248
2238
|
if (error == GIT_ITEROVER)
|
@@ -264,7 +264,7 @@ cleanup:
|
|
264
264
|
* the stack could remove directories name limits, but at the cost of doing
|
265
265
|
* repeated malloc/frees inside the loop below, so let's not do it now.
|
266
266
|
*/
|
267
|
-
static
|
267
|
+
static int find_ceiling_dir_offset(
|
268
268
|
const char *path,
|
269
269
|
const char *ceiling_directories)
|
270
270
|
{
|
@@ -278,7 +278,7 @@ static size_t find_ceiling_dir_offset(
|
|
278
278
|
min_len = (size_t)(git_path_root(path) + 1);
|
279
279
|
|
280
280
|
if (ceiling_directories == NULL || min_len == 0)
|
281
|
-
return min_len;
|
281
|
+
return (int)min_len;
|
282
282
|
|
283
283
|
for (sep = ceil = ceiling_directories; *sep; ceil = sep + 1) {
|
284
284
|
for (sep = ceil; *sep && *sep != GIT_PATH_LIST_SEPARATOR; sep++);
|
@@ -305,7 +305,7 @@ static size_t find_ceiling_dir_offset(
|
|
305
305
|
}
|
306
306
|
}
|
307
307
|
|
308
|
-
return (max_len <= min_len ? min_len : max_len);
|
308
|
+
return (int)(max_len <= min_len ? min_len : max_len);
|
309
309
|
}
|
310
310
|
|
311
311
|
/*
|
@@ -359,36 +359,21 @@ static int find_repo(
|
|
359
359
|
git_buf path = GIT_BUF_INIT;
|
360
360
|
struct stat st;
|
361
361
|
dev_t initial_device = 0;
|
362
|
-
|
363
|
-
|
364
|
-
size_t ceiling_offset = 0;
|
362
|
+
bool try_with_dot_git = ((flags & GIT_REPOSITORY_OPEN_BARE) != 0);
|
363
|
+
int ceiling_offset;
|
365
364
|
|
366
365
|
git_buf_free(repo_path);
|
367
366
|
|
368
367
|
if ((error = git_path_prettify(&path, start_path, NULL)) < 0)
|
369
368
|
return error;
|
370
369
|
|
371
|
-
|
372
|
-
* /a/b/c/.git, /a/b/c, /a/b/.git, /a/b, /a/.git, /a
|
373
|
-
* With GIT_REPOSITORY_OPEN_BARE, we assume we started with /a/b/c.git
|
374
|
-
* and don't append .git the first time through.
|
375
|
-
* min_iterations indicates the number of iterations left before going
|
376
|
-
* further counts as a search. */
|
377
|
-
if (flags & GIT_REPOSITORY_OPEN_BARE) {
|
378
|
-
in_dot_git = true;
|
379
|
-
min_iterations = 1;
|
380
|
-
} else {
|
381
|
-
in_dot_git = false;
|
382
|
-
min_iterations = 2;
|
383
|
-
}
|
370
|
+
ceiling_offset = find_ceiling_dir_offset(path.ptr, ceiling_dirs);
|
384
371
|
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
if ((error = git_buf_joinpath(&path, path.ptr, DOT_GIT)) < 0)
|
389
|
-
break;
|
390
|
-
in_dot_git = !in_dot_git;
|
372
|
+
if (!try_with_dot_git &&
|
373
|
+
(error = git_buf_joinpath(&path, path.ptr, DOT_GIT)) < 0)
|
374
|
+
return error;
|
391
375
|
|
376
|
+
while (!error && !git_buf_len(repo_path)) {
|
392
377
|
if (p_stat(path.ptr, &st) == 0) {
|
393
378
|
/* check that we have not crossed device boundaries */
|
394
379
|
if (initial_device == 0)
|
@@ -429,10 +414,17 @@ static int find_repo(
|
|
429
414
|
break;
|
430
415
|
}
|
431
416
|
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
417
|
+
if (try_with_dot_git) {
|
418
|
+
/* if we tried original dir with and without .git AND either hit
|
419
|
+
* directory ceiling or NO_SEARCH was requested, then be done.
|
420
|
+
*/
|
421
|
+
if (path.ptr[ceiling_offset] == '\0' ||
|
422
|
+
(flags & GIT_REPOSITORY_OPEN_NO_SEARCH) != 0)
|
423
|
+
break;
|
424
|
+
/* otherwise look first for .git item */
|
425
|
+
error = git_buf_joinpath(&path, path.ptr, DOT_GIT);
|
426
|
+
}
|
427
|
+
try_with_dot_git = !try_with_dot_git;
|
436
428
|
}
|
437
429
|
|
438
430
|
if (!error && parent_path && !(flags & GIT_REPOSITORY_OPEN_BARE)) {
|
@@ -71,18 +71,12 @@ static int config_level_to_sysdir(int config_level)
|
|
71
71
|
}
|
72
72
|
|
73
73
|
extern char *git__user_agent;
|
74
|
-
extern char *git__ssl_ciphers;
|
75
74
|
|
76
75
|
const char *git_libgit2__user_agent()
|
77
76
|
{
|
78
77
|
return git__user_agent;
|
79
78
|
}
|
80
79
|
|
81
|
-
const char *git_libgit2__ssl_ciphers()
|
82
|
-
{
|
83
|
-
return git__ssl_ciphers;
|
84
|
-
}
|
85
|
-
|
86
80
|
int git_libgit2_opts(int key, ...)
|
87
81
|
{
|
88
82
|
int error = 0;
|
@@ -175,7 +169,7 @@ int git_libgit2_opts(int key, ...)
|
|
175
169
|
}
|
176
170
|
}
|
177
171
|
#else
|
178
|
-
giterr_set(GITERR_NET, "
|
172
|
+
giterr_set(GITERR_NET, "Cannot set certificate locations: OpenSSL is not enabled");
|
179
173
|
error = -1;
|
180
174
|
#endif
|
181
175
|
break;
|
@@ -193,22 +187,6 @@ int git_libgit2_opts(int key, ...)
|
|
193
187
|
git_object__strict_input_validation = (va_arg(ap, int) != 0);
|
194
188
|
break;
|
195
189
|
|
196
|
-
case GIT_OPT_SET_SSL_CIPHERS:
|
197
|
-
#ifdef GIT_OPENSSL
|
198
|
-
{
|
199
|
-
git__free(git__ssl_ciphers);
|
200
|
-
git__ssl_ciphers = git__strdup(va_arg(ap, const char *));
|
201
|
-
if (!git__ssl_ciphers) {
|
202
|
-
giterr_set_oom();
|
203
|
-
error = -1;
|
204
|
-
}
|
205
|
-
}
|
206
|
-
#else
|
207
|
-
giterr_set(GITERR_NET, "cannot set custom ciphers: OpenSSL is not enabled");
|
208
|
-
error = -1;
|
209
|
-
#endif
|
210
|
-
break;
|
211
|
-
|
212
190
|
default:
|
213
191
|
giterr_set(GITERR_INVALID, "invalid option key");
|
214
192
|
error = -1;
|
@@ -16,7 +16,7 @@
|
|
16
16
|
#include "socket_stream.h"
|
17
17
|
#include "curl_stream.h"
|
18
18
|
|
19
|
-
|
19
|
+
int stransport_error(OSStatus ret)
|
20
20
|
{
|
21
21
|
CFStringRef message;
|
22
22
|
|
@@ -33,7 +33,6 @@ static int stransport_error(OSStatus ret)
|
|
33
33
|
CFRelease(message);
|
34
34
|
#else
|
35
35
|
giterr_set(GITERR_NET, "SecureTransport error: OSStatus %d", (unsigned int)ret);
|
36
|
-
GIT_UNUSED(message);
|
37
36
|
#endif
|
38
37
|
|
39
38
|
return -1;
|
@@ -47,7 +46,7 @@ typedef struct {
|
|
47
46
|
git_cert_x509 cert_info;
|
48
47
|
} stransport_stream;
|
49
48
|
|
50
|
-
|
49
|
+
int stransport_connect(git_stream *stream)
|
51
50
|
{
|
52
51
|
stransport_stream *st = (stransport_stream *) stream;
|
53
52
|
int error;
|
@@ -67,9 +66,6 @@ static int stransport_connect(git_stream *stream)
|
|
67
66
|
if ((ret = SSLCopyPeerTrust(st->ctx, &trust)) != noErr)
|
68
67
|
goto on_error;
|
69
68
|
|
70
|
-
if (!trust)
|
71
|
-
return GIT_ECERTIFICATE;
|
72
|
-
|
73
69
|
if ((ret = SecTrustEvaluate(trust, &sec_res)) != noErr)
|
74
70
|
goto on_error;
|
75
71
|
|
@@ -93,7 +89,7 @@ on_error:
|
|
93
89
|
return stransport_error(ret);
|
94
90
|
}
|
95
91
|
|
96
|
-
|
92
|
+
int stransport_certificate(git_cert **out, git_stream *stream)
|
97
93
|
{
|
98
94
|
stransport_stream *st = (stransport_stream *) stream;
|
99
95
|
SecTrustRef trust = NULL;
|
@@ -120,7 +116,7 @@ static int stransport_certificate(git_cert **out, git_stream *stream)
|
|
120
116
|
return 0;
|
121
117
|
}
|
122
118
|
|
123
|
-
|
119
|
+
int stransport_set_proxy(git_stream *stream, const char *proxy)
|
124
120
|
{
|
125
121
|
stransport_stream *st = (stransport_stream *) stream;
|
126
122
|
|
@@ -150,7 +146,7 @@ static OSStatus write_cb(SSLConnectionRef conn, const void *data, size_t *len)
|
|
150
146
|
return noErr;
|
151
147
|
}
|
152
148
|
|
153
|
-
|
149
|
+
ssize_t stransport_write(git_stream *stream, const char *data, size_t len, int flags)
|
154
150
|
{
|
155
151
|
stransport_stream *st = (stransport_stream *) stream;
|
156
152
|
size_t data_len, processed;
|
@@ -199,7 +195,7 @@ static OSStatus read_cb(SSLConnectionRef conn, void *data, size_t *len)
|
|
199
195
|
return error;
|
200
196
|
}
|
201
197
|
|
202
|
-
|
198
|
+
ssize_t stransport_read(git_stream *stream, void *data, size_t len)
|
203
199
|
{
|
204
200
|
stransport_stream *st = (stransport_stream *) stream;
|
205
201
|
size_t processed;
|
@@ -211,7 +207,7 @@ static ssize_t stransport_read(git_stream *stream, void *data, size_t len)
|
|
211
207
|
return processed;
|
212
208
|
}
|
213
209
|
|
214
|
-
|
210
|
+
int stransport_close(git_stream *stream)
|
215
211
|
{
|
216
212
|
stransport_stream *st = (stransport_stream *) stream;
|
217
213
|
OSStatus ret;
|
@@ -223,7 +219,7 @@ static int stransport_close(git_stream *stream)
|
|
223
219
|
return git_stream_close(st->io);
|
224
220
|
}
|
225
221
|
|
226
|
-
|
222
|
+
void stransport_free(git_stream *stream)
|
227
223
|
{
|
228
224
|
stransport_stream *st = (stransport_stream *) stream;
|
229
225
|
|
@@ -259,7 +255,6 @@ int git_stransport_stream_new(git_stream **out, const char *host, const char *po
|
|
259
255
|
st->ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
|
260
256
|
if (!st->ctx) {
|
261
257
|
giterr_set(GITERR_NET, "failed to create SSL context");
|
262
|
-
git__free(st);
|
263
258
|
return -1;
|
264
259
|
}
|
265
260
|
|
@@ -269,8 +264,7 @@ int git_stransport_stream_new(git_stream **out, const char *host, const char *po
|
|
269
264
|
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol1)) != noErr ||
|
270
265
|
(ret = SSLSetProtocolVersionMax(st->ctx, kTLSProtocol12)) != noErr ||
|
271
266
|
(ret = SSLSetPeerDomainName(st->ctx, host, strlen(host))) != noErr) {
|
272
|
-
|
273
|
-
git__free(st);
|
267
|
+
git_stream_free((git_stream *)st);
|
274
268
|
return stransport_error(ret);
|
275
269
|
}
|
276
270
|
|
@@ -80,8 +80,7 @@ static kh_inline int str_equal_no_trailing_slash(const char *a, const char *b)
|
|
80
80
|
if (blen > 0 && b[blen - 1] == '/')
|
81
81
|
blen--;
|
82
82
|
|
83
|
-
return (alen ==
|
84
|
-
(alen == blen && strncmp(a, b, alen) == 0);
|
83
|
+
return (alen == blen && strncmp(a, b, alen) == 0);
|
85
84
|
}
|
86
85
|
|
87
86
|
__KHASH_IMPL(
|
@@ -1417,7 +1416,7 @@ static int submodule_update_head(git_submodule *submodule)
|
|
1417
1416
|
git_tree_entry_bypath(&te, head, submodule->path) < 0)
|
1418
1417
|
giterr_clear();
|
1419
1418
|
else
|
1420
|
-
submodule_update_from_head_data(submodule, te->attr,
|
1419
|
+
submodule_update_from_head_data(submodule, te->attr, &te->oid);
|
1421
1420
|
|
1422
1421
|
git_tree_entry_free(te);
|
1423
1422
|
git_tree_free(head);
|
data/vendor/libgit2/src/sysdir.c
CHANGED
@@ -83,43 +83,45 @@ static int git_sysdir_guess_template_dirs(git_buf *out)
|
|
83
83
|
#endif
|
84
84
|
}
|
85
85
|
|
86
|
-
|
87
|
-
git_buf buf;
|
88
|
-
int (*guess)(git_buf *out);
|
89
|
-
};
|
86
|
+
typedef int (*git_sysdir_guess_cb)(git_buf *out);
|
90
87
|
|
91
|
-
static
|
92
|
-
{ GIT_BUF_INIT,
|
93
|
-
{ GIT_BUF_INIT, git_sysdir_guess_global_dirs },
|
94
|
-
{ GIT_BUF_INIT, git_sysdir_guess_xdg_dirs },
|
95
|
-
{ GIT_BUF_INIT, git_sysdir_guess_programdata_dirs },
|
96
|
-
{ GIT_BUF_INIT, git_sysdir_guess_template_dirs },
|
97
|
-
};
|
88
|
+
static git_buf git_sysdir__dirs[GIT_SYSDIR__MAX] =
|
89
|
+
{ GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT, GIT_BUF_INIT };
|
98
90
|
|
99
|
-
static
|
100
|
-
|
101
|
-
|
91
|
+
static git_sysdir_guess_cb git_sysdir__dir_guess[GIT_SYSDIR__MAX] = {
|
92
|
+
git_sysdir_guess_system_dirs,
|
93
|
+
git_sysdir_guess_global_dirs,
|
94
|
+
git_sysdir_guess_xdg_dirs,
|
95
|
+
git_sysdir_guess_programdata_dirs,
|
96
|
+
git_sysdir_guess_template_dirs,
|
97
|
+
};
|
102
98
|
|
103
|
-
|
104
|
-
git_buf_free(&git_sysdir__dirs[i].buf);
|
105
|
-
}
|
99
|
+
static int git_sysdir__dirs_shutdown_set = 0;
|
106
100
|
|
107
101
|
int git_sysdir_global_init(void)
|
108
102
|
{
|
109
|
-
|
103
|
+
git_sysdir_t i;
|
104
|
+
const git_buf *path;
|
110
105
|
int error = 0;
|
111
106
|
|
112
|
-
for (i = 0; !error && i <
|
113
|
-
error =
|
114
|
-
|
115
|
-
git__on_shutdown(git_sysdir_global_shutdown);
|
107
|
+
for (i = 0; !error && i < GIT_SYSDIR__MAX; i++)
|
108
|
+
error = git_sysdir_get(&path, i);
|
116
109
|
|
117
110
|
return error;
|
118
111
|
}
|
119
112
|
|
113
|
+
void git_sysdir_global_shutdown(void)
|
114
|
+
{
|
115
|
+
int i;
|
116
|
+
for (i = 0; i < GIT_SYSDIR__MAX; ++i)
|
117
|
+
git_buf_free(&git_sysdir__dirs[i]);
|
118
|
+
|
119
|
+
git_sysdir__dirs_shutdown_set = 0;
|
120
|
+
}
|
121
|
+
|
120
122
|
static int git_sysdir_check_selector(git_sysdir_t which)
|
121
123
|
{
|
122
|
-
if (which <
|
124
|
+
if (which < GIT_SYSDIR__MAX)
|
123
125
|
return 0;
|
124
126
|
|
125
127
|
giterr_set(GITERR_INVALID, "config directory selector out of range");
|
@@ -135,7 +137,18 @@ int git_sysdir_get(const git_buf **out, git_sysdir_t which)
|
|
135
137
|
|
136
138
|
GITERR_CHECK_ERROR(git_sysdir_check_selector(which));
|
137
139
|
|
138
|
-
|
140
|
+
if (!git_buf_len(&git_sysdir__dirs[which])) {
|
141
|
+
/* prepare shutdown if we're going to need it */
|
142
|
+
if (!git_sysdir__dirs_shutdown_set) {
|
143
|
+
git__on_shutdown(git_sysdir_global_shutdown);
|
144
|
+
git_sysdir__dirs_shutdown_set = 1;
|
145
|
+
}
|
146
|
+
|
147
|
+
GITERR_CHECK_ERROR(
|
148
|
+
git_sysdir__dir_guess[which](&git_sysdir__dirs[which]));
|
149
|
+
}
|
150
|
+
|
151
|
+
*out = &git_sysdir__dirs[which];
|
139
152
|
return 0;
|
140
153
|
}
|
141
154
|
|
@@ -170,38 +183,31 @@ int git_sysdir_set(git_sysdir_t which, const char *search_path)
|
|
170
183
|
if (search_path != NULL)
|
171
184
|
expand_path = strstr(search_path, PATH_MAGIC);
|
172
185
|
|
173
|
-
/*
|
174
|
-
if (!search_path || expand_path)
|
175
|
-
|
186
|
+
/* init with default if not yet done and needed (ignoring error) */
|
187
|
+
if ((!search_path || expand_path) &&
|
188
|
+
!git_buf_len(&git_sysdir__dirs[which]))
|
189
|
+
git_sysdir__dir_guess[which](&git_sysdir__dirs[which]);
|
176
190
|
|
177
191
|
/* if $PATH is not referenced, then just set the path */
|
178
|
-
if (!expand_path)
|
179
|
-
|
180
|
-
git_buf_sets(&git_sysdir__dirs[which].buf, search_path);
|
181
|
-
|
182
|
-
goto done;
|
183
|
-
}
|
192
|
+
if (!expand_path)
|
193
|
+
return git_buf_sets(&git_sysdir__dirs[which], search_path);
|
184
194
|
|
185
195
|
/* otherwise set to join(before $PATH, old value, after $PATH) */
|
186
196
|
if (expand_path > search_path)
|
187
197
|
git_buf_set(&merge, search_path, expand_path - search_path);
|
188
198
|
|
189
|
-
if (git_buf_len(&git_sysdir__dirs[which]
|
199
|
+
if (git_buf_len(&git_sysdir__dirs[which]))
|
190
200
|
git_buf_join(&merge, GIT_PATH_LIST_SEPARATOR,
|
191
|
-
merge.ptr, git_sysdir__dirs[which].
|
201
|
+
merge.ptr, git_sysdir__dirs[which].ptr);
|
192
202
|
|
193
203
|
expand_path += strlen(PATH_MAGIC);
|
194
204
|
if (*expand_path)
|
195
205
|
git_buf_join(&merge, GIT_PATH_LIST_SEPARATOR, merge.ptr, expand_path);
|
196
206
|
|
197
|
-
git_buf_swap(&git_sysdir__dirs[which]
|
207
|
+
git_buf_swap(&git_sysdir__dirs[which], &merge);
|
198
208
|
git_buf_free(&merge);
|
199
209
|
|
200
|
-
|
201
|
-
if (git_buf_oom(&git_sysdir__dirs[which].buf))
|
202
|
-
return -1;
|
203
|
-
|
204
|
-
return 0;
|
210
|
+
return git_buf_oom(&git_sysdir__dirs[which]) ? -1 : 0;
|
205
211
|
}
|
206
212
|
|
207
213
|
static int git_sysdir_find_in_dirlist(
|
data/vendor/libgit2/src/sysdir.h
CHANGED
@@ -103,4 +103,9 @@ extern int git_sysdir_get_str(char *out, size_t outlen, git_sysdir_t which);
|
|
103
103
|
*/
|
104
104
|
extern int git_sysdir_set(git_sysdir_t which, const char *paths);
|
105
105
|
|
106
|
+
/**
|
107
|
+
* Free the configuration file search paths.
|
108
|
+
*/
|
109
|
+
extern void git_sysdir_global_shutdown(void);
|
110
|
+
|
106
111
|
#endif /* INCLUDE_sysdir_h__ */
|