rugged 0.17.0.b7 → 0.18.0.b1
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.
- data/LICENSE +1 -1
- data/README.md +88 -32
- data/ext/rugged/extconf.rb +4 -2
- data/ext/rugged/rugged.c +72 -10
- data/ext/rugged/rugged.h +14 -10
- data/ext/rugged/rugged_blob.c +8 -10
- data/ext/rugged/rugged_branch.c +11 -14
- data/ext/rugged/rugged_commit.c +31 -24
- data/ext/rugged/rugged_config.c +2 -2
- data/ext/rugged/rugged_index.c +133 -198
- data/ext/rugged/rugged_note.c +372 -0
- data/ext/rugged/rugged_object.c +50 -22
- data/ext/rugged/rugged_reference.c +122 -130
- data/ext/rugged/rugged_remote.c +72 -29
- data/ext/rugged/rugged_repo.c +402 -20
- data/ext/rugged/rugged_revwalk.c +7 -3
- data/ext/rugged/rugged_settings.c +110 -0
- data/ext/rugged/rugged_signature.c +23 -7
- data/ext/rugged/rugged_tag.c +32 -16
- data/ext/rugged/rugged_tree.c +44 -15
- data/lib/rugged.rb +1 -0
- data/lib/rugged/index.rb +8 -0
- data/lib/rugged/remote.rb +13 -0
- data/lib/rugged/repository.rb +3 -3
- data/lib/rugged/version.rb +1 -1
- data/test/blob_test.rb +13 -15
- data/test/branch_test.rb +32 -67
- data/test/commit_test.rb +50 -12
- data/test/config_test.rb +12 -11
- data/test/coverage/HEAD.json +1 -1
- data/test/coverage/cover.rb +40 -21
- data/test/errors_test.rb +34 -0
- data/test/fixtures/alternate/objects/14/6ae76773c91e3b1d00cf7a338ec55ae58297e2 +0 -0
- data/test/fixtures/alternate/objects/14/9c32d47e99d0a3572ff1e70a2e0051bbf347a9 +0 -0
- data/test/fixtures/alternate/objects/14/fb3108588f9421bf764041e5e3ac305eb6277f +0 -0
- data/test/fixtures/testrepo.git/logs/refs/notes/commits +1 -0
- data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +1 -0
- data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
- data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +1 -0
- data/test/fixtures/testrepo.git/objects/94/eca2de348d5f672faf56b0decafa5937e3235e +0 -0
- data/test/fixtures/testrepo.git/objects/9b/7384fe1676186192842f5d3e129457b62db9e3 +0 -0
- data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +3 -0
- data/test/fixtures/testrepo.git/refs/notes/commits +1 -0
- data/test/index_test.rb +65 -69
- data/test/lib_test.rb +76 -11
- data/test/note_test.rb +158 -0
- data/test/object_test.rb +8 -11
- data/test/reference_test.rb +77 -85
- data/test/remote_test.rb +86 -8
- data/test/repo_pack_test.rb +9 -7
- data/test/repo_reset_test.rb +80 -0
- data/test/repo_test.rb +176 -53
- data/test/tag_test.rb +44 -7
- data/test/test_helper.rb +63 -35
- data/test/tree_test.rb +34 -13
- data/test/walker_test.rb +14 -14
- data/vendor/libgit2/Makefile.embed +1 -1
- data/vendor/libgit2/deps/http-parser/http_parser.c +974 -578
- data/vendor/libgit2/deps/http-parser/http_parser.h +106 -70
- data/vendor/libgit2/deps/regex/regcomp.c +7 -6
- data/vendor/libgit2/deps/regex/regex_internal.c +1 -1
- data/vendor/libgit2/deps/regex/regex_internal.h +12 -3
- data/vendor/libgit2/deps/regex/regexec.c +5 -5
- data/vendor/libgit2/include/git2.h +5 -1
- data/vendor/libgit2/include/git2/attr.h +4 -2
- data/vendor/libgit2/include/git2/blob.h +39 -12
- data/vendor/libgit2/include/git2/branch.h +123 -35
- data/vendor/libgit2/include/git2/checkout.h +206 -48
- data/vendor/libgit2/include/git2/clone.h +72 -27
- data/vendor/libgit2/include/git2/commit.h +20 -17
- data/vendor/libgit2/include/git2/common.h +67 -1
- data/vendor/libgit2/include/git2/config.h +81 -60
- data/vendor/libgit2/include/git2/cred_helpers.h +53 -0
- data/vendor/libgit2/include/git2/diff.h +459 -150
- data/vendor/libgit2/include/git2/errors.h +9 -1
- data/vendor/libgit2/include/git2/graph.h +41 -0
- data/vendor/libgit2/include/git2/ignore.h +7 -6
- data/vendor/libgit2/include/git2/index.h +323 -97
- data/vendor/libgit2/include/git2/indexer.h +27 -59
- data/vendor/libgit2/include/git2/inttypes.h +4 -0
- data/vendor/libgit2/include/git2/merge.h +13 -3
- data/vendor/libgit2/include/git2/message.h +14 -8
- data/vendor/libgit2/include/git2/net.h +9 -7
- data/vendor/libgit2/include/git2/notes.h +88 -29
- data/vendor/libgit2/include/git2/object.h +16 -6
- data/vendor/libgit2/include/git2/odb.h +80 -17
- data/vendor/libgit2/include/git2/odb_backend.h +47 -11
- data/vendor/libgit2/include/git2/oid.h +26 -17
- data/vendor/libgit2/include/git2/pack.h +62 -8
- data/vendor/libgit2/include/git2/push.h +131 -0
- data/vendor/libgit2/include/git2/refdb.h +103 -0
- data/vendor/libgit2/include/git2/refdb_backend.h +109 -0
- data/vendor/libgit2/include/git2/reflog.h +30 -21
- data/vendor/libgit2/include/git2/refs.h +215 -193
- data/vendor/libgit2/include/git2/refspec.h +22 -2
- data/vendor/libgit2/include/git2/remote.h +158 -37
- data/vendor/libgit2/include/git2/repository.h +150 -31
- data/vendor/libgit2/include/git2/reset.h +43 -9
- data/vendor/libgit2/include/git2/revparse.h +48 -4
- data/vendor/libgit2/include/git2/revwalk.h +25 -10
- data/vendor/libgit2/include/git2/signature.h +20 -12
- data/vendor/libgit2/include/git2/stash.h +121 -0
- data/vendor/libgit2/include/git2/status.h +122 -53
- data/vendor/libgit2/include/git2/strarray.h +17 -11
- data/vendor/libgit2/include/git2/submodule.h +42 -7
- data/vendor/libgit2/include/git2/tag.h +72 -59
- data/vendor/libgit2/include/git2/threads.h +4 -2
- data/vendor/libgit2/include/git2/trace.h +68 -0
- data/vendor/libgit2/include/git2/transport.h +328 -0
- data/vendor/libgit2/include/git2/tree.h +149 -120
- data/vendor/libgit2/include/git2/types.h +13 -12
- data/vendor/libgit2/include/git2/version.h +3 -3
- data/vendor/libgit2/src/amiga/map.c +2 -2
- data/vendor/libgit2/src/attr.c +58 -48
- data/vendor/libgit2/src/attr.h +4 -18
- data/vendor/libgit2/src/attr_file.c +30 -6
- data/vendor/libgit2/src/attr_file.h +6 -8
- data/vendor/libgit2/src/attrcache.h +24 -0
- data/vendor/libgit2/src/blob.c +30 -7
- data/vendor/libgit2/src/blob.h +1 -1
- data/vendor/libgit2/src/branch.c +361 -68
- data/vendor/libgit2/src/branch.h +17 -0
- data/vendor/libgit2/src/bswap.h +1 -1
- data/vendor/libgit2/src/buf_text.c +291 -0
- data/vendor/libgit2/src/buf_text.h +122 -0
- data/vendor/libgit2/src/buffer.c +27 -101
- data/vendor/libgit2/src/buffer.h +54 -39
- data/vendor/libgit2/src/cache.c +15 -6
- data/vendor/libgit2/src/cache.h +1 -1
- data/vendor/libgit2/src/cc-compat.h +3 -1
- data/vendor/libgit2/src/checkout.c +1165 -222
- data/vendor/libgit2/src/checkout.h +24 -0
- data/vendor/libgit2/src/clone.c +171 -86
- data/vendor/libgit2/src/commit.c +44 -45
- data/vendor/libgit2/src/commit.h +3 -3
- data/vendor/libgit2/src/commit_list.c +194 -0
- data/vendor/libgit2/src/commit_list.h +49 -0
- data/vendor/libgit2/src/common.h +44 -10
- data/vendor/libgit2/src/compress.c +1 -1
- data/vendor/libgit2/src/compress.h +1 -1
- data/vendor/libgit2/src/config.c +211 -124
- data/vendor/libgit2/src/config.h +23 -4
- data/vendor/libgit2/src/config_cache.c +2 -2
- data/vendor/libgit2/src/config_file.c +129 -53
- data/vendor/libgit2/src/config_file.h +10 -8
- data/vendor/libgit2/src/crlf.c +66 -67
- data/vendor/libgit2/src/date.c +12 -12
- data/vendor/libgit2/src/delta-apply.c +14 -1
- data/vendor/libgit2/src/delta-apply.h +18 -1
- data/vendor/libgit2/src/delta.c +40 -107
- data/vendor/libgit2/src/delta.h +19 -17
- data/vendor/libgit2/src/diff.c +347 -496
- data/vendor/libgit2/src/diff.h +27 -1
- data/vendor/libgit2/src/diff_output.c +564 -249
- data/vendor/libgit2/src/diff_output.h +15 -8
- data/vendor/libgit2/src/diff_tform.c +687 -0
- data/vendor/libgit2/src/errors.c +27 -36
- data/vendor/libgit2/src/fetch.c +13 -351
- data/vendor/libgit2/src/fetch.h +13 -3
- data/vendor/libgit2/src/fetchhead.c +295 -0
- data/vendor/libgit2/src/fetchhead.h +34 -0
- data/vendor/libgit2/src/filebuf.c +42 -15
- data/vendor/libgit2/src/filebuf.h +4 -2
- data/vendor/libgit2/src/fileops.c +466 -113
- data/vendor/libgit2/src/fileops.h +154 -28
- data/vendor/libgit2/src/filter.c +3 -75
- data/vendor/libgit2/src/filter.h +1 -29
- data/vendor/libgit2/src/fnmatch.c +1 -1
- data/vendor/libgit2/src/fnmatch.h +1 -1
- data/vendor/libgit2/src/global.c +54 -10
- data/vendor/libgit2/src/global.h +10 -1
- data/vendor/libgit2/src/graph.c +178 -0
- data/vendor/libgit2/src/hash.c +25 -52
- data/vendor/libgit2/src/hash.h +21 -9
- data/vendor/libgit2/src/{sha1/sha1.c → hash/hash_generic.c} +20 -12
- data/vendor/libgit2/src/hash/hash_generic.h +24 -0
- data/vendor/libgit2/src/hash/hash_openssl.h +45 -0
- data/vendor/libgit2/src/hash/hash_win32.c +291 -0
- data/vendor/libgit2/src/hash/hash_win32.h +140 -0
- data/vendor/libgit2/src/hashsig.c +368 -0
- data/vendor/libgit2/src/hashsig.h +72 -0
- data/vendor/libgit2/src/ignore.c +22 -15
- data/vendor/libgit2/src/ignore.h +6 -1
- data/vendor/libgit2/src/index.c +770 -171
- data/vendor/libgit2/src/index.h +13 -5
- data/vendor/libgit2/src/indexer.c +286 -431
- data/vendor/libgit2/src/iterator.c +854 -466
- data/vendor/libgit2/src/iterator.h +134 -109
- data/vendor/libgit2/src/map.h +1 -1
- data/vendor/libgit2/src/merge.c +296 -0
- data/vendor/libgit2/src/merge.h +22 -0
- data/vendor/libgit2/src/message.c +1 -1
- data/vendor/libgit2/src/message.h +1 -1
- data/vendor/libgit2/src/mwindow.c +35 -30
- data/vendor/libgit2/src/mwindow.h +2 -2
- data/vendor/libgit2/src/netops.c +162 -98
- data/vendor/libgit2/src/netops.h +50 -15
- data/vendor/libgit2/src/notes.c +109 -58
- data/vendor/libgit2/src/notes.h +2 -1
- data/vendor/libgit2/src/object.c +46 -57
- data/vendor/libgit2/src/object.h +1 -8
- data/vendor/libgit2/src/odb.c +151 -40
- data/vendor/libgit2/src/odb.h +5 -1
- data/vendor/libgit2/src/odb_loose.c +4 -5
- data/vendor/libgit2/src/odb_pack.c +122 -80
- data/vendor/libgit2/src/offmap.h +65 -0
- data/vendor/libgit2/src/oid.c +12 -4
- data/vendor/libgit2/src/oidmap.h +1 -1
- data/vendor/libgit2/src/pack-objects.c +88 -61
- data/vendor/libgit2/src/pack-objects.h +8 -8
- data/vendor/libgit2/src/pack.c +293 -28
- data/vendor/libgit2/src/pack.h +49 -4
- data/vendor/libgit2/src/path.c +103 -14
- data/vendor/libgit2/src/path.h +23 -7
- data/vendor/libgit2/src/pathspec.c +168 -0
- data/vendor/libgit2/src/pathspec.h +40 -0
- data/vendor/libgit2/src/pool.c +29 -4
- data/vendor/libgit2/src/pool.h +8 -1
- data/vendor/libgit2/src/posix.c +26 -27
- data/vendor/libgit2/src/posix.h +2 -3
- data/vendor/libgit2/src/pqueue.c +23 -1
- data/vendor/libgit2/src/pqueue.h +23 -1
- data/vendor/libgit2/src/push.c +653 -0
- data/vendor/libgit2/src/push.h +51 -0
- data/vendor/libgit2/src/refdb.c +185 -0
- data/vendor/libgit2/src/refdb.h +46 -0
- data/vendor/libgit2/src/refdb_fs.c +1024 -0
- data/vendor/libgit2/src/refdb_fs.h +15 -0
- data/vendor/libgit2/src/reflog.c +77 -45
- data/vendor/libgit2/src/reflog.h +1 -3
- data/vendor/libgit2/src/refs.c +366 -1326
- data/vendor/libgit2/src/refs.h +22 -13
- data/vendor/libgit2/src/refspec.c +46 -7
- data/vendor/libgit2/src/refspec.h +11 -1
- data/vendor/libgit2/src/remote.c +758 -120
- data/vendor/libgit2/src/remote.h +10 -5
- data/vendor/libgit2/src/repo_template.h +6 -6
- data/vendor/libgit2/src/repository.c +315 -96
- data/vendor/libgit2/src/repository.h +5 -3
- data/vendor/libgit2/src/reset.c +99 -81
- data/vendor/libgit2/src/revparse.c +157 -84
- data/vendor/libgit2/src/revwalk.c +68 -470
- data/vendor/libgit2/src/revwalk.h +44 -0
- data/vendor/libgit2/src/sha1_lookup.c +1 -1
- data/vendor/libgit2/src/sha1_lookup.h +1 -1
- data/vendor/libgit2/src/signature.c +68 -200
- data/vendor/libgit2/src/signature.h +1 -1
- data/vendor/libgit2/src/stash.c +663 -0
- data/vendor/libgit2/src/status.c +101 -79
- data/vendor/libgit2/src/strmap.h +1 -1
- data/vendor/libgit2/src/submodule.c +67 -51
- data/vendor/libgit2/src/submodule.h +1 -1
- data/vendor/libgit2/src/tag.c +35 -29
- data/vendor/libgit2/src/tag.h +1 -1
- data/vendor/libgit2/src/thread-utils.c +1 -1
- data/vendor/libgit2/src/thread-utils.h +2 -2
- data/vendor/libgit2/src/trace.c +39 -0
- data/vendor/libgit2/src/trace.h +56 -0
- data/vendor/libgit2/src/transport.c +81 -34
- data/vendor/libgit2/src/transports/cred.c +60 -0
- data/vendor/libgit2/src/transports/cred_helpers.c +49 -0
- data/vendor/libgit2/src/transports/git.c +234 -127
- data/vendor/libgit2/src/transports/http.c +761 -433
- data/vendor/libgit2/src/transports/local.c +460 -64
- data/vendor/libgit2/src/transports/smart.c +345 -0
- data/vendor/libgit2/src/transports/smart.h +179 -0
- data/vendor/libgit2/src/{pkt.c → transports/smart_pkt.c} +131 -12
- data/vendor/libgit2/src/transports/smart_protocol.c +856 -0
- data/vendor/libgit2/src/transports/winhttp.c +1136 -0
- data/vendor/libgit2/src/tree-cache.c +2 -2
- data/vendor/libgit2/src/tree-cache.h +1 -1
- data/vendor/libgit2/src/tree.c +239 -166
- data/vendor/libgit2/src/tree.h +11 -2
- data/vendor/libgit2/src/tsort.c +39 -23
- data/vendor/libgit2/src/unix/map.c +1 -1
- data/vendor/libgit2/src/unix/posix.h +12 -2
- data/vendor/libgit2/src/unix/realpath.c +30 -0
- data/vendor/libgit2/src/util.c +250 -13
- data/vendor/libgit2/src/util.h +71 -14
- data/vendor/libgit2/src/vector.c +123 -60
- data/vendor/libgit2/src/vector.h +24 -22
- data/vendor/libgit2/src/win32/dir.c +1 -1
- data/vendor/libgit2/src/win32/dir.h +1 -1
- data/vendor/libgit2/src/win32/error.c +77 -0
- data/vendor/libgit2/src/win32/error.h +13 -0
- data/vendor/libgit2/src/win32/findfile.c +143 -54
- data/vendor/libgit2/src/win32/findfile.h +10 -6
- data/vendor/libgit2/src/win32/map.c +1 -1
- data/vendor/libgit2/src/win32/mingw-compat.h +1 -1
- data/vendor/libgit2/src/win32/msvc-compat.h +10 -1
- data/vendor/libgit2/src/win32/posix.h +10 -1
- data/vendor/libgit2/src/win32/posix_w32.c +132 -63
- data/vendor/libgit2/src/win32/precompiled.c +1 -1
- data/vendor/libgit2/src/win32/pthread.c +1 -1
- data/vendor/libgit2/src/win32/pthread.h +1 -1
- data/vendor/libgit2/src/win32/utf-conv.c +5 -5
- data/vendor/libgit2/src/win32/utf-conv.h +3 -3
- data/vendor/libgit2/src/win32/version.h +20 -0
- metadata +308 -252
- data/test/fixtures/testrepo.git/objects/4b/825dc642cb6eb9a060e54bf8d69288fbee4904 +0 -0
- data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
- data/test/fixtures/testrepo.git/objects/a3/e05719b428a2d0ed7a55c4ce53dcc5768c6d5e +0 -0
- data/test/index_test.rb~ +0 -218
- data/vendor/libgit2/src/pkt.h +0 -91
- data/vendor/libgit2/src/ppc/sha1.c +0 -70
- data/vendor/libgit2/src/ppc/sha1.h +0 -26
- data/vendor/libgit2/src/protocol.c +0 -110
- data/vendor/libgit2/src/protocol.h +0 -21
- data/vendor/libgit2/src/sha1.h +0 -33
- data/vendor/libgit2/src/transport.h +0 -148
data/vendor/libgit2/src/netops.h
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -10,33 +10,68 @@
|
|
|
10
10
|
#include "posix.h"
|
|
11
11
|
#include "common.h"
|
|
12
12
|
|
|
13
|
+
#ifdef GIT_SSL
|
|
14
|
+
# include <openssl/ssl.h>
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
struct gitno_ssl {
|
|
18
|
+
#ifdef GIT_SSL
|
|
19
|
+
SSL_CTX *ctx;
|
|
20
|
+
SSL *ssl;
|
|
21
|
+
#else
|
|
22
|
+
size_t dummy;
|
|
23
|
+
#endif
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
typedef struct gitno_ssl gitno_ssl;
|
|
27
|
+
|
|
28
|
+
/* Represents a socket that may or may not be using SSL */
|
|
29
|
+
struct gitno_socket {
|
|
30
|
+
GIT_SOCKET socket;
|
|
31
|
+
gitno_ssl ssl;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
typedef struct gitno_socket gitno_socket;
|
|
35
|
+
|
|
13
36
|
struct gitno_buffer {
|
|
14
37
|
char *data;
|
|
15
38
|
size_t len;
|
|
16
39
|
size_t offset;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
struct gitno_ssl *ssl;
|
|
20
|
-
#endif
|
|
21
|
-
int (*recv)(gitno_buffer *buffer);
|
|
40
|
+
gitno_socket *socket;
|
|
41
|
+
int (*recv)(struct gitno_buffer *buffer);
|
|
22
42
|
void *cb_data;
|
|
23
43
|
};
|
|
24
44
|
|
|
25
|
-
|
|
26
|
-
|
|
45
|
+
typedef struct gitno_buffer gitno_buffer;
|
|
46
|
+
|
|
47
|
+
/* Flags to gitno_connect */
|
|
48
|
+
enum {
|
|
49
|
+
/* Attempt to create an SSL connection. */
|
|
50
|
+
GITNO_CONNECT_SSL = 1,
|
|
51
|
+
|
|
52
|
+
/* Valid only when GITNO_CONNECT_SSL is also specified.
|
|
53
|
+
* Indicates that the server certificate should not be validated. */
|
|
54
|
+
GITNO_CONNECT_SSL_NO_CHECK_CERT = 2,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
void gitno_buffer_setup(gitno_socket *t, gitno_buffer *buf, char *data, size_t len);
|
|
58
|
+
void gitno_buffer_setup_callback(gitno_socket *t, gitno_buffer *buf, char *data, size_t len, int (*recv)(gitno_buffer *buf), void *cb_data);
|
|
27
59
|
int gitno_recv(gitno_buffer *buf);
|
|
28
|
-
int gitno__recv(gitno_buffer *buf);
|
|
29
60
|
|
|
30
61
|
void gitno_consume(gitno_buffer *buf, const char *ptr);
|
|
31
62
|
void gitno_consume_n(gitno_buffer *buf, size_t cons);
|
|
32
63
|
|
|
33
|
-
int gitno_connect(
|
|
34
|
-
int gitno_send(
|
|
35
|
-
int gitno_close(
|
|
36
|
-
int gitno_ssl_teardown(git_transport *t);
|
|
37
|
-
int gitno_send_chunk_size(int s, size_t len);
|
|
64
|
+
int gitno_connect(gitno_socket *socket, const char *host, const char *port, int flags);
|
|
65
|
+
int gitno_send(gitno_socket *socket, const char *msg, size_t len, int flags);
|
|
66
|
+
int gitno_close(gitno_socket *s);
|
|
38
67
|
int gitno_select_in(gitno_buffer *buf, long int sec, long int usec);
|
|
39
68
|
|
|
40
|
-
int
|
|
69
|
+
int gitno_extract_url_parts(
|
|
70
|
+
char **host,
|
|
71
|
+
char **port,
|
|
72
|
+
char **username,
|
|
73
|
+
char **password,
|
|
74
|
+
const char *url,
|
|
75
|
+
const char *default_port);
|
|
41
76
|
|
|
42
77
|
#endif
|
data/vendor/libgit2/src/notes.c
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include "refs.h"
|
|
12
12
|
#include "config.h"
|
|
13
13
|
#include "iterator.h"
|
|
14
|
+
#include "signature.h"
|
|
14
15
|
|
|
15
16
|
static int find_subtree_in_current_level(
|
|
16
17
|
git_tree **out,
|
|
@@ -19,11 +20,11 @@ static int find_subtree_in_current_level(
|
|
|
19
20
|
const char *annotated_object_sha,
|
|
20
21
|
int fanout)
|
|
21
22
|
{
|
|
22
|
-
|
|
23
|
+
size_t i;
|
|
23
24
|
const git_tree_entry *entry;
|
|
24
25
|
|
|
25
26
|
*out = NULL;
|
|
26
|
-
|
|
27
|
+
|
|
27
28
|
if (parent == NULL)
|
|
28
29
|
return GIT_ENOTFOUND;
|
|
29
30
|
|
|
@@ -34,12 +35,12 @@ static int find_subtree_in_current_level(
|
|
|
34
35
|
continue;
|
|
35
36
|
|
|
36
37
|
if (S_ISDIR(git_tree_entry_filemode(entry))
|
|
37
|
-
&& strlen(git_tree_entry_name(entry)) == 2
|
|
38
|
+
&& strlen(git_tree_entry_name(entry)) == 2
|
|
38
39
|
&& !strncmp(git_tree_entry_name(entry), annotated_object_sha + fanout, 2))
|
|
39
40
|
return git_tree_lookup(out, repo, git_tree_entry_id(entry));
|
|
40
41
|
|
|
41
42
|
/* Not a DIR, so do we have an already existing blob? */
|
|
42
|
-
if (!strcmp(git_tree_entry_name(entry), annotated_object_sha + fanout))
|
|
43
|
+
if (!strcmp(git_tree_entry_name(entry), annotated_object_sha + fanout))
|
|
43
44
|
return GIT_EEXISTS;
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -71,7 +72,7 @@ static int find_subtree_r(git_tree **out, git_tree *root,
|
|
|
71
72
|
|
|
72
73
|
static int find_blob(git_oid *blob, git_tree *tree, const char *target)
|
|
73
74
|
{
|
|
74
|
-
|
|
75
|
+
size_t i;
|
|
75
76
|
const git_tree_entry *entry;
|
|
76
77
|
|
|
77
78
|
for (i=0; i<git_tree_entrycount(tree); i++) {
|
|
@@ -128,10 +129,10 @@ static int manipulate_note_in_tree_r(
|
|
|
128
129
|
git_tree *parent,
|
|
129
130
|
git_oid *note_oid,
|
|
130
131
|
const char *annotated_object_sha,
|
|
131
|
-
int fanout,
|
|
132
|
+
int fanout,
|
|
132
133
|
int (*note_exists_cb)(
|
|
133
|
-
git_tree **out,
|
|
134
|
-
git_repository *repo,
|
|
134
|
+
git_tree **out,
|
|
135
|
+
git_repository *repo,
|
|
135
136
|
git_tree *parent,
|
|
136
137
|
git_oid *note_oid,
|
|
137
138
|
const char *annotated_object_sha,
|
|
@@ -146,7 +147,7 @@ static int manipulate_note_in_tree_r(
|
|
|
146
147
|
int fanout,
|
|
147
148
|
int current_error))
|
|
148
149
|
{
|
|
149
|
-
int error
|
|
150
|
+
int error;
|
|
150
151
|
git_tree *subtree = NULL, *new = NULL;
|
|
151
152
|
char subtree_name[3];
|
|
152
153
|
|
|
@@ -263,18 +264,19 @@ static int insert_note_in_tree_enotfound_cb(git_tree **out,
|
|
|
263
264
|
|
|
264
265
|
static int note_write(git_oid *out,
|
|
265
266
|
git_repository *repo,
|
|
266
|
-
git_signature *author,
|
|
267
|
-
git_signature *committer,
|
|
267
|
+
const git_signature *author,
|
|
268
|
+
const git_signature *committer,
|
|
268
269
|
const char *notes_ref,
|
|
269
270
|
const char *note,
|
|
270
271
|
git_tree *commit_tree,
|
|
271
272
|
const char *target,
|
|
272
|
-
git_commit **parents
|
|
273
|
+
git_commit **parents,
|
|
274
|
+
int allow_note_overwrite)
|
|
273
275
|
{
|
|
274
276
|
int error;
|
|
275
277
|
git_oid oid;
|
|
276
278
|
git_tree *tree = NULL;
|
|
277
|
-
|
|
279
|
+
|
|
278
280
|
// TODO: should we apply filters?
|
|
279
281
|
/* create note object */
|
|
280
282
|
if ((error = git_blob_create_frombuffer(&oid, repo, note, strlen(note))) < 0)
|
|
@@ -282,7 +284,8 @@ static int note_write(git_oid *out,
|
|
|
282
284
|
|
|
283
285
|
if ((error = manipulate_note_in_tree_r(
|
|
284
286
|
&tree, repo, commit_tree, &oid, target, 0,
|
|
285
|
-
|
|
287
|
+
allow_note_overwrite ? insert_note_in_tree_enotfound_cb : insert_note_in_tree_eexists_cb,
|
|
288
|
+
insert_note_in_tree_enotfound_cb)) < 0)
|
|
286
289
|
goto cleanup;
|
|
287
290
|
|
|
288
291
|
if (out)
|
|
@@ -343,14 +346,14 @@ cleanup:
|
|
|
343
346
|
}
|
|
344
347
|
|
|
345
348
|
static int note_remove(git_repository *repo,
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
+
const git_signature *author, const git_signature *committer,
|
|
350
|
+
const char *notes_ref, git_tree *tree,
|
|
351
|
+
const char *target, git_commit **parents)
|
|
349
352
|
{
|
|
350
353
|
int error;
|
|
351
354
|
git_tree *tree_after_removal = NULL;
|
|
352
355
|
git_oid oid;
|
|
353
|
-
|
|
356
|
+
|
|
354
357
|
if ((error = manipulate_note_in_tree_r(
|
|
355
358
|
&tree_after_removal, repo, tree, NULL, target, 0,
|
|
356
359
|
remove_note_in_tree_eexists_cb, remove_note_in_tree_enotfound_cb)) < 0)
|
|
@@ -406,7 +409,7 @@ static int retrieve_note_tree_and_commit(
|
|
|
406
409
|
if ((error = normalize_namespace(notes_ref, repo)) < 0)
|
|
407
410
|
return error;
|
|
408
411
|
|
|
409
|
-
if ((error =
|
|
412
|
+
if ((error = git_reference_name_to_id(&oid, repo, *notes_ref)) < 0)
|
|
410
413
|
return error;
|
|
411
414
|
|
|
412
415
|
if (git_commit_lookup(commit_out, repo, &oid) < 0)
|
|
@@ -442,10 +445,14 @@ cleanup:
|
|
|
442
445
|
}
|
|
443
446
|
|
|
444
447
|
int git_note_create(
|
|
445
|
-
git_oid *out,
|
|
446
|
-
|
|
447
|
-
const
|
|
448
|
-
const
|
|
448
|
+
git_oid *out,
|
|
449
|
+
git_repository *repo,
|
|
450
|
+
const git_signature *author,
|
|
451
|
+
const git_signature *committer,
|
|
452
|
+
const char *notes_ref,
|
|
453
|
+
const git_oid *oid,
|
|
454
|
+
const char *note,
|
|
455
|
+
int allow_note_overwrite)
|
|
449
456
|
{
|
|
450
457
|
int error;
|
|
451
458
|
char *target = NULL;
|
|
@@ -461,7 +468,7 @@ int git_note_create(
|
|
|
461
468
|
goto cleanup;
|
|
462
469
|
|
|
463
470
|
error = note_write(out, repo, author, committer, notes_ref,
|
|
464
|
-
|
|
471
|
+
note, tree, target, &commit, allow_note_overwrite);
|
|
465
472
|
|
|
466
473
|
cleanup:
|
|
467
474
|
git__free(target);
|
|
@@ -471,8 +478,8 @@ cleanup:
|
|
|
471
478
|
}
|
|
472
479
|
|
|
473
480
|
int git_note_remove(git_repository *repo, const char *notes_ref,
|
|
474
|
-
|
|
475
|
-
|
|
481
|
+
const git_signature *author, const git_signature *committer,
|
|
482
|
+
const git_oid *oid)
|
|
476
483
|
{
|
|
477
484
|
int error;
|
|
478
485
|
char *target = NULL;
|
|
@@ -501,13 +508,13 @@ int git_note_default_ref(const char **out, git_repository *repo)
|
|
|
501
508
|
return note_get_default_ref(out, repo);
|
|
502
509
|
}
|
|
503
510
|
|
|
504
|
-
const char * git_note_message(git_note *note)
|
|
511
|
+
const char * git_note_message(const git_note *note)
|
|
505
512
|
{
|
|
506
513
|
assert(note);
|
|
507
514
|
return note->message;
|
|
508
515
|
}
|
|
509
516
|
|
|
510
|
-
const git_oid * git_note_oid(git_note *note)
|
|
517
|
+
const git_oid * git_note_oid(const git_note *note)
|
|
511
518
|
{
|
|
512
519
|
assert(note);
|
|
513
520
|
return ¬e->oid;
|
|
@@ -524,14 +531,11 @@ void git_note_free(git_note *note)
|
|
|
524
531
|
|
|
525
532
|
static int process_entry_path(
|
|
526
533
|
const char* entry_path,
|
|
527
|
-
|
|
528
|
-
int (*note_cb)(git_note_data *note_data, void *payload),
|
|
529
|
-
void *payload)
|
|
534
|
+
git_oid *annotated_object_id)
|
|
530
535
|
{
|
|
531
536
|
int error = -1;
|
|
532
537
|
size_t i = 0, j = 0, len;
|
|
533
538
|
git_buf buf = GIT_BUF_INIT;
|
|
534
|
-
git_note_data note_data;
|
|
535
539
|
|
|
536
540
|
if ((error = git_buf_puts(&buf, entry_path)) < 0)
|
|
537
541
|
goto cleanup;
|
|
@@ -564,14 +568,7 @@ static int process_entry_path(
|
|
|
564
568
|
goto cleanup;
|
|
565
569
|
}
|
|
566
570
|
|
|
567
|
-
|
|
568
|
-
¬e_data.annotated_object_oid, buf.ptr)) < 0)
|
|
569
|
-
goto cleanup;
|
|
570
|
-
|
|
571
|
-
git_oid_cpy(¬e_data.blob_oid, note_oid);
|
|
572
|
-
|
|
573
|
-
if (note_cb(¬e_data, payload))
|
|
574
|
-
error = GIT_EUSER;
|
|
571
|
+
error = git_oid_fromstr(annotated_object_id, buf.ptr);
|
|
575
572
|
|
|
576
573
|
cleanup:
|
|
577
574
|
git_buf_free(&buf);
|
|
@@ -579,32 +576,86 @@ cleanup:
|
|
|
579
576
|
}
|
|
580
577
|
|
|
581
578
|
int git_note_foreach(
|
|
579
|
+
git_repository *repo,
|
|
580
|
+
const char *notes_ref,
|
|
581
|
+
git_note_foreach_cb note_cb,
|
|
582
|
+
void *payload)
|
|
583
|
+
{
|
|
584
|
+
int error;
|
|
585
|
+
git_note_iterator *iter = NULL;
|
|
586
|
+
git_oid note_id, annotated_id;
|
|
587
|
+
|
|
588
|
+
if ((error = git_note_iterator_new(&iter, repo, notes_ref)) < 0)
|
|
589
|
+
return error;
|
|
590
|
+
|
|
591
|
+
while (!(error = git_note_next(¬e_id, &annotated_id, iter))) {
|
|
592
|
+
if (note_cb(¬e_id, &annotated_id, payload)) {
|
|
593
|
+
error = GIT_EUSER;
|
|
594
|
+
break;
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
if (error == GIT_ITEROVER)
|
|
599
|
+
error = 0;
|
|
600
|
+
|
|
601
|
+
git_note_iterator_free(iter);
|
|
602
|
+
return error;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
void git_note_iterator_free(git_note_iterator *it)
|
|
607
|
+
{
|
|
608
|
+
if (it == NULL)
|
|
609
|
+
return;
|
|
610
|
+
|
|
611
|
+
git_iterator_free(it);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
int git_note_iterator_new(
|
|
616
|
+
git_note_iterator **it,
|
|
582
617
|
git_repository *repo,
|
|
583
|
-
const char *notes_ref
|
|
584
|
-
int (*note_cb)(git_note_data *note_data, void *payload),
|
|
585
|
-
void *payload)
|
|
618
|
+
const char *notes_ref)
|
|
586
619
|
{
|
|
587
620
|
int error;
|
|
588
|
-
git_iterator *iter = NULL;
|
|
589
|
-
git_tree *tree = NULL;
|
|
590
621
|
git_commit *commit = NULL;
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
if (!(error = retrieve_note_tree_and_commit(
|
|
594
|
-
&tree, &commit, repo, ¬es_ref)) &&
|
|
595
|
-
!(error = git_iterator_for_tree(&iter, repo, tree)))
|
|
596
|
-
error = git_iterator_current(iter, &item);
|
|
622
|
+
git_tree *tree = NULL;
|
|
597
623
|
|
|
598
|
-
|
|
599
|
-
|
|
624
|
+
error = retrieve_note_tree_and_commit(&tree, &commit, repo, ¬es_ref);
|
|
625
|
+
if (error < 0)
|
|
626
|
+
goto cleanup;
|
|
600
627
|
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
}
|
|
628
|
+
if ((error = git_iterator_for_tree(it, tree, 0, NULL, NULL)) < 0)
|
|
629
|
+
git_iterator_free(*it);
|
|
604
630
|
|
|
605
|
-
|
|
631
|
+
cleanup:
|
|
606
632
|
git_tree_free(tree);
|
|
607
633
|
git_commit_free(commit);
|
|
608
634
|
|
|
609
635
|
return error;
|
|
610
636
|
}
|
|
637
|
+
|
|
638
|
+
int git_note_next(
|
|
639
|
+
git_oid* note_id,
|
|
640
|
+
git_oid* annotated_id,
|
|
641
|
+
git_note_iterator *it)
|
|
642
|
+
{
|
|
643
|
+
int error;
|
|
644
|
+
const git_index_entry *item;
|
|
645
|
+
|
|
646
|
+
if ((error = git_iterator_current(&item, it)) < 0)
|
|
647
|
+
goto exit;
|
|
648
|
+
|
|
649
|
+
if (item != NULL) {
|
|
650
|
+
git_oid_cpy(note_id, &item->oid);
|
|
651
|
+
error = process_entry_path(item->path, annotated_id);
|
|
652
|
+
|
|
653
|
+
if (error >= 0)
|
|
654
|
+
error = git_iterator_advance(NULL, it);
|
|
655
|
+
} else {
|
|
656
|
+
error = GIT_ITEROVER;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
exit:
|
|
660
|
+
return error;
|
|
661
|
+
}
|
data/vendor/libgit2/src/notes.h
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
#include "common.h"
|
|
11
11
|
|
|
12
12
|
#include "git2/oid.h"
|
|
13
|
+
#include "git2/types.h"
|
|
13
14
|
|
|
14
15
|
#define GIT_NOTES_DEFAULT_REF "refs/notes/commits"
|
|
15
16
|
|
data/vendor/libgit2/src/object.c
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (C)
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
3
|
*
|
|
4
4
|
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
5
|
* a Linking Exception. For full terms see the included COPYING file.
|
|
@@ -87,7 +87,7 @@ int git_object__from_odb_object(
|
|
|
87
87
|
git_object *object = NULL;
|
|
88
88
|
|
|
89
89
|
if (type != GIT_OBJ_ANY && type != odb_obj->raw.type) {
|
|
90
|
-
giterr_set(
|
|
90
|
+
giterr_set(GITERR_INVALID, "The requested type does not match the type in the ODB");
|
|
91
91
|
return GIT_ENOTFOUND;
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -161,7 +161,7 @@ int git_object_lookup_prefix(
|
|
|
161
161
|
if (object != NULL) {
|
|
162
162
|
if (type != GIT_OBJ_ANY && type != object->type) {
|
|
163
163
|
git_object_free(object);
|
|
164
|
-
giterr_set(
|
|
164
|
+
giterr_set(GITERR_INVALID, "The requested type does not match the type in ODB");
|
|
165
165
|
return GIT_ENOTFOUND;
|
|
166
166
|
}
|
|
167
167
|
|
|
@@ -304,52 +304,6 @@ size_t git_object__size(git_otype type)
|
|
|
304
304
|
return git_objects_table[type].size;
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
-
int git_object__resolve_to_type(git_object **obj, git_otype type)
|
|
308
|
-
{
|
|
309
|
-
int error = 0;
|
|
310
|
-
git_object *scan, *next;
|
|
311
|
-
|
|
312
|
-
if (type == GIT_OBJ_ANY)
|
|
313
|
-
return 0;
|
|
314
|
-
|
|
315
|
-
scan = *obj;
|
|
316
|
-
|
|
317
|
-
while (!error && scan && git_object_type(scan) != type) {
|
|
318
|
-
|
|
319
|
-
switch (git_object_type(scan)) {
|
|
320
|
-
case GIT_OBJ_COMMIT:
|
|
321
|
-
{
|
|
322
|
-
git_tree *tree = NULL;
|
|
323
|
-
error = git_commit_tree(&tree, (git_commit *)scan);
|
|
324
|
-
next = (git_object *)tree;
|
|
325
|
-
break;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
case GIT_OBJ_TAG:
|
|
329
|
-
error = git_tag_target(&next, (git_tag *)scan);
|
|
330
|
-
break;
|
|
331
|
-
|
|
332
|
-
default:
|
|
333
|
-
giterr_set(GITERR_REFERENCE, "Object does not resolve to type");
|
|
334
|
-
error = -1;
|
|
335
|
-
next = NULL;
|
|
336
|
-
break;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
git_object_free(scan);
|
|
340
|
-
scan = next;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
*obj = scan;
|
|
344
|
-
return error;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
static int peel_error(int error, const char* msg)
|
|
348
|
-
{
|
|
349
|
-
giterr_set(GITERR_INVALID, "The given object cannot be peeled - %s", msg);
|
|
350
|
-
return error;
|
|
351
|
-
}
|
|
352
|
-
|
|
353
307
|
static int dereference_object(git_object **dereferenced, git_object *obj)
|
|
354
308
|
{
|
|
355
309
|
git_otype type = git_object_type(obj);
|
|
@@ -362,31 +316,55 @@ static int dereference_object(git_object **dereferenced, git_object *obj)
|
|
|
362
316
|
return git_tag_target(dereferenced, (git_tag*)obj);
|
|
363
317
|
|
|
364
318
|
case GIT_OBJ_BLOB:
|
|
365
|
-
return
|
|
319
|
+
return GIT_ENOTFOUND;
|
|
366
320
|
|
|
367
321
|
case GIT_OBJ_TREE:
|
|
368
|
-
return
|
|
322
|
+
return GIT_EAMBIGUOUS;
|
|
369
323
|
|
|
370
324
|
default:
|
|
371
|
-
return
|
|
325
|
+
return GIT_EINVALIDSPEC;
|
|
372
326
|
}
|
|
373
327
|
}
|
|
374
328
|
|
|
329
|
+
static int peel_error(int error, const git_oid *oid, git_otype type)
|
|
330
|
+
{
|
|
331
|
+
const char *type_name;
|
|
332
|
+
char hex_oid[GIT_OID_HEXSZ + 1];
|
|
333
|
+
|
|
334
|
+
type_name = git_object_type2string(type);
|
|
335
|
+
|
|
336
|
+
git_oid_fmt(hex_oid, oid);
|
|
337
|
+
hex_oid[GIT_OID_HEXSZ] = '\0';
|
|
338
|
+
|
|
339
|
+
giterr_set(GITERR_OBJECT, "The git_object of id '%s' can not be "
|
|
340
|
+
"successfully peeled into a %s (git_otype=%i).", hex_oid, type_name, type);
|
|
341
|
+
|
|
342
|
+
return error;
|
|
343
|
+
}
|
|
344
|
+
|
|
375
345
|
int git_object_peel(
|
|
376
346
|
git_object **peeled,
|
|
377
|
-
git_object *object,
|
|
347
|
+
const git_object *object,
|
|
378
348
|
git_otype target_type)
|
|
379
349
|
{
|
|
380
350
|
git_object *source, *deref = NULL;
|
|
351
|
+
int error;
|
|
352
|
+
|
|
353
|
+
if (target_type != GIT_OBJ_TAG &&
|
|
354
|
+
target_type != GIT_OBJ_COMMIT &&
|
|
355
|
+
target_type != GIT_OBJ_TREE &&
|
|
356
|
+
target_type != GIT_OBJ_BLOB &&
|
|
357
|
+
target_type != GIT_OBJ_ANY)
|
|
358
|
+
return GIT_EINVALIDSPEC;
|
|
381
359
|
|
|
382
360
|
assert(object && peeled);
|
|
383
361
|
|
|
384
362
|
if (git_object_type(object) == target_type)
|
|
385
|
-
return
|
|
363
|
+
return git_object_dup(peeled, (git_object *)object);
|
|
386
364
|
|
|
387
|
-
source = object;
|
|
365
|
+
source = (git_object *)object;
|
|
388
366
|
|
|
389
|
-
while (!dereference_object(&deref, source)) {
|
|
367
|
+
while (!(error = dereference_object(&deref, source))) {
|
|
390
368
|
|
|
391
369
|
if (source != object)
|
|
392
370
|
git_object_free(source);
|
|
@@ -411,5 +389,16 @@ int git_object_peel(
|
|
|
411
389
|
git_object_free(source);
|
|
412
390
|
|
|
413
391
|
git_object_free(deref);
|
|
414
|
-
|
|
392
|
+
|
|
393
|
+
if (error)
|
|
394
|
+
error = peel_error(error, git_object_id(object), target_type);
|
|
395
|
+
|
|
396
|
+
return error;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
int git_object_dup(git_object **dest, git_object *source)
|
|
400
|
+
{
|
|
401
|
+
git_cached_obj_incref(source);
|
|
402
|
+
*dest = source;
|
|
403
|
+
return 0;
|
|
415
404
|
}
|