rugged 0.17.0.b7 → 0.18.0.b1
Sign up to get free protection for your applications and to get access to all the features.
- 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/ext/rugged/rugged_blob.c
CHANGED
@@ -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
|
@@ -172,8 +172,7 @@ static VALUE rb_git_blob_create(VALUE self, VALUE rb_repo, VALUE rb_buffer)
|
|
172
172
|
git_repository *repo;
|
173
173
|
|
174
174
|
Check_Type(rb_buffer, T_STRING);
|
175
|
-
|
176
|
-
rb_raise(rb_eTypeError, "Expecting a Rugged Repository");
|
175
|
+
rugged_check_repo(rb_repo);
|
177
176
|
|
178
177
|
Data_Get_Struct(rb_repo, git_repository, repo);
|
179
178
|
|
@@ -185,26 +184,25 @@ static VALUE rb_git_blob_create(VALUE self, VALUE rb_repo, VALUE rb_buffer)
|
|
185
184
|
|
186
185
|
/*
|
187
186
|
* call-seq:
|
188
|
-
* Blob.
|
187
|
+
* Blob.from_workdir(repository, file_path) -> oid
|
189
188
|
*
|
190
189
|
* Write the file specified in +file_path+ to a blob in +repository+.
|
191
190
|
* +file_path+ must be relative to the repository's working folder.
|
192
191
|
*
|
193
|
-
* Blob.
|
192
|
+
* Blob.from_workdir(repo, 'src/blob.h') #=> '9d09060c850defbc7711d08b57def0d14e742f4e'
|
194
193
|
*/
|
195
|
-
static VALUE
|
194
|
+
static VALUE rb_git_blob_from_workdir(VALUE self, VALUE rb_repo, VALUE rb_path)
|
196
195
|
{
|
197
196
|
int error;
|
198
197
|
git_oid oid;
|
199
198
|
git_repository *repo;
|
200
199
|
|
201
200
|
Check_Type(rb_path, T_STRING);
|
202
|
-
|
203
|
-
rb_raise(rb_eTypeError, "Expecting a Rugged Repository");
|
201
|
+
rugged_check_repo(rb_repo);
|
204
202
|
|
205
203
|
Data_Get_Struct(rb_repo, git_repository, repo);
|
206
204
|
|
207
|
-
error =
|
205
|
+
error = git_blob_create_fromworkdir(&oid, repo, StringValueCStr(rb_path));
|
208
206
|
rugged_exception_check(error);
|
209
207
|
|
210
208
|
return rugged_create_oid(&oid);
|
@@ -259,5 +257,5 @@ void Init_rugged_blob()
|
|
259
257
|
rb_define_method(rb_cRuggedBlob, "sloc", rb_git_blob_sloc, 0);
|
260
258
|
|
261
259
|
rb_define_singleton_method(rb_cRuggedBlob, "create", rb_git_blob_create, 2);
|
262
|
-
rb_define_singleton_method(rb_cRuggedBlob, "
|
260
|
+
rb_define_singleton_method(rb_cRuggedBlob, "from_workdir", rb_git_blob_from_workdir, 2);
|
263
261
|
}
|
data/ext/rugged/rugged_branch.c
CHANGED
@@ -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
|
@@ -62,7 +62,7 @@ static int parse_branch_type(VALUE rb_filter)
|
|
62
62
|
* +name+ needs to be a branch name, not an absolute reference path
|
63
63
|
* (e.g. 'development' instead of '/refs/heads/development')
|
64
64
|
*
|
65
|
-
* +target+ needs to be an existing
|
65
|
+
* +target+ needs to be an existing commit in the given +repository+.
|
66
66
|
*
|
67
67
|
* If +force+ is +true+, any existing branches will be overwritten.
|
68
68
|
*
|
@@ -71,7 +71,7 @@ static int parse_branch_type(VALUE rb_filter)
|
|
71
71
|
static VALUE rb_git_branch_create(int argc, VALUE *argv, VALUE self)
|
72
72
|
{
|
73
73
|
git_reference *branch;
|
74
|
-
|
74
|
+
git_commit *target = NULL;
|
75
75
|
git_repository *repo = NULL;
|
76
76
|
int error, force = 0;
|
77
77
|
|
@@ -87,14 +87,14 @@ static VALUE rb_git_branch_create(int argc, VALUE *argv, VALUE self)
|
|
87
87
|
|
88
88
|
Check_Type(rb_name, T_STRING);
|
89
89
|
|
90
|
-
target =
|
90
|
+
target = (git_commit *)rugged_object_get(repo, rb_target, GIT_OBJ_COMMIT);
|
91
91
|
|
92
92
|
if (!NIL_P(rb_force)) {
|
93
93
|
force = rugged_parse_bool(rb_force);
|
94
94
|
}
|
95
95
|
|
96
96
|
error = git_branch_create(&branch, repo, StringValueCStr(rb_name), target, force);
|
97
|
-
|
97
|
+
git_commit_free(target);
|
98
98
|
|
99
99
|
rugged_exception_check(error);
|
100
100
|
|
@@ -142,7 +142,6 @@ static VALUE rb_git_branch_lookup(int argc, VALUE *argv, VALUE self)
|
|
142
142
|
return Qnil;
|
143
143
|
|
144
144
|
rugged_exception_check(error);
|
145
|
-
|
146
145
|
return rugged_branch_new(rb_repo, branch);
|
147
146
|
}
|
148
147
|
|
@@ -157,14 +156,12 @@ static VALUE rb_git_branch_delete(VALUE self)
|
|
157
156
|
{
|
158
157
|
git_reference *branch = NULL;
|
159
158
|
|
160
|
-
|
159
|
+
Data_Get_Struct(self, git_reference, branch);
|
161
160
|
|
162
161
|
rugged_exception_check(
|
163
162
|
git_branch_delete(branch)
|
164
163
|
);
|
165
164
|
|
166
|
-
DATA_PTR(self) = NULL; /* this reference has been free'd */
|
167
|
-
rugged_set_owner(self, Qnil); /* and is no longer owned */
|
168
165
|
return Qnil;
|
169
166
|
}
|
170
167
|
|
@@ -188,7 +185,7 @@ static int cb_branch__each_obj(const char *branch_name, git_branch_t branch_type
|
|
188
185
|
);
|
189
186
|
|
190
187
|
rb_yield(rugged_branch_new(rb_repo, branch));
|
191
|
-
return
|
188
|
+
return 0;
|
192
189
|
}
|
193
190
|
|
194
191
|
static VALUE each_branch(int argc, VALUE *argv, VALUE self, int branch_names_only)
|
@@ -274,21 +271,21 @@ static VALUE rb_git_branch_each(int argc, VALUE *argv, VALUE self)
|
|
274
271
|
static VALUE rb_git_branch_move(int argc, VALUE *argv, VALUE self)
|
275
272
|
{
|
276
273
|
VALUE rb_new_branch_name, rb_force;
|
277
|
-
git_reference *old_branch = NULL;
|
274
|
+
git_reference *old_branch = NULL, *new_branch = NULL;
|
278
275
|
int error, force = 0;
|
279
276
|
|
280
277
|
rb_scan_args(argc, argv, "11", &rb_new_branch_name, &rb_force);
|
281
278
|
|
282
|
-
|
279
|
+
Data_Get_Struct(self, git_reference, old_branch);
|
283
280
|
Check_Type(rb_new_branch_name, T_STRING);
|
284
281
|
|
285
282
|
if (!NIL_P(rb_force))
|
286
283
|
force = rugged_parse_bool(rb_force);
|
287
284
|
|
288
|
-
error = git_branch_move(old_branch, StringValueCStr(rb_new_branch_name), force);
|
285
|
+
error = git_branch_move(&new_branch, old_branch, StringValueCStr(rb_new_branch_name), force);
|
289
286
|
rugged_exception_check(error);
|
290
287
|
|
291
|
-
return
|
288
|
+
return rugged_branch_new(rugged_owner(self), new_branch);
|
292
289
|
}
|
293
290
|
|
294
291
|
void Init_rugged_branch()
|
data/ext/rugged/rugged_commit.c
CHANGED
@@ -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
|
@@ -159,23 +159,23 @@ static VALUE rb_git_commit_tree_GET(VALUE self)
|
|
159
159
|
|
160
160
|
/*
|
161
161
|
* call-seq:
|
162
|
-
* commit.
|
162
|
+
* commit.tree_id -> oid
|
163
163
|
*
|
164
164
|
* Return the tree oid pointed at by this +commit+. The tree is
|
165
165
|
* returned as a String object.
|
166
166
|
*
|
167
|
-
* commit.
|
167
|
+
* commit.tree_id #=> "f148106ca58764adc93ad4e2d6b1d168422b9796"
|
168
168
|
*/
|
169
|
-
static VALUE
|
169
|
+
static VALUE rb_git_commit_tree_id_GET(VALUE self)
|
170
170
|
{
|
171
171
|
git_commit *commit;
|
172
|
-
const git_oid *
|
172
|
+
const git_oid *tree_id;
|
173
173
|
|
174
174
|
Data_Get_Struct(self, git_commit, commit);
|
175
175
|
|
176
|
-
|
176
|
+
tree_id = git_commit_tree_id(commit);
|
177
177
|
|
178
|
-
return rugged_create_oid(
|
178
|
+
return rugged_create_oid(tree_id);
|
179
179
|
}
|
180
180
|
|
181
181
|
/*
|
@@ -214,19 +214,19 @@ static VALUE rb_git_commit_parents_GET(VALUE self)
|
|
214
214
|
|
215
215
|
/*
|
216
216
|
* call-seq:
|
217
|
-
* commit.
|
217
|
+
* commit.parent_ids -> [oid, ...]
|
218
218
|
*
|
219
219
|
* Return the parent oid(s) of this commit as an array of oid String
|
220
220
|
* objects. An array is always returned even when the commit has only
|
221
221
|
* one or zero parents.
|
222
222
|
*
|
223
|
-
* commit.
|
224
|
-
* root.
|
223
|
+
* commit.parent_ids #=> => ["2cb831a8aea28b2c1b9c63385585b864e4d3bad1", ...]
|
224
|
+
* root.parent_ids #=> []
|
225
225
|
*/
|
226
|
-
static VALUE
|
226
|
+
static VALUE rb_git_commit_parent_ids_GET(VALUE self)
|
227
227
|
{
|
228
228
|
git_commit *commit;
|
229
|
-
const git_oid *
|
229
|
+
const git_oid *parent_id;
|
230
230
|
unsigned int n, parent_count;
|
231
231
|
VALUE ret_arr;
|
232
232
|
|
@@ -236,9 +236,9 @@ static VALUE rb_git_commit_parent_oids_GET(VALUE self)
|
|
236
236
|
ret_arr = rb_ary_new2((long)parent_count);
|
237
237
|
|
238
238
|
for (n = 0; n < parent_count; n++) {
|
239
|
-
|
240
|
-
if (
|
241
|
-
rb_ary_push(ret_arr, rugged_create_oid(
|
239
|
+
parent_id = git_commit_parent_id(commit, n);
|
240
|
+
if (parent_id) {
|
241
|
+
rb_ary_push(ret_arr, rugged_create_oid(parent_id));
|
242
242
|
}
|
243
243
|
}
|
244
244
|
|
@@ -277,7 +277,8 @@ static VALUE rb_git_commit_parent_oids_GET(VALUE self)
|
|
277
277
|
static VALUE rb_git_commit_create(VALUE self, VALUE rb_repo, VALUE rb_data)
|
278
278
|
{
|
279
279
|
VALUE rb_message, rb_tree, rb_parents, rb_ref;
|
280
|
-
|
280
|
+
VALUE rb_err_obj = Qnil;
|
281
|
+
int parent_count, i, error = 0;
|
281
282
|
const git_commit **parents = NULL;
|
282
283
|
git_commit **free_list = NULL;
|
283
284
|
git_tree *tree;
|
@@ -313,10 +314,10 @@ static VALUE rb_git_commit_create(VALUE self, VALUE rb_repo, VALUE rb_data)
|
|
313
314
|
Check_Type(rb_parents, T_ARRAY);
|
314
315
|
|
315
316
|
rb_tree = rb_hash_aref(rb_data, CSTR2SYM("tree"));
|
316
|
-
tree = (git_tree *)
|
317
|
+
tree = (git_tree *)rugged_object_get(repo, rb_tree, GIT_OBJ_TREE);
|
317
318
|
|
318
|
-
parents =
|
319
|
-
free_list =
|
319
|
+
parents = alloca(RARRAY_LEN(rb_parents) * sizeof(void *));
|
320
|
+
free_list = alloca(RARRAY_LEN(rb_parents) * sizeof(void *));
|
320
321
|
parent_count = 0;
|
321
322
|
|
322
323
|
for (i = 0; i < (int)RARRAY_LEN(rb_parents); ++i) {
|
@@ -343,7 +344,8 @@ static VALUE rb_git_commit_create(VALUE self, VALUE rb_repo, VALUE rb_data)
|
|
343
344
|
} else if (rb_obj_is_kind_of(p, rb_cRuggedCommit)) {
|
344
345
|
Data_Get_Struct(p, git_commit, parent);
|
345
346
|
} else {
|
346
|
-
|
347
|
+
rb_err_obj = rb_exc_new2(rb_eTypeError, "Invalid type for parent object");
|
348
|
+
goto cleanup;
|
347
349
|
}
|
348
350
|
|
349
351
|
parents[parent_count] = parent;
|
@@ -372,8 +374,9 @@ cleanup:
|
|
372
374
|
for (i = 0; i < parent_count; ++i)
|
373
375
|
git_object_free((git_object *)free_list[i]);
|
374
376
|
|
375
|
-
|
376
|
-
|
377
|
+
if (!NIL_P(rb_err_obj))
|
378
|
+
rb_exc_raise(rb_err_obj);
|
379
|
+
|
377
380
|
rugged_exception_check(error);
|
378
381
|
|
379
382
|
return rugged_create_oid(&commit_oid);
|
@@ -390,8 +393,12 @@ void Init_rugged_commit()
|
|
390
393
|
rb_define_method(rb_cRuggedCommit, "committer", rb_git_commit_committer_GET, 0);
|
391
394
|
rb_define_method(rb_cRuggedCommit, "author", rb_git_commit_author_GET, 0);
|
392
395
|
rb_define_method(rb_cRuggedCommit, "tree", rb_git_commit_tree_GET, 0);
|
393
|
-
|
396
|
+
|
397
|
+
rb_define_method(rb_cRuggedCommit, "tree_id", rb_git_commit_tree_id_GET, 0);
|
398
|
+
rb_define_method(rb_cRuggedCommit, "tree_oid", rb_git_commit_tree_id_GET, 0);
|
399
|
+
|
394
400
|
rb_define_method(rb_cRuggedCommit, "parents", rb_git_commit_parents_GET, 0);
|
395
|
-
rb_define_method(rb_cRuggedCommit, "
|
401
|
+
rb_define_method(rb_cRuggedCommit, "parent_ids", rb_git_commit_parent_ids_GET, 0);
|
402
|
+
rb_define_method(rb_cRuggedCommit, "parent_oids", rb_git_commit_parent_ids_GET, 0);
|
396
403
|
}
|
397
404
|
|
data/ext/rugged/rugged_config.c
CHANGED
@@ -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
|
@@ -170,7 +170,7 @@ static VALUE rb_git_config_delete(VALUE self, VALUE rb_key)
|
|
170
170
|
Data_Get_Struct(self, git_config, config);
|
171
171
|
Check_Type(rb_key, T_STRING);
|
172
172
|
|
173
|
-
error =
|
173
|
+
error = git_config_delete_entry(config, StringValueCStr(rb_key));
|
174
174
|
if (error == GIT_ENOTFOUND)
|
175
175
|
return Qfalse;
|
176
176
|
|
data/ext/rugged/rugged_index.c
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
/*
|
2
2
|
* The MIT License
|
3
3
|
*
|
4
|
-
* Copyright (c)
|
5
|
-
*
|
4
|
+
* Copyright (c) 2013 GitHub, Inc
|
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
|
8
8
|
* in the Software without restriction, including without limitation the rights
|
9
9
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
10
|
* copies of the Software, and to permit persons to whom the Software is
|
11
11
|
* furnished to do so, subject to the following conditions:
|
12
|
-
*
|
12
|
+
*
|
13
13
|
* The above copyright notice and this permission notice shall be included in
|
14
14
|
* all copies or substantial portions of the Software.
|
15
|
-
*
|
15
|
+
*
|
16
16
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
17
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
18
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
@@ -28,14 +28,13 @@ extern VALUE rb_mRugged;
|
|
28
28
|
VALUE rb_cRuggedIndex;
|
29
29
|
|
30
30
|
static void rb_git_indexentry_toC(git_index_entry *entry, VALUE rb_entry);
|
31
|
-
static VALUE rb_git_indexentry_fromC(git_index_entry *entry);
|
32
|
-
static VALUE rb_git_unmerged_fromC(const git_index_entry_unmerged *entry);
|
31
|
+
static VALUE rb_git_indexentry_fromC(const git_index_entry *entry);
|
33
32
|
|
34
33
|
/*
|
35
34
|
* Index
|
36
35
|
*/
|
37
36
|
|
38
|
-
void rb_git_index__free(git_index *index)
|
37
|
+
static void rb_git_index__free(git_index *index)
|
39
38
|
{
|
40
39
|
git_index_free(index);
|
41
40
|
}
|
@@ -47,14 +46,20 @@ VALUE rugged_index_new(VALUE klass, VALUE owner, git_index *index)
|
|
47
46
|
return rb_index;
|
48
47
|
}
|
49
48
|
|
50
|
-
static VALUE rb_git_index_new(VALUE
|
49
|
+
static VALUE rb_git_index_new(int argc, VALUE *argv, VALUE klass)
|
51
50
|
{
|
52
51
|
git_index *index;
|
53
52
|
int error;
|
54
53
|
|
55
|
-
|
54
|
+
VALUE rb_path;
|
55
|
+
const char *path = NULL;
|
56
|
+
|
57
|
+
if (rb_scan_args(argc, argv, "01", &rb_path) == 1) {
|
58
|
+
Check_Type(rb_path, T_STRING);
|
59
|
+
path = StringValueCStr(rb_path);
|
60
|
+
}
|
56
61
|
|
57
|
-
error = git_index_open(&index,
|
62
|
+
error = git_index_open(&index, path);
|
58
63
|
rugged_exception_check(error);
|
59
64
|
|
60
65
|
return rugged_index_new(klass, Qnil, index);
|
@@ -90,15 +95,7 @@ static VALUE rb_git_index_write(VALUE self)
|
|
90
95
|
|
91
96
|
error = git_index_write(index);
|
92
97
|
rugged_exception_check(error);
|
93
|
-
|
94
|
-
return Qnil;
|
95
|
-
}
|
96
98
|
|
97
|
-
static VALUE rb_git_index_uniq(VALUE self)
|
98
|
-
{
|
99
|
-
git_index *index;
|
100
|
-
Data_Get_Struct(self, git_index, index);
|
101
|
-
git_index_uniq(index);
|
102
99
|
return Qnil;
|
103
100
|
}
|
104
101
|
|
@@ -109,23 +106,41 @@ static VALUE rb_git_index_count(VALUE self)
|
|
109
106
|
return INT2FIX(git_index_entrycount(index));
|
110
107
|
}
|
111
108
|
|
112
|
-
static VALUE
|
109
|
+
static VALUE rb_git_index_get(int argc, VALUE *argv, VALUE self)
|
113
110
|
{
|
114
111
|
git_index *index;
|
115
|
-
|
116
|
-
|
117
|
-
|
112
|
+
const git_index_entry *entry = NULL;
|
113
|
+
|
114
|
+
VALUE rb_entry, rb_stage;
|
118
115
|
|
119
|
-
static VALUE rb_git_index_get(VALUE self, VALUE entry)
|
120
|
-
{
|
121
|
-
git_index *index;
|
122
116
|
Data_Get_Struct(self, git_index, index);
|
123
117
|
|
124
|
-
|
125
|
-
|
118
|
+
rb_scan_args(argc, argv, "11", &rb_entry, &rb_stage);
|
119
|
+
|
120
|
+
if (TYPE(rb_entry) == T_STRING) {
|
121
|
+
int stage = 0;
|
122
|
+
|
123
|
+
if (!NIL_P(rb_stage)) {
|
124
|
+
Check_Type(rb_stage, T_FIXNUM);
|
125
|
+
stage = FIX2INT(rb_stage);
|
126
|
+
}
|
127
|
+
|
128
|
+
entry = git_index_get_bypath(index, StringValueCStr(rb_entry), stage);
|
129
|
+
}
|
130
|
+
|
131
|
+
else if (TYPE(rb_entry) == T_FIXNUM) {
|
132
|
+
if (argc > 1) {
|
133
|
+
rb_raise(rb_eArgError,
|
134
|
+
"Too many arguments when trying to lookup entry by index");
|
135
|
+
}
|
136
|
+
|
137
|
+
entry = git_index_get_byindex(index, FIX2INT(rb_entry));
|
138
|
+
} else {
|
139
|
+
rb_raise(rb_eArgError,
|
140
|
+
"Invalid type for `entry`: expected String or Fixnum");
|
141
|
+
}
|
126
142
|
|
127
|
-
|
128
|
-
return rb_git_indexentry_fromC(git_index_get(index, FIX2INT(entry)));
|
143
|
+
return entry ? rb_git_indexentry_fromC(entry) : Qnil;
|
129
144
|
}
|
130
145
|
|
131
146
|
static VALUE rb_git_index_each(VALUE self)
|
@@ -138,9 +153,9 @@ static VALUE rb_git_index_each(VALUE self)
|
|
138
153
|
if (!rb_block_given_p())
|
139
154
|
return rb_funcall(self, rb_intern("to_enum"), 0);
|
140
155
|
|
141
|
-
count = git_index_entrycount(index);
|
156
|
+
count = (unsigned int)git_index_entrycount(index);
|
142
157
|
for (i = 0; i < count; ++i) {
|
143
|
-
git_index_entry *entry =
|
158
|
+
const git_index_entry *entry = git_index_get_byindex(index, i);
|
144
159
|
if (entry)
|
145
160
|
rb_yield(rb_git_indexentry_fromC(entry));
|
146
161
|
}
|
@@ -148,87 +163,47 @@ static VALUE rb_git_index_each(VALUE self)
|
|
148
163
|
return Qnil;
|
149
164
|
}
|
150
165
|
|
151
|
-
static VALUE
|
166
|
+
static VALUE rb_git_index_remove(int argc, VALUE *argv, VALUE self)
|
152
167
|
{
|
153
168
|
git_index *index;
|
154
|
-
|
155
|
-
|
156
|
-
if (TYPE(entry) == T_STRING)
|
157
|
-
return rb_git_unmerged_fromC(git_index_get_unmerged_bypath(index, StringValueCStr(entry)));
|
158
|
-
|
159
|
-
if (TYPE(entry) == T_FIXNUM)
|
160
|
-
return rb_git_unmerged_fromC(git_index_get_unmerged_byindex(index, FIX2INT(entry)));
|
169
|
+
int error, stage = 0;
|
161
170
|
|
162
|
-
|
163
|
-
}
|
171
|
+
VALUE rb_entry, rb_stage;
|
164
172
|
|
165
|
-
static VALUE rb_git_index_remove(VALUE self, VALUE entry)
|
166
|
-
{
|
167
|
-
git_index *index;
|
168
|
-
int error;
|
169
173
|
Data_Get_Struct(self, git_index, index);
|
170
174
|
|
171
|
-
if (
|
172
|
-
|
175
|
+
if (rb_scan_args(argc, argv, "11", &rb_entry, &rb_stage) > 1) {
|
176
|
+
Check_Type(rb_stage, T_FIXNUM);
|
177
|
+
stage = FIX2INT(rb_stage);
|
178
|
+
}
|
179
|
+
|
180
|
+
Check_Type(rb_entry, T_STRING);
|
173
181
|
|
174
|
-
|
175
|
-
|
176
|
-
error = git_index_remove(index, FIX2INT(entry));
|
182
|
+
error = git_index_remove(index, StringValueCStr(rb_entry), stage);
|
177
183
|
rugged_exception_check(error);
|
178
184
|
|
179
185
|
return Qnil;
|
180
186
|
}
|
181
187
|
|
182
|
-
static VALUE rb_git_index_add(
|
188
|
+
static VALUE rb_git_index_add(VALUE self, VALUE rb_entry)
|
183
189
|
{
|
184
190
|
git_index *index;
|
185
|
-
int error;
|
186
|
-
VALUE rb_entry, rb_stage;
|
187
|
-
|
188
|
-
rb_scan_args(argc, argv, "11", &rb_entry, &rb_stage);
|
191
|
+
int error = 0;
|
189
192
|
|
190
193
|
Data_Get_Struct(self, git_index, index);
|
191
194
|
|
192
195
|
if (TYPE(rb_entry) == T_HASH) {
|
193
196
|
git_index_entry entry;
|
194
|
-
if (argc > 1)
|
195
|
-
rb_raise(rb_eTypeError,
|
196
|
-
"Wrong number or arguments (only an Index Entry is expected");
|
197
197
|
|
198
198
|
rb_git_indexentry_toC(&entry, rb_entry);
|
199
|
-
error =
|
200
|
-
} else if (TYPE(rb_entry) == T_STRING) {
|
201
|
-
int stage = 0;
|
202
|
-
if (!NIL_P(rb_stage))
|
203
|
-
stage = NUM2INT(rb_stage);
|
204
|
-
error = git_index_add(index, StringValueCStr(rb_entry), stage);
|
205
|
-
} else {
|
206
|
-
rb_raise(rb_eTypeError,
|
207
|
-
"Expecting a hash defining an Index Entry or a path to a file in the repository");
|
199
|
+
error = git_index_add(index, &entry);
|
208
200
|
}
|
209
201
|
|
210
|
-
|
211
|
-
|
212
|
-
}
|
213
|
-
|
214
|
-
static VALUE rb_git_index_append(int argc, VALUE *argv, VALUE self)
|
215
|
-
{
|
216
|
-
git_index *index;
|
217
|
-
int error;
|
218
|
-
VALUE rb_entry, rb_stage;
|
219
|
-
|
220
|
-
rb_scan_args(argc, argv, "11", &rb_entry, &rb_stage);
|
221
|
-
|
222
|
-
Data_Get_Struct(self, git_index, index);
|
202
|
+
else if (TYPE(rb_entry) == T_STRING) {
|
203
|
+
error = git_index_add_bypath(index, StringValueCStr(rb_entry));
|
204
|
+
}
|
223
205
|
|
224
|
-
|
225
|
-
git_index_entry entry;
|
226
|
-
rb_git_indexentry_toC(&entry, rb_entry);
|
227
|
-
error = git_index_append2(index, &entry);
|
228
|
-
} else if (TYPE(rb_entry) == T_STRING) {
|
229
|
-
Check_Type(rb_stage, T_FIXNUM);
|
230
|
-
error = git_index_append(index, StringValueCStr(rb_entry), FIX2INT(rb_stage));
|
231
|
-
} else {
|
206
|
+
else {
|
232
207
|
rb_raise(rb_eTypeError,
|
233
208
|
"Expecting a hash defining an Index Entry or a path to a file in the repository");
|
234
209
|
}
|
@@ -238,35 +213,7 @@ static VALUE rb_git_index_append(int argc, VALUE *argv, VALUE self)
|
|
238
213
|
}
|
239
214
|
|
240
215
|
|
241
|
-
|
242
|
-
* Index Entry
|
243
|
-
*/
|
244
|
-
static VALUE rb_git_unmerged_fromC(const git_index_entry_unmerged *entry)
|
245
|
-
{
|
246
|
-
int i;
|
247
|
-
VALUE rb_entry, rb_modes, rb_oids;
|
248
|
-
|
249
|
-
if (!entry)
|
250
|
-
return Qnil;
|
251
|
-
|
252
|
-
rb_modes = rb_ary_new2(3);
|
253
|
-
rb_oids = rb_ary_new2(3);
|
254
|
-
for (i = 0; i < 3; ++i) {
|
255
|
-
rb_ary_push(rb_modes, INT2FIX(entry->mode[i]));
|
256
|
-
rb_ary_push(rb_oids, rugged_create_oid(&entry->oid[i]));
|
257
|
-
}
|
258
|
-
|
259
|
-
rb_entry = rb_hash_new();
|
260
|
-
rb_hash_aset(rb_entry, CSTR2SYM("path"), rugged_str_new2(entry->path, NULL));
|
261
|
-
rb_hash_aset(rb_entry, CSTR2SYM("oids"), rb_oids);
|
262
|
-
rb_hash_aset(rb_entry, CSTR2SYM("modes"), rb_modes);
|
263
|
-
|
264
|
-
return rb_entry;
|
265
|
-
}
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
static VALUE rb_git_indexentry_fromC(git_index_entry *entry)
|
216
|
+
static VALUE rb_git_indexentry_fromC(const git_index_entry *entry)
|
270
217
|
{
|
271
218
|
VALUE rb_entry, rb_mtime, rb_ctime;
|
272
219
|
unsigned int valid, stage;
|
@@ -301,39 +248,59 @@ static VALUE rb_git_indexentry_fromC(git_index_entry *entry)
|
|
301
248
|
return rb_entry;
|
302
249
|
}
|
303
250
|
|
251
|
+
static inline unsigned int
|
252
|
+
default_entry_value(VALUE rb_entry, const char *key)
|
253
|
+
{
|
254
|
+
VALUE val = rb_hash_aref(rb_entry, CSTR2SYM(key));
|
255
|
+
if (NIL_P(val))
|
256
|
+
return 0;
|
257
|
+
|
258
|
+
Check_Type(val, T_FIXNUM);
|
259
|
+
return FIX2INT(val);
|
260
|
+
}
|
261
|
+
|
304
262
|
static void rb_git_indexentry_toC(git_index_entry *entry, VALUE rb_entry)
|
305
263
|
{
|
306
264
|
VALUE val;
|
307
265
|
|
308
266
|
Check_Type(rb_entry, T_HASH);
|
309
267
|
|
310
|
-
|
311
|
-
|
312
|
-
Check_Type(val, t);
|
313
|
-
|
314
|
-
val = GET_ENTRY_VAL("path", T_STRING);
|
268
|
+
val = rb_hash_aref(rb_entry, CSTR2SYM("path"));
|
269
|
+
Check_Type(val, T_STRING);
|
315
270
|
entry->path = StringValueCStr(val);
|
316
271
|
|
317
|
-
val =
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
entry->ino =
|
325
|
-
|
326
|
-
|
327
|
-
entry->
|
328
|
-
|
329
|
-
|
330
|
-
|
272
|
+
val = rb_hash_aref(rb_entry, CSTR2SYM("oid"));
|
273
|
+
Check_Type(val, T_STRING);
|
274
|
+
rugged_exception_check(
|
275
|
+
git_oid_fromstr(&entry->oid, StringValueCStr(val))
|
276
|
+
);
|
277
|
+
|
278
|
+
entry->dev = default_entry_value(rb_entry, "dev");
|
279
|
+
entry->ino = default_entry_value(rb_entry, "ino");
|
280
|
+
entry->mode = default_entry_value(rb_entry, "mode");
|
281
|
+
entry->gid = default_entry_value(rb_entry, "gid");
|
282
|
+
entry->uid = default_entry_value(rb_entry, "uid");
|
283
|
+
entry->file_size = (git_off_t)default_entry_value(rb_entry, "file_size");
|
284
|
+
|
285
|
+
if ((val = rb_hash_aref(rb_entry, CSTR2SYM("mtime"))) != Qnil) {
|
286
|
+
if (!rb_obj_is_kind_of(val, rb_cTime))
|
287
|
+
rb_raise(rb_eTypeError, ":mtime must be a Time instance");
|
288
|
+
|
289
|
+
entry->mtime.seconds = NUM2INT(rb_funcall(val, rb_intern("to_i"), 0));
|
290
|
+
entry->mtime.nanoseconds = NUM2INT(rb_funcall(val, rb_intern("usec"), 0)) * 1000;
|
291
|
+
} else {
|
292
|
+
entry->mtime.seconds = entry->mtime.nanoseconds = 0;
|
293
|
+
}
|
331
294
|
|
332
|
-
val =
|
333
|
-
|
295
|
+
if ((val = rb_hash_aref(rb_entry, CSTR2SYM("ctime"))) != Qnil) {
|
296
|
+
if (!rb_obj_is_kind_of(val, rb_cTime))
|
297
|
+
rb_raise(rb_eTypeError, ":ctime must be a Time instance");
|
334
298
|
|
335
|
-
|
336
|
-
|
299
|
+
entry->ctime.seconds = NUM2INT(rb_funcall(val, rb_intern("to_i"), 0));
|
300
|
+
entry->ctime.nanoseconds = NUM2INT(rb_funcall(val, rb_intern("usec"), 0)) * 1000;
|
301
|
+
} else {
|
302
|
+
entry->ctime.seconds = entry->ctime.nanoseconds = 0;
|
303
|
+
}
|
337
304
|
|
338
305
|
entry->flags = 0x0;
|
339
306
|
entry->flags_extended = 0x0;
|
@@ -350,57 +317,31 @@ static void rb_git_indexentry_toC(git_index_entry *entry, VALUE rb_entry)
|
|
350
317
|
entry->flags &= ~GIT_IDXENTRY_VALID;
|
351
318
|
if (rugged_parse_bool(val))
|
352
319
|
entry->flags |= GIT_IDXENTRY_VALID;
|
353
|
-
}
|
354
|
-
|
355
|
-
|
356
|
-
if (!rb_obj_is_kind_of(val, rb_cTime))
|
357
|
-
rb_raise(rb_eTypeError, ":mtime must be a Time instance");
|
358
|
-
entry->mtime.seconds = NUM2INT(rb_funcall(val, rb_intern("to_i"), 0));
|
359
|
-
entry->mtime.nanoseconds = NUM2INT(rb_funcall(val, rb_intern("usec"), 0)) * 1000;
|
360
|
-
|
361
|
-
val = rb_hash_aref(rb_entry, CSTR2SYM("ctime"));
|
362
|
-
if (!rb_obj_is_kind_of(val, rb_cTime))
|
363
|
-
rb_raise(rb_eTypeError, ":ctime must be a Time instance");
|
364
|
-
entry->ctime.seconds = NUM2INT(rb_funcall(val, rb_intern("to_i"), 0));
|
365
|
-
entry->ctime.nanoseconds = NUM2INT(rb_funcall(val, rb_intern("usec"), 0)) * 1000;
|
366
|
-
|
367
|
-
#undef GET_ENTRY_VAL
|
368
|
-
}
|
369
|
-
|
370
|
-
VALUE rb_git_indexer(VALUE self, VALUE rb_packfile_path)
|
371
|
-
{
|
372
|
-
int error;
|
373
|
-
git_indexer *indexer;
|
374
|
-
VALUE rb_oid;
|
375
|
-
|
376
|
-
Check_Type(rb_packfile_path, T_STRING);
|
377
|
-
|
378
|
-
error = git_indexer_new(&indexer, StringValueCStr(rb_packfile_path));
|
379
|
-
rugged_exception_check(error);
|
380
|
-
|
381
|
-
error = git_indexer_run(indexer, NULL);
|
382
|
-
rugged_exception_check(error);
|
383
|
-
|
384
|
-
error = git_indexer_write(indexer);
|
385
|
-
rugged_exception_check(error);
|
386
|
-
|
387
|
-
rb_oid = rugged_create_oid(git_indexer_hash(indexer));
|
388
|
-
|
389
|
-
git_indexer_free(indexer);
|
390
|
-
return rb_oid;
|
320
|
+
} else {
|
321
|
+
entry->flags |= GIT_IDXENTRY_VALID;
|
322
|
+
}
|
391
323
|
}
|
392
324
|
|
393
|
-
VALUE rb_git_index_writetree(VALUE self)
|
325
|
+
static VALUE rb_git_index_writetree(int argc, VALUE *argv, VALUE self)
|
394
326
|
{
|
395
327
|
git_index *index;
|
396
328
|
git_oid tree_oid;
|
397
329
|
int error;
|
330
|
+
VALUE rb_repo;
|
398
331
|
|
399
332
|
Data_Get_Struct(self, git_index, index);
|
400
333
|
|
401
|
-
|
402
|
-
|
334
|
+
if (rb_scan_args(argc, argv, "01", &rb_repo) == 1) {
|
335
|
+
git_repository *repo = NULL;
|
336
|
+
rugged_check_repo(rb_repo);
|
337
|
+
Data_Get_Struct(rb_repo, git_repository, repo);
|
338
|
+
error = git_index_write_tree_to(&tree_oid, index, repo);
|
339
|
+
}
|
340
|
+
else {
|
341
|
+
error = git_index_write_tree(&tree_oid, index);
|
342
|
+
}
|
403
343
|
|
344
|
+
rugged_exception_check(error);
|
404
345
|
return rugged_create_oid(&tree_oid);
|
405
346
|
}
|
406
347
|
|
@@ -413,7 +354,7 @@ VALUE rb_git_index_writetree(VALUE self)
|
|
413
354
|
* Further index operations (+add+, +update+, +remove+, etc) will
|
414
355
|
* be considered changes on top of +tree+.
|
415
356
|
*/
|
416
|
-
VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
|
357
|
+
static VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
|
417
358
|
{
|
418
359
|
git_index *index;
|
419
360
|
git_tree *tree;
|
@@ -422,7 +363,7 @@ VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
|
|
422
363
|
Data_Get_Struct(self, git_index, index);
|
423
364
|
Data_Get_Struct(rb_tree, git_tree, tree);
|
424
365
|
|
425
|
-
error = git_index_read_tree(index, tree
|
366
|
+
error = git_index_read_tree(index, tree);
|
426
367
|
rugged_exception_check(error);
|
427
368
|
|
428
369
|
return Qnil;
|
@@ -431,34 +372,28 @@ VALUE rb_git_index_readtree(VALUE self, VALUE rb_tree)
|
|
431
372
|
void Init_rugged_index()
|
432
373
|
{
|
433
374
|
/*
|
434
|
-
* Index
|
375
|
+
* Index
|
435
376
|
*/
|
436
377
|
rb_cRuggedIndex = rb_define_class_under(rb_mRugged, "Index", rb_cObject);
|
437
|
-
rb_define_singleton_method(rb_cRuggedIndex, "new", rb_git_index_new, 1);
|
378
|
+
rb_define_singleton_method(rb_cRuggedIndex, "new", rb_git_index_new, -1);
|
438
379
|
|
439
380
|
rb_define_method(rb_cRuggedIndex, "count", rb_git_index_count, 0);
|
440
|
-
rb_define_method(rb_cRuggedIndex, "count_unmerged", rb_git_index_count_unmerged, 0);
|
441
381
|
rb_define_method(rb_cRuggedIndex, "reload", rb_git_index_read, 0);
|
442
382
|
rb_define_method(rb_cRuggedIndex, "clear", rb_git_index_clear, 0);
|
443
383
|
rb_define_method(rb_cRuggedIndex, "write", rb_git_index_write, 0);
|
444
|
-
rb_define_method(rb_cRuggedIndex, "
|
445
|
-
rb_define_method(rb_cRuggedIndex, "
|
446
|
-
rb_define_method(rb_cRuggedIndex, "get_unmerged", rb_git_index_get_unmerged, 1);
|
447
|
-
rb_define_method(rb_cRuggedIndex, "[]", rb_git_index_get, 1);
|
384
|
+
rb_define_method(rb_cRuggedIndex, "get", rb_git_index_get, -1);
|
385
|
+
rb_define_method(rb_cRuggedIndex, "[]", rb_git_index_get, -1);
|
448
386
|
rb_define_method(rb_cRuggedIndex, "each", rb_git_index_each, 0);
|
449
387
|
|
450
|
-
rb_define_method(rb_cRuggedIndex, "add", rb_git_index_add,
|
451
|
-
rb_define_method(rb_cRuggedIndex, "update", rb_git_index_add,
|
388
|
+
rb_define_method(rb_cRuggedIndex, "add", rb_git_index_add, 1);
|
389
|
+
rb_define_method(rb_cRuggedIndex, "update", rb_git_index_add, 1);
|
390
|
+
rb_define_method(rb_cRuggedIndex, "<<", rb_git_index_add, 1);
|
452
391
|
|
453
|
-
rb_define_method(rb_cRuggedIndex, "
|
454
|
-
rb_define_method(rb_cRuggedIndex, "<<", rb_git_index_append, -1);
|
392
|
+
rb_define_method(rb_cRuggedIndex, "remove", rb_git_index_remove, -1);
|
455
393
|
|
456
|
-
rb_define_method(rb_cRuggedIndex, "
|
457
|
-
rb_define_method(rb_cRuggedIndex, "write_tree", rb_git_index_writetree, 0);
|
394
|
+
rb_define_method(rb_cRuggedIndex, "write_tree", rb_git_index_writetree, -1);
|
458
395
|
rb_define_method(rb_cRuggedIndex, "read_tree", rb_git_index_readtree, 1);
|
459
396
|
|
460
|
-
rb_define_singleton_method(rb_cRuggedIndex, "index_pack", rb_git_indexer, 1);
|
461
|
-
|
462
397
|
rb_const_set(rb_cRuggedIndex, rb_intern("ENTRY_FLAGS_STAGE"), INT2FIX(GIT_IDXENTRY_STAGEMASK));
|
463
398
|
rb_const_set(rb_cRuggedIndex, rb_intern("ENTRY_FLAGS_STAGE_SHIFT"), INT2FIX(GIT_IDXENTRY_STAGESHIFT));
|
464
399
|
rb_const_set(rb_cRuggedIndex, rb_intern("ENTRY_FLAGS_VALID"), INT2FIX(GIT_IDXENTRY_VALID));
|