rugged 0.16.0 → 0.17.0b1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data/README.md +373 -243
  2. data/Rakefile +22 -0
  3. data/ext/rugged/extconf.rb +9 -6
  4. data/ext/rugged/rugged.c +123 -31
  5. data/ext/rugged/rugged.h +11 -10
  6. data/ext/rugged/rugged_blob.c +181 -18
  7. data/ext/rugged/rugged_commit.c +196 -18
  8. data/ext/rugged/rugged_config.c +94 -5
  9. data/ext/rugged/rugged_object.c +54 -1
  10. data/ext/rugged/rugged_reference.c +203 -15
  11. data/ext/rugged/{remote.c → rugged_remote.c} +35 -10
  12. data/ext/rugged/rugged_repo.c +323 -81
  13. data/ext/rugged/rugged_revwalk.c +57 -4
  14. data/ext/rugged/rugged_signature.c +3 -3
  15. data/ext/rugged/rugged_tag.c +72 -1
  16. data/ext/rugged/rugged_tree.c +70 -2
  17. data/ext/rugged/vendor/libgit2-dist/deps/regex/config.h +7 -0
  18. data/ext/rugged/vendor/libgit2-dist/deps/regex/regcomp.c +3856 -0
  19. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.c +85 -0
  20. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex.h +582 -0
  21. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.c +1744 -0
  22. data/ext/rugged/vendor/libgit2-dist/deps/regex/regex_internal.h +810 -0
  23. data/ext/rugged/vendor/libgit2-dist/deps/regex/regexec.c +4369 -0
  24. data/ext/rugged/vendor/libgit2-dist/examples/diff.c +238 -0
  25. data/ext/rugged/vendor/libgit2-dist/examples/general.c +4 -4
  26. data/ext/rugged/vendor/libgit2-dist/examples/network/fetch.c +101 -85
  27. data/ext/rugged/vendor/libgit2-dist/examples/network/git2.c +7 -3
  28. data/ext/rugged/vendor/libgit2-dist/examples/network/index-pack.c +80 -25
  29. data/ext/rugged/vendor/libgit2-dist/examples/network/ls-remote.c +6 -6
  30. data/ext/rugged/vendor/libgit2-dist/include/git2/attr.h +224 -0
  31. data/ext/rugged/vendor/libgit2-dist/include/git2/blob.h +59 -5
  32. data/ext/rugged/vendor/libgit2-dist/include/git2/branch.h +114 -7
  33. data/ext/rugged/vendor/libgit2-dist/include/git2/commit.h +14 -7
  34. data/ext/rugged/vendor/libgit2-dist/include/git2/common.h +4 -3
  35. data/ext/rugged/vendor/libgit2-dist/include/git2/config.h +105 -27
  36. data/ext/rugged/vendor/libgit2-dist/include/git2/diff.h +409 -0
  37. data/ext/rugged/vendor/libgit2-dist/include/git2/errors.h +47 -82
  38. data/ext/rugged/vendor/libgit2-dist/include/git2/index.h +25 -10
  39. data/ext/rugged/vendor/libgit2-dist/include/git2/indexer.h +46 -1
  40. data/ext/rugged/vendor/libgit2-dist/include/git2/merge.h +35 -0
  41. data/ext/rugged/vendor/libgit2-dist/include/git2/net.h +1 -1
  42. data/ext/rugged/vendor/libgit2-dist/include/git2/notes.h +139 -0
  43. data/ext/rugged/vendor/libgit2-dist/include/git2/object.h +5 -5
  44. data/ext/rugged/vendor/libgit2-dist/include/git2/odb.h +13 -13
  45. data/ext/rugged/vendor/libgit2-dist/include/git2/odb_backend.h +8 -8
  46. data/ext/rugged/vendor/libgit2-dist/include/git2/oid.h +14 -9
  47. data/ext/rugged/vendor/libgit2-dist/include/git2/reflog.h +5 -5
  48. data/ext/rugged/vendor/libgit2-dist/include/git2/refs.h +37 -17
  49. data/ext/rugged/vendor/libgit2-dist/include/git2/refspec.h +17 -9
  50. data/ext/rugged/vendor/libgit2-dist/include/git2/remote.h +83 -16
  51. data/ext/rugged/vendor/libgit2-dist/include/git2/repository.h +24 -10
  52. data/ext/rugged/vendor/libgit2-dist/include/git2/reset.h +44 -0
  53. data/ext/rugged/vendor/libgit2-dist/include/git2/revparse.h +36 -0
  54. data/ext/rugged/vendor/libgit2-dist/include/git2/revwalk.h +74 -6
  55. data/ext/rugged/vendor/libgit2-dist/include/git2/signature.h +3 -3
  56. data/ext/rugged/vendor/libgit2-dist/include/git2/status.h +120 -19
  57. data/ext/rugged/vendor/libgit2-dist/include/git2/submodule.h +103 -0
  58. data/ext/rugged/vendor/libgit2-dist/include/git2/tag.h +28 -10
  59. data/ext/rugged/vendor/libgit2-dist/include/git2/threads.h +1 -1
  60. data/ext/rugged/vendor/libgit2-dist/include/git2/tree.h +13 -13
  61. data/ext/rugged/vendor/libgit2-dist/include/git2/types.h +16 -2
  62. data/ext/rugged/vendor/libgit2-dist/include/git2/version.h +3 -3
  63. data/ext/rugged/vendor/libgit2-dist/include/git2/windows.h +1 -1
  64. data/ext/rugged/vendor/libgit2-dist/include/git2.h +7 -2
  65. data/ext/rugged/vendor/libgit2-dist/src/attr.c +677 -0
  66. data/ext/rugged/vendor/libgit2-dist/src/attr.h +56 -0
  67. data/ext/rugged/vendor/libgit2-dist/src/attr_file.c +609 -0
  68. data/ext/rugged/vendor/libgit2-dist/src/attr_file.h +145 -0
  69. data/ext/rugged/vendor/libgit2-dist/src/blob.c +213 -60
  70. data/ext/rugged/vendor/libgit2-dist/src/blob.h +2 -1
  71. data/ext/rugged/vendor/libgit2-dist/src/branch.c +208 -0
  72. data/ext/rugged/vendor/libgit2-dist/src/branch.h +17 -0
  73. data/ext/rugged/vendor/libgit2-dist/src/bswap.h +1 -1
  74. data/ext/rugged/vendor/libgit2-dist/src/buffer.c +395 -46
  75. data/ext/rugged/vendor/libgit2-dist/src/buffer.h +112 -9
  76. data/ext/rugged/vendor/libgit2-dist/src/cache.c +37 -49
  77. data/ext/rugged/vendor/libgit2-dist/src/cache.h +7 -17
  78. data/ext/rugged/vendor/libgit2-dist/src/cc-compat.h +18 -16
  79. data/ext/rugged/vendor/libgit2-dist/src/commit.c +56 -90
  80. data/ext/rugged/vendor/libgit2-dist/src/commit.h +1 -1
  81. data/ext/rugged/vendor/libgit2-dist/src/common.h +12 -5
  82. data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.c +1 -1
  83. data/ext/rugged/vendor/libgit2-dist/src/{win32 → compat}/fnmatch.h +3 -3
  84. data/ext/rugged/vendor/libgit2-dist/src/config.c +247 -158
  85. data/ext/rugged/vendor/libgit2-dist/src/config.h +10 -1
  86. data/ext/rugged/vendor/libgit2-dist/src/config_cache.c +94 -0
  87. data/ext/rugged/vendor/libgit2-dist/src/config_file.c +606 -496
  88. data/ext/rugged/vendor/libgit2-dist/src/config_file.h +31 -0
  89. data/ext/rugged/vendor/libgit2-dist/src/crlf.c +228 -0
  90. data/ext/rugged/vendor/libgit2-dist/src/date.c +876 -0
  91. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.c +15 -9
  92. data/ext/rugged/vendor/libgit2-dist/src/delta-apply.h +2 -2
  93. data/ext/rugged/vendor/libgit2-dist/src/diff.c +814 -0
  94. data/ext/rugged/vendor/libgit2-dist/src/diff.h +43 -0
  95. data/ext/rugged/vendor/libgit2-dist/src/diff_output.c +794 -0
  96. data/ext/rugged/vendor/libgit2-dist/src/errors.c +89 -74
  97. data/ext/rugged/vendor/libgit2-dist/src/fetch.c +94 -66
  98. data/ext/rugged/vendor/libgit2-dist/src/fetch.h +5 -4
  99. data/ext/rugged/vendor/libgit2-dist/src/filebuf.c +157 -100
  100. data/ext/rugged/vendor/libgit2-dist/src/filebuf.h +22 -8
  101. data/ext/rugged/vendor/libgit2-dist/src/fileops.c +330 -206
  102. data/ext/rugged/vendor/libgit2-dist/src/fileops.h +82 -51
  103. data/ext/rugged/vendor/libgit2-dist/src/filter.c +165 -0
  104. data/ext/rugged/vendor/libgit2-dist/src/filter.h +119 -0
  105. data/ext/rugged/vendor/libgit2-dist/src/global.c +4 -4
  106. data/ext/rugged/vendor/libgit2-dist/src/global.h +4 -1
  107. data/ext/rugged/vendor/libgit2-dist/src/hash.c +1 -1
  108. data/ext/rugged/vendor/libgit2-dist/src/hash.h +1 -1
  109. data/ext/rugged/vendor/libgit2-dist/src/ignore.c +203 -0
  110. data/ext/rugged/vendor/libgit2-dist/src/ignore.h +38 -0
  111. data/ext/rugged/vendor/libgit2-dist/src/index.c +220 -169
  112. data/ext/rugged/vendor/libgit2-dist/src/index.h +5 -1
  113. data/ext/rugged/vendor/libgit2-dist/src/indexer.c +601 -102
  114. data/ext/rugged/vendor/libgit2-dist/src/iterator.c +748 -0
  115. data/ext/rugged/vendor/libgit2-dist/src/iterator.h +151 -0
  116. data/ext/rugged/vendor/libgit2-dist/src/khash.h +608 -0
  117. data/ext/rugged/vendor/libgit2-dist/src/map.h +6 -1
  118. data/ext/rugged/vendor/libgit2-dist/src/message.c +61 -0
  119. data/ext/rugged/vendor/libgit2-dist/src/message.h +14 -0
  120. data/ext/rugged/vendor/libgit2-dist/src/mwindow.c +27 -29
  121. data/ext/rugged/vendor/libgit2-dist/src/mwindow.h +4 -4
  122. data/ext/rugged/vendor/libgit2-dist/src/netops.c +375 -56
  123. data/ext/rugged/vendor/libgit2-dist/src/netops.h +12 -9
  124. data/ext/rugged/vendor/libgit2-dist/src/notes.c +548 -0
  125. data/ext/rugged/vendor/libgit2-dist/src/notes.h +28 -0
  126. data/ext/rugged/vendor/libgit2-dist/src/object.c +59 -21
  127. data/ext/rugged/vendor/libgit2-dist/src/odb.c +212 -175
  128. data/ext/rugged/vendor/libgit2-dist/src/odb.h +39 -2
  129. data/ext/rugged/vendor/libgit2-dist/src/odb_loose.c +238 -241
  130. data/ext/rugged/vendor/libgit2-dist/src/odb_pack.c +94 -106
  131. data/ext/rugged/vendor/libgit2-dist/src/oid.c +59 -60
  132. data/ext/rugged/vendor/libgit2-dist/src/oidmap.h +42 -0
  133. data/ext/rugged/vendor/libgit2-dist/src/pack.c +198 -170
  134. data/ext/rugged/vendor/libgit2-dist/src/pack.h +16 -9
  135. data/ext/rugged/vendor/libgit2-dist/src/path.c +496 -106
  136. data/ext/rugged/vendor/libgit2-dist/src/path.h +214 -20
  137. data/ext/rugged/vendor/libgit2-dist/src/pkt.c +88 -159
  138. data/ext/rugged/vendor/libgit2-dist/src/pkt.h +9 -5
  139. data/ext/rugged/vendor/libgit2-dist/src/pool.c +294 -0
  140. data/ext/rugged/vendor/libgit2-dist/src/pool.h +125 -0
  141. data/ext/rugged/vendor/libgit2-dist/src/posix.c +38 -16
  142. data/ext/rugged/vendor/libgit2-dist/src/posix.h +20 -2
  143. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.c +1 -1
  144. data/ext/rugged/vendor/libgit2-dist/src/ppc/sha1.h +1 -1
  145. data/ext/rugged/vendor/libgit2-dist/src/pqueue.c +7 -7
  146. data/ext/rugged/vendor/libgit2-dist/src/pqueue.h +1 -1
  147. data/ext/rugged/vendor/libgit2-dist/src/protocol.c +21 -13
  148. data/ext/rugged/vendor/libgit2-dist/src/protocol.h +1 -1
  149. data/ext/rugged/vendor/libgit2-dist/src/reflog.c +125 -103
  150. data/ext/rugged/vendor/libgit2-dist/src/reflog.h +1 -1
  151. data/ext/rugged/vendor/libgit2-dist/src/refs.c +713 -640
  152. data/ext/rugged/vendor/libgit2-dist/src/refs.h +27 -3
  153. data/ext/rugged/vendor/libgit2-dist/src/refspec.c +51 -17
  154. data/ext/rugged/vendor/libgit2-dist/src/refspec.h +13 -1
  155. data/ext/rugged/vendor/libgit2-dist/src/remote.c +307 -119
  156. data/ext/rugged/vendor/libgit2-dist/src/remote.h +3 -2
  157. data/ext/rugged/vendor/libgit2-dist/src/repository.c +593 -442
  158. data/ext/rugged/vendor/libgit2-dist/src/repository.h +80 -2
  159. data/ext/rugged/vendor/libgit2-dist/src/reset.c +103 -0
  160. data/ext/rugged/vendor/libgit2-dist/src/revparse.c +753 -0
  161. data/ext/rugged/vendor/libgit2-dist/src/revwalk.c +434 -158
  162. data/ext/rugged/vendor/libgit2-dist/src/sha1.c +3 -3
  163. data/ext/rugged/vendor/libgit2-dist/src/sha1.h +2 -2
  164. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.c +3 -2
  165. data/ext/rugged/vendor/libgit2-dist/src/sha1_lookup.h +1 -1
  166. data/ext/rugged/vendor/libgit2-dist/src/signature.c +69 -80
  167. data/ext/rugged/vendor/libgit2-dist/src/signature.h +1 -1
  168. data/ext/rugged/vendor/libgit2-dist/src/status.c +184 -638
  169. data/ext/rugged/vendor/libgit2-dist/src/strmap.h +64 -0
  170. data/ext/rugged/vendor/libgit2-dist/src/submodule.c +387 -0
  171. data/ext/rugged/vendor/libgit2-dist/src/tag.c +162 -137
  172. data/ext/rugged/vendor/libgit2-dist/src/tag.h +2 -1
  173. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.c +1 -1
  174. data/ext/rugged/vendor/libgit2-dist/src/thread-utils.h +8 -8
  175. data/ext/rugged/vendor/libgit2-dist/src/transport.c +31 -19
  176. data/ext/rugged/vendor/libgit2-dist/src/transport.h +31 -11
  177. data/ext/rugged/vendor/libgit2-dist/src/transports/git.c +168 -193
  178. data/ext/rugged/vendor/libgit2-dist/src/transports/http.c +192 -241
  179. data/ext/rugged/vendor/libgit2-dist/src/transports/local.c +92 -86
  180. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.c +32 -49
  181. data/ext/rugged/vendor/libgit2-dist/src/tree-cache.h +1 -1
  182. data/ext/rugged/vendor/libgit2-dist/src/tree.c +172 -145
  183. data/ext/rugged/vendor/libgit2-dist/src/tree.h +16 -2
  184. data/ext/rugged/vendor/libgit2-dist/src/tsort.c +16 -14
  185. data/ext/rugged/vendor/libgit2-dist/src/unix/map.c +8 -24
  186. data/ext/rugged/vendor/libgit2-dist/src/unix/posix.h +9 -3
  187. data/ext/rugged/vendor/libgit2-dist/src/util.c +94 -38
  188. data/ext/rugged/vendor/libgit2-dist/src/util.h +119 -13
  189. data/ext/rugged/vendor/libgit2-dist/src/vector.c +84 -31
  190. data/ext/rugged/vendor/libgit2-dist/src/vector.h +37 -4
  191. data/ext/rugged/vendor/libgit2-dist/src/win32/dir.c +81 -41
  192. data/ext/rugged/vendor/libgit2-dist/src/{dir.h → win32/dir.h} +4 -9
  193. data/ext/rugged/vendor/libgit2-dist/src/win32/map.c +19 -35
  194. data/ext/rugged/vendor/libgit2-dist/src/win32/mingw-compat.h +1 -1
  195. data/ext/rugged/vendor/libgit2-dist/src/win32/msvc-compat.h +5 -1
  196. data/ext/rugged/vendor/libgit2-dist/src/win32/posix.h +10 -8
  197. data/ext/rugged/vendor/libgit2-dist/src/win32/posix_w32.c +262 -118
  198. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.c +12 -9
  199. data/ext/rugged/vendor/libgit2-dist/src/win32/pthread.h +1 -1
  200. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.c +30 -26
  201. data/ext/rugged/vendor/libgit2-dist/src/win32/utf-conv.h +2 -1
  202. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiff.h +135 -0
  203. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.c +572 -0
  204. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xdiffi.h +63 -0
  205. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.c +253 -0
  206. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xemit.h +36 -0
  207. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xhistogram.c +371 -0
  208. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xinclude.h +46 -0
  209. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmacros.h +54 -0
  210. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xmerge.c +619 -0
  211. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xpatience.c +358 -0
  212. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.c +483 -0
  213. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xprepare.h +34 -0
  214. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xtypes.h +67 -0
  215. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.c +419 -0
  216. data/ext/rugged/vendor/libgit2-dist/src/xdiff/xutils.h +49 -0
  217. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/attr_expect.h +43 -0
  218. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/file.c +226 -0
  219. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/flags.c +108 -0
  220. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/lookup.c +262 -0
  221. data/ext/rugged/vendor/libgit2-dist/tests-clar/attr/repo.c +273 -0
  222. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/buf/basic.c +5 -5
  223. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_helpers.c +181 -0
  224. data/ext/rugged/vendor/libgit2-dist/tests-clar/clar_libgit2.h +55 -0
  225. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/commit.c +44 -0
  226. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/parse.c +350 -0
  227. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/signature.c +65 -0
  228. data/ext/rugged/vendor/libgit2-dist/tests-clar/commit/write.c +140 -0
  229. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/add.c +3 -3
  230. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/multivar.c +151 -0
  231. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/new.c +5 -5
  232. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/read.c +44 -32
  233. data/ext/rugged/vendor/libgit2-dist/tests-clar/config/stress.c +61 -0
  234. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/config/write.c +20 -5
  235. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/buffer.c +613 -0
  236. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/dirent.c +39 -26
  237. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/env.c +115 -0
  238. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/errors.c +60 -0
  239. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/filebuf.c +4 -18
  240. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/hex.c +22 -0
  241. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/oid.c +6 -6
  242. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/path.c +420 -0
  243. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/pool.c +85 -0
  244. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/rmdir.c +68 -0
  245. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/string.c +1 -1
  246. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/strmap.c +102 -0
  247. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/core/strtol.c +1 -1
  248. data/ext/rugged/vendor/libgit2-dist/tests-clar/core/vector.c +191 -0
  249. data/ext/rugged/vendor/libgit2-dist/tests-clar/date/date.c +15 -0
  250. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/blob.c +254 -0
  251. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.c +104 -0
  252. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/diff_helpers.h +47 -0
  253. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/index.c +92 -0
  254. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/iterator.c +572 -0
  255. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/patch.c +99 -0
  256. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/tree.c +210 -0
  257. data/ext/rugged/vendor/libgit2-dist/tests-clar/diff/workdir.c +543 -0
  258. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/read_tree.c +46 -0
  259. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/index/rename.c +2 -12
  260. data/ext/rugged/vendor/libgit2-dist/tests-clar/index/tests.c +246 -0
  261. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/createremotethenload.c +33 -0
  262. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotelocal.c +137 -0
  263. data/ext/rugged/vendor/libgit2-dist/tests-clar/network/remotes.c +183 -0
  264. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notes.c +133 -0
  265. data/ext/rugged/vendor/libgit2-dist/tests-clar/notes/notesref.c +57 -0
  266. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/filter.c +125 -0
  267. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/fromchunks.c +87 -0
  268. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/blob/write.c +69 -0
  269. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/commit/commitstagedfile.c +126 -0
  270. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/lookup.c +63 -0
  271. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/message.c +171 -0
  272. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/chars.c +3 -14
  273. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/compare.c +4 -4
  274. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/convert.c +10 -10
  275. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/data.h +0 -0
  276. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/fromstr.c +1 -1
  277. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/hash.c +21 -17
  278. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/short.c +1 -1
  279. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/size.c +1 -1
  280. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/raw/type2string.c +14 -14
  281. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/raw/write.c +455 -0
  282. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/peel.c +56 -0
  283. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/read.c +130 -0
  284. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tag/write.c +192 -0
  285. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/object/tree/frompath.c +22 -16
  286. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/read.c +75 -0
  287. data/ext/rugged/vendor/libgit2-dist/tests-clar/object/tree/write.c +84 -0
  288. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose.c +1 -1
  289. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/loose_data.h +0 -0
  290. data/ext/rugged/vendor/libgit2-dist/tests-clar/odb/mixed.c +24 -0
  291. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/pack_data.h +0 -0
  292. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/packed.c +1 -1
  293. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/odb/sorting.c +1 -1
  294. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/create.c +113 -0
  295. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/delete.c +91 -0
  296. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/listall.c +78 -0
  297. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/branches/move.c +72 -0
  298. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/crashes.c +17 -0
  299. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/create.c +149 -0
  300. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/delete.c +85 -0
  301. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/list.c +53 -0
  302. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/listall.c +36 -0
  303. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/lookup.c +42 -0
  304. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/normalize.c +200 -0
  305. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/overwrite.c +136 -0
  306. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/pack.c +67 -0
  307. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/read.c +194 -0
  308. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/reflog.c +123 -0
  309. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/rename.c +339 -0
  310. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/revparse.c +174 -0
  311. data/ext/rugged/vendor/libgit2-dist/tests-clar/refs/unicode.c +42 -0
  312. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/discover.c +142 -0
  313. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/repo/getters.c +19 -1
  314. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/init.c +235 -0
  315. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/open.c +282 -0
  316. data/ext/rugged/vendor/libgit2-dist/tests-clar/repo/setters.c +80 -0
  317. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/mixed.c +47 -0
  318. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.c +10 -0
  319. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/reset_helpers.h +6 -0
  320. data/ext/rugged/vendor/libgit2-dist/tests-clar/reset/soft.c +102 -0
  321. data/ext/rugged/vendor/libgit2-dist/{tests/t05-revwalk.c → tests-clar/revwalk/basic.c} +85 -44
  322. data/ext/rugged/vendor/libgit2-dist/tests-clar/revwalk/mergebase.c +148 -0
  323. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/ignore.c +133 -0
  324. data/ext/rugged/vendor/libgit2-dist/{tests-clay → tests-clar}/status/single.c +2 -11
  325. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_data.h +202 -0
  326. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.c +49 -0
  327. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/status_helpers.h +33 -0
  328. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/submodules.c +112 -0
  329. data/ext/rugged/vendor/libgit2-dist/tests-clar/status/worktree.c +649 -0
  330. data/ext/rugged/vendor/libgit2-dist/tests-clar/threads/basic.c +20 -0
  331. data/ext/rugged/vendor/libgit2-dist.tar.gz +0 -0
  332. data/lib/rugged/commit.rb +35 -0
  333. data/lib/rugged/object.rb +7 -0
  334. data/lib/rugged/reference.rb +9 -0
  335. data/lib/rugged/repository.rb +99 -3
  336. data/lib/rugged/tag.rb +22 -0
  337. data/lib/rugged/tree.rb +8 -0
  338. data/lib/rugged/version.rb +1 -1
  339. data/lib/rugged.rb +4 -1
  340. data/test/blob_test.rb +2 -2
  341. data/test/commit_test.rb +27 -13
  342. data/test/config_test.rb +44 -0
  343. data/test/coverage/HEAD.json +1 -1
  344. data/test/fixtures/testrepo.git/config +2 -0
  345. data/test/fixtures/testrepo.git/objects/7f/043268ea43ce18e3540acaabf9e090c91965b0 +0 -0
  346. data/test/lib_test.rb +7 -0
  347. data/test/object_test.rb +3 -3
  348. data/test/reference_test.rb +46 -8
  349. data/test/remote_test.rb +8 -2
  350. data/test/repo_pack_test.rb +3 -3
  351. data/test/repo_test.rb +79 -11
  352. data/test/tag_test.rb +9 -2
  353. data/test/test_helper.rb +21 -0
  354. data/test/tree_test.rb +18 -6
  355. metadata +205 -81
  356. data/ext/rugged/vendor/libgit2-dist/include/git2/zlib.h +0 -40
  357. data/ext/rugged/vendor/libgit2-dist/src/hashtable.c +0 -243
  358. data/ext/rugged/vendor/libgit2-dist/src/hashtable.h +0 -80
  359. data/ext/rugged/vendor/libgit2-dist/tests/t00-core.c +0 -628
  360. data/ext/rugged/vendor/libgit2-dist/tests/t01-data.h +0 -322
  361. data/ext/rugged/vendor/libgit2-dist/tests/t01-rawobj.c +0 -638
  362. data/ext/rugged/vendor/libgit2-dist/tests/t03-data.h +0 -344
  363. data/ext/rugged/vendor/libgit2-dist/tests/t03-objwrite.c +0 -255
  364. data/ext/rugged/vendor/libgit2-dist/tests/t04-commit.c +0 -788
  365. data/ext/rugged/vendor/libgit2-dist/tests/t06-index.c +0 -219
  366. data/ext/rugged/vendor/libgit2-dist/tests/t07-hashtable.c +0 -192
  367. data/ext/rugged/vendor/libgit2-dist/tests/t08-tag.c +0 -357
  368. data/ext/rugged/vendor/libgit2-dist/tests/t09-tree.c +0 -221
  369. data/ext/rugged/vendor/libgit2-dist/tests/t10-refs.c +0 -1294
  370. data/ext/rugged/vendor/libgit2-dist/tests/t12-repo.c +0 -174
  371. data/ext/rugged/vendor/libgit2-dist/tests/t13-threads.c +0 -41
  372. data/ext/rugged/vendor/libgit2-dist/tests/t17-bufs.c +0 -61
  373. data/ext/rugged/vendor/libgit2-dist/tests/t18-status.c +0 -448
  374. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.c +0 -310
  375. data/ext/rugged/vendor/libgit2-dist/tests/test_helpers.h +0 -83
  376. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.c +0 -198
  377. data/ext/rugged/vendor/libgit2-dist/tests/test_lib.h +0 -54
  378. data/ext/rugged/vendor/libgit2-dist/tests/test_main.c +0 -89
  379. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay.h +0 -187
  380. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_libgit2.h +0 -28
  381. data/ext/rugged/vendor/libgit2-dist/tests-clay/clay_main.c +0 -1073
  382. data/ext/rugged/vendor/libgit2-dist/tests-clay/config/stress.c +0 -39
  383. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/path.c +0 -139
  384. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/rmdir.c +0 -50
  385. data/ext/rugged/vendor/libgit2-dist/tests-clay/core/vector.c +0 -66
  386. data/ext/rugged/vendor/libgit2-dist/tests-clay/network/remotes.c +0 -50
  387. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/init.c +0 -104
  388. data/ext/rugged/vendor/libgit2-dist/tests-clay/repo/open.c +0 -54
  389. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/status_data.h +0 -48
  390. data/ext/rugged/vendor/libgit2-dist/tests-clay/status/worktree.c +0 -124
  391. data/lib/rugged/objects.rb +0 -45
  392. 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) */