rugged 1.7.2 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
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
  */