rugged 0.26.7 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/ext/rugged/rugged_blame.c +6 -3
  4. data/ext/rugged/rugged_branch_collection.c +3 -6
  5. data/ext/rugged/rugged_commit.c +56 -0
  6. data/ext/rugged/rugged_config.c +44 -9
  7. data/ext/rugged/rugged_diff.c +3 -14
  8. data/ext/rugged/rugged_diff_hunk.c +1 -3
  9. data/ext/rugged/rugged_index.c +1 -5
  10. data/ext/rugged/rugged_note.c +1 -4
  11. data/ext/rugged/rugged_patch.c +1 -4
  12. data/ext/rugged/rugged_reference_collection.c +1 -7
  13. data/ext/rugged/rugged_remote.c +5 -8
  14. data/ext/rugged/rugged_remote_collection.c +1 -6
  15. data/ext/rugged/rugged_repo.c +16 -48
  16. data/ext/rugged/rugged_revwalk.c +7 -16
  17. data/ext/rugged/rugged_settings.c +28 -0
  18. data/ext/rugged/rugged_submodule_collection.c +3 -4
  19. data/ext/rugged/rugged_tag_collection.c +1 -5
  20. data/ext/rugged/rugged_tree.c +2 -3
  21. data/lib/rugged/repository.rb +43 -0
  22. data/lib/rugged/version.rb +1 -1
  23. data/vendor/libgit2/AUTHORS +1 -0
  24. data/vendor/libgit2/CMakeLists.txt +61 -510
  25. data/vendor/libgit2/cmake/Modules/EnableWarnings.cmake +14 -0
  26. data/vendor/libgit2/cmake/Modules/FindCoreFoundation.cmake +25 -8
  27. data/vendor/libgit2/cmake/Modules/FindSecurity.cmake +27 -8
  28. data/vendor/libgit2/cmake/Modules/FindStatNsec.cmake +20 -0
  29. data/vendor/libgit2/cmake/Modules/IdeSplitSources.cmake +22 -0
  30. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +3 -0
  31. data/vendor/libgit2/deps/regex/CMakeLists.txt +2 -0
  32. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +26 -0
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +4 -0
  34. data/vendor/libgit2/include/git2/config.h +29 -2
  35. data/vendor/libgit2/include/git2/describe.h +1 -1
  36. data/vendor/libgit2/include/git2/diff.h +59 -8
  37. data/vendor/libgit2/include/git2/graph.h +3 -0
  38. data/vendor/libgit2/include/git2/merge.h +6 -0
  39. data/vendor/libgit2/include/git2/message.h +43 -3
  40. data/vendor/libgit2/include/git2/notes.h +89 -0
  41. data/vendor/libgit2/include/git2/odb.h +8 -1
  42. data/vendor/libgit2/include/git2/patch.h +2 -2
  43. data/vendor/libgit2/include/git2/pathspec.h +35 -18
  44. data/vendor/libgit2/include/git2/refs.h +3 -0
  45. data/vendor/libgit2/include/git2/remote.h +34 -4
  46. data/vendor/libgit2/include/git2/repository.h +6 -6
  47. data/vendor/libgit2/include/git2/reset.h +4 -4
  48. data/vendor/libgit2/include/git2/status.h +4 -0
  49. data/vendor/libgit2/include/git2/sys/config.h +4 -1
  50. data/vendor/libgit2/include/git2/sys/odb_backend.h +2 -1
  51. data/vendor/libgit2/include/git2/tree.h +4 -3
  52. data/vendor/libgit2/include/git2/types.h +1 -0
  53. data/vendor/libgit2/include/git2/version.h +4 -4
  54. data/vendor/libgit2/include/git2/worktree.h +1 -1
  55. data/vendor/libgit2/src/CMakeLists.txt +463 -0
  56. data/vendor/libgit2/src/annotated_commit.c +1 -1
  57. data/vendor/libgit2/src/annotated_commit.h +2 -0
  58. data/vendor/libgit2/src/apply.c +2 -1
  59. data/vendor/libgit2/src/apply.h +2 -0
  60. data/vendor/libgit2/src/attr.c +24 -4
  61. data/vendor/libgit2/src/attr.h +2 -0
  62. data/vendor/libgit2/src/attr_file.c +9 -2
  63. data/vendor/libgit2/src/attr_file.h +2 -0
  64. data/vendor/libgit2/src/attrcache.c +9 -1
  65. data/vendor/libgit2/src/attrcache.h +2 -0
  66. data/vendor/libgit2/src/blame.c +1 -0
  67. data/vendor/libgit2/src/blame.h +2 -1
  68. data/vendor/libgit2/src/blame_git.c +1 -0
  69. data/vendor/libgit2/src/blame_git.h +2 -0
  70. data/vendor/libgit2/src/blob.c +2 -2
  71. data/vendor/libgit2/src/blob.h +2 -0
  72. data/vendor/libgit2/src/branch.c +8 -1
  73. data/vendor/libgit2/src/branch.h +2 -0
  74. data/vendor/libgit2/src/buf_text.c +7 -7
  75. data/vendor/libgit2/src/buf_text.h +3 -3
  76. data/vendor/libgit2/src/buffer.c +31 -1
  77. data/vendor/libgit2/src/buffer.h +3 -0
  78. data/vendor/libgit2/src/cache.c +2 -2
  79. data/vendor/libgit2/src/cache.h +2 -0
  80. data/vendor/libgit2/src/cc-compat.h +3 -3
  81. data/vendor/libgit2/src/checkout.c +30 -19
  82. data/vendor/libgit2/src/checkout.h +2 -0
  83. data/vendor/libgit2/src/cherrypick.c +1 -0
  84. data/vendor/libgit2/src/clone.c +2 -1
  85. data/vendor/libgit2/src/clone.h +4 -0
  86. data/vendor/libgit2/src/commit.c +2 -1
  87. data/vendor/libgit2/src/commit.h +2 -0
  88. data/vendor/libgit2/src/commit_list.c +1 -1
  89. data/vendor/libgit2/src/commit_list.h +2 -0
  90. data/vendor/libgit2/src/common.h +11 -5
  91. data/vendor/libgit2/src/config.c +12 -10
  92. data/vendor/libgit2/src/config.h +2 -0
  93. data/vendor/libgit2/src/config_cache.c +1 -0
  94. data/vendor/libgit2/src/config_file.c +287 -786
  95. data/vendor/libgit2/src/config_file.h +4 -3
  96. data/vendor/libgit2/src/config_parse.c +525 -0
  97. data/vendor/libgit2/src/config_parse.h +64 -0
  98. data/vendor/libgit2/src/crlf.c +2 -1
  99. data/vendor/libgit2/src/delta.c +28 -30
  100. data/vendor/libgit2/src/delta.h +1 -0
  101. data/vendor/libgit2/src/describe.c +3 -1
  102. data/vendor/libgit2/src/diff.c +148 -2
  103. data/vendor/libgit2/src/diff.h +3 -1
  104. data/vendor/libgit2/src/diff_driver.c +12 -9
  105. data/vendor/libgit2/src/diff_driver.h +4 -1
  106. data/vendor/libgit2/src/diff_file.c +7 -4
  107. data/vendor/libgit2/src/diff_file.h +1 -0
  108. data/vendor/libgit2/src/diff_generate.c +6 -3
  109. data/vendor/libgit2/src/diff_generate.h +6 -1
  110. data/vendor/libgit2/src/diff_parse.c +5 -4
  111. data/vendor/libgit2/src/diff_parse.h +2 -0
  112. data/vendor/libgit2/src/diff_print.c +2 -0
  113. data/vendor/libgit2/src/diff_stats.c +2 -0
  114. data/vendor/libgit2/src/diff_tform.c +2 -1
  115. data/vendor/libgit2/src/diff_tform.h +4 -1
  116. data/vendor/libgit2/src/diff_xdiff.c +5 -2
  117. data/vendor/libgit2/src/diff_xdiff.h +2 -0
  118. data/vendor/libgit2/src/errors.c +2 -0
  119. data/vendor/libgit2/src/features.h.in +36 -0
  120. data/vendor/libgit2/src/fetch.c +2 -2
  121. data/vendor/libgit2/src/fetch.h +4 -0
  122. data/vendor/libgit2/src/fetchhead.c +3 -3
  123. data/vendor/libgit2/src/fetchhead.h +3 -0
  124. data/vendor/libgit2/src/filebuf.c +2 -1
  125. data/vendor/libgit2/src/filebuf.h +2 -0
  126. data/vendor/libgit2/src/fileops.c +12 -1
  127. data/vendor/libgit2/src/fileops.h +7 -1
  128. data/vendor/libgit2/src/filter.c +2 -1
  129. data/vendor/libgit2/src/filter.h +1 -0
  130. data/vendor/libgit2/src/fnmatch.c +2 -2
  131. data/vendor/libgit2/src/fnmatch.h +3 -4
  132. data/vendor/libgit2/src/global.c +4 -3
  133. data/vendor/libgit2/src/global.h +1 -5
  134. data/vendor/libgit2/src/graph.c +2 -0
  135. data/vendor/libgit2/src/hash.c +0 -1
  136. data/vendor/libgit2/src/hash.h +3 -1
  137. data/vendor/libgit2/src/hash/hash_collisiondetect.h +3 -3
  138. data/vendor/libgit2/src/hash/hash_common_crypto.h +18 -5
  139. data/vendor/libgit2/src/hash/hash_generic.c +2 -2
  140. data/vendor/libgit2/src/hash/hash_generic.h +5 -3
  141. data/vendor/libgit2/src/hash/hash_openssl.h +3 -3
  142. data/vendor/libgit2/src/hash/hash_win32.c +57 -14
  143. data/vendor/libgit2/src/hash/hash_win32.h +4 -3
  144. data/vendor/libgit2/src/hashsig.c +3 -0
  145. data/vendor/libgit2/src/ident.c +2 -0
  146. data/vendor/libgit2/src/idxmap.h +2 -1
  147. data/vendor/libgit2/src/ignore.c +14 -2
  148. data/vendor/libgit2/src/ignore.h +2 -0
  149. data/vendor/libgit2/src/index.c +20 -40
  150. data/vendor/libgit2/src/index.h +2 -0
  151. data/vendor/libgit2/src/indexer.c +13 -5
  152. data/vendor/libgit2/src/indexer.h +5 -1
  153. data/vendor/libgit2/src/integer.h +1 -1
  154. data/vendor/libgit2/src/iterator.c +44 -3
  155. data/vendor/libgit2/src/iterator.h +3 -0
  156. data/vendor/libgit2/src/map.h +1 -1
  157. data/vendor/libgit2/src/merge.c +155 -33
  158. data/vendor/libgit2/src/merge.h +2 -0
  159. data/vendor/libgit2/src/merge_driver.c +2 -2
  160. data/vendor/libgit2/src/merge_driver.h +2 -0
  161. data/vendor/libgit2/src/merge_file.c +3 -0
  162. data/vendor/libgit2/src/message.h +3 -1
  163. data/vendor/libgit2/src/mwindow.c +1 -1
  164. data/vendor/libgit2/src/mwindow.h +2 -0
  165. data/vendor/libgit2/src/netops.c +75 -62
  166. data/vendor/libgit2/src/netops.h +2 -1
  167. data/vendor/libgit2/src/notes.c +164 -48
  168. data/vendor/libgit2/src/notes.h +1 -1
  169. data/vendor/libgit2/src/object.c +14 -3
  170. data/vendor/libgit2/src/object.h +4 -0
  171. data/vendor/libgit2/src/object_api.c +3 -2
  172. data/vendor/libgit2/src/odb.c +104 -38
  173. data/vendor/libgit2/src/odb.h +3 -1
  174. data/vendor/libgit2/src/odb_loose.c +414 -267
  175. data/vendor/libgit2/src/odb_mempack.c +1 -0
  176. data/vendor/libgit2/src/odb_pack.c +2 -1
  177. data/vendor/libgit2/src/offmap.h +1 -0
  178. data/vendor/libgit2/src/oid.c +2 -1
  179. data/vendor/libgit2/src/oid.h +3 -8
  180. data/vendor/libgit2/src/oidarray.c +2 -1
  181. data/vendor/libgit2/src/oidarray.h +1 -0
  182. data/vendor/libgit2/src/oidmap.h +1 -0
  183. data/vendor/libgit2/src/pack-objects.c +5 -1
  184. data/vendor/libgit2/src/pack-objects.h +1 -1
  185. data/vendor/libgit2/src/pack.c +2 -6
  186. data/vendor/libgit2/src/pack.h +2 -1
  187. data/vendor/libgit2/src/parse.c +121 -0
  188. data/vendor/libgit2/src/parse.h +61 -0
  189. data/vendor/libgit2/src/patch.c +9 -2
  190. data/vendor/libgit2/src/patch.h +2 -0
  191. data/vendor/libgit2/src/patch_generate.c +6 -5
  192. data/vendor/libgit2/src/patch_generate.h +1 -0
  193. data/vendor/libgit2/src/patch_parse.c +265 -276
  194. data/vendor/libgit2/src/patch_parse.h +6 -11
  195. data/vendor/libgit2/src/path.c +24 -181
  196. data/vendor/libgit2/src/path.h +14 -73
  197. data/vendor/libgit2/src/pathspec.c +2 -1
  198. data/vendor/libgit2/src/pathspec.h +2 -1
  199. data/vendor/libgit2/src/pool.c +8 -0
  200. data/vendor/libgit2/src/pool.h +1 -0
  201. data/vendor/libgit2/src/posix.c +2 -1
  202. data/vendor/libgit2/src/posix.h +1 -0
  203. data/vendor/libgit2/src/pqueue.c +1 -0
  204. data/vendor/libgit2/src/pqueue.h +2 -0
  205. data/vendor/libgit2/src/proxy.c +2 -1
  206. data/vendor/libgit2/src/proxy.h +3 -1
  207. data/vendor/libgit2/src/push.c +4 -171
  208. data/vendor/libgit2/src/push.h +2 -0
  209. data/vendor/libgit2/src/rebase.c +1 -0
  210. data/vendor/libgit2/src/refdb.c +2 -3
  211. data/vendor/libgit2/src/refdb.h +2 -0
  212. data/vendor/libgit2/src/refdb_fs.c +5 -3
  213. data/vendor/libgit2/src/refdb_fs.h +4 -0
  214. data/vendor/libgit2/src/reflog.c +1 -0
  215. data/vendor/libgit2/src/reflog.h +2 -1
  216. data/vendor/libgit2/src/refs.c +1 -0
  217. data/vendor/libgit2/src/refs.h +2 -1
  218. data/vendor/libgit2/src/refspec.c +2 -2
  219. data/vendor/libgit2/src/refspec.h +2 -0
  220. data/vendor/libgit2/src/remote.c +56 -10
  221. data/vendor/libgit2/src/remote.h +2 -0
  222. data/vendor/libgit2/src/repository.c +16 -14
  223. data/vendor/libgit2/src/repository.h +2 -0
  224. data/vendor/libgit2/src/reset.c +6 -5
  225. data/vendor/libgit2/src/revert.c +1 -0
  226. data/vendor/libgit2/src/revparse.c +3 -5
  227. data/vendor/libgit2/src/revwalk.c +2 -2
  228. data/vendor/libgit2/src/revwalk.h +2 -0
  229. data/vendor/libgit2/src/settings.c +6 -8
  230. data/vendor/libgit2/src/sha1_lookup.c +2 -216
  231. data/vendor/libgit2/src/sha1_lookup.h +2 -6
  232. data/vendor/libgit2/src/signature.c +8 -3
  233. data/vendor/libgit2/src/signature.h +2 -0
  234. data/vendor/libgit2/src/sortedcache.c +7 -0
  235. data/vendor/libgit2/src/sortedcache.h +2 -0
  236. data/vendor/libgit2/src/stash.c +1 -0
  237. data/vendor/libgit2/src/status.c +14 -9
  238. data/vendor/libgit2/src/status.h +2 -0
  239. data/vendor/libgit2/src/{curl_stream.c → streams/curl.c} +2 -0
  240. data/vendor/libgit2/src/{curl_stream.h → streams/curl.h} +4 -2
  241. data/vendor/libgit2/src/{openssl_stream.c → streams/openssl.c} +47 -18
  242. data/vendor/libgit2/src/{openssl_stream.h → streams/openssl.h} +6 -2
  243. data/vendor/libgit2/src/{socket_stream.c → streams/socket.c} +2 -2
  244. data/vendor/libgit2/src/{socket_stream.h → streams/socket.h} +4 -2
  245. data/vendor/libgit2/src/{stransport_stream.c → streams/stransport.c} +4 -2
  246. data/vendor/libgit2/src/{stransport_stream.h → streams/stransport.h} +4 -2
  247. data/vendor/libgit2/src/{tls_stream.c → streams/tls.c} +4 -3
  248. data/vendor/libgit2/src/{tls_stream.h → streams/tls.h} +4 -2
  249. data/vendor/libgit2/src/submodule.c +28 -80
  250. data/vendor/libgit2/src/submodule.h +2 -13
  251. data/vendor/libgit2/src/sysdir.c +75 -8
  252. data/vendor/libgit2/src/sysdir.h +2 -1
  253. data/vendor/libgit2/src/tag.c +2 -2
  254. data/vendor/libgit2/src/tag.h +2 -0
  255. data/vendor/libgit2/src/thread-utils.c +1 -0
  256. data/vendor/libgit2/src/thread-utils.h +1 -1
  257. data/vendor/libgit2/src/trace.c +2 -2
  258. data/vendor/libgit2/src/trace.h +2 -0
  259. data/vendor/libgit2/src/trailer.c +416 -0
  260. data/vendor/libgit2/src/transaction.c +2 -1
  261. data/vendor/libgit2/src/transport.c +2 -0
  262. data/vendor/libgit2/src/transports/auth.c +2 -1
  263. data/vendor/libgit2/src/transports/auth.h +4 -3
  264. data/vendor/libgit2/src/transports/auth_negotiate.c +2 -1
  265. data/vendor/libgit2/src/transports/auth_negotiate.h +3 -3
  266. data/vendor/libgit2/src/transports/cred.c +2 -0
  267. data/vendor/libgit2/src/transports/cred.h +4 -2
  268. data/vendor/libgit2/src/transports/cred_helpers.c +1 -0
  269. data/vendor/libgit2/src/transports/git.c +3 -1
  270. data/vendor/libgit2/src/transports/http.c +10 -14
  271. data/vendor/libgit2/src/transports/http.h +23 -0
  272. data/vendor/libgit2/src/transports/local.c +23 -5
  273. data/vendor/libgit2/src/transports/smart.c +3 -1
  274. data/vendor/libgit2/src/transports/smart.h +23 -16
  275. data/vendor/libgit2/src/transports/smart_pkt.c +114 -130
  276. data/vendor/libgit2/src/transports/smart_protocol.c +26 -22
  277. data/vendor/libgit2/src/transports/ssh.c +12 -7
  278. data/vendor/libgit2/src/transports/ssh.h +4 -2
  279. data/vendor/libgit2/src/transports/winhttp.c +19 -21
  280. data/vendor/libgit2/src/tree-cache.c +1 -0
  281. data/vendor/libgit2/src/tree-cache.h +1 -0
  282. data/vendor/libgit2/src/tree.c +20 -14
  283. data/vendor/libgit2/src/tree.h +2 -0
  284. data/vendor/libgit2/src/tsort.c +0 -1
  285. data/vendor/libgit2/src/unix/map.c +4 -1
  286. data/vendor/libgit2/src/unix/posix.h +8 -4
  287. data/vendor/libgit2/src/unix/pthread.h +1 -1
  288. data/vendor/libgit2/src/unix/realpath.c +4 -1
  289. data/vendor/libgit2/src/util.c +6 -5
  290. data/vendor/libgit2/src/util.h +39 -111
  291. data/vendor/libgit2/src/varint.c +0 -1
  292. data/vendor/libgit2/src/varint.h +2 -0
  293. data/vendor/libgit2/src/vector.c +1 -1
  294. data/vendor/libgit2/src/win32/dir.c +3 -0
  295. data/vendor/libgit2/src/win32/dir.h +4 -3
  296. data/vendor/libgit2/src/win32/error.c +1 -1
  297. data/vendor/libgit2/src/win32/error.h +4 -2
  298. data/vendor/libgit2/src/win32/findfile.c +2 -1
  299. data/vendor/libgit2/src/win32/findfile.h +4 -2
  300. data/vendor/libgit2/src/win32/map.c +2 -0
  301. data/vendor/libgit2/src/win32/mingw-compat.h +3 -3
  302. data/vendor/libgit2/src/win32/msvc-compat.h +3 -3
  303. data/vendor/libgit2/src/win32/path_w32.c +7 -12
  304. data/vendor/libgit2/src/win32/path_w32.h +3 -2
  305. data/vendor/libgit2/src/win32/posix.h +2 -2
  306. data/vendor/libgit2/src/win32/posix_w32.c +11 -5
  307. data/vendor/libgit2/src/win32/precompiled.h +2 -1
  308. data/vendor/libgit2/src/win32/reparse.h +2 -2
  309. data/vendor/libgit2/src/win32/thread.c +1 -0
  310. data/vendor/libgit2/src/win32/thread.h +2 -2
  311. data/vendor/libgit2/src/win32/utf-conv.c +0 -1
  312. data/vendor/libgit2/src/win32/utf-conv.h +4 -3
  313. data/vendor/libgit2/src/win32/w32_buffer.c +1 -1
  314. data/vendor/libgit2/src/win32/w32_buffer.h +4 -2
  315. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c +2 -1
  316. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +85 -2
  317. data/vendor/libgit2/src/win32/w32_stack.c +2 -1
  318. data/vendor/libgit2/src/win32/w32_stack.h +5 -3
  319. data/vendor/libgit2/src/win32/w32_util.h +4 -2
  320. data/vendor/libgit2/src/win32/win32-compat.h +3 -3
  321. data/vendor/libgit2/src/worktree.c +4 -5
  322. data/vendor/libgit2/src/worktree.h +2 -0
  323. data/vendor/libgit2/src/xdiff/xdiff.h +22 -13
  324. data/vendor/libgit2/src/xdiff/xdiffi.c +523 -81
  325. data/vendor/libgit2/src/xdiff/xdiffi.h +2 -2
  326. data/vendor/libgit2/src/xdiff/xemit.c +63 -39
  327. data/vendor/libgit2/src/xdiff/xemit.h +2 -2
  328. data/vendor/libgit2/src/xdiff/xhistogram.c +0 -1
  329. data/vendor/libgit2/src/xdiff/xinclude.h +3 -2
  330. data/vendor/libgit2/src/xdiff/xmacros.h +2 -2
  331. data/vendor/libgit2/src/xdiff/xmerge.c +80 -20
  332. data/vendor/libgit2/src/xdiff/xpatience.c +41 -9
  333. data/vendor/libgit2/src/xdiff/xprepare.c +2 -2
  334. data/vendor/libgit2/src/xdiff/xprepare.h +2 -2
  335. data/vendor/libgit2/src/xdiff/xtypes.h +2 -2
  336. data/vendor/libgit2/src/xdiff/xutils.c +47 -27
  337. data/vendor/libgit2/src/xdiff/xutils.h +2 -5
  338. data/vendor/libgit2/src/zstream.c +65 -45
  339. data/vendor/libgit2/src/zstream.h +9 -2
  340. metadata +27 -13
  341. data/vendor/libgit2/include/git2/sys/remote.h +0 -16
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * LibXDiff by Davide Libenzi ( File Differential Library )
3
- * Copyright (C) 2003-2009 Davide Libenzi, Johannes E. Schindelin
3
+ * Copyright (C) 2003-2016 Davide Libenzi, Johannes E. Schindelin
4
4
  *
5
5
  * This library is free software; you can redistribute it and/or
6
6
  * modify it under the terms of the GNU Lesser General Public
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -62,6 +62,12 @@ struct hashmap {
62
62
  * initially, "next" reflects only the order in file1.
63
63
  */
64
64
  struct entry *next, *previous;
65
+
66
+ /*
67
+ * If 1, this entry can serve as an anchor. See
68
+ * Documentation/diff-options.txt for more information.
69
+ */
70
+ unsigned anchor : 1;
65
71
  } *entries, *first, *last;
66
72
  /* were common records found? */
67
73
  unsigned long has_matches;
@@ -70,8 +76,19 @@ struct hashmap {
70
76
  xpparam_t const *xpp;
71
77
  };
72
78
 
79
+ static int is_anchor(xpparam_t const *xpp, const char *line)
80
+ {
81
+ unsigned long i;
82
+ for (i = 0; i < xpp->anchors_nr; i++) {
83
+ if (!strncmp(line, xpp->anchors[i], strlen(xpp->anchors[i])))
84
+ return 1;
85
+ }
86
+ return 0;
87
+ }
88
+
73
89
  /* The argument "pass" is 1 for the first file, 2 for the second. */
74
- static void insert_record(int line, struct hashmap *map, int pass)
90
+ static void insert_record(xpparam_t const *xpp, int line, struct hashmap *map,
91
+ int pass)
75
92
  {
76
93
  xrecord_t **records = pass == 1 ?
77
94
  map->env->xdf1.recs : map->env->xdf2.recs;
@@ -110,6 +127,7 @@ static void insert_record(int line, struct hashmap *map, int pass)
110
127
  return;
111
128
  map->entries[index].line1 = line;
112
129
  map->entries[index].hash = record->ha;
130
+ map->entries[index].anchor = is_anchor(xpp, map->env->xdf1.recs[line - 1]->ptr);
113
131
  if (!map->first)
114
132
  map->first = map->entries + index;
115
133
  if (map->last) {
@@ -147,11 +165,11 @@ static int fill_hashmap(mmfile_t *file1, mmfile_t *file2,
147
165
 
148
166
  /* First, fill with entries from the first file */
149
167
  while (count1--)
150
- insert_record(line1++, result, 1);
168
+ insert_record(xpp, line1++, result, 1);
151
169
 
152
170
  /* Then search for matches in the second file */
153
171
  while (count2--)
154
- insert_record(line2++, result, 2);
172
+ insert_record(xpp, line2++, result, 2);
155
173
 
156
174
  return 0;
157
175
  }
@@ -166,7 +184,7 @@ static int binary_search(struct entry **sequence, int longest,
166
184
  int left = -1, right = longest;
167
185
 
168
186
  while (left + 1 < right) {
169
- int middle = (left + right) / 2;
187
+ int middle = left + (right - left) / 2;
170
188
  /* by construction, no two entries can be equal */
171
189
  if (sequence[middle]->line2 > entry->line2)
172
190
  right = middle;
@@ -192,14 +210,28 @@ static struct entry *find_longest_common_sequence(struct hashmap *map)
192
210
  int longest = 0, i;
193
211
  struct entry *entry;
194
212
 
213
+ /*
214
+ * If not -1, this entry in sequence must never be overridden.
215
+ * Therefore, overriding entries before this has no effect, so
216
+ * do not do that either.
217
+ */
218
+ int anchor_i = -1;
219
+
195
220
  for (entry = map->first; entry; entry = entry->next) {
196
221
  if (!entry->line2 || entry->line2 == NON_UNIQUE)
197
222
  continue;
198
223
  i = binary_search(sequence, longest, entry);
199
224
  entry->previous = i < 0 ? NULL : sequence[i];
200
- sequence[++i] = entry;
201
- if (i == longest)
225
+ ++i;
226
+ if (i <= anchor_i)
227
+ continue;
228
+ sequence[i] = entry;
229
+ if (entry->anchor) {
230
+ anchor_i = i;
231
+ longest = anchor_i + 1;
232
+ } else if (i == longest) {
202
233
  longest++;
234
+ }
203
235
  }
204
236
 
205
237
  /* No common unique lines were found */
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -62,14 +62,14 @@ int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize,
62
62
 
63
63
  void *xdl_mmfile_first(mmfile_t *mmf, long *size)
64
64
  {
65
- *size = (long)mmf->size;
65
+ *size = mmf->size;
66
66
  return mmf->ptr;
67
67
  }
68
68
 
69
69
 
70
70
  long xdl_mmfile_size(mmfile_t *mmf)
71
71
  {
72
- return (long)mmf->size;
72
+ return mmf->size;
73
73
  }
74
74
 
75
75
 
@@ -154,6 +154,24 @@ int xdl_blankline(const char *line, long size, long flags)
154
154
  return (i == size);
155
155
  }
156
156
 
157
+ /*
158
+ * Have we eaten everything on the line, except for an optional
159
+ * CR at the very end?
160
+ */
161
+ static int ends_with_optional_cr(const char *l, long s, long i)
162
+ {
163
+ int complete = s && l[s-1] == '\n';
164
+
165
+ if (complete)
166
+ s--;
167
+ if (s == i)
168
+ return 1;
169
+ /* do not ignore CR at the end of an incomplete line */
170
+ if (complete && s == i + 1 && l[i] == '\r')
171
+ return 1;
172
+ return 0;
173
+ }
174
+
157
175
  int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
158
176
  {
159
177
  int i1, i2;
@@ -168,7 +186,8 @@ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
168
186
 
169
187
  /*
170
188
  * -w matches everything that matches with -b, and -b in turn
171
- * matches everything that matches with --ignore-space-at-eol.
189
+ * matches everything that matches with --ignore-space-at-eol,
190
+ * which in turn matches everything that matches with --ignore-cr-at-eol.
172
191
  *
173
192
  * Each flavor of ignoring needs different logic to skip whitespaces
174
193
  * while we have both sides to compare.
@@ -198,8 +217,18 @@ int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags)
198
217
  return 0;
199
218
  }
200
219
  } else if (flags & XDF_IGNORE_WHITESPACE_AT_EOL) {
201
- while (i1 < s1 && i2 < s2 && l1[i1++] == l2[i2++])
202
- ; /* keep going */
220
+ while (i1 < s1 && i2 < s2 && l1[i1] == l2[i2]) {
221
+ i1++;
222
+ i2++;
223
+ }
224
+ } else if (flags & XDF_IGNORE_CR_AT_EOL) {
225
+ /* Find the first difference and see how the line ends */
226
+ while (i1 < s1 && i2 < s2 && l1[i1] == l2[i2]) {
227
+ i1++;
228
+ i2++;
229
+ }
230
+ return (ends_with_optional_cr(l1, s1, i1) &&
231
+ ends_with_optional_cr(l2, s2, i2));
203
232
  }
204
233
 
205
234
  /*
@@ -226,9 +255,16 @@ static unsigned long xdl_hash_record_with_whitespace(char const **data,
226
255
  char const *top, long flags) {
227
256
  unsigned long ha = 5381;
228
257
  char const *ptr = *data;
258
+ int cr_at_eol_only = (flags & XDF_WHITESPACE_FLAGS) == XDF_IGNORE_CR_AT_EOL;
229
259
 
230
260
  for (; ptr < top && *ptr != '\n'; ptr++) {
231
- if (XDL_ISSPACE(*ptr)) {
261
+ if (cr_at_eol_only) {
262
+ /* do not ignore CR at the end of an incomplete line */
263
+ if (*ptr == '\r' &&
264
+ (ptr + 1 < top && ptr[1] == '\n'))
265
+ continue;
266
+ }
267
+ else if (XDL_ISSPACE(*ptr)) {
232
268
  const char *ptr2 = ptr;
233
269
  int at_eol;
234
270
  while (ptr + 1 < top && XDL_ISSPACE(ptr[1])
@@ -260,7 +296,6 @@ static unsigned long xdl_hash_record_with_whitespace(char const **data,
260
296
  return ha;
261
297
  }
262
298
 
263
-
264
299
  unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
265
300
  unsigned long ha = 5381;
266
301
  char const *ptr = *data;
@@ -277,7 +312,6 @@ unsigned long xdl_hash_record(char const **data, char const *top, long flags) {
277
312
  return ha;
278
313
  }
279
314
 
280
-
281
315
  unsigned int xdl_hashbits(unsigned int size) {
282
316
  unsigned int val = 1, bits = 0;
283
317
 
@@ -305,23 +339,9 @@ int xdl_num_out(char *out, long val) {
305
339
  *str++ = '0';
306
340
  *str = '\0';
307
341
 
308
- return (int)(str - out);
309
- }
310
-
311
-
312
- long xdl_atol(char const *str, char const **next) {
313
- long val, base;
314
- char const *top;
315
-
316
- for (top = str; XDL_ISDIGIT(*top); top++);
317
- if (next)
318
- *next = top;
319
- for (val = 0, base = 1, top--; top >= str; top--, base *= 10)
320
- val += base * (long)(*top - '0');
321
- return val;
342
+ return str - out;
322
343
  }
323
344
 
324
-
325
345
  int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
326
346
  const char *func, long funclen, xdemitcb_t *ecb) {
327
347
  int nb = 0;
@@ -356,8 +376,8 @@ int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
356
376
  nb += 3;
357
377
  if (func && funclen) {
358
378
  buf[nb++] = ' ';
359
- if (funclen > (long)sizeof(buf) - nb - 1)
360
- funclen = (long)sizeof(buf) - nb - 1;
379
+ if (funclen > (long)(sizeof(buf) - nb - 1))
380
+ funclen = sizeof(buf) - nb - 1;
361
381
  memcpy(buf + nb, func, funclen);
362
382
  nb += funclen;
363
383
  }
@@ -13,8 +13,8 @@
13
13
  * Lesser General Public License for more details.
14
14
  *
15
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
16
+ * License along with this library; if not, see
17
+ * <http://www.gnu.org/licenses/>.
18
18
  *
19
19
  * Davide Libenzi <davidel@xmailserver.org>
20
20
  *
@@ -31,15 +31,12 @@ int xdl_emit_diffrec(char const *rec, long size, char const *pre, long psize,
31
31
  int xdl_cha_init(chastore_t *cha, long isize, long icount);
32
32
  void xdl_cha_free(chastore_t *cha);
33
33
  void *xdl_cha_alloc(chastore_t *cha);
34
- void *xdl_cha_first(chastore_t *cha);
35
- void *xdl_cha_next(chastore_t *cha);
36
34
  long xdl_guess_lines(mmfile_t *mf, long sample);
37
35
  int xdl_blankline(const char *line, long size, long flags);
38
36
  int xdl_recmatch(const char *l1, long s1, const char *l2, long s2, long flags);
39
37
  unsigned long xdl_hash_record(char const **data, char const *top, long flags);
40
38
  unsigned int xdl_hashbits(unsigned int size);
41
39
  int xdl_num_out(char *out, long val);
42
- long xdl_atol(char const *str, char const **next);
43
40
  int xdl_emit_hunk_hdr(long s1, long c1, long s2, long c2,
44
41
  const char *func, long funclen, xdemitcb_t *ecb);
45
42
  int xdl_fall_back_diff(xdfenv_t *diff_env, xpparam_t const *xpp,
@@ -5,25 +5,31 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
 
8
+ #include "zstream.h"
9
+
8
10
  #include <zlib.h>
9
11
 
10
- #include "zstream.h"
11
12
  #include "buffer.h"
12
13
 
13
14
  #define ZSTREAM_BUFFER_SIZE (1024 * 1024)
14
15
  #define ZSTREAM_BUFFER_MIN_EXTRA 8
15
16
 
16
- static int zstream_seterr(git_zstream *zs)
17
+ GIT_INLINE(int) zstream_seterr(git_zstream *zs)
17
18
  {
18
- if (zs->zerr == Z_OK || zs->zerr == Z_STREAM_END)
19
+ switch (zs->zerr) {
20
+ case Z_OK:
21
+ case Z_STREAM_END:
22
+ case Z_BUF_ERROR: /* not fatal; we retry with a larger buffer */
19
23
  return 0;
20
-
21
- if (zs->zerr == Z_MEM_ERROR)
24
+ case Z_MEM_ERROR:
22
25
  giterr_set_oom();
23
- else if (zs->z.msg)
24
- giterr_set_str(GITERR_ZLIB, zs->z.msg);
25
- else
26
- giterr_set(GITERR_ZLIB, "unknown compression error");
26
+ break;
27
+ default:
28
+ if (zs->z.msg)
29
+ giterr_set_str(GITERR_ZLIB, zs->z.msg);
30
+ else
31
+ giterr_set(GITERR_ZLIB, "unknown compression error");
32
+ }
27
33
 
28
34
  return -1;
29
35
  }
@@ -81,9 +87,52 @@ size_t git_zstream_suggest_output_len(git_zstream *zstream)
81
87
  return ZSTREAM_BUFFER_MIN_EXTRA;
82
88
  }
83
89
 
90
+ int git_zstream_get_output_chunk(
91
+ void *out, size_t *out_len, git_zstream *zstream)
92
+ {
93
+ size_t in_queued, in_used, out_queued;
94
+
95
+ /* set up input data */
96
+ zstream->z.next_in = (Bytef *)zstream->in;
97
+
98
+ /* feed as much data to zlib as it can consume, at most UINT_MAX */
99
+ if (zstream->in_len > UINT_MAX) {
100
+ zstream->z.avail_in = UINT_MAX;
101
+ zstream->flush = Z_NO_FLUSH;
102
+ } else {
103
+ zstream->z.avail_in = (uInt)zstream->in_len;
104
+ zstream->flush = Z_FINISH;
105
+ }
106
+ in_queued = (size_t)zstream->z.avail_in;
107
+
108
+ /* set up output data */
109
+ zstream->z.next_out = out;
110
+ zstream->z.avail_out = (uInt)*out_len;
111
+
112
+ if ((size_t)zstream->z.avail_out != *out_len)
113
+ zstream->z.avail_out = UINT_MAX;
114
+ out_queued = (size_t)zstream->z.avail_out;
115
+
116
+ /* compress next chunk */
117
+ if (zstream->type == GIT_ZSTREAM_INFLATE)
118
+ zstream->zerr = inflate(&zstream->z, zstream->flush);
119
+ else
120
+ zstream->zerr = deflate(&zstream->z, zstream->flush);
121
+
122
+ if (zstream_seterr(zstream))
123
+ return -1;
124
+
125
+ in_used = (in_queued - zstream->z.avail_in);
126
+ zstream->in_len -= in_used;
127
+ zstream->in += in_used;
128
+
129
+ *out_len = (out_queued - zstream->z.avail_out);
130
+
131
+ return 0;
132
+ }
133
+
84
134
  int git_zstream_get_output(void *out, size_t *out_len, git_zstream *zstream)
85
135
  {
86
- int zflush = Z_FINISH;
87
136
  size_t out_remain = *out_len;
88
137
 
89
138
  if (zstream->in_len && zstream->zerr == Z_STREAM_END) {
@@ -92,46 +141,17 @@ int git_zstream_get_output(void *out, size_t *out_len, git_zstream *zstream)
92
141
  }
93
142
 
94
143
  while (out_remain > 0 && zstream->zerr != Z_STREAM_END) {
95
- size_t out_queued, in_queued, out_used, in_used;
96
-
97
- /* set up in data */
98
- zstream->z.next_in = (Bytef *)zstream->in;
99
- zstream->z.avail_in = (uInt)zstream->in_len;
100
- if ((size_t)zstream->z.avail_in != zstream->in_len) {
101
- zstream->z.avail_in = INT_MAX;
102
- zflush = Z_NO_FLUSH;
103
- } else {
104
- zflush = Z_FINISH;
105
- }
106
- in_queued = (size_t)zstream->z.avail_in;
107
-
108
- /* set up out data */
109
- zstream->z.next_out = out;
110
- zstream->z.avail_out = (uInt)out_remain;
111
- if ((size_t)zstream->z.avail_out != out_remain)
112
- zstream->z.avail_out = INT_MAX;
113
- out_queued = (size_t)zstream->z.avail_out;
114
-
115
- /* compress next chunk */
116
- if (zstream->type == GIT_ZSTREAM_INFLATE)
117
- zstream->zerr = inflate(&zstream->z, zflush);
118
- else
119
- zstream->zerr = deflate(&zstream->z, zflush);
120
-
121
- if (zstream->zerr == Z_STREAM_ERROR)
122
- return zstream_seterr(zstream);
144
+ size_t out_written = out_remain;
123
145
 
124
- out_used = (out_queued - zstream->z.avail_out);
125
- out_remain -= out_used;
126
- out = ((char *)out) + out_used;
146
+ if (git_zstream_get_output_chunk(out, &out_written, zstream) < 0)
147
+ return -1;
127
148
 
128
- in_used = (in_queued - zstream->z.avail_in);
129
- zstream->in_len -= in_used;
130
- zstream->in += in_used;
149
+ out_remain -= out_written;
150
+ out = ((char *)out) + out_written;
131
151
  }
132
152
 
133
153
  /* either we finished the input or we did not flush the data */
134
- assert(zstream->in_len > 0 || zflush == Z_FINISH);
154
+ assert(zstream->in_len > 0 || zstream->flush == Z_FINISH);
135
155
 
136
156
  /* set out_size to number of bytes actually written to output */
137
157
  *out_len = *out_len - out_remain;