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/global.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.
|
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
#define INCLUDE_global_h__
|
|
9
9
|
|
|
10
10
|
#include "mwindow.h"
|
|
11
|
+
#include "hash.h"
|
|
12
|
+
|
|
13
|
+
#if defined(GIT_THREADS) && defined(_MSC_VER)
|
|
14
|
+
# define GIT_MEMORY_BARRIER MemoryBarrier()
|
|
15
|
+
#elif defined(GIT_THREADS)
|
|
16
|
+
# define GIT_MEMORY_BARRIER __sync_synchronize()
|
|
17
|
+
#else
|
|
18
|
+
# define GIT_MEMORY_BARRIER /* noop */
|
|
19
|
+
#endif
|
|
11
20
|
|
|
12
21
|
typedef struct {
|
|
13
22
|
git_error *last_error;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
6
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#include "revwalk.h"
|
|
10
|
+
#include "merge.h"
|
|
11
|
+
#include "git2/graph.h"
|
|
12
|
+
|
|
13
|
+
static int interesting(git_pqueue *list, git_commit_list *roots)
|
|
14
|
+
{
|
|
15
|
+
unsigned int i;
|
|
16
|
+
/* element 0 isn't used - we need to start at 1 */
|
|
17
|
+
for (i = 1; i < list->size; i++) {
|
|
18
|
+
git_commit_list_node *commit = list->d[i];
|
|
19
|
+
if ((commit->flags & STALE) == 0)
|
|
20
|
+
return 1;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
while(roots) {
|
|
24
|
+
if ((roots->item->flags & STALE) == 0)
|
|
25
|
+
return 1;
|
|
26
|
+
roots = roots->next;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
static int mark_parents(git_revwalk *walk, git_commit_list_node *one,
|
|
33
|
+
git_commit_list_node *two)
|
|
34
|
+
{
|
|
35
|
+
unsigned int i;
|
|
36
|
+
git_commit_list *roots = NULL;
|
|
37
|
+
git_pqueue list;
|
|
38
|
+
|
|
39
|
+
/* if the commit is repeated, we have a our merge base already */
|
|
40
|
+
if (one == two) {
|
|
41
|
+
one->flags |= PARENT1 | PARENT2 | RESULT;
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (git_pqueue_init(&list, 2, git_commit_list_time_cmp) < 0)
|
|
46
|
+
return -1;
|
|
47
|
+
|
|
48
|
+
if (git_commit_list_parse(walk, one) < 0)
|
|
49
|
+
goto on_error;
|
|
50
|
+
one->flags |= PARENT1;
|
|
51
|
+
if (git_pqueue_insert(&list, one) < 0)
|
|
52
|
+
goto on_error;
|
|
53
|
+
|
|
54
|
+
if (git_commit_list_parse(walk, two) < 0)
|
|
55
|
+
goto on_error;
|
|
56
|
+
two->flags |= PARENT2;
|
|
57
|
+
if (git_pqueue_insert(&list, two) < 0)
|
|
58
|
+
goto on_error;
|
|
59
|
+
|
|
60
|
+
/* as long as there are non-STALE commits */
|
|
61
|
+
while (interesting(&list, roots)) {
|
|
62
|
+
git_commit_list_node *commit;
|
|
63
|
+
int flags;
|
|
64
|
+
|
|
65
|
+
commit = git_pqueue_pop(&list);
|
|
66
|
+
if (commit == NULL)
|
|
67
|
+
break;
|
|
68
|
+
|
|
69
|
+
flags = commit->flags & (PARENT1 | PARENT2 | STALE);
|
|
70
|
+
if (flags == (PARENT1 | PARENT2)) {
|
|
71
|
+
if (!(commit->flags & RESULT))
|
|
72
|
+
commit->flags |= RESULT;
|
|
73
|
+
/* we mark the parents of a merge stale */
|
|
74
|
+
flags |= STALE;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
for (i = 0; i < commit->out_degree; i++) {
|
|
78
|
+
git_commit_list_node *p = commit->parents[i];
|
|
79
|
+
if ((p->flags & flags) == flags)
|
|
80
|
+
continue;
|
|
81
|
+
|
|
82
|
+
if (git_commit_list_parse(walk, p) < 0)
|
|
83
|
+
goto on_error;
|
|
84
|
+
|
|
85
|
+
p->flags |= flags;
|
|
86
|
+
if (git_pqueue_insert(&list, p) < 0)
|
|
87
|
+
goto on_error;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* Keep track of root commits, to make sure the path gets marked */
|
|
91
|
+
if (commit->out_degree == 0) {
|
|
92
|
+
if (git_commit_list_insert(commit, &roots) == NULL)
|
|
93
|
+
goto on_error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
git_commit_list_free(&roots);
|
|
98
|
+
git_pqueue_free(&list);
|
|
99
|
+
return 0;
|
|
100
|
+
|
|
101
|
+
on_error:
|
|
102
|
+
git_commit_list_free(&roots);
|
|
103
|
+
git_pqueue_free(&list);
|
|
104
|
+
return -1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
static int ahead_behind(git_commit_list_node *one, git_commit_list_node *two,
|
|
109
|
+
size_t *ahead, size_t *behind)
|
|
110
|
+
{
|
|
111
|
+
git_commit_list_node *commit;
|
|
112
|
+
git_pqueue pq;
|
|
113
|
+
int i;
|
|
114
|
+
*ahead = 0;
|
|
115
|
+
*behind = 0;
|
|
116
|
+
|
|
117
|
+
if (git_pqueue_init(&pq, 2, git_commit_list_time_cmp) < 0)
|
|
118
|
+
return -1;
|
|
119
|
+
if (git_pqueue_insert(&pq, one) < 0)
|
|
120
|
+
goto on_error;
|
|
121
|
+
if (git_pqueue_insert(&pq, two) < 0)
|
|
122
|
+
goto on_error;
|
|
123
|
+
|
|
124
|
+
while ((commit = git_pqueue_pop(&pq)) != NULL) {
|
|
125
|
+
if (commit->flags & RESULT ||
|
|
126
|
+
(commit->flags & (PARENT1 | PARENT2)) == (PARENT1 | PARENT2))
|
|
127
|
+
continue;
|
|
128
|
+
else if (commit->flags & PARENT1)
|
|
129
|
+
(*behind)++;
|
|
130
|
+
else if (commit->flags & PARENT2)
|
|
131
|
+
(*ahead)++;
|
|
132
|
+
|
|
133
|
+
for (i = 0; i < commit->out_degree; i++) {
|
|
134
|
+
git_commit_list_node *p = commit->parents[i];
|
|
135
|
+
if (git_pqueue_insert(&pq, p) < 0)
|
|
136
|
+
return -1;
|
|
137
|
+
}
|
|
138
|
+
commit->flags |= RESULT;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
git_pqueue_free(&pq);
|
|
142
|
+
return 0;
|
|
143
|
+
|
|
144
|
+
on_error:
|
|
145
|
+
git_pqueue_free(&pq);
|
|
146
|
+
return -1;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
int git_graph_ahead_behind(size_t *ahead, size_t *behind, git_repository *repo,
|
|
150
|
+
const git_oid *local, const git_oid *upstream)
|
|
151
|
+
{
|
|
152
|
+
git_revwalk *walk;
|
|
153
|
+
git_commit_list_node *commit_u, *commit_l;
|
|
154
|
+
|
|
155
|
+
if (git_revwalk_new(&walk, repo) < 0)
|
|
156
|
+
return -1;
|
|
157
|
+
|
|
158
|
+
commit_u = git_revwalk__commit_lookup(walk, upstream);
|
|
159
|
+
if (commit_u == NULL)
|
|
160
|
+
goto on_error;
|
|
161
|
+
|
|
162
|
+
commit_l = git_revwalk__commit_lookup(walk, local);
|
|
163
|
+
if (commit_l == NULL)
|
|
164
|
+
goto on_error;
|
|
165
|
+
|
|
166
|
+
if (mark_parents(walk, commit_l, commit_u) < 0)
|
|
167
|
+
goto on_error;
|
|
168
|
+
if (ahead_behind(commit_l, commit_u, ahead, behind) < 0)
|
|
169
|
+
goto on_error;
|
|
170
|
+
|
|
171
|
+
git_revwalk_free(walk);
|
|
172
|
+
|
|
173
|
+
return 0;
|
|
174
|
+
|
|
175
|
+
on_error:
|
|
176
|
+
git_revwalk_free(walk);
|
|
177
|
+
return -1;
|
|
178
|
+
}
|
data/vendor/libgit2/src/hash.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.
|
|
@@ -8,67 +8,40 @@
|
|
|
8
8
|
#include "common.h"
|
|
9
9
|
#include "hash.h"
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
# include "ppc/sha1.h"
|
|
13
|
-
#else
|
|
14
|
-
# include "sha1.h"
|
|
15
|
-
#endif
|
|
16
|
-
|
|
17
|
-
struct git_hash_ctx {
|
|
18
|
-
SHA_CTX c;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
git_hash_ctx *git_hash_new_ctx(void)
|
|
11
|
+
int git_hash_buf(git_oid *out, const void *data, size_t len)
|
|
22
12
|
{
|
|
23
|
-
git_hash_ctx
|
|
24
|
-
|
|
25
|
-
if (!ctx)
|
|
26
|
-
return NULL;
|
|
27
|
-
|
|
28
|
-
SHA1_Init(&ctx->c);
|
|
13
|
+
git_hash_ctx ctx;
|
|
14
|
+
int error = 0;
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
|
|
16
|
+
if (git_hash_ctx_init(&ctx) < 0)
|
|
17
|
+
return -1;
|
|
32
18
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
git__free(ctx);
|
|
36
|
-
}
|
|
19
|
+
if ((error = git_hash_update(&ctx, data, len)) >= 0)
|
|
20
|
+
error = git_hash_final(out, &ctx);
|
|
37
21
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
SHA1_Init(&ctx->c);
|
|
22
|
+
git_hash_ctx_cleanup(&ctx);
|
|
23
|
+
|
|
24
|
+
return error;
|
|
42
25
|
}
|
|
43
26
|
|
|
44
|
-
|
|
27
|
+
int git_hash_vec(git_oid *out, git_buf_vec *vec, size_t n)
|
|
45
28
|
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
git_hash_ctx ctx;
|
|
30
|
+
size_t i;
|
|
31
|
+
int error = 0;
|
|
49
32
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
assert(ctx);
|
|
53
|
-
SHA1_Final(out->id, &ctx->c);
|
|
54
|
-
}
|
|
33
|
+
if (git_hash_ctx_init(&ctx) < 0)
|
|
34
|
+
return -1;
|
|
55
35
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
36
|
+
for (i = 0; i < n; i++) {
|
|
37
|
+
if ((error = git_hash_update(&ctx, vec[i].data, vec[i].len)) < 0)
|
|
38
|
+
goto done;
|
|
39
|
+
}
|
|
59
40
|
|
|
60
|
-
|
|
61
|
-
SHA1_Update(&c, data, len);
|
|
62
|
-
SHA1_Final(out->id, &c);
|
|
63
|
-
}
|
|
41
|
+
error = git_hash_final(out, &ctx);
|
|
64
42
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
SHA_CTX c;
|
|
68
|
-
size_t i;
|
|
43
|
+
done:
|
|
44
|
+
git_hash_ctx_cleanup(&ctx);
|
|
69
45
|
|
|
70
|
-
|
|
71
|
-
for (i = 0; i < n; i++)
|
|
72
|
-
SHA1_Update(&c, vec[i].data, vec[i].len);
|
|
73
|
-
SHA1_Final(out->id, &c);
|
|
46
|
+
return error;
|
|
74
47
|
}
|
data/vendor/libgit2/src/hash.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.
|
|
@@ -9,21 +9,33 @@
|
|
|
9
9
|
|
|
10
10
|
#include "git2/oid.h"
|
|
11
11
|
|
|
12
|
+
typedef struct git_hash_prov git_hash_prov;
|
|
12
13
|
typedef struct git_hash_ctx git_hash_ctx;
|
|
13
14
|
|
|
15
|
+
int git_hash_global_init(void);
|
|
16
|
+
void git_hash_global_shutdown(void);
|
|
17
|
+
|
|
18
|
+
int git_hash_ctx_init(git_hash_ctx *ctx);
|
|
19
|
+
void git_hash_ctx_cleanup(git_hash_ctx *ctx);
|
|
20
|
+
|
|
21
|
+
#if defined(OPENSSL_SHA1)
|
|
22
|
+
# include "hash/hash_openssl.h"
|
|
23
|
+
#elif defined(WIN32_SHA1)
|
|
24
|
+
# include "hash/hash_win32.h"
|
|
25
|
+
#else
|
|
26
|
+
# include "hash/hash_generic.h"
|
|
27
|
+
#endif
|
|
28
|
+
|
|
14
29
|
typedef struct {
|
|
15
30
|
void *data;
|
|
16
31
|
size_t len;
|
|
17
32
|
} git_buf_vec;
|
|
18
33
|
|
|
19
|
-
git_hash_ctx *
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
void git_hash_init(git_hash_ctx *c);
|
|
23
|
-
void git_hash_update(git_hash_ctx *c, const void *data, size_t len);
|
|
24
|
-
void git_hash_final(git_oid *out, git_hash_ctx *c);
|
|
34
|
+
int git_hash_init(git_hash_ctx *c);
|
|
35
|
+
int git_hash_update(git_hash_ctx *c, const void *data, size_t len);
|
|
36
|
+
int git_hash_final(git_oid *out, git_hash_ctx *c);
|
|
25
37
|
|
|
26
|
-
|
|
27
|
-
|
|
38
|
+
int git_hash_buf(git_oid *out, const void *data, size_t len);
|
|
39
|
+
int git_hash_vec(git_oid *out, git_buf_vec *vec, size_t n);
|
|
28
40
|
|
|
29
41
|
#endif /* INCLUDE_hash_h__ */
|
|
@@ -1,12 +1,13 @@
|
|
|
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.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
#include "common.h"
|
|
9
|
-
#include "
|
|
9
|
+
#include "hash.h"
|
|
10
|
+
#include "hash/hash_generic.h"
|
|
10
11
|
|
|
11
12
|
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
|
|
12
13
|
|
|
@@ -112,7 +113,7 @@
|
|
|
112
113
|
#define T_40_59(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, ((B&C)+(D&(B^C))) , 0x8f1bbcdc, A, B, C, D, E )
|
|
113
114
|
#define T_60_79(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0xca62c1d6, A, B, C, D, E )
|
|
114
115
|
|
|
115
|
-
static void
|
|
116
|
+
static void hash__block(git_hash_ctx *ctx, const unsigned int *data)
|
|
116
117
|
{
|
|
117
118
|
unsigned int A,B,C,D,E;
|
|
118
119
|
unsigned int array[16];
|
|
@@ -220,7 +221,7 @@ static void blk_SHA1_Block(blk_SHA_CTX *ctx, const unsigned int *data)
|
|
|
220
221
|
ctx->H[4] += E;
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
|
|
224
|
+
int git_hash_init(git_hash_ctx *ctx)
|
|
224
225
|
{
|
|
225
226
|
ctx->size = 0;
|
|
226
227
|
|
|
@@ -230,9 +231,11 @@ void git__blk_SHA1_Init(blk_SHA_CTX *ctx)
|
|
|
230
231
|
ctx->H[2] = 0x98badcfe;
|
|
231
232
|
ctx->H[3] = 0x10325476;
|
|
232
233
|
ctx->H[4] = 0xc3d2e1f0;
|
|
234
|
+
|
|
235
|
+
return 0;
|
|
233
236
|
}
|
|
234
237
|
|
|
235
|
-
|
|
238
|
+
int git_hash_update(git_hash_ctx *ctx, const void *data, size_t len)
|
|
236
239
|
{
|
|
237
240
|
unsigned int lenW = ctx->size & 63;
|
|
238
241
|
|
|
@@ -248,19 +251,21 @@ void git__blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, size_t len)
|
|
|
248
251
|
len -= left;
|
|
249
252
|
data = ((const char *)data + left);
|
|
250
253
|
if (lenW)
|
|
251
|
-
return;
|
|
252
|
-
|
|
254
|
+
return 0;
|
|
255
|
+
hash__block(ctx, ctx->W);
|
|
253
256
|
}
|
|
254
257
|
while (len >= 64) {
|
|
255
|
-
|
|
258
|
+
hash__block(ctx, data);
|
|
256
259
|
data = ((const char *)data + 64);
|
|
257
260
|
len -= 64;
|
|
258
261
|
}
|
|
259
262
|
if (len)
|
|
260
263
|
memcpy(ctx->W, data, len);
|
|
264
|
+
|
|
265
|
+
return 0;
|
|
261
266
|
}
|
|
262
267
|
|
|
263
|
-
|
|
268
|
+
int git_hash_final(git_oid *out, git_hash_ctx *ctx)
|
|
264
269
|
{
|
|
265
270
|
static const unsigned char pad[64] = { 0x80 };
|
|
266
271
|
unsigned int padlen[2];
|
|
@@ -271,10 +276,13 @@ void git__blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx)
|
|
|
271
276
|
padlen[1] = htonl((uint32_t)(ctx->size << 3));
|
|
272
277
|
|
|
273
278
|
i = ctx->size & 63;
|
|
274
|
-
|
|
275
|
-
|
|
279
|
+
git_hash_update(ctx, pad, 1+ (63 & (55 - i)));
|
|
280
|
+
git_hash_update(ctx, padlen, 8);
|
|
276
281
|
|
|
277
282
|
/* Output hash */
|
|
278
283
|
for (i = 0; i < 5; i++)
|
|
279
|
-
put_be32(
|
|
284
|
+
put_be32(out->id + i*4, ctx->H[i]);
|
|
285
|
+
|
|
286
|
+
return 0;
|
|
280
287
|
}
|
|
288
|
+
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) the libgit2 contributors. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of libgit2, distributed under the GNU GPL v2 with
|
|
5
|
+
* a Linking Exception. For full terms see the included COPYING file.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#ifndef INCLUDE_hash_generic_h__
|
|
9
|
+
#define INCLUDE_hash_generic_h__
|
|
10
|
+
|
|
11
|
+
#include "hash.h"
|
|
12
|
+
|
|
13
|
+
struct git_hash_ctx {
|
|
14
|
+
unsigned long long size;
|
|
15
|
+
unsigned int H[5];
|
|
16
|
+
unsigned int W[16];
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
#define git_hash_global_init() 0
|
|
20
|
+
#define git_hash_global_shutdown() /* noop */
|
|
21
|
+
#define git_hash_ctx_init(ctx) git_hash_init(ctx)
|
|
22
|
+
#define git_hash_ctx_cleanup(ctx)
|
|
23
|
+
|
|
24
|
+
#endif /* INCLUDE_hash_generic_h__ */
|