rugged 0.16.0 → 0.17.0b1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +373 -243
- data/Rakefile +22 -0
- data/ext/rugged/extconf.rb +9 -6
- data/ext/rugged/rugged.c +123 -31
- data/ext/rugged/rugged.h +11 -10
- data/ext/rugged/rugged_blob.c +181 -18
- data/ext/rugged/rugged_commit.c +196 -18
- data/ext/rugged/rugged_config.c +94 -5
- data/ext/rugged/rugged_object.c +54 -1
- data/ext/rugged/rugged_reference.c +203 -15
- data/ext/rugged/{remote.c → rugged_remote.c} +35 -10
- data/ext/rugged/rugged_repo.c +323 -81
- data/ext/rugged/rugged_revwalk.c +57 -4
- data/ext/rugged/rugged_signature.c +3 -3
- data/ext/rugged/rugged_tag.c +72 -1
- data/ext/rugged/rugged_tree.c +70 -2
- data/ext/rugged/vendor/libgit2-dist/deps/regex/config.h +7 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regcomp.c +3856 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.c +85 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.h +582 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.c +1744 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.h +810 -0
- data/ext/rugged/vendor/libgit2-dist/deps/regex/regexec.c +4369 -0
- data/ext/rugged/vendor/libgit2-dist/examples/diff.c +238 -0
- data/ext/rugged/vendor/libgit2-dist/examples/general.c +4 -4
- data/ext/rugged/vendor/libgit2-dist/examples/network/fetch.c +101 -85
- data/ext/rugged/vendor/libgit2-dist/examples/network/git2.c +7 -3
- data/ext/rugged/vendor/libgit2-dist/examples/network/index-pack.c +80 -25
- data/ext/rugged/vendor/libgit2-dist/examples/network/ls-remote.c +6 -6
- data/ext/rugged/vendor/libgit2-dist/include/git2/attr.h +224 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/blob.h +59 -5
- data/ext/rugged/vendor/libgit2-dist/include/git2/branch.h +114 -7
- data/ext/rugged/vendor/libgit2-dist/include/git2/commit.h +14 -7
- data/ext/rugged/vendor/libgit2-dist/include/git2/common.h +4 -3
- data/ext/rugged/vendor/libgit2-dist/include/git2/config.h +105 -27
- data/ext/rugged/vendor/libgit2-dist/include/git2/diff.h +409 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/errors.h +47 -82
- data/ext/rugged/vendor/libgit2-dist/include/git2/index.h +25 -10
- data/ext/rugged/vendor/libgit2-dist/include/git2/indexer.h +46 -1
- data/ext/rugged/vendor/libgit2-dist/include/git2/merge.h +35 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/net.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/include/git2/notes.h +139 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/object.h +5 -5
- data/ext/rugged/vendor/libgit2-dist/include/git2/odb.h +13 -13
- data/ext/rugged/vendor/libgit2-dist/include/git2/odb_backend.h +8 -8
- data/ext/rugged/vendor/libgit2-dist/include/git2/oid.h +14 -9
- data/ext/rugged/vendor/libgit2-dist/include/git2/reflog.h +5 -5
- data/ext/rugged/vendor/libgit2-dist/include/git2/refs.h +37 -17
- data/ext/rugged/vendor/libgit2-dist/include/git2/refspec.h +17 -9
- data/ext/rugged/vendor/libgit2-dist/include/git2/remote.h +83 -16
- data/ext/rugged/vendor/libgit2-dist/include/git2/repository.h +24 -10
- data/ext/rugged/vendor/libgit2-dist/include/git2/reset.h +44 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/revparse.h +36 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/revwalk.h +74 -6
- data/ext/rugged/vendor/libgit2-dist/include/git2/signature.h +3 -3
- data/ext/rugged/vendor/libgit2-dist/include/git2/status.h +120 -19
- data/ext/rugged/vendor/libgit2-dist/include/git2/submodule.h +103 -0
- data/ext/rugged/vendor/libgit2-dist/include/git2/tag.h +28 -10
- data/ext/rugged/vendor/libgit2-dist/include/git2/threads.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/include/git2/tree.h +13 -13
- data/ext/rugged/vendor/libgit2-dist/include/git2/types.h +16 -2
- data/ext/rugged/vendor/libgit2-dist/include/git2/version.h +3 -3
- data/ext/rugged/vendor/libgit2-dist/include/git2/windows.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/include/git2.h +7 -2
- data/ext/rugged/vendor/libgit2-dist/src/attr.c +677 -0
- data/ext/rugged/vendor/libgit2-dist/src/attr.h +56 -0
- data/ext/rugged/vendor/libgit2-dist/src/attr_file.c +609 -0
- data/ext/rugged/vendor/libgit2-dist/src/attr_file.h +145 -0
- data/ext/rugged/vendor/libgit2-dist/src/blob.c +213 -60
- data/ext/rugged/vendor/libgit2-dist/src/blob.h +2 -1
- data/ext/rugged/vendor/libgit2-dist/src/branch.c +208 -0
- data/ext/rugged/vendor/libgit2-dist/src/branch.h +17 -0
- data/ext/rugged/vendor/libgit2-dist/src/bswap.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/buffer.c +395 -46
- data/ext/rugged/vendor/libgit2-dist/src/buffer.h +112 -9
- data/ext/rugged/vendor/libgit2-dist/src/cache.c +37 -49
- data/ext/rugged/vendor/libgit2-dist/src/cache.h +7 -17
- data/ext/rugged/vendor/libgit2-dist/src/cc-compat.h +18 -16
- data/ext/rugged/vendor/libgit2-dist/src/commit.c +56 -90
- data/ext/rugged/vendor/libgit2-dist/src/commit.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/common.h +12 -5
- data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.h +3 -3
- data/ext/rugged/vendor/libgit2-dist/src/config.c +247 -158
- data/ext/rugged/vendor/libgit2-dist/src/config.h +10 -1
- data/ext/rugged/vendor/libgit2-dist/src/config_cache.c +94 -0
- data/ext/rugged/vendor/libgit2-dist/src/config_file.c +606 -496
- data/ext/rugged/vendor/libgit2-dist/src/config_file.h +31 -0
- data/ext/rugged/vendor/libgit2-dist/src/crlf.c +228 -0
- data/ext/rugged/vendor/libgit2-dist/src/date.c +876 -0
- data/ext/rugged/vendor/libgit2-dist/src/delta-apply.c +15 -9
- data/ext/rugged/vendor/libgit2-dist/src/delta-apply.h +2 -2
- data/ext/rugged/vendor/libgit2-dist/src/diff.c +814 -0
- data/ext/rugged/vendor/libgit2-dist/src/diff.h +43 -0
- data/ext/rugged/vendor/libgit2-dist/src/diff_output.c +794 -0
- data/ext/rugged/vendor/libgit2-dist/src/errors.c +89 -74
- data/ext/rugged/vendor/libgit2-dist/src/fetch.c +94 -66
- data/ext/rugged/vendor/libgit2-dist/src/fetch.h +5 -4
- data/ext/rugged/vendor/libgit2-dist/src/filebuf.c +157 -100
- data/ext/rugged/vendor/libgit2-dist/src/filebuf.h +22 -8
- data/ext/rugged/vendor/libgit2-dist/src/fileops.c +330 -206
- data/ext/rugged/vendor/libgit2-dist/src/fileops.h +82 -51
- data/ext/rugged/vendor/libgit2-dist/src/filter.c +165 -0
- data/ext/rugged/vendor/libgit2-dist/src/filter.h +119 -0
- data/ext/rugged/vendor/libgit2-dist/src/global.c +4 -4
- data/ext/rugged/vendor/libgit2-dist/src/global.h +4 -1
- data/ext/rugged/vendor/libgit2-dist/src/hash.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/hash.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/ignore.c +203 -0
- data/ext/rugged/vendor/libgit2-dist/src/ignore.h +38 -0
- data/ext/rugged/vendor/libgit2-dist/src/index.c +220 -169
- data/ext/rugged/vendor/libgit2-dist/src/index.h +5 -1
- data/ext/rugged/vendor/libgit2-dist/src/indexer.c +601 -102
- data/ext/rugged/vendor/libgit2-dist/src/iterator.c +748 -0
- data/ext/rugged/vendor/libgit2-dist/src/iterator.h +151 -0
- data/ext/rugged/vendor/libgit2-dist/src/khash.h +608 -0
- data/ext/rugged/vendor/libgit2-dist/src/map.h +6 -1
- data/ext/rugged/vendor/libgit2-dist/src/message.c +61 -0
- data/ext/rugged/vendor/libgit2-dist/src/message.h +14 -0
- data/ext/rugged/vendor/libgit2-dist/src/mwindow.c +27 -29
- data/ext/rugged/vendor/libgit2-dist/src/mwindow.h +4 -4
- data/ext/rugged/vendor/libgit2-dist/src/netops.c +375 -56
- data/ext/rugged/vendor/libgit2-dist/src/netops.h +12 -9
- data/ext/rugged/vendor/libgit2-dist/src/notes.c +548 -0
- data/ext/rugged/vendor/libgit2-dist/src/notes.h +28 -0
- data/ext/rugged/vendor/libgit2-dist/src/object.c +59 -21
- data/ext/rugged/vendor/libgit2-dist/src/odb.c +212 -175
- data/ext/rugged/vendor/libgit2-dist/src/odb.h +39 -2
- data/ext/rugged/vendor/libgit2-dist/src/odb_loose.c +238 -241
- data/ext/rugged/vendor/libgit2-dist/src/odb_pack.c +94 -106
- data/ext/rugged/vendor/libgit2-dist/src/oid.c +59 -60
- data/ext/rugged/vendor/libgit2-dist/src/oidmap.h +42 -0
- data/ext/rugged/vendor/libgit2-dist/src/pack.c +198 -170
- data/ext/rugged/vendor/libgit2-dist/src/pack.h +16 -9
- data/ext/rugged/vendor/libgit2-dist/src/path.c +496 -106
- data/ext/rugged/vendor/libgit2-dist/src/path.h +214 -20
- data/ext/rugged/vendor/libgit2-dist/src/pkt.c +88 -159
- data/ext/rugged/vendor/libgit2-dist/src/pkt.h +9 -5
- data/ext/rugged/vendor/libgit2-dist/src/pool.c +294 -0
- data/ext/rugged/vendor/libgit2-dist/src/pool.h +125 -0
- data/ext/rugged/vendor/libgit2-dist/src/posix.c +38 -16
- data/ext/rugged/vendor/libgit2-dist/src/posix.h +20 -2
- data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/pqueue.c +7 -7
- data/ext/rugged/vendor/libgit2-dist/src/pqueue.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/protocol.c +21 -13
- data/ext/rugged/vendor/libgit2-dist/src/protocol.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/reflog.c +125 -103
- data/ext/rugged/vendor/libgit2-dist/src/reflog.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/refs.c +713 -640
- data/ext/rugged/vendor/libgit2-dist/src/refs.h +27 -3
- data/ext/rugged/vendor/libgit2-dist/src/refspec.c +51 -17
- data/ext/rugged/vendor/libgit2-dist/src/refspec.h +13 -1
- data/ext/rugged/vendor/libgit2-dist/src/remote.c +307 -119
- data/ext/rugged/vendor/libgit2-dist/src/remote.h +3 -2
- data/ext/rugged/vendor/libgit2-dist/src/repository.c +593 -442
- data/ext/rugged/vendor/libgit2-dist/src/repository.h +80 -2
- data/ext/rugged/vendor/libgit2-dist/src/reset.c +103 -0
- data/ext/rugged/vendor/libgit2-dist/src/revparse.c +753 -0
- data/ext/rugged/vendor/libgit2-dist/src/revwalk.c +434 -158
- data/ext/rugged/vendor/libgit2-dist/src/sha1.c +3 -3
- data/ext/rugged/vendor/libgit2-dist/src/sha1.h +2 -2
- data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.c +3 -2
- data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/signature.c +69 -80
- data/ext/rugged/vendor/libgit2-dist/src/signature.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/status.c +184 -638
- data/ext/rugged/vendor/libgit2-dist/src/strmap.h +64 -0
- data/ext/rugged/vendor/libgit2-dist/src/submodule.c +387 -0
- data/ext/rugged/vendor/libgit2-dist/src/tag.c +162 -137
- data/ext/rugged/vendor/libgit2-dist/src/tag.h +2 -1
- data/ext/rugged/vendor/libgit2-dist/src/thread-utils.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/thread-utils.h +8 -8
- data/ext/rugged/vendor/libgit2-dist/src/transport.c +31 -19
- data/ext/rugged/vendor/libgit2-dist/src/transport.h +31 -11
- data/ext/rugged/vendor/libgit2-dist/src/transports/git.c +168 -193
- data/ext/rugged/vendor/libgit2-dist/src/transports/http.c +192 -241
- data/ext/rugged/vendor/libgit2-dist/src/transports/local.c +92 -86
- data/ext/rugged/vendor/libgit2-dist/src/tree-cache.c +32 -49
- data/ext/rugged/vendor/libgit2-dist/src/tree-cache.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/tree.c +172 -145
- data/ext/rugged/vendor/libgit2-dist/src/tree.h +16 -2
- data/ext/rugged/vendor/libgit2-dist/src/tsort.c +16 -14
- data/ext/rugged/vendor/libgit2-dist/src/unix/map.c +8 -24
- data/ext/rugged/vendor/libgit2-dist/src/unix/posix.h +9 -3
- data/ext/rugged/vendor/libgit2-dist/src/util.c +94 -38
- data/ext/rugged/vendor/libgit2-dist/src/util.h +119 -13
- data/ext/rugged/vendor/libgit2-dist/src/vector.c +84 -31
- data/ext/rugged/vendor/libgit2-dist/src/vector.h +37 -4
- data/ext/rugged/vendor/libgit2-dist/src/win32/dir.c +81 -41
- data/ext/rugged/vendor/libgit2-dist/src/{dir.h → win32/dir.h} +4 -9
- data/ext/rugged/vendor/libgit2-dist/src/win32/map.c +19 -35
- data/ext/rugged/vendor/libgit2-dist/src/win32/mingw-compat.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/win32/msvc-compat.h +5 -1
- data/ext/rugged/vendor/libgit2-dist/src/win32/posix.h +10 -8
- data/ext/rugged/vendor/libgit2-dist/src/win32/posix_w32.c +262 -118
- data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.c +12 -9
- data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.h +1 -1
- data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.c +30 -26
- data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.h +2 -1
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiff.h +135 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.c +572 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.h +63 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.c +253 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.h +36 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xhistogram.c +371 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xinclude.h +46 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmacros.h +54 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmerge.c +619 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xpatience.c +358 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.c +483 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.h +34 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xtypes.h +67 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.c +419 -0
- data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.h +49 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/attr_expect.h +43 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/file.c +226 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/flags.c +108 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/lookup.c +262 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/repo.c +273 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/buf/basic.c +5 -5
- data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_helpers.c +181 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_libgit2.h +55 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/commit.c +44 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/parse.c +350 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/signature.c +65 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/write.c +140 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/add.c +3 -3
- data/ext/rugged/vendor/libgit2-dist/tests-clar/config/multivar.c +151 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/new.c +5 -5
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/read.c +44 -32
- data/ext/rugged/vendor/libgit2-dist/tests-clar/config/stress.c +61 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/write.c +20 -5
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/buffer.c +613 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/dirent.c +39 -26
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/env.c +115 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/errors.c +60 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/filebuf.c +4 -18
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/hex.c +22 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/oid.c +6 -6
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/path.c +420 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/pool.c +85 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/rmdir.c +68 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/string.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/strmap.c +102 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/strtol.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/tests-clar/core/vector.c +191 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/date/date.c +15 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/blob.c +254 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.c +104 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.h +47 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/index.c +92 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/iterator.c +572 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/patch.c +99 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/tree.c +210 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/workdir.c +543 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/index/read_tree.c +46 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/index/rename.c +2 -12
- data/ext/rugged/vendor/libgit2-dist/tests-clar/index/tests.c +246 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/network/createremotethenload.c +33 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotelocal.c +137 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotes.c +183 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notes.c +133 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notesref.c +57 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/filter.c +125 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/fromchunks.c +87 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/write.c +69 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/commit/commitstagedfile.c +126 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/lookup.c +63 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/message.c +171 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/chars.c +3 -14
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/compare.c +4 -4
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/convert.c +10 -10
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/data.h +0 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/fromstr.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/hash.c +21 -17
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/short.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/size.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/type2string.c +14 -14
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/write.c +455 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/peel.c +56 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/read.c +130 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/write.c +192 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/tree/frompath.c +22 -16
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/read.c +75 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/write.c +84 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose_data.h +0 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/mixed.c +24 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/pack_data.h +0 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/packed.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/sorting.c +1 -1
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/create.c +113 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/delete.c +91 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/listall.c +78 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/move.c +72 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/crashes.c +17 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/create.c +149 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/delete.c +85 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/list.c +53 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/listall.c +36 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/lookup.c +42 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/normalize.c +200 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/overwrite.c +136 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/pack.c +67 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/read.c +194 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/reflog.c +123 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/rename.c +339 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/revparse.c +174 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/unicode.c +42 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/discover.c +142 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/repo/getters.c +19 -1
- data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/init.c +235 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/open.c +282 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/setters.c +80 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/mixed.c +47 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.c +10 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.h +6 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/soft.c +102 -0
- data/ext/rugged/vendor/libgit2-dist/{tests/t05-revwalk.c → tests-clar/revwalk/basic.c} +85 -44
- data/ext/rugged/vendor/libgit2-dist/tests-clar/revwalk/mergebase.c +148 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/ignore.c +133 -0
- data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/status/single.c +2 -11
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_data.h +202 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.c +49 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.h +33 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/submodules.c +112 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/status/worktree.c +649 -0
- data/ext/rugged/vendor/libgit2-dist/tests-clar/threads/basic.c +20 -0
- data/ext/rugged/vendor/libgit2-dist.tar.gz +0 -0
- data/lib/rugged/commit.rb +35 -0
- data/lib/rugged/object.rb +7 -0
- data/lib/rugged/reference.rb +9 -0
- data/lib/rugged/repository.rb +99 -3
- data/lib/rugged/tag.rb +22 -0
- data/lib/rugged/tree.rb +8 -0
- data/lib/rugged/version.rb +1 -1
- data/lib/rugged.rb +4 -1
- data/test/blob_test.rb +2 -2
- data/test/commit_test.rb +27 -13
- data/test/config_test.rb +44 -0
- data/test/coverage/HEAD.json +1 -1
- data/test/fixtures/testrepo.git/config +2 -0
- data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
- data/test/lib_test.rb +7 -0
- data/test/object_test.rb +3 -3
- data/test/reference_test.rb +46 -8
- data/test/remote_test.rb +8 -2
- data/test/repo_pack_test.rb +3 -3
- data/test/repo_test.rb +79 -11
- data/test/tag_test.rb +9 -2
- data/test/test_helper.rb +21 -0
- data/test/tree_test.rb +18 -6
- metadata +205 -81
- data/ext/rugged/vendor/libgit2-dist/include/git2/zlib.h +0 -40
- data/ext/rugged/vendor/libgit2-dist/src/hashtable.c +0 -243
- data/ext/rugged/vendor/libgit2-dist/src/hashtable.h +0 -80
- data/ext/rugged/vendor/libgit2-dist/tests/t00-core.c +0 -628
- data/ext/rugged/vendor/libgit2-dist/tests/t01-data.h +0 -322
- data/ext/rugged/vendor/libgit2-dist/tests/t01-rawobj.c +0 -638
- data/ext/rugged/vendor/libgit2-dist/tests/t03-data.h +0 -344
- data/ext/rugged/vendor/libgit2-dist/tests/t03-objwrite.c +0 -255
- data/ext/rugged/vendor/libgit2-dist/tests/t04-commit.c +0 -788
- data/ext/rugged/vendor/libgit2-dist/tests/t06-index.c +0 -219
- data/ext/rugged/vendor/libgit2-dist/tests/t07-hashtable.c +0 -192
- data/ext/rugged/vendor/libgit2-dist/tests/t08-tag.c +0 -357
- data/ext/rugged/vendor/libgit2-dist/tests/t09-tree.c +0 -221
- data/ext/rugged/vendor/libgit2-dist/tests/t10-refs.c +0 -1294
- data/ext/rugged/vendor/libgit2-dist/tests/t12-repo.c +0 -174
- data/ext/rugged/vendor/libgit2-dist/tests/t13-threads.c +0 -41
- data/ext/rugged/vendor/libgit2-dist/tests/t17-bufs.c +0 -61
- data/ext/rugged/vendor/libgit2-dist/tests/t18-status.c +0 -448
- data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.c +0 -310
- data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.h +0 -83
- data/ext/rugged/vendor/libgit2-dist/tests/test_lib.c +0 -198
- data/ext/rugged/vendor/libgit2-dist/tests/test_lib.h +0 -54
- data/ext/rugged/vendor/libgit2-dist/tests/test_main.c +0 -89
- data/ext/rugged/vendor/libgit2-dist/tests-clay/clay.h +0 -187
- data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_libgit2.h +0 -28
- data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_main.c +0 -1073
- data/ext/rugged/vendor/libgit2-dist/tests-clay/config/stress.c +0 -39
- data/ext/rugged/vendor/libgit2-dist/tests-clay/core/path.c +0 -139
- data/ext/rugged/vendor/libgit2-dist/tests-clay/core/rmdir.c +0 -50
- data/ext/rugged/vendor/libgit2-dist/tests-clay/core/vector.c +0 -66
- data/ext/rugged/vendor/libgit2-dist/tests-clay/network/remotes.c +0 -50
- data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/init.c +0 -104
- data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/open.c +0 -54
- data/ext/rugged/vendor/libgit2-dist/tests-clay/status/status_data.h +0 -48
- data/ext/rugged/vendor/libgit2-dist/tests-clay/status/worktree.c +0 -124
- data/lib/rugged/objects.rb +0 -45
- data/test/fixtures/testrepo.git/refs/heads/new_name +0 -1
data/README.md
CHANGED
@@ -1,279 +1,409 @@
|
|
1
|
-
Rugged
|
2
|
-
|
1
|
+
# Rugged
|
2
|
+
**libgit2 bindings in Ruby**
|
3
3
|
|
4
|
-
Rugged is a
|
5
|
-
|
4
|
+
Rugged is a library for accessing libgit2 in Ruby. It gives you the speed and
|
5
|
+
portability of libgit2 with the beauty of the Ruby language.
|
6
6
|
|
7
|
-
|
8
|
-
========================
|
7
|
+
### libgit2
|
9
8
|
|
10
|
-
|
9
|
+
libgit2 is a pure C implementation of the Git core methods. It's designed to be
|
10
|
+
fast and portable. For more information about libgit2,
|
11
|
+
[check out libgit2's website](http://libgit2.github.com) or browse the
|
12
|
+
[libgit2 organization](https://github.com/libgit2) on GitHub.
|
11
13
|
|
12
|
-
|
13
|
-
$ cd libgit2
|
14
|
-
$ mdkir build && cd build
|
15
|
-
$ cmake ..
|
16
|
-
$ make
|
17
|
-
$ make install
|
14
|
+
## Install
|
18
15
|
|
19
|
-
|
16
|
+
Rugged is a self-contained gem. You can install it by running:
|
20
17
|
|
21
|
-
$
|
18
|
+
$ gem install rugged
|
22
19
|
|
23
|
-
|
20
|
+
To load Rugged, you'll usually want to add something like this:
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
```ruby
|
23
|
+
require 'rugged'
|
24
|
+
```
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Rugged gives you access to the many parts of a Git repository. You can read and
|
29
|
+
write objects, walk a tree, access the staging area, and lots more. Let's look
|
30
|
+
at each area individually.
|
31
|
+
|
32
|
+
### Repositories
|
33
|
+
|
34
|
+
#### Instantiation
|
35
|
+
|
36
|
+
The repository is naturally central to Git. Rugged has a `Repository` class that
|
37
|
+
you can instantiate with a path:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
repo = Rugged::Repository.new('path/to/my/repository')
|
41
|
+
# => #<Rugged::Repository:2228536260 {path: "path/to/my/repository/.git/"}>
|
42
|
+
```
|
43
|
+
|
44
|
+
If you're working against a bare repository, you'll need to indicate that:
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
# Second parameter indicates whether the repo is a bare repository
|
48
|
+
Rugged::Repository.init_at('.', true)
|
49
|
+
```
|
50
|
+
|
51
|
+
You can also let Rugged discover the path to the .git directory if you give it a
|
52
|
+
subdirectory.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Rugged::Repository.discover("/Users/me/projects/repo/lib/subdir/")
|
56
|
+
# => "/Users/me/projects/repo/.git/"
|
57
|
+
```
|
58
|
+
|
59
|
+
Once your Repository instantiated (in the following examples, as `repo`), you
|
60
|
+
can access or modify it.
|
61
|
+
|
62
|
+
#### Accessing a Repository
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
# Does the given SHA1 exist in this repository?
|
66
|
+
repo.exists?('07b44cbda23b726e5d54e2ef383495922c024202')
|
67
|
+
# => true
|
68
|
+
|
69
|
+
# Boolean repository state values:
|
70
|
+
repo.bare?
|
71
|
+
# => false
|
72
|
+
repo.empty?
|
73
|
+
# => true
|
74
|
+
repo.head_orphan?
|
75
|
+
# => false
|
76
|
+
repo.head_detached?
|
77
|
+
# => false
|
78
|
+
|
79
|
+
# Path accessors
|
80
|
+
repo.path
|
81
|
+
# => "path/to/my/repository/.git/"
|
82
|
+
repo.workdir
|
83
|
+
# => "path/to/my/repository/"
|
84
|
+
|
85
|
+
# The HEAD of the repository.
|
86
|
+
ref = repo.head
|
87
|
+
# => #<Rugged::Reference:2228467240 {name: "refs/heads/master", target: "07b44cbda23b726e5d54e2ef383495922c024202"}>
|
88
|
+
|
89
|
+
# From the returned ref, you can also access the `name` and `target`:
|
90
|
+
ref.name
|
91
|
+
# => "refs/heads/master"
|
92
|
+
ref.target
|
93
|
+
# => "07b44cbda23b726e5d54e2ef383495922c024202"
|
94
|
+
|
95
|
+
# Reading an object
|
96
|
+
object = repo.read('a0ae5566e3c8a3bddffab21022056f0b5e03ef07')
|
97
|
+
# => #<Rugged::OdbObject:0x109a64780>
|
98
|
+
object.len
|
99
|
+
# => 237
|
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#file_at`\n"
|
102
|
+
object.type
|
103
|
+
# => :commit
|
104
|
+
```
|
105
|
+
|
106
|
+
#### Writing to a Repository
|
107
|
+
|
108
|
+
There's a few ways to write to a repository. To write directly from your
|
109
|
+
instantiated repository object:
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
sha = repo.hash(content, type)
|
113
|
+
sha = repo.write(content, type)
|
114
|
+
```
|
115
|
+
|
116
|
+
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.
|
118
|
+
|
119
|
+
---
|
120
|
+
|
121
|
+
### Objects
|
122
|
+
|
123
|
+
`Object` is the main object class - it shouldn't be created directly, but all of
|
124
|
+
these methods should be useful in their derived classes.
|
125
|
+
|
126
|
+
```ruby
|
127
|
+
obj = repo.lookup(sha)
|
128
|
+
obj.oid # object sha
|
129
|
+
obj.type [OBJ_COMMIT, OBJ_TREE, OBJ_BLOB, OBJ_TAG]
|
130
|
+
|
131
|
+
robj = obj.read_raw
|
132
|
+
str = robj.data
|
133
|
+
int = robj.len
|
134
|
+
```
|
135
|
+
|
136
|
+
There are four base object types in Git: **blobs**, **commits**, **tags**, and
|
137
|
+
**trees**. Each of these object types have a corresponding class within Rugged.
|
138
|
+
|
139
|
+
### Commit Objects
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
commit = repo.lookup('a0ae5566e3c8a3bddffab21022056f0b5e03ef07')
|
143
|
+
# => #<Rugged::Commit:2245304380>
|
144
|
+
|
145
|
+
commit.message
|
146
|
+
# => "Add `Repository#file_at`\n"
|
147
|
+
|
148
|
+
commit.time
|
149
|
+
# => Sat Apr 07 21:23:25 -0700 2012
|
150
|
+
|
151
|
+
commit.author
|
152
|
+
# => {:email=>"tanoku@gmail.com", :name=>"Vicent Mart\303\255", :time=>Sun Apr 08 04:23:25 UTC 2012}
|
153
|
+
|
154
|
+
commit.tree
|
155
|
+
# => #<Rugged::Tree:2245269740>
|
156
|
+
|
157
|
+
commit.parents
|
158
|
+
=> [#<Rugged::Commit:2245264600 {message: "Merge pull request #47 from isaac/remotes\n\nAdd Rugged::Repository#remotes", tree: #<Rugged::Tree:2245264240 {oid: 6a2aee58a41fa007d07aa55565e2231f9b39b4a9}>
|
159
|
+
```
|
160
|
+
|
161
|
+
You can also write new objects to the database this way:
|
162
|
+
|
163
|
+
```ruby
|
164
|
+
author = {:email=>"tanoku@gmail.com", :time=>Time.now, :name=>"Vicent Mart\303\255"}
|
165
|
+
|
166
|
+
Rugged::Commit.create(r,
|
167
|
+
:author => author,
|
168
|
+
:message => "Hello world\n\n",
|
169
|
+
:committer => author,
|
170
|
+
:parents => ["2cb831a8aea28b2c1b9c63385585b864e4d3bad1"],
|
171
|
+
:tree => some_tree) #=> "f148106ca58764adc93ad4e2d6b1d168422b9796"
|
172
|
+
```
|
173
|
+
|
174
|
+
### Tag Objects
|
175
|
+
|
176
|
+
```ruby
|
177
|
+
tag = repo.lookup(tag_sha)
|
178
|
+
|
179
|
+
object = tag.target
|
180
|
+
sha = tag.target.oid
|
181
|
+
str = tag.target_type # "commit", "tag", "blob"
|
182
|
+
str = tag.name # "v1.0"
|
183
|
+
str = tag.message
|
184
|
+
person = tag.tagger
|
185
|
+
```
|
186
|
+
|
187
|
+
### Tree Objects
|
188
|
+
|
189
|
+
```ruby
|
190
|
+
tree = repo.lookup('779fbb1e17e666832773a9825875300ea736c2da')
|
191
|
+
# => #<Rugged::Tree:2245194360>
|
192
|
+
|
193
|
+
# number of tree entries
|
194
|
+
tree.count
|
195
|
+
|
196
|
+
tree[0] # or...
|
197
|
+
tree.first # or...
|
198
|
+
tree.get_entry(0)
|
199
|
+
# => {:type=>:blob, :oid=>"99e7edb53db9355f10c6f2dfaa5a183f205d93bf", :attributes=>33188, :name=>".gitignore"}
|
200
|
+
```
|
29
201
|
|
202
|
+
The tree object is an Enumerable, so you can also do stuff like this:
|
30
203
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
a raw sha (20 bytes) into a readable hex sha (40 char).
|
36
|
-
|
37
|
-
raw = Rugged.hex_to_raw(hex_sha)
|
38
|
-
hex = Rugged.raw_to_hex(20_byte_raw_sha)
|
39
|
-
|
40
|
-
|
41
|
-
Repository Access
|
42
|
-
-----------------
|
43
|
-
|
44
|
-
There is a Repository class that you can instantiate with a path.
|
45
|
-
This lets you check for objects, read raw object data, write raw object data and
|
46
|
-
get a hash (SHA1 checksum) of what contents would be without writing them out.
|
47
|
-
You also use it to lookup Git objects from it.
|
48
|
-
|
49
|
-
Repository is the main repository object that everything
|
50
|
-
else will emanate from.
|
51
|
-
|
52
|
-
repo =
|
53
|
-
Rugged::Repository.new(path)
|
54
|
-
ctnt, type = repo.read(sha)
|
55
|
-
gobj = repo.lookup(sha, type[?]) # optional type argument for checking
|
56
|
-
sha = repo.write(content, type)
|
57
|
-
sha = repo.hash(content, type)
|
58
|
-
bool = repo.exists(sha)
|
59
|
-
index = repo.index
|
60
|
-
|
61
|
-
The 'path' argument must point to an actual git repository folder. The library
|
62
|
-
will automatically guess if it's a bare repository or a '.git' folder inside a
|
63
|
-
working repository, and locate the working path accordingly.
|
64
|
-
|
65
|
-
Object Access
|
66
|
-
-----------------
|
67
|
-
|
68
|
-
Object is the main object class - it shouldn't be created directly,
|
69
|
-
but all of these methods should be useful in it's derived classes
|
70
|
-
|
71
|
-
object =
|
72
|
-
# Constructor is inherited by all the repository objects
|
73
|
-
# 'sha' is the ID of the object;
|
74
|
-
# 'repo' is the repository where the object resides
|
75
|
-
# If both 'sha' and 'repo' exist, the object will be looked up on
|
76
|
-
# the repository and instantiated
|
77
|
-
# If the 'sha' ID of the object is missing, the object will be
|
78
|
-
# created in memory and can be written later on to the repository
|
79
|
-
Rugged::Object.new(repo, sha)
|
80
|
-
obj.oid
|
81
|
-
obj.type
|
82
|
-
|
83
|
-
str = obj.read_raw # read the raw data of the object
|
84
|
-
|
85
|
-
The next classes are for consuming and creating the 4 base
|
86
|
-
git object types. Just about every method should be able to take
|
87
|
-
a parameter to change the value so the object can be re-written
|
88
|
-
slightly different or no parameter to simply read the current
|
89
|
-
value out.
|
90
|
-
|
91
|
-
gobjc = Rugged::Commit.new
|
92
|
-
# Rugged::Commit.new < Rugged::Object
|
93
|
-
str = gobjc.message
|
94
|
-
str = gobjc.message_short
|
95
|
-
str = gobjc.message_body # TODO
|
96
|
-
prsn = gobjc.author
|
97
|
-
prsn = gobjc.committer
|
98
|
-
gobjr = gobjc.tree
|
99
|
-
sha = gobjc.tree_sha
|
100
|
-
arr = gobjc.parents [*] # TODO: write
|
101
|
-
|
102
|
-
gobtg = Rugged::Tag.new
|
103
|
-
# Rugged::Tag.new < Rugged::Object
|
104
|
-
gobj = gobtg.target
|
105
|
-
int = gobtg.target_type
|
106
|
-
str = gobtg.name
|
107
|
-
prsn = gobtg.tagger
|
108
|
-
str = gobtg.message
|
109
|
-
|
110
|
-
gobtr = Rugged::Tree.new
|
111
|
-
# Rugged::Tree.new < Rugged::Object
|
112
|
-
gobtr.add(ent) # TODO
|
113
|
-
gobtr.remove(name) # TODO
|
114
|
-
int = gobtr.entry_count
|
115
|
-
ent = gobtr.get_entry
|
116
|
-
|
117
|
-
ent =
|
118
|
-
Rugged::TreeEntry.new(attributes, name, sha)
|
119
|
-
int = ent.attributes
|
120
|
-
str = ent.name
|
121
|
-
sha = ent.sha
|
122
|
-
gobj = ent.to_object
|
123
|
-
|
124
|
-
// * Person information is returned as a hash table
|
125
|
-
|
126
|
-
|
127
|
-
Commit Walker
|
128
|
-
-----------------
|
129
|
-
|
130
|
-
There is also a Walker class that currently takes a repo object. You can push
|
131
|
-
head SHAs onto the walker, then call next to get a list of the reachable commit
|
132
|
-
objects, one at a time. You can also hide() commits if you are not interested in
|
133
|
-
anything beneath them (useful for a `git log master ^origin/master` type deal).
|
134
|
-
|
135
|
-
walker =
|
136
|
-
Rugged::Walker.new(repo)
|
137
|
-
walker.walk { |c| puts c.inspect } # walk is just an alias of each
|
138
|
-
walker.each { |c| puts c.inspect }
|
139
|
-
walker.push(hex_sha_interesting)
|
140
|
-
walker.hide(hex_sha_uninteresting)
|
141
|
-
walker.reset
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
Index/Staging Area
|
146
|
-
-------------------
|
147
|
-
|
148
|
-
We can inspect and manipulate the Git Index as well. To work with the index inside
|
149
|
-
of an existing repository, instantiate it by using the `Repository.index` method instead
|
150
|
-
of manually opening the Index by its path.
|
151
|
-
|
152
|
-
# TODO: the remove and add functions immediately flush to the index file on disk
|
153
|
-
index =
|
154
|
-
Rugged::Index.new(path)
|
155
|
-
index.reload # re-read the index file from disk
|
156
|
-
int = index.count # count of index entries
|
157
|
-
index.entries # collection of index entries
|
158
|
-
index.each { |i| puts i.inspect }
|
159
|
-
ent = index.get_entry(i/path)
|
160
|
-
index.remove(i/path)
|
161
|
-
index.add(ientry) # also updates existing entry if there is one
|
162
|
-
index.add(path) # create ientry from file in path, update index
|
163
|
-
#TODO index.read_tree(gobtr, path='/')
|
164
|
-
#TODO index.write_tree
|
165
|
-
|
166
|
-
|
167
|
-
Index Status # TODO
|
168
|
-
-------------------
|
169
|
-
|
170
|
-
#TODO index.status # how does the index differ from the work tree and the last commit
|
171
|
-
|
172
|
-
# >> pp stat
|
173
|
-
# [ ['file1', :staged],
|
174
|
-
# ['file2', :modified],
|
175
|
-
# ['file3', :deleted],
|
176
|
-
# ['file4', :untracked],
|
177
|
-
# ['file4', :unmerged],
|
178
|
-
# ]
|
179
|
-
|
180
|
-
|
181
|
-
Ref Management # TODO
|
182
|
-
-------------------
|
183
|
-
|
184
|
-
The RefList class allows you to list, create and delete packed and loose refs.
|
185
|
-
|
186
|
-
list =
|
187
|
-
Rugged::RefList.new(repo)
|
188
|
-
ref = list.head # can retrieve and set HEAD with this - returns ref obj or commit obj if detatched
|
189
|
-
array = list.list([type]) # type is 'heads', 'tags', 'remotes', 'notes', et
|
190
|
-
list.add(oref)
|
191
|
-
list.pack
|
192
|
-
list.unpack
|
193
|
-
|
194
|
-
oref =
|
195
|
-
Rugged::Ref.new(ref, sha)
|
196
|
-
br.name # master
|
197
|
-
br.ref # refs/heads/master
|
198
|
-
br.type # heads
|
199
|
-
br.object
|
200
|
-
br.sha
|
201
|
-
br.delete
|
202
|
-
br.save
|
203
|
-
|
204
|
-
|
205
|
-
Config Management # TODO
|
206
|
-
------------------------
|
204
|
+
```ruby
|
205
|
+
tree.each { |e| puts e[:oid] }
|
206
|
+
tree.sort { |a, b| a[:oid] <=> b[:oid] }.map { |e| e[:name] }.join(':')
|
207
|
+
```
|
207
208
|
|
208
|
-
|
209
|
-
Rugged::Config.new(repo)
|
210
|
-
hash = conf.list([section])
|
211
|
-
val = conf.get(key, [scope])
|
212
|
-
bool = conf.set(key, value, [scope]) # scope is 'local'(default), 'global', 'system'
|
209
|
+
And there are some Rugged-specific methods, too:
|
213
210
|
|
211
|
+
```ruby
|
212
|
+
tree.each_tree { |entry| puts entry[:name] } # list subdirs
|
213
|
+
tree.each_blob { |entry| puts entry[:name] } # list only files
|
214
|
+
```
|
214
215
|
|
215
|
-
|
216
|
-
-----------------------
|
216
|
+
You can also write trees with the `TreeBuilder`:
|
217
217
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
218
|
+
```ruby
|
219
|
+
entry = {:type => :blob,
|
220
|
+
:name => "README.txt",
|
221
|
+
:oid => "1385f264afb75a56a5bec74243be9b367ba4ca08",
|
222
|
+
:attributes => 33188}
|
223
223
|
|
224
|
+
builder = Rugged::Tree::Builder.new
|
225
|
+
builder << entry
|
226
|
+
sha = builder.write(repo)
|
227
|
+
```
|
224
228
|
|
225
|
-
|
226
|
-
------------------------
|
229
|
+
---
|
227
230
|
|
228
|
-
|
229
|
-
Rugged::RemoteList.new(repo)
|
230
|
-
array = remlist.list
|
231
|
-
rem = remlist.add(alias, url)
|
231
|
+
### Commit Walker
|
232
232
|
|
233
|
-
|
234
|
-
|
235
|
-
summry = rem.fetch([refs])
|
236
|
-
summry = rem.push(refs)
|
237
|
-
summry = rem.remove(refs)
|
238
|
-
bool = rem.delete
|
239
|
-
heads = rem.heads
|
233
|
+
`Rugged::Walker` is a class designed to help you traverse a set of commits over
|
234
|
+
a repository.
|
240
235
|
|
236
|
+
You first push head SHAs onto the walker, and then call next to get a list of
|
237
|
+
the reachable commit objects one at a time. You can also `hide()` commits if you
|
238
|
+
are not interested in anything beneath them (useful in situations like when
|
239
|
+
you're running something like `git log master ^origin/master`).
|
241
240
|
|
242
|
-
|
243
|
-
|
241
|
+
```ruby
|
242
|
+
walker = Rugged::Walker.new(repo)
|
243
|
+
walker.sorting(Rugged::SORT_TOPO | Rugged::SORT_REVERSE) # optional
|
244
|
+
walker.push(hex_sha_interesting)
|
245
|
+
walker.hide(hex_sha_uninteresting)
|
246
|
+
walker.each { |c| puts c.inspect }
|
247
|
+
walker.reset
|
248
|
+
```
|
244
249
|
|
245
|
-
|
246
|
-
Rugged::Server.new
|
247
|
-
server.listen(port = 8080, ip = 0.0.0.0)
|
248
|
-
server.export_repo(path/repo)
|
249
|
-
server.export_path(path)
|
250
|
+
---
|
250
251
|
|
252
|
+
### Index ("staging") area
|
251
253
|
|
252
|
-
|
253
|
-
|
254
|
+
We can inspect and manipulate the Git Index as well. To work with the index
|
255
|
+
inside an existing repository, instantiate it by using the `Repository.index`
|
256
|
+
method instead of manually opening the Index by its path.
|
254
257
|
|
255
|
-
|
256
|
-
|
257
|
-
as well. The latest libgit2 commit known to link and build successfully will
|
258
|
-
be listed in the LIBGIT2_VERSION file.
|
258
|
+
```ruby
|
259
|
+
index = Rugged::Index.new(path)
|
259
260
|
|
261
|
+
# Re-read the index file from disk.
|
262
|
+
index.reload
|
260
263
|
|
261
|
-
|
262
|
-
|
264
|
+
# Count up index entries.
|
265
|
+
count = index.count
|
266
|
+
|
267
|
+
# The collection of index entries.
|
268
|
+
index.entries
|
269
|
+
|
270
|
+
# Iterating over index entries.
|
271
|
+
index.each { |i| puts i.inspect }
|
272
|
+
|
273
|
+
# Get a particular entry in the index.
|
274
|
+
index.get_entry(path)
|
275
|
+
|
276
|
+
# Unstage.
|
277
|
+
index.remove(i/path)
|
278
|
+
|
279
|
+
# Stage. Also updates existing entry if there is one.
|
280
|
+
index.add(ientry)
|
281
|
+
|
282
|
+
# Stage. Create ientry from file in path, updates the index.
|
283
|
+
index.add(path)
|
284
|
+
```
|
285
|
+
|
286
|
+
---
|
287
|
+
|
288
|
+
### Refs
|
289
|
+
|
290
|
+
The `RefList` class allows you to list, create and delete packed and loose refs.
|
291
|
+
|
292
|
+
```ruby
|
293
|
+
ref = repo.head # or...
|
294
|
+
ref = Rugged::Reference.lookup(repo, "refs/heads/master")
|
295
|
+
|
296
|
+
sha = ref.target
|
297
|
+
str = ref.type # "commit"
|
298
|
+
str = ref.name # "refs/heads/master"
|
299
|
+
```
|
300
|
+
|
301
|
+
You can also easily get an array of references:
|
302
|
+
|
303
|
+
```ruby
|
304
|
+
repo.refs.each do |ref|
|
305
|
+
puts ref.name
|
306
|
+
end
|
307
|
+
```
|
308
|
+
|
309
|
+
Or use a pattern (regex):
|
310
|
+
|
311
|
+
```ruby
|
312
|
+
repo.refs(/tags/).each do |ref|
|
313
|
+
puts ref.name
|
314
|
+
end
|
315
|
+
```
|
316
|
+
|
317
|
+
It is also easy to create, update, rename or delete a reference:
|
318
|
+
|
319
|
+
```ruby
|
320
|
+
ref = Rugged::Reference.create(repo, "refs/heads/unit_test", some_commit_sha)
|
321
|
+
|
322
|
+
ref.target = new_sha
|
323
|
+
|
324
|
+
ref.rename("refs/heads/blead")
|
325
|
+
|
326
|
+
ref.delete!
|
327
|
+
```
|
328
|
+
|
329
|
+
Finally, you can access the reflog for any branch:
|
330
|
+
|
331
|
+
```ruby
|
332
|
+
ref = Rugged::Reference.lookup(repo, "refs/heads/master")
|
333
|
+
entry = ref.log.first
|
334
|
+
sha = entry[:oid_old]
|
335
|
+
sha = entry[:oid_new]
|
336
|
+
str = entry[:message]
|
337
|
+
prsn = entry[:committer]
|
338
|
+
```
|
339
|
+
|
340
|
+
---
|
341
|
+
|
342
|
+
### Config files
|
343
|
+
|
344
|
+
It's also easy to read and manipulate the Git config file data with Rugged.
|
345
|
+
|
346
|
+
```ruby
|
347
|
+
# Read values
|
348
|
+
repo.config['core.bare']
|
349
|
+
|
350
|
+
# Set values
|
351
|
+
repo.config['user.name'] = true
|
352
|
+
|
353
|
+
# Delete values
|
354
|
+
repo.config.delete('user.name')
|
355
|
+
```
|
356
|
+
|
357
|
+
---
|
358
|
+
|
359
|
+
### General methods
|
360
|
+
|
361
|
+
Rugged also includes a general library for handling basic Git operations. One of
|
362
|
+
these is converting a raw sha (20 bytes) into a readable hex sha (40
|
363
|
+
characters).
|
364
|
+
|
365
|
+
```ruby
|
366
|
+
Rugged.hex_to_raw('bfde59cdd0dfac1d892814f66a95641abd8a1faf')
|
367
|
+
# => "\277\336Y\315\320\337\254\035\211(\024\366j\225d\032\275\212\037\257"
|
368
|
+
|
369
|
+
Rugged.raw_to_hex("\277\336Y\315\320\337\254\035\211(\024\366j\225d\032\275\212\037\257")
|
370
|
+
=> "bfde59cdd0dfac1d892814f66a95641abd8a1faf"
|
371
|
+
```
|
372
|
+
|
373
|
+
---
|
374
|
+
|
375
|
+
## Contributing
|
263
376
|
|
264
377
|
Fork libgit2/rugged on GitHub, make it awesomer (preferably in a branch named
|
265
378
|
for the topic), send a pull request.
|
266
379
|
|
267
380
|
|
268
|
-
|
269
|
-
==============
|
381
|
+
## Development
|
270
382
|
|
271
|
-
|
272
|
-
|
383
|
+
First you need to install libgit2:
|
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
|
273
391
|
|
392
|
+
Now that those are installed, you can install Rugged:
|
393
|
+
|
394
|
+
$ git clone https://github.com/libgit2/rugged.git
|
395
|
+
$ cd rugged
|
396
|
+
$ bundle install
|
397
|
+
$ rake compile
|
398
|
+
$ rake test
|
399
|
+
|
400
|
+
|
401
|
+
## Authors
|
402
|
+
|
403
|
+
* Vicent Marti <tanoku@gmail.com>
|
404
|
+
* Scott Chacon <schacon@gmail.com>
|
274
405
|
|
275
|
-
LICENSE
|
276
|
-
==============
|
277
406
|
|
278
|
-
|
407
|
+
## License
|
279
408
|
|
409
|
+
MIT. See LICENSE file.
|
data/Rakefile
CHANGED
@@ -14,6 +14,17 @@ Rake::ExtensionTask.new('rugged') do |r|
|
|
14
14
|
r.lib_dir = 'lib/rugged'
|
15
15
|
end
|
16
16
|
|
17
|
+
task :embedded_clean do
|
18
|
+
lib_path = File.expand_path '../ext/rugged/libgit2_embed.a', __FILE__
|
19
|
+
system "rm #{lib_path}"
|
20
|
+
end
|
21
|
+
Rake::Task[:clean].prerequisites << :embedded_clean
|
22
|
+
|
23
|
+
desc "Open an irb session preloaded with Rugged"
|
24
|
+
task :console do
|
25
|
+
sh "irb -rubygems -I lib -r ./lib/rugged"
|
26
|
+
end
|
27
|
+
|
17
28
|
#
|
18
29
|
# Tests
|
19
30
|
#
|
@@ -36,3 +47,14 @@ Rake::TestTask.new do |t|
|
|
36
47
|
t.pattern = 'test/**/*_test.rb'
|
37
48
|
t.verbose = false
|
38
49
|
end
|
50
|
+
|
51
|
+
begin
|
52
|
+
require 'rdoc/task'
|
53
|
+
Rake::RDocTask.new do |rdoc|
|
54
|
+
rdoc.rdoc_dir = 'rdoc'
|
55
|
+
rdoc.rdoc_files.include('ext/**/*.c')
|
56
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
57
|
+
end
|
58
|
+
rescue LoadError
|
59
|
+
end
|
60
|
+
|
data/ext/rugged/extconf.rb
CHANGED
@@ -26,14 +26,17 @@ else
|
|
26
26
|
|
27
27
|
LIBGIT2_DIST = 'libgit2-dist.tar.gz'
|
28
28
|
LIBGIT2_DIR = File.basename(LIBGIT2_DIST, '.tar.gz')
|
29
|
+
LIBGIT2_LIB_PATH = "#{CWD}/libgit2_embed.a"
|
29
30
|
|
30
|
-
|
31
|
-
|
31
|
+
if !File.exists?(LIBGIT2_LIB_PATH)
|
32
|
+
Dir.chdir("#{CWD}/vendor") do
|
33
|
+
FileUtils.rm_rf(LIBGIT2_DIR) if File.exists?(LIBGIT2_DIR)
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
sys("tar zxvf #{LIBGIT2_DIST}")
|
36
|
+
Dir.chdir(LIBGIT2_DIR) do
|
37
|
+
sys("make -f Makefile.embed")
|
38
|
+
FileUtils.cp "libgit2.a", LIBGIT2_LIB_PATH
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
|