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/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Rugged
|
|
2
2
|
**libgit2 bindings in Ruby**
|
|
3
3
|
|
|
4
|
-
Rugged is a library for accessing libgit2 in Ruby. It gives you the speed and
|
|
4
|
+
Rugged is a library for accessing [libgit2](https://github.com/libgit2/libgit2) in Ruby. It gives you the speed and
|
|
5
5
|
portability of libgit2 with the beauty of the Ruby language.
|
|
6
6
|
|
|
7
7
|
### libgit2
|
|
@@ -45,7 +45,7 @@ If you're working against a bare repository, you'll need to indicate that:
|
|
|
45
45
|
|
|
46
46
|
```ruby
|
|
47
47
|
# Second parameter indicates whether the repo is a bare repository
|
|
48
|
-
Rugged::Repository.init_at('.',
|
|
48
|
+
Rugged::Repository.init_at('.', :bare)
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
You can also let Rugged discover the path to the .git directory if you give it a
|
|
@@ -98,7 +98,7 @@ object = repo.read('a0ae5566e3c8a3bddffab21022056f0b5e03ef07')
|
|
|
98
98
|
object.len
|
|
99
99
|
# => 237
|
|
100
100
|
object.data
|
|
101
|
-
# => "tree 76f23f186076fc291742816721ea8c3e95567241\nparent 8e3c5c52b8f29da0adc7e8be8a037cbeaea6de6b\nauthor Vicent Mart\303\255 <tanoku@gmail.com> 1333859005 +0200\ncommitter Vicent Mart\303\255 <tanoku@gmail.com> 1333859005 +0200\n\nAdd `Repository#
|
|
101
|
+
# => "tree 76f23f186076fc291742816721ea8c3e95567241\nparent 8e3c5c52b8f29da0adc7e8be8a037cbeaea6de6b\nauthor Vicent Mart\303\255 <tanoku@gmail.com> 1333859005 +0200\ncommitter Vicent Mart\303\255 <tanoku@gmail.com> 1333859005 +0200\n\nAdd `Repository#blob_at`\n"
|
|
102
102
|
object.type
|
|
103
103
|
# => :commit
|
|
104
104
|
```
|
|
@@ -109,12 +109,28 @@ There's a few ways to write to a repository. To write directly from your
|
|
|
109
109
|
instantiated repository object:
|
|
110
110
|
|
|
111
111
|
```ruby
|
|
112
|
-
sha = repo.hash(content, type)
|
|
113
112
|
sha = repo.write(content, type)
|
|
114
113
|
```
|
|
115
114
|
|
|
116
115
|
You can also use the `Commit` object directly to craft a commit; this is a bit
|
|
117
|
-
more high-level, so it may be preferable
|
|
116
|
+
more high-level, so it may be preferable:
|
|
117
|
+
|
|
118
|
+
```ruby
|
|
119
|
+
oid = repo.write("This is a blob.", :blob)
|
|
120
|
+
index = Rugged::Index.new
|
|
121
|
+
index.add(:path => "README.md", :oid => oid, :mode => 0100644)
|
|
122
|
+
|
|
123
|
+
options = {}
|
|
124
|
+
options[:tree] = index.write_tree(repo)
|
|
125
|
+
|
|
126
|
+
options[:author] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
|
|
127
|
+
options[:committer] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
|
|
128
|
+
options[:message] ||= "Making a commit via Rugged!"
|
|
129
|
+
options[:parents] = repo.empty? ? [] : [ repo.head.target ].compact
|
|
130
|
+
options[:update_ref] = 'HEAD'
|
|
131
|
+
|
|
132
|
+
Rugged::Commit.create(repo, options)
|
|
133
|
+
```
|
|
118
134
|
|
|
119
135
|
---
|
|
120
136
|
|
|
@@ -143,7 +159,7 @@ commit = repo.lookup('a0ae5566e3c8a3bddffab21022056f0b5e03ef07')
|
|
|
143
159
|
# => #<Rugged::Commit:2245304380>
|
|
144
160
|
|
|
145
161
|
commit.message
|
|
146
|
-
# => "Add `Repository#
|
|
162
|
+
# => "Add `Repository#blob_at`\n"
|
|
147
163
|
|
|
148
164
|
commit.time
|
|
149
165
|
# => Sat Apr 07 21:23:25 -0700 2012
|
|
@@ -168,7 +184,8 @@ Rugged::Commit.create(r,
|
|
|
168
184
|
:message => "Hello world\n\n",
|
|
169
185
|
:committer => author,
|
|
170
186
|
:parents => ["2cb831a8aea28b2c1b9c63385585b864e4d3bad1"],
|
|
171
|
-
:tree => some_tree
|
|
187
|
+
:tree => some_tree,
|
|
188
|
+
:update_ref => "HEAD") #=> "f148106ca58764adc93ad4e2d6b1d168422b9796"
|
|
172
189
|
```
|
|
173
190
|
|
|
174
191
|
### Tag Objects
|
|
@@ -178,7 +195,7 @@ tag = repo.lookup(tag_sha)
|
|
|
178
195
|
|
|
179
196
|
object = tag.target
|
|
180
197
|
sha = tag.target.oid
|
|
181
|
-
str = tag.target_type #
|
|
198
|
+
str = tag.target_type # :commit, :tag, :blob
|
|
182
199
|
str = tag.name # "v1.0"
|
|
183
200
|
str = tag.message
|
|
184
201
|
person = tag.tagger
|
|
@@ -216,14 +233,20 @@ tree.each_blob { |entry| puts entry[:name] } # list only files
|
|
|
216
233
|
You can also write trees with the `TreeBuilder`:
|
|
217
234
|
|
|
218
235
|
```ruby
|
|
219
|
-
|
|
220
|
-
:name => "README.txt",
|
|
221
|
-
:oid => "1385f264afb75a56a5bec74243be9b367ba4ca08",
|
|
222
|
-
:filemode => 33188}
|
|
223
|
-
|
|
236
|
+
oid = repo.write("This is a blob.", :blob)
|
|
224
237
|
builder = Rugged::Tree::Builder.new
|
|
225
|
-
builder <<
|
|
226
|
-
|
|
238
|
+
builder << { :type => :blob, :name => "README.md", :oid => oid, :filemode => 0100644 }
|
|
239
|
+
|
|
240
|
+
options = {}
|
|
241
|
+
options[:tree] = builder.write(repo)
|
|
242
|
+
|
|
243
|
+
options[:author] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
|
|
244
|
+
options[:committer] = { :email => "testuser@github.com", :name => 'Test Author', :time => Time.now }
|
|
245
|
+
options[:message] ||= "Making a commit via Rugged!"
|
|
246
|
+
options[:parents] = repo.empty? ? [] : [ repo.head.target ].compact
|
|
247
|
+
options[:update_ref] = 'HEAD'
|
|
248
|
+
|
|
249
|
+
Rugged::Commit.create(repo, options)
|
|
227
250
|
```
|
|
228
251
|
|
|
229
252
|
---
|
|
@@ -271,10 +294,10 @@ index.entries
|
|
|
271
294
|
index.each { |i| puts i.inspect }
|
|
272
295
|
|
|
273
296
|
# Get a particular entry in the index.
|
|
274
|
-
index
|
|
297
|
+
index[path]
|
|
275
298
|
|
|
276
299
|
# Unstage.
|
|
277
|
-
index.remove(
|
|
300
|
+
index.remove(path)
|
|
278
301
|
|
|
279
302
|
# Stage. Also updates existing entry if there is one.
|
|
280
303
|
index.add(ientry)
|
|
@@ -287,14 +310,14 @@ index.add(path)
|
|
|
287
310
|
|
|
288
311
|
### Refs
|
|
289
312
|
|
|
290
|
-
The `
|
|
313
|
+
The `Rugged::Reference` class allows you to list, create and delete packed and loose refs.
|
|
291
314
|
|
|
292
315
|
```ruby
|
|
293
316
|
ref = repo.head # or...
|
|
294
317
|
ref = Rugged::Reference.lookup(repo, "refs/heads/master")
|
|
295
318
|
|
|
296
319
|
sha = ref.target
|
|
297
|
-
str = ref.type #
|
|
320
|
+
str = ref.type # :direct
|
|
298
321
|
str = ref.name # "refs/heads/master"
|
|
299
322
|
```
|
|
300
323
|
|
|
@@ -319,7 +342,7 @@ It is also easy to create, update, rename or delete a reference:
|
|
|
319
342
|
```ruby
|
|
320
343
|
ref = Rugged::Reference.create(repo, "refs/heads/unit_test", some_commit_sha)
|
|
321
344
|
|
|
322
|
-
ref.
|
|
345
|
+
ref.set_target(new_sha)
|
|
323
346
|
|
|
324
347
|
ref.rename("refs/heads/blead")
|
|
325
348
|
|
|
@@ -331,14 +354,56 @@ Finally, you can access the reflog for any branch:
|
|
|
331
354
|
```ruby
|
|
332
355
|
ref = Rugged::Reference.lookup(repo, "refs/heads/master")
|
|
333
356
|
entry = ref.log.first
|
|
334
|
-
sha = entry[:
|
|
335
|
-
sha = entry[:
|
|
357
|
+
sha = entry[:id_old]
|
|
358
|
+
sha = entry[:id_new]
|
|
336
359
|
str = entry[:message]
|
|
337
360
|
prsn = entry[:committer]
|
|
338
361
|
```
|
|
339
362
|
|
|
340
363
|
---
|
|
341
364
|
|
|
365
|
+
### Branches
|
|
366
|
+
|
|
367
|
+
`Rugged::Branch` will help you with all of your branch-related needs.
|
|
368
|
+
|
|
369
|
+
Iterate over all branches:
|
|
370
|
+
|
|
371
|
+
```ruby
|
|
372
|
+
Rugged::Branch.each_name(repo).sort
|
|
373
|
+
# => ["master", "origin/HEAD", "origin/master", "origin/packed"]
|
|
374
|
+
|
|
375
|
+
Rugged::Branch.each_name(repo, :local).sort
|
|
376
|
+
# => ["master"]
|
|
377
|
+
|
|
378
|
+
Rugged::Branch.each_name(repo, :remote).sort
|
|
379
|
+
# => ["origin/HEAD", "origin/master", "origin/packed"]
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
Look up branches and get attributes:
|
|
383
|
+
|
|
384
|
+
```ruby
|
|
385
|
+
branch = Rugged::Branch.lookup(repo, "master")
|
|
386
|
+
branch.name # => 'master'
|
|
387
|
+
branch.canonical_name # => 'refs/heads/master'
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Look up the oid for the tip of a branch:
|
|
391
|
+
|
|
392
|
+
```ruby
|
|
393
|
+
Rugged::Branch.lookup(repo, "master").tip.oid
|
|
394
|
+
# => "36060c58702ed4c2a40832c51758d5344201d89a"
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
Creation and deletion:
|
|
398
|
+
|
|
399
|
+
```ruby
|
|
400
|
+
branch = repo.create_branch("test_branch")
|
|
401
|
+
branch.move("new_branch")
|
|
402
|
+
branch.delete!
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
---
|
|
406
|
+
|
|
342
407
|
### Config files
|
|
343
408
|
|
|
344
409
|
It's also easy to read and manipulate the Git config file data with Rugged.
|
|
@@ -380,16 +445,7 @@ for the topic), send a pull request.
|
|
|
380
445
|
|
|
381
446
|
## Development
|
|
382
447
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
$ git clone https://github.com/libgit2/libgit2.git
|
|
386
|
-
$ cd libgit2
|
|
387
|
-
$ mkdir build && cd build
|
|
388
|
-
$ cmake ..
|
|
389
|
-
$ make
|
|
390
|
-
$ make install
|
|
391
|
-
|
|
392
|
-
Now that those are installed, you can install Rugged:
|
|
448
|
+
Simply clone and install:
|
|
393
449
|
|
|
394
450
|
$ git clone https://github.com/libgit2/rugged.git
|
|
395
451
|
$ cd rugged
|
data/ext/rugged/extconf.rb
CHANGED
|
@@ -8,7 +8,9 @@ def sys(cmd)
|
|
|
8
8
|
ret
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
MAKE_PROGRAM = find_executable('gmake') || find_executable('make')
|
|
12
|
+
|
|
13
|
+
if MAKE_PROGRAM.nil?
|
|
12
14
|
STDERR.puts "ERROR: GNU make is required to build Rugged"
|
|
13
15
|
exit(1)
|
|
14
16
|
end
|
|
@@ -27,7 +29,7 @@ else
|
|
|
27
29
|
|
|
28
30
|
if !File.exists?(LIBGIT2_LIB_PATH)
|
|
29
31
|
Dir.chdir(LIBGIT2_DIR) do
|
|
30
|
-
sys("
|
|
32
|
+
sys("#{MAKE_PROGRAM} -f Makefile.embed")
|
|
31
33
|
FileUtils.cp 'libgit2.a', LIBGIT2_LIB_PATH
|
|
32
34
|
end
|
|
33
35
|
end
|
data/ext/rugged/rugged.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
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
#include "rugged.h"
|
|
26
26
|
|
|
27
27
|
const char *RUGGED_ERROR_NAMES[] = {
|
|
28
|
-
|
|
28
|
+
"NoMemError", /* GITERR_NOMEMORY, */
|
|
29
29
|
"OSError", /* GITERR_OS, */
|
|
30
30
|
"InvalidError", /* GITERR_INVALID, */
|
|
31
31
|
"ReferenceError", /* GITERR_REFERENCE, */
|
|
@@ -36,7 +36,7 @@ const char *RUGGED_ERROR_NAMES[] = {
|
|
|
36
36
|
"OdbError", /* GITERR_ODB, */
|
|
37
37
|
"IndexError", /* GITERR_INDEX, */
|
|
38
38
|
"ObjectError", /* GITERR_OBJECT, */
|
|
39
|
-
"NetworkError" /* GITERR_NET, */
|
|
39
|
+
"NetworkError", /* GITERR_NET, */
|
|
40
40
|
"TagError", /* GITERR_TAG, */
|
|
41
41
|
"TreeError", /* GITERR_TREE, */
|
|
42
42
|
"IndexerError", /* GITERR_INDEXER, */
|
|
@@ -50,6 +50,58 @@ VALUE rb_eRuggedErrors[RUGGED_ERROR_COUNT];
|
|
|
50
50
|
|
|
51
51
|
static VALUE rb_mShutdownHook;
|
|
52
52
|
|
|
53
|
+
/*
|
|
54
|
+
* call-seq:
|
|
55
|
+
* Rugged.libgit2_version -> version
|
|
56
|
+
*
|
|
57
|
+
* Returns an array representing the current libgit2 version in use. Using
|
|
58
|
+
* the array makes it easier for the end-user to take conditional actions
|
|
59
|
+
* based on each respective version attribute: major, minor, rev.
|
|
60
|
+
*
|
|
61
|
+
* Rugged.libgit2_version
|
|
62
|
+
* #=> [0, 17, 0]
|
|
63
|
+
*/
|
|
64
|
+
static VALUE rb_git_libgit2_version(VALUE self)
|
|
65
|
+
{
|
|
66
|
+
int major;
|
|
67
|
+
int minor;
|
|
68
|
+
int rev;
|
|
69
|
+
|
|
70
|
+
git_libgit2_version(&major, &minor, &rev);
|
|
71
|
+
|
|
72
|
+
// We return an array of three elements to represent the version components
|
|
73
|
+
return rb_ary_new3(3, INT2NUM(major), INT2NUM(minor), INT2NUM(rev));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* call-seq:
|
|
78
|
+
* Rugged.capabilities-> capabilities
|
|
79
|
+
*
|
|
80
|
+
* Returns an array representing the 'capabilities' that libgit2 was compiled
|
|
81
|
+
* with — this includes GIT_CAP_THREADS (thread support) and GIT_CAP_HTTPS (https).
|
|
82
|
+
* This is implemented in libgit2 with simple bitwise ops; we offer Rubyland an array
|
|
83
|
+
* of symbols representing the capabilities.
|
|
84
|
+
*
|
|
85
|
+
* The possible capabilities are "threads" and "https".
|
|
86
|
+
*
|
|
87
|
+
* Rugged.capabilities
|
|
88
|
+
* #=> [:threads, :https]
|
|
89
|
+
*/
|
|
90
|
+
static VALUE rb_git_capabilities(VALUE self)
|
|
91
|
+
{
|
|
92
|
+
VALUE ret_arr = rb_ary_new();
|
|
93
|
+
|
|
94
|
+
int caps = git_libgit2_capabilities();
|
|
95
|
+
|
|
96
|
+
if (caps & GIT_CAP_THREADS)
|
|
97
|
+
rb_ary_push(ret_arr, CSTR2SYM("threads"));
|
|
98
|
+
|
|
99
|
+
if (caps & GIT_CAP_HTTPS)
|
|
100
|
+
rb_ary_push(ret_arr, CSTR2SYM("https"));
|
|
101
|
+
|
|
102
|
+
return ret_arr;
|
|
103
|
+
}
|
|
104
|
+
|
|
53
105
|
/*
|
|
54
106
|
* call-seq:
|
|
55
107
|
* Rugged.hex_to_raw(oid) -> raw_buffer
|
|
@@ -227,16 +279,19 @@ void rugged_exception_raise(int errorcode)
|
|
|
227
279
|
VALUE err_klass = rb_eRuggedError;
|
|
228
280
|
VALUE err_obj;
|
|
229
281
|
const git_error *error;
|
|
282
|
+
const char *err_message;
|
|
230
283
|
|
|
231
284
|
error = giterr_last();
|
|
232
285
|
|
|
233
|
-
if (
|
|
234
|
-
return;
|
|
235
|
-
|
|
236
|
-
if (error->klass >= 0 && error->klass < RUGGED_ERROR_COUNT)
|
|
286
|
+
if (error && error->klass >= 0 && error->klass < RUGGED_ERROR_COUNT) {
|
|
237
287
|
err_klass = rb_eRuggedErrors[error->klass];
|
|
288
|
+
err_message = error->message;
|
|
289
|
+
} else {
|
|
290
|
+
err_klass = rb_eRuggedErrors[2]; /* InvalidError */
|
|
291
|
+
err_message = "Unknown Error";
|
|
292
|
+
}
|
|
238
293
|
|
|
239
|
-
err_obj = rb_exc_new2(err_klass,
|
|
294
|
+
err_obj = rb_exc_new2(err_klass, err_message);
|
|
240
295
|
giterr_clear();
|
|
241
296
|
rb_exc_raise(err_obj);
|
|
242
297
|
}
|
|
@@ -250,13 +305,18 @@ void Init_rugged()
|
|
|
250
305
|
int i;
|
|
251
306
|
|
|
252
307
|
rb_eRuggedError = rb_define_class_under(rb_mRugged, "Error", rb_eStandardError);
|
|
253
|
-
rb_eRuggedErrors[0] = rb_eNoMemError;
|
|
254
308
|
|
|
255
|
-
|
|
309
|
+
rb_eRuggedErrors[0] = rb_define_class_under(rb_mRugged, RUGGED_ERROR_NAMES[0], rb_eNoMemError);
|
|
310
|
+
rb_eRuggedErrors[1] = rb_define_class_under(rb_mRugged, RUGGED_ERROR_NAMES[1], rb_eIOError);
|
|
311
|
+
rb_eRuggedErrors[2] = rb_define_class_under(rb_mRugged, RUGGED_ERROR_NAMES[2], rb_eArgError);
|
|
312
|
+
|
|
313
|
+
for (i = 3; i < RUGGED_ERROR_COUNT; ++i) {
|
|
256
314
|
rb_eRuggedErrors[i] = rb_define_class_under(rb_mRugged, RUGGED_ERROR_NAMES[i], rb_eRuggedError);
|
|
257
315
|
}
|
|
258
316
|
}
|
|
259
317
|
|
|
318
|
+
rb_define_module_function(rb_mRugged, "libgit2_version", rb_git_libgit2_version, 0);
|
|
319
|
+
rb_define_module_function(rb_mRugged, "capabilities", rb_git_capabilities, 0);
|
|
260
320
|
rb_define_module_function(rb_mRugged, "hex_to_raw", rb_git_hex_to_raw, 1);
|
|
261
321
|
rb_define_module_function(rb_mRugged, "raw_to_hex", rb_git_raw_to_hex, 1);
|
|
262
322
|
rb_define_module_function(rb_mRugged, "minimize_oid", rb_git_minimize_oid, -1);
|
|
@@ -275,6 +335,8 @@ void Init_rugged()
|
|
|
275
335
|
Init_rugged_branch();
|
|
276
336
|
Init_rugged_config();
|
|
277
337
|
Init_rugged_remote();
|
|
338
|
+
Init_rugged_notes();
|
|
339
|
+
Init_rugged_settings();
|
|
278
340
|
|
|
279
341
|
/* Constants */
|
|
280
342
|
rb_define_const(rb_mRugged, "SORT_NONE", INT2FIX(0));
|
data/ext/rugged/rugged.h
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
|
|
@@ -57,6 +57,8 @@ void Init_rugged_revwalk();
|
|
|
57
57
|
void Init_rugged_reference();
|
|
58
58
|
void Init_rugged_config();
|
|
59
59
|
void Init_rugged_remote();
|
|
60
|
+
void Init_rugged_notes();
|
|
61
|
+
void Init_rugged_settings();
|
|
60
62
|
|
|
61
63
|
VALUE rb_git_object_init(git_otype type, int argc, VALUE *argv, VALUE self);
|
|
62
64
|
|
|
@@ -65,15 +67,16 @@ VALUE rugged_raw_read(git_repository *repo, const git_oid *oid);
|
|
|
65
67
|
VALUE rugged_signature_new(const git_signature *sig, const char *encoding_name);
|
|
66
68
|
|
|
67
69
|
VALUE rugged_index_new(VALUE klass, VALUE owner, git_index *index);
|
|
68
|
-
VALUE rugged_object_new(VALUE owner, git_object *object);
|
|
69
70
|
VALUE rugged_config_new(VALUE klass, VALUE owner, git_config *cfg);
|
|
71
|
+
VALUE rugged_object_new(VALUE owner, git_object *object);
|
|
70
72
|
VALUE rugged_ref_new(VALUE klass, VALUE owner, git_reference *ref);
|
|
71
73
|
|
|
72
74
|
VALUE rugged_otype_new(git_otype t);
|
|
73
75
|
git_otype rugged_otype_get(VALUE rb_type);
|
|
74
76
|
|
|
75
77
|
git_signature *rugged_signature_get(VALUE rb_person);
|
|
76
|
-
git_object *
|
|
78
|
+
git_object *rugged_object_get(git_repository *repo, VALUE object_value, git_otype type);
|
|
79
|
+
void rugged_oid_get(git_oid *oid, git_repository *repo, VALUE p);
|
|
77
80
|
|
|
78
81
|
static inline void rugged_set_owner(VALUE object, VALUE owner)
|
|
79
82
|
{
|
|
@@ -101,6 +104,14 @@ static inline int rugged_parse_bool(VALUE boolean)
|
|
|
101
104
|
return boolean ? 1 : 0;
|
|
102
105
|
}
|
|
103
106
|
|
|
107
|
+
extern VALUE rb_cRuggedRepo;
|
|
108
|
+
|
|
109
|
+
static inline void rugged_check_repo(VALUE rb_repo)
|
|
110
|
+
{
|
|
111
|
+
if (!rb_obj_is_kind_of(rb_repo, rb_cRuggedRepo))
|
|
112
|
+
rb_raise(rb_eTypeError, "Expecting a Rugged Repository");
|
|
113
|
+
}
|
|
114
|
+
|
|
104
115
|
/* support for string encodings in 1.9 */
|
|
105
116
|
#ifdef HAVE_RUBY_ENCODING_H
|
|
106
117
|
# define rugged_str_new(str, len, enc) rb_enc_str_new(str, len, enc)
|
|
@@ -120,11 +131,4 @@ static inline VALUE rugged_create_oid(const git_oid *oid)
|
|
|
120
131
|
return rugged_str_new(out, 40, NULL);
|
|
121
132
|
}
|
|
122
133
|
|
|
123
|
-
#define RUGGED_UNPACK_REFERENCE(_rb_obj, _rugged_obj) {\
|
|
124
|
-
if (DATA_PTR(_rb_obj) == NULL)\
|
|
125
|
-
rb_raise(rb_eRuntimeError,\
|
|
126
|
-
"This Git Reference has been deleted and no longer exists on the repository");\
|
|
127
|
-
Data_Get_Struct(_rb_obj, git_reference, _rugged_obj);\
|
|
128
|
-
}
|
|
129
|
-
|
|
130
134
|
#endif
|