rugged 1.1.1 → 1.2.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 (277) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -0
  3. data/README.md +1 -1
  4. data/ext/rugged/rugged.c +7 -4
  5. data/ext/rugged/rugged_object.c +1 -1
  6. data/ext/rugged/rugged_repo.c +3 -3
  7. data/lib/rugged/repository.rb +2 -2
  8. data/lib/rugged/version.rb +1 -1
  9. data/vendor/libgit2/CMakeLists.txt +11 -6
  10. data/vendor/libgit2/COPYING +109 -1
  11. data/vendor/libgit2/cmake/Findfutimens.cmake +14 -0
  12. data/vendor/libgit2/cmake/SelectHTTPSBackend.cmake +4 -0
  13. data/vendor/libgit2/cmake/SelectHashes.cmake +1 -0
  14. data/vendor/libgit2/deps/chromium-zlib/CMakeLists.txt +101 -0
  15. data/vendor/libgit2/deps/ntlmclient/CMakeLists.txt +17 -5
  16. data/vendor/libgit2/deps/ntlmclient/crypt.h +14 -9
  17. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.c +20 -20
  18. data/vendor/libgit2/deps/ntlmclient/crypt_commoncrypto.h +3 -3
  19. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.c +37 -36
  20. data/vendor/libgit2/deps/ntlmclient/crypt_mbedtls.h +4 -3
  21. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.c +178 -51
  22. data/vendor/libgit2/deps/ntlmclient/crypt_openssl.h +74 -5
  23. data/vendor/libgit2/deps/ntlmclient/ntlm.c +150 -118
  24. data/vendor/libgit2/deps/ntlmclient/ntlm.h +13 -9
  25. data/vendor/libgit2/deps/ntlmclient/ntlmclient.h +16 -3
  26. data/vendor/libgit2/deps/ntlmclient/unicode.h +10 -4
  27. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.c +16 -27
  28. data/vendor/libgit2/deps/ntlmclient/unicode_builtin.h +20 -0
  29. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.c +28 -52
  30. data/vendor/libgit2/deps/ntlmclient/unicode_iconv.h +22 -0
  31. data/vendor/libgit2/include/git2/attr.h +89 -0
  32. data/vendor/libgit2/include/git2/blame.h +93 -42
  33. data/vendor/libgit2/include/git2/blob.h +14 -2
  34. data/vendor/libgit2/include/git2/branch.h +25 -0
  35. data/vendor/libgit2/include/git2/cert.h +42 -5
  36. data/vendor/libgit2/include/git2/checkout.h +28 -12
  37. data/vendor/libgit2/include/git2/commit.h +35 -19
  38. data/vendor/libgit2/include/git2/common.h +14 -4
  39. data/vendor/libgit2/include/git2/deprecated.h +206 -6
  40. data/vendor/libgit2/include/git2/diff.h +34 -19
  41. data/vendor/libgit2/include/git2/errors.h +6 -6
  42. data/vendor/libgit2/include/git2/filter.h +57 -17
  43. data/vendor/libgit2/include/git2/graph.h +20 -2
  44. data/vendor/libgit2/include/git2/index.h +2 -2
  45. data/vendor/libgit2/include/git2/odb.h +29 -0
  46. data/vendor/libgit2/include/git2/patch.h +8 -0
  47. data/vendor/libgit2/include/git2/rebase.h +25 -1
  48. data/vendor/libgit2/include/git2/refs.h +6 -2
  49. data/vendor/libgit2/include/git2/remote.h +59 -6
  50. data/vendor/libgit2/include/git2/revparse.h +5 -5
  51. data/vendor/libgit2/include/git2/status.h +115 -59
  52. data/vendor/libgit2/include/git2/submodule.h +9 -0
  53. data/vendor/libgit2/include/git2/sys/commit_graph.h +174 -0
  54. data/vendor/libgit2/include/git2/sys/filter.h +49 -28
  55. data/vendor/libgit2/include/git2/sys/midx.h +74 -0
  56. data/vendor/libgit2/include/git2/sys/odb_backend.h +7 -0
  57. data/vendor/libgit2/include/git2/sys/transport.h +1 -0
  58. data/vendor/libgit2/include/git2/tag.h +12 -0
  59. data/vendor/libgit2/include/git2/tree.h +0 -14
  60. data/vendor/libgit2/include/git2/types.h +9 -0
  61. data/vendor/libgit2/include/git2/version.h +4 -4
  62. data/vendor/libgit2/include/git2/worktree.h +1 -0
  63. data/vendor/libgit2/src/CMakeLists.txt +25 -4
  64. data/vendor/libgit2/src/alloc.c +21 -8
  65. data/vendor/libgit2/src/allocators/failalloc.c +92 -0
  66. data/vendor/libgit2/src/allocators/failalloc.h +23 -0
  67. data/vendor/libgit2/src/allocators/stdalloc.c +41 -10
  68. data/vendor/libgit2/src/allocators/win32_leakcheck.c +118 -0
  69. data/vendor/libgit2/src/allocators/{win32_crtdbg.h → win32_leakcheck.h} +3 -3
  70. data/vendor/libgit2/src/annotated_commit.c +21 -9
  71. data/vendor/libgit2/src/apply.c +16 -7
  72. data/vendor/libgit2/src/array.h +11 -11
  73. data/vendor/libgit2/src/attr.c +181 -74
  74. data/vendor/libgit2/src/attr_file.c +84 -39
  75. data/vendor/libgit2/src/attr_file.h +32 -11
  76. data/vendor/libgit2/src/attrcache.c +42 -37
  77. data/vendor/libgit2/src/attrcache.h +4 -5
  78. data/vendor/libgit2/src/blame.c +11 -5
  79. data/vendor/libgit2/src/blob.c +35 -24
  80. data/vendor/libgit2/src/branch.c +69 -17
  81. data/vendor/libgit2/src/buffer.c +334 -25
  82. data/vendor/libgit2/src/buffer.h +153 -2
  83. data/vendor/libgit2/src/cache.c +2 -2
  84. data/vendor/libgit2/src/cache.h +7 -7
  85. data/vendor/libgit2/src/cc-compat.h +10 -2
  86. data/vendor/libgit2/src/checkout.c +48 -26
  87. data/vendor/libgit2/src/cherrypick.c +6 -2
  88. data/vendor/libgit2/src/clone.c +41 -47
  89. data/vendor/libgit2/src/commit.c +41 -28
  90. data/vendor/libgit2/src/commit_graph.c +1209 -0
  91. data/vendor/libgit2/src/commit_graph.h +162 -0
  92. data/vendor/libgit2/src/commit_list.c +46 -0
  93. data/vendor/libgit2/src/commit_list.h +2 -0
  94. data/vendor/libgit2/src/common.h +25 -2
  95. data/vendor/libgit2/src/config.c +37 -15
  96. data/vendor/libgit2/src/config_cache.c +5 -3
  97. data/vendor/libgit2/src/config_file.c +16 -8
  98. data/vendor/libgit2/src/config_parse.c +4 -6
  99. data/vendor/libgit2/src/crlf.c +16 -6
  100. data/vendor/libgit2/src/date.c +4 -3
  101. data/vendor/libgit2/src/delta.c +1 -1
  102. data/vendor/libgit2/src/describe.c +6 -3
  103. data/vendor/libgit2/src/diff.c +11 -8
  104. data/vendor/libgit2/src/diff_driver.c +21 -17
  105. data/vendor/libgit2/src/diff_file.c +2 -6
  106. data/vendor/libgit2/src/diff_generate.c +46 -17
  107. data/vendor/libgit2/src/diff_print.c +19 -6
  108. data/vendor/libgit2/src/diff_stats.c +7 -5
  109. data/vendor/libgit2/src/diff_tform.c +9 -8
  110. data/vendor/libgit2/src/diff_xdiff.c +4 -2
  111. data/vendor/libgit2/src/diff_xdiff.h +1 -1
  112. data/vendor/libgit2/src/errors.c +24 -19
  113. data/vendor/libgit2/src/features.h.in +5 -1
  114. data/vendor/libgit2/src/fetch.c +5 -2
  115. data/vendor/libgit2/src/fetchhead.c +8 -4
  116. data/vendor/libgit2/src/filebuf.c +9 -7
  117. data/vendor/libgit2/src/filter.c +206 -110
  118. data/vendor/libgit2/src/filter.h +24 -5
  119. data/vendor/libgit2/src/futils.c +5 -5
  120. data/vendor/libgit2/src/futils.h +1 -1
  121. data/vendor/libgit2/src/graph.c +64 -9
  122. data/vendor/libgit2/src/hash/sha1/collisiondetect.c +3 -3
  123. data/vendor/libgit2/src/hash/sha1/common_crypto.c +3 -3
  124. data/vendor/libgit2/src/hash/sha1/generic.h +1 -1
  125. data/vendor/libgit2/src/hash/sha1/mbedtls.c +12 -12
  126. data/vendor/libgit2/src/hash/sha1/openssl.c +3 -3
  127. data/vendor/libgit2/src/hash/sha1/sha1dc/sha1.c +0 -2
  128. data/vendor/libgit2/src/hash/sha1/win32.c +15 -11
  129. data/vendor/libgit2/src/hash.c +16 -13
  130. data/vendor/libgit2/src/hash.h +1 -1
  131. data/vendor/libgit2/src/hashsig.c +23 -10
  132. data/vendor/libgit2/src/ident.c +13 -3
  133. data/vendor/libgit2/src/ignore.c +35 -19
  134. data/vendor/libgit2/src/index.c +106 -70
  135. data/vendor/libgit2/src/index.h +1 -1
  136. data/vendor/libgit2/src/indexer.c +31 -29
  137. data/vendor/libgit2/src/integer.h +64 -2
  138. data/vendor/libgit2/src/iterator.c +36 -24
  139. data/vendor/libgit2/src/iterator.h +1 -1
  140. data/vendor/libgit2/src/khash.h +2 -11
  141. data/vendor/libgit2/src/{settings.c → libgit2.c} +117 -50
  142. data/vendor/libgit2/src/libgit2.h +15 -0
  143. data/vendor/libgit2/src/mailmap.c +23 -10
  144. data/vendor/libgit2/src/map.h +3 -3
  145. data/vendor/libgit2/src/merge.c +70 -30
  146. data/vendor/libgit2/src/merge.h +2 -1
  147. data/vendor/libgit2/src/merge_driver.c +19 -13
  148. data/vendor/libgit2/src/merge_file.c +11 -3
  149. data/vendor/libgit2/src/message.c +3 -1
  150. data/vendor/libgit2/src/midx.c +471 -10
  151. data/vendor/libgit2/src/midx.h +28 -1
  152. data/vendor/libgit2/src/mwindow.c +103 -59
  153. data/vendor/libgit2/src/mwindow.h +3 -3
  154. data/vendor/libgit2/src/net.c +127 -3
  155. data/vendor/libgit2/src/net.h +16 -2
  156. data/vendor/libgit2/src/netops.c +6 -4
  157. data/vendor/libgit2/src/netops.h +2 -2
  158. data/vendor/libgit2/src/notes.c +10 -10
  159. data/vendor/libgit2/src/object.c +22 -14
  160. data/vendor/libgit2/src/odb.c +285 -48
  161. data/vendor/libgit2/src/odb.h +16 -2
  162. data/vendor/libgit2/src/odb_loose.c +28 -18
  163. data/vendor/libgit2/src/odb_mempack.c +1 -1
  164. data/vendor/libgit2/src/odb_pack.c +391 -114
  165. data/vendor/libgit2/src/oid.c +5 -4
  166. data/vendor/libgit2/src/pack-objects.c +54 -48
  167. data/vendor/libgit2/src/pack.c +329 -119
  168. data/vendor/libgit2/src/pack.h +25 -7
  169. data/vendor/libgit2/src/patch.c +14 -7
  170. data/vendor/libgit2/src/patch_generate.c +2 -2
  171. data/vendor/libgit2/src/patch_parse.c +2 -1
  172. data/vendor/libgit2/src/path.c +98 -53
  173. data/vendor/libgit2/src/path.h +79 -6
  174. data/vendor/libgit2/src/pathspec.c +8 -8
  175. data/vendor/libgit2/src/pool.c +13 -7
  176. data/vendor/libgit2/src/posix.c +11 -3
  177. data/vendor/libgit2/src/reader.c +10 -6
  178. data/vendor/libgit2/src/rebase.c +93 -49
  179. data/vendor/libgit2/src/refdb.c +30 -13
  180. data/vendor/libgit2/src/refdb_fs.c +121 -69
  181. data/vendor/libgit2/src/reflog.c +19 -14
  182. data/vendor/libgit2/src/refs.c +76 -41
  183. data/vendor/libgit2/src/refspec.c +32 -12
  184. data/vendor/libgit2/src/remote.c +272 -102
  185. data/vendor/libgit2/src/remote.h +2 -1
  186. data/vendor/libgit2/src/repository.c +176 -103
  187. data/vendor/libgit2/src/repository.h +12 -1
  188. data/vendor/libgit2/src/reset.c +7 -6
  189. data/vendor/libgit2/src/revert.c +6 -2
  190. data/vendor/libgit2/src/revparse.c +14 -9
  191. data/vendor/libgit2/src/revwalk.c +32 -15
  192. data/vendor/libgit2/src/runtime.c +162 -0
  193. data/vendor/libgit2/src/runtime.h +62 -0
  194. data/vendor/libgit2/src/settings.h +11 -0
  195. data/vendor/libgit2/src/signature.c +6 -5
  196. data/vendor/libgit2/src/sortedcache.h +10 -8
  197. data/vendor/libgit2/src/stash.c +3 -1
  198. data/vendor/libgit2/src/status.c +7 -4
  199. data/vendor/libgit2/src/strarray.c +2 -1
  200. data/vendor/libgit2/src/streams/mbedtls.c +14 -17
  201. data/vendor/libgit2/src/streams/mbedtls.h +1 -1
  202. data/vendor/libgit2/src/streams/openssl.c +101 -201
  203. data/vendor/libgit2/src/streams/openssl.h +9 -1
  204. data/vendor/libgit2/src/streams/openssl_dynamic.c +309 -0
  205. data/vendor/libgit2/src/streams/openssl_dynamic.h +348 -0
  206. data/vendor/libgit2/src/streams/openssl_legacy.c +203 -0
  207. data/vendor/libgit2/src/streams/openssl_legacy.h +63 -0
  208. data/vendor/libgit2/src/streams/registry.c +5 -6
  209. data/vendor/libgit2/src/streams/socket.c +6 -2
  210. data/vendor/libgit2/src/streams/stransport.c +6 -3
  211. data/vendor/libgit2/src/streams/tls.c +5 -3
  212. data/vendor/libgit2/src/submodule.c +128 -62
  213. data/vendor/libgit2/src/submodule.h +9 -9
  214. data/vendor/libgit2/src/sysdir.c +4 -6
  215. data/vendor/libgit2/src/tag.c +47 -11
  216. data/vendor/libgit2/src/thread.c +140 -0
  217. data/vendor/libgit2/src/thread.h +479 -0
  218. data/vendor/libgit2/src/threadstate.c +83 -0
  219. data/vendor/libgit2/src/threadstate.h +24 -0
  220. data/vendor/libgit2/src/trace.c +2 -2
  221. data/vendor/libgit2/src/trace.h +17 -13
  222. data/vendor/libgit2/src/transaction.c +19 -8
  223. data/vendor/libgit2/src/transport.c +3 -3
  224. data/vendor/libgit2/src/transports/auth.c +1 -1
  225. data/vendor/libgit2/src/transports/auth_negotiate.c +11 -4
  226. data/vendor/libgit2/src/transports/auth_ntlm.c +10 -6
  227. data/vendor/libgit2/src/transports/credential.c +15 -7
  228. data/vendor/libgit2/src/transports/git.c +1 -3
  229. data/vendor/libgit2/src/transports/http.c +19 -17
  230. data/vendor/libgit2/src/transports/http.h +1 -0
  231. data/vendor/libgit2/src/transports/httpclient.c +53 -26
  232. data/vendor/libgit2/src/transports/httpclient.h +1 -1
  233. data/vendor/libgit2/src/transports/local.c +3 -3
  234. data/vendor/libgit2/src/transports/smart.c +12 -7
  235. data/vendor/libgit2/src/transports/smart.h +1 -1
  236. data/vendor/libgit2/src/transports/smart_protocol.c +11 -5
  237. data/vendor/libgit2/src/transports/ssh.c +51 -17
  238. data/vendor/libgit2/src/transports/winhttp.c +41 -31
  239. data/vendor/libgit2/src/tree.c +100 -77
  240. data/vendor/libgit2/src/tree.h +1 -0
  241. data/vendor/libgit2/src/tsort.c +0 -2
  242. data/vendor/libgit2/src/unix/map.c +3 -1
  243. data/vendor/libgit2/src/unix/pthread.h +2 -1
  244. data/vendor/libgit2/src/utf8.c +150 -0
  245. data/vendor/libgit2/src/utf8.h +52 -0
  246. data/vendor/libgit2/src/util.c +53 -129
  247. data/vendor/libgit2/src/util.h +33 -39
  248. data/vendor/libgit2/src/vector.c +23 -19
  249. data/vendor/libgit2/src/vector.h +4 -2
  250. data/vendor/libgit2/src/win32/findfile.c +4 -2
  251. data/vendor/libgit2/src/win32/map.c +1 -1
  252. data/vendor/libgit2/src/win32/msvc-compat.h +9 -1
  253. data/vendor/libgit2/src/win32/path_w32.c +22 -24
  254. data/vendor/libgit2/src/win32/path_w32.h +0 -1
  255. data/vendor/libgit2/src/win32/posix_w32.c +7 -1
  256. data/vendor/libgit2/src/win32/precompiled.h +0 -1
  257. data/vendor/libgit2/src/win32/reparse.h +4 -4
  258. data/vendor/libgit2/src/win32/thread.c +24 -15
  259. data/vendor/libgit2/src/win32/thread.h +1 -1
  260. data/vendor/libgit2/src/win32/w32_buffer.c +3 -3
  261. data/vendor/libgit2/src/win32/w32_common.h +18 -9
  262. data/vendor/libgit2/src/win32/{w32_crtdbg_stacktrace.c → w32_leakcheck.c} +269 -33
  263. data/vendor/libgit2/src/win32/w32_leakcheck.h +222 -0
  264. data/vendor/libgit2/src/win32/w32_util.h +6 -6
  265. data/vendor/libgit2/src/worktree.c +27 -16
  266. data/vendor/libgit2/src/zstream.c +1 -1
  267. metadata +32 -16
  268. data/vendor/libgit2/src/allocators/win32_crtdbg.c +0 -118
  269. data/vendor/libgit2/src/buf_text.c +0 -316
  270. data/vendor/libgit2/src/buf_text.h +0 -122
  271. data/vendor/libgit2/src/global.c +0 -363
  272. data/vendor/libgit2/src/global.h +0 -41
  273. data/vendor/libgit2/src/thread-utils.c +0 -58
  274. data/vendor/libgit2/src/thread-utils.h +0 -369
  275. data/vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h +0 -127
  276. data/vendor/libgit2/src/win32/w32_stack.c +0 -188
  277. data/vendor/libgit2/src/win32/w32_stack.h +0 -140
@@ -0,0 +1,222 @@
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
+ #ifndef INCLUDE_win32_leakcheck_h__
9
+ #define INCLUDE_win32_leakcheck_h__
10
+
11
+ #include "common.h"
12
+
13
+ /* Initialize the win32 leak checking system. */
14
+ int git_win32_leakcheck_global_init(void);
15
+
16
+ #if defined(GIT_WIN32_LEAKCHECK)
17
+
18
+ #include <stdlib.h>
19
+ #include <crtdbg.h>
20
+
21
+ #include "git2/errors.h"
22
+ #include "strnlen.h"
23
+
24
+ bool git_win32_leakcheck_has_leaks(void);
25
+
26
+ /* Stack frames (for stack tracing, below) */
27
+
28
+ /**
29
+ * This type defines a callback to be used to augment a C stacktrace
30
+ * with "aux" data. This can be used, for example, to allow LibGit2Sharp
31
+ * (or other interpreted consumer libraries) to give us C# stacktrace
32
+ * data for the PInvoke.
33
+ *
34
+ * This callback will be called during crtdbg-instrumented allocs.
35
+ *
36
+ * @param aux_id [out] A returned "aux_id" representing a unique
37
+ * (de-duped at the C# layer) stacktrace. "aux_id" 0 is reserved
38
+ * to mean no aux stacktrace data.
39
+ */
40
+ typedef void (*git_win32_leakcheck_stack_aux_cb_alloc)(unsigned int *aux_id);
41
+
42
+ /**
43
+ * This type defines a callback to be used to augment the output of
44
+ * a stacktrace. This will be used to request the C# layer format
45
+ * the C# stacktrace associated with "aux_id" into the provided
46
+ * buffer.
47
+ *
48
+ * This callback will be called during leak reporting.
49
+ *
50
+ * @param aux_id The "aux_id" key associated with a stacktrace.
51
+ * @param aux_msg A buffer where a formatted message should be written.
52
+ * @param aux_msg_len The size of the buffer.
53
+ */
54
+ typedef void (*git_win32_leakcheck_stack_aux_cb_lookup)(unsigned int aux_id, char *aux_msg, size_t aux_msg_len);
55
+
56
+ /**
57
+ * Register an "aux" data provider to augment our C stacktrace data.
58
+ *
59
+ * This can be used, for example, to allow LibGit2Sharp (or other
60
+ * interpreted consumer libraries) to give us the C# stacktrace of
61
+ * the PInvoke.
62
+ *
63
+ * If you choose to use this feature, it should be registered during
64
+ * initialization and not changed for the duration of the process.
65
+ */
66
+ int git_win32_leakcheck_stack_set_aux_cb(
67
+ git_win32_leakcheck_stack_aux_cb_alloc cb_alloc,
68
+ git_win32_leakcheck_stack_aux_cb_lookup cb_lookup);
69
+
70
+ /**
71
+ * Maximum number of stackframes to record for a
72
+ * single stacktrace.
73
+ */
74
+ #define GIT_WIN32_LEAKCHECK_STACK_MAX_FRAMES 30
75
+
76
+ /**
77
+ * Wrapper containing the raw unprocessed stackframe
78
+ * data for a single stacktrace and any "aux_id".
79
+ *
80
+ * I put the aux_id first so leaks will be sorted by it.
81
+ * So, for example, if a specific callstack in C# leaks
82
+ * a repo handle, all of the pointers within the associated
83
+ * repo pointer will be grouped together.
84
+ */
85
+ typedef struct {
86
+ unsigned int aux_id;
87
+ unsigned int nr_frames;
88
+ void *frames[GIT_WIN32_LEAKCHECK_STACK_MAX_FRAMES];
89
+ } git_win32_leakcheck_stack_raw_data;
90
+
91
+ /**
92
+ * Capture raw stack trace data for the current process/thread.
93
+ *
94
+ * @param skip Number of initial frames to skip. Pass 0 to
95
+ * begin with the caller of this routine. Pass 1 to begin
96
+ * with its caller. And so on.
97
+ */
98
+ int git_win32_leakcheck_stack_capture(git_win32_leakcheck_stack_raw_data *pdata, int skip);
99
+
100
+ /**
101
+ * Compare 2 raw stacktraces with the usual -1,0,+1 result.
102
+ * This includes any "aux_id" values in the comparison, so that
103
+ * our de-dup is also "aux" context relative.
104
+ */
105
+ int git_win32_leakcheck_stack_compare(
106
+ git_win32_leakcheck_stack_raw_data *d1,
107
+ git_win32_leakcheck_stack_raw_data *d2);
108
+
109
+ /**
110
+ * Format raw stacktrace data into buffer WITHOUT using any mallocs.
111
+ *
112
+ * @param prefix String written before each frame; defaults to "\t".
113
+ * @param suffix String written after each frame; defaults to "\n".
114
+ */
115
+ int git_win32_leakcheck_stack_format(
116
+ char *pbuf, size_t buf_len,
117
+ const git_win32_leakcheck_stack_raw_data *pdata,
118
+ const char *prefix, const char *suffix);
119
+
120
+ /**
121
+ * Convenience routine to capture and format stacktrace into
122
+ * a buffer WITHOUT using any mallocs. This is primarily a
123
+ * wrapper for testing.
124
+ *
125
+ * @param skip Number of initial frames to skip. Pass 0 to
126
+ * begin with the caller of this routine. Pass 1 to begin
127
+ * with its caller. And so on.
128
+ * @param prefix String written before each frame; defaults to "\t".
129
+ * @param suffix String written after each frame; defaults to "\n".
130
+ */
131
+ int git_win32_leakcheck_stack(
132
+ char * pbuf, size_t buf_len,
133
+ int skip,
134
+ const char *prefix, const char *suffix);
135
+
136
+ /* Stack tracing */
137
+
138
+ /* MSVC CRTDBG memory leak reporting.
139
+ *
140
+ * We DO NOT use the "_CRTDBG_MAP_ALLOC" macro described in the MSVC
141
+ * documentation because all allocs/frees in libgit2 already go through
142
+ * the "git__" routines defined in this file. Simply using the normal
143
+ * reporting mechanism causes all leaks to be attributed to a routine
144
+ * here in util.h (ie, the actual call to calloc()) rather than the
145
+ * caller of git__calloc().
146
+ *
147
+ * Therefore, we declare a set of "git__crtdbg__" routines to replace
148
+ * the corresponding "git__" routines and re-define the "git__" symbols
149
+ * as macros. This allows us to get and report the file:line info of
150
+ * the real caller.
151
+ *
152
+ * We DO NOT replace the "git__free" routine because it needs to remain
153
+ * a function pointer because it is used as a function argument when
154
+ * setting up various structure "destructors".
155
+ *
156
+ * We also DO NOT use the "_CRTDBG_MAP_ALLOC" macro because it causes
157
+ * "free" to be remapped to "_free_dbg" and this causes problems for
158
+ * structures which define a field named "free".
159
+ *
160
+ * Finally, CRTDBG must be explicitly enabled and configured at program
161
+ * startup. See tests/main.c for an example.
162
+ */
163
+
164
+ /**
165
+ * Checkpoint options.
166
+ */
167
+ typedef enum git_win32_leakcheck_stacktrace_options {
168
+ /**
169
+ * Set checkpoint marker.
170
+ */
171
+ GIT_WIN32_LEAKCHECK_STACKTRACE_SET_MARK = (1 << 0),
172
+
173
+ /**
174
+ * Dump leaks since last checkpoint marker.
175
+ * May not be combined with _LEAKS_TOTAL.
176
+ *
177
+ * Note that this may generate false positives for global TLS
178
+ * error state and other global caches that aren't cleaned up
179
+ * until the thread/process terminates. So when using this
180
+ * around a region of interest, also check the final (at exit)
181
+ * dump before digging into leaks reported here.
182
+ */
183
+ GIT_WIN32_LEAKCHECK_STACKTRACE_LEAKS_SINCE_MARK = (1 << 1),
184
+
185
+ /**
186
+ * Dump leaks since init. May not be combined
187
+ * with _LEAKS_SINCE_MARK.
188
+ */
189
+ GIT_WIN32_LEAKCHECK_STACKTRACE_LEAKS_TOTAL = (1 << 2),
190
+
191
+ /**
192
+ * Suppress printing during dumps.
193
+ * Just return leak count.
194
+ */
195
+ GIT_WIN32_LEAKCHECK_STACKTRACE_QUIET = (1 << 3),
196
+
197
+ } git_win32_leakcheck_stacktrace_options;
198
+
199
+ /**
200
+ * Checkpoint memory state and/or dump unique stack traces of
201
+ * current memory leaks.
202
+ *
203
+ * @return number of unique leaks (relative to requested starting
204
+ * point) or error.
205
+ */
206
+ int git_win32_leakcheck_stacktrace_dump(
207
+ git_win32_leakcheck_stacktrace_options opt,
208
+ const char *label);
209
+
210
+ /**
211
+ * Construct stacktrace and append it to the global buffer.
212
+ * Return pointer to start of this string. On any error or
213
+ * lack of buffer space, just return the given file buffer
214
+ * so it will behave as usual.
215
+ *
216
+ * This should ONLY be called by our internal memory allocations
217
+ * routines.
218
+ */
219
+ const char *git_win32_leakcheck_stacktrace(int skip, const char *file);
220
+
221
+ #endif
222
+ #endif
@@ -74,8 +74,8 @@ GIT_INLINE(void) git_win32__filetime_to_timespec(
74
74
  const FILETIME *ft,
75
75
  struct timespec *ts)
76
76
  {
77
- long long winTime = ((long long)ft->dwHighDateTime << 32) + ft->dwLowDateTime;
78
- winTime -= 116444736000000000LL; /* Windows to Unix Epoch conversion */
77
+ int64_t winTime = ((int64_t)ft->dwHighDateTime << 32) + ft->dwLowDateTime;
78
+ winTime -= INT64_C(116444736000000000); /* Windows to Unix Epoch conversion */
79
79
  ts->tv_sec = (time_t)(winTime / 10000000);
80
80
  #ifdef GIT_USE_NSEC
81
81
  ts->tv_nsec = (winTime % 10000000) * 100;
@@ -87,11 +87,11 @@ GIT_INLINE(void) git_win32__filetime_to_timespec(
87
87
  GIT_INLINE(void) git_win32__timeval_to_filetime(
88
88
  FILETIME *ft, const struct p_timeval tv)
89
89
  {
90
- long long ticks = (tv.tv_sec * 10000000LL) +
91
- (tv.tv_usec * 10LL) + 116444736000000000LL;
90
+ int64_t ticks = (tv.tv_sec * INT64_C(10000000)) +
91
+ (tv.tv_usec * INT64_C(10)) + INT64_C(116444736000000000);
92
92
 
93
- ft->dwHighDateTime = ((ticks >> 32) & 0xffffffffLL);
94
- ft->dwLowDateTime = (ticks & 0xffffffffLL);
93
+ ft->dwHighDateTime = ((ticks >> 32) & INT64_C(0xffffffff));
94
+ ft->dwLowDateTime = (ticks & INT64_C(0xffffffff));
95
95
  }
96
96
 
97
97
  GIT_INLINE(void) git_win32__stat_init(
@@ -37,12 +37,13 @@ int git_worktree_list(git_strarray *wts, git_repository *repo)
37
37
  size_t i, len;
38
38
  int error;
39
39
 
40
- assert(wts && repo);
40
+ GIT_ASSERT_ARG(wts);
41
+ GIT_ASSERT_ARG(repo);
41
42
 
42
43
  wts->count = 0;
43
44
  wts->strings = NULL;
44
45
 
45
- if ((error = git_buf_printf(&path, "%s/worktrees/", repo->commondir)) < 0)
46
+ if ((error = git_buf_joinpath(&path, repo->commondir, "worktrees/")) < 0)
46
47
  goto exit;
47
48
  if (!git_path_exists(path.ptr) || git_path_is_empty_dir(path.ptr))
48
49
  goto exit;
@@ -73,7 +74,8 @@ char *git_worktree__read_link(const char *base, const char *file)
73
74
  {
74
75
  git_buf path = GIT_BUF_INIT, buf = GIT_BUF_INIT;
75
76
 
76
- assert(base && file);
77
+ GIT_ASSERT_ARG_WITH_RETVAL(base, NULL);
78
+ GIT_ASSERT_ARG_WITH_RETVAL(file, NULL);
77
79
 
78
80
  if (git_buf_joinpath(&path, base, file) < 0)
79
81
  goto err;
@@ -106,7 +108,9 @@ static int write_wtfile(const char *base, const char *file, const git_buf *buf)
106
108
  git_buf path = GIT_BUF_INIT;
107
109
  int err;
108
110
 
109
- assert(base && file && buf);
111
+ GIT_ASSERT_ARG(base);
112
+ GIT_ASSERT_ARG(file);
113
+ GIT_ASSERT_ARG(buf);
110
114
 
111
115
  if ((err = git_buf_joinpath(&path, base, file)) < 0)
112
116
  goto out;
@@ -131,6 +135,9 @@ static int open_worktree_dir(git_worktree **out, const char *parent, const char
131
135
  goto out;
132
136
  }
133
137
 
138
+ if ((error = git_path_validate_workdir(NULL, dir)) < 0)
139
+ goto out;
140
+
134
141
  if ((wt = git__calloc(1, sizeof(*wt))) == NULL) {
135
142
  error = -1;
136
143
  goto out;
@@ -170,11 +177,12 @@ int git_worktree_lookup(git_worktree **out, git_repository *repo, const char *na
170
177
  git_worktree *wt = NULL;
171
178
  int error;
172
179
 
173
- assert(repo && name);
180
+ GIT_ASSERT_ARG(repo);
181
+ GIT_ASSERT_ARG(name);
174
182
 
175
183
  *out = NULL;
176
184
 
177
- if ((error = git_buf_printf(&path, "%s/worktrees/%s", repo->commondir, name)) < 0)
185
+ if ((error = git_buf_join3(&path, '/', repo->commondir, "worktrees", name)) < 0)
178
186
  goto out;
179
187
 
180
188
  if ((error = (open_worktree_dir(out, git_repository_workdir(repo), path.ptr, name))) < 0)
@@ -237,7 +245,7 @@ void git_worktree_free(git_worktree *wt)
237
245
 
238
246
  int git_worktree_validate(const git_worktree *wt)
239
247
  {
240
- assert(wt);
248
+ GIT_ASSERT_ARG(wt);
241
249
 
242
250
  if (!is_worktree_dir(wt->gitdir_path)) {
243
251
  git_error_set(GIT_ERROR_WORKTREE,
@@ -259,14 +267,14 @@ int git_worktree_validate(const git_worktree *wt)
259
267
  wt->commondir_path);
260
268
  return GIT_ERROR;
261
269
  }
262
-
270
+
263
271
  if (!git_path_exists(wt->worktree_path)) {
264
272
  git_error_set(GIT_ERROR_WORKTREE,
265
273
  "worktree directory '%s' does not exist",
266
274
  wt->worktree_path);
267
275
  return GIT_ERROR;
268
276
  }
269
-
277
+
270
278
  return 0;
271
279
  }
272
280
 
@@ -304,7 +312,10 @@ int git_worktree_add(git_worktree **out, git_repository *repo,
304
312
  if (opts)
305
313
  memcpy(&wtopts, opts, sizeof(wtopts));
306
314
 
307
- assert(out && repo && name && worktree);
315
+ GIT_ASSERT_ARG(out);
316
+ GIT_ASSERT_ARG(repo);
317
+ GIT_ASSERT_ARG(name);
318
+ GIT_ASSERT_ARG(worktree);
308
319
 
309
320
  *out = NULL;
310
321
 
@@ -417,7 +428,7 @@ int git_worktree_lock(git_worktree *wt, const char *reason)
417
428
  git_buf buf = GIT_BUF_INIT, path = GIT_BUF_INIT;
418
429
  int error;
419
430
 
420
- assert(wt);
431
+ GIT_ASSERT_ARG(wt);
421
432
 
422
433
  if ((error = git_worktree_is_locked(NULL, wt)) < 0)
423
434
  goto out;
@@ -448,7 +459,7 @@ int git_worktree_unlock(git_worktree *wt)
448
459
  git_buf path = GIT_BUF_INIT;
449
460
  int error;
450
461
 
451
- assert(wt);
462
+ GIT_ASSERT_ARG(wt);
452
463
 
453
464
  if ((error = git_worktree_is_locked(NULL, wt)) < 0)
454
465
  return error;
@@ -475,7 +486,7 @@ int git_worktree_is_locked(git_buf *reason, const git_worktree *wt)
475
486
  git_buf path = GIT_BUF_INIT;
476
487
  int error, locked;
477
488
 
478
- assert(wt);
489
+ GIT_ASSERT_ARG(wt);
479
490
 
480
491
  if (reason)
481
492
  git_buf_clear(reason);
@@ -496,13 +507,13 @@ out:
496
507
 
497
508
  const char *git_worktree_name(const git_worktree *wt)
498
509
  {
499
- assert(wt);
510
+ GIT_ASSERT_ARG_WITH_RETVAL(wt, NULL);
500
511
  return wt->name;
501
512
  }
502
513
 
503
514
  const char *git_worktree_path(const git_worktree *wt)
504
515
  {
505
- assert(wt);
516
+ GIT_ASSERT_ARG_WITH_RETVAL(wt, NULL);
506
517
  return wt->worktree_path;
507
518
  }
508
519
 
@@ -581,7 +592,7 @@ int git_worktree_prune(git_worktree *wt,
581
592
  }
582
593
 
583
594
  /* Delete gitdir in parent repository */
584
- if ((err = git_buf_printf(&path, "%s/worktrees/%s", wt->commondir_path, wt->name)) < 0)
595
+ if ((err = git_buf_join3(&path, '/', wt->commondir_path, "worktrees", wt->name)) < 0)
585
596
  goto out;
586
597
  if (!git_path_exists(path.ptr))
587
598
  {
@@ -156,7 +156,7 @@ int git_zstream_get_output(void *out, size_t *out_len, git_zstream *zstream)
156
156
  }
157
157
 
158
158
  /* either we finished the input or we did not flush the data */
159
- assert(zstream->in_len > 0 || zstream->flush == Z_FINISH);
159
+ GIT_ASSERT(zstream->in_len > 0 || zstream->flush == Z_FINISH);
160
160
 
161
161
  /* set out_size to number of bytes actually written to output */
162
162
  *out_len = *out_len - out_remain;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rugged
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chacon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-02 00:00:00.000000000 Z
12
+ date: 2021-09-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake-compiler
@@ -135,6 +135,7 @@ files:
135
135
  - vendor/libgit2/cmake/FindPkgLibraries.cmake
136
136
  - vendor/libgit2/cmake/FindSecurity.cmake
137
137
  - vendor/libgit2/cmake/FindStatNsec.cmake
138
+ - vendor/libgit2/cmake/Findfutimens.cmake
138
139
  - vendor/libgit2/cmake/FindmbedTLS.cmake
139
140
  - vendor/libgit2/cmake/IdeSplitSources.cmake
140
141
  - vendor/libgit2/cmake/PkgBuildConfig.cmake
@@ -142,6 +143,7 @@ files:
142
143
  - vendor/libgit2/cmake/SelectGSSAPI.cmake
143
144
  - vendor/libgit2/cmake/SelectHTTPSBackend.cmake
144
145
  - vendor/libgit2/cmake/SelectHashes.cmake
146
+ - vendor/libgit2/deps/chromium-zlib/CMakeLists.txt
145
147
  - vendor/libgit2/deps/http-parser/CMakeLists.txt
146
148
  - vendor/libgit2/deps/http-parser/COPYING
147
149
  - vendor/libgit2/deps/http-parser/http_parser.c
@@ -160,7 +162,9 @@ files:
160
162
  - vendor/libgit2/deps/ntlmclient/ntlmclient.h
161
163
  - vendor/libgit2/deps/ntlmclient/unicode.h
162
164
  - vendor/libgit2/deps/ntlmclient/unicode_builtin.c
165
+ - vendor/libgit2/deps/ntlmclient/unicode_builtin.h
163
166
  - vendor/libgit2/deps/ntlmclient/unicode_iconv.c
167
+ - vendor/libgit2/deps/ntlmclient/unicode_iconv.h
164
168
  - vendor/libgit2/deps/ntlmclient/utf8.h
165
169
  - vendor/libgit2/deps/ntlmclient/util.c
166
170
  - vendor/libgit2/deps/ntlmclient/util.h
@@ -289,6 +293,7 @@ files:
289
293
  - vendor/libgit2/include/git2/submodule.h
290
294
  - vendor/libgit2/include/git2/sys/alloc.h
291
295
  - vendor/libgit2/include/git2/sys/commit.h
296
+ - vendor/libgit2/include/git2/sys/commit_graph.h
292
297
  - vendor/libgit2/include/git2/sys/config.h
293
298
  - vendor/libgit2/include/git2/sys/cred.h
294
299
  - vendor/libgit2/include/git2/sys/credential.h
@@ -298,6 +303,7 @@ files:
298
303
  - vendor/libgit2/include/git2/sys/index.h
299
304
  - vendor/libgit2/include/git2/sys/mempack.h
300
305
  - vendor/libgit2/include/git2/sys/merge.h
306
+ - vendor/libgit2/include/git2/sys/midx.h
301
307
  - vendor/libgit2/include/git2/sys/odb_backend.h
302
308
  - vendor/libgit2/include/git2/sys/openssl.h
303
309
  - vendor/libgit2/include/git2/sys/path.h
@@ -318,10 +324,12 @@ files:
318
324
  - vendor/libgit2/src/CMakeLists.txt
319
325
  - vendor/libgit2/src/alloc.c
320
326
  - vendor/libgit2/src/alloc.h
327
+ - vendor/libgit2/src/allocators/failalloc.c
328
+ - vendor/libgit2/src/allocators/failalloc.h
321
329
  - vendor/libgit2/src/allocators/stdalloc.c
322
330
  - vendor/libgit2/src/allocators/stdalloc.h
323
- - vendor/libgit2/src/allocators/win32_crtdbg.c
324
- - vendor/libgit2/src/allocators/win32_crtdbg.h
331
+ - vendor/libgit2/src/allocators/win32_leakcheck.c
332
+ - vendor/libgit2/src/allocators/win32_leakcheck.h
325
333
  - vendor/libgit2/src/annotated_commit.c
326
334
  - vendor/libgit2/src/annotated_commit.h
327
335
  - vendor/libgit2/src/apply.c
@@ -343,8 +351,6 @@ files:
343
351
  - vendor/libgit2/src/blob.h
344
352
  - vendor/libgit2/src/branch.c
345
353
  - vendor/libgit2/src/branch.h
346
- - vendor/libgit2/src/buf_text.c
347
- - vendor/libgit2/src/buf_text.h
348
354
  - vendor/libgit2/src/buffer.c
349
355
  - vendor/libgit2/src/buffer.h
350
356
  - vendor/libgit2/src/cache.c
@@ -357,6 +363,8 @@ files:
357
363
  - vendor/libgit2/src/clone.h
358
364
  - vendor/libgit2/src/commit.c
359
365
  - vendor/libgit2/src/commit.h
366
+ - vendor/libgit2/src/commit_graph.c
367
+ - vendor/libgit2/src/commit_graph.h
360
368
  - vendor/libgit2/src/commit_list.c
361
369
  - vendor/libgit2/src/commit_list.h
362
370
  - vendor/libgit2/src/common.h
@@ -405,8 +413,6 @@ files:
405
413
  - vendor/libgit2/src/filter.h
406
414
  - vendor/libgit2/src/futils.c
407
415
  - vendor/libgit2/src/futils.h
408
- - vendor/libgit2/src/global.c
409
- - vendor/libgit2/src/global.h
410
416
  - vendor/libgit2/src/graph.c
411
417
  - vendor/libgit2/src/hash.c
412
418
  - vendor/libgit2/src/hash.h
@@ -441,6 +447,8 @@ files:
441
447
  - vendor/libgit2/src/iterator.c
442
448
  - vendor/libgit2/src/iterator.h
443
449
  - vendor/libgit2/src/khash.h
450
+ - vendor/libgit2/src/libgit2.c
451
+ - vendor/libgit2/src/libgit2.h
444
452
  - vendor/libgit2/src/mailmap.c
445
453
  - vendor/libgit2/src/mailmap.h
446
454
  - vendor/libgit2/src/map.h
@@ -527,7 +535,9 @@ files:
527
535
  - vendor/libgit2/src/revparse.c
528
536
  - vendor/libgit2/src/revwalk.c
529
537
  - vendor/libgit2/src/revwalk.h
530
- - vendor/libgit2/src/settings.c
538
+ - vendor/libgit2/src/runtime.c
539
+ - vendor/libgit2/src/runtime.h
540
+ - vendor/libgit2/src/settings.h
531
541
  - vendor/libgit2/src/signature.c
532
542
  - vendor/libgit2/src/signature.h
533
543
  - vendor/libgit2/src/sortedcache.c
@@ -541,6 +551,10 @@ files:
541
551
  - vendor/libgit2/src/streams/mbedtls.h
542
552
  - vendor/libgit2/src/streams/openssl.c
543
553
  - vendor/libgit2/src/streams/openssl.h
554
+ - vendor/libgit2/src/streams/openssl_dynamic.c
555
+ - vendor/libgit2/src/streams/openssl_dynamic.h
556
+ - vendor/libgit2/src/streams/openssl_legacy.c
557
+ - vendor/libgit2/src/streams/openssl_legacy.h
544
558
  - vendor/libgit2/src/streams/registry.c
545
559
  - vendor/libgit2/src/streams/registry.h
546
560
  - vendor/libgit2/src/streams/socket.c
@@ -558,8 +572,10 @@ files:
558
572
  - vendor/libgit2/src/sysdir.h
559
573
  - vendor/libgit2/src/tag.c
560
574
  - vendor/libgit2/src/tag.h
561
- - vendor/libgit2/src/thread-utils.c
562
- - vendor/libgit2/src/thread-utils.h
575
+ - vendor/libgit2/src/thread.c
576
+ - vendor/libgit2/src/thread.h
577
+ - vendor/libgit2/src/threadstate.c
578
+ - vendor/libgit2/src/threadstate.h
563
579
  - vendor/libgit2/src/trace.c
564
580
  - vendor/libgit2/src/trace.h
565
581
  - vendor/libgit2/src/trailer.c
@@ -597,6 +613,8 @@ files:
597
613
  - vendor/libgit2/src/unix/pthread.h
598
614
  - vendor/libgit2/src/unix/realpath.c
599
615
  - vendor/libgit2/src/userdiff.h
616
+ - vendor/libgit2/src/utf8.c
617
+ - vendor/libgit2/src/utf8.h
600
618
  - vendor/libgit2/src/util.c
601
619
  - vendor/libgit2/src/util.h
602
620
  - vendor/libgit2/src/varint.c
@@ -630,10 +648,8 @@ files:
630
648
  - vendor/libgit2/src/win32/w32_buffer.c
631
649
  - vendor/libgit2/src/win32/w32_buffer.h
632
650
  - vendor/libgit2/src/win32/w32_common.h
633
- - vendor/libgit2/src/win32/w32_crtdbg_stacktrace.c
634
- - vendor/libgit2/src/win32/w32_crtdbg_stacktrace.h
635
- - vendor/libgit2/src/win32/w32_stack.c
636
- - vendor/libgit2/src/win32/w32_stack.h
651
+ - vendor/libgit2/src/win32/w32_leakcheck.c
652
+ - vendor/libgit2/src/win32/w32_leakcheck.h
637
653
  - vendor/libgit2/src/win32/w32_util.c
638
654
  - vendor/libgit2/src/win32/w32_util.h
639
655
  - vendor/libgit2/src/win32/win32-compat.h
@@ -660,7 +676,7 @@ homepage: https://github.com/libgit2/rugged
660
676
  licenses:
661
677
  - MIT
662
678
  metadata:
663
- msys2_mingw_dependencies: libssh2
679
+ msys2_mingw_dependencies: libssh2 cmake
664
680
  post_install_message:
665
681
  rdoc_options: []
666
682
  require_paths: