rugged 1.5.1 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rugged/extconf.rb +2 -2
- data/ext/rugged/rugged_blame.c +2 -0
- data/ext/rugged/rugged_blob.c +3 -0
- data/ext/rugged/rugged_commit.c +1 -0
- data/ext/rugged/rugged_config.c +2 -0
- data/ext/rugged/rugged_diff.c +1 -0
- data/ext/rugged/rugged_index.c +2 -0
- data/ext/rugged/rugged_patch.c +1 -0
- data/ext/rugged/rugged_rebase.c +1 -0
- data/ext/rugged/rugged_reference.c +1 -0
- data/ext/rugged/rugged_remote.c +1 -0
- data/ext/rugged/rugged_repo.c +5 -2
- data/ext/rugged/rugged_revwalk.c +5 -1
- data/ext/rugged/rugged_submodule.c +1 -0
- data/ext/rugged/rugged_tag.c +1 -0
- data/ext/rugged/rugged_tree.c +4 -0
- data/lib/rugged/index.rb +1 -1
- data/lib/rugged/tree.rb +1 -1
- data/lib/rugged/version.rb +1 -1
- data/vendor/libgit2/CMakeLists.txt +5 -1
- data/vendor/libgit2/COPYING +30 -0
- data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
- data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +2 -0
- data/vendor/libgit2/include/git2/common.h +13 -6
- data/vendor/libgit2/include/git2/deprecated.h +6 -0
- data/vendor/libgit2/include/git2/diff.h +1 -1
- data/vendor/libgit2/include/git2/experimental.h +20 -0
- data/vendor/libgit2/include/git2/indexer.h +29 -0
- data/vendor/libgit2/include/git2/object.h +28 -2
- data/vendor/libgit2/include/git2/odb.h +58 -7
- data/vendor/libgit2/include/git2/odb_backend.h +106 -18
- data/vendor/libgit2/include/git2/oid.h +115 -15
- data/vendor/libgit2/include/git2/repository.h +20 -1
- data/vendor/libgit2/include/git2/stash.h +60 -6
- data/vendor/libgit2/include/git2/strarray.h +0 -13
- data/vendor/libgit2/include/git2/sys/odb_backend.h +1 -1
- data/vendor/libgit2/include/git2/sys/transport.h +12 -0
- data/vendor/libgit2/include/git2/version.h +4 -4
- data/vendor/libgit2/include/git2.h +1 -0
- data/vendor/libgit2/src/CMakeLists.txt +0 -6
- data/vendor/libgit2/src/cli/CMakeLists.txt +5 -2
- data/vendor/libgit2/src/cli/cmd_hash_object.c +27 -8
- data/vendor/libgit2/src/cli/opt.c +1 -1
- data/vendor/libgit2/src/libgit2/CMakeLists.txt +24 -15
- data/vendor/libgit2/src/libgit2/annotated_commit.c +1 -1
- data/vendor/libgit2/src/libgit2/annotated_commit.h +1 -1
- data/vendor/libgit2/src/libgit2/attr_file.c +1 -1
- data/vendor/libgit2/src/libgit2/attrcache.c +1 -1
- data/vendor/libgit2/src/libgit2/blame.c +2 -0
- data/vendor/libgit2/src/libgit2/blob.c +4 -2
- data/vendor/libgit2/src/libgit2/blob.h +2 -2
- data/vendor/libgit2/src/libgit2/branch.c +2 -2
- data/vendor/libgit2/src/libgit2/cherrypick.c +3 -3
- data/vendor/libgit2/src/libgit2/clone.c +31 -2
- data/vendor/libgit2/src/libgit2/commit.c +52 -17
- data/vendor/libgit2/src/libgit2/commit.h +25 -7
- data/vendor/libgit2/src/libgit2/commit_graph.c +47 -32
- data/vendor/libgit2/src/libgit2/commit_graph.h +3 -0
- data/vendor/libgit2/src/libgit2/commit_list.c +6 -2
- data/vendor/libgit2/src/libgit2/config.c +1 -1
- data/vendor/libgit2/src/libgit2/config_file.c +2 -2
- data/vendor/libgit2/src/libgit2/describe.c +8 -8
- data/vendor/libgit2/src/libgit2/diff.c +5 -1
- data/vendor/libgit2/src/libgit2/diff_file.c +15 -6
- data/vendor/libgit2/src/libgit2/diff_generate.c +17 -12
- data/vendor/libgit2/src/libgit2/diff_print.c +5 -5
- data/vendor/libgit2/src/libgit2/diff_tform.c +4 -0
- data/vendor/libgit2/src/libgit2/email.c +2 -2
- data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
- data/vendor/libgit2/src/libgit2/fetch.c +3 -6
- data/vendor/libgit2/src/libgit2/fetchhead.c +4 -4
- data/vendor/libgit2/src/libgit2/ident.c +3 -3
- data/vendor/libgit2/src/libgit2/index.c +13 -12
- data/vendor/libgit2/src/libgit2/indexer.c +107 -44
- data/vendor/libgit2/src/libgit2/iterator.c +4 -2
- data/vendor/libgit2/src/libgit2/libgit2.c +19 -0
- data/vendor/libgit2/src/libgit2/merge.c +3 -3
- data/vendor/libgit2/src/libgit2/midx.c +16 -15
- data/vendor/libgit2/src/libgit2/mwindow.c +5 -2
- data/vendor/libgit2/src/libgit2/mwindow.h +4 -1
- data/vendor/libgit2/src/libgit2/notes.c +5 -5
- data/vendor/libgit2/src/libgit2/object.c +89 -25
- data/vendor/libgit2/src/libgit2/object.h +12 -3
- data/vendor/libgit2/src/libgit2/odb.c +213 -50
- data/vendor/libgit2/src/libgit2/odb.h +43 -4
- data/vendor/libgit2/src/libgit2/odb_loose.c +128 -70
- data/vendor/libgit2/src/libgit2/odb_pack.c +96 -44
- data/vendor/libgit2/src/libgit2/oid.c +134 -76
- data/vendor/libgit2/src/libgit2/oid.h +183 -9
- data/vendor/libgit2/src/libgit2/pack-objects.c +15 -4
- data/vendor/libgit2/src/libgit2/pack.c +92 -69
- data/vendor/libgit2/src/libgit2/pack.h +29 -15
- data/vendor/libgit2/src/libgit2/parse.c +4 -3
- data/vendor/libgit2/src/libgit2/patch_parse.c +5 -5
- data/vendor/libgit2/src/libgit2/push.c +13 -3
- data/vendor/libgit2/src/libgit2/reader.c +1 -1
- data/vendor/libgit2/src/libgit2/rebase.c +19 -18
- data/vendor/libgit2/src/libgit2/refdb_fs.c +70 -39
- data/vendor/libgit2/src/libgit2/reflog.c +7 -5
- data/vendor/libgit2/src/libgit2/reflog.h +1 -2
- data/vendor/libgit2/src/libgit2/refs.c +2 -0
- data/vendor/libgit2/src/libgit2/remote.c +38 -37
- data/vendor/libgit2/src/libgit2/remote.h +40 -0
- data/vendor/libgit2/src/libgit2/repository.c +212 -36
- data/vendor/libgit2/src/libgit2/repository.h +9 -0
- data/vendor/libgit2/src/libgit2/reset.c +2 -2
- data/vendor/libgit2/src/libgit2/revert.c +4 -4
- data/vendor/libgit2/src/libgit2/revparse.c +23 -7
- data/vendor/libgit2/src/libgit2/revwalk.c +5 -1
- data/vendor/libgit2/src/libgit2/stash.c +201 -26
- data/vendor/libgit2/src/libgit2/strarray.c +1 -0
- data/vendor/libgit2/src/libgit2/strarray.h +25 -0
- data/vendor/libgit2/src/libgit2/streams/openssl.c +1 -1
- data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +7 -3
- data/vendor/libgit2/src/libgit2/streams/socket.c +4 -1
- data/vendor/libgit2/src/libgit2/submodule.c +6 -2
- data/vendor/libgit2/src/libgit2/sysdir.c +294 -7
- data/vendor/libgit2/src/libgit2/sysdir.h +41 -9
- data/vendor/libgit2/src/libgit2/tag.c +29 -10
- data/vendor/libgit2/src/libgit2/tag.h +2 -2
- data/vendor/libgit2/src/libgit2/threadstate.h +1 -1
- data/vendor/libgit2/src/libgit2/transports/http.c +8 -7
- data/vendor/libgit2/src/libgit2/transports/httpclient.c +9 -0
- data/vendor/libgit2/src/libgit2/transports/httpclient.h +10 -0
- data/vendor/libgit2/src/libgit2/transports/local.c +14 -0
- data/vendor/libgit2/src/libgit2/transports/smart.c +35 -0
- data/vendor/libgit2/src/libgit2/transports/smart.h +10 -1
- data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +153 -41
- data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +42 -12
- data/vendor/libgit2/src/libgit2/transports/ssh.c +62 -65
- data/vendor/libgit2/src/libgit2/transports/winhttp.c +9 -4
- data/vendor/libgit2/src/libgit2/tree-cache.c +4 -4
- data/vendor/libgit2/src/libgit2/tree.c +22 -16
- data/vendor/libgit2/src/libgit2/tree.h +2 -2
- data/vendor/libgit2/src/libgit2/worktree.c +5 -0
- data/vendor/libgit2/src/util/CMakeLists.txt +6 -1
- data/vendor/libgit2/src/util/fs_path.c +1 -1
- data/vendor/libgit2/src/util/futils.c +0 -3
- data/vendor/libgit2/src/util/git2_util.h +2 -2
- data/vendor/libgit2/src/util/hash/openssl.c +4 -3
- data/vendor/libgit2/src/util/hash/rfc6234/sha.h +0 -112
- data/vendor/libgit2/src/util/hash.h +13 -0
- data/vendor/libgit2/src/util/net.c +338 -84
- data/vendor/libgit2/src/util/net.h +7 -0
- data/vendor/libgit2/src/util/posix.h +2 -0
- data/vendor/libgit2/src/util/rand.c +4 -0
- data/vendor/libgit2/src/util/regexp.c +3 -3
- data/vendor/libgit2/src/util/thread.h +20 -19
- data/vendor/libgit2/src/util/util.h +1 -0
- metadata +7 -5
- data/vendor/libgit2/src/util/win32/findfile.c +0 -286
- data/vendor/libgit2/src/util/win32/findfile.h +0 -22
- /data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +0 -0
@@ -9,11 +9,120 @@
|
|
9
9
|
|
10
10
|
#include "common.h"
|
11
11
|
|
12
|
+
#include "git2/experimental.h"
|
12
13
|
#include "git2/oid.h"
|
14
|
+
#include "hash.h"
|
15
|
+
|
16
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
17
|
+
# define GIT_OID_NONE { 0, { 0 } }
|
18
|
+
# define GIT_OID_INIT(type, ...) { type, __VA_ARGS__ }
|
19
|
+
#else
|
20
|
+
# define GIT_OID_NONE { { 0 } }
|
21
|
+
# define GIT_OID_INIT(type, ...) { __VA_ARGS__ }
|
22
|
+
#endif
|
13
23
|
|
14
24
|
extern const git_oid git_oid__empty_blob_sha1;
|
15
25
|
extern const git_oid git_oid__empty_tree_sha1;
|
16
26
|
|
27
|
+
GIT_INLINE(git_oid_t) git_oid_type(const git_oid *oid)
|
28
|
+
{
|
29
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
30
|
+
return oid->type;
|
31
|
+
#else
|
32
|
+
GIT_UNUSED(oid);
|
33
|
+
return GIT_OID_SHA1;
|
34
|
+
#endif
|
35
|
+
}
|
36
|
+
|
37
|
+
GIT_INLINE(size_t) git_oid_size(git_oid_t type)
|
38
|
+
{
|
39
|
+
switch (type) {
|
40
|
+
case GIT_OID_SHA1:
|
41
|
+
return GIT_OID_SHA1_SIZE;
|
42
|
+
|
43
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
44
|
+
case GIT_OID_SHA256:
|
45
|
+
return GIT_OID_SHA256_SIZE;
|
46
|
+
#endif
|
47
|
+
|
48
|
+
}
|
49
|
+
|
50
|
+
return 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
GIT_INLINE(size_t) git_oid_hexsize(git_oid_t type)
|
54
|
+
{
|
55
|
+
switch (type) {
|
56
|
+
case GIT_OID_SHA1:
|
57
|
+
return GIT_OID_SHA1_HEXSIZE;
|
58
|
+
|
59
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
60
|
+
case GIT_OID_SHA256:
|
61
|
+
return GIT_OID_SHA256_HEXSIZE;
|
62
|
+
#endif
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
return 0;
|
67
|
+
}
|
68
|
+
|
69
|
+
GIT_INLINE(const char *) git_oid_type_name(git_oid_t type)
|
70
|
+
{
|
71
|
+
switch (type) {
|
72
|
+
case GIT_OID_SHA1:
|
73
|
+
return "sha1";
|
74
|
+
|
75
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
76
|
+
case GIT_OID_SHA256:
|
77
|
+
return "sha256";
|
78
|
+
#endif
|
79
|
+
}
|
80
|
+
|
81
|
+
return "unknown";
|
82
|
+
}
|
83
|
+
|
84
|
+
GIT_INLINE(git_oid_t) git_oid_type_fromstr(const char *name)
|
85
|
+
{
|
86
|
+
if (strcmp(name, "sha1") == 0)
|
87
|
+
return GIT_OID_SHA1;
|
88
|
+
|
89
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
90
|
+
if (strcmp(name, "sha256") == 0)
|
91
|
+
return GIT_OID_SHA256;
|
92
|
+
#endif
|
93
|
+
|
94
|
+
return 0;
|
95
|
+
}
|
96
|
+
|
97
|
+
GIT_INLINE(git_oid_t) git_oid_type_fromstrn(const char *name, size_t len)
|
98
|
+
{
|
99
|
+
if (len == CONST_STRLEN("sha1") && strncmp(name, "sha1", len) == 0)
|
100
|
+
return GIT_OID_SHA1;
|
101
|
+
|
102
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
103
|
+
if (len == CONST_STRLEN("sha256") && strncmp(name, "sha256", len) == 0)
|
104
|
+
return GIT_OID_SHA256;
|
105
|
+
#endif
|
106
|
+
|
107
|
+
return 0;
|
108
|
+
}
|
109
|
+
|
110
|
+
GIT_INLINE(git_hash_algorithm_t) git_oid_algorithm(git_oid_t type)
|
111
|
+
{
|
112
|
+
switch (type) {
|
113
|
+
case GIT_OID_SHA1:
|
114
|
+
return GIT_HASH_ALGORITHM_SHA1;
|
115
|
+
|
116
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
117
|
+
case GIT_OID_SHA256:
|
118
|
+
return GIT_HASH_ALGORITHM_SHA256;
|
119
|
+
#endif
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
return 0;
|
124
|
+
}
|
125
|
+
|
17
126
|
/**
|
18
127
|
* Format a git_oid into a newly allocated c-string.
|
19
128
|
*
|
@@ -25,13 +134,42 @@ extern const git_oid git_oid__empty_tree_sha1;
|
|
25
134
|
*/
|
26
135
|
char *git_oid_allocfmt(const git_oid *id);
|
27
136
|
|
137
|
+
/**
|
138
|
+
* Format the requested nibbles of an object id.
|
139
|
+
*
|
140
|
+
* @param str the string to write into
|
141
|
+
* @param oid the oid structure to format
|
142
|
+
* @param start the starting number of nibbles
|
143
|
+
* @param count the number of nibbles to format
|
144
|
+
*/
|
145
|
+
GIT_INLINE(void) git_oid_fmt_substr(
|
146
|
+
char *str,
|
147
|
+
const git_oid *oid,
|
148
|
+
size_t start,
|
149
|
+
size_t count)
|
150
|
+
{
|
151
|
+
static char hex[] = "0123456789abcdef";
|
152
|
+
size_t i, end = start + count, min = start / 2, max = end / 2;
|
153
|
+
|
154
|
+
if (start & 1)
|
155
|
+
*str++ = hex[oid->id[min++] & 0x0f];
|
156
|
+
|
157
|
+
for (i = min; i < max; i++) {
|
158
|
+
*str++ = hex[oid->id[i] >> 4];
|
159
|
+
*str++ = hex[oid->id[i] & 0x0f];
|
160
|
+
}
|
161
|
+
|
162
|
+
if (end & 1)
|
163
|
+
*str++ = hex[oid->id[i] >> 4];
|
164
|
+
}
|
165
|
+
|
28
166
|
GIT_INLINE(int) git_oid_raw_ncmp(
|
29
167
|
const unsigned char *sha1,
|
30
168
|
const unsigned char *sha2,
|
31
169
|
size_t len)
|
32
170
|
{
|
33
|
-
if (len >
|
34
|
-
len =
|
171
|
+
if (len > GIT_OID_MAX_HEXSIZE)
|
172
|
+
len = GIT_OID_MAX_HEXSIZE;
|
35
173
|
|
36
174
|
while (len > 1) {
|
37
175
|
if (*sha1 != *sha2)
|
@@ -50,16 +188,18 @@ GIT_INLINE(int) git_oid_raw_ncmp(
|
|
50
188
|
|
51
189
|
GIT_INLINE(int) git_oid_raw_cmp(
|
52
190
|
const unsigned char *sha1,
|
53
|
-
const unsigned char *sha2
|
191
|
+
const unsigned char *sha2,
|
192
|
+
size_t size)
|
54
193
|
{
|
55
|
-
return memcmp(sha1, sha2,
|
194
|
+
return memcmp(sha1, sha2, size);
|
56
195
|
}
|
57
196
|
|
58
197
|
GIT_INLINE(int) git_oid_raw_cpy(
|
59
198
|
unsigned char *dst,
|
60
|
-
const unsigned char *src
|
199
|
+
const unsigned char *src,
|
200
|
+
size_t size)
|
61
201
|
{
|
62
|
-
memcpy(dst, src,
|
202
|
+
memcpy(dst, src, size);
|
63
203
|
return 0;
|
64
204
|
}
|
65
205
|
|
@@ -72,19 +212,30 @@ GIT_INLINE(int) git_oid_raw_cpy(
|
|
72
212
|
*/
|
73
213
|
GIT_INLINE(int) git_oid__cmp(const git_oid *a, const git_oid *b)
|
74
214
|
{
|
75
|
-
|
215
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
216
|
+
if (a->type != b->type)
|
217
|
+
return a->type - b->type;
|
218
|
+
|
219
|
+
return git_oid_raw_cmp(a->id, b->id, git_oid_size(a->type));
|
220
|
+
#else
|
221
|
+
return git_oid_raw_cmp(a->id, b->id, git_oid_size(GIT_OID_SHA1));
|
222
|
+
#endif
|
76
223
|
}
|
77
224
|
|
78
225
|
GIT_INLINE(void) git_oid__cpy_prefix(
|
79
226
|
git_oid *out, const git_oid *id, size_t len)
|
80
227
|
{
|
228
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
229
|
+
out->type = id->type;
|
230
|
+
#endif
|
231
|
+
|
81
232
|
memcpy(&out->id, id->id, (len + 1) / 2);
|
82
233
|
|
83
234
|
if (len & 1)
|
84
235
|
out->id[len / 2] &= 0xF0;
|
85
236
|
}
|
86
237
|
|
87
|
-
GIT_INLINE(bool) git_oid__is_hexstr(const char *str)
|
238
|
+
GIT_INLINE(bool) git_oid__is_hexstr(const char *str, git_oid_t type)
|
88
239
|
{
|
89
240
|
size_t i;
|
90
241
|
|
@@ -93,7 +244,30 @@ GIT_INLINE(bool) git_oid__is_hexstr(const char *str)
|
|
93
244
|
return false;
|
94
245
|
}
|
95
246
|
|
96
|
-
return (i ==
|
247
|
+
return (i == git_oid_hexsize(type));
|
97
248
|
}
|
98
249
|
|
250
|
+
GIT_INLINE(void) git_oid_clear(git_oid *out, git_oid_t type)
|
251
|
+
{
|
252
|
+
memset(out->id, 0, git_oid_size(type));
|
253
|
+
|
254
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
255
|
+
out->type = type;
|
256
|
+
#endif
|
257
|
+
}
|
258
|
+
|
259
|
+
/* SHA256 support */
|
260
|
+
|
261
|
+
int git_oid__fromstr(git_oid *out, const char *str, git_oid_t type);
|
262
|
+
|
263
|
+
int git_oid__fromstrp(git_oid *out, const char *str, git_oid_t type);
|
264
|
+
|
265
|
+
int git_oid__fromstrn(
|
266
|
+
git_oid *out,
|
267
|
+
const char *str,
|
268
|
+
size_t length,
|
269
|
+
git_oid_t type);
|
270
|
+
|
271
|
+
int git_oid__fromraw(git_oid *out, const unsigned char *raw, git_oid_t type);
|
272
|
+
|
99
273
|
#endif
|
@@ -347,8 +347,8 @@ static int write_object(
|
|
347
347
|
goto done;
|
348
348
|
|
349
349
|
if (type == GIT_OBJECT_REF_DELTA) {
|
350
|
-
if ((error = write_cb(po->delta->id.id,
|
351
|
-
(error = git_hash_update(&pb->ctx, po->delta->id.id,
|
350
|
+
if ((error = write_cb(po->delta->id.id, GIT_OID_SHA1_SIZE, cb_data)) < 0 ||
|
351
|
+
(error = git_hash_update(&pb->ctx, po->delta->id.id, GIT_OID_SHA1_SIZE)) < 0)
|
352
352
|
goto done;
|
353
353
|
}
|
354
354
|
|
@@ -668,7 +668,7 @@ static int write_pack(git_packbuilder *pb,
|
|
668
668
|
if ((error = git_hash_final(entry_oid.id, &pb->ctx)) < 0)
|
669
669
|
goto done;
|
670
670
|
|
671
|
-
error = write_cb(entry_oid.id,
|
671
|
+
error = write_cb(entry_oid.id, GIT_OID_SHA1_SIZE, cb_data);
|
672
672
|
|
673
673
|
done:
|
674
674
|
/* if callback cancelled writing, we must still free delta_data */
|
@@ -1407,7 +1407,18 @@ int git_packbuilder_write(
|
|
1407
1407
|
opts.progress_cb = progress_cb;
|
1408
1408
|
opts.progress_cb_payload = progress_cb_payload;
|
1409
1409
|
|
1410
|
-
|
1410
|
+
/* TODO: SHA256 */
|
1411
|
+
|
1412
|
+
#ifdef GIT_EXPERIMENTAL_SHA256
|
1413
|
+
opts.mode = mode;
|
1414
|
+
opts.odb = pb->odb;
|
1415
|
+
|
1416
|
+
error = git_indexer_new(&indexer, path, GIT_OID_SHA1, &opts);
|
1417
|
+
#else
|
1418
|
+
error = git_indexer_new(&indexer, path, mode, pb->odb, &opts);
|
1419
|
+
#endif
|
1420
|
+
|
1421
|
+
if (error < 0)
|
1411
1422
|
goto cleanup;
|
1412
1423
|
|
1413
1424
|
if (!git_repository__configmap_lookup(&t, pb->repo, GIT_CONFIGMAP_FSYNCOBJECTFILES) && t)
|