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.
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) */