rugged 1.7.2 → 1.9.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 (361) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rugged/version.rb +1 -1
  3. data/vendor/libgit2/AUTHORS +1 -0
  4. data/vendor/libgit2/CMakeLists.txt +23 -10
  5. data/vendor/libgit2/COPYING +195 -1
  6. data/vendor/libgit2/cmake/{FindIconv.cmake → FindIntlIconv.cmake} +6 -0
  7. data/vendor/libgit2/cmake/FindLLHTTP.cmake +39 -0
  8. data/vendor/libgit2/cmake/SelectGSSAPI.cmake +1 -1
  9. data/vendor/libgit2/cmake/SelectHTTPParser.cmake +23 -8
  10. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +17 -8
  11. data/vendor/libgit2/cmake/SelectHashes.cmake +28 -11
  12. data/vendor/libgit2/cmake/SelectRegex.cmake +6 -1
  13. data/vendor/libgit2/cmake/SelectSSH.cmake +22 -17
  14. data/vendor/libgit2/cmake/SelectZlib.cmake +4 -0
  15. data/vendor/libgit2/deps/llhttp/CMakeLists.txt +8 -0
  16. data/vendor/libgit2/deps/llhttp/LICENSE-MIT +22 -0
  17. data/vendor/libgit2/deps/llhttp/api.c +510 -0
  18. data/vendor/libgit2/deps/llhttp/http.c +170 -0
  19. data/vendor/libgit2/deps/llhttp/llhttp.c +10168 -0
  20. data/vendor/libgit2/deps/llhttp/llhttp.h +897 -0
  21. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +1 -1
  22. data/vendor/libgit2/deps/ntlmclient/crypt_builtin_md4.c +311 -0
  23. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +2 -1
  24. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +0 -20
  25. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +4 -4
  26. data/vendor/libgit2/deps/ntlmclient/ntlm.c +21 -21
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +5 -4
  28. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +2 -1
  29. data/vendor/libgit2/deps/ntlmclient/utf8.h +1176 -721
  30. data/vendor/libgit2/deps/ntlmclient/util.h +11 -0
  31. data/vendor/libgit2/deps/pcre/CMakeLists.txt +1 -0
  32. data/vendor/libgit2/deps/xdiff/xmerge.c +2 -2
  33. data/vendor/libgit2/deps/zlib/CMakeLists.txt +6 -1
  34. data/vendor/libgit2/deps/zlib/LICENSE +22 -0
  35. data/vendor/libgit2/deps/zlib/adler32.c +5 -27
  36. data/vendor/libgit2/deps/zlib/crc32.c +94 -167
  37. data/vendor/libgit2/deps/zlib/deflate.c +358 -435
  38. data/vendor/libgit2/deps/zlib/deflate.h +41 -10
  39. data/vendor/libgit2/deps/zlib/gzguts.h +13 -18
  40. data/vendor/libgit2/deps/zlib/infback.c +17 -30
  41. data/vendor/libgit2/deps/zlib/inffast.c +1 -4
  42. data/vendor/libgit2/deps/zlib/inffast.h +1 -1
  43. data/vendor/libgit2/deps/zlib/inflate.c +36 -102
  44. data/vendor/libgit2/deps/zlib/inftrees.c +6 -11
  45. data/vendor/libgit2/deps/zlib/inftrees.h +6 -6
  46. data/vendor/libgit2/deps/zlib/trees.c +287 -352
  47. data/vendor/libgit2/deps/zlib/zconf.h +23 -14
  48. data/vendor/libgit2/deps/zlib/zlib.h +202 -202
  49. data/vendor/libgit2/deps/zlib/zutil.c +18 -44
  50. data/vendor/libgit2/deps/zlib/zutil.h +13 -33
  51. data/vendor/libgit2/include/git2/annotated_commit.h +12 -5
  52. data/vendor/libgit2/include/git2/apply.h +27 -6
  53. data/vendor/libgit2/include/git2/attr.h +17 -4
  54. data/vendor/libgit2/include/git2/blame.h +133 -28
  55. data/vendor/libgit2/include/git2/blob.h +71 -28
  56. data/vendor/libgit2/include/git2/branch.h +22 -15
  57. data/vendor/libgit2/include/git2/buffer.h +6 -4
  58. data/vendor/libgit2/include/git2/cert.h +2 -1
  59. data/vendor/libgit2/include/git2/checkout.h +83 -32
  60. data/vendor/libgit2/include/git2/cherrypick.h +10 -3
  61. data/vendor/libgit2/include/git2/clone.h +25 -9
  62. data/vendor/libgit2/include/git2/commit.h +132 -3
  63. data/vendor/libgit2/include/git2/common.h +120 -63
  64. data/vendor/libgit2/include/git2/config.h +93 -23
  65. data/vendor/libgit2/include/git2/credential.h +30 -2
  66. data/vendor/libgit2/include/git2/credential_helpers.h +1 -0
  67. data/vendor/libgit2/include/git2/deprecated.h +133 -3
  68. data/vendor/libgit2/include/git2/describe.h +13 -1
  69. data/vendor/libgit2/include/git2/diff.h +38 -8
  70. data/vendor/libgit2/include/git2/email.h +9 -29
  71. data/vendor/libgit2/include/git2/errors.h +46 -73
  72. data/vendor/libgit2/include/git2/filter.h +14 -7
  73. data/vendor/libgit2/include/git2/global.h +8 -1
  74. data/vendor/libgit2/include/git2/graph.h +3 -2
  75. data/vendor/libgit2/include/git2/ignore.h +10 -0
  76. data/vendor/libgit2/include/git2/index.h +99 -14
  77. data/vendor/libgit2/include/git2/indexer.h +21 -4
  78. data/vendor/libgit2/include/git2/mailmap.h +7 -1
  79. data/vendor/libgit2/include/git2/merge.h +46 -1
  80. data/vendor/libgit2/include/git2/message.h +2 -2
  81. data/vendor/libgit2/include/git2/net.h +3 -1
  82. data/vendor/libgit2/include/git2/notes.h +9 -6
  83. data/vendor/libgit2/include/git2/object.h +9 -8
  84. data/vendor/libgit2/include/git2/odb.h +91 -49
  85. data/vendor/libgit2/include/git2/odb_backend.h +80 -52
  86. data/vendor/libgit2/include/git2/oid.h +23 -24
  87. data/vendor/libgit2/include/git2/oidarray.h +7 -1
  88. data/vendor/libgit2/include/git2/pack.h +13 -1
  89. data/vendor/libgit2/include/git2/patch.h +2 -3
  90. data/vendor/libgit2/include/git2/pathspec.h +9 -0
  91. data/vendor/libgit2/include/git2/proxy.h +10 -0
  92. data/vendor/libgit2/include/git2/rebase.h +9 -6
  93. data/vendor/libgit2/include/git2/refdb.h +2 -2
  94. data/vendor/libgit2/include/git2/reflog.h +3 -2
  95. data/vendor/libgit2/include/git2/refs.h +9 -6
  96. data/vendor/libgit2/include/git2/refspec.h +14 -4
  97. data/vendor/libgit2/include/git2/remote.h +94 -18
  98. data/vendor/libgit2/include/git2/repository.h +57 -21
  99. data/vendor/libgit2/include/git2/reset.h +16 -3
  100. data/vendor/libgit2/include/git2/revert.h +9 -4
  101. data/vendor/libgit2/include/git2/revparse.h +3 -3
  102. data/vendor/libgit2/include/git2/revwalk.h +3 -2
  103. data/vendor/libgit2/include/git2/signature.h +46 -1
  104. data/vendor/libgit2/include/git2/stash.h +17 -3
  105. data/vendor/libgit2/include/git2/status.h +10 -6
  106. data/vendor/libgit2/include/git2/stdint.h +87 -85
  107. data/vendor/libgit2/include/git2/strarray.h +2 -3
  108. data/vendor/libgit2/include/git2/submodule.h +20 -9
  109. data/vendor/libgit2/include/git2/sys/alloc.h +12 -0
  110. data/vendor/libgit2/include/git2/sys/commit.h +77 -3
  111. data/vendor/libgit2/include/git2/sys/commit_graph.h +103 -62
  112. data/vendor/libgit2/include/git2/sys/config.h +80 -4
  113. data/vendor/libgit2/include/git2/sys/credential.h +4 -3
  114. data/vendor/libgit2/include/git2/sys/diff.h +21 -1
  115. data/vendor/libgit2/include/git2/sys/email.h +7 -0
  116. data/vendor/libgit2/include/git2/sys/errors.h +76 -0
  117. data/vendor/libgit2/include/git2/sys/filter.h +66 -3
  118. data/vendor/libgit2/include/git2/sys/hashsig.h +11 -0
  119. data/vendor/libgit2/include/git2/sys/index.h +3 -2
  120. data/vendor/libgit2/include/git2/sys/mempack.h +32 -2
  121. data/vendor/libgit2/include/git2/sys/merge.h +55 -7
  122. data/vendor/libgit2/include/git2/sys/midx.h +43 -4
  123. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -3
  124. data/vendor/libgit2/include/git2/sys/openssl.h +8 -1
  125. data/vendor/libgit2/include/git2/sys/path.h +12 -1
  126. data/vendor/libgit2/include/git2/sys/refdb_backend.h +40 -36
  127. data/vendor/libgit2/include/git2/sys/refs.h +3 -2
  128. data/vendor/libgit2/include/git2/sys/remote.h +8 -1
  129. data/vendor/libgit2/include/git2/sys/repository.h +63 -3
  130. data/vendor/libgit2/include/git2/sys/stream.h +11 -2
  131. data/vendor/libgit2/include/git2/sys/transport.h +24 -3
  132. data/vendor/libgit2/include/git2/tag.h +3 -1
  133. data/vendor/libgit2/include/git2/trace.h +9 -3
  134. data/vendor/libgit2/include/git2/transaction.h +3 -2
  135. data/vendor/libgit2/include/git2/transport.h +11 -3
  136. data/vendor/libgit2/include/git2/tree.h +16 -5
  137. data/vendor/libgit2/include/git2/types.h +19 -3
  138. data/vendor/libgit2/include/git2/version.h +44 -8
  139. data/vendor/libgit2/include/git2/worktree.h +16 -6
  140. data/vendor/libgit2/src/CMakeLists.txt +6 -4
  141. data/vendor/libgit2/src/cli/CMakeLists.txt +2 -2
  142. data/vendor/libgit2/src/cli/cmd.c +1 -1
  143. data/vendor/libgit2/src/cli/cmd.h +4 -0
  144. data/vendor/libgit2/src/cli/cmd_blame.c +287 -0
  145. data/vendor/libgit2/src/cli/cmd_cat_file.c +6 -8
  146. data/vendor/libgit2/src/cli/cmd_clone.c +5 -7
  147. data/vendor/libgit2/src/cli/cmd_config.c +241 -0
  148. data/vendor/libgit2/src/cli/cmd_hash_object.c +6 -8
  149. data/vendor/libgit2/src/cli/cmd_help.c +6 -7
  150. data/vendor/libgit2/src/cli/cmd_index_pack.c +114 -0
  151. data/vendor/libgit2/src/cli/cmd_init.c +102 -0
  152. data/vendor/libgit2/src/cli/common.c +168 -0
  153. data/vendor/libgit2/src/cli/common.h +63 -0
  154. data/vendor/libgit2/src/cli/error.h +1 -1
  155. data/vendor/libgit2/src/cli/main.c +52 -24
  156. data/vendor/libgit2/src/cli/opt.c +29 -3
  157. data/vendor/libgit2/src/cli/opt.h +21 -3
  158. data/vendor/libgit2/src/cli/opt_usage.c +102 -33
  159. data/vendor/libgit2/src/cli/opt_usage.h +6 -1
  160. data/vendor/libgit2/src/cli/progress.c +51 -2
  161. data/vendor/libgit2/src/cli/progress.h +12 -0
  162. data/vendor/libgit2/src/cli/unix/sighandler.c +2 -1
  163. data/vendor/libgit2/src/cli/win32/precompiled.h +1 -1
  164. data/vendor/libgit2/src/cli/win32/sighandler.c +1 -1
  165. data/vendor/libgit2/src/libgit2/CMakeLists.txt +26 -8
  166. data/vendor/libgit2/src/libgit2/apply.c +10 -13
  167. data/vendor/libgit2/src/libgit2/attr.c +30 -13
  168. data/vendor/libgit2/src/libgit2/attr_file.c +7 -2
  169. data/vendor/libgit2/src/libgit2/attr_file.h +2 -0
  170. data/vendor/libgit2/src/libgit2/attrcache.c +69 -33
  171. data/vendor/libgit2/src/libgit2/attrcache.h +5 -9
  172. data/vendor/libgit2/src/libgit2/blame.c +130 -44
  173. data/vendor/libgit2/src/libgit2/blame.h +1 -0
  174. data/vendor/libgit2/src/libgit2/cache.c +22 -17
  175. data/vendor/libgit2/src/libgit2/cache.h +7 -9
  176. data/vendor/libgit2/src/libgit2/checkout.c +34 -24
  177. data/vendor/libgit2/src/libgit2/checkout.h +0 -2
  178. data/vendor/libgit2/src/libgit2/cherrypick.c +1 -2
  179. data/vendor/libgit2/src/libgit2/clone.c +186 -166
  180. data/vendor/libgit2/src/libgit2/clone.h +4 -1
  181. data/vendor/libgit2/src/libgit2/commit.c +92 -0
  182. data/vendor/libgit2/src/libgit2/commit_graph.c +67 -56
  183. data/vendor/libgit2/src/libgit2/commit_graph.h +1 -2
  184. data/vendor/libgit2/src/libgit2/config.c +389 -298
  185. data/vendor/libgit2/src/libgit2/config.cmake.in +3 -0
  186. data/vendor/libgit2/src/libgit2/config.h +9 -4
  187. data/vendor/libgit2/src/libgit2/config_backend.h +8 -10
  188. data/vendor/libgit2/src/libgit2/config_cache.c +4 -5
  189. data/vendor/libgit2/src/libgit2/config_file.c +99 -88
  190. data/vendor/libgit2/src/libgit2/config_list.c +285 -0
  191. data/vendor/libgit2/src/libgit2/config_list.h +32 -0
  192. data/vendor/libgit2/src/libgit2/config_mem.c +194 -40
  193. data/vendor/libgit2/src/libgit2/config_parse.c +10 -9
  194. data/vendor/libgit2/src/libgit2/config_snapshot.c +24 -31
  195. data/vendor/libgit2/src/libgit2/describe.c +24 -24
  196. data/vendor/libgit2/src/libgit2/diff.c +1 -1
  197. data/vendor/libgit2/src/libgit2/diff_driver.c +12 -19
  198. data/vendor/libgit2/src/libgit2/diff_driver.h +2 -2
  199. data/vendor/libgit2/src/libgit2/diff_generate.c +3 -3
  200. data/vendor/libgit2/src/libgit2/diff_parse.c +2 -2
  201. data/vendor/libgit2/src/libgit2/diff_print.c +65 -9
  202. data/vendor/libgit2/src/libgit2/diff_tform.c +36 -8
  203. data/vendor/libgit2/src/libgit2/email.c +1 -0
  204. data/vendor/libgit2/src/libgit2/fetch.c +5 -3
  205. data/vendor/libgit2/src/libgit2/filter.c +5 -5
  206. data/vendor/libgit2/src/libgit2/git2.rc +3 -3
  207. data/vendor/libgit2/src/libgit2/grafts.c +18 -20
  208. data/vendor/libgit2/src/libgit2/grafts.h +0 -1
  209. data/vendor/libgit2/src/libgit2/graph.c +1 -1
  210. data/vendor/libgit2/src/libgit2/hashmap_oid.h +30 -0
  211. data/vendor/libgit2/src/libgit2/ignore.c +9 -5
  212. data/vendor/libgit2/src/libgit2/index.c +68 -90
  213. data/vendor/libgit2/src/libgit2/index.h +2 -2
  214. data/vendor/libgit2/src/libgit2/index_map.c +95 -0
  215. data/vendor/libgit2/src/libgit2/index_map.h +28 -0
  216. data/vendor/libgit2/src/libgit2/indexer.c +34 -38
  217. data/vendor/libgit2/src/libgit2/iterator.c +14 -8
  218. data/vendor/libgit2/src/libgit2/libgit2.c +153 -368
  219. data/vendor/libgit2/src/libgit2/mailmap.c +1 -1
  220. data/vendor/libgit2/src/libgit2/merge.c +42 -37
  221. data/vendor/libgit2/src/libgit2/merge_driver.c +2 -2
  222. data/vendor/libgit2/src/libgit2/midx.c +28 -15
  223. data/vendor/libgit2/src/libgit2/mwindow.c +38 -45
  224. data/vendor/libgit2/src/libgit2/mwindow.h +4 -0
  225. data/vendor/libgit2/src/libgit2/object.c +6 -5
  226. data/vendor/libgit2/src/libgit2/odb.c +5 -4
  227. data/vendor/libgit2/src/libgit2/odb_mempack.c +49 -17
  228. data/vendor/libgit2/src/libgit2/odb_pack.c +13 -5
  229. data/vendor/libgit2/src/libgit2/oid.c +32 -5
  230. data/vendor/libgit2/src/libgit2/oid.h +11 -0
  231. data/vendor/libgit2/src/libgit2/pack-objects.c +58 -31
  232. data/vendor/libgit2/src/libgit2/pack-objects.h +12 -4
  233. data/vendor/libgit2/src/libgit2/pack.c +30 -24
  234. data/vendor/libgit2/src/libgit2/pack.h +15 -10
  235. data/vendor/libgit2/src/libgit2/patch_parse.c +2 -2
  236. data/vendor/libgit2/src/libgit2/path.c +1 -1
  237. data/vendor/libgit2/src/libgit2/pathspec.c +1 -1
  238. data/vendor/libgit2/src/libgit2/push.c +79 -28
  239. data/vendor/libgit2/src/libgit2/push.h +1 -0
  240. data/vendor/libgit2/src/libgit2/refdb_fs.c +128 -61
  241. data/vendor/libgit2/src/libgit2/reflog.c +1 -2
  242. data/vendor/libgit2/src/libgit2/reflog.h +2 -0
  243. data/vendor/libgit2/src/libgit2/refs.c +26 -7
  244. data/vendor/libgit2/src/libgit2/refs.h +6 -1
  245. data/vendor/libgit2/src/libgit2/refspec.c +28 -1
  246. data/vendor/libgit2/src/libgit2/refspec.h +8 -0
  247. data/vendor/libgit2/src/libgit2/remote.c +121 -61
  248. data/vendor/libgit2/src/libgit2/repository.c +231 -51
  249. data/vendor/libgit2/src/libgit2/repository.h +10 -6
  250. data/vendor/libgit2/src/libgit2/revert.c +1 -2
  251. data/vendor/libgit2/src/libgit2/revparse.c +2 -2
  252. data/vendor/libgit2/src/libgit2/revwalk.c +13 -10
  253. data/vendor/libgit2/src/libgit2/revwalk.h +3 -3
  254. data/vendor/libgit2/src/libgit2/settings.c +468 -0
  255. data/vendor/libgit2/src/libgit2/settings.h +6 -2
  256. data/vendor/libgit2/src/libgit2/signature.c +132 -15
  257. data/vendor/libgit2/src/libgit2/signature.h +0 -1
  258. data/vendor/libgit2/src/libgit2/status.c +1 -1
  259. data/vendor/libgit2/src/libgit2/streams/mbedtls.c +54 -60
  260. data/vendor/libgit2/src/libgit2/streams/openssl.c +32 -7
  261. data/vendor/libgit2/src/libgit2/streams/openssl.h +2 -0
  262. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.c +4 -0
  263. data/vendor/libgit2/src/libgit2/streams/openssl_dynamic.h +3 -0
  264. data/vendor/libgit2/src/libgit2/streams/stransport.c +39 -7
  265. data/vendor/libgit2/src/libgit2/submodule.c +106 -63
  266. data/vendor/libgit2/src/libgit2/submodule.h +6 -7
  267. data/vendor/libgit2/src/libgit2/tag.c +1 -1
  268. data/vendor/libgit2/src/libgit2/trailer.c +6 -6
  269. data/vendor/libgit2/src/libgit2/transaction.c +26 -20
  270. data/vendor/libgit2/src/libgit2/transaction.h +4 -1
  271. data/vendor/libgit2/src/libgit2/transport.c +4 -1
  272. data/vendor/libgit2/src/libgit2/transports/credential.c +1 -1
  273. data/vendor/libgit2/src/libgit2/transports/http.c +1 -2
  274. data/vendor/libgit2/src/libgit2/transports/http.h +0 -10
  275. data/vendor/libgit2/src/libgit2/transports/httpclient.c +112 -72
  276. data/vendor/libgit2/src/libgit2/transports/httpparser.c +128 -0
  277. data/vendor/libgit2/src/libgit2/transports/httpparser.h +99 -0
  278. data/vendor/libgit2/src/libgit2/transports/local.c +8 -7
  279. data/vendor/libgit2/src/libgit2/transports/smart.c +20 -8
  280. data/vendor/libgit2/src/libgit2/transports/smart.h +4 -2
  281. data/vendor/libgit2/src/libgit2/transports/smart_pkt.c +2 -2
  282. data/vendor/libgit2/src/libgit2/transports/smart_protocol.c +55 -10
  283. data/vendor/libgit2/src/libgit2/transports/ssh.c +41 -1103
  284. data/vendor/libgit2/src/libgit2/transports/ssh_exec.c +347 -0
  285. data/vendor/libgit2/src/libgit2/transports/ssh_exec.h +26 -0
  286. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.c +1126 -0
  287. data/vendor/libgit2/src/libgit2/transports/ssh_libssh2.h +28 -0
  288. data/vendor/libgit2/src/libgit2/transports/winhttp.c +35 -7
  289. data/vendor/libgit2/src/libgit2/tree.c +34 -26
  290. data/vendor/libgit2/src/libgit2/tree.h +3 -2
  291. data/vendor/libgit2/src/libgit2/worktree.c +14 -17
  292. data/vendor/libgit2/src/util/CMakeLists.txt +4 -6
  293. data/vendor/libgit2/src/util/alloc.c +4 -1
  294. data/vendor/libgit2/src/util/allocators/debugalloc.c +73 -0
  295. data/vendor/libgit2/src/{cli/cli.h → util/allocators/debugalloc.h} +6 -9
  296. data/vendor/libgit2/src/util/allocators/stdalloc.c +0 -10
  297. data/vendor/libgit2/src/util/array.h +18 -17
  298. data/vendor/libgit2/src/util/cc-compat.h +2 -0
  299. data/vendor/libgit2/src/util/ctype_compat.h +70 -0
  300. data/vendor/libgit2/src/util/date.c +22 -14
  301. data/vendor/libgit2/src/util/date.h +12 -0
  302. data/vendor/libgit2/src/util/errors.c +401 -0
  303. data/vendor/libgit2/src/{libgit2 → util}/errors.h +21 -17
  304. data/vendor/libgit2/src/util/fs_path.c +15 -4
  305. data/vendor/libgit2/src/util/fs_path.h +23 -0
  306. data/vendor/libgit2/src/util/futils.c +6 -5
  307. data/vendor/libgit2/src/util/futils.h +13 -4
  308. data/vendor/libgit2/src/util/git2_features.h.in +12 -1
  309. data/vendor/libgit2/src/util/git2_util.h +6 -0
  310. data/vendor/libgit2/src/util/hash/openssl.c +152 -0
  311. data/vendor/libgit2/src/util/hash/openssl.h +17 -1
  312. data/vendor/libgit2/src/util/hash/sha.h +4 -1
  313. data/vendor/libgit2/src/util/hashmap.h +424 -0
  314. data/vendor/libgit2/src/util/hashmap_str.h +43 -0
  315. data/vendor/libgit2/src/util/integer.h +3 -1
  316. data/vendor/libgit2/src/util/net.c +13 -7
  317. data/vendor/libgit2/src/util/net.h +2 -0
  318. data/vendor/libgit2/src/util/pool.c +1 -1
  319. data/vendor/libgit2/src/util/pool.h +5 -0
  320. data/vendor/libgit2/src/util/pqueue.h +1 -1
  321. data/vendor/libgit2/src/util/process.h +222 -0
  322. data/vendor/libgit2/src/util/rand.c +1 -7
  323. data/vendor/libgit2/src/util/regexp.c +1 -1
  324. data/vendor/libgit2/src/util/sortedcache.c +14 -13
  325. data/vendor/libgit2/src/util/sortedcache.h +3 -3
  326. data/vendor/libgit2/src/util/str.c +2 -2
  327. data/vendor/libgit2/src/util/strlist.c +108 -0
  328. data/vendor/libgit2/src/util/strlist.h +36 -0
  329. data/vendor/libgit2/src/util/unix/posix.h +0 -2
  330. data/vendor/libgit2/src/util/unix/process.c +629 -0
  331. data/vendor/libgit2/src/util/unix/realpath.c +23 -5
  332. data/vendor/libgit2/src/util/util.c +2 -2
  333. data/vendor/libgit2/src/util/util.h +4 -38
  334. data/vendor/libgit2/src/util/vector.c +3 -3
  335. data/vendor/libgit2/src/util/vector.h +2 -2
  336. data/vendor/libgit2/src/util/win32/posix_w32.c +29 -6
  337. data/vendor/libgit2/src/util/win32/process.c +506 -0
  338. metadata +45 -28
  339. data/vendor/libgit2/deps/http-parser/CMakeLists.txt +0 -6
  340. data/vendor/libgit2/deps/http-parser/COPYING +0 -23
  341. data/vendor/libgit2/deps/http-parser/http_parser.c +0 -2182
  342. data/vendor/libgit2/deps/http-parser/http_parser.h +0 -305
  343. data/vendor/libgit2/deps/zlib/COPYING +0 -27
  344. data/vendor/libgit2/include/git2/sys/reflog.h +0 -21
  345. data/vendor/libgit2/src/libgit2/config_entries.c +0 -237
  346. data/vendor/libgit2/src/libgit2/config_entries.h +0 -24
  347. data/vendor/libgit2/src/libgit2/errors.c +0 -293
  348. data/vendor/libgit2/src/libgit2/idxmap.c +0 -157
  349. data/vendor/libgit2/src/libgit2/idxmap.h +0 -177
  350. data/vendor/libgit2/src/libgit2/libgit2.h +0 -15
  351. data/vendor/libgit2/src/libgit2/offmap.c +0 -101
  352. data/vendor/libgit2/src/libgit2/offmap.h +0 -133
  353. data/vendor/libgit2/src/libgit2/oidmap.c +0 -107
  354. data/vendor/libgit2/src/libgit2/oidmap.h +0 -128
  355. data/vendor/libgit2/src/libgit2/threadstate.c +0 -97
  356. data/vendor/libgit2/src/libgit2/threadstate.h +0 -22
  357. data/vendor/libgit2/src/libgit2/transports/ssh.h +0 -14
  358. data/vendor/libgit2/src/util/khash.h +0 -615
  359. data/vendor/libgit2/src/util/strmap.c +0 -100
  360. data/vendor/libgit2/src/util/strmap.h +0 -131
  361. /data/vendor/libgit2/cmake/{FindHTTPParser.cmake → FindHTTP_Parser.cmake} +0 -0
@@ -129,9 +129,9 @@ static size_t match_string(const char *date, const char *str)
129
129
  for (i = 0; *date; date++, str++, i++) {
130
130
  if (*date == *str)
131
131
  continue;
132
- if (toupper(*date) == toupper(*str))
132
+ if (git__toupper(*date) == git__toupper(*str))
133
133
  continue;
134
- if (!isalnum(*date))
134
+ if (!git__isalnum(*date))
135
135
  break;
136
136
  return 0;
137
137
  }
@@ -143,7 +143,7 @@ static int skip_alpha(const char *date)
143
143
  int i = 0;
144
144
  do {
145
145
  i++;
146
- } while (isalpha(date[i]));
146
+ } while (git__isalpha(date[i]));
147
147
  return i;
148
148
  }
149
149
 
@@ -251,7 +251,7 @@ static size_t match_multi_number(unsigned long num, char c, const char *date, ch
251
251
 
252
252
  num2 = strtol(end+1, &end, 10);
253
253
  num3 = -1;
254
- if (*end == c && isdigit(end[1]))
254
+ if (*end == c && git__isdigit(end[1]))
255
255
  num3 = strtol(end+1, &end, 10);
256
256
 
257
257
  /* Time? Date? */
@@ -349,7 +349,7 @@ static size_t match_digit(const char *date, struct tm *tm, int *offset, int *tm_
349
349
  case '.':
350
350
  case '/':
351
351
  case '-':
352
- if (isdigit(end[1])) {
352
+ if (git__isdigit(end[1])) {
353
353
  size_t match = match_multi_number(num, *end, date, end, tm);
354
354
  if (match)
355
355
  return match;
@@ -364,7 +364,7 @@ static size_t match_digit(const char *date, struct tm *tm, int *offset, int *tm_
364
364
  n = 0;
365
365
  do {
366
366
  n++;
367
- } while (isdigit(date[n]));
367
+ } while (git__isdigit(date[n]));
368
368
 
369
369
  /* Four-digit year or a timezone? */
370
370
  if (n == 4) {
@@ -514,11 +514,11 @@ static int parse_date_basic(const char *date, git_time_t *timestamp, int *offset
514
514
  if (!c || c == '\n')
515
515
  break;
516
516
 
517
- if (isalpha(c))
517
+ if (git__isalpha(c))
518
518
  match = match_alpha(date, &tm, offset);
519
- else if (isdigit(c))
519
+ else if (git__isdigit(c))
520
520
  match = match_digit(date, &tm, offset, &tm_gmt);
521
- else if ((c == '-' || c == '+') && isdigit(date[1]))
521
+ else if ((c == '-' || c == '+') && git__isdigit(date[1]))
522
522
  match = match_tz(date, offset);
523
523
 
524
524
  if (!match) {
@@ -682,7 +682,7 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, struct tm
682
682
  const char *end = date;
683
683
  int i;
684
684
 
685
- while (isalpha(*++end))
685
+ while (git__isalpha(*++end))
686
686
  /* scan to non-alpha */;
687
687
 
688
688
  for (i = 0; i < 12; i++) {
@@ -783,7 +783,7 @@ static const char *approxidate_digit(const char *date, struct tm *tm, int *num)
783
783
  case '.':
784
784
  case '/':
785
785
  case '-':
786
- if (isdigit(end[1])) {
786
+ if (git__isdigit(end[1])) {
787
787
  size_t match = match_multi_number(number, *end, date, end, tm);
788
788
  if (match)
789
789
  return date + match;
@@ -843,13 +843,13 @@ static git_time_t approxidate_str(const char *date,
843
843
  if (!c)
844
844
  break;
845
845
  date++;
846
- if (isdigit(c)) {
846
+ if (git__isdigit(c)) {
847
847
  pending_number(&tm, &number);
848
848
  date = approxidate_digit(date-1, &tm, &number);
849
849
  touched = 1;
850
850
  continue;
851
851
  }
852
- if (isalpha(c))
852
+ if (git__isalpha(c))
853
853
  date = approxidate_alpha(date-1, &tm, &now, &number, &touched);
854
854
  }
855
855
  pending_number(&tm, &number);
@@ -858,7 +858,7 @@ static git_time_t approxidate_str(const char *date,
858
858
  return update_tm(&tm, &now, 0);
859
859
  }
860
860
 
861
- int git_date_parse(git_time_t *out, const char *date)
861
+ int git_date_offset_parse(git_time_t *out, int *out_offset, const char *date)
862
862
  {
863
863
  time_t time_sec;
864
864
  git_time_t timestamp;
@@ -866,6 +866,7 @@ int git_date_parse(git_time_t *out, const char *date)
866
866
 
867
867
  if (!parse_date_basic(date, &timestamp, &offset)) {
868
868
  *out = timestamp;
869
+ *out_offset = offset;
869
870
  return 0;
870
871
  }
871
872
 
@@ -876,6 +877,13 @@ int git_date_parse(git_time_t *out, const char *date)
876
877
  return error_ret;
877
878
  }
878
879
 
880
+ int git_date_parse(git_time_t *out, const char *date)
881
+ {
882
+ int offset;
883
+
884
+ return git_date_offset_parse(out, &offset, date);
885
+ }
886
+
879
887
  int git_date_rfc2822_fmt(git_str *out, git_time_t time, int offset)
880
888
  {
881
889
  time_t t;
@@ -10,9 +10,21 @@
10
10
  #include "util.h"
11
11
  #include "str.h"
12
12
 
13
+ /*
14
+ * Parse a string into a value as a git_time_t with a timezone offset.
15
+ *
16
+ * Sample valid input:
17
+ * - "yesterday"
18
+ * - "July 17, 2003"
19
+ * - "2003-7-17 08:23i+03"
20
+ */
21
+ extern int git_date_offset_parse(git_time_t *out, int *out_offset, const char *date);
22
+
13
23
  /*
14
24
  * Parse a string into a value as a git_time_t.
15
25
  *
26
+ * Timezone offset is ignored.
27
+ *
16
28
  * Sample valid input:
17
29
  * - "yesterday"
18
30
  * - "July 17, 2003"
@@ -0,0 +1,401 @@
1
+ /*
2
+ * Copyright (C) the libgit2 contributors. All rights reserved.
3
+ *
4
+ * This file is part of libgit2, distributed under the GNU GPL v2 with
5
+ * a Linking Exception. For full terms see the included COPYING file.
6
+ */
7
+
8
+ #include "git2_util.h"
9
+
10
+ #include "errors.h"
11
+ #include "posix.h"
12
+ #include "str.h"
13
+ #include "runtime.h"
14
+
15
+ /*
16
+ * Some static error data that is used when we're out of memory, TLS
17
+ * has not been setup, or TLS has failed.
18
+ */
19
+
20
+ static git_error oom_error = {
21
+ "Out of memory",
22
+ GIT_ERROR_NOMEMORY
23
+ };
24
+
25
+ static git_error uninitialized_error = {
26
+ "library has not been initialized",
27
+ GIT_ERROR_INVALID
28
+ };
29
+
30
+ static git_error tlsdata_error = {
31
+ "thread-local data initialization failure",
32
+ GIT_ERROR_THREAD
33
+ };
34
+
35
+ static git_error no_error = {
36
+ "no error",
37
+ GIT_ERROR_NONE
38
+ };
39
+
40
+ #define IS_STATIC_ERROR(err) \
41
+ ((err) == &oom_error || (err) == &uninitialized_error || \
42
+ (err) == &tlsdata_error || (err) == &no_error)
43
+
44
+ /* Per-thread error state (TLS) */
45
+
46
+ static git_tlsdata_key tls_key;
47
+
48
+ struct error_threadstate {
49
+ /* The error message buffer. */
50
+ git_str message;
51
+
52
+ /* Error information, set by `git_error_set` and friends. */
53
+ git_error error;
54
+
55
+ /*
56
+ * The last error to occur; points to the error member of this
57
+ * struct _or_ a static error.
58
+ */
59
+ git_error *last;
60
+ };
61
+
62
+ static void threadstate_dispose(struct error_threadstate *threadstate)
63
+ {
64
+ if (!threadstate)
65
+ return;
66
+
67
+ git_str_dispose(&threadstate->message);
68
+ }
69
+
70
+ static struct error_threadstate *threadstate_get(void)
71
+ {
72
+ struct error_threadstate *threadstate;
73
+
74
+ if ((threadstate = git_tlsdata_get(tls_key)) != NULL)
75
+ return threadstate;
76
+
77
+ /*
78
+ * Avoid git__malloc here, since if it fails, it sets an error
79
+ * message, which requires thread state, which would allocate
80
+ * here, which would fail, which would set an error message...
81
+ */
82
+
83
+ if ((threadstate = git__allocator.gmalloc(
84
+ sizeof(struct error_threadstate),
85
+ __FILE__, __LINE__)) == NULL)
86
+ return NULL;
87
+
88
+ memset(threadstate, 0, sizeof(struct error_threadstate));
89
+
90
+ if (git_str_init(&threadstate->message, 0) < 0) {
91
+ git__allocator.gfree(threadstate);
92
+ return NULL;
93
+ }
94
+
95
+ git_tlsdata_set(tls_key, threadstate);
96
+ return threadstate;
97
+ }
98
+
99
+ static void GIT_SYSTEM_CALL threadstate_free(void *threadstate)
100
+ {
101
+ threadstate_dispose(threadstate);
102
+ git__free(threadstate);
103
+ }
104
+
105
+ static void git_error_global_shutdown(void)
106
+ {
107
+ struct error_threadstate *threadstate;
108
+
109
+ threadstate = git_tlsdata_get(tls_key);
110
+ git_tlsdata_set(tls_key, NULL);
111
+
112
+ threadstate_dispose(threadstate);
113
+ git__free(threadstate);
114
+
115
+ git_tlsdata_dispose(tls_key);
116
+ }
117
+
118
+ int git_error_global_init(void)
119
+ {
120
+ if (git_tlsdata_init(&tls_key, &threadstate_free) != 0)
121
+ return -1;
122
+
123
+ return git_runtime_shutdown_register(git_error_global_shutdown);
124
+ }
125
+
126
+ static void set_error_from_buffer(int error_class)
127
+ {
128
+ struct error_threadstate *threadstate = threadstate_get();
129
+ git_error *error;
130
+ git_str *buf;
131
+
132
+ if (!threadstate)
133
+ return;
134
+
135
+ error = &threadstate->error;
136
+ buf = &threadstate->message;
137
+
138
+ error->message = buf->ptr;
139
+ error->klass = error_class;
140
+
141
+ threadstate->last = error;
142
+ }
143
+
144
+ static void set_error(int error_class, char *string)
145
+ {
146
+ struct error_threadstate *threadstate = threadstate_get();
147
+ git_str *buf;
148
+
149
+ if (!threadstate)
150
+ return;
151
+
152
+ buf = &threadstate->message;
153
+
154
+ git_str_clear(buf);
155
+
156
+ if (string)
157
+ git_str_puts(buf, string);
158
+
159
+ if (!git_str_oom(buf))
160
+ set_error_from_buffer(error_class);
161
+ }
162
+
163
+ void git_error_set_oom(void)
164
+ {
165
+ struct error_threadstate *threadstate = threadstate_get();
166
+
167
+ if (!threadstate)
168
+ return;
169
+
170
+ threadstate->last = &oom_error;
171
+ }
172
+
173
+ void git_error_set(int error_class, const char *fmt, ...)
174
+ {
175
+ va_list ap;
176
+
177
+ va_start(ap, fmt);
178
+ git_error_vset(error_class, fmt, ap);
179
+ va_end(ap);
180
+ }
181
+
182
+ void git_error_vset(int error_class, const char *fmt, va_list ap)
183
+ {
184
+ #ifdef GIT_WIN32
185
+ DWORD win32_error_code = (error_class == GIT_ERROR_OS) ? GetLastError() : 0;
186
+ #endif
187
+
188
+ struct error_threadstate *threadstate = threadstate_get();
189
+ int error_code = (error_class == GIT_ERROR_OS) ? errno : 0;
190
+ git_str *buf;
191
+
192
+ if (!threadstate)
193
+ return;
194
+
195
+ buf = &threadstate->message;
196
+
197
+ git_str_clear(buf);
198
+
199
+ if (fmt) {
200
+ git_str_vprintf(buf, fmt, ap);
201
+ if (error_class == GIT_ERROR_OS)
202
+ git_str_PUTS(buf, ": ");
203
+ }
204
+
205
+ if (error_class == GIT_ERROR_OS) {
206
+ #ifdef GIT_WIN32
207
+ char *win32_error = git_win32_get_error_message(win32_error_code);
208
+ if (win32_error) {
209
+ git_str_puts(buf, win32_error);
210
+ git__free(win32_error);
211
+
212
+ SetLastError(0);
213
+ }
214
+ else
215
+ #endif
216
+ if (error_code)
217
+ git_str_puts(buf, strerror(error_code));
218
+
219
+ if (error_code)
220
+ errno = 0;
221
+ }
222
+
223
+ if (!git_str_oom(buf))
224
+ set_error_from_buffer(error_class);
225
+ }
226
+
227
+ int git_error_set_str(int error_class, const char *string)
228
+ {
229
+ struct error_threadstate *threadstate = threadstate_get();
230
+ git_str *buf;
231
+
232
+ GIT_ASSERT_ARG(string);
233
+
234
+ if (!threadstate)
235
+ return -1;
236
+
237
+ buf = &threadstate->message;
238
+
239
+ git_str_clear(buf);
240
+ git_str_puts(buf, string);
241
+
242
+ if (git_str_oom(buf))
243
+ return -1;
244
+
245
+ set_error_from_buffer(error_class);
246
+ return 0;
247
+ }
248
+
249
+ void git_error_clear(void)
250
+ {
251
+ struct error_threadstate *threadstate = threadstate_get();
252
+
253
+ if (!threadstate)
254
+ return;
255
+
256
+ if (threadstate->last != NULL) {
257
+ set_error(0, NULL);
258
+ threadstate->last = NULL;
259
+ }
260
+
261
+ errno = 0;
262
+ #ifdef GIT_WIN32
263
+ SetLastError(0);
264
+ #endif
265
+ }
266
+
267
+ bool git_error_exists(void)
268
+ {
269
+ struct error_threadstate *threadstate;
270
+
271
+ if ((threadstate = threadstate_get()) == NULL)
272
+ return true;
273
+
274
+ return threadstate->last != NULL;
275
+ }
276
+
277
+ const git_error *git_error_last(void)
278
+ {
279
+ struct error_threadstate *threadstate;
280
+
281
+ /* If the library is not initialized, return a static error. */
282
+ if (!git_runtime_init_count())
283
+ return &uninitialized_error;
284
+
285
+ if ((threadstate = threadstate_get()) == NULL)
286
+ return &tlsdata_error;
287
+
288
+ if (!threadstate->last)
289
+ return &no_error;
290
+
291
+ return threadstate->last;
292
+ }
293
+
294
+ int git_error_save(git_error **out)
295
+ {
296
+ struct error_threadstate *threadstate = threadstate_get();
297
+ git_error *error, *dup;
298
+
299
+ if (!threadstate) {
300
+ *out = &tlsdata_error;
301
+ return -1;
302
+ }
303
+
304
+ error = threadstate->last;
305
+
306
+ if (!error || error == &no_error) {
307
+ *out = &no_error;
308
+ return 0;
309
+ } else if (IS_STATIC_ERROR(error)) {
310
+ *out = error;
311
+ return 0;
312
+ }
313
+
314
+ if ((dup = git__malloc(sizeof(git_error))) == NULL) {
315
+ *out = &oom_error;
316
+ return -1;
317
+ }
318
+
319
+ dup->klass = error->klass;
320
+ dup->message = git__strdup(error->message);
321
+
322
+ if (!dup->message) {
323
+ *out = &oom_error;
324
+ return -1;
325
+ }
326
+
327
+ *out = dup;
328
+ return 0;
329
+ }
330
+
331
+ int git_error_restore(git_error *error)
332
+ {
333
+ struct error_threadstate *threadstate = threadstate_get();
334
+
335
+ GIT_ASSERT_ARG(error);
336
+
337
+ if (IS_STATIC_ERROR(error) && threadstate)
338
+ threadstate->last = error;
339
+ else
340
+ set_error(error->klass, error->message);
341
+
342
+ git_error_free(error);
343
+ return 0;
344
+ }
345
+
346
+ void git_error_free(git_error *error)
347
+ {
348
+ if (!error)
349
+ return;
350
+
351
+ if (IS_STATIC_ERROR(error))
352
+ return;
353
+
354
+ git__free(error->message);
355
+ git__free(error);
356
+ }
357
+
358
+ int git_error_system_last(void)
359
+ {
360
+ #ifdef GIT_WIN32
361
+ return GetLastError();
362
+ #else
363
+ return errno;
364
+ #endif
365
+ }
366
+
367
+ void git_error_system_set(int code)
368
+ {
369
+ #ifdef GIT_WIN32
370
+ SetLastError(code);
371
+ #else
372
+ errno = code;
373
+ #endif
374
+ }
375
+
376
+ /* Deprecated error values and functions */
377
+
378
+ #ifndef GIT_DEPRECATE_HARD
379
+
380
+ #include "git2/deprecated.h"
381
+
382
+ const git_error *giterr_last(void)
383
+ {
384
+ return git_error_last();
385
+ }
386
+
387
+ void giterr_clear(void)
388
+ {
389
+ git_error_clear();
390
+ }
391
+
392
+ void giterr_set_str(int error_class, const char *string)
393
+ {
394
+ git_error_set_str(error_class, string);
395
+ }
396
+
397
+ void giterr_set_oom(void)
398
+ {
399
+ git_error_set_oom();
400
+ }
401
+ #endif
@@ -8,13 +8,22 @@
8
8
  #ifndef INCLUDE_errors_h__
9
9
  #define INCLUDE_errors_h__
10
10
 
11
- #include "common.h"
11
+ #include "git2_util.h"
12
+ #include "git2/sys/errors.h"
13
+
14
+ /* Initialize the error thread-state. */
15
+ int git_error_global_init(void);
12
16
 
13
17
  /*
14
18
  * `vprintf`-style formatting for the error message for this thread.
15
19
  */
16
20
  void git_error_vset(int error_class, const char *fmt, va_list ap);
17
21
 
22
+ /**
23
+ * Determines whether an error exists.
24
+ */
25
+ bool git_error_exists(void);
26
+
18
27
  /**
19
28
  * Set error message for user callback if needed.
20
29
  *
@@ -27,9 +36,8 @@ GIT_INLINE(int) git_error_set_after_callback_function(
27
36
  int error_code, const char *action)
28
37
  {
29
38
  if (error_code) {
30
- const git_error *e = git_error_last();
31
- if (!e || !e->message)
32
- git_error_set(e ? e->klass : GIT_ERROR_CALLBACK,
39
+ if (!git_error_exists())
40
+ git_error_set(GIT_ERROR_CALLBACK,
33
41
  "%s callback returned %d", action, error_code);
34
42
  }
35
43
  return error_code;
@@ -53,28 +61,24 @@ int git_error_system_last(void);
53
61
  */
54
62
  void git_error_system_set(int code);
55
63
 
56
- /**
57
- * Structure to preserve libgit2 error state
58
- */
59
- typedef struct {
60
- int error_code;
61
- unsigned int oom : 1;
62
- git_error error_msg;
63
- } git_error_state;
64
-
65
64
  /**
66
65
  * Capture current error state to restore later, returning error code.
67
66
  * If `error_code` is zero, this does not clear the current error state.
68
67
  * You must either restore this error state, or free it.
68
+ *
69
+ * This function returns 0 on success, or -1 on failure. If the function
70
+ * fails, the `out` structure is set to the failure error message and
71
+ * the normal system error message is not updated.
69
72
  */
70
- extern int git_error_state_capture(git_error_state *state, int error_code);
73
+ extern int git_error_save(git_error **out);
71
74
 
72
75
  /**
73
- * Restore error state to a previous value, returning saved error code.
76
+ * Restore thread error state to the given value. The given value is
77
+ * freed and `git_error_free` need not be called on it.
74
78
  */
75
- extern int git_error_state_restore(git_error_state *state);
79
+ extern int git_error_restore(git_error *error);
76
80
 
77
81
  /** Free an error state. */
78
- extern void git_error_state_free(git_error_state *state);
82
+ extern void git_error_free(git_error *error);
79
83
 
80
84
  #endif
@@ -419,6 +419,16 @@ int git_fs_path_to_dir(git_str *path)
419
419
  return git_str_oom(path) ? -1 : 0;
420
420
  }
421
421
 
422
+ size_t git_fs_path_dirlen(const char *path)
423
+ {
424
+ size_t len = strlen(path);
425
+
426
+ while (len > 1 && path[len - 1] == '/')
427
+ len--;
428
+
429
+ return len;
430
+ }
431
+
422
432
  void git_fs_path_string_to_dir(char *path, size_t size)
423
433
  {
424
434
  size_t end = strlen(path);
@@ -1938,12 +1948,13 @@ static int sudo_uid_lookup(uid_t *out)
1938
1948
  {
1939
1949
  git_str uid_str = GIT_STR_INIT;
1940
1950
  int64_t uid;
1941
- int error;
1951
+ int error = -1;
1942
1952
 
1943
- if ((error = git__getenv(&uid_str, "SUDO_UID")) == 0 &&
1944
- (error = git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10)) == 0 &&
1945
- uid == (int64_t)((uid_t)uid)) {
1953
+ if (git__getenv(&uid_str, "SUDO_UID") == 0 &&
1954
+ git__strntol64(&uid, uid_str.ptr, uid_str.size, NULL, 10) == 0 &&
1955
+ uid == (int64_t)((uid_t)uid)) {
1946
1956
  *out = (uid_t)uid;
1957
+ error = 0;
1947
1958
  }
1948
1959
 
1949
1960
  git_str_dispose(&uid_str);
@@ -86,6 +86,29 @@ extern int git_fs_path_to_dir(git_str *path);
86
86
  */
87
87
  extern void git_fs_path_string_to_dir(char *path, size_t size);
88
88
 
89
+ /**
90
+ * Provides the length of the given path string with no trailing
91
+ * slashes.
92
+ */
93
+ size_t git_fs_path_dirlen(const char *path);
94
+
95
+ /**
96
+ * Returns nonzero if the given path is a filesystem root; on Windows, this
97
+ * means a drive letter (eg `A:/`, `C:\`). On POSIX this is `/`.
98
+ */
99
+ GIT_INLINE(int) git_fs_path_is_root(const char *name)
100
+ {
101
+ #ifdef GIT_WIN32
102
+ if (((name[0] >= 'A' && name[0] <= 'Z') || (name[0] >= 'a' && name[0] <= 'z')) &&
103
+ name[1] == ':' &&
104
+ (name[2] == '/' || name[2] == '\\') &&
105
+ name[3] == '\0')
106
+ return 1;
107
+ #endif
108
+
109
+ return (name[0] == '/' && name[1] == '\0');
110
+ }
111
+
89
112
  /**
90
113
  * Taken from git.git; returns nonzero if the given path is "." or "..".
91
114
  */