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
@@ -7,22 +7,17 @@
7
7
  #ifndef INCLUDE_patch_parse_h__
8
8
  #define INCLUDE_patch_parse_h__
9
9
 
10
+ #include "common.h"
11
+
12
+ #include "parse.h"
13
+ #include "patch.h"
14
+
10
15
  typedef struct {
11
16
  git_refcount rc;
12
17
 
13
- /* Original content buffer */
14
- const char *content;
15
- size_t content_len;
16
-
17
18
  git_patch_options opts;
18
19
 
19
- /* The remaining (unparsed) buffer */
20
- const char *remain;
21
- size_t remain_len;
22
-
23
- const char *line;
24
- size_t line_len;
25
- size_t line_num;
20
+ git_parse_ctx parse_ctx;
26
21
  } git_patch_parse_ctx;
27
22
 
28
23
  extern git_patch_parse_ctx *git_patch_parse_ctx_init(
@@ -4,8 +4,9 @@
4
4
  * This file is part of libgit2, distributed under the GNU GPL v2 with
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
- #include "common.h"
7
+
8
8
  #include "path.h"
9
+
9
10
  #include "posix.h"
10
11
  #include "repository.h"
11
12
  #ifdef GIT_WIN32
@@ -1560,31 +1561,18 @@ static int32_t next_hfs_char(const char **in, size_t *len)
1560
1561
  return 0; /* NULL byte -- end of string */
1561
1562
  }
1562
1563
 
1563
- static bool verify_dotgit_hfs_generic(const char *path, size_t len, const char *needle, size_t needle_len)
1564
+ static bool verify_dotgit_hfs(const char *path, size_t len)
1564
1565
  {
1565
- size_t i;
1566
- char c;
1567
-
1568
- if (next_hfs_char(&path, &len) != '.')
1569
- return true;
1570
-
1571
- for (i = 0; i < needle_len; i++) {
1572
- c = next_hfs_char(&path, &len);
1573
- if (c != needle[i])
1574
- return true;
1575
- }
1576
-
1577
- if (next_hfs_char(&path, &len) != '\0')
1566
+ if (next_hfs_char(&path, &len) != '.' ||
1567
+ next_hfs_char(&path, &len) != 'g' ||
1568
+ next_hfs_char(&path, &len) != 'i' ||
1569
+ next_hfs_char(&path, &len) != 't' ||
1570
+ next_hfs_char(&path, &len) != 0)
1578
1571
  return true;
1579
1572
 
1580
1573
  return false;
1581
1574
  }
1582
1575
 
1583
- static bool verify_dotgit_hfs(const char *path, size_t len)
1584
- {
1585
- return verify_dotgit_hfs_generic(path, len, "git", CONST_STRLEN("git"));
1586
- }
1587
-
1588
1576
  GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size_t len)
1589
1577
  {
1590
1578
  git_buf *reserved = git_repository__reserved_names_win32;
@@ -1620,57 +1608,6 @@ GIT_INLINE(bool) verify_dotgit_ntfs(git_repository *repo, const char *path, size
1620
1608
  return false;
1621
1609
  }
1622
1610
 
1623
- GIT_INLINE(bool) only_spaces_and_dots(const char *path)
1624
- {
1625
- const char *c = path;
1626
-
1627
- for (;; c++) {
1628
- if (*c == '\0')
1629
- return true;
1630
- if (*c != ' ' && *c != '.')
1631
- return false;
1632
- }
1633
-
1634
- return true;
1635
- }
1636
-
1637
- GIT_INLINE(bool) verify_dotgit_ntfs_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
1638
- {
1639
- int i, saw_tilde;
1640
-
1641
- if (name[0] == '.' && len >= dotgit_len &&
1642
- !strncasecmp(name + 1, dotgit_name, dotgit_len)) {
1643
- return !only_spaces_and_dots(name + dotgit_len + 1);
1644
- }
1645
-
1646
- /* Detect the basic NTFS shortname with the first six chars */
1647
- if (!strncasecmp(name, dotgit_name, 6) && name[6] == '~' &&
1648
- name[7] >= '1' && name[7] <= '4')
1649
- return !only_spaces_and_dots(name + 8);
1650
-
1651
- /* Catch fallback names */
1652
- for (i = 0, saw_tilde = 0; i < 8; i++) {
1653
- if (name[i] == '\0') {
1654
- return true;
1655
- } else if (saw_tilde) {
1656
- if (name[i] < '0' || name[i] > '9')
1657
- return true;
1658
- } else if (name[i] == '~') {
1659
- if (name[i+1] < '1' || name[i+1] > '9')
1660
- return true;
1661
- saw_tilde = 1;
1662
- } else if (i >= 6) {
1663
- return true;
1664
- } else if (name[i] < 0) {
1665
- return true;
1666
- } else if (git__tolower(name[i]) != shortname_pfix[i]) {
1667
- return true;
1668
- }
1669
- }
1670
-
1671
- return !only_spaces_and_dots(name + i);
1672
- }
1673
-
1674
1611
  GIT_INLINE(bool) verify_char(unsigned char c, unsigned int flags)
1675
1612
  {
1676
1613
  if ((flags & GIT_PATH_REJECT_BACKSLASH) && c == '\\')
@@ -1698,24 +1635,6 @@ GIT_INLINE(bool) verify_char(unsigned char c, unsigned int flags)
1698
1635
  return true;
1699
1636
  }
1700
1637
 
1701
- /*
1702
- * Return the length of the common prefix between str and prefix, comparing them
1703
- * case-insensitively (must be ASCII to match).
1704
- */
1705
- GIT_INLINE(size_t) common_prefix_icase(const char *str, size_t len, const char *prefix)
1706
- {
1707
- size_t count = 0;
1708
-
1709
- while (len >0 && tolower(*str) == tolower(*prefix)) {
1710
- count++;
1711
- str++;
1712
- prefix++;
1713
- len--;
1714
- }
1715
-
1716
- return count;
1717
- }
1718
-
1719
1638
  /*
1720
1639
  * We fundamentally don't like some paths when dealing with user-inputted
1721
1640
  * strings (in checkout or ref names): we don't want dot or dot-dot
@@ -1729,7 +1648,6 @@ static bool verify_component(
1729
1648
  git_repository *repo,
1730
1649
  const char *component,
1731
1650
  size_t len,
1732
- uint16_t mode,
1733
1651
  unsigned int flags)
1734
1652
  {
1735
1653
  if (len == 0)
@@ -1762,38 +1680,26 @@ static bool verify_component(
1762
1680
  return false;
1763
1681
  }
1764
1682
 
1765
- if (flags & GIT_PATH_REJECT_DOT_GIT_HFS) {
1766
- if (!verify_dotgit_hfs(component, len))
1767
- return false;
1768
- if (S_ISLNK(mode) && git_path_is_hfs_dotgit_modules(component, len))
1769
- return false;
1770
- }
1683
+ if (flags & GIT_PATH_REJECT_DOT_GIT_HFS &&
1684
+ !verify_dotgit_hfs(component, len))
1685
+ return false;
1771
1686
 
1772
- if (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) {
1773
- if (!verify_dotgit_ntfs(repo, component, len))
1774
- return false;
1775
- if (S_ISLNK(mode) && git_path_is_ntfs_dotgit_modules(component, len))
1776
- return false;
1777
- }
1687
+ if (flags & GIT_PATH_REJECT_DOT_GIT_NTFS &&
1688
+ !verify_dotgit_ntfs(repo, component, len))
1689
+ return false;
1778
1690
 
1779
1691
  /* don't bother rerunning the `.git` test if we ran the HFS or NTFS
1780
1692
  * specific tests, they would have already rejected `.git`.
1781
1693
  */
1782
1694
  if ((flags & GIT_PATH_REJECT_DOT_GIT_HFS) == 0 &&
1783
- (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) == 0 &&
1784
- (flags & GIT_PATH_REJECT_DOT_GIT_LITERAL)) {
1785
- if (len >= 4 &&
1786
- component[0] == '.' &&
1787
- (component[1] == 'g' || component[1] == 'G') &&
1788
- (component[2] == 'i' || component[2] == 'I') &&
1789
- (component[3] == 't' || component[3] == 'T')) {
1790
- if (len == 4)
1791
- return false;
1792
-
1793
- if (S_ISLNK(mode) && common_prefix_icase(component, len, ".gitmodules") == len)
1794
- return false;
1795
- }
1796
- }
1695
+ (flags & GIT_PATH_REJECT_DOT_GIT_NTFS) == 0 &&
1696
+ (flags & GIT_PATH_REJECT_DOT_GIT_LITERAL) &&
1697
+ len == 4 &&
1698
+ component[0] == '.' &&
1699
+ (component[1] == 'g' || component[1] == 'G') &&
1700
+ (component[2] == 'i' || component[2] == 'I') &&
1701
+ (component[3] == 't' || component[3] == 'T'))
1702
+ return false;
1797
1703
 
1798
1704
  return true;
1799
1705
  }
@@ -1831,7 +1737,6 @@ GIT_INLINE(unsigned int) dotgit_flags(
1831
1737
  bool git_path_isvalid(
1832
1738
  git_repository *repo,
1833
1739
  const char *path,
1834
- uint16_t mode,
1835
1740
  unsigned int flags)
1836
1741
  {
1837
1742
  const char *start, *c;
@@ -1845,14 +1750,14 @@ bool git_path_isvalid(
1845
1750
  return false;
1846
1751
 
1847
1752
  if (*c == '/') {
1848
- if (!verify_component(repo, start, (c - start), mode, flags))
1753
+ if (!verify_component(repo, start, (c - start), flags))
1849
1754
  return false;
1850
1755
 
1851
1756
  start = c+1;
1852
1757
  }
1853
1758
  }
1854
1759
 
1855
- return verify_component(repo, start, (c - start), mode, flags);
1760
+ return verify_component(repo, start, (c - start), flags);
1856
1761
  }
1857
1762
 
1858
1763
  int git_path_normalize_slashes(git_buf *out, const char *path)
@@ -1870,65 +1775,3 @@ int git_path_normalize_slashes(git_buf *out, const char *path)
1870
1775
 
1871
1776
  return 0;
1872
1777
  }
1873
-
1874
- static int verify_dotgit_generic(const char *name, size_t len, const char *dotgit_name, size_t dotgit_len, const char *shortname_pfix)
1875
- {
1876
- if (!verify_dotgit_ntfs_generic(name, len, dotgit_name, dotgit_len, shortname_pfix))
1877
- return false;
1878
-
1879
- return verify_dotgit_hfs_generic(name, len, dotgit_name, dotgit_len);
1880
- }
1881
-
1882
- int git_path_is_ntfs_dotgit_modules(const char *name, size_t len)
1883
- {
1884
- return !verify_dotgit_ntfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"), "gi7eba");
1885
- }
1886
-
1887
- int git_path_is_hfs_dotgit_modules(const char *name, size_t len)
1888
- {
1889
- return !verify_dotgit_hfs_generic(name, len, "gitmodules", CONST_STRLEN("gitmodules"));
1890
- }
1891
-
1892
- int git_path_is_dotgit_modules(const char *name, size_t len)
1893
- {
1894
- if (git_path_is_hfs_dotgit_modules(name, len))
1895
- return 1;
1896
-
1897
- return git_path_is_ntfs_dotgit_modules(name, len);
1898
- }
1899
-
1900
- int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len)
1901
- {
1902
- return !verify_dotgit_ntfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"), "gi250a");
1903
- }
1904
-
1905
- int git_path_is_hfs_dotgit_ignore(const char *name, size_t len)
1906
- {
1907
- return !verify_dotgit_hfs_generic(name, len, "gitignore", CONST_STRLEN("gitignore"));
1908
- }
1909
-
1910
- int git_path_is_dotgit_ignore(const char *name, size_t len)
1911
- {
1912
- if (git_path_is_hfs_dotgit_ignore(name, len))
1913
- return 1;
1914
-
1915
- return git_path_is_ntfs_dotgit_ignore(name, len);
1916
- }
1917
-
1918
- int git_path_is_hfs_dotgit_attributes(const char *name, size_t len)
1919
- {
1920
- return !verify_dotgit_hfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"));
1921
- }
1922
-
1923
- int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len)
1924
- {
1925
- return !verify_dotgit_ntfs_generic(name, len, "gitattributes", CONST_STRLEN("gitattributes"), "gi7d29");
1926
- }
1927
-
1928
- int git_path_is_dotgit_attributes(const char *name, size_t len)
1929
- {
1930
- if (git_path_is_hfs_dotgit_attributes(name, len))
1931
- return 1;
1932
-
1933
- return git_path_is_ntfs_dotgit_attributes(name, len);
1934
- }
@@ -8,6 +8,7 @@
8
8
  #define INCLUDE_path_h__
9
9
 
10
10
  #include "common.h"
11
+
11
12
  #include "posix.h"
12
13
  #include "buffer.h"
13
14
  #include "vector.h"
@@ -104,6 +105,12 @@ GIT_INLINE(int) git_path_is_dot_or_dotdotW(const wchar_t *name)
104
105
  (name[1] == L'.' && name[2] == L'\0')));
105
106
  }
106
107
 
108
+ #define git_path_is_absolute(p) \
109
+ (git__isalpha((p)[0]) && (p)[1] == ':' && ((p)[2] == '\\' || (p)[2] == '/'))
110
+
111
+ #define git_path_is_dirsep(p) \
112
+ ((p) == '/' || (p) == '\\')
113
+
107
114
  /**
108
115
  * Convert backslashes in path to forward slashes.
109
116
  */
@@ -118,6 +125,13 @@ GIT_INLINE(void) git_path_mkposix(char *path)
118
125
  }
119
126
  #else
120
127
  # define git_path_mkposix(p) /* blank */
128
+
129
+ #define git_path_is_absolute(p) \
130
+ ((p)[0] == '/')
131
+
132
+ #define git_path_is_dirsep(p) \
133
+ ((p) == '/')
134
+
121
135
  #endif
122
136
 
123
137
  /**
@@ -623,7 +637,6 @@ extern int git_path_from_url_or_path(git_buf *local_path_out, const char *url_or
623
637
  extern bool git_path_isvalid(
624
638
  git_repository *repo,
625
639
  const char *path,
626
- uint16_t mode,
627
640
  unsigned int flags);
628
641
 
629
642
  /**
@@ -631,76 +644,4 @@ extern bool git_path_isvalid(
631
644
  */
632
645
  int git_path_normalize_slashes(git_buf *out, const char *path);
633
646
 
634
- /**
635
- * Check whether a path component corresponds to a .gitmodules file
636
- *
637
- * @param name the path component to check
638
- * @param len the length of `name`
639
- */
640
- extern int git_path_is_dotgit_modules(const char *name, size_t len);
641
-
642
- /**
643
- * Check whether a path component corresponds to a .gitmodules file in NTFS
644
- *
645
- * @param name the path component to check
646
- * @param len the length of `name`
647
- */
648
- extern int git_path_is_ntfs_dotgit_modules(const char *name, size_t len);
649
-
650
- /**
651
- * Check whether a path component corresponds to a .gitmodules file in HFS+
652
- *
653
- * @param name the path component to check
654
- * @param len the length of `name`
655
- */
656
- extern int git_path_is_hfs_dotgit_modules(const char *name, size_t len);
657
-
658
- /**
659
- * Check whether a path component corresponds to a .gitignore file
660
- *
661
- * @param name the path component to check
662
- * @param len the length of `name`
663
- */
664
- extern int git_path_is_dotgit_ignore(const char *name, size_t len);
665
-
666
- /**
667
- * Check whether a path component corresponds to a .gitignore file in NTFS
668
- *
669
- * @param name the path component to check
670
- * @param len the length of `name`
671
- */
672
- extern int git_path_is_ntfs_dotgit_ignore(const char *name, size_t len);
673
-
674
- /**
675
- * Check whether a path component corresponds to a .gitignore file in HFS+
676
- *
677
- * @param name the path component to check
678
- * @param len the length of `name`
679
- */
680
- extern int git_path_is_hfs_dotgit_ignore(const char *name, size_t len);
681
-
682
- /**
683
- * Check whether a path component corresponds to a .gitignore file
684
- *
685
- * @param name the path component to check
686
- * @param len the length of `name`
687
- */
688
- extern int git_path_is_dotgit_attributes(const char *name, size_t len);
689
-
690
- /**
691
- * Check whether a path component corresponds to a .gitattributes file in NTFS
692
- *
693
- * @param name the path component to check
694
- * @param len the length of `name`
695
- */
696
- extern int git_path_is_ntfs_dotgit_attributes(const char *name, size_t len);
697
-
698
- /**
699
- * Check whether a path component corresponds to a .gitattributes file in HFS+
700
- *
701
- * @param name the path component to check
702
- * @param len the length of `name`
703
- */
704
- extern int git_path_is_hfs_dotgit_attributes(const char *name, size_t len);
705
-
706
647
  #endif
@@ -5,9 +5,10 @@
5
5
  * a Linking Exception. For full terms see the included COPYING file.
6
6
  */
7
7
 
8
+ #include "pathspec.h"
9
+
8
10
  #include "git2/pathspec.h"
9
11
  #include "git2/diff.h"
10
- #include "pathspec.h"
11
12
  #include "buf_text.h"
12
13
  #include "attr_file.h"
13
14
  #include "iterator.h"
@@ -8,7 +8,8 @@
8
8
  #define INCLUDE_pathspec_h__
9
9
 
10
10
  #include "common.h"
11
- #include <git2/pathspec.h>
11
+
12
+ #include "git2/pathspec.h"
12
13
  #include "buffer.h"
13
14
  #include "vector.h"
14
15
  #include "pool.h"