rugged 1.3.2 → 1.6.2

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 (547) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +34 -2
  3. data/ext/rugged/extconf.rb +7 -4
  4. data/ext/rugged/rugged.c +16 -0
  5. data/ext/rugged/rugged.h +4 -0
  6. data/ext/rugged/rugged_blame.c +2 -0
  7. data/ext/rugged/rugged_blob.c +3 -0
  8. data/ext/rugged/rugged_commit.c +1 -0
  9. data/ext/rugged/rugged_config.c +9 -2
  10. data/ext/rugged/rugged_diff.c +1 -0
  11. data/ext/rugged/rugged_index.c +2 -0
  12. data/ext/rugged/rugged_patch.c +1 -0
  13. data/ext/rugged/rugged_rebase.c +1 -0
  14. data/ext/rugged/rugged_reference.c +1 -0
  15. data/ext/rugged/rugged_remote.c +28 -10
  16. data/ext/rugged/rugged_repo.c +7 -9
  17. data/ext/rugged/rugged_revwalk.c +5 -1
  18. data/ext/rugged/rugged_settings.c +5 -0
  19. data/ext/rugged/rugged_submodule.c +1 -0
  20. data/ext/rugged/rugged_tag.c +1 -0
  21. data/ext/rugged/rugged_tree.c +4 -0
  22. data/lib/rugged/index.rb +1 -1
  23. data/lib/rugged/tree.rb +5 -1
  24. data/lib/rugged/version.rb +1 -1
  25. data/vendor/libgit2/CMakeLists.txt +132 -288
  26. data/vendor/libgit2/COPYING +106 -19
  27. data/vendor/libgit2/cmake/AddCFlagIfSupported.cmake +21 -21
  28. data/vendor/libgit2/cmake/AddClarTest.cmake +7 -0
  29. data/vendor/libgit2/cmake/DefaultCFlags.cmake +154 -0
  30. data/vendor/libgit2/cmake/EnableWarnings.cmake +13 -13
  31. data/vendor/libgit2/cmake/ExperimentalFeatures.cmake +23 -0
  32. data/vendor/libgit2/cmake/FindCoreFoundation.cmake +13 -13
  33. data/vendor/libgit2/cmake/FindGSSAPI.cmake +171 -287
  34. data/vendor/libgit2/cmake/FindGSSFramework.cmake +13 -13
  35. data/vendor/libgit2/cmake/{FindHTTP_Parser.cmake → FindHTTPParser.cmake} +17 -17
  36. data/vendor/libgit2/cmake/FindIconv.cmake +27 -27
  37. data/vendor/libgit2/cmake/FindLibSSH2.cmake +5 -5
  38. data/vendor/libgit2/cmake/FindPCRE.cmake +12 -13
  39. data/vendor/libgit2/cmake/FindPCRE2.cmake +12 -12
  40. data/vendor/libgit2/cmake/FindPkgLibraries.cmake +19 -19
  41. data/vendor/libgit2/cmake/FindSecurity.cmake +14 -14
  42. data/vendor/libgit2/cmake/FindStatNsec.cmake +12 -18
  43. data/vendor/libgit2/cmake/Findfutimens.cmake +8 -8
  44. data/vendor/libgit2/cmake/FindmbedTLS.cmake +63 -70
  45. data/vendor/libgit2/cmake/IdeSplitSources.cmake +18 -18
  46. data/vendor/libgit2/cmake/PkgBuildConfig.cmake +60 -60
  47. data/vendor/libgit2/cmake/SanitizeBool.cmake +20 -20
  48. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +37 -37
  49. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +19 -0
  50. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +100 -100
  51. data/vendor/libgit2/cmake/SelectHashes.cmake +91 -53
  52. data/vendor/libgit2/cmake/SelectRegex.cmake +51 -0
  53. data/vendor/libgit2/cmake/SelectSSH.cmake +41 -0
  54. data/vendor/libgit2/cmake/SelectWinHTTP.cmake +17 -0
  55. data/vendor/libgit2/cmake/SelectZlib.cmake +34 -0
  56. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +6 -6
  57. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +33 -31
  58. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +3 -1
  59. data/vendor/libgit2/deps/ntlmclient/ntlm.c +4 -4
  60. data/vendor/libgit2/deps/ntlmclient/ntlm.h +4 -4
  61. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +2 -2
  62. data/vendor/libgit2/deps/pcre/CMakeLists.txt +88 -88
  63. data/vendor/libgit2/deps/winhttp/CMakeLists.txt +14 -16
  64. data/vendor/libgit2/deps/zlib/adler32.c +7 -0
  65. data/vendor/libgit2/deps/zlib/crc32.c +975 -288
  66. data/vendor/libgit2/deps/zlib/crc32.h +9441 -436
  67. data/vendor/libgit2/deps/zlib/deflate.c +83 -31
  68. data/vendor/libgit2/deps/zlib/deflate.h +12 -15
  69. data/vendor/libgit2/deps/zlib/gzguts.h +3 -2
  70. data/vendor/libgit2/deps/zlib/infback.c +2 -1
  71. data/vendor/libgit2/deps/zlib/inffast.c +14 -14
  72. data/vendor/libgit2/deps/zlib/inflate.c +39 -8
  73. data/vendor/libgit2/deps/zlib/inflate.h +3 -2
  74. data/vendor/libgit2/deps/zlib/inftrees.c +3 -3
  75. data/vendor/libgit2/deps/zlib/trees.c +27 -48
  76. data/vendor/libgit2/deps/zlib/zlib.h +126 -100
  77. data/vendor/libgit2/deps/zlib/zutil.c +2 -2
  78. data/vendor/libgit2/deps/zlib/zutil.h +12 -9
  79. data/vendor/libgit2/include/git2/apply.h +16 -2
  80. data/vendor/libgit2/include/git2/attr.h +11 -2
  81. data/vendor/libgit2/include/git2/blame.h +4 -1
  82. data/vendor/libgit2/include/git2/blob.h +14 -1
  83. data/vendor/libgit2/include/git2/branch.h +4 -2
  84. data/vendor/libgit2/include/git2/buffer.h +18 -78
  85. data/vendor/libgit2/include/git2/cert.h +2 -2
  86. data/vendor/libgit2/include/git2/checkout.h +5 -2
  87. data/vendor/libgit2/include/git2/clone.h +3 -3
  88. data/vendor/libgit2/include/git2/commit.h +2 -0
  89. data/vendor/libgit2/include/git2/common.h +28 -7
  90. data/vendor/libgit2/include/git2/config.h +25 -9
  91. data/vendor/libgit2/include/git2/credential.h +2 -1
  92. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  93. data/vendor/libgit2/include/git2/deprecated.h +9 -1
  94. data/vendor/libgit2/include/git2/describe.h +7 -2
  95. data/vendor/libgit2/include/git2/diff.h +18 -10
  96. data/vendor/libgit2/include/git2/email.h +1 -1
  97. data/vendor/libgit2/include/git2/errors.h +17 -3
  98. data/vendor/libgit2/include/git2/experimental.h +20 -0
  99. data/vendor/libgit2/include/git2/filter.h +7 -2
  100. data/vendor/libgit2/include/git2/graph.h +1 -0
  101. data/vendor/libgit2/include/git2/ignore.h +1 -1
  102. data/vendor/libgit2/include/git2/index.h +11 -5
  103. data/vendor/libgit2/include/git2/indexer.h +48 -0
  104. data/vendor/libgit2/include/git2/merge.h +24 -4
  105. data/vendor/libgit2/include/git2/message.h +2 -0
  106. data/vendor/libgit2/include/git2/object.h +49 -0
  107. data/vendor/libgit2/include/git2/odb.h +94 -13
  108. data/vendor/libgit2/include/git2/odb_backend.h +107 -19
  109. data/vendor/libgit2/include/git2/oid.h +115 -15
  110. data/vendor/libgit2/include/git2/pack.h +24 -8
  111. data/vendor/libgit2/include/git2/patch.h +8 -0
  112. data/vendor/libgit2/include/git2/pathspec.h +1 -1
  113. data/vendor/libgit2/include/git2/proxy.h +1 -1
  114. data/vendor/libgit2/include/git2/rebase.h +9 -1
  115. data/vendor/libgit2/include/git2/refdb.h +3 -0
  116. data/vendor/libgit2/include/git2/reflog.h +1 -1
  117. data/vendor/libgit2/include/git2/refs.h +2 -2
  118. data/vendor/libgit2/include/git2/remote.h +184 -37
  119. data/vendor/libgit2/include/git2/repository.h +34 -10
  120. data/vendor/libgit2/include/git2/reset.h +2 -2
  121. data/vendor/libgit2/include/git2/revparse.h +1 -1
  122. data/vendor/libgit2/include/git2/revwalk.h +4 -1
  123. data/vendor/libgit2/include/git2/signature.h +1 -1
  124. data/vendor/libgit2/include/git2/stash.h +61 -7
  125. data/vendor/libgit2/include/git2/status.h +14 -5
  126. data/vendor/libgit2/include/git2/strarray.h +0 -13
  127. data/vendor/libgit2/include/git2/submodule.h +7 -2
  128. data/vendor/libgit2/include/git2/sys/commit_graph.h +1 -1
  129. data/vendor/libgit2/include/git2/sys/odb_backend.h +3 -6
  130. data/vendor/libgit2/include/git2/sys/remote.h +46 -0
  131. data/vendor/libgit2/include/git2/sys/stream.h +1 -1
  132. data/vendor/libgit2/include/git2/sys/transport.h +46 -39
  133. data/vendor/libgit2/include/git2/tag.h +1 -0
  134. data/vendor/libgit2/include/git2/tree.h +4 -3
  135. data/vendor/libgit2/include/git2/types.h +7 -7
  136. data/vendor/libgit2/include/git2/version.h +27 -6
  137. data/vendor/libgit2/include/git2/worktree.h +12 -2
  138. data/vendor/libgit2/include/git2.h +1 -0
  139. data/vendor/libgit2/src/CMakeLists.txt +177 -419
  140. data/vendor/libgit2/src/README.md +12 -0
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +57 -0
  142. data/vendor/libgit2/src/cli/README.md +26 -0
  143. data/vendor/libgit2/src/cli/cli.h +20 -0
  144. data/vendor/libgit2/src/cli/cmd.c +21 -0
  145. data/vendor/libgit2/src/cli/cmd.h +33 -0
  146. data/vendor/libgit2/src/cli/cmd_cat_file.c +204 -0
  147. data/vendor/libgit2/src/cli/cmd_clone.c +176 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +154 -0
  149. data/vendor/libgit2/src/cli/cmd_help.c +86 -0
  150. data/vendor/libgit2/src/cli/error.h +51 -0
  151. data/vendor/libgit2/src/cli/main.c +106 -0
  152. data/vendor/libgit2/src/cli/opt.c +669 -0
  153. data/vendor/libgit2/src/cli/opt.h +349 -0
  154. data/vendor/libgit2/src/cli/opt_usage.c +194 -0
  155. data/vendor/libgit2/src/cli/opt_usage.h +35 -0
  156. data/vendor/libgit2/src/cli/progress.c +345 -0
  157. data/vendor/libgit2/src/cli/progress.h +117 -0
  158. data/vendor/libgit2/src/cli/sighandler.h +20 -0
  159. data/vendor/libgit2/src/cli/unix/sighandler.c +36 -0
  160. data/vendor/libgit2/src/cli/win32/precompiled.h +3 -0
  161. data/vendor/libgit2/src/cli/win32/sighandler.c +37 -0
  162. data/vendor/libgit2/src/libgit2/CMakeLists.txt +141 -0
  163. data/vendor/libgit2/src/{annotated_commit.c → libgit2/annotated_commit.c} +1 -1
  164. data/vendor/libgit2/src/{annotated_commit.h → libgit2/annotated_commit.h} +2 -2
  165. data/vendor/libgit2/src/{apply.c → libgit2/apply.c} +18 -18
  166. data/vendor/libgit2/src/{apply.h → libgit2/apply.h} +2 -2
  167. data/vendor/libgit2/src/{attr.c → libgit2/attr.c} +18 -18
  168. data/vendor/libgit2/src/{attr_file.c → libgit2/attr_file.c} +18 -18
  169. data/vendor/libgit2/src/{attr_file.h → libgit2/attr_file.h} +4 -4
  170. data/vendor/libgit2/src/{attrcache.c → libgit2/attrcache.c} +18 -13
  171. data/vendor/libgit2/src/{blame.c → libgit2/blame.c} +2 -0
  172. data/vendor/libgit2/src/{blame_git.c → libgit2/blame_git.c} +1 -1
  173. data/vendor/libgit2/src/{blob.c → libgit2/blob.c} +38 -29
  174. data/vendor/libgit2/src/{blob.h → libgit2/blob.h} +3 -3
  175. data/vendor/libgit2/src/{branch.c → libgit2/branch.c} +164 -118
  176. data/vendor/libgit2/src/{branch.h → libgit2/branch.h} +15 -3
  177. data/vendor/libgit2/src/libgit2/buf.c +126 -0
  178. data/vendor/libgit2/src/libgit2/buf.h +50 -0
  179. data/vendor/libgit2/src/{checkout.c → libgit2/checkout.c} +74 -68
  180. data/vendor/libgit2/src/{cherrypick.c → libgit2/cherrypick.c} +13 -13
  181. data/vendor/libgit2/src/{clone.c → libgit2/clone.c} +96 -67
  182. data/vendor/libgit2/src/{commit.c → libgit2/commit.c} +178 -73
  183. data/vendor/libgit2/src/libgit2/commit.h +87 -0
  184. data/vendor/libgit2/src/{commit_graph.c → libgit2/commit_graph.c} +122 -89
  185. data/vendor/libgit2/src/{commit_graph.h → libgit2/commit_graph.h} +14 -4
  186. data/vendor/libgit2/src/{commit_list.c → libgit2/commit_list.c} +7 -4
  187. data/vendor/libgit2/src/libgit2/common.h +55 -0
  188. data/vendor/libgit2/src/{config.c → libgit2/config.c} +101 -69
  189. data/vendor/libgit2/src/{config.h → libgit2/config.h} +15 -2
  190. data/vendor/libgit2/src/{config_file.c → libgit2/config_file.c} +105 -93
  191. data/vendor/libgit2/src/{config_mem.c → libgit2/config_mem.c} +9 -9
  192. data/vendor/libgit2/src/{config_parse.c → libgit2/config_parse.c} +27 -23
  193. data/vendor/libgit2/src/{crlf.c → libgit2/crlf.c} +24 -21
  194. data/vendor/libgit2/src/{describe.c → libgit2/describe.c} +35 -27
  195. data/vendor/libgit2/src/{diff.c → libgit2/diff.c} +30 -9
  196. data/vendor/libgit2/src/{diff.h → libgit2/diff.h} +2 -4
  197. data/vendor/libgit2/src/{diff_driver.c → libgit2/diff_driver.c} +34 -36
  198. data/vendor/libgit2/src/{diff_driver.h → libgit2/diff_driver.h} +3 -3
  199. data/vendor/libgit2/src/{diff_file.c → libgit2/diff_file.c} +44 -26
  200. data/vendor/libgit2/src/{diff_generate.c → libgit2/diff_generate.c} +47 -18
  201. data/vendor/libgit2/src/{diff_generate.h → libgit2/diff_generate.h} +5 -3
  202. data/vendor/libgit2/src/{diff_print.c → libgit2/diff_print.c} +112 -100
  203. data/vendor/libgit2/src/{diff_stats.c → libgit2/diff_stats.c} +40 -29
  204. data/vendor/libgit2/src/libgit2/diff_stats.h +18 -0
  205. data/vendor/libgit2/src/{diff_tform.c → libgit2/diff_tform.c} +13 -8
  206. data/vendor/libgit2/src/{diff_xdiff.c → libgit2/diff_xdiff.c} +4 -8
  207. data/vendor/libgit2/src/{email.c → libgit2/email.c} +55 -39
  208. data/vendor/libgit2/src/{email.h → libgit2/email.h} +1 -1
  209. data/vendor/libgit2/src/{errors.c → libgit2/errors.c} +18 -18
  210. data/vendor/libgit2/src/{errors.h → libgit2/errors.h} +1 -2
  211. data/vendor/libgit2/src/libgit2/experimental.h.in +13 -0
  212. data/vendor/libgit2/src/{fetch.c → libgit2/fetch.c} +72 -27
  213. data/vendor/libgit2/src/{fetch.h → libgit2/fetch.h} +1 -1
  214. data/vendor/libgit2/src/{fetchhead.c → libgit2/fetchhead.c} +23 -23
  215. data/vendor/libgit2/src/{filter.c → libgit2/filter.c} +127 -53
  216. data/vendor/libgit2/src/{filter.h → libgit2/filter.h} +26 -5
  217. data/vendor/libgit2/src/{ident.c → libgit2/ident.c} +20 -20
  218. data/vendor/libgit2/src/{ignore.c → libgit2/ignore.c} +35 -34
  219. data/vendor/libgit2/src/{ignore.h → libgit2/ignore.h} +2 -2
  220. data/vendor/libgit2/src/{index.c → libgit2/index.c} +91 -90
  221. data/vendor/libgit2/src/{index.h → libgit2/index.h} +6 -3
  222. data/vendor/libgit2/src/{indexer.c → libgit2/indexer.c} +173 -92
  223. data/vendor/libgit2/src/{iterator.c → libgit2/iterator.c} +71 -61
  224. data/vendor/libgit2/src/{iterator.h → libgit2/iterator.h} +5 -5
  225. data/vendor/libgit2/src/{libgit2.c → libgit2/libgit2.c} +46 -11
  226. data/vendor/libgit2/src/{mailmap.c → libgit2/mailmap.c} +38 -36
  227. data/vendor/libgit2/src/{merge.c → libgit2/merge.c} +30 -30
  228. data/vendor/libgit2/src/{merge.h → libgit2/merge.h} +1 -14
  229. data/vendor/libgit2/src/{merge_driver.c → libgit2/merge_driver.c} +2 -2
  230. data/vendor/libgit2/src/{merge_file.c → libgit2/merge_file.c} +13 -3
  231. data/vendor/libgit2/src/{message.c → libgit2/message.c} +21 -10
  232. data/vendor/libgit2/src/{midx.c → libgit2/midx.c} +112 -92
  233. data/vendor/libgit2/src/{midx.h → libgit2/midx.h} +5 -4
  234. data/vendor/libgit2/src/{mwindow.c → libgit2/mwindow.c} +15 -12
  235. data/vendor/libgit2/src/{mwindow.h → libgit2/mwindow.h} +5 -2
  236. data/vendor/libgit2/src/{netops.c → libgit2/netops.c} +1 -2
  237. data/vendor/libgit2/src/{netops.h → libgit2/netops.h} +1 -1
  238. data/vendor/libgit2/src/{notes.c → libgit2/notes.c} +25 -34
  239. data/vendor/libgit2/src/{object.c → libgit2/object.c} +135 -30
  240. data/vendor/libgit2/src/{object.h → libgit2/object.h} +12 -3
  241. data/vendor/libgit2/src/{odb.c → libgit2/odb.c} +228 -81
  242. data/vendor/libgit2/src/{odb.h → libgit2/odb.h} +44 -5
  243. data/vendor/libgit2/src/{odb_loose.c → libgit2/odb_loose.c} +192 -134
  244. data/vendor/libgit2/src/{odb_mempack.c → libgit2/odb_mempack.c} +18 -5
  245. data/vendor/libgit2/src/{odb_pack.c → libgit2/odb_pack.c} +137 -85
  246. data/vendor/libgit2/src/{oid.c → libgit2/oid.c} +136 -90
  247. data/vendor/libgit2/src/libgit2/oid.h +273 -0
  248. data/vendor/libgit2/src/{oidmap.c → libgit2/oidmap.c} +1 -1
  249. data/vendor/libgit2/src/{pack-objects.c → libgit2/pack-objects.c} +56 -30
  250. data/vendor/libgit2/src/{pack-objects.h → libgit2/pack-objects.h} +11 -6
  251. data/vendor/libgit2/src/{pack.c → libgit2/pack.c} +114 -84
  252. data/vendor/libgit2/src/{pack.h → libgit2/pack.h} +31 -16
  253. data/vendor/libgit2/src/{parse.c → libgit2/parse.c} +4 -3
  254. data/vendor/libgit2/src/{patch.c → libgit2/patch.c} +3 -3
  255. data/vendor/libgit2/src/{patch.h → libgit2/patch.h} +1 -0
  256. data/vendor/libgit2/src/{patch_generate.c → libgit2/patch_generate.c} +27 -11
  257. data/vendor/libgit2/src/{patch_generate.h → libgit2/patch_generate.h} +5 -5
  258. data/vendor/libgit2/src/{patch_parse.c → libgit2/patch_parse.c} +29 -29
  259. data/vendor/libgit2/src/libgit2/path.c +375 -0
  260. data/vendor/libgit2/src/libgit2/path.h +68 -0
  261. data/vendor/libgit2/src/{pathspec.c → libgit2/pathspec.c} +6 -6
  262. data/vendor/libgit2/src/{pathspec.h → libgit2/pathspec.h} +2 -2
  263. data/vendor/libgit2/src/{proxy.c → libgit2/proxy.c} +4 -1
  264. data/vendor/libgit2/src/{proxy.h → libgit2/proxy.h} +1 -1
  265. data/vendor/libgit2/src/{push.c → libgit2/push.c} +43 -38
  266. data/vendor/libgit2/src/{push.h → libgit2/push.h} +4 -16
  267. data/vendor/libgit2/src/{reader.c → libgit2/reader.c} +9 -9
  268. data/vendor/libgit2/src/{reader.h → libgit2/reader.h} +2 -2
  269. data/vendor/libgit2/src/{rebase.c → libgit2/rebase.c} +119 -107
  270. data/vendor/libgit2/src/{refdb_fs.c → libgit2/refdb_fs.c} +506 -197
  271. data/vendor/libgit2/src/{reflog.c → libgit2/reflog.c} +7 -5
  272. data/vendor/libgit2/src/{reflog.h → libgit2/reflog.h} +1 -2
  273. data/vendor/libgit2/src/{refs.c → libgit2/refs.c} +34 -32
  274. data/vendor/libgit2/src/{refs.h → libgit2/refs.h} +2 -2
  275. data/vendor/libgit2/src/{refspec.c → libgit2/refspec.c} +32 -37
  276. data/vendor/libgit2/src/{refspec.h → libgit2/refspec.h} +5 -2
  277. data/vendor/libgit2/src/{remote.c → libgit2/remote.c} +718 -420
  278. data/vendor/libgit2/src/libgit2/remote.h +100 -0
  279. data/vendor/libgit2/src/{repository.c → libgit2/repository.c} +629 -386
  280. data/vendor/libgit2/src/{repository.h → libgit2/repository.h} +20 -9
  281. data/vendor/libgit2/src/{reset.c → libgit2/reset.c} +8 -5
  282. data/vendor/libgit2/src/{revert.c → libgit2/revert.c} +14 -14
  283. data/vendor/libgit2/src/{revparse.c → libgit2/revparse.c} +71 -42
  284. data/vendor/libgit2/src/{revwalk.c → libgit2/revwalk.c} +12 -8
  285. data/vendor/libgit2/src/{signature.c → libgit2/signature.c} +12 -6
  286. data/vendor/libgit2/src/{signature.h → libgit2/signature.h} +1 -1
  287. data/vendor/libgit2/src/{stash.c → libgit2/stash.c} +235 -61
  288. data/vendor/libgit2/src/{status.c → libgit2/status.c} +4 -1
  289. data/vendor/libgit2/src/{strarray.c → libgit2/strarray.c} +1 -0
  290. data/vendor/libgit2/src/libgit2/strarray.h +25 -0
  291. data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.c +8 -6
  292. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.c +1 -1
  293. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.c +7 -3
  294. data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_dynamic.h +3 -3
  295. data/vendor/libgit2/src/{streams → libgit2/streams}/socket.c +4 -1
  296. data/vendor/libgit2/src/{submodule.c → libgit2/submodule.c} +177 -161
  297. data/vendor/libgit2/src/{submodule.h → libgit2/submodule.h} +1 -1
  298. data/vendor/libgit2/src/libgit2/sysdir.c +650 -0
  299. data/vendor/libgit2/src/{sysdir.h → libgit2/sysdir.h} +53 -18
  300. data/vendor/libgit2/src/{tag.c → libgit2/tag.c} +73 -42
  301. data/vendor/libgit2/src/{tag.h → libgit2/tag.h} +2 -2
  302. data/vendor/libgit2/src/{threadstate.c → libgit2/threadstate.c} +3 -3
  303. data/vendor/libgit2/src/{threadstate.h → libgit2/threadstate.h} +2 -2
  304. data/vendor/libgit2/src/{trace.c → libgit2/trace.c} +1 -14
  305. data/vendor/libgit2/src/{trace.h → libgit2/trace.h} +5 -22
  306. data/vendor/libgit2/src/{trailer.c → libgit2/trailer.c} +1 -1
  307. data/vendor/libgit2/src/{transaction.c → libgit2/transaction.c} +1 -1
  308. data/vendor/libgit2/src/{transport.c → libgit2/transport.c} +10 -10
  309. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.c +7 -9
  310. data/vendor/libgit2/src/{transports → libgit2/transports}/auth.h +2 -3
  311. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.c +12 -13
  312. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.c +10 -10
  313. data/vendor/libgit2/src/{transports → libgit2/transports}/auth_ntlm.h +0 -1
  314. data/vendor/libgit2/src/{transports → libgit2/transports}/git.c +9 -11
  315. data/vendor/libgit2/src/{transports → libgit2/transports}/http.c +41 -20
  316. data/vendor/libgit2/src/{transports → libgit2/transports}/http.h +2 -3
  317. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.c +75 -66
  318. data/vendor/libgit2/src/{transports → libgit2/transports}/httpclient.h +10 -0
  319. data/vendor/libgit2/src/{transports → libgit2/transports}/local.c +138 -116
  320. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.c +92 -133
  321. data/vendor/libgit2/src/{transports → libgit2/transports}/smart.h +35 -32
  322. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_pkt.c +177 -65
  323. data/vendor/libgit2/src/{transports → libgit2/transports}/smart_protocol.c +97 -49
  324. data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.c +365 -198
  325. data/vendor/libgit2/src/{transports → libgit2/transports}/winhttp.c +58 -59
  326. data/vendor/libgit2/src/{tree-cache.c → libgit2/tree-cache.c} +8 -8
  327. data/vendor/libgit2/src/{tree-cache.h → libgit2/tree-cache.h} +2 -2
  328. data/vendor/libgit2/src/{tree.c → libgit2/tree.c} +93 -83
  329. data/vendor/libgit2/src/{tree.h → libgit2/tree.h} +4 -4
  330. data/vendor/libgit2/src/{worktree.c → libgit2/worktree.c} +121 -94
  331. data/vendor/libgit2/src/{worktree.h → libgit2/worktree.h} +1 -1
  332. data/vendor/libgit2/src/libgit2/xdiff/git-xdiff.h +53 -0
  333. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiff.h +15 -15
  334. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.c +134 -108
  335. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.c +23 -7
  336. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xhistogram.c +87 -78
  337. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xinclude.h +1 -12
  338. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmerge.c +104 -117
  339. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xpatience.c +6 -17
  340. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.c +15 -20
  341. data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.c +18 -7
  342. data/vendor/libgit2/src/util/CMakeLists.txt +80 -0
  343. data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.h +1 -1
  344. data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.h +1 -1
  345. data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.h +1 -1
  346. data/vendor/libgit2/src/{array.h → util/array.h} +1 -1
  347. data/vendor/libgit2/src/{assert_safe.h → util/assert_safe.h} +16 -0
  348. data/vendor/libgit2/src/{cc-compat.h → util/cc-compat.h} +1 -1
  349. data/vendor/libgit2/src/{date.c → util/date.c} +14 -20
  350. data/vendor/libgit2/src/util/date.h +33 -0
  351. data/vendor/libgit2/src/{filebuf.c → util/filebuf.c} +29 -29
  352. data/vendor/libgit2/src/{filebuf.h → util/filebuf.h} +2 -2
  353. data/vendor/libgit2/src/{path.c → util/fs_path.c} +453 -647
  354. data/vendor/libgit2/src/{path.h → util/fs_path.h} +221 -188
  355. data/vendor/libgit2/src/{futils.c → util/futils.c} +135 -90
  356. data/vendor/libgit2/src/{futils.h → util/futils.h} +28 -15
  357. data/vendor/libgit2/src/{features.h.in → util/git2_features.h.in} +15 -1
  358. data/vendor/libgit2/src/{common.h → util/git2_util.h} +20 -59
  359. data/vendor/libgit2/src/util/hash/builtin.c +53 -0
  360. data/vendor/libgit2/src/{hash/sha1/openssl.h → util/hash/builtin.h} +6 -6
  361. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.c +3 -3
  362. data/vendor/libgit2/src/{hash/sha1 → util/hash}/collisiondetect.h +3 -3
  363. data/vendor/libgit2/src/util/hash/common_crypto.c +112 -0
  364. data/vendor/libgit2/src/{hash/sha1 → util/hash}/common_crypto.h +11 -3
  365. data/vendor/libgit2/src/util/hash/mbedtls.c +92 -0
  366. data/vendor/libgit2/src/{hash/sha1 → util/hash}/mbedtls.h +14 -4
  367. data/vendor/libgit2/src/util/hash/openssl.c +195 -0
  368. data/vendor/libgit2/src/util/hash/openssl.h +45 -0
  369. data/vendor/libgit2/src/util/hash/rfc6234/sha.h +243 -0
  370. data/vendor/libgit2/src/util/hash/rfc6234/sha224-256.c +601 -0
  371. data/vendor/libgit2/src/util/hash/sha.h +70 -0
  372. data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.c +1 -1
  373. data/vendor/libgit2/src/util/hash/win32.c +549 -0
  374. data/vendor/libgit2/src/util/hash/win32.h +60 -0
  375. data/vendor/libgit2/src/util/hash.c +158 -0
  376. data/vendor/libgit2/src/util/hash.h +61 -0
  377. data/vendor/libgit2/src/{khash.h → util/khash.h} +1 -1
  378. data/vendor/libgit2/src/{map.h → util/map.h} +1 -1
  379. data/vendor/libgit2/src/util/net.c +1003 -0
  380. data/vendor/libgit2/src/{net.h → util/net.h} +18 -4
  381. data/vendor/libgit2/src/{pool.h → util/pool.h} +1 -1
  382. data/vendor/libgit2/src/{posix.c → util/posix.c} +3 -3
  383. data/vendor/libgit2/src/{posix.h → util/posix.h} +4 -1
  384. data/vendor/libgit2/src/{pqueue.h → util/pqueue.h} +2 -2
  385. data/vendor/libgit2/src/util/rand.c +234 -0
  386. data/vendor/libgit2/src/util/rand.h +37 -0
  387. data/vendor/libgit2/src/{regexp.c → util/regexp.c} +4 -4
  388. data/vendor/libgit2/src/{regexp.h → util/regexp.h} +1 -1
  389. data/vendor/libgit2/src/{runtime.c → util/runtime.c} +1 -1
  390. data/vendor/libgit2/src/{runtime.h → util/runtime.h} +1 -1
  391. data/vendor/libgit2/src/{sortedcache.c → util/sortedcache.c} +1 -1
  392. data/vendor/libgit2/src/{sortedcache.h → util/sortedcache.h} +2 -2
  393. data/vendor/libgit2/src/{buffer.c → util/str.c} +157 -151
  394. data/vendor/libgit2/src/util/str.h +357 -0
  395. data/vendor/libgit2/src/{strmap.h → util/strmap.h} +1 -1
  396. data/vendor/libgit2/src/{thread.c → util/thread.c} +1 -1
  397. data/vendor/libgit2/src/{thread.h → util/thread.h} +23 -22
  398. data/vendor/libgit2/src/{tsort.c → util/tsort.c} +1 -1
  399. data/vendor/libgit2/src/{unix → util/unix}/map.c +1 -3
  400. data/vendor/libgit2/src/{unix → util/unix}/posix.h +1 -4
  401. data/vendor/libgit2/src/{unix → util/unix}/realpath.c +1 -3
  402. data/vendor/libgit2/src/{utf8.c → util/utf8.c} +1 -1
  403. data/vendor/libgit2/src/{utf8.h → util/utf8.h} +1 -1
  404. data/vendor/libgit2/src/{util.c → util/util.c} +15 -15
  405. data/vendor/libgit2/src/{util.h → util/util.h} +4 -29
  406. data/vendor/libgit2/src/{varint.h → util/varint.h} +1 -1
  407. data/vendor/libgit2/src/{vector.h → util/vector.h} +2 -2
  408. data/vendor/libgit2/src/{wildmatch.h → util/wildmatch.h} +1 -1
  409. data/vendor/libgit2/src/{win32 → util/win32}/dir.h +1 -1
  410. data/vendor/libgit2/src/{win32 → util/win32}/error.h +1 -1
  411. data/vendor/libgit2/src/{win32 → util/win32}/map.c +1 -1
  412. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.c +140 -9
  413. data/vendor/libgit2/src/{win32 → util/win32}/path_w32.h +3 -1
  414. data/vendor/libgit2/src/{win32 → util/win32}/posix.h +1 -2
  415. data/vendor/libgit2/src/{win32 → util/win32}/posix_w32.c +12 -28
  416. data/vendor/libgit2/src/util/win32/precompiled.c +1 -0
  417. data/vendor/libgit2/src/{win32 → util/win32}/precompiled.h +1 -1
  418. data/vendor/libgit2/src/{win32 → util/win32}/thread.h +1 -1
  419. data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.h +1 -1
  420. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.c +2 -3
  421. data/vendor/libgit2/src/{win32 → util/win32}/w32_buffer.h +3 -4
  422. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.c +1 -1
  423. data/vendor/libgit2/src/{win32 → util/win32}/w32_leakcheck.h +1 -1
  424. data/vendor/libgit2/src/{win32 → util/win32}/w32_util.h +1 -1
  425. data/vendor/libgit2/src/{zstream.c → util/zstream.c} +5 -5
  426. data/vendor/libgit2/src/{zstream.h → util/zstream.h} +5 -5
  427. metadata +402 -356
  428. data/vendor/libgit2/src/buffer.h +0 -374
  429. data/vendor/libgit2/src/commit.h +0 -46
  430. data/vendor/libgit2/src/hash/sha1/common_crypto.c +0 -57
  431. data/vendor/libgit2/src/hash/sha1/generic.c +0 -300
  432. data/vendor/libgit2/src/hash/sha1/generic.h +0 -19
  433. data/vendor/libgit2/src/hash/sha1/mbedtls.c +0 -46
  434. data/vendor/libgit2/src/hash/sha1/openssl.c +0 -59
  435. data/vendor/libgit2/src/hash/sha1/win32.c +0 -333
  436. data/vendor/libgit2/src/hash/sha1/win32.h +0 -128
  437. data/vendor/libgit2/src/hash/sha1.h +0 -38
  438. data/vendor/libgit2/src/hash.c +0 -110
  439. data/vendor/libgit2/src/hash.h +0 -46
  440. data/vendor/libgit2/src/message.h +0 -17
  441. data/vendor/libgit2/src/net.c +0 -540
  442. data/vendor/libgit2/src/oid.h +0 -51
  443. data/vendor/libgit2/src/remote.h +0 -55
  444. data/vendor/libgit2/src/sysdir.c +0 -347
  445. data/vendor/libgit2/src/win32/findfile.c +0 -230
  446. data/vendor/libgit2/src/win32/findfile.h +0 -19
  447. /data/vendor/libgit2/src/{win32 → cli/win32}/precompiled.c +0 -0
  448. /data/vendor/libgit2/src/{attr.h → libgit2/attr.h} +0 -0
  449. /data/vendor/libgit2/src/{attrcache.h → libgit2/attrcache.h} +0 -0
  450. /data/vendor/libgit2/src/{blame.h → libgit2/blame.h} +0 -0
  451. /data/vendor/libgit2/src/{blame_git.h → libgit2/blame_git.h} +0 -0
  452. /data/vendor/libgit2/src/{cache.c → libgit2/cache.c} +0 -0
  453. /data/vendor/libgit2/src/{cache.h → libgit2/cache.h} +0 -0
  454. /data/vendor/libgit2/src/{checkout.h → libgit2/checkout.h} +0 -0
  455. /data/vendor/libgit2/src/{clone.h → libgit2/clone.h} +0 -0
  456. /data/vendor/libgit2/src/{commit_list.h → libgit2/commit_list.h} +0 -0
  457. /data/vendor/libgit2/src/{config_backend.h → libgit2/config_backend.h} +0 -0
  458. /data/vendor/libgit2/src/{config_cache.c → libgit2/config_cache.c} +0 -0
  459. /data/vendor/libgit2/src/{config_entries.c → libgit2/config_entries.c} +0 -0
  460. /data/vendor/libgit2/src/{config_entries.h → libgit2/config_entries.h} +0 -0
  461. /data/vendor/libgit2/src/{config_parse.h → libgit2/config_parse.h} +0 -0
  462. /data/vendor/libgit2/src/{config_snapshot.c → libgit2/config_snapshot.c} +0 -0
  463. /data/vendor/libgit2/src/{delta.c → libgit2/delta.c} +0 -0
  464. /data/vendor/libgit2/src/{delta.h → libgit2/delta.h} +0 -0
  465. /data/vendor/libgit2/src/{diff_file.h → libgit2/diff_file.h} +0 -0
  466. /data/vendor/libgit2/src/{diff_parse.c → libgit2/diff_parse.c} +0 -0
  467. /data/vendor/libgit2/src/{diff_parse.h → libgit2/diff_parse.h} +0 -0
  468. /data/vendor/libgit2/src/{diff_tform.h → libgit2/diff_tform.h} +0 -0
  469. /data/vendor/libgit2/src/{diff_xdiff.h → libgit2/diff_xdiff.h} +0 -0
  470. /data/vendor/libgit2/src/{fetchhead.h → libgit2/fetchhead.h} +0 -0
  471. /data/vendor/libgit2/src/{win32 → libgit2}/git2.rc +0 -0
  472. /data/vendor/libgit2/src/{graph.c → libgit2/graph.c} +0 -0
  473. /data/vendor/libgit2/src/{hashsig.c → libgit2/hashsig.c} +0 -0
  474. /data/vendor/libgit2/src/{idxmap.c → libgit2/idxmap.c} +0 -0
  475. /data/vendor/libgit2/src/{idxmap.h → libgit2/idxmap.h} +0 -0
  476. /data/vendor/libgit2/src/{indexer.h → libgit2/indexer.h} +0 -0
  477. /data/vendor/libgit2/src/{libgit2.h → libgit2/libgit2.h} +0 -0
  478. /data/vendor/libgit2/src/{mailmap.h → libgit2/mailmap.h} +0 -0
  479. /data/vendor/libgit2/src/{merge_driver.h → libgit2/merge_driver.h} +0 -0
  480. /data/vendor/libgit2/src/{notes.h → libgit2/notes.h} +0 -0
  481. /data/vendor/libgit2/src/{object_api.c → libgit2/object_api.c} +0 -0
  482. /data/vendor/libgit2/src/{offmap.c → libgit2/offmap.c} +0 -0
  483. /data/vendor/libgit2/src/{offmap.h → libgit2/offmap.h} +0 -0
  484. /data/vendor/libgit2/src/{oidarray.c → libgit2/oidarray.c} +0 -0
  485. /data/vendor/libgit2/src/{oidarray.h → libgit2/oidarray.h} +0 -0
  486. /data/vendor/libgit2/src/{oidmap.h → libgit2/oidmap.h} +0 -0
  487. /data/vendor/libgit2/src/{parse.h → libgit2/parse.h} +0 -0
  488. /data/vendor/libgit2/src/{patch_parse.h → libgit2/patch_parse.h} +0 -0
  489. /data/vendor/libgit2/src/{refdb.c → libgit2/refdb.c} +0 -0
  490. /data/vendor/libgit2/src/{refdb.h → libgit2/refdb.h} +0 -0
  491. /data/vendor/libgit2/src/{repo_template.h → libgit2/repo_template.h} +0 -0
  492. /data/vendor/libgit2/src/{revwalk.h → libgit2/revwalk.h} +0 -0
  493. /data/vendor/libgit2/src/{settings.h → libgit2/settings.h} +0 -0
  494. /data/vendor/libgit2/src/{status.h → libgit2/status.h} +0 -0
  495. /data/vendor/libgit2/src/{stream.h → libgit2/stream.h} +0 -0
  496. /data/vendor/libgit2/src/{streams → libgit2/streams}/mbedtls.h +0 -0
  497. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl.h +0 -0
  498. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.c +0 -0
  499. /data/vendor/libgit2/src/{streams → libgit2/streams}/openssl_legacy.h +0 -0
  500. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.c +0 -0
  501. /data/vendor/libgit2/src/{streams → libgit2/streams}/registry.h +0 -0
  502. /data/vendor/libgit2/src/{streams → libgit2/streams}/socket.h +0 -0
  503. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.c +0 -0
  504. /data/vendor/libgit2/src/{streams → libgit2/streams}/stransport.h +0 -0
  505. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.c +0 -0
  506. /data/vendor/libgit2/src/{streams → libgit2/streams}/tls.h +0 -0
  507. /data/vendor/libgit2/src/{transaction.h → libgit2/transaction.h} +0 -0
  508. /data/vendor/libgit2/src/{transports → libgit2/transports}/auth_negotiate.h +0 -0
  509. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential.c +0 -0
  510. /data/vendor/libgit2/src/{transports → libgit2/transports}/credential_helpers.c +0 -0
  511. /data/vendor/libgit2/src/{transports → libgit2/transports}/ssh.h +0 -0
  512. /data/vendor/libgit2/src/{userdiff.h → libgit2/userdiff.h} +0 -0
  513. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xdiffi.h +0 -0
  514. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xemit.h +0 -0
  515. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xmacros.h +0 -0
  516. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xprepare.h +0 -0
  517. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xtypes.h +0 -0
  518. /data/vendor/libgit2/src/{xdiff → libgit2/xdiff}/xutils.h +0 -0
  519. /data/vendor/libgit2/src/{alloc.c → util/alloc.c} +0 -0
  520. /data/vendor/libgit2/src/{alloc.h → util/alloc.h} +0 -0
  521. /data/vendor/libgit2/src/{allocators → util/allocators}/failalloc.c +0 -0
  522. /data/vendor/libgit2/src/{allocators → util/allocators}/stdalloc.c +0 -0
  523. /data/vendor/libgit2/src/{allocators → util/allocators}/win32_leakcheck.c +0 -0
  524. /data/vendor/libgit2/src/{bitvec.h → util/bitvec.h} +0 -0
  525. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/sha1.h +0 -0
  526. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.c +0 -0
  527. /data/vendor/libgit2/src/{hash/sha1 → util/hash}/sha1dc/ubc_check.h +0 -0
  528. /data/vendor/libgit2/src/{integer.h → util/integer.h} +0 -0
  529. /data/vendor/libgit2/src/{pool.c → util/pool.c} +0 -0
  530. /data/vendor/libgit2/src/{pqueue.c → util/pqueue.c} +0 -0
  531. /data/vendor/libgit2/src/{strmap.c → util/strmap.c} +0 -0
  532. /data/vendor/libgit2/src/{strnlen.h → util/strnlen.h} +0 -0
  533. /data/vendor/libgit2/src/{unix → util/unix}/pthread.h +0 -0
  534. /data/vendor/libgit2/src/{varint.c → util/varint.c} +0 -0
  535. /data/vendor/libgit2/src/{vector.c → util/vector.c} +0 -0
  536. /data/vendor/libgit2/src/{wildmatch.c → util/wildmatch.c} +0 -0
  537. /data/vendor/libgit2/src/{win32 → util/win32}/dir.c +0 -0
  538. /data/vendor/libgit2/src/{win32 → util/win32}/error.c +0 -0
  539. /data/vendor/libgit2/src/{win32 → util/win32}/mingw-compat.h +0 -0
  540. /data/vendor/libgit2/src/{win32 → util/win32}/msvc-compat.h +0 -0
  541. /data/vendor/libgit2/src/{win32 → util/win32}/reparse.h +0 -0
  542. /data/vendor/libgit2/src/{win32 → util/win32}/thread.c +0 -0
  543. /data/vendor/libgit2/src/{win32 → util/win32}/utf-conv.c +0 -0
  544. /data/vendor/libgit2/src/{win32 → util/win32}/version.h +0 -0
  545. /data/vendor/libgit2/src/{win32 → util/win32}/w32_common.h +0 -0
  546. /data/vendor/libgit2/src/{win32 → util/win32}/w32_util.c +0 -0
  547. /data/vendor/libgit2/src/{win32 → util/win32}/win32-compat.h +0 -0
@@ -4,16 +4,15 @@
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
- #ifndef INCLUDE_path_h__
8
- #define INCLUDE_path_h__
7
+ #ifndef INCLUDE_fs_path_h__
8
+ #define INCLUDE_fs_path_h__
9
9
 
10
- #include "common.h"
10
+ #include "git2_util.h"
11
11
 
12
12
  #include "posix.h"
13
- #include "buffer.h"
13
+ #include "str.h"
14
14
  #include "vector.h"
15
-
16
- #include "git2/sys/path.h"
15
+ #include "utf8.h"
17
16
 
18
17
  /**
19
18
  * Path manipulation utils
@@ -32,16 +31,16 @@
32
31
  * the string ".". If path is a null pointer or points to an empty string,
33
32
  * dirname() shall return a pointer to the string "." .
34
33
  *
35
- * The `git_path_dirname` implementation is thread safe. The returned
34
+ * The `git_fs_path_dirname` implementation is thread safe. The returned
36
35
  * string must be manually free'd.
37
36
  *
38
- * The `git_path_dirname_r` implementation writes the dirname to a `git_buf`
37
+ * The `git_fs_path_dirname_r` implementation writes the dirname to a `git_str`
39
38
  * if the buffer pointer is not NULL.
40
39
  * It returns an error code < 0 if there is an allocation error, otherwise
41
40
  * the length of the dirname (which will be > 0).
42
41
  */
43
- extern char *git_path_dirname(const char *path);
44
- extern int git_path_dirname_r(git_buf *buffer, const char *path);
42
+ extern char *git_fs_path_dirname(const char *path);
43
+ extern int git_fs_path_dirname_r(git_str *buffer, const char *path);
45
44
 
46
45
  /*
47
46
  * This function returns the basename of the file, which is the last
@@ -52,20 +51,20 @@ extern int git_path_dirname_r(git_buf *buffer, const char *path);
52
51
  * Trailing slashes and backslashes are significant: the basename of
53
52
  * c:/foo/bar/ is an empty string after the rightmost slash.
54
53
  *
55
- * The `git_path_basename` implementation is thread safe. The returned
54
+ * The `git_fs_path_basename` implementation is thread safe. The returned
56
55
  * string must be manually free'd.
57
56
  *
58
- * The `git_path_basename_r` implementation writes the basename to a `git_buf`.
57
+ * The `git_fs_path_basename_r` implementation writes the basename to a `git_str`.
59
58
  * It returns an error code < 0 if there is an allocation error, otherwise
60
59
  * the length of the basename (which will be >= 0).
61
60
  */
62
- extern char *git_path_basename(const char *path);
63
- extern int git_path_basename_r(git_buf *buffer, const char *path);
61
+ extern char *git_fs_path_basename(const char *path);
62
+ extern int git_fs_path_basename_r(git_str *buffer, const char *path);
64
63
 
65
64
  /* Return the offset of the start of the basename. Unlike the other
66
65
  * basename functions, this returns 0 if the path is empty.
67
66
  */
68
- extern size_t git_path_basename_offset(git_buf *buffer);
67
+ extern size_t git_fs_path_basename_offset(git_str *buffer);
69
68
 
70
69
  /**
71
70
  * Find offset to root of path if path has one.
@@ -75,22 +74,22 @@ extern size_t git_path_basename_offset(git_buf *buffer);
75
74
  * "c:/windows/rooted/path" returns 2). If the path is not rooted, this
76
75
  * returns -1.
77
76
  */
78
- extern int git_path_root(const char *path);
77
+ extern int git_fs_path_root(const char *path);
79
78
 
80
79
  /**
81
80
  * Ensure path has a trailing '/'.
82
81
  */
83
- extern int git_path_to_dir(git_buf *path);
82
+ extern int git_fs_path_to_dir(git_str *path);
84
83
 
85
84
  /**
86
85
  * Ensure string has a trailing '/' if there is space for it.
87
86
  */
88
- extern void git_path_string_to_dir(char *path, size_t size);
87
+ extern void git_fs_path_string_to_dir(char *path, size_t size);
89
88
 
90
89
  /**
91
90
  * Taken from git.git; returns nonzero if the given path is "." or "..".
92
91
  */
93
- GIT_INLINE(int) git_path_is_dot_or_dotdot(const char *name)
92
+ GIT_INLINE(int) git_fs_path_is_dot_or_dotdot(const char *name)
94
93
  {
95
94
  return (name[0] == '.' &&
96
95
  (name[1] == '\0' ||
@@ -98,23 +97,23 @@ GIT_INLINE(int) git_path_is_dot_or_dotdot(const char *name)
98
97
  }
99
98
 
100
99
  #ifdef GIT_WIN32
101
- GIT_INLINE(int) git_path_is_dot_or_dotdotW(const wchar_t *name)
100
+ GIT_INLINE(int) git_fs_path_is_dot_or_dotdotW(const wchar_t *name)
102
101
  {
103
102
  return (name[0] == L'.' &&
104
103
  (name[1] == L'\0' ||
105
104
  (name[1] == L'.' && name[2] == L'\0')));
106
105
  }
107
106
 
108
- #define git_path_is_absolute(p) \
107
+ #define git_fs_path_is_absolute(p) \
109
108
  (git__isalpha((p)[0]) && (p)[1] == ':' && ((p)[2] == '\\' || (p)[2] == '/'))
110
109
 
111
- #define git_path_is_dirsep(p) \
110
+ #define git_fs_path_is_dirsep(p) \
112
111
  ((p) == '/' || (p) == '\\')
113
112
 
114
113
  /**
115
114
  * Convert backslashes in path to forward slashes.
116
115
  */
117
- GIT_INLINE(void) git_path_mkposix(char *path)
116
+ GIT_INLINE(void) git_fs_path_mkposix(char *path)
118
117
  {
119
118
  while (*path) {
120
119
  if (*path == '\\')
@@ -124,12 +123,12 @@ GIT_INLINE(void) git_path_mkposix(char *path)
124
123
  }
125
124
  }
126
125
  #else
127
- # define git_path_mkposix(p) /* blank */
126
+ # define git_fs_path_mkposix(p) /* blank */
128
127
 
129
- #define git_path_is_absolute(p) \
128
+ #define git_fs_path_is_absolute(p) \
130
129
  ((p)[0] == '/')
131
130
 
132
- #define git_path_is_dirsep(p) \
131
+ #define git_fs_path_is_dirsep(p) \
133
132
  ((p) == '/')
134
133
 
135
134
  #endif
@@ -137,7 +136,7 @@ GIT_INLINE(void) git_path_mkposix(char *path)
137
136
  /**
138
137
  * Check if string is a relative path (i.e. starts with "./" or "../")
139
138
  */
140
- GIT_INLINE(int) git_path_is_relative(const char *p)
139
+ GIT_INLINE(int) git_fs_path_is_relative(const char *p)
141
140
  {
142
141
  return (p[0] == '.' && (p[1] == '/' || (p[1] == '.' && p[2] == '/')));
143
142
  }
@@ -145,17 +144,17 @@ GIT_INLINE(int) git_path_is_relative(const char *p)
145
144
  /**
146
145
  * Check if string is at end of path segment (i.e. looking at '/' or '\0')
147
146
  */
148
- GIT_INLINE(int) git_path_at_end_of_segment(const char *p)
147
+ GIT_INLINE(int) git_fs_path_at_end_of_segment(const char *p)
149
148
  {
150
149
  return !*p || *p == '/';
151
150
  }
152
151
 
153
- extern int git__percent_decode(git_buf *decoded_out, const char *input);
152
+ extern int git__percent_decode(git_str *decoded_out, const char *input);
154
153
 
155
154
  /**
156
155
  * Extract path from file:// URL.
157
156
  */
158
- extern int git_path_fromurl(git_buf *local_path_out, const char *file_url);
157
+ extern int git_fs_path_fromurl(git_str *local_path_out, const char *file_url);
159
158
 
160
159
 
161
160
  /**
@@ -168,35 +167,35 @@ extern int git_path_fromurl(git_buf *local_path_out, const char *file_url);
168
167
  * Check if a file exists and can be accessed.
169
168
  * @return true or false
170
169
  */
171
- extern bool git_path_exists(const char *path);
170
+ extern bool git_fs_path_exists(const char *path);
172
171
 
173
172
  /**
174
173
  * Check if the given path points to a directory.
175
174
  * @return true or false
176
175
  */
177
- extern bool git_path_isdir(const char *path);
176
+ extern bool git_fs_path_isdir(const char *path);
178
177
 
179
178
  /**
180
179
  * Check if the given path points to a regular file.
181
180
  * @return true or false
182
181
  */
183
- extern bool git_path_isfile(const char *path);
182
+ extern bool git_fs_path_isfile(const char *path);
184
183
 
185
184
  /**
186
185
  * Check if the given path points to a symbolic link.
187
186
  * @return true or false
188
187
  */
189
- extern bool git_path_islink(const char *path);
188
+ extern bool git_fs_path_islink(const char *path);
190
189
 
191
190
  /**
192
191
  * Check if the given path is a directory, and is empty.
193
192
  */
194
- extern bool git_path_is_empty_dir(const char *path);
193
+ extern bool git_fs_path_is_empty_dir(const char *path);
195
194
 
196
195
  /**
197
196
  * Stat a file and/or link and set error if needed.
198
197
  */
199
- extern int git_path_lstat(const char *path, struct stat *st);
198
+ extern int git_fs_path_lstat(const char *path, struct stat *st);
200
199
 
201
200
  /**
202
201
  * Check if the parent directory contains the item.
@@ -205,7 +204,7 @@ extern int git_path_lstat(const char *path, struct stat *st);
205
204
  * @param item Item that might be in the directory.
206
205
  * @return 0 if item exists in directory, <0 otherwise.
207
206
  */
208
- extern bool git_path_contains(git_buf *dir, const char *item);
207
+ extern bool git_fs_path_contains(git_str *dir, const char *item);
209
208
 
210
209
  /**
211
210
  * Check if the given path contains the given subdirectory.
@@ -214,7 +213,7 @@ extern bool git_path_contains(git_buf *dir, const char *item);
214
213
  * @param subdir Subdirectory name to look for in parent
215
214
  * @return true if subdirectory exists, false otherwise.
216
215
  */
217
- extern bool git_path_contains_dir(git_buf *parent, const char *subdir);
216
+ extern bool git_fs_path_contains_dir(git_str *parent, const char *subdir);
218
217
 
219
218
  /**
220
219
  * Determine the common directory length between two paths, including
@@ -226,7 +225,7 @@ extern bool git_path_contains_dir(git_buf *parent, const char *subdir);
226
225
  * @param two The second path
227
226
  * @return The length of the common directory
228
227
  */
229
- extern size_t git_path_common_dirlen(const char *one, const char *two);
228
+ extern size_t git_fs_path_common_dirlen(const char *one, const char *two);
230
229
 
231
230
  /**
232
231
  * Make the path relative to the given parent path.
@@ -237,7 +236,7 @@ extern size_t git_path_common_dirlen(const char *one, const char *two);
237
236
  * if there was not common root between the paths,
238
237
  * or <0.
239
238
  */
240
- extern int git_path_make_relative(git_buf *path, const char *parent);
239
+ extern int git_fs_path_make_relative(git_str *path, const char *parent);
241
240
 
242
241
  /**
243
242
  * Check if the given path contains the given file.
@@ -246,7 +245,7 @@ extern int git_path_make_relative(git_buf *path, const char *parent);
246
245
  * @param file File name to look for in parent
247
246
  * @return true if file exists, false otherwise.
248
247
  */
249
- extern bool git_path_contains_file(git_buf *dir, const char *file);
248
+ extern bool git_fs_path_contains_file(git_str *dir, const char *file);
250
249
 
251
250
  /**
252
251
  * Prepend base to unrooted path or just copy path over.
@@ -254,36 +253,36 @@ extern bool git_path_contains_file(git_buf *dir, const char *file);
254
253
  * This will optionally return the index into the path where the "root"
255
254
  * is, either the end of the base directory prefix or the path root.
256
255
  */
257
- extern int git_path_join_unrooted(
258
- git_buf *path_out, const char *path, const char *base, ssize_t *root_at);
256
+ extern int git_fs_path_join_unrooted(
257
+ git_str *path_out, const char *path, const char *base, ssize_t *root_at);
259
258
 
260
259
  /**
261
260
  * Removes multiple occurrences of '/' in a row, squashing them into a
262
261
  * single '/'.
263
262
  */
264
- extern void git_path_squash_slashes(git_buf *path);
263
+ extern void git_fs_path_squash_slashes(git_str *path);
265
264
 
266
265
  /**
267
266
  * Clean up path, prepending base if it is not already rooted.
268
267
  */
269
- extern int git_path_prettify(git_buf *path_out, const char *path, const char *base);
268
+ extern int git_fs_path_prettify(git_str *path_out, const char *path, const char *base);
270
269
 
271
270
  /**
272
271
  * Clean up path, prepending base if it is not already rooted and
273
272
  * appending a slash.
274
273
  */
275
- extern int git_path_prettify_dir(git_buf *path_out, const char *path, const char *base);
274
+ extern int git_fs_path_prettify_dir(git_str *path_out, const char *path, const char *base);
276
275
 
277
276
  /**
278
277
  * Get a directory from a path.
279
278
  *
280
- * If path is a directory, this acts like `git_path_prettify_dir`
279
+ * If path is a directory, this acts like `git_fs_path_prettify_dir`
281
280
  * (cleaning up path and appending a '/'). If path is a normal file,
282
281
  * this prettifies it, then removed the filename a la dirname and
283
282
  * appends the trailing '/'. If the path does not exist, it is
284
283
  * treated like a regular filename.
285
284
  */
286
- extern int git_path_find_dir(git_buf *dir);
285
+ extern int git_fs_path_find_dir(git_str *dir);
287
286
 
288
287
  /**
289
288
  * Resolve relative references within a path.
@@ -295,7 +294,7 @@ extern int git_path_find_dir(git_buf *dir);
295
294
  * Additionally, this will recognize an "c:/" drive prefix or a "xyz://" URL
296
295
  * prefix and not touch that part of the path.
297
296
  */
298
- extern int git_path_resolve_relative(git_buf *path, size_t ceiling);
297
+ extern int git_fs_path_resolve_relative(git_str *path, size_t ceiling);
299
298
 
300
299
  /**
301
300
  * Apply a relative path to base path.
@@ -306,12 +305,12 @@ extern int git_path_resolve_relative(git_buf *path, size_t ceiling);
306
305
  * slash, "." will be eaten with no change, and ".." will remove a
307
306
  * segment from the base path.
308
307
  */
309
- extern int git_path_apply_relative(git_buf *target, const char *relpath);
308
+ extern int git_fs_path_apply_relative(git_str *target, const char *relpath);
310
309
 
311
310
  enum {
312
- GIT_PATH_DIR_IGNORE_CASE = (1u << 0),
313
- GIT_PATH_DIR_PRECOMPOSE_UNICODE = (1u << 1),
314
- GIT_PATH_DIR_INCLUDE_DOT_AND_DOTDOT = (1u << 2),
311
+ GIT_FS_PATH_DIR_IGNORE_CASE = (1u << 0),
312
+ GIT_FS_PATH_DIR_PRECOMPOSE_UNICODE = (1u << 1),
313
+ GIT_FS_PATH_DIR_INCLUDE_DOT_AND_DOTDOT = (1u << 2),
315
314
  };
316
315
 
317
316
  /**
@@ -319,7 +318,7 @@ enum {
319
318
  *
320
319
  * @param pathbuf Buffer the function reads the initial directory
321
320
  * path from, and updates with each successive entry's name.
322
- * @param flags Combination of GIT_PATH_DIR flags.
321
+ * @param flags Combination of GIT_FS_PATH_DIR flags.
323
322
  * @param callback Callback for each entry. Passed the `payload` and each
324
323
  * successive path inside the directory as a full path. This may
325
324
  * safely append text to the pathbuf if needed. Return non-zero to
@@ -327,16 +326,16 @@ enum {
327
326
  * @param payload Passed to callback as first argument.
328
327
  * @return 0 on success or error code from OS error or from callback
329
328
  */
330
- extern int git_path_direach(
331
- git_buf *pathbuf,
329
+ extern int git_fs_path_direach(
330
+ git_str *pathbuf,
332
331
  uint32_t flags,
333
- int (*callback)(void *payload, git_buf *path),
332
+ int (*callback)(void *payload, git_str *path),
334
333
  void *payload);
335
334
 
336
335
  /**
337
336
  * Sort function to order two paths
338
337
  */
339
- extern int git_path_cmp(
338
+ extern int git_fs_path_cmp(
340
339
  const char *name1, size_t len1, int isdir1,
341
340
  const char *name2, size_t len2, int isdir2,
342
341
  int (*compare)(const char *, const char *, size_t));
@@ -359,21 +358,25 @@ extern int git_path_cmp(
359
358
  * be modified in any way. Return non-zero to stop iteration.
360
359
  * @param payload Passed to fn as the first ath.
361
360
  */
362
- extern int git_path_walk_up(
363
- git_buf *pathbuf,
361
+ extern int git_fs_path_walk_up(
362
+ git_str *pathbuf,
364
363
  const char *ceiling,
365
364
  int (*callback)(void *payload, const char *path),
366
365
  void *payload);
367
366
 
368
367
 
369
- enum { GIT_PATH_NOTEQUAL = 0, GIT_PATH_EQUAL = 1, GIT_PATH_PREFIX = 2 };
368
+ enum {
369
+ GIT_FS_PATH_NOTEQUAL = 0,
370
+ GIT_FS_PATH_EQUAL = 1,
371
+ GIT_FS_PATH_PREFIX = 2
372
+ };
370
373
 
371
374
  /*
372
375
  * Determines if a path is equal to or potentially a child of another.
373
376
  * @param parent The possible parent
374
377
  * @param child The possible child
375
378
  */
376
- GIT_INLINE(int) git_path_equal_or_prefixed(
379
+ GIT_INLINE(int) git_fs_path_equal_or_prefixed(
377
380
  const char *parent,
378
381
  const char *child,
379
382
  ssize_t *prefixlen)
@@ -385,35 +388,35 @@ GIT_INLINE(int) git_path_equal_or_prefixed(
385
388
  lastslash = (*p == '/');
386
389
 
387
390
  if (*p++ != *c++)
388
- return GIT_PATH_NOTEQUAL;
391
+ return GIT_FS_PATH_NOTEQUAL;
389
392
  }
390
393
 
391
394
  if (*p != '\0')
392
- return GIT_PATH_NOTEQUAL;
395
+ return GIT_FS_PATH_NOTEQUAL;
393
396
 
394
397
  if (*c == '\0') {
395
398
  if (prefixlen)
396
399
  *prefixlen = p - parent;
397
400
 
398
- return GIT_PATH_EQUAL;
401
+ return GIT_FS_PATH_EQUAL;
399
402
  }
400
403
 
401
404
  if (*c == '/' || lastslash) {
402
405
  if (prefixlen)
403
406
  *prefixlen = (p - parent) - lastslash;
404
407
 
405
- return GIT_PATH_PREFIX;
408
+ return GIT_FS_PATH_PREFIX;
406
409
  }
407
410
 
408
- return GIT_PATH_NOTEQUAL;
411
+ return GIT_FS_PATH_NOTEQUAL;
409
412
  }
410
413
 
411
414
  /* translate errno to libgit2 error code and set error message */
412
- extern int git_path_set_error(
415
+ extern int git_fs_path_set_error(
413
416
  int errno_value, const char *path, const char *action);
414
417
 
415
418
  /* check if non-ascii characters are present in filename */
416
- extern bool git_path_has_non_ascii(const char *path, size_t pathlen);
419
+ extern bool git_fs_path_has_non_ascii(const char *path, size_t pathlen);
417
420
 
418
421
  #define GIT_PATH_REPO_ENCODING "UTF-8"
419
422
 
@@ -429,39 +432,39 @@ extern bool git_path_has_non_ascii(const char *path, size_t pathlen);
429
432
 
430
433
  typedef struct {
431
434
  iconv_t map;
432
- git_buf buf;
433
- } git_path_iconv_t;
435
+ git_str buf;
436
+ } git_fs_path_iconv_t;
434
437
 
435
- #define GIT_PATH_ICONV_INIT { (iconv_t)-1, GIT_BUF_INIT }
438
+ #define GIT_PATH_ICONV_INIT { (iconv_t)-1, GIT_STR_INIT }
436
439
 
437
440
  /* Init iconv data for converting decomposed UTF-8 to precomposed */
438
- extern int git_path_iconv_init_precompose(git_path_iconv_t *ic);
441
+ extern int git_fs_path_iconv_init_precompose(git_fs_path_iconv_t *ic);
439
442
 
440
443
  /* Clear allocated iconv data */
441
- extern void git_path_iconv_clear(git_path_iconv_t *ic);
444
+ extern void git_fs_path_iconv_clear(git_fs_path_iconv_t *ic);
442
445
 
443
446
  /*
444
447
  * Rewrite `in` buffer using iconv map if necessary, replacing `in`
445
448
  * pointer internal iconv buffer if rewrite happened. The `in` pointer
446
449
  * will be left unchanged if no rewrite was needed.
447
450
  */
448
- extern int git_path_iconv(git_path_iconv_t *ic, const char **in, size_t *inlen);
451
+ extern int git_fs_path_iconv(git_fs_path_iconv_t *ic, const char **in, size_t *inlen);
449
452
 
450
453
  #endif /* GIT_USE_ICONV */
451
454
 
452
- extern bool git_path_does_fs_decompose_unicode(const char *root);
455
+ extern bool git_fs_path_does_decompose_unicode(const char *root);
453
456
 
454
457
 
455
- typedef struct git_path_diriter git_path_diriter;
458
+ typedef struct git_fs_path_diriter git_fs_path_diriter;
456
459
 
457
460
  #if defined(GIT_WIN32) && !defined(__MINGW32__)
458
461
 
459
- struct git_path_diriter
462
+ struct git_fs_path_diriter
460
463
  {
461
464
  git_win32_path path;
462
465
  size_t parent_len;
463
466
 
464
- git_buf path_utf8;
467
+ git_str path_utf8;
465
468
  size_t parent_utf8_len;
466
469
 
467
470
  HANDLE handle;
@@ -472,13 +475,13 @@ struct git_path_diriter
472
475
  unsigned int needs_next;
473
476
  };
474
477
 
475
- #define GIT_PATH_DIRITER_INIT { {0}, 0, GIT_BUF_INIT, 0, INVALID_HANDLE_VALUE }
478
+ #define GIT_FS_PATH_DIRITER_INIT { {0}, 0, GIT_STR_INIT, 0, INVALID_HANDLE_VALUE }
476
479
 
477
480
  #else
478
481
 
479
- struct git_path_diriter
482
+ struct git_fs_path_diriter
480
483
  {
481
- git_buf path;
484
+ git_str path;
482
485
  size_t parent_len;
483
486
 
484
487
  unsigned int flags;
@@ -486,11 +489,11 @@ struct git_path_diriter
486
489
  DIR *dir;
487
490
 
488
491
  #ifdef GIT_USE_ICONV
489
- git_path_iconv_t ic;
492
+ git_fs_path_iconv_t ic;
490
493
  #endif
491
494
  };
492
495
 
493
- #define GIT_PATH_DIRITER_INIT { GIT_BUF_INIT }
496
+ #define GIT_FS_PATH_DIRITER_INIT { GIT_STR_INIT }
494
497
 
495
498
  #endif
496
499
 
@@ -502,8 +505,8 @@ struct git_path_diriter
502
505
  * @param flags Directory reader flags
503
506
  * @return 0 or an error code
504
507
  */
505
- extern int git_path_diriter_init(
506
- git_path_diriter *diriter,
508
+ extern int git_fs_path_diriter_init(
509
+ git_fs_path_diriter *diriter,
507
510
  const char *path,
508
511
  unsigned int flags);
509
512
 
@@ -514,7 +517,7 @@ extern int git_path_diriter_init(
514
517
  * @param diriter The directory iterator
515
518
  * @return 0, GIT_ITEROVER, or an error code
516
519
  */
517
- extern int git_path_diriter_next(git_path_diriter *diriter);
520
+ extern int git_fs_path_diriter_next(git_fs_path_diriter *diriter);
518
521
 
519
522
  /**
520
523
  * Returns the file name of the current item in the iterator.
@@ -524,10 +527,10 @@ extern int git_path_diriter_next(git_path_diriter *diriter);
524
527
  * @param diriter The directory iterator
525
528
  * @return 0 or an error code
526
529
  */
527
- extern int git_path_diriter_filename(
530
+ extern int git_fs_path_diriter_filename(
528
531
  const char **out,
529
532
  size_t *out_len,
530
- git_path_diriter *diriter);
533
+ git_fs_path_diriter *diriter);
531
534
 
532
535
  /**
533
536
  * Returns the full path of the current item in the iterator; that
@@ -539,10 +542,10 @@ extern int git_path_diriter_filename(
539
542
  * @param diriter The directory iterator
540
543
  * @return 0 or an error code
541
544
  */
542
- extern int git_path_diriter_fullpath(
545
+ extern int git_fs_path_diriter_fullpath(
543
546
  const char **out,
544
547
  size_t *out_len,
545
- git_path_diriter *diriter);
548
+ git_fs_path_diriter *diriter);
546
549
 
547
550
  /**
548
551
  * Performs an `lstat` on the current item in the iterator.
@@ -551,19 +554,19 @@ extern int git_path_diriter_fullpath(
551
554
  * @param diriter The directory iterator
552
555
  * @return 0 or an error code
553
556
  */
554
- extern int git_path_diriter_stat(struct stat *out, git_path_diriter *diriter);
557
+ extern int git_fs_path_diriter_stat(struct stat *out, git_fs_path_diriter *diriter);
555
558
 
556
559
  /**
557
560
  * Closes the directory iterator.
558
561
  *
559
562
  * @param diriter The directory iterator
560
563
  */
561
- extern void git_path_diriter_free(git_path_diriter *diriter);
564
+ extern void git_fs_path_diriter_free(git_fs_path_diriter *diriter);
562
565
 
563
566
  /**
564
567
  * Load all directory entries (except '.' and '..') into a vector.
565
568
  *
566
- * For cases where `git_path_direach()` is not appropriate, this
569
+ * For cases where `git_fs_path_direach()` is not appropriate, this
567
570
  * allows you to load the filenames in a directory into a vector
568
571
  * of strings. That vector can then be sorted, iterated, or whatever.
569
572
  * Remember to free alloc of the allocated strings when you are done.
@@ -573,9 +576,9 @@ extern void git_path_diriter_free(git_path_diriter *diriter);
573
576
  * @param prefix_len When inserting entries, the trailing part of path
574
577
  * will be prefixed after this length. I.e. given path "/a/b" and
575
578
  * prefix_len 3, the entries will look like "b/e1", "b/e2", etc.
576
- * @param flags Combination of GIT_PATH_DIR flags.
579
+ * @param flags Combination of GIT_FS_PATH_DIR flags.
577
580
  */
578
- extern int git_path_dirload(
581
+ extern int git_fs_path_dirload(
579
582
  git_vector *contents,
580
583
  const char *path,
581
584
  size_t prefix_len,
@@ -583,77 +586,105 @@ extern int git_path_dirload(
583
586
 
584
587
 
585
588
  /* Used for paths to repositories on the filesystem */
586
- extern bool git_path_is_local_file_url(const char *file_url);
587
- extern int git_path_from_url_or_path(git_buf *local_path_out, const char *url_or_path);
588
-
589
- /* Flags to determine path validity in `git_path_isvalid` */
590
- #define GIT_PATH_REJECT_TRAVERSAL (1 << 0)
591
- #define GIT_PATH_REJECT_DOT_GIT (1 << 1)
592
- #define GIT_PATH_REJECT_SLASH (1 << 2)
593
- #define GIT_PATH_REJECT_BACKSLASH (1 << 3)
594
- #define GIT_PATH_REJECT_TRAILING_DOT (1 << 4)
595
- #define GIT_PATH_REJECT_TRAILING_SPACE (1 << 5)
596
- #define GIT_PATH_REJECT_TRAILING_COLON (1 << 6)
597
- #define GIT_PATH_REJECT_DOS_PATHS (1 << 7)
598
- #define GIT_PATH_REJECT_NT_CHARS (1 << 8)
599
- #define GIT_PATH_REJECT_DOT_GIT_LITERAL (1 << 9)
600
- #define GIT_PATH_REJECT_DOT_GIT_HFS (1 << 10)
601
- #define GIT_PATH_REJECT_DOT_GIT_NTFS (1 << 11)
589
+ extern bool git_fs_path_is_local_file_url(const char *file_url);
590
+ extern int git_fs_path_from_url_or_path(git_str *local_path_out, const char *url_or_path);
591
+
592
+ /* Flags to determine path validity in `git_fs_path_isvalid` */
593
+ #define GIT_FS_PATH_REJECT_EMPTY_COMPONENT (1 << 0)
594
+ #define GIT_FS_PATH_REJECT_TRAVERSAL (1 << 1)
595
+ #define GIT_FS_PATH_REJECT_SLASH (1 << 2)
596
+ #define GIT_FS_PATH_REJECT_BACKSLASH (1 << 3)
597
+ #define GIT_FS_PATH_REJECT_TRAILING_DOT (1 << 4)
598
+ #define GIT_FS_PATH_REJECT_TRAILING_SPACE (1 << 5)
599
+ #define GIT_FS_PATH_REJECT_TRAILING_COLON (1 << 6)
600
+ #define GIT_FS_PATH_REJECT_DOS_PATHS (1 << 7)
601
+ #define GIT_FS_PATH_REJECT_NT_CHARS (1 << 8)
602
+ #define GIT_FS_PATH_REJECT_LONG_PATHS (1 << 9)
603
+
604
+ #define GIT_FS_PATH_REJECT_MAX (1 << 9)
602
605
 
603
606
  /* Default path safety for writing files to disk: since we use the
604
607
  * Win32 "File Namespace" APIs ("\\?\") we need to protect from
605
608
  * paths that the normal Win32 APIs would not write.
606
609
  */
607
610
  #ifdef GIT_WIN32
608
- # define GIT_PATH_REJECT_FILESYSTEM_DEFAULTS \
609
- GIT_PATH_REJECT_TRAVERSAL | \
610
- GIT_PATH_REJECT_BACKSLASH | \
611
- GIT_PATH_REJECT_TRAILING_DOT | \
612
- GIT_PATH_REJECT_TRAILING_SPACE | \
613
- GIT_PATH_REJECT_TRAILING_COLON | \
614
- GIT_PATH_REJECT_DOS_PATHS | \
615
- GIT_PATH_REJECT_NT_CHARS
611
+ # define GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS \
612
+ GIT_FS_PATH_REJECT_EMPTY_COMPONENT | \
613
+ GIT_FS_PATH_REJECT_TRAVERSAL | \
614
+ GIT_FS_PATH_REJECT_BACKSLASH | \
615
+ GIT_FS_PATH_REJECT_TRAILING_DOT | \
616
+ GIT_FS_PATH_REJECT_TRAILING_SPACE | \
617
+ GIT_FS_PATH_REJECT_TRAILING_COLON | \
618
+ GIT_FS_PATH_REJECT_DOS_PATHS | \
619
+ GIT_FS_PATH_REJECT_NT_CHARS
616
620
  #else
617
- # define GIT_PATH_REJECT_FILESYSTEM_DEFAULTS \
618
- GIT_PATH_REJECT_TRAVERSAL
621
+ # define GIT_FS_PATH_REJECT_FILESYSTEM_DEFAULTS \
622
+ GIT_FS_PATH_REJECT_EMPTY_COMPONENT | \
623
+ GIT_FS_PATH_REJECT_TRAVERSAL
619
624
  #endif
620
625
 
621
- /* Paths that should never be written into the working directory. */
622
- #define GIT_PATH_REJECT_WORKDIR_DEFAULTS \
623
- GIT_PATH_REJECT_FILESYSTEM_DEFAULTS | GIT_PATH_REJECT_DOT_GIT
626
+ /**
627
+ * Validate a filesystem path; with custom callbacks per-character and
628
+ * per-path component.
629
+ */
630
+ extern bool git_fs_path_str_is_valid_ext(
631
+ const git_str *path,
632
+ unsigned int flags,
633
+ bool (*validate_char_cb)(char ch, void *payload),
634
+ bool (*validate_component_cb)(const char *component, size_t len, void *payload),
635
+ bool (*validate_length_cb)(const char *component, size_t len, size_t utf8_char_len),
636
+ void *payload);
624
637
 
625
- /* Paths that should never be written to the index. */
626
- #define GIT_PATH_REJECT_INDEX_DEFAULTS \
627
- GIT_PATH_REJECT_TRAVERSAL | GIT_PATH_REJECT_DOT_GIT
638
+ GIT_INLINE(bool) git_fs_path_is_valid_ext(
639
+ const char *path,
640
+ unsigned int flags,
641
+ bool (*validate_char_cb)(char ch, void *payload),
642
+ bool (*validate_component_cb)(const char *component, size_t len, void *payload),
643
+ bool (*validate_length_cb)(const char *component, size_t len, size_t utf8_char_len),
644
+ void *payload)
645
+ {
646
+ const git_str str = GIT_STR_INIT_CONST(path, SIZE_MAX);
647
+ return git_fs_path_str_is_valid_ext(
648
+ &str,
649
+ flags,
650
+ validate_char_cb,
651
+ validate_component_cb,
652
+ validate_length_cb,
653
+ payload);
654
+ }
628
655
 
629
656
  /**
630
- * Validate a "bare" git path. This ensures that the given path is legal
631
- * to place in the index or a tree. This should be checked by mechanisms
632
- * like `git_index_add` and `git_treebuilder_insert` when taking user
633
- * data, and by `git_checkout` before constructing on-disk paths.
634
- *
635
- * This will ensure that a git path does not contain any "unsafe" components,
636
- * a '.' or '..' component, or a component that is ".git" (in any case).
637
- *
638
- * (Note: if you take or construct an on-disk path -- a workdir path,
639
- * a path to a git repository or a reference name that could be a loose
640
- * ref -- you should _also_ validate that with `git_path_validate_workdir`.)
641
- *
642
- * `repo` is optional. If specified, it will be used to determine the short
643
- * path name to reject (if `GIT_PATH_REJECT_DOS_SHORTNAME` is specified),
644
- * in addition to the default of "git~1".
657
+ * Validate a filesystem path. This ensures that the given path is legal
658
+ * and does not contain any "unsafe" components like path traversal ('.'
659
+ * or '..'), characters that are inappropriate for lesser filesystems
660
+ * (trailing ' ' or ':' characters), or filenames ("component names")
661
+ * that are not supported ('AUX', 'COM1").
645
662
  */
646
- extern bool git_path_validate(
647
- git_repository *repo,
663
+ GIT_INLINE(bool) git_fs_path_is_valid(
648
664
  const char *path,
649
- uint16_t mode,
650
- unsigned int flags);
665
+ unsigned int flags)
666
+ {
667
+ const git_str str = GIT_STR_INIT_CONST(path, SIZE_MAX);
668
+ return git_fs_path_str_is_valid_ext(&str, flags, NULL, NULL, NULL, NULL);
669
+ }
670
+
671
+ /** Validate a filesystem path in a `git_str`. */
672
+ GIT_INLINE(bool) git_fs_path_str_is_valid(
673
+ const git_str *path,
674
+ unsigned int flags)
675
+ {
676
+ return git_fs_path_str_is_valid_ext(path, flags, NULL, NULL, NULL, NULL);
677
+ }
678
+
679
+ extern int git_fs_path_validate_str_length_with_suffix(
680
+ git_str *path,
681
+ size_t suffix_len);
651
682
 
652
683
  /**
653
684
  * Validate an on-disk path, taking into account that it will have a
654
685
  * suffix appended (eg, `.lock`).
655
686
  */
656
- GIT_INLINE(int) git_path_validate_filesystem_with_suffix(
687
+ GIT_INLINE(int) git_fs_path_validate_filesystem_with_suffix(
657
688
  const char *path,
658
689
  size_t path_len,
659
690
  size_t suffix_len)
@@ -684,74 +715,76 @@ GIT_INLINE(int) git_path_validate_filesystem_with_suffix(
684
715
  * Windows.
685
716
  *
686
717
  * For paths within the working directory, you should use ensure that
687
- * `core.longpaths` is obeyed. Use `git_path_validate_workdir`.
718
+ * `core.longpaths` is obeyed. Use `git_fs_path_validate_workdir`.
688
719
  */
689
- GIT_INLINE(int) git_path_validate_filesystem(
720
+ GIT_INLINE(int) git_fs_path_validate_filesystem(
690
721
  const char *path,
691
722
  size_t path_len)
692
723
  {
693
- return git_path_validate_filesystem_with_suffix(path, path_len, 0);
724
+ return git_fs_path_validate_filesystem_with_suffix(path, path_len, 0);
694
725
  }
695
726
 
696
- /**
697
- * Validate a path relative to the repo's worktree. This ensures that
698
- * the given working tree path is valid for the operating system/platform.
699
- * This will ensure that an absolute path is smaller than MAX_PATH on
700
- * Windows, while keeping `core.longpaths` configuration settings in mind.
701
- *
702
- * This should be checked by mechamisms like `git_checkout` after
703
- * contructing on-disk paths and before trying to write them.
704
- *
705
- * If the repository is null, no repository configuration is applied.
706
- */
707
- extern int git_path_validate_workdir(
708
- git_repository *repo,
709
- const char *path);
710
- extern int git_path_validate_workdir_with_len(
711
- git_repository *repo,
712
- const char *path,
713
- size_t path_len);
714
- extern int git_path_validate_workdir_buf(
715
- git_repository *repo,
716
- git_buf *buf);
717
-
718
727
  /**
719
728
  * Convert any backslashes into slashes
720
729
  */
721
- int git_path_normalize_slashes(git_buf *out, const char *path);
730
+ int git_fs_path_normalize_slashes(git_str *out, const char *path);
722
731
 
723
- bool git_path_supports_symlinks(const char *dir);
732
+ bool git_fs_path_supports_symlinks(const char *dir);
724
733
 
725
734
  typedef enum {
726
- GIT_PATH_MOCK_OWNER_NONE = 0, /* do filesystem lookups as normal */
727
- GIT_PATH_MOCK_OWNER_SYSTEM = 1,
728
- GIT_PATH_MOCK_OWNER_CURRENT_USER = 2,
729
- GIT_PATH_MOCK_OWNER_OTHER = 3
730
- } git_path__mock_owner_t;
735
+ GIT_FS_PATH_OWNER_NONE = 0,
736
+
737
+ /** The file must be owned by the current user. */
738
+ GIT_FS_PATH_OWNER_CURRENT_USER = (1 << 0),
739
+
740
+ /** The file must be owned by the system account. */
741
+ GIT_FS_PATH_OWNER_ADMINISTRATOR = (1 << 1),
742
+
743
+ /**
744
+ * The file may be owned by a system account if the current
745
+ * user is in an administrator group. Windows only; this is
746
+ * a noop on non-Windows systems.
747
+ */
748
+ GIT_FS_PATH_USER_IS_ADMINISTRATOR = (1 << 2),
749
+
750
+ /**
751
+ * The file is owned by the current user, who is running `sudo`.
752
+ */
753
+ GIT_FS_PATH_OWNER_RUNNING_SUDO = (1 << 3),
754
+
755
+ /** The file may be owned by another user. */
756
+ GIT_FS_PATH_OWNER_OTHER = (1 << 4)
757
+ } git_fs_path_owner_t;
731
758
 
732
759
  /**
733
760
  * Sets the mock ownership for files; subsequent calls to
734
- * `git_path_owner_is_*` functions will return this data until cleared
735
- * with `GIT_PATH_MOCK_OWNER_NONE`.
761
+ * `git_fs_path_owner_is_*` functions will return this data until
762
+ * cleared with `GIT_FS_PATH_OWNER_NONE`.
736
763
  */
737
- void git_path__set_owner(git_path__mock_owner_t owner);
764
+ void git_fs_path__set_owner(git_fs_path_owner_t owner);
765
+
766
+ /** Verify that the file in question is owned by the given owner. */
767
+ int git_fs_path_owner_is(
768
+ bool *out,
769
+ const char *path,
770
+ git_fs_path_owner_t owner_type);
738
771
 
739
772
  /**
740
773
  * Verify that the file in question is owned by an administrator or system
741
774
  * account.
742
775
  */
743
- int git_path_owner_is_system(bool *out, const char *path);
776
+ int git_fs_path_owner_is_system(bool *out, const char *path);
744
777
 
745
778
  /**
746
779
  * Verify that the file in question is owned by the current user;
747
780
  */
748
781
 
749
- int git_path_owner_is_current_user(bool *out, const char *path);
782
+ int git_fs_path_owner_is_current_user(bool *out, const char *path);
750
783
 
751
784
  /**
752
- * Verify that the file in question is owned by an administrator or system
753
- * account _or_ the current user;
785
+ * Search the current PATH for the given executable, returning the full
786
+ * path if it is found.
754
787
  */
755
- int git_path_owner_is_system_or_current_user(bool *out, const char *path);
788
+ int git_fs_path_find_executable(git_str *fullpath, const char *executable);
756
789
 
757
790
  #endif