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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* The MIT License
|
|
3
3
|
*
|
|
4
|
-
* Copyright (c)
|
|
4
|
+
* Copyright (c) 2013 GitHub, Inc
|
|
5
5
|
*
|
|
6
6
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
7
|
* of this software and associated documentation files (the "Software"), to deal
|
|
@@ -40,29 +40,6 @@ VALUE rugged_ref_new(VALUE klass, VALUE owner, git_reference *ref)
|
|
|
40
40
|
return rb_ref;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
/*
|
|
44
|
-
* call-seq:
|
|
45
|
-
* Reference.pack_all(repository)
|
|
46
|
-
*
|
|
47
|
-
* Pack all the references in +repository+ into the +packed_refs+
|
|
48
|
-
* file.
|
|
49
|
-
*/
|
|
50
|
-
static VALUE rb_git_ref_packall(VALUE klass, VALUE rb_repo)
|
|
51
|
-
{
|
|
52
|
-
git_repository *repo;
|
|
53
|
-
int error;
|
|
54
|
-
|
|
55
|
-
if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
|
|
56
|
-
rb_raise(rb_eTypeError, "Expecting a Rugged::Repository instance");
|
|
57
|
-
|
|
58
|
-
Data_Get_Struct(rb_repo, git_repository, repo);
|
|
59
|
-
|
|
60
|
-
error = git_reference_packall(repo);
|
|
61
|
-
rugged_exception_check(error);
|
|
62
|
-
|
|
63
|
-
return Qnil;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
43
|
static int ref_foreach__block(const char *ref_name, void *opaque)
|
|
67
44
|
{
|
|
68
45
|
rb_funcall((VALUE)opaque, rb_intern("call"), 1, rugged_str_new2(ref_name, rb_utf8_encoding()));
|
|
@@ -71,11 +48,12 @@ static int ref_foreach__block(const char *ref_name, void *opaque)
|
|
|
71
48
|
|
|
72
49
|
/*
|
|
73
50
|
* call-seq:
|
|
74
|
-
* Reference.each(repository, filter = :all) { |ref_name| block }
|
|
75
|
-
* Reference.each(repository, filter = :all) -> Iterator
|
|
51
|
+
* Reference.each(repository, filter = :all, glob = nil) { |ref_name| block }
|
|
52
|
+
* Reference.each(repository, filter = :all, glob = nil) -> Iterator
|
|
76
53
|
*
|
|
77
54
|
* Iterate through all the references in +repository+. Iteration can be
|
|
78
|
-
* optionally filtered to only +:
|
|
55
|
+
* optionally filtered to only +:oid+ or +:symbolic+ references, or to
|
|
56
|
+
* the ones matching the given +glob+, a standard Unix filename glob.
|
|
79
57
|
*
|
|
80
58
|
* The given block will be called once with the name of each reference.
|
|
81
59
|
* If no block is given, an iterator will be returned.
|
|
@@ -83,13 +61,13 @@ static int ref_foreach__block(const char *ref_name, void *opaque)
|
|
|
83
61
|
static VALUE rb_git_ref_each(int argc, VALUE *argv, VALUE self)
|
|
84
62
|
{
|
|
85
63
|
git_repository *repo;
|
|
86
|
-
int error, flags =
|
|
87
|
-
VALUE rb_repo, rb_list, rb_block;
|
|
64
|
+
int error, flags = GIT_REF_LISTALL;
|
|
65
|
+
VALUE rb_repo, rb_list, rb_glob, rb_block;
|
|
88
66
|
|
|
89
|
-
rb_scan_args(argc, argv, "
|
|
67
|
+
rb_scan_args(argc, argv, "12&", &rb_repo, &rb_list, &rb_glob, &rb_block);
|
|
90
68
|
|
|
91
69
|
if (!rb_block_given_p())
|
|
92
|
-
return rb_funcall(self, rb_intern("to_enum"),
|
|
70
|
+
return rb_funcall(self, rb_intern("to_enum"), 4, CSTR2SYM("each"), rb_repo, rb_list, rb_glob);
|
|
93
71
|
|
|
94
72
|
if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
|
|
95
73
|
rb_raise(rb_eTypeError, "Expecting a Rugged::Repository instance");
|
|
@@ -104,15 +82,23 @@ static VALUE rb_git_ref_each(int argc, VALUE *argv, VALUE self)
|
|
|
104
82
|
|
|
105
83
|
if (list == rb_intern("all"))
|
|
106
84
|
flags = GIT_REF_LISTALL;
|
|
107
|
-
else if (list == rb_intern("
|
|
108
|
-
flags = GIT_REF_OID
|
|
85
|
+
else if (list == rb_intern("oid"))
|
|
86
|
+
flags = GIT_REF_OID;
|
|
109
87
|
else if (list == rb_intern("symbolic"))
|
|
110
|
-
flags = GIT_REF_SYMBOLIC
|
|
88
|
+
flags = GIT_REF_SYMBOLIC;
|
|
89
|
+
else {
|
|
90
|
+
rb_raise(rb_eArgError, "Invalid list value (must be `all`, `oid` or `symbolic`)");
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!NIL_P(rb_glob)) {
|
|
95
|
+
Check_Type(rb_glob, T_STRING);
|
|
96
|
+
error = git_reference_foreach_glob(repo,
|
|
97
|
+
StringValueCStr(rb_glob), flags, &ref_foreach__block, (void *)rb_block);
|
|
111
98
|
} else {
|
|
112
|
-
|
|
99
|
+
error = git_reference_foreach(repo, flags, &ref_foreach__block, (void *)rb_block);
|
|
113
100
|
}
|
|
114
101
|
|
|
115
|
-
error = git_reference_foreach(repo, flags, &ref_foreach__block, (void *)rb_block);
|
|
116
102
|
rugged_exception_check(error);
|
|
117
103
|
return Qnil;
|
|
118
104
|
}
|
|
@@ -159,12 +145,13 @@ static VALUE rb_git_ref_exist(VALUE klass, VALUE rb_repo, VALUE rb_name)
|
|
|
159
145
|
Check_Type(rb_name, T_STRING);
|
|
160
146
|
|
|
161
147
|
error = git_reference_lookup(&ref, repo, StringValueCStr(rb_name));
|
|
148
|
+
git_reference_free(ref);
|
|
149
|
+
|
|
162
150
|
if (error == GIT_ENOTFOUND)
|
|
163
151
|
return Qfalse;
|
|
164
152
|
else
|
|
165
153
|
rugged_exception_check(error);
|
|
166
154
|
|
|
167
|
-
git_reference_free(ref);
|
|
168
155
|
return Qtrue;
|
|
169
156
|
}
|
|
170
157
|
|
|
@@ -198,15 +185,14 @@ static VALUE rb_git_ref_create(int argc, VALUE *argv, VALUE klass)
|
|
|
198
185
|
force = rugged_parse_bool(rb_force);
|
|
199
186
|
|
|
200
187
|
if (git_oid_fromstr(&oid, StringValueCStr(rb_target)) == GIT_OK) {
|
|
201
|
-
error =
|
|
188
|
+
error = git_reference_create(
|
|
202
189
|
&ref, repo, StringValueCStr(rb_name), &oid, force);
|
|
203
190
|
} else {
|
|
204
|
-
error =
|
|
205
|
-
&ref, repo, StringValueCStr(rb_name),
|
|
191
|
+
error = git_reference_symbolic_create(
|
|
192
|
+
&ref, repo, StringValueCStr(rb_name), StringValueCStr(rb_target), force);
|
|
206
193
|
}
|
|
207
194
|
|
|
208
195
|
rugged_exception_check(error);
|
|
209
|
-
|
|
210
196
|
return rugged_ref_new(klass, rb_repo, ref);
|
|
211
197
|
}
|
|
212
198
|
|
|
@@ -227,19 +213,18 @@ static VALUE rb_git_ref_create(int argc, VALUE *argv, VALUE klass)
|
|
|
227
213
|
static VALUE rb_git_ref_target(VALUE self)
|
|
228
214
|
{
|
|
229
215
|
git_reference *ref;
|
|
230
|
-
|
|
231
|
-
RUGGED_UNPACK_REFERENCE(self, ref);
|
|
216
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
232
217
|
|
|
233
218
|
if (git_reference_type(ref) == GIT_REF_OID) {
|
|
234
|
-
return rugged_create_oid(
|
|
219
|
+
return rugged_create_oid(git_reference_target(ref));
|
|
235
220
|
} else {
|
|
236
|
-
return rugged_str_new2(
|
|
221
|
+
return rugged_str_new2(git_reference_symbolic_target(ref), rb_utf8_encoding());
|
|
237
222
|
}
|
|
238
223
|
}
|
|
239
224
|
|
|
240
225
|
/*
|
|
241
226
|
* call-seq:
|
|
242
|
-
* reference.
|
|
227
|
+
* reference.set_target(t) -> Reference
|
|
243
228
|
*
|
|
244
229
|
* Set the target of a reference. If +reference+ is a direct reference,
|
|
245
230
|
* the new target must be a +String+ representing a SHA1 OID.
|
|
@@ -247,18 +232,22 @@ static VALUE rb_git_ref_target(VALUE self)
|
|
|
247
232
|
* If +reference+ is symbolic, the new target must be a +String+ with
|
|
248
233
|
* the name of another reference.
|
|
249
234
|
*
|
|
235
|
+
* The original reference is unaltered; a new reference object is
|
|
236
|
+
* returned with the new target, and the changes are persisted to
|
|
237
|
+
* disk.
|
|
238
|
+
*
|
|
250
239
|
* r1.type #=> :symbolic
|
|
251
|
-
* r1.
|
|
240
|
+
* r1.set_target("refs/heads/master") #=> <Reference>
|
|
252
241
|
*
|
|
253
242
|
* r2.type #=> :direct
|
|
254
|
-
* r2.
|
|
243
|
+
* r2.set_target("de5ba987198bcf2518885f0fc1350e5172cded78") #=> <Reference>
|
|
255
244
|
*/
|
|
256
245
|
static VALUE rb_git_ref_set_target(VALUE self, VALUE rb_target)
|
|
257
246
|
{
|
|
258
|
-
git_reference *ref;
|
|
247
|
+
git_reference *ref, *out;
|
|
259
248
|
int error;
|
|
260
249
|
|
|
261
|
-
|
|
250
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
262
251
|
Check_Type(rb_target, T_STRING);
|
|
263
252
|
|
|
264
253
|
if (git_reference_type(ref) == GIT_REF_OID) {
|
|
@@ -267,13 +256,13 @@ static VALUE rb_git_ref_set_target(VALUE self, VALUE rb_target)
|
|
|
267
256
|
error = git_oid_fromstr(&target, StringValueCStr(rb_target));
|
|
268
257
|
rugged_exception_check(error);
|
|
269
258
|
|
|
270
|
-
error =
|
|
259
|
+
error = git_reference_set_target(&out, ref, &target);
|
|
271
260
|
} else {
|
|
272
|
-
error =
|
|
261
|
+
error = git_reference_symbolic_set_target(&out, ref, StringValueCStr(rb_target));
|
|
273
262
|
}
|
|
274
263
|
|
|
275
264
|
rugged_exception_check(error);
|
|
276
|
-
return
|
|
265
|
+
return rugged_ref_new(rb_cRuggedReference, rugged_owner(self), out);
|
|
277
266
|
}
|
|
278
267
|
|
|
279
268
|
/*
|
|
@@ -285,7 +274,8 @@ static VALUE rb_git_ref_set_target(VALUE self, VALUE rb_target)
|
|
|
285
274
|
static VALUE rb_git_ref_type(VALUE self)
|
|
286
275
|
{
|
|
287
276
|
git_reference *ref;
|
|
288
|
-
|
|
277
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
278
|
+
|
|
289
279
|
switch (git_reference_type(ref)) {
|
|
290
280
|
case GIT_REF_OID:
|
|
291
281
|
return CSTR2SYM("direct");
|
|
@@ -296,42 +286,6 @@ static VALUE rb_git_ref_type(VALUE self)
|
|
|
296
286
|
}
|
|
297
287
|
}
|
|
298
288
|
|
|
299
|
-
/*
|
|
300
|
-
* call-seq:
|
|
301
|
-
* reference.packed? -> true or false
|
|
302
|
-
*
|
|
303
|
-
* Return whether the reference is packed or not
|
|
304
|
-
*/
|
|
305
|
-
static VALUE rb_git_ref_packed(VALUE self)
|
|
306
|
-
{
|
|
307
|
-
git_reference *ref;
|
|
308
|
-
RUGGED_UNPACK_REFERENCE(self, ref);
|
|
309
|
-
|
|
310
|
-
return git_reference_is_packed(ref) ? Qtrue : Qfalse;
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/*
|
|
314
|
-
* call-seq:
|
|
315
|
-
* reference.reload!
|
|
316
|
-
*
|
|
317
|
-
* Reload the reference from disk
|
|
318
|
-
*/
|
|
319
|
-
static VALUE rb_git_ref_reload(VALUE self)
|
|
320
|
-
{
|
|
321
|
-
int error;
|
|
322
|
-
git_reference *ref;
|
|
323
|
-
RUGGED_UNPACK_REFERENCE(self, ref);
|
|
324
|
-
|
|
325
|
-
error = git_reference_reload(ref);
|
|
326
|
-
|
|
327
|
-
/* If reload fails, the reference is invalidated */
|
|
328
|
-
if (error < GIT_OK)
|
|
329
|
-
ref = NULL;
|
|
330
|
-
|
|
331
|
-
rugged_exception_check(error);
|
|
332
|
-
return Qnil;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
289
|
/*
|
|
336
290
|
* call-seq:
|
|
337
291
|
* reference.name -> name
|
|
@@ -343,7 +297,7 @@ static VALUE rb_git_ref_reload(VALUE self)
|
|
|
343
297
|
static VALUE rb_git_ref_name(VALUE self)
|
|
344
298
|
{
|
|
345
299
|
git_reference *ref;
|
|
346
|
-
|
|
300
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
347
301
|
return rugged_str_new2(git_reference_name(ref), rb_utf8_encoding());
|
|
348
302
|
}
|
|
349
303
|
|
|
@@ -366,7 +320,7 @@ static VALUE rb_git_ref_resolve(VALUE self)
|
|
|
366
320
|
git_reference *resolved;
|
|
367
321
|
int error;
|
|
368
322
|
|
|
369
|
-
|
|
323
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
370
324
|
|
|
371
325
|
error = git_reference_resolve(&resolved, ref);
|
|
372
326
|
rugged_exception_check(error);
|
|
@@ -381,67 +335,67 @@ static VALUE rb_git_ref_resolve(VALUE self)
|
|
|
381
335
|
* Change the name of a reference. If +force+ is +true+, any previously
|
|
382
336
|
* existing references will be overwritten when renaming.
|
|
383
337
|
*
|
|
338
|
+
* Return a new reference object with the new object
|
|
339
|
+
*
|
|
384
340
|
* reference.name #=> 'refs/heads/master'
|
|
385
|
-
* reference.rename('refs/heads/development') #=>
|
|
386
|
-
*
|
|
341
|
+
* new_ref = reference.rename('refs/heads/development') #=> <Reference>
|
|
342
|
+
* new_ref.name #=> 'refs/heads/development'
|
|
387
343
|
*/
|
|
388
344
|
static VALUE rb_git_ref_rename(int argc, VALUE *argv, VALUE self)
|
|
389
345
|
{
|
|
390
|
-
git_reference *ref;
|
|
346
|
+
git_reference *ref, *out;
|
|
391
347
|
VALUE rb_name, rb_force;
|
|
392
348
|
int error, force = 0;
|
|
393
349
|
|
|
394
|
-
|
|
350
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
395
351
|
rb_scan_args(argc, argv, "11", &rb_name, &rb_force);
|
|
396
352
|
|
|
397
353
|
Check_Type(rb_name, T_STRING);
|
|
398
354
|
if (!NIL_P(rb_force))
|
|
399
355
|
force = rugged_parse_bool(rb_force);
|
|
400
356
|
|
|
401
|
-
error = git_reference_rename(ref, StringValueCStr(rb_name), force);
|
|
357
|
+
error = git_reference_rename(&out, ref, StringValueCStr(rb_name), force);
|
|
402
358
|
rugged_exception_check(error);
|
|
403
359
|
|
|
404
|
-
return
|
|
360
|
+
return rugged_ref_new(rb_cRuggedReference, rugged_owner(self), out);
|
|
405
361
|
}
|
|
406
362
|
|
|
407
363
|
/*
|
|
408
364
|
* call-seq:
|
|
409
365
|
* reference.delete!
|
|
410
366
|
*
|
|
411
|
-
* Delete this reference from disk.
|
|
412
|
-
* become invalidated.
|
|
367
|
+
* Delete this reference from disk.
|
|
413
368
|
*
|
|
414
369
|
* reference.name #=> 'HEAD'
|
|
415
370
|
* reference.delete!
|
|
416
|
-
*
|
|
371
|
+
* # Reference no longer exists on disk
|
|
417
372
|
*/
|
|
418
373
|
static VALUE rb_git_ref_delete(VALUE self)
|
|
419
374
|
{
|
|
420
375
|
git_reference *ref;
|
|
421
376
|
int error;
|
|
422
377
|
|
|
423
|
-
|
|
378
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
424
379
|
|
|
425
380
|
error = git_reference_delete(ref);
|
|
426
381
|
rugged_exception_check(error);
|
|
427
382
|
|
|
428
|
-
DATA_PTR(self) = NULL; /* this reference has been free'd */
|
|
429
|
-
rugged_set_owner(self, Qnil); /* and is no longer owned */
|
|
430
383
|
return Qnil;
|
|
431
384
|
}
|
|
432
385
|
|
|
433
386
|
static VALUE reflog_entry_new(const git_reflog_entry *entry)
|
|
434
387
|
{
|
|
435
388
|
VALUE rb_entry = rb_hash_new();
|
|
389
|
+
const char *message;
|
|
436
390
|
|
|
437
391
|
rb_hash_aset(rb_entry,
|
|
438
|
-
CSTR2SYM("
|
|
439
|
-
rugged_create_oid(
|
|
392
|
+
CSTR2SYM("id_old"),
|
|
393
|
+
rugged_create_oid(git_reflog_entry_id_old(entry))
|
|
440
394
|
);
|
|
441
395
|
|
|
442
396
|
rb_hash_aset(rb_entry,
|
|
443
|
-
CSTR2SYM("
|
|
444
|
-
rugged_create_oid(
|
|
397
|
+
CSTR2SYM("id_new"),
|
|
398
|
+
rugged_create_oid(git_reflog_entry_id_new(entry))
|
|
445
399
|
);
|
|
446
400
|
|
|
447
401
|
rb_hash_aset(rb_entry,
|
|
@@ -449,10 +403,10 @@ static VALUE reflog_entry_new(const git_reflog_entry *entry)
|
|
|
449
403
|
rugged_signature_new(git_reflog_entry_committer(entry), NULL)
|
|
450
404
|
);
|
|
451
405
|
|
|
452
|
-
if (
|
|
406
|
+
if ((message = git_reflog_entry_message(entry)) != NULL) {
|
|
453
407
|
rb_hash_aset(rb_entry,
|
|
454
408
|
CSTR2SYM("message"),
|
|
455
|
-
rugged_str_new2(
|
|
409
|
+
rugged_str_new2(message, NULL)
|
|
456
410
|
);
|
|
457
411
|
}
|
|
458
412
|
|
|
@@ -467,15 +421,15 @@ static VALUE reflog_entry_new(const git_reflog_entry *entry)
|
|
|
467
421
|
*
|
|
468
422
|
* Each +reflog_entry+ is a hash with the following keys:
|
|
469
423
|
*
|
|
470
|
-
* - +:
|
|
471
|
-
* - +:
|
|
424
|
+
* - +:id_old+: previous OID before the change
|
|
425
|
+
* - +:id_new+: OID after the change
|
|
472
426
|
* - +:committer+: author of the change
|
|
473
427
|
* - +:message+: message for the change
|
|
474
428
|
*
|
|
475
429
|
* reference.log #=> [
|
|
476
430
|
* # {
|
|
477
|
-
* # :
|
|
478
|
-
* # :
|
|
431
|
+
* # :id_old => nil,
|
|
432
|
+
* # :id_new => '9d09060c850defbc7711d08b57def0d14e742f4e',
|
|
479
433
|
* # :committer => {:name => 'Vicent Marti', :email => {'vicent@github.com'}},
|
|
480
434
|
* # :message => 'created reference'
|
|
481
435
|
* # }, ... ]
|
|
@@ -486,9 +440,9 @@ static VALUE rb_git_reflog(VALUE self)
|
|
|
486
440
|
git_reference *ref;
|
|
487
441
|
int error;
|
|
488
442
|
VALUE rb_log;
|
|
489
|
-
|
|
443
|
+
size_t i, ref_count;
|
|
490
444
|
|
|
491
|
-
|
|
445
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
492
446
|
|
|
493
447
|
error = git_reflog_read(&reflog, ref);
|
|
494
448
|
rugged_exception_check(error);
|
|
@@ -498,7 +452,7 @@ static VALUE rb_git_reflog(VALUE self)
|
|
|
498
452
|
|
|
499
453
|
for (i = 0; i < ref_count; ++i) {
|
|
500
454
|
const git_reflog_entry *entry =
|
|
501
|
-
git_reflog_entry_byindex(reflog, i);
|
|
455
|
+
git_reflog_entry_byindex(reflog, ref_count - i - 1);
|
|
502
456
|
|
|
503
457
|
rb_ary_push(rb_log, reflog_entry_new(entry));
|
|
504
458
|
}
|
|
@@ -507,6 +461,19 @@ static VALUE rb_git_reflog(VALUE self)
|
|
|
507
461
|
return rb_log;
|
|
508
462
|
}
|
|
509
463
|
|
|
464
|
+
/*
|
|
465
|
+
* call-seq:
|
|
466
|
+
* reference.log? -> Boolean
|
|
467
|
+
*
|
|
468
|
+
* Return whether a given reference has a reflog.
|
|
469
|
+
*/
|
|
470
|
+
static VALUE rb_git_has_reflog(VALUE self)
|
|
471
|
+
{
|
|
472
|
+
git_reference *ref;
|
|
473
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
474
|
+
return git_reference_has_log(ref) ? Qtrue : Qfalse;
|
|
475
|
+
}
|
|
476
|
+
|
|
510
477
|
/*
|
|
511
478
|
* call-seq:
|
|
512
479
|
* reference.log!(committer, message = nil)
|
|
@@ -523,10 +490,8 @@ static VALUE rb_git_reflog_write(int argc, VALUE *argv, VALUE self)
|
|
|
523
490
|
|
|
524
491
|
git_signature *committer;
|
|
525
492
|
const char *message = NULL;
|
|
526
|
-
|
|
527
|
-
git_oid oid;
|
|
528
493
|
|
|
529
|
-
|
|
494
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
530
495
|
|
|
531
496
|
rb_scan_args(argc, argv, "11", &rb_committer, &rb_message);
|
|
532
497
|
|
|
@@ -540,19 +505,45 @@ static VALUE rb_git_reflog_write(int argc, VALUE *argv, VALUE self)
|
|
|
540
505
|
|
|
541
506
|
committer = rugged_signature_get(rb_committer);
|
|
542
507
|
|
|
543
|
-
error = git_reflog_append(reflog,
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
508
|
+
if (!(error = git_reflog_append(reflog,
|
|
509
|
+
git_reference_target(ref),
|
|
510
|
+
committer,
|
|
511
|
+
message)))
|
|
512
|
+
error = git_reflog_write(reflog);
|
|
548
513
|
|
|
549
514
|
git_reflog_free(reflog);
|
|
550
|
-
|
|
551
515
|
git_signature_free(committer);
|
|
552
516
|
|
|
517
|
+
rugged_exception_check(error);
|
|
518
|
+
|
|
553
519
|
return Qnil;
|
|
554
520
|
}
|
|
555
521
|
|
|
522
|
+
/*
|
|
523
|
+
* call-seq:
|
|
524
|
+
* reference.branch? -> Boolean
|
|
525
|
+
*
|
|
526
|
+
* Return whether a given reference is a branch
|
|
527
|
+
*/
|
|
528
|
+
static VALUE rb_git_ref_is_branch(VALUE self)
|
|
529
|
+
{
|
|
530
|
+
git_reference *ref;
|
|
531
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
532
|
+
return git_reference_is_branch(ref) ? Qtrue : Qfalse;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
/*
|
|
536
|
+
* call-seq:
|
|
537
|
+
* reference.remote? -> Boolean
|
|
538
|
+
*
|
|
539
|
+
* Return whether a given reference is a remote
|
|
540
|
+
*/
|
|
541
|
+
static VALUE rb_git_ref_is_remote(VALUE self)
|
|
542
|
+
{
|
|
543
|
+
git_reference *ref;
|
|
544
|
+
Data_Get_Struct(self, git_reference, ref);
|
|
545
|
+
return git_reference_is_remote(ref) ? Qtrue : Qfalse;
|
|
546
|
+
}
|
|
556
547
|
|
|
557
548
|
void Init_rugged_reference()
|
|
558
549
|
{
|
|
@@ -562,22 +553,23 @@ void Init_rugged_reference()
|
|
|
562
553
|
rb_define_singleton_method(rb_cRuggedReference, "exist?", rb_git_ref_exist, 2);
|
|
563
554
|
rb_define_singleton_method(rb_cRuggedReference, "exists?", rb_git_ref_exist, 2);
|
|
564
555
|
rb_define_singleton_method(rb_cRuggedReference, "create", rb_git_ref_create, -1);
|
|
565
|
-
rb_define_singleton_method(rb_cRuggedReference, "pack_all", rb_git_ref_packall, 1);
|
|
566
556
|
rb_define_singleton_method(rb_cRuggedReference, "each", rb_git_ref_each, -1);
|
|
567
557
|
|
|
568
558
|
rb_define_method(rb_cRuggedReference, "target", rb_git_ref_target, 0);
|
|
569
|
-
rb_define_method(rb_cRuggedReference, "
|
|
559
|
+
rb_define_method(rb_cRuggedReference, "set_target", rb_git_ref_set_target, 1);
|
|
570
560
|
|
|
571
561
|
rb_define_method(rb_cRuggedReference, "type", rb_git_ref_type, 0);
|
|
572
562
|
|
|
573
563
|
rb_define_method(rb_cRuggedReference, "name", rb_git_ref_name, 0);
|
|
574
564
|
rb_define_method(rb_cRuggedReference, "rename", rb_git_ref_rename, -1);
|
|
575
565
|
|
|
576
|
-
rb_define_method(rb_cRuggedReference, "reload!", rb_git_ref_reload, 0);
|
|
577
566
|
rb_define_method(rb_cRuggedReference, "resolve", rb_git_ref_resolve, 0);
|
|
578
567
|
rb_define_method(rb_cRuggedReference, "delete!", rb_git_ref_delete, 0);
|
|
579
568
|
|
|
580
|
-
rb_define_method(rb_cRuggedReference, "
|
|
569
|
+
rb_define_method(rb_cRuggedReference, "branch?", rb_git_ref_is_branch, 0);
|
|
570
|
+
rb_define_method(rb_cRuggedReference, "remote?", rb_git_ref_is_remote, 0);
|
|
571
|
+
|
|
581
572
|
rb_define_method(rb_cRuggedReference, "log", rb_git_reflog, 0);
|
|
573
|
+
rb_define_method(rb_cRuggedReference, "log?", rb_git_has_reflog, 0);
|
|
582
574
|
rb_define_method(rb_cRuggedReference, "log!", rb_git_reflog_write, -1);
|
|
583
575
|
}
|