rugged 0.16.0 → 0.17.0b1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/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
@@ -0,0 +1,253 @@
|
|
1
|
+
/*
|
2
|
+
* LibXDiff by Davide Libenzi ( File Differential Library )
|
3
|
+
* Copyright (C) 2003 Davide Libenzi
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* Davide Libenzi <davidel@xmailserver.org>
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
#include "xinclude.h"
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec);
|
29
|
+
static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb);
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
|
34
|
+
static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec) {
|
35
|
+
|
36
|
+
*rec = xdf->recs[ri]->ptr;
|
37
|
+
|
38
|
+
return xdf->recs[ri]->size;
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb) {
|
43
|
+
long size, psize = (long)strlen(pre);
|
44
|
+
char const *rec;
|
45
|
+
|
46
|
+
size = xdl_get_rec(xdf, ri, &rec);
|
47
|
+
if (xdl_emit_diffrec(rec, size, pre, psize, ecb) < 0) {
|
48
|
+
|
49
|
+
return -1;
|
50
|
+
}
|
51
|
+
|
52
|
+
return 0;
|
53
|
+
}
|
54
|
+
|
55
|
+
|
56
|
+
/*
|
57
|
+
* Starting at the passed change atom, find the latest change atom to be included
|
58
|
+
* inside the differential hunk according to the specified configuration.
|
59
|
+
*/
|
60
|
+
xdchange_t *xdl_get_hunk(xdchange_t *xscr, xdemitconf_t const *xecfg) {
|
61
|
+
xdchange_t *xch, *xchp;
|
62
|
+
long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;
|
63
|
+
|
64
|
+
for (xchp = xscr, xch = xscr->next; xch; xchp = xch, xch = xch->next)
|
65
|
+
if (xch->i1 - (xchp->i1 + xchp->chg1) > max_common)
|
66
|
+
break;
|
67
|
+
|
68
|
+
return xchp;
|
69
|
+
}
|
70
|
+
|
71
|
+
|
72
|
+
static long def_ff(const char *rec, long len, char *buf, long sz, void *priv)
|
73
|
+
{
|
74
|
+
(void)priv;
|
75
|
+
|
76
|
+
if (len > 0 &&
|
77
|
+
(isalpha((unsigned char)*rec) || /* identifier? */
|
78
|
+
*rec == '_' || /* also identifier? */
|
79
|
+
*rec == '$')) { /* identifiers from VMS and other esoterico */
|
80
|
+
if (len > sz)
|
81
|
+
len = sz;
|
82
|
+
while (0 < len && isspace((unsigned char)rec[len - 1]))
|
83
|
+
len--;
|
84
|
+
memcpy(buf, rec, len);
|
85
|
+
return len;
|
86
|
+
}
|
87
|
+
return -1;
|
88
|
+
}
|
89
|
+
|
90
|
+
static int xdl_emit_common(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
|
91
|
+
xdemitconf_t const *xecfg) {
|
92
|
+
xdfile_t *xdf = &xe->xdf2;
|
93
|
+
const char *rchg = xdf->rchg;
|
94
|
+
long ix;
|
95
|
+
|
96
|
+
(void)xscr;
|
97
|
+
(void)xecfg;
|
98
|
+
|
99
|
+
for (ix = 0; ix < xdf->nrec; ix++) {
|
100
|
+
if (rchg[ix])
|
101
|
+
continue;
|
102
|
+
if (xdl_emit_record(xdf, ix, "", ecb))
|
103
|
+
return -1;
|
104
|
+
}
|
105
|
+
return 0;
|
106
|
+
}
|
107
|
+
|
108
|
+
struct func_line {
|
109
|
+
long len;
|
110
|
+
char buf[80];
|
111
|
+
};
|
112
|
+
|
113
|
+
static long get_func_line(xdfenv_t *xe, xdemitconf_t const *xecfg,
|
114
|
+
struct func_line *func_line, long start, long limit)
|
115
|
+
{
|
116
|
+
find_func_t ff = xecfg->find_func ? xecfg->find_func : def_ff;
|
117
|
+
long l, size, step = (start > limit) ? -1 : 1;
|
118
|
+
char *buf, dummy[1];
|
119
|
+
|
120
|
+
buf = func_line ? func_line->buf : dummy;
|
121
|
+
size = func_line ? sizeof(func_line->buf) : sizeof(dummy);
|
122
|
+
|
123
|
+
for (l = start; l != limit && 0 <= l && l < xe->xdf1.nrec; l += step) {
|
124
|
+
const char *rec;
|
125
|
+
long reclen = xdl_get_rec(&xe->xdf1, l, &rec);
|
126
|
+
long len = ff(rec, reclen, buf, size, xecfg->find_func_priv);
|
127
|
+
if (len >= 0) {
|
128
|
+
if (func_line)
|
129
|
+
func_line->len = len;
|
130
|
+
return l;
|
131
|
+
}
|
132
|
+
}
|
133
|
+
return -1;
|
134
|
+
}
|
135
|
+
|
136
|
+
int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
|
137
|
+
xdemitconf_t const *xecfg) {
|
138
|
+
long s1, s2, e1, e2, lctx;
|
139
|
+
xdchange_t *xch, *xche;
|
140
|
+
long funclineprev = -1;
|
141
|
+
struct func_line func_line = { 0 };
|
142
|
+
|
143
|
+
if (xecfg->flags & XDL_EMIT_COMMON)
|
144
|
+
return xdl_emit_common(xe, xscr, ecb, xecfg);
|
145
|
+
|
146
|
+
for (xch = xscr; xch; xch = xche->next) {
|
147
|
+
xche = xdl_get_hunk(xch, xecfg);
|
148
|
+
|
149
|
+
s1 = XDL_MAX(xch->i1 - xecfg->ctxlen, 0);
|
150
|
+
s2 = XDL_MAX(xch->i2 - xecfg->ctxlen, 0);
|
151
|
+
|
152
|
+
if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
|
153
|
+
long fs1 = get_func_line(xe, xecfg, NULL, xch->i1, -1);
|
154
|
+
if (fs1 < 0)
|
155
|
+
fs1 = 0;
|
156
|
+
if (fs1 < s1) {
|
157
|
+
s2 -= s1 - fs1;
|
158
|
+
s1 = fs1;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
again:
|
163
|
+
lctx = xecfg->ctxlen;
|
164
|
+
lctx = XDL_MIN(lctx, xe->xdf1.nrec - (xche->i1 + xche->chg1));
|
165
|
+
lctx = XDL_MIN(lctx, xe->xdf2.nrec - (xche->i2 + xche->chg2));
|
166
|
+
|
167
|
+
e1 = xche->i1 + xche->chg1 + lctx;
|
168
|
+
e2 = xche->i2 + xche->chg2 + lctx;
|
169
|
+
|
170
|
+
if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
|
171
|
+
long fe1 = get_func_line(xe, xecfg, NULL,
|
172
|
+
xche->i1 + xche->chg1,
|
173
|
+
xe->xdf1.nrec);
|
174
|
+
if (fe1 < 0)
|
175
|
+
fe1 = xe->xdf1.nrec;
|
176
|
+
if (fe1 > e1) {
|
177
|
+
e2 += fe1 - e1;
|
178
|
+
e1 = fe1;
|
179
|
+
}
|
180
|
+
|
181
|
+
/*
|
182
|
+
* Overlap with next change? Then include it
|
183
|
+
* in the current hunk and start over to find
|
184
|
+
* its new end.
|
185
|
+
*/
|
186
|
+
if (xche->next) {
|
187
|
+
long l = xche->next->i1;
|
188
|
+
if (l <= e1 ||
|
189
|
+
get_func_line(xe, xecfg, NULL, l, e1) < 0) {
|
190
|
+
xche = xche->next;
|
191
|
+
goto again;
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
/*
|
197
|
+
* Emit current hunk header.
|
198
|
+
*/
|
199
|
+
|
200
|
+
if (xecfg->flags & XDL_EMIT_FUNCNAMES) {
|
201
|
+
get_func_line(xe, xecfg, &func_line,
|
202
|
+
s1 - 1, funclineprev);
|
203
|
+
funclineprev = s1 - 1;
|
204
|
+
}
|
205
|
+
if (xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
|
206
|
+
func_line.buf, func_line.len, ecb) < 0)
|
207
|
+
return -1;
|
208
|
+
|
209
|
+
/*
|
210
|
+
* Emit pre-context.
|
211
|
+
*/
|
212
|
+
for (; s2 < xch->i2; s2++)
|
213
|
+
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
|
214
|
+
return -1;
|
215
|
+
|
216
|
+
for (s1 = xch->i1, s2 = xch->i2;; xch = xch->next) {
|
217
|
+
/*
|
218
|
+
* Merge previous with current change atom.
|
219
|
+
*/
|
220
|
+
for (; s1 < xch->i1 && s2 < xch->i2; s1++, s2++)
|
221
|
+
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
|
222
|
+
return -1;
|
223
|
+
|
224
|
+
/*
|
225
|
+
* Removes lines from the first file.
|
226
|
+
*/
|
227
|
+
for (s1 = xch->i1; s1 < xch->i1 + xch->chg1; s1++)
|
228
|
+
if (xdl_emit_record(&xe->xdf1, s1, "-", ecb) < 0)
|
229
|
+
return -1;
|
230
|
+
|
231
|
+
/*
|
232
|
+
* Adds lines from the second file.
|
233
|
+
*/
|
234
|
+
for (s2 = xch->i2; s2 < xch->i2 + xch->chg2; s2++)
|
235
|
+
if (xdl_emit_record(&xe->xdf2, s2, "+", ecb) < 0)
|
236
|
+
return -1;
|
237
|
+
|
238
|
+
if (xch == xche)
|
239
|
+
break;
|
240
|
+
s1 = xch->i1 + xch->chg1;
|
241
|
+
s2 = xch->i2 + xch->chg2;
|
242
|
+
}
|
243
|
+
|
244
|
+
/*
|
245
|
+
* Emit post-context.
|
246
|
+
*/
|
247
|
+
for (s2 = xche->i2 + xche->chg2; s2 < e2; s2++)
|
248
|
+
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
|
249
|
+
return -1;
|
250
|
+
}
|
251
|
+
|
252
|
+
return 0;
|
253
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
/*
|
2
|
+
* LibXDiff by Davide Libenzi ( File Differential Library )
|
3
|
+
* Copyright (C) 2003 Davide Libenzi
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* Davide Libenzi <davidel@xmailserver.org>
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
#if !defined(XEMIT_H)
|
24
|
+
#define XEMIT_H
|
25
|
+
|
26
|
+
|
27
|
+
typedef int (*emit_func_t)(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
|
28
|
+
xdemitconf_t const *xecfg);
|
29
|
+
|
30
|
+
xdchange_t *xdl_get_hunk(xdchange_t *xscr, xdemitconf_t const *xecfg);
|
31
|
+
int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
|
32
|
+
xdemitconf_t const *xecfg);
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
#endif /* #if !defined(XEMIT_H) */
|
@@ -0,0 +1,371 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (C) 2010, Google Inc.
|
3
|
+
* and other copyright owners as documented in JGit's IP log.
|
4
|
+
*
|
5
|
+
* This program and the accompanying materials are made available
|
6
|
+
* under the terms of the Eclipse Distribution License v1.0 which
|
7
|
+
* accompanies this distribution, is reproduced below, and is
|
8
|
+
* available at http://www.eclipse.org/org/documents/edl-v10.php
|
9
|
+
*
|
10
|
+
* All rights reserved.
|
11
|
+
*
|
12
|
+
* Redistribution and use in source and binary forms, with or
|
13
|
+
* without modification, are permitted provided that the following
|
14
|
+
* conditions are met:
|
15
|
+
*
|
16
|
+
* - Redistributions of source code must retain the above copyright
|
17
|
+
* notice, this list of conditions and the following disclaimer.
|
18
|
+
*
|
19
|
+
* - Redistributions in binary form must reproduce the above
|
20
|
+
* copyright notice, this list of conditions and the following
|
21
|
+
* disclaimer in the documentation and/or other materials provided
|
22
|
+
* with the distribution.
|
23
|
+
*
|
24
|
+
* - Neither the name of the Eclipse Foundation, Inc. nor the
|
25
|
+
* names of its contributors may be used to endorse or promote
|
26
|
+
* products derived from this software without specific prior
|
27
|
+
* written permission.
|
28
|
+
*
|
29
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
30
|
+
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
31
|
+
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
32
|
+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
33
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
34
|
+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
35
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
36
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
37
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
38
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
39
|
+
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
40
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
41
|
+
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
42
|
+
*/
|
43
|
+
|
44
|
+
#include "xinclude.h"
|
45
|
+
#include "xtypes.h"
|
46
|
+
#include "xdiff.h"
|
47
|
+
|
48
|
+
#define MAX_PTR UINT_MAX
|
49
|
+
#define MAX_CNT UINT_MAX
|
50
|
+
|
51
|
+
#define LINE_END(n) (line##n + count##n - 1)
|
52
|
+
#define LINE_END_PTR(n) (*line##n + *count##n - 1)
|
53
|
+
|
54
|
+
struct histindex {
|
55
|
+
struct record {
|
56
|
+
unsigned int ptr, cnt;
|
57
|
+
struct record *next;
|
58
|
+
} **records, /* an ocurrence */
|
59
|
+
**line_map; /* map of line to record chain */
|
60
|
+
chastore_t rcha;
|
61
|
+
unsigned int *next_ptrs;
|
62
|
+
unsigned int table_bits,
|
63
|
+
records_size,
|
64
|
+
line_map_size;
|
65
|
+
|
66
|
+
unsigned int max_chain_length,
|
67
|
+
key_shift,
|
68
|
+
ptr_shift;
|
69
|
+
|
70
|
+
unsigned int cnt,
|
71
|
+
has_common;
|
72
|
+
|
73
|
+
xdfenv_t *env;
|
74
|
+
xpparam_t const *xpp;
|
75
|
+
};
|
76
|
+
|
77
|
+
struct region {
|
78
|
+
unsigned int begin1, end1;
|
79
|
+
unsigned int begin2, end2;
|
80
|
+
};
|
81
|
+
|
82
|
+
#define LINE_MAP(i, a) (i->line_map[(a) - i->ptr_shift])
|
83
|
+
|
84
|
+
#define NEXT_PTR(index, ptr) \
|
85
|
+
(index->next_ptrs[(ptr) - index->ptr_shift])
|
86
|
+
|
87
|
+
#define CNT(index, ptr) \
|
88
|
+
((LINE_MAP(index, ptr))->cnt)
|
89
|
+
|
90
|
+
#define REC(env, s, l) \
|
91
|
+
(env->xdf##s.recs[l - 1])
|
92
|
+
|
93
|
+
static int cmp_recs(xpparam_t const *xpp,
|
94
|
+
xrecord_t *r1, xrecord_t *r2)
|
95
|
+
{
|
96
|
+
return r1->ha == r2->ha &&
|
97
|
+
xdl_recmatch(r1->ptr, r1->size, r2->ptr, r2->size,
|
98
|
+
xpp->flags);
|
99
|
+
}
|
100
|
+
|
101
|
+
#define CMP_ENV(xpp, env, s1, l1, s2, l2) \
|
102
|
+
(cmp_recs(xpp, REC(env, s1, l1), REC(env, s2, l2)))
|
103
|
+
|
104
|
+
#define CMP(i, s1, l1, s2, l2) \
|
105
|
+
(cmp_recs(i->xpp, REC(i->env, s1, l1), REC(i->env, s2, l2)))
|
106
|
+
|
107
|
+
#define TABLE_HASH(index, side, line) \
|
108
|
+
XDL_HASHLONG((REC(index->env, side, line))->ha, index->table_bits)
|
109
|
+
|
110
|
+
static int scanA(struct histindex *index, unsigned int line1, unsigned int count1)
|
111
|
+
{
|
112
|
+
unsigned int ptr;
|
113
|
+
unsigned int tbl_idx;
|
114
|
+
unsigned int chain_len;
|
115
|
+
struct record **rec_chain, *rec;
|
116
|
+
|
117
|
+
for (ptr = LINE_END(1); line1 <= ptr; ptr--) {
|
118
|
+
tbl_idx = TABLE_HASH(index, 1, ptr);
|
119
|
+
rec_chain = index->records + tbl_idx;
|
120
|
+
rec = *rec_chain;
|
121
|
+
|
122
|
+
chain_len = 0;
|
123
|
+
while (rec) {
|
124
|
+
if (CMP(index, 1, rec->ptr, 1, ptr)) {
|
125
|
+
/*
|
126
|
+
* ptr is identical to another element. Insert
|
127
|
+
* it onto the front of the existing element
|
128
|
+
* chain.
|
129
|
+
*/
|
130
|
+
NEXT_PTR(index, ptr) = rec->ptr;
|
131
|
+
rec->ptr = ptr;
|
132
|
+
/* cap rec->cnt at MAX_CNT */
|
133
|
+
rec->cnt = XDL_MIN(MAX_CNT, rec->cnt + 1);
|
134
|
+
LINE_MAP(index, ptr) = rec;
|
135
|
+
goto continue_scan;
|
136
|
+
}
|
137
|
+
|
138
|
+
rec = rec->next;
|
139
|
+
chain_len++;
|
140
|
+
}
|
141
|
+
|
142
|
+
if (chain_len == index->max_chain_length)
|
143
|
+
return -1;
|
144
|
+
|
145
|
+
/*
|
146
|
+
* This is the first time we have ever seen this particular
|
147
|
+
* element in the sequence. Construct a new chain for it.
|
148
|
+
*/
|
149
|
+
if (!(rec = xdl_cha_alloc(&index->rcha)))
|
150
|
+
return -1;
|
151
|
+
rec->ptr = ptr;
|
152
|
+
rec->cnt = 1;
|
153
|
+
rec->next = *rec_chain;
|
154
|
+
*rec_chain = rec;
|
155
|
+
LINE_MAP(index, ptr) = rec;
|
156
|
+
|
157
|
+
continue_scan:
|
158
|
+
; /* no op */
|
159
|
+
}
|
160
|
+
|
161
|
+
return 0;
|
162
|
+
}
|
163
|
+
|
164
|
+
static int try_lcs(
|
165
|
+
struct histindex *index, struct region *lcs, unsigned int b_ptr,
|
166
|
+
unsigned int line1, unsigned int count1,
|
167
|
+
unsigned int line2, unsigned int count2)
|
168
|
+
{
|
169
|
+
unsigned int b_next = b_ptr + 1;
|
170
|
+
struct record *rec = index->records[TABLE_HASH(index, 2, b_ptr)];
|
171
|
+
unsigned int as, ae, bs, be, np, rc;
|
172
|
+
int should_break;
|
173
|
+
|
174
|
+
for (; rec; rec = rec->next) {
|
175
|
+
if (rec->cnt > index->cnt) {
|
176
|
+
if (!index->has_common)
|
177
|
+
index->has_common = CMP(index, 1, rec->ptr, 2, b_ptr);
|
178
|
+
continue;
|
179
|
+
}
|
180
|
+
|
181
|
+
as = rec->ptr;
|
182
|
+
if (!CMP(index, 1, as, 2, b_ptr))
|
183
|
+
continue;
|
184
|
+
|
185
|
+
index->has_common = 1;
|
186
|
+
for (;;) {
|
187
|
+
should_break = 0;
|
188
|
+
np = NEXT_PTR(index, as);
|
189
|
+
bs = b_ptr;
|
190
|
+
ae = as;
|
191
|
+
be = bs;
|
192
|
+
rc = rec->cnt;
|
193
|
+
|
194
|
+
while (line1 < as && line2 < bs
|
195
|
+
&& CMP(index, 1, as - 1, 2, bs - 1)) {
|
196
|
+
as--;
|
197
|
+
bs--;
|
198
|
+
if (1 < rc)
|
199
|
+
rc = XDL_MIN(rc, CNT(index, as));
|
200
|
+
}
|
201
|
+
while (ae < LINE_END(1) && be < LINE_END(2)
|
202
|
+
&& CMP(index, 1, ae + 1, 2, be + 1)) {
|
203
|
+
ae++;
|
204
|
+
be++;
|
205
|
+
if (1 < rc)
|
206
|
+
rc = XDL_MIN(rc, CNT(index, ae));
|
207
|
+
}
|
208
|
+
|
209
|
+
if (b_next <= be)
|
210
|
+
b_next = be + 1;
|
211
|
+
if (lcs->end1 - lcs->begin1 < ae - as || rc < index->cnt) {
|
212
|
+
lcs->begin1 = as;
|
213
|
+
lcs->begin2 = bs;
|
214
|
+
lcs->end1 = ae;
|
215
|
+
lcs->end2 = be;
|
216
|
+
index->cnt = rc;
|
217
|
+
}
|
218
|
+
|
219
|
+
if (np == 0)
|
220
|
+
break;
|
221
|
+
|
222
|
+
while (np <= ae) {
|
223
|
+
np = NEXT_PTR(index, np);
|
224
|
+
if (np == 0) {
|
225
|
+
should_break = 1;
|
226
|
+
break;
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
if (should_break)
|
231
|
+
break;
|
232
|
+
|
233
|
+
as = np;
|
234
|
+
}
|
235
|
+
}
|
236
|
+
return b_next;
|
237
|
+
}
|
238
|
+
|
239
|
+
static int find_lcs(
|
240
|
+
struct histindex *index, struct region *lcs,
|
241
|
+
unsigned int line1, unsigned int count1,
|
242
|
+
unsigned int line2, unsigned int count2)
|
243
|
+
{
|
244
|
+
unsigned int b_ptr;
|
245
|
+
|
246
|
+
if (scanA(index, line1, count1))
|
247
|
+
return -1;
|
248
|
+
|
249
|
+
index->cnt = index->max_chain_length + 1;
|
250
|
+
|
251
|
+
for (b_ptr = line2; b_ptr <= LINE_END(2); )
|
252
|
+
b_ptr = try_lcs(index, lcs, b_ptr, line1, count1, line2, count2);
|
253
|
+
|
254
|
+
return index->has_common && index->max_chain_length < index->cnt;
|
255
|
+
}
|
256
|
+
|
257
|
+
static int fall_back_to_classic_diff(struct histindex *index,
|
258
|
+
int line1, int count1, int line2, int count2)
|
259
|
+
{
|
260
|
+
xpparam_t xpp;
|
261
|
+
xpp.flags = index->xpp->flags & ~XDF_HISTOGRAM_DIFF;
|
262
|
+
|
263
|
+
return xdl_fall_back_diff(index->env, &xpp,
|
264
|
+
line1, count1, line2, count2);
|
265
|
+
}
|
266
|
+
|
267
|
+
static int histogram_diff(
|
268
|
+
xpparam_t const *xpp, xdfenv_t *env,
|
269
|
+
unsigned int line1, unsigned int count1,
|
270
|
+
unsigned int line2, unsigned int count2)
|
271
|
+
{
|
272
|
+
struct histindex index;
|
273
|
+
struct region lcs;
|
274
|
+
unsigned int sz;
|
275
|
+
int result = -1;
|
276
|
+
|
277
|
+
if (count1 <= 0 && count2 <= 0)
|
278
|
+
return 0;
|
279
|
+
|
280
|
+
if (LINE_END(1) >= MAX_PTR)
|
281
|
+
return -1;
|
282
|
+
|
283
|
+
if (!count1) {
|
284
|
+
while(count2--)
|
285
|
+
env->xdf2.rchg[line2++ - 1] = 1;
|
286
|
+
return 0;
|
287
|
+
} else if (!count2) {
|
288
|
+
while(count1--)
|
289
|
+
env->xdf1.rchg[line1++ - 1] = 1;
|
290
|
+
return 0;
|
291
|
+
}
|
292
|
+
|
293
|
+
memset(&index, 0, sizeof(index));
|
294
|
+
|
295
|
+
index.env = env;
|
296
|
+
index.xpp = xpp;
|
297
|
+
|
298
|
+
index.records = NULL;
|
299
|
+
index.line_map = NULL;
|
300
|
+
/* in case of early xdl_cha_free() */
|
301
|
+
index.rcha.head = NULL;
|
302
|
+
|
303
|
+
index.table_bits = xdl_hashbits(count1);
|
304
|
+
sz = index.records_size = 1 << index.table_bits;
|
305
|
+
sz *= sizeof(struct record *);
|
306
|
+
if (!(index.records = (struct record **) xdl_malloc(sz)))
|
307
|
+
goto cleanup;
|
308
|
+
memset(index.records, 0, sz);
|
309
|
+
|
310
|
+
sz = index.line_map_size = count1;
|
311
|
+
sz *= sizeof(struct record *);
|
312
|
+
if (!(index.line_map = (struct record **) xdl_malloc(sz)))
|
313
|
+
goto cleanup;
|
314
|
+
memset(index.line_map, 0, sz);
|
315
|
+
|
316
|
+
sz = index.line_map_size;
|
317
|
+
sz *= sizeof(unsigned int);
|
318
|
+
if (!(index.next_ptrs = (unsigned int *) xdl_malloc(sz)))
|
319
|
+
goto cleanup;
|
320
|
+
memset(index.next_ptrs, 0, sz);
|
321
|
+
|
322
|
+
/* lines / 4 + 1 comes from xprepare.c:xdl_prepare_ctx() */
|
323
|
+
if (xdl_cha_init(&index.rcha, sizeof(struct record), count1 / 4 + 1) < 0)
|
324
|
+
goto cleanup;
|
325
|
+
|
326
|
+
index.ptr_shift = line1;
|
327
|
+
index.max_chain_length = 64;
|
328
|
+
|
329
|
+
memset(&lcs, 0, sizeof(lcs));
|
330
|
+
if (find_lcs(&index, &lcs, line1, count1, line2, count2))
|
331
|
+
result = fall_back_to_classic_diff(&index, line1, count1, line2, count2);
|
332
|
+
else {
|
333
|
+
if (lcs.begin1 == 0 && lcs.begin2 == 0) {
|
334
|
+
while (count1--)
|
335
|
+
env->xdf1.rchg[line1++ - 1] = 1;
|
336
|
+
while (count2--)
|
337
|
+
env->xdf2.rchg[line2++ - 1] = 1;
|
338
|
+
result = 0;
|
339
|
+
} else {
|
340
|
+
result = histogram_diff(xpp, env,
|
341
|
+
line1, lcs.begin1 - line1,
|
342
|
+
line2, lcs.begin2 - line2);
|
343
|
+
if (result)
|
344
|
+
goto cleanup;
|
345
|
+
result = histogram_diff(xpp, env,
|
346
|
+
lcs.end1 + 1, LINE_END(1) - lcs.end1,
|
347
|
+
lcs.end2 + 1, LINE_END(2) - lcs.end2);
|
348
|
+
if (result)
|
349
|
+
goto cleanup;
|
350
|
+
}
|
351
|
+
}
|
352
|
+
|
353
|
+
cleanup:
|
354
|
+
xdl_free(index.records);
|
355
|
+
xdl_free(index.line_map);
|
356
|
+
xdl_free(index.next_ptrs);
|
357
|
+
xdl_cha_free(&index.rcha);
|
358
|
+
|
359
|
+
return result;
|
360
|
+
}
|
361
|
+
|
362
|
+
int xdl_do_histogram_diff(mmfile_t *file1, mmfile_t *file2,
|
363
|
+
xpparam_t const *xpp, xdfenv_t *env)
|
364
|
+
{
|
365
|
+
if (xdl_prepare_env(file1, file2, xpp, env) < 0)
|
366
|
+
return -1;
|
367
|
+
|
368
|
+
return histogram_diff(xpp, env,
|
369
|
+
env->xdf1.dstart + 1, env->xdf1.dend - env->xdf1.dstart + 1,
|
370
|
+
env->xdf2.dstart + 1, env->xdf2.dend - env->xdf2.dstart + 1);
|
371
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/*
|
2
|
+
* LibXDiff by Davide Libenzi ( File Differential Library )
|
3
|
+
* Copyright (C) 2003 Davide Libenzi
|
4
|
+
*
|
5
|
+
* This library is free software; you can redistribute it and/or
|
6
|
+
* modify it under the terms of the GNU Lesser General Public
|
7
|
+
* License as published by the Free Software Foundation; either
|
8
|
+
* version 2.1 of the License, or (at your option) any later version.
|
9
|
+
*
|
10
|
+
* This library is distributed in the hope that it will be useful,
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
+
* Lesser General Public License for more details.
|
14
|
+
*
|
15
|
+
* You should have received a copy of the GNU Lesser General Public
|
16
|
+
* License along with this library; if not, write to the Free Software
|
17
|
+
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
18
|
+
*
|
19
|
+
* Davide Libenzi <davidel@xmailserver.org>
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
#if !defined(XINCLUDE_H)
|
24
|
+
#define XINCLUDE_H
|
25
|
+
|
26
|
+
#include <ctype.h>
|
27
|
+
#include <stdio.h>
|
28
|
+
#include <stdlib.h>
|
29
|
+
#include <string.h>
|
30
|
+
#include <limits.h>
|
31
|
+
|
32
|
+
#ifdef _WIN32
|
33
|
+
#else
|
34
|
+
#include <unistd.h>
|
35
|
+
#endif
|
36
|
+
|
37
|
+
#include "xmacros.h"
|
38
|
+
#include "xdiff.h"
|
39
|
+
#include "xtypes.h"
|
40
|
+
#include "xutils.h"
|
41
|
+
#include "xprepare.h"
|
42
|
+
#include "xdiffi.h"
|
43
|
+
#include "xemit.h"
|
44
|
+
|
45
|
+
|
46
|
+
#endif /* #if !defined(XINCLUDE_H) */
|