rugged 0.19.0 → 0.21.0
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.
- checksums.yaml +7 -0
- data/LICENSE +1 -1
- data/README.md +151 -25
- data/ext/rugged/extconf.rb +48 -27
- data/ext/rugged/rugged.c +107 -35
- data/ext/rugged/rugged.h +44 -8
- data/ext/rugged/rugged_blame.c +292 -0
- data/ext/rugged/rugged_blob.c +84 -31
- data/ext/rugged/rugged_branch.c +90 -223
- data/ext/rugged/rugged_branch_collection.c +445 -0
- data/ext/rugged/rugged_commit.c +190 -9
- data/ext/rugged/rugged_config.c +1 -1
- data/ext/rugged/rugged_cred.c +125 -0
- data/ext/rugged/rugged_diff.c +267 -94
- data/ext/rugged/rugged_diff_delta.c +14 -3
- data/ext/rugged/rugged_diff_hunk.c +31 -28
- data/ext/rugged/rugged_diff_line.c +21 -17
- data/ext/rugged/rugged_index.c +326 -6
- data/ext/rugged/rugged_note.c +39 -34
- data/ext/rugged/rugged_object.c +9 -9
- data/ext/rugged/rugged_patch.c +245 -0
- data/ext/rugged/rugged_reference.c +67 -332
- data/ext/rugged/rugged_reference_collection.c +490 -0
- data/ext/rugged/rugged_remote.c +447 -351
- data/ext/rugged/rugged_remote_collection.c +285 -0
- data/ext/rugged/rugged_repo.c +752 -203
- data/ext/rugged/rugged_revwalk.c +119 -27
- data/ext/rugged/rugged_settings.c +48 -1
- data/ext/rugged/rugged_signature.c +30 -16
- data/ext/rugged/rugged_tag.c +86 -191
- data/ext/rugged/rugged_tag_collection.c +279 -0
- data/ext/rugged/rugged_tree.c +159 -22
- data/lib/rugged/branch.rb +8 -17
- data/lib/rugged/credentials.rb +43 -0
- data/lib/rugged/diff/delta.rb +1 -2
- data/lib/rugged/diff/hunk.rb +4 -9
- data/lib/rugged/diff/line.rb +23 -3
- data/lib/rugged/diff.rb +3 -1
- data/lib/rugged/patch.rb +26 -0
- data/lib/rugged/reference.rb +1 -3
- data/lib/rugged/remote.rb +0 -9
- data/lib/rugged/repository.rb +70 -13
- data/lib/rugged/tag.rb +23 -18
- data/lib/rugged/tree.rb +7 -0
- data/lib/rugged/version.rb +1 -1
- data/lib/rugged.rb +8 -1
- data/vendor/libgit2/AUTHORS +75 -0
- data/vendor/libgit2/CMakeLists.txt +490 -0
- data/vendor/libgit2/COPYING +920 -0
- data/vendor/libgit2/Makefile.embed +25 -7
- data/vendor/libgit2/cmake/Modules/AddCFlagIfSupported.cmake +16 -0
- data/vendor/libgit2/cmake/Modules/FindHTTP_Parser.cmake +39 -0
- data/vendor/libgit2/cmake/Modules/FindIconv.cmake +43 -0
- data/vendor/libgit2/cmake/Modules/FindLIBSSH2.cmake +44 -0
- data/vendor/libgit2/deps/http-parser/LICENSE-MIT +23 -0
- data/vendor/libgit2/deps/regex/regex.c +10 -3
- data/vendor/libgit2/include/git2/attr.h +2 -1
- data/vendor/libgit2/include/git2/blame.h +213 -0
- data/vendor/libgit2/include/git2/blob.h +57 -29
- data/vendor/libgit2/include/git2/branch.h +56 -44
- data/vendor/libgit2/include/git2/buffer.h +112 -0
- data/vendor/libgit2/include/git2/checkout.h +72 -37
- data/vendor/libgit2/include/git2/cherrypick.h +87 -0
- data/vendor/libgit2/include/git2/clone.h +153 -56
- data/vendor/libgit2/include/git2/commit.h +82 -12
- data/vendor/libgit2/include/git2/common.h +31 -19
- data/vendor/libgit2/include/git2/config.h +124 -19
- data/vendor/libgit2/include/git2/cred_helpers.h +1 -1
- data/vendor/libgit2/include/git2/diff.h +636 -494
- data/vendor/libgit2/include/git2/errors.h +48 -15
- data/vendor/libgit2/include/git2/filter.h +149 -0
- data/vendor/libgit2/include/git2/graph.h +14 -0
- data/vendor/libgit2/include/git2/index.h +95 -54
- data/vendor/libgit2/include/git2/indexer.h +15 -9
- data/vendor/libgit2/include/git2/merge.h +402 -39
- data/vendor/libgit2/include/git2/message.h +9 -14
- data/vendor/libgit2/include/git2/net.h +5 -0
- data/vendor/libgit2/include/git2/notes.h +6 -6
- data/vendor/libgit2/include/git2/object.h +34 -2
- data/vendor/libgit2/include/git2/odb.h +77 -14
- data/vendor/libgit2/include/git2/odb_backend.h +50 -6
- data/vendor/libgit2/include/git2/oid.h +4 -8
- data/vendor/libgit2/include/git2/pack.h +58 -4
- data/vendor/libgit2/include/git2/patch.h +277 -0
- data/vendor/libgit2/include/git2/pathspec.h +263 -0
- data/vendor/libgit2/include/git2/push.h +55 -5
- data/vendor/libgit2/include/git2/reflog.h +11 -8
- data/vendor/libgit2/include/git2/refs.h +219 -33
- data/vendor/libgit2/include/git2/refspec.h +3 -4
- data/vendor/libgit2/include/git2/remote.h +216 -76
- data/vendor/libgit2/include/git2/repository.h +85 -40
- data/vendor/libgit2/include/git2/reset.h +15 -4
- data/vendor/libgit2/include/git2/revert.h +86 -0
- data/vendor/libgit2/include/git2/revparse.h +27 -16
- data/vendor/libgit2/include/git2/revwalk.h +44 -6
- data/vendor/libgit2/include/git2/signature.h +17 -3
- data/vendor/libgit2/include/git2/stash.h +8 -12
- data/vendor/libgit2/include/git2/status.h +67 -18
- data/vendor/libgit2/include/git2/submodule.h +100 -85
- data/vendor/libgit2/include/git2/sys/commit.h +38 -4
- data/vendor/libgit2/include/git2/sys/config.h +44 -3
- data/vendor/libgit2/include/git2/sys/diff.h +91 -0
- data/vendor/libgit2/include/git2/sys/filter.h +301 -0
- data/vendor/libgit2/include/git2/sys/index.h +0 -2
- data/vendor/libgit2/include/git2/sys/mempack.h +85 -0
- data/vendor/libgit2/include/git2/sys/odb_backend.h +33 -11
- data/vendor/libgit2/include/git2/sys/refdb_backend.h +51 -5
- data/vendor/libgit2/include/git2/sys/reflog.h +21 -0
- data/vendor/libgit2/include/git2/sys/refs.h +2 -2
- data/vendor/libgit2/include/git2/sys/repository.h +19 -1
- data/vendor/libgit2/include/git2/transport.h +216 -75
- data/vendor/libgit2/include/git2/tree.h +32 -11
- data/vendor/libgit2/include/git2/types.h +124 -10
- data/vendor/libgit2/include/git2/version.h +4 -2
- data/vendor/libgit2/include/git2.h +41 -40
- data/vendor/libgit2/libgit2.pc.in +10 -0
- data/vendor/libgit2/src/array.h +16 -8
- data/vendor/libgit2/src/attr.c +140 -402
- data/vendor/libgit2/src/attr.h +1 -33
- data/vendor/libgit2/src/attr_file.c +298 -135
- data/vendor/libgit2/src/attr_file.h +61 -22
- data/vendor/libgit2/src/attrcache.c +449 -0
- data/vendor/libgit2/src/attrcache.h +38 -6
- data/vendor/libgit2/src/bitvec.h +75 -0
- data/vendor/libgit2/src/blame.c +488 -0
- data/vendor/libgit2/src/blame.h +93 -0
- data/vendor/libgit2/src/blame_git.c +624 -0
- data/vendor/libgit2/src/blame_git.h +20 -0
- data/vendor/libgit2/src/blob.c +137 -92
- data/vendor/libgit2/src/blob.h +9 -0
- data/vendor/libgit2/src/branch.c +175 -156
- data/vendor/libgit2/src/buf_text.c +29 -14
- data/vendor/libgit2/src/buf_text.h +5 -4
- data/vendor/libgit2/src/buffer.c +158 -15
- data/vendor/libgit2/src/buffer.h +33 -20
- data/vendor/libgit2/src/cc-compat.h +8 -2
- data/vendor/libgit2/src/checkout.c +1081 -287
- data/vendor/libgit2/src/checkout.h +1 -1
- data/vendor/libgit2/src/cherrypick.c +226 -0
- data/vendor/libgit2/src/clone.c +297 -245
- data/vendor/libgit2/src/{compress.h → clone.h} +4 -8
- data/vendor/libgit2/src/commit.c +313 -101
- data/vendor/libgit2/src/commit.h +6 -3
- data/vendor/libgit2/src/commit_list.c +3 -3
- data/vendor/libgit2/src/commit_list.h +1 -1
- data/vendor/libgit2/src/common.h +74 -1
- data/vendor/libgit2/src/config.c +570 -145
- data/vendor/libgit2/src/config.h +39 -6
- data/vendor/libgit2/src/config_cache.c +32 -18
- data/vendor/libgit2/src/config_file.c +711 -424
- data/vendor/libgit2/src/config_file.h +4 -3
- data/vendor/libgit2/src/crlf.c +149 -109
- data/vendor/libgit2/src/date.c +35 -7
- data/vendor/libgit2/src/delta.c +1 -1
- data/vendor/libgit2/src/diff.c +719 -414
- data/vendor/libgit2/src/diff.h +52 -7
- data/vendor/libgit2/src/diff_driver.c +183 -85
- data/vendor/libgit2/src/diff_driver.h +1 -1
- data/vendor/libgit2/src/diff_file.c +65 -84
- data/vendor/libgit2/src/diff_file.h +12 -10
- data/vendor/libgit2/src/diff_patch.c +274 -333
- data/vendor/libgit2/src/diff_patch.h +10 -9
- data/vendor/libgit2/src/diff_print.c +381 -179
- data/vendor/libgit2/src/diff_stats.c +336 -0
- data/vendor/libgit2/src/diff_tform.c +393 -215
- data/vendor/libgit2/src/diff_xdiff.c +117 -42
- data/vendor/libgit2/src/errors.c +59 -4
- data/vendor/libgit2/src/fetch.c +40 -34
- data/vendor/libgit2/src/fetch.h +2 -5
- data/vendor/libgit2/src/fetchhead.c +14 -7
- data/vendor/libgit2/src/filebuf.c +13 -24
- data/vendor/libgit2/src/filebuf.h +3 -3
- data/vendor/libgit2/src/fileops.c +104 -296
- data/vendor/libgit2/src/fileops.h +23 -94
- data/vendor/libgit2/src/filter.c +642 -43
- data/vendor/libgit2/src/filter.h +7 -66
- data/vendor/libgit2/src/fnmatch.c +46 -3
- data/vendor/libgit2/src/fnmatch.h +24 -3
- data/vendor/libgit2/src/global.c +158 -42
- data/vendor/libgit2/src/global.h +9 -0
- data/vendor/libgit2/src/graph.c +34 -20
- data/vendor/libgit2/src/hash/hash_generic.h +0 -1
- data/vendor/libgit2/src/hash/hash_openssl.h +0 -1
- data/vendor/libgit2/src/hash/hash_win32.c +14 -29
- data/vendor/libgit2/src/hash.h +0 -2
- data/vendor/libgit2/src/hashsig.c +97 -117
- data/vendor/libgit2/src/ident.c +125 -0
- data/vendor/libgit2/src/ignore.c +159 -110
- data/vendor/libgit2/src/ignore.h +13 -3
- data/vendor/libgit2/src/index.c +803 -445
- data/vendor/libgit2/src/index.h +43 -6
- data/vendor/libgit2/src/indexer.c +475 -157
- data/vendor/libgit2/src/iterator.c +198 -55
- data/vendor/libgit2/src/iterator.h +28 -4
- data/vendor/libgit2/src/map.h +1 -0
- data/vendor/libgit2/src/merge.c +849 -142
- data/vendor/libgit2/src/merge.h +11 -4
- data/vendor/libgit2/src/merge_file.c +183 -78
- data/vendor/libgit2/src/merge_file.h +0 -57
- data/vendor/libgit2/src/message.c +4 -28
- data/vendor/libgit2/src/mwindow.c +117 -8
- data/vendor/libgit2/src/mwindow.h +9 -1
- data/vendor/libgit2/src/netops.c +164 -59
- data/vendor/libgit2/src/netops.h +37 -1
- data/vendor/libgit2/src/notes.c +9 -18
- data/vendor/libgit2/src/notes.h +1 -1
- data/vendor/libgit2/src/object.c +78 -2
- data/vendor/libgit2/src/odb.c +191 -59
- data/vendor/libgit2/src/odb.h +2 -1
- data/vendor/libgit2/src/odb_loose.c +66 -51
- data/vendor/libgit2/src/odb_mempack.c +182 -0
- data/vendor/libgit2/src/odb_pack.c +151 -61
- data/vendor/libgit2/src/oid.c +30 -19
- data/vendor/libgit2/src/oid.h +13 -10
- data/vendor/libgit2/src/pack-objects.c +198 -147
- data/vendor/libgit2/src/pack-objects.h +7 -0
- data/vendor/libgit2/src/pack.c +272 -101
- data/vendor/libgit2/src/pack.h +15 -1
- data/vendor/libgit2/src/path.c +359 -117
- data/vendor/libgit2/src/path.h +110 -20
- data/vendor/libgit2/src/pathspec.c +583 -57
- data/vendor/libgit2/src/pathspec.h +36 -15
- data/vendor/libgit2/src/pool.c +4 -5
- data/vendor/libgit2/src/posix.c +45 -2
- data/vendor/libgit2/src/posix.h +13 -5
- data/vendor/libgit2/src/pqueue.c +73 -119
- data/vendor/libgit2/src/pqueue.h +35 -82
- data/vendor/libgit2/src/push.c +116 -48
- data/vendor/libgit2/src/push.h +5 -0
- data/vendor/libgit2/src/refdb.c +45 -6
- data/vendor/libgit2/src/refdb.h +13 -3
- data/vendor/libgit2/src/refdb_fs.c +1130 -551
- data/vendor/libgit2/src/reflog.c +36 -327
- data/vendor/libgit2/src/reflog.h +6 -1
- data/vendor/libgit2/src/refs.c +345 -142
- data/vendor/libgit2/src/refs.h +9 -2
- data/vendor/libgit2/src/refspec.c +90 -62
- data/vendor/libgit2/src/refspec.h +7 -24
- data/vendor/libgit2/src/remote.c +815 -415
- data/vendor/libgit2/src/remote.h +3 -4
- data/vendor/libgit2/src/repository.c +360 -207
- data/vendor/libgit2/src/repository.h +16 -10
- data/vendor/libgit2/src/reset.c +28 -13
- data/vendor/libgit2/src/revert.c +228 -0
- data/vendor/libgit2/src/revparse.c +29 -30
- data/vendor/libgit2/src/revwalk.c +141 -96
- data/vendor/libgit2/src/revwalk.h +6 -1
- data/vendor/libgit2/src/settings.c +140 -0
- data/vendor/libgit2/src/sha1_lookup.c +71 -0
- data/vendor/libgit2/src/sha1_lookup.h +5 -0
- data/vendor/libgit2/src/signature.c +38 -10
- data/vendor/libgit2/src/sortedcache.c +378 -0
- data/vendor/libgit2/src/sortedcache.h +178 -0
- data/vendor/libgit2/src/stash.c +98 -116
- data/vendor/libgit2/src/status.c +88 -60
- data/vendor/libgit2/src/status.h +2 -2
- data/vendor/libgit2/src/strmap.c +32 -0
- data/vendor/libgit2/src/strmap.h +14 -1
- data/vendor/libgit2/src/strnlen.h +23 -0
- data/vendor/libgit2/src/submodule.c +1073 -615
- data/vendor/libgit2/src/submodule.h +89 -21
- data/vendor/libgit2/src/sysdir.c +252 -0
- data/vendor/libgit2/src/sysdir.h +101 -0
- data/vendor/libgit2/src/tag.c +31 -20
- data/vendor/libgit2/src/thread-utils.h +98 -17
- data/vendor/libgit2/src/trace.h +0 -2
- data/vendor/libgit2/src/transport.c +76 -6
- data/vendor/libgit2/src/transports/cred.c +164 -61
- data/vendor/libgit2/src/transports/git.c +41 -48
- data/vendor/libgit2/src/transports/http.c +65 -109
- data/vendor/libgit2/src/transports/local.c +88 -65
- data/vendor/libgit2/src/transports/smart.c +91 -19
- data/vendor/libgit2/src/transports/smart.h +13 -5
- data/vendor/libgit2/src/transports/smart_pkt.c +24 -14
- data/vendor/libgit2/src/transports/smart_protocol.c +268 -113
- data/vendor/libgit2/src/transports/ssh.c +284 -186
- data/vendor/libgit2/src/transports/winhttp.c +279 -198
- data/vendor/libgit2/src/tree-cache.c +21 -23
- data/vendor/libgit2/src/tree-cache.h +1 -0
- data/vendor/libgit2/src/tree.c +109 -92
- data/vendor/libgit2/src/tree.h +2 -3
- data/vendor/libgit2/src/unix/map.c +7 -1
- data/vendor/libgit2/src/unix/posix.h +0 -1
- data/vendor/libgit2/src/userdiff.h +208 -0
- data/vendor/libgit2/src/util.c +16 -112
- data/vendor/libgit2/src/util.h +107 -3
- data/vendor/libgit2/src/vector.c +72 -17
- data/vendor/libgit2/src/vector.h +32 -5
- data/vendor/libgit2/src/win32/dir.c +15 -40
- data/vendor/libgit2/src/win32/dir.h +3 -2
- data/vendor/libgit2/src/win32/error.c +5 -31
- data/vendor/libgit2/src/win32/findfile.c +47 -66
- data/vendor/libgit2/src/win32/findfile.h +1 -12
- data/vendor/libgit2/src/win32/git2.rc +40 -0
- data/vendor/libgit2/src/win32/map.c +7 -1
- data/vendor/libgit2/src/win32/mingw-compat.h +3 -0
- data/vendor/libgit2/src/win32/posix.h +17 -11
- data/vendor/libgit2/src/win32/posix_w32.c +424 -292
- data/vendor/libgit2/src/win32/precompiled.h +6 -2
- data/vendor/libgit2/src/win32/pthread.c +141 -18
- data/vendor/libgit2/src/win32/pthread.h +50 -8
- data/vendor/libgit2/src/win32/reparse.h +57 -0
- data/vendor/libgit2/src/win32/utf-conv.c +117 -60
- data/vendor/libgit2/src/win32/utf-conv.h +81 -6
- data/vendor/libgit2/src/win32/version.h +21 -4
- data/vendor/libgit2/src/win32/w32_util.c +139 -0
- data/vendor/libgit2/src/win32/w32_util.h +54 -0
- data/vendor/libgit2/src/zstream.c +156 -0
- data/vendor/libgit2/src/zstream.h +39 -0
- metadata +84 -167
- data/Rakefile +0 -61
- data/ext/rugged/rugged_diff_patch.c +0 -169
- data/lib/rugged/diff/patch.rb +0 -28
- data/test/blob_test.rb +0 -341
- data/test/branch_test.rb +0 -199
- data/test/commit_test.rb +0 -104
- data/test/config_test.rb +0 -45
- data/test/coverage/cover.rb +0 -133
- data/test/diff_test.rb +0 -777
- data/test/errors_test.rb +0 -34
- 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/archive.tar.gz +0 -0
- data/test/fixtures/attr/attr0 +0 -1
- data/test/fixtures/attr/attr1 +0 -29
- data/test/fixtures/attr/attr2 +0 -21
- data/test/fixtures/attr/attr3 +0 -4
- data/test/fixtures/attr/binfile +0 -1
- data/test/fixtures/attr/dir/file +0 -0
- data/test/fixtures/attr/file +0 -1
- data/test/fixtures/attr/gitattributes +0 -29
- data/test/fixtures/attr/gitignore +0 -2
- data/test/fixtures/attr/ign +0 -1
- data/test/fixtures/attr/macro_bad +0 -1
- data/test/fixtures/attr/macro_test +0 -1
- data/test/fixtures/attr/root_test1 +0 -1
- data/test/fixtures/attr/root_test2 +0 -6
- data/test/fixtures/attr/root_test3 +0 -19
- data/test/fixtures/attr/root_test4.txt +0 -14
- data/test/fixtures/attr/sub/abc +0 -37
- data/test/fixtures/attr/sub/dir/file +0 -0
- data/test/fixtures/attr/sub/file +0 -1
- data/test/fixtures/attr/sub/ign/file +0 -1
- data/test/fixtures/attr/sub/ign/sub/file +0 -1
- data/test/fixtures/attr/sub/sub/dir +0 -0
- data/test/fixtures/attr/sub/sub/file +0 -1
- data/test/fixtures/attr/sub/sub/subsub.txt +0 -1
- data/test/fixtures/attr/sub/subdir_test1 +0 -2
- data/test/fixtures/attr/sub/subdir_test2.txt +0 -1
- data/test/fixtures/diff/another.txt +0 -38
- data/test/fixtures/diff/readme.txt +0 -36
- data/test/fixtures/mergedrepo/conflicts-one.txt +0 -5
- data/test/fixtures/mergedrepo/conflicts-two.txt +0 -5
- data/test/fixtures/mergedrepo/one.txt +0 -10
- data/test/fixtures/mergedrepo/two.txt +0 -12
- data/test/fixtures/status/current_file +0 -1
- data/test/fixtures/status/ignored_file +0 -1
- data/test/fixtures/status/modified_file +0 -2
- data/test/fixtures/status/new_file +0 -1
- data/test/fixtures/status/staged_changes +0 -2
- data/test/fixtures/status/staged_changes_modified_file +0 -3
- data/test/fixtures/status/staged_delete_modified_file +0 -1
- data/test/fixtures/status/staged_new_file +0 -1
- data/test/fixtures/status/staged_new_file_modified_file +0 -2
- data/test/fixtures/status/subdir/current_file +0 -1
- data/test/fixtures/status/subdir/modified_file +0 -2
- data/test/fixtures/status/subdir/new_file +0 -1
- data/test/fixtures/status/subdir.txt +0 -2
- data/test/fixtures/status//350/277/231 +0 -1
- data/test/fixtures/testrepo.git/HEAD +0 -1
- data/test/fixtures/testrepo.git/config +0 -13
- data/test/fixtures/testrepo.git/description +0 -1
- data/test/fixtures/testrepo.git/index +0 -0
- data/test/fixtures/testrepo.git/info/exclude +0 -6
- data/test/fixtures/testrepo.git/logs/HEAD +0 -3
- data/test/fixtures/testrepo.git/logs/refs/heads/master +0 -3
- data/test/fixtures/testrepo.git/logs/refs/notes/commits +0 -1
- data/test/fixtures/testrepo.git/objects/0c/37a5391bbff43c37f0d0371823a5509eed5b1d +0 -0
- data/test/fixtures/testrepo.git/objects/13/85f264afb75a56a5bec74243be9b367ba4ca08 +0 -0
- data/test/fixtures/testrepo.git/objects/18/1037049a54a1eb5fab404658a3a250b44335d7 +0 -0
- data/test/fixtures/testrepo.git/objects/18/10dff58d8a660512d4832e740f692884338ccd +0 -0
- data/test/fixtures/testrepo.git/objects/2d/2eff63372b08adf0a9eb84109ccf7d19e2f3a2 +0 -0
- data/test/fixtures/testrepo.git/objects/36/060c58702ed4c2a40832c51758d5344201d89a +0 -2
- data/test/fixtures/testrepo.git/objects/44/1034f860c1d5d90e4188d11ae0d325176869a8 +0 -1
- data/test/fixtures/testrepo.git/objects/45/b983be36b73c0788dc9cbcb76cbb80fc7bb057 +0 -0
- data/test/fixtures/testrepo.git/objects/4a/202b346bb0fb0db7eff3cffeb3c70babbd2045 +0 -2
- data/test/fixtures/testrepo.git/objects/5b/5b025afb0b4c913b4c338a42934a3863bf3644 +0 -2
- data/test/fixtures/testrepo.git/objects/60/d415052a33de2150bf68757f6461df4f563ae4 +0 -0
- data/test/fixtures/testrepo.git/objects/61/9f9935957e010c419cb9d15621916ddfcc0b96 +0 -0
- data/test/fixtures/testrepo.git/objects/68/8a8f4ef7496901d15322972f96e212a9e466cc +0 -1
- data/test/fixtures/testrepo.git/objects/75/057dd4114e74cca1d750d0aee1647c903cb60a +0 -0
- data/test/fixtures/testrepo.git/objects/77/71329dfa3002caf8c61a0ceb62a31d09023f37 +0 -0
- data/test/fixtures/testrepo.git/objects/81/4889a078c031f61ed08ab5fa863aea9314344d +0 -0
- data/test/fixtures/testrepo.git/objects/84/96071c1b46c854b31185ea97743be6a8774479 +0 -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/9f/d738e8f7967c078dceed8190330fc8648ee56a +0 -3
- data/test/fixtures/testrepo.git/objects/a4/a7dce85cf63874e984719f4fdd239f5145052f +0 -2
- data/test/fixtures/testrepo.git/objects/a7/1586c1dfe8a71c6cbf6c129f404c5642ff31bd +0 -0
- data/test/fixtures/testrepo.git/objects/a8/233120f6ad708f843d861ce2b7228ec4e3dec6 +0 -0
- data/test/fixtures/testrepo.git/objects/b7/4713326bc972cc15751ed504dca6f6f3b91f7a +0 -3
- data/test/fixtures/testrepo.git/objects/be/3563ae3f795b2b4353bcce3a527ad0a4f7f644 +0 -3
- data/test/fixtures/testrepo.git/objects/c4/7800c7266a2be04c571c04d5a6614691ea99bd +0 -3
- data/test/fixtures/testrepo.git/objects/c4/dc1555e4d4fa0e0c9c3fc46734c7c35b3ce90b +0 -0
- data/test/fixtures/testrepo.git/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/test/fixtures/testrepo.git/objects/f6/0079018b664e4e79329a7ef9559c8d9e0378d1 +0 -0
- data/test/fixtures/testrepo.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 +0 -0
- data/test/fixtures/testrepo.git/objects/fd/093bff70906175335656e6ce6ae05783708765 +0 -0
- data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.idx +0 -0
- data/test/fixtures/testrepo.git/objects/pack/pack-d7c6adf9f61318f041845b01440d09aa7a91e1b5.pack +0 -0
- data/test/fixtures/testrepo.git/packed-refs +0 -2
- data/test/fixtures/testrepo.git/refs/heads/master +0 -1
- data/test/fixtures/testrepo.git/refs/notes/commits +0 -1
- data/test/fixtures/testrepo.git/refs/tags/v0.9 +0 -1
- data/test/fixtures/testrepo.git/refs/tags/v1.0 +0 -1
- data/test/fixtures/text_file.md +0 -464
- data/test/fixtures/unsymlinked.git/HEAD +0 -1
- data/test/fixtures/unsymlinked.git/config +0 -6
- data/test/fixtures/unsymlinked.git/description +0 -1
- data/test/fixtures/unsymlinked.git/info/exclude +0 -2
- data/test/fixtures/unsymlinked.git/objects/08/8b64704e0d6b8bd061dea879418cb5442a3fbf +0 -0
- data/test/fixtures/unsymlinked.git/objects/13/a5e939bca25940c069fd2169d993dba328e30b +0 -0
- data/test/fixtures/unsymlinked.git/objects/19/bf568e59e3a0b363cafb4106226e62d4a4c41c +0 -0
- data/test/fixtures/unsymlinked.git/objects/58/1fadd35b4cf320d102a152f918729011604773 +0 -0
- data/test/fixtures/unsymlinked.git/objects/5c/87b6791e8b13da658a14d1ef7e09b5dc3bac8c +0 -0
- data/test/fixtures/unsymlinked.git/objects/6f/e5f5398af85fb3de8a6aba0339b6d3bfa26a27 +0 -0
- data/test/fixtures/unsymlinked.git/objects/7f/ccd75616ec188b8f1b23d67506a334cc34a49d +0 -0
- data/test/fixtures/unsymlinked.git/objects/80/6999882bf91d24241e4077906b9017605eb1f3 +0 -0
- data/test/fixtures/unsymlinked.git/objects/83/7d176303c5005505ec1e4a30231c40930c0230 +0 -0
- data/test/fixtures/unsymlinked.git/objects/a8/595ccca04f40818ae0155c8f9c77a230e597b6 +0 -2
- data/test/fixtures/unsymlinked.git/objects/cf/8f1cf5cce859c438d6cc067284cb5e161206e7 +0 -0
- data/test/fixtures/unsymlinked.git/objects/d5/278d05c8607ec420bfee4cf219fbc0eeebfd6a +0 -0
- data/test/fixtures/unsymlinked.git/objects/f4/e16fb76536591a41454194058d048d8e4dd2e9 +0 -0
- data/test/fixtures/unsymlinked.git/objects/f9/e65619d93fdf2673882e0a261c5e93b1a84006 +0 -0
- data/test/fixtures/unsymlinked.git/refs/heads/exe-file +0 -1
- data/test/fixtures/unsymlinked.git/refs/heads/master +0 -1
- data/test/fixtures/unsymlinked.git/refs/heads/reg-file +0 -1
- data/test/index_test.rb +0 -333
- data/test/lib_test.rb +0 -127
- data/test/note_test.rb +0 -158
- data/test/object_test.rb +0 -43
- data/test/reference_test.rb +0 -207
- data/test/remote_test.rb +0 -324
- data/test/repo_pack_test.rb +0 -24
- data/test/repo_reset_test.rb +0 -82
- data/test/repo_test.rb +0 -402
- data/test/tag_test.rb +0 -68
- data/test/test_helper.rb +0 -92
- data/test/tree_test.rb +0 -91
- data/test/walker_test.rb +0 -88
- data/vendor/libgit2/src/amiga/map.c +0 -48
- data/vendor/libgit2/src/compress.c +0 -53
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: b0356879d784d17079ccdae0dfef24d5841c0774
|
|
4
|
+
data.tar.gz: 2a4d772157bcc8b25f61a7745d1694507bc56ca4
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: d6f0d49db816f5337decf934efda9529ddbf8beaf6edfa72737f661e7b5759afd7b4f27f21734de0098e101bc7b714b90aad674c450344d7cd7865de5fe73e3b
|
|
7
|
+
data.tar.gz: cf7dca7617881507c212c4c813bd41494d31ed1c3d8579092dc138a5b449d89af5264c9b673cf938f39a8781c000c768bcf498bd82136afb167e950d617b88bc
|
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -17,7 +17,9 @@ Rugged is a self-contained gem. You can install it by running:
|
|
|
17
17
|
|
|
18
18
|
$ gem install rugged
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
You need to have CMake installed on your system to be able to build the included version of `libgit2`. If you want to build Rugged with HTTPS and SSH support, check out the list of optional [libgit2 dependencies](https://github.com/libgit2/libgit2#optional-dependencies).
|
|
21
|
+
|
|
22
|
+
If you're using bundler and want to bundle `libgit2` with Rugged, you can use the `:submodules` option:
|
|
21
23
|
|
|
22
24
|
```ruby
|
|
23
25
|
gem 'rugged', git: 'git://github.com/libgit2/rugged.git', branch: 'development', submodules: true
|
|
@@ -29,6 +31,24 @@ To load Rugged, you'll usually want to add something like this:
|
|
|
29
31
|
require 'rugged'
|
|
30
32
|
```
|
|
31
33
|
|
|
34
|
+
### Use the system provided libgit2
|
|
35
|
+
|
|
36
|
+
By default, Rugged builds and uses a bundled version of libgit2. If you
|
|
37
|
+
want to use the system library instead, you can install rugged as follows:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
gem install rugged -- --use-system-libraries
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Or if you are using bundler:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
bundle config build.rugged --use-system-libraries
|
|
47
|
+
bundle install
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
However, note that Rugged does only support specific versions of libgit2.
|
|
51
|
+
|
|
32
52
|
## Usage
|
|
33
53
|
|
|
34
54
|
Rugged gives you access to the many parts of a Git repository. You can read and
|
|
@@ -122,7 +142,8 @@ more high-level, so it may be preferable:
|
|
|
122
142
|
|
|
123
143
|
```ruby
|
|
124
144
|
oid = repo.write("This is a blob.", :blob)
|
|
125
|
-
index =
|
|
145
|
+
index = repo.index
|
|
146
|
+
index.read_tree(repo.head.target.tree)
|
|
126
147
|
index.add(:path => "README.md", :oid => oid, :mode => 0100644)
|
|
127
148
|
|
|
128
149
|
options = {}
|
|
@@ -254,6 +275,46 @@ options[:update_ref] = 'HEAD'
|
|
|
254
275
|
Rugged::Commit.create(repo, options)
|
|
255
276
|
```
|
|
256
277
|
|
|
278
|
+
### Blob Objects
|
|
279
|
+
|
|
280
|
+
Blob objects represent the data in the files of a Tree Object.
|
|
281
|
+
|
|
282
|
+
```ruby
|
|
283
|
+
blob = repo.lookup('e1253910439ea902cf49be8a9f02f3c08d89ac73')
|
|
284
|
+
blob.content # => Gives you the content of the blob.
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
#### Streaming Blob Objects
|
|
288
|
+
|
|
289
|
+
There is currently no way to stream data from a blob, because `libgit2` itself does not (yet) support
|
|
290
|
+
streaming blobs out of the git object database. While there are hooks and interfaces for supporting it,
|
|
291
|
+
the default file system backend always loads the entire blob contents into memory.
|
|
292
|
+
|
|
293
|
+
If you need to access a Blob object through an IO-like API, you can wrap it with the `StringIO` class.
|
|
294
|
+
Note that the only advantage here is a stream-compatible interface, the complete blob object will still
|
|
295
|
+
be loaded into memory. Below is an example for streaming a Blob using the Sinatra framework:
|
|
296
|
+
|
|
297
|
+
```ruby
|
|
298
|
+
# Sinatra endpoint
|
|
299
|
+
get "/blobs/:sha" do
|
|
300
|
+
repo = Rugged::Repository.new(my_repo_path)
|
|
301
|
+
blob = repo.lookup params[:sha]
|
|
302
|
+
|
|
303
|
+
headers({
|
|
304
|
+
"Vary" => "Accept",
|
|
305
|
+
"Connection" => "keep-alive",
|
|
306
|
+
"Transfer-Encoding" => "chunked",
|
|
307
|
+
"Content-Type" => "application/octet-stream",
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
stream do |out|
|
|
311
|
+
StringIO.new(blob.content).each(8000) do |chunk|
|
|
312
|
+
out << chunk
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
```
|
|
317
|
+
|
|
257
318
|
---
|
|
258
319
|
|
|
259
320
|
### Commit Walker
|
|
@@ -315,29 +376,28 @@ index.add(path)
|
|
|
315
376
|
|
|
316
377
|
### Refs
|
|
317
378
|
|
|
318
|
-
|
|
379
|
+
You can access references through the `Rugged::ReferenceCollection` object returned by `Repository#references`.
|
|
319
380
|
|
|
320
381
|
```ruby
|
|
321
|
-
ref = repo.
|
|
322
|
-
ref = Rugged::Reference.lookup(repo, "refs/heads/master")
|
|
382
|
+
ref = repo.references["refs/heads/master"]
|
|
323
383
|
|
|
324
|
-
sha = ref.
|
|
384
|
+
sha = ref.target_id
|
|
325
385
|
str = ref.type # :direct
|
|
326
386
|
str = ref.name # "refs/heads/master"
|
|
327
387
|
```
|
|
328
388
|
|
|
329
|
-
You can also easily
|
|
389
|
+
You can also easily iterate over all references:
|
|
330
390
|
|
|
331
391
|
```ruby
|
|
332
|
-
repo.
|
|
392
|
+
repo.references.each do |ref|
|
|
333
393
|
puts ref.name
|
|
334
394
|
end
|
|
335
395
|
```
|
|
336
396
|
|
|
337
|
-
Or
|
|
397
|
+
Or only over references that match the given pattern (glob):
|
|
338
398
|
|
|
339
399
|
```ruby
|
|
340
|
-
repo.refs
|
|
400
|
+
repo.references.each("refs/tags/*") do |ref|
|
|
341
401
|
puts ref.name
|
|
342
402
|
end
|
|
343
403
|
```
|
|
@@ -345,19 +405,22 @@ end
|
|
|
345
405
|
It is also easy to create, update, rename or delete a reference:
|
|
346
406
|
|
|
347
407
|
```ruby
|
|
348
|
-
ref =
|
|
408
|
+
ref = repo.references.create("refs/heads/unit_test", some_commit_sha)
|
|
349
409
|
|
|
350
|
-
|
|
410
|
+
repo.references.update(ref, new_sha) # or...
|
|
411
|
+
repo.references.update("refs/heads/unit_test", new_sha)
|
|
351
412
|
|
|
352
|
-
|
|
413
|
+
repo.references.rename(ref, "refs/heads/blead") # or...
|
|
414
|
+
repo.references.rename("refs/heads/unit_test", "refs/heads/blead")
|
|
353
415
|
|
|
354
|
-
|
|
416
|
+
repo.references.delete(ref) # or...
|
|
417
|
+
repo.references.delete("refs/heads/unit_test") # or...
|
|
355
418
|
```
|
|
356
419
|
|
|
357
420
|
Finally, you can access the reflog for any branch:
|
|
358
421
|
|
|
359
422
|
```ruby
|
|
360
|
-
ref =
|
|
423
|
+
ref = repo.references["refs/heads/master"]
|
|
361
424
|
entry = ref.log.first
|
|
362
425
|
sha = entry[:id_old]
|
|
363
426
|
sha = entry[:id_new]
|
|
@@ -369,42 +432,99 @@ prsn = entry[:committer]
|
|
|
369
432
|
|
|
370
433
|
### Branches
|
|
371
434
|
|
|
372
|
-
`Rugged::
|
|
435
|
+
The `Rugged::BranchCollection` object returned by `Repository#branches` will help
|
|
436
|
+
you with all of your branch-related needs.
|
|
373
437
|
|
|
374
438
|
Iterate over all branches:
|
|
375
439
|
|
|
376
440
|
```ruby
|
|
377
|
-
|
|
441
|
+
repo.branches.each_name().sort
|
|
378
442
|
# => ["master", "origin/HEAD", "origin/master", "origin/packed"]
|
|
379
443
|
|
|
380
|
-
|
|
444
|
+
repo.branches.each_name(:local).sort
|
|
381
445
|
# => ["master"]
|
|
382
446
|
|
|
383
|
-
|
|
447
|
+
repo.branches.each_name(:remote).sort
|
|
384
448
|
# => ["origin/HEAD", "origin/master", "origin/packed"]
|
|
385
449
|
```
|
|
386
450
|
|
|
387
451
|
Look up branches and get attributes:
|
|
388
452
|
|
|
389
453
|
```ruby
|
|
390
|
-
branch =
|
|
454
|
+
branch = repo.branches["master"]
|
|
391
455
|
branch.name # => 'master'
|
|
392
456
|
branch.canonical_name # => 'refs/heads/master'
|
|
393
457
|
```
|
|
394
458
|
|
|
395
|
-
Look up the
|
|
459
|
+
Look up the id for the target of a branch:
|
|
396
460
|
|
|
397
461
|
```ruby
|
|
398
|
-
|
|
462
|
+
repo.branches["master"].target_id
|
|
399
463
|
# => "36060c58702ed4c2a40832c51758d5344201d89a"
|
|
400
464
|
```
|
|
401
465
|
|
|
402
466
|
Creation and deletion:
|
|
403
467
|
|
|
404
468
|
```ruby
|
|
405
|
-
branch = repo.
|
|
406
|
-
|
|
407
|
-
|
|
469
|
+
branch = repo.branches.create("test_branch", "HEAD")
|
|
470
|
+
|
|
471
|
+
repo.branches.rename("test_branch", "new_branch") # or...
|
|
472
|
+
repo.branches.rename("refs/heads/test_branch", "new_branch") # or...
|
|
473
|
+
repo.branches.rename(ref, "new_branch") # or...
|
|
474
|
+
|
|
475
|
+
repo.branches.delete("test_branch") # or...
|
|
476
|
+
repo.branches.delete("refs/heads/test_branch") # or...
|
|
477
|
+
repo.branches.delete(ref) # or...
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
---
|
|
481
|
+
|
|
482
|
+
### Diffs
|
|
483
|
+
|
|
484
|
+
There are various ways to get hands on diffs:
|
|
485
|
+
|
|
486
|
+
```ruby
|
|
487
|
+
# Diff between two subsequent commits
|
|
488
|
+
diff_commits = commit_object.parents[0].diff(commit_object)
|
|
489
|
+
|
|
490
|
+
# Diff between two tree objects
|
|
491
|
+
diff_trees = tree_object_a.diff(tree_object_b)
|
|
492
|
+
|
|
493
|
+
# Diff between index/staging and current working directory
|
|
494
|
+
diff_index = repository.index.diff
|
|
495
|
+
|
|
496
|
+
# Diff between index/staging and another diffable (commit/tree/index)
|
|
497
|
+
diff_index_diffable = repository.index.diff(some_diffable)
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
When you already have a diff object, you can examine it:
|
|
501
|
+
|
|
502
|
+
```ruby
|
|
503
|
+
# Get patch
|
|
504
|
+
diff.patch
|
|
505
|
+
=> "diff --git a/foo1 b/foo1\nnew file mode 100644\nindex 0000000..81b68f0\n--- /dev/null\n+++ b/foo1\n@@ -0,0 +1,2 @@\n+abc\n+add line1\ndiff --git a/txt1 b/txt1\ndeleted file mode 100644\nindex 81b68f0..0000000\n--- a/txt1\n+++ /dev/null\n@@ -1,2 +0,0 @@\n-abc\n-add line1\ndiff --git a/txt2 b/txt2\nindex a7bb42f..a357de7 100644\n--- a/txt2\n+++ b/txt2\n@@ -1,2 +1,3 @@\n abc2\n add line2-1\n+add line2-2\n"
|
|
506
|
+
|
|
507
|
+
# Get delta (faster, if you only need information on what files changed)
|
|
508
|
+
diff.each_delta{ |d| puts d.inspect }
|
|
509
|
+
#<Rugged::Diff::Delta:70144372137380 {old_file: {:oid=>"0000000000000000000000000000000000000000", :path=>"foo1", :size=>0, :flags=>6, :mode=>0}, new_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"foo1", :size=>14, :flags=>6, :mode=>33188}, similarity: 0, status: :added>
|
|
510
|
+
#<Rugged::Diff::Delta:70144372136540 {old_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"txt1", :size=>14, :flags=>6, :mode=>33188}, new_file: {:oid=>"0000000000000000000000000000000000000000", :path=>"txt1", :size=>0, :flags=>6, :mode=>0}, similarity: 0, status: :deleted>
|
|
511
|
+
#<Rugged::Diff::Delta:70144372135780 {old_file: {:oid=>"a7bb42f71183c162efea5e4c80597437d716c62b", :path=>"txt2", :size=>17, :flags=>6, :mode=>33188}, new_file: {:oid=>"a357de7d870823acc3953f1b2471f9c18d0d56ea", :path=>"txt2", :size=>29, :flags=>6, :mode=>33188}, similarity: 0, status: :modified>
|
|
512
|
+
|
|
513
|
+
# Detect renamed files
|
|
514
|
+
# Note that the status field changed from :added/:deleted to :renamed
|
|
515
|
+
diff.find_similar!
|
|
516
|
+
diff.each_delta{ |d| puts d.inspect }
|
|
517
|
+
#<Rugged::Diff::Delta:70144372230920 {old_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"txt1", :size=>14, :flags=>6, :mode=>33188}, new_file: {:oid=>"81b68f040b120c9627518213f7fc317d1ed18e1c", :path=>"foo1", :size=>14, :flags=>6, :mode=>33188}, similarity: 100, status: :renamed>
|
|
518
|
+
#<Rugged::Diff::Delta:70144372230140 {old_file: {:oid=>"a7bb42f71183c162efea5e4c80597437d716c62b", :path=>"txt2", :size=>17, :flags=>6, :mode=>33188}, new_file: {:oid=>"a357de7d870823acc3953f1b2471f9c18d0d56ea", :path=>"txt2", :size=>29, :flags=>6, :mode=>33188}, similarity: 0, status: :modified>
|
|
519
|
+
|
|
520
|
+
# Merge one diff into another (mutating the first one)
|
|
521
|
+
diff1.merge!(diff2)
|
|
522
|
+
|
|
523
|
+
# Write a patch into a file (or any other object responding to write)
|
|
524
|
+
# Note that the patch as in diff.patch will be written, it won't be applied
|
|
525
|
+
file = File.open('/some/file', 'w')
|
|
526
|
+
diff.write_patch(file)
|
|
527
|
+
file.close
|
|
408
528
|
```
|
|
409
529
|
|
|
410
530
|
---
|
|
@@ -458,11 +578,17 @@ Simply clone and install:
|
|
|
458
578
|
$ rake compile
|
|
459
579
|
$ rake test
|
|
460
580
|
|
|
581
|
+
## Support
|
|
582
|
+
|
|
583
|
+
We encourage you to use StackOverflow for any questions or concerns regarding Rugged. Please tag your questions with the [rugged](http://stackoverflow.com/questions/tagged/rugged) keyword.
|
|
584
|
+
|
|
585
|
+
For bug reports, please open a ticket on the GitHub [issue tracker](https://github.com/libgit2/rugged/issues).
|
|
461
586
|
|
|
462
587
|
## Authors
|
|
463
588
|
|
|
464
589
|
* Vicent Marti <tanoku@gmail.com>
|
|
465
590
|
* Scott Chacon <schacon@gmail.com>
|
|
591
|
+
* Arthur Schreiber <schreiber.arthur@gmail.com>
|
|
466
592
|
|
|
467
593
|
|
|
468
594
|
## License
|
data/ext/rugged/extconf.rb
CHANGED
|
@@ -4,11 +4,8 @@ RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
|
|
|
4
4
|
|
|
5
5
|
$CFLAGS << " #{ENV["CFLAGS"]}"
|
|
6
6
|
$CFLAGS << " -g"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
$CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
|
|
10
|
-
$CFLAGS << " -Wall"
|
|
11
|
-
end
|
|
7
|
+
$CFLAGS << " -O3" unless $CFLAGS[/-O\d/]
|
|
8
|
+
$CFLAGS << " -Wall -Wno-comment"
|
|
12
9
|
|
|
13
10
|
def sys(cmd)
|
|
14
11
|
puts " -- #{cmd}"
|
|
@@ -18,39 +15,63 @@ def sys(cmd)
|
|
|
18
15
|
ret
|
|
19
16
|
end
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
if !find_executable('cmake')
|
|
19
|
+
abort "ERROR: CMake is required to build Rugged."
|
|
20
|
+
end
|
|
22
21
|
|
|
23
|
-
if
|
|
24
|
-
|
|
25
|
-
exit(1)
|
|
22
|
+
if !(MAKE = find_executable('gmake') || find_executable('make'))
|
|
23
|
+
abort "ERROR: GNU make is required to build Rugged."
|
|
26
24
|
end
|
|
27
25
|
|
|
28
|
-
if
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
26
|
+
if !find_executable('pkg-config')
|
|
27
|
+
abort "ERROR: pkg-config is required to build Rugged."
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
if arg_config("--use-system-libraries", !!ENV['RUGGED_USE_SYSTEM_LIBRARIES'])
|
|
31
|
+
puts "Building Rugged using system libraries.\n"
|
|
32
|
+
|
|
33
|
+
dir_config('git2').any? or pkg_config('libgit2')
|
|
34
|
+
|
|
35
|
+
try_compile(<<-SRC) or abort "libgit2 version is not compatible"
|
|
36
|
+
#include <git2/version.h>
|
|
37
|
+
|
|
38
|
+
#if LIBGIT2_SOVERSION != 21
|
|
39
|
+
#error libgit2 version is not compatible
|
|
40
|
+
#endif
|
|
41
|
+
SRC
|
|
35
42
|
else
|
|
36
43
|
CWD = File.expand_path(File.dirname(__FILE__))
|
|
37
44
|
LIBGIT2_DIR = File.join(CWD, '..', '..', 'vendor', 'libgit2')
|
|
38
|
-
LIBGIT2_LIB_PATH = "#{CWD}/libgit2_embed.a"
|
|
39
45
|
|
|
40
|
-
|
|
41
|
-
Dir.
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
Dir.chdir(LIBGIT2_DIR) do
|
|
47
|
+
Dir.mkdir("build") if !Dir.exists?("build")
|
|
48
|
+
|
|
49
|
+
Dir.chdir("build") do
|
|
50
|
+
sys("cmake .. -DBUILD_CLAR=OFF -DTHREADSAFE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC -DCMAKE_BUILD_TYPE=RelWithDebInfo")
|
|
51
|
+
sys(MAKE)
|
|
52
|
+
|
|
53
|
+
pcfile = File.join(LIBGIT2_DIR, "build", "libgit2.pc")
|
|
54
|
+
$LDFLAGS << " " + `pkg-config --libs --static #{pcfile}`.strip
|
|
44
55
|
end
|
|
45
56
|
end
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
|
|
58
|
+
# Prepend the vendored libgit2 build dir to the $DEFLIBPATH.
|
|
59
|
+
#
|
|
60
|
+
# By default, $DEFLIBPATH includes $(libpath), which usually points
|
|
61
|
+
# to something like /usr/lib for system ruby versions (not those
|
|
62
|
+
# installed through rbenv or rvm).
|
|
63
|
+
#
|
|
64
|
+
# This was causing system-wide libgit2 installations to be preferred
|
|
65
|
+
# over of our vendored libgit2 version when building rugged.
|
|
66
|
+
#
|
|
67
|
+
# By putting the path to the vendored libgit2 library at the front of
|
|
68
|
+
# $DEFLIBPATH, we can ensure that our bundled version is always used.
|
|
69
|
+
$DEFLIBPATH.unshift("#{LIBGIT2_DIR}/build")
|
|
70
|
+
dir_config('git2', "#{LIBGIT2_DIR}/include", "#{LIBGIT2_DIR}/build")
|
|
71
|
+
end
|
|
49
72
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
exit(1)
|
|
53
|
-
end
|
|
73
|
+
unless have_library 'git2' and have_header 'git2.h'
|
|
74
|
+
abort "ERROR: Failed to build libgit2"
|
|
54
75
|
end
|
|
55
76
|
|
|
56
77
|
create_makefile("rugged/rugged")
|
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) 2014 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,6 +25,7 @@
|
|
|
25
25
|
#include "rugged.h"
|
|
26
26
|
|
|
27
27
|
const char *RUGGED_ERROR_NAMES[] = {
|
|
28
|
+
"None", /* GITERR_NONE */
|
|
28
29
|
"NoMemError", /* GITERR_NOMEMORY, */
|
|
29
30
|
"OSError", /* GITERR_OS, */
|
|
30
31
|
"InvalidError", /* GITERR_INVALID, */
|
|
@@ -47,6 +48,8 @@ const char *RUGGED_ERROR_NAMES[] = {
|
|
|
47
48
|
"CheckoutError", /* GITERR_CHECKOUT, */
|
|
48
49
|
"FetchheadError", /* GITERR_FETCHHEAD, */
|
|
49
50
|
"MergeError", /* GITERR_MERGE, */
|
|
51
|
+
"SshError", /* GITERR_SSH, */
|
|
52
|
+
"FilterError" /* GITERR_FILTER, */
|
|
50
53
|
};
|
|
51
54
|
|
|
52
55
|
#define RUGGED_ERROR_COUNT (int)((sizeof(RUGGED_ERROR_NAMES)/sizeof(RUGGED_ERROR_NAMES[0])))
|
|
@@ -81,29 +84,28 @@ static VALUE rb_git_libgit2_version(VALUE self)
|
|
|
81
84
|
|
|
82
85
|
/*
|
|
83
86
|
* call-seq:
|
|
84
|
-
* Rugged.
|
|
87
|
+
* Rugged.features -> [feature, ...]
|
|
85
88
|
*
|
|
86
|
-
* Returns an array representing the
|
|
87
|
-
* with — this includes
|
|
88
|
-
* This is implemented in libgit2 with simple bitwise ops; we offer Rubyland an array
|
|
89
|
-
* of symbols representing the capabilities.
|
|
89
|
+
* Returns an array representing the features that libgit2 was compiled
|
|
90
|
+
* with — this includes `:threads` (thread support), `:https` and `:ssh`.
|
|
90
91
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
* Rugged.capabilities #=> [:threads, :https]
|
|
92
|
+
* Rugged.features #=> [:threads, :https]
|
|
94
93
|
*/
|
|
95
|
-
static VALUE
|
|
94
|
+
static VALUE rb_git_features(VALUE self)
|
|
96
95
|
{
|
|
97
96
|
VALUE ret_arr = rb_ary_new();
|
|
98
97
|
|
|
99
|
-
int caps =
|
|
98
|
+
int caps = git_libgit2_features();
|
|
100
99
|
|
|
101
|
-
if (caps &
|
|
100
|
+
if (caps & GIT_FEATURE_THREADS)
|
|
102
101
|
rb_ary_push(ret_arr, CSTR2SYM("threads"));
|
|
103
102
|
|
|
104
|
-
if (caps &
|
|
103
|
+
if (caps & GIT_FEATURE_HTTPS)
|
|
105
104
|
rb_ary_push(ret_arr, CSTR2SYM("https"));
|
|
106
105
|
|
|
106
|
+
if (caps & GIT_FEATURE_SSH)
|
|
107
|
+
rb_ary_push(ret_arr, CSTR2SYM("ssh"));
|
|
108
|
+
|
|
107
109
|
return ret_arr;
|
|
108
110
|
}
|
|
109
111
|
|
|
@@ -155,28 +157,49 @@ static VALUE rb_git_raw_to_hex(VALUE self, VALUE raw)
|
|
|
155
157
|
|
|
156
158
|
/*
|
|
157
159
|
* call-seq:
|
|
158
|
-
* Rugged.prettify_message(message, strip_comments) -> clean_message
|
|
160
|
+
* Rugged.prettify_message(message, strip_comments = '#') -> clean_message
|
|
159
161
|
*
|
|
160
162
|
* Process a commit or tag message into standard form, by stripping trailing spaces and
|
|
161
163
|
* comments, and making sure that the message has a proper header line.
|
|
162
164
|
*/
|
|
163
|
-
static VALUE rb_git_prettify_message(
|
|
165
|
+
static VALUE rb_git_prettify_message(int argc, VALUE *argv, VALUE self)
|
|
164
166
|
{
|
|
165
|
-
char
|
|
166
|
-
int strip_comments
|
|
167
|
-
|
|
167
|
+
char comment_char = '#';
|
|
168
|
+
int strip_comments = 1;
|
|
169
|
+
|
|
170
|
+
git_buf message = { NULL };
|
|
171
|
+
VALUE rb_message, rb_strip;
|
|
172
|
+
int error;
|
|
173
|
+
VALUE result = Qnil;
|
|
174
|
+
|
|
175
|
+
rb_scan_args(argc, argv, "11", &rb_message, &rb_strip);
|
|
168
176
|
|
|
169
177
|
Check_Type(rb_message, T_STRING);
|
|
170
|
-
|
|
178
|
+
|
|
179
|
+
switch (TYPE(rb_strip)) {
|
|
180
|
+
case T_FALSE:
|
|
181
|
+
strip_comments = 0;
|
|
182
|
+
break;
|
|
183
|
+
|
|
184
|
+
case T_STRING:
|
|
185
|
+
if (RSTRING_LEN(rb_strip) > 0)
|
|
186
|
+
comment_char = RSTRING_PTR(rb_strip)[0];
|
|
187
|
+
break;
|
|
188
|
+
|
|
189
|
+
case T_TRUE:
|
|
190
|
+
case T_NIL:
|
|
191
|
+
default:
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
171
194
|
|
|
172
|
-
|
|
173
|
-
|
|
195
|
+
error = git_message_prettify(&message,
|
|
196
|
+
StringValueCStr(rb_message), strip_comments, comment_char);
|
|
174
197
|
|
|
175
|
-
|
|
176
|
-
|
|
198
|
+
if (!error)
|
|
199
|
+
result = rb_enc_str_new(message.ptr, message.size, rb_utf8_encoding());
|
|
177
200
|
|
|
178
|
-
|
|
179
|
-
|
|
201
|
+
git_buf_free(&message);
|
|
202
|
+
rugged_exception_check(error);
|
|
180
203
|
|
|
181
204
|
return result;
|
|
182
205
|
}
|
|
@@ -300,6 +323,25 @@ void rugged_exception_raise(void)
|
|
|
300
323
|
rb_exc_raise(err_obj);
|
|
301
324
|
}
|
|
302
325
|
|
|
326
|
+
VALUE rugged__block_yield_splat(VALUE args) {
|
|
327
|
+
VALUE block = rb_ary_shift(args);
|
|
328
|
+
int n = RARRAY_LENINT(args);
|
|
329
|
+
|
|
330
|
+
if (n == 0) {
|
|
331
|
+
return rb_funcall(block, rb_intern("call"), 0);
|
|
332
|
+
} else {
|
|
333
|
+
int i;
|
|
334
|
+
VALUE *argv;
|
|
335
|
+
argv = ALLOCA_N(VALUE, n);
|
|
336
|
+
|
|
337
|
+
for (i=0; i < n; i++) {
|
|
338
|
+
argv[i] = rb_ary_entry(args, i);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return rb_funcall2(block, rb_intern("call"), n, argv);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
303
345
|
/*
|
|
304
346
|
* call-seq:
|
|
305
347
|
* Rugged.__cache_usage__ -> [current, max]
|
|
@@ -377,39 +419,69 @@ void Init_rugged(void)
|
|
|
377
419
|
}
|
|
378
420
|
|
|
379
421
|
rb_define_module_function(rb_mRugged, "libgit2_version", rb_git_libgit2_version, 0);
|
|
380
|
-
rb_define_module_function(rb_mRugged, "
|
|
422
|
+
rb_define_module_function(rb_mRugged, "features", rb_git_features, 0);
|
|
381
423
|
rb_define_module_function(rb_mRugged, "hex_to_raw", rb_git_hex_to_raw, 1);
|
|
382
424
|
rb_define_module_function(rb_mRugged, "raw_to_hex", rb_git_raw_to_hex, 1);
|
|
383
425
|
rb_define_module_function(rb_mRugged, "minimize_oid", rb_git_minimize_oid, -1);
|
|
384
|
-
rb_define_module_function(rb_mRugged, "prettify_message", rb_git_prettify_message,
|
|
426
|
+
rb_define_module_function(rb_mRugged, "prettify_message", rb_git_prettify_message, -1);
|
|
385
427
|
rb_define_module_function(rb_mRugged, "__cache_usage__", rb_git_cache_usage, 0);
|
|
386
428
|
|
|
429
|
+
Init_rugged_reference();
|
|
430
|
+
Init_rugged_reference_collection();
|
|
431
|
+
|
|
387
432
|
Init_rugged_object();
|
|
388
433
|
Init_rugged_commit();
|
|
389
434
|
Init_rugged_tree();
|
|
390
435
|
Init_rugged_tag();
|
|
436
|
+
Init_rugged_tag_collection();
|
|
391
437
|
Init_rugged_blob();
|
|
392
438
|
|
|
393
439
|
Init_rugged_index();
|
|
394
440
|
Init_rugged_repo();
|
|
395
441
|
Init_rugged_revwalk();
|
|
396
|
-
Init_rugged_reference();
|
|
397
442
|
Init_rugged_branch();
|
|
443
|
+
Init_rugged_branch_collection();
|
|
398
444
|
Init_rugged_config();
|
|
399
445
|
Init_rugged_remote();
|
|
446
|
+
Init_rugged_remote_collection();
|
|
400
447
|
Init_rugged_notes();
|
|
401
448
|
Init_rugged_settings();
|
|
402
449
|
Init_rugged_diff();
|
|
403
|
-
|
|
450
|
+
Init_rugged_patch();
|
|
404
451
|
Init_rugged_diff_delta();
|
|
405
452
|
Init_rugged_diff_hunk();
|
|
406
453
|
Init_rugged_diff_line();
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
454
|
+
Init_rugged_blame();
|
|
455
|
+
Init_rugged_cred();
|
|
456
|
+
|
|
457
|
+
/*
|
|
458
|
+
* Sort the repository contents in no particular ordering;
|
|
459
|
+
* this sorting is arbitrary, implementation-specific
|
|
460
|
+
* and subject to change at any time.
|
|
461
|
+
* This is the default sorting for new walkers.
|
|
462
|
+
*/
|
|
463
|
+
rb_define_const(rb_mRugged, "SORT_NONE", INT2FIX(GIT_SORT_NONE));
|
|
464
|
+
|
|
465
|
+
/*
|
|
466
|
+
* Sort the repository contents in topological order
|
|
467
|
+
* (parents before children); this sorting mode
|
|
468
|
+
* can be combined with time sorting.
|
|
469
|
+
*/
|
|
470
|
+
rb_define_const(rb_mRugged, "SORT_TOPO", INT2FIX(GIT_SORT_TOPOLOGICAL));
|
|
471
|
+
|
|
472
|
+
/*
|
|
473
|
+
* Sort the repository contents by commit time;
|
|
474
|
+
* this sorting mode can be combined with
|
|
475
|
+
* topological sorting.
|
|
476
|
+
*/
|
|
477
|
+
rb_define_const(rb_mRugged, "SORT_DATE", INT2FIX(GIT_SORT_TIME));
|
|
478
|
+
|
|
479
|
+
/*
|
|
480
|
+
* Iterate through the repository contents in reverse
|
|
481
|
+
* order; this sorting mode can be combined with
|
|
482
|
+
* any of the above.
|
|
483
|
+
*/
|
|
484
|
+
rb_define_const(rb_mRugged, "SORT_REVERSE", INT2FIX(GIT_SORT_REVERSE));
|
|
413
485
|
|
|
414
486
|
/* Initialize libgit2 */
|
|
415
487
|
git_threads_init();
|