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
@@ -168,6 +168,10 @@ typedef enum {
168
168
  * can apply given diff information to binary files.
169
169
  */
170
170
  GIT_DIFF_SHOW_BINARY = (1u << 30),
171
+
172
+ /** Ignore blank lines */
173
+ GIT_DIFF_IGNORE_BLANK_LINES = (1u << 31),
174
+
171
175
  } git_diff_option_t;
172
176
 
173
177
  /**
@@ -237,32 +241,43 @@ typedef enum {
237
241
  * Although this is called a "file", it could represent a file, a symbolic
238
242
  * link, a submodule commit id, or even a tree (although that only if you
239
243
  * are tracking type changes or ignored/untracked directories).
240
- *
241
- * The `id` is the `git_oid` of the item. If the entry represents an
242
- * absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),
243
- * then the oid will be zeroes.
244
- *
245
- * `path` is the NUL-terminated path to the entry relative to the working
246
- * directory of the repository.
247
- *
248
- * `size` is the size of the entry in bytes.
249
- *
250
- * `flags` is a combination of the `git_diff_flag_t` types
251
- *
252
- * `mode` is, roughly, the stat() `st_mode` value for the item. This will
253
- * be restricted to one of the `git_filemode_t` values.
254
- *
255
- * The `id_abbrev` represents the known length of the `id` field, when
256
- * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this
257
- * delta was created from reading a patch file, in which case it may be
258
- * abbreviated to something reasonable, like 7 characters.
259
244
  */
260
245
  typedef struct {
246
+ /**
247
+ * The `git_oid` of the item. If the entry represents an
248
+ * absent side of a diff (e.g. the `old_file` of a `GIT_DELTA_ADDED` delta),
249
+ * then the oid will be zeroes.
250
+ */
261
251
  git_oid id;
252
+
253
+ /**
254
+ * The NUL-terminated path to the entry relative to the working
255
+ * directory of the repository.
256
+ */
262
257
  const char *path;
258
+
259
+ /**
260
+ * The size of the entry in bytes.
261
+ */
263
262
  git_object_size_t size;
263
+
264
+ /**
265
+ * A combination of the `git_diff_flag_t` types
266
+ */
264
267
  uint32_t flags;
268
+
269
+ /**
270
+ * Roughly, the stat() `st_mode` value for the item. This will
271
+ * be restricted to one of the `git_filemode_t` values.
272
+ */
265
273
  uint16_t mode;
274
+
275
+ /**
276
+ * Represents the known length of the `id` field, when
277
+ * converted to a hex string. It is generally `GIT_OID_HEXSZ`, unless this
278
+ * delta was created from reading a patch file, in which case it may be
279
+ * abbreviated to something reasonable, like 7 characters.
280
+ */
266
281
  uint16_t id_abbrev;
267
282
  } git_diff_file;
268
283
 
@@ -42,14 +42,14 @@ typedef enum {
42
42
  GIT_ECONFLICT = -13, /**< Checkout conflicts prevented operation */
43
43
  GIT_ELOCKED = -14, /**< Lock file prevented operation */
44
44
  GIT_EMODIFIED = -15, /**< Reference value does not match expected */
45
- GIT_EAUTH = -16, /**< Authentication error */
46
- GIT_ECERTIFICATE = -17, /**< Server certificate is invalid */
45
+ GIT_EAUTH = -16, /**< Authentication error */
46
+ GIT_ECERTIFICATE = -17, /**< Server certificate is invalid */
47
47
  GIT_EAPPLIED = -18, /**< Patch/merge has already been applied */
48
- GIT_EPEEL = -19, /**< The requested peel operation is not possible */
49
- GIT_EEOF = -20, /**< Unexpected EOF */
50
- GIT_EINVALID = -21, /**< Invalid operation or input */
48
+ GIT_EPEEL = -19, /**< The requested peel operation is not possible */
49
+ GIT_EEOF = -20, /**< Unexpected EOF */
50
+ GIT_EINVALID = -21, /**< Invalid operation or input */
51
51
  GIT_EUNCOMMITTED = -22, /**< Uncommitted changes in index prevented operation */
52
- GIT_EDIRECTORY = -23, /**< The operation is not valid for a directory */
52
+ GIT_EDIRECTORY = -23, /**< The operation is not valid for a directory */
53
53
  GIT_EMERGECONFLICT = -24, /**< A merge conflict exists and cannot continue */
54
54
 
55
55
  GIT_PASSTHROUGH = -30, /**< A user-configured callback refused to act */
@@ -49,8 +49,33 @@ typedef enum {
49
49
 
50
50
  /** Load attributes from `.gitattributes` in the root of HEAD */
51
51
  GIT_FILTER_ATTRIBUTES_FROM_HEAD = (1u << 2),
52
+
53
+ /**
54
+ * Load attributes from `.gitattributes` in a given commit.
55
+ * This can only be specified in a `git_filter_options`.
56
+ */
57
+ GIT_FILTER_ATTRIBUTES_FROM_COMMIT = (1u << 3),
52
58
  } git_filter_flag_t;
53
59
 
60
+ /**
61
+ * Filtering options
62
+ */
63
+ typedef struct {
64
+ unsigned int version;
65
+
66
+ /** See `git_filter_flag_t` above */
67
+ uint32_t flags;
68
+
69
+ /**
70
+ * The commit to load attributes from, when
71
+ * `GIT_FILTER_ATTRIBUTES_FROM_COMMIT` is specified.
72
+ */
73
+ git_oid *commit_id;
74
+ } git_filter_options;
75
+
76
+ #define GIT_FILTER_OPTIONS_VERSION 1
77
+ #define GIT_FILTER_OPTIONS_INIT {GIT_FILTER_OPTIONS_VERSION}
78
+
54
79
  /**
55
80
  * A filter that can transform file data
56
81
  *
@@ -103,6 +128,29 @@ GIT_EXTERN(int) git_filter_list_load(
103
128
  git_filter_mode_t mode,
104
129
  uint32_t flags);
105
130
 
131
+ /**
132
+ * Load the filter list for a given path.
133
+ *
134
+ * This will return 0 (success) but set the output git_filter_list to NULL
135
+ * if no filters are requested for the given file.
136
+ *
137
+ * @param filters Output newly created git_filter_list (or NULL)
138
+ * @param repo Repository object that contains `path`
139
+ * @param blob The blob to which the filter will be applied (if known)
140
+ * @param path Relative path of the file to be filtered
141
+ * @param mode Filtering direction (WT->ODB or ODB->WT)
142
+ * @param opts The `git_filter_options` to use when loading filters
143
+ * @return 0 on success (which could still return NULL if no filters are
144
+ * needed for the requested file), <0 on error
145
+ */
146
+ GIT_EXTERN(int) git_filter_list_load_ext(
147
+ git_filter_list **filters,
148
+ git_repository *repo,
149
+ git_blob *blob,
150
+ const char *path,
151
+ git_filter_mode_t mode,
152
+ git_filter_options *opts);
153
+
106
154
  /**
107
155
  * Query the filter list to see if a given filter (by name) will run.
108
156
  * The built-in filters "crlf" and "ident" can be queried, otherwise this
@@ -122,27 +170,17 @@ GIT_EXTERN(int) git_filter_list_contains(
122
170
  /**
123
171
  * Apply filter list to a data buffer.
124
172
  *
125
- * See `git2/buffer.h` for background on `git_buf` objects.
126
- *
127
- * If the `in` buffer holds data allocated by libgit2 (i.e. `in->asize` is
128
- * not zero), then it will be overwritten when applying the filters. If
129
- * not, then it will be left untouched.
130
- *
131
- * If there are no filters to apply (or `filters` is NULL), then the `out`
132
- * buffer will reference the `in` buffer data (with `asize` set to zero)
133
- * instead of allocating data. This keeps allocations to a minimum, but
134
- * it means you have to be careful about freeing the `in` data since `out`
135
- * may be pointing to it!
136
- *
137
173
  * @param out Buffer to store the result of the filtering
138
174
  * @param filters A loaded git_filter_list (or NULL)
139
175
  * @param in Buffer containing the data to filter
176
+ * @param in_len The length of the input buffer
140
177
  * @return 0 on success, an error code otherwise
141
178
  */
142
- GIT_EXTERN(int) git_filter_list_apply_to_data(
179
+ GIT_EXTERN(int) git_filter_list_apply_to_buffer(
143
180
  git_buf *out,
144
181
  git_filter_list *filters,
145
- git_buf *in);
182
+ const char *in,
183
+ size_t in_len);
146
184
 
147
185
  /**
148
186
  * Apply a filter list to the contents of a file on disk
@@ -175,12 +213,14 @@ GIT_EXTERN(int) git_filter_list_apply_to_blob(
175
213
  * Apply a filter list to an arbitrary buffer as a stream
176
214
  *
177
215
  * @param filters the list of filters to apply
178
- * @param data the buffer to filter
216
+ * @param buffer the buffer to filter
217
+ * @param len the size of the buffer
179
218
  * @param target the stream into which the data will be written
180
219
  */
181
- GIT_EXTERN(int) git_filter_list_stream_data(
220
+ GIT_EXTERN(int) git_filter_list_stream_buffer(
182
221
  git_filter_list *filters,
183
- git_buf *data,
222
+ const char *buffer,
223
+ size_t len,
184
224
  git_writestream *target);
185
225
 
186
226
  /**
@@ -43,8 +43,9 @@ GIT_EXTERN(int) git_graph_ahead_behind(size_t *ahead, size_t *behind, git_reposi
43
43
  * Note that a commit is not considered a descendant of itself, in contrast
44
44
  * to `git merge-base --is-ancestor`.
45
45
  *
46
- * @param commit a previously loaded commit.
47
- * @param ancestor a potential ancestor commit.
46
+ * @param repo the repository where the commits exist
47
+ * @param commit a previously loaded commit
48
+ * @param ancestor a potential ancestor commit
48
49
  * @return 1 if the given commit is a descendant of the potential ancestor,
49
50
  * 0 if not, error code otherwise.
50
51
  */
@@ -53,6 +54,23 @@ GIT_EXTERN(int) git_graph_descendant_of(
53
54
  const git_oid *commit,
54
55
  const git_oid *ancestor);
55
56
 
57
+ /**
58
+ * Determine if a commit is reachable from any of a list of commits by
59
+ * following parent edges.
60
+ *
61
+ * @param repo the repository where the commits exist
62
+ * @param commit a previously loaded commit
63
+ * @param length the number of commits in the provided `descendant_array`
64
+ * @param descendant_array oids of the commits
65
+ * @return 1 if the given commit is an ancestor of any of the given potential
66
+ * descendants, 0 if not, error code otherwise.
67
+ */
68
+ GIT_EXTERN(int) git_graph_reachable_from_any(
69
+ git_repository *repo,
70
+ const git_oid *commit,
71
+ const git_oid descendant_array[],
72
+ size_t length);
73
+
56
74
  /** @} */
57
75
  GIT_END_DECL
58
76
  #endif
@@ -702,7 +702,7 @@ GIT_EXTERN(int) git_index_update_all(
702
702
  * @param at_pos the address to which the position of the index entry is written (optional)
703
703
  * @param index an existing index object
704
704
  * @param path path to search
705
- * @return 0 with valid value in at_pos; an error code otherwise
705
+ * @return 0 or an error code
706
706
  */
707
707
  GIT_EXTERN(int) git_index_find(size_t *at_pos, git_index *index, const char *path);
708
708
 
@@ -713,7 +713,7 @@ GIT_EXTERN(int) git_index_find(size_t *at_pos, git_index *index, const char *pat
713
713
  * @param at_pos the address to which the position of the index entry is written (optional)
714
714
  * @param index an existing index object
715
715
  * @param prefix the prefix to search for
716
- * @return 0 with valid value in at_pos; an error code otherwise
716
+ * @return 0 or an error code
717
717
  */
718
718
  GIT_EXTERN(int) git_index_find_prefix(size_t *at_pos, git_index *index, const char *prefix);
719
719
 
@@ -390,6 +390,20 @@ GIT_EXTERN(int) git_odb_write_pack(
390
390
  git_indexer_progress_cb progress_cb,
391
391
  void *progress_payload);
392
392
 
393
+ /**
394
+ * Write a `multi-pack-index` file from all the `.pack` files in the ODB.
395
+ *
396
+ * If the ODB layer understands pack files, then this will create a file called
397
+ * `multi-pack-index` next to the `.pack` and `.idx` files, which will contain
398
+ * an index of all objects stored in `.pack` files. This will allow for
399
+ * O(log n) lookup for n objects (regardless of how many packfiles there
400
+ * exist).
401
+ *
402
+ * @param db object database where the `multi-pack-index` file will be written.
403
+ */
404
+ GIT_EXTERN(int) git_odb_write_multi_pack_index(
405
+ git_odb *db);
406
+
393
407
  /**
394
408
  * Determine the object-ID (sha1 hash) of a data buffer
395
409
  *
@@ -539,6 +553,21 @@ GIT_EXTERN(size_t) git_odb_num_backends(git_odb *odb);
539
553
  */
540
554
  GIT_EXTERN(int) git_odb_get_backend(git_odb_backend **out, git_odb *odb, size_t pos);
541
555
 
556
+ /**
557
+ * Set the git commit-graph for the ODB.
558
+ *
559
+ * After a successfull call, the ownership of the cgraph parameter will be
560
+ * transferred to libgit2, and the caller should not free it.
561
+ *
562
+ * The commit-graph can also be unset by explicitly passing NULL as the cgraph
563
+ * parameter.
564
+ *
565
+ * @param odb object database
566
+ * @param cgraph the git commit-graph
567
+ * @return 0 on success; error code otherwise
568
+ */
569
+ GIT_EXTERN(int) git_odb_set_commit_graph(git_odb *odb, git_commit_graph *cgraph);
570
+
542
571
  /** @} */
543
572
  GIT_END_DECL
544
573
  #endif
@@ -28,6 +28,14 @@ GIT_BEGIN_DECL
28
28
  */
29
29
  typedef struct git_patch git_patch;
30
30
 
31
+ /**
32
+ * Get the repository associated with this patch. May be NULL.
33
+ *
34
+ * @param patch the patch
35
+ * @return a pointer to the repository
36
+ */
37
+ GIT_EXTERN(git_repository *) git_patch_owner(const git_patch *patch);
38
+
31
39
  /**
32
40
  * Return a patch for an entry in the diff list.
33
41
  *
@@ -74,14 +74,38 @@ typedef struct {
74
74
  */
75
75
  git_checkout_options checkout_options;
76
76
 
77
+ /**
78
+ * Optional callback that allows users to override commit
79
+ * creation in `git_rebase_commit`. If specified, users can
80
+ * create their own commit and provide the commit ID, which
81
+ * may be useful for signing commits or otherwise customizing
82
+ * the commit creation.
83
+ *
84
+ * If this callback returns `GIT_PASSTHROUGH`, then
85
+ * `git_rebase_commit` will continue to create the commit.
86
+ */
87
+ git_commit_create_cb commit_create_cb;
88
+
89
+ #ifdef GIT_DEPRECATE_HARD
90
+ void *reserved;
91
+ #else
77
92
  /**
78
93
  * If provided, this will be called with the commit content, allowing
79
94
  * a signature to be added to the rebase commit. Can be skipped with
80
95
  * GIT_PASSTHROUGH. If GIT_PASSTHROUGH is returned, a commit will be made
81
96
  * without a signature.
97
+ *
82
98
  * This field is only used when performing git_rebase_commit.
99
+ *
100
+ * This callback is not invoked if a `git_commit_create_cb` is
101
+ * specified.
102
+ *
103
+ * This callback is deprecated; users should provide a
104
+ * creation callback as `commit_create_cb` that produces a
105
+ * commit buffer, signs it, and commits it.
83
106
  */
84
- git_commit_signing_cb signing_cb;
107
+ int (*signing_cb)(git_buf *, git_buf *, const char *, void *);
108
+ #endif
85
109
 
86
110
  /**
87
111
  * This will be passed to each of the callbacks in this struct
@@ -97,6 +97,9 @@ GIT_EXTERN(int) git_reference_dwim(git_reference **out, git_repository *repo, co
97
97
  * of updating does not match the one passed through `current_value`
98
98
  * (i.e. if the ref has changed since the user read it).
99
99
  *
100
+ * If `current_value` is all zeros, this function will return GIT_EMODIFIED
101
+ * if the ref already exists.
102
+ *
100
103
  * @param out Pointer to the newly created reference
101
104
  * @param repo Repository where that reference will live
102
105
  * @param name The name of the reference
@@ -743,10 +746,11 @@ GIT_EXTERN(int) git_reference_peel(
743
746
  * the characters '~', '^', ':', '\\', '?', '[', and '*', and the
744
747
  * sequences ".." and "@{" which have special meaning to revparse.
745
748
  *
749
+ * @param valid output pointer to set with validity of given reference name
746
750
  * @param refname name to be checked.
747
- * @return 1 if the reference name is acceptable; 0 if it isn't
751
+ * @return 0 on success or an error code
748
752
  */
749
- GIT_EXTERN(int) git_reference_is_valid_name(const char *refname);
753
+ GIT_EXTERN(int) git_reference_name_is_valid(int *valid, const char *refname);
750
754
 
751
755
  /**
752
756
  * Get the reference's short name
@@ -212,7 +212,8 @@ GIT_EXTERN(const char *) git_remote_name(const git_remote *remote);
212
212
  * Get the remote's url
213
213
  *
214
214
  * If url.*.insteadOf has been configured for this URL, it will
215
- * return the modified URL.
215
+ * return the modified URL. If `git_remote_set_instance_pushurl`
216
+ * has been called for this remote, then that URL will be returned.
216
217
  *
217
218
  * @param remote the remote
218
219
  * @return a pointer to the url
@@ -220,10 +221,11 @@ GIT_EXTERN(const char *) git_remote_name(const git_remote *remote);
220
221
  GIT_EXTERN(const char *) git_remote_url(const git_remote *remote);
221
222
 
222
223
  /**
223
- * Get the remote's url for pushing
224
+ * Get the remote's url for pushing.
224
225
  *
225
226
  * If url.*.pushInsteadOf has been configured for this URL, it
226
- * will return the modified URL.
227
+ * will return the modified URL. If `git_remote_set_instance_pushurl`
228
+ * has been called for this remote, then that URL will be returned.
227
229
  *
228
230
  * @param remote the remote
229
231
  * @return a pointer to the url or NULL if no special url for pushing is set
@@ -253,9 +255,30 @@ GIT_EXTERN(int) git_remote_set_url(git_repository *repo, const char *remote, con
253
255
  * @param repo the repository in which to perform the change
254
256
  * @param remote the remote's name
255
257
  * @param url the url to set
258
+ * @return 0, or an error code
256
259
  */
257
260
  GIT_EXTERN(int) git_remote_set_pushurl(git_repository *repo, const char *remote, const char* url);
258
261
 
262
+ /**
263
+ * Set the url for this particular url instance. The URL in the
264
+ * configuration will be ignored, and will not be changed.
265
+ *
266
+ * @param remote the remote's name
267
+ * @param url the url to set
268
+ * @return 0 or an error value
269
+ */
270
+ GIT_EXTERN(int) git_remote_set_instance_url(git_remote *remote, const char *url);
271
+
272
+ /**
273
+ * Set the push url for this particular url instance. The URL in the
274
+ * configuration will be ignored, and will not be changed.
275
+ *
276
+ * @param remote the remote's name
277
+ * @param url the url to set
278
+ * @return 0 or an error value
279
+ */
280
+ GIT_EXTERN(int) git_remote_set_instance_pushurl(git_remote *remote, const char *url);
281
+
259
282
  /**
260
283
  * Add a fetch refspec to the remote's configuration
261
284
  *
@@ -476,6 +499,7 @@ typedef int GIT_CALLBACK(git_push_negotiation)(const git_push_update **updates,
476
499
  */
477
500
  typedef int GIT_CALLBACK(git_push_update_reference_cb)(const char *refname, const char *status, void *data);
478
501
 
502
+ #ifndef GIT_DEPRECATE_HARD
479
503
  /**
480
504
  * Callback to resolve URLs before connecting to remote
481
505
  *
@@ -487,8 +511,22 @@ typedef int GIT_CALLBACK(git_push_update_reference_cb)(const char *refname, cons
487
511
  * @param direction GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH
488
512
  * @param payload Payload provided by the caller
489
513
  * @return 0 on success, GIT_PASSTHROUGH or an error
514
+ * @deprecated Use `git_remote_set_instance_url`
490
515
  */
491
516
  typedef int GIT_CALLBACK(git_url_resolve_cb)(git_buf *url_resolved, const char *url, int direction, void *payload);
517
+ #endif
518
+
519
+ /**
520
+ * Callback invoked immediately before we attempt to connect to the
521
+ * given url. Callers may change the URL before the connection by
522
+ * calling `git_remote_set_instance_url` in the callback.
523
+ *
524
+ * @param remote The remote to be connected
525
+ * @param direction GIT_DIRECTION_FETCH or GIT_DIRECTION_PUSH
526
+ * @param payload Payload provided by the caller
527
+ * @return 0 on success, or an error
528
+ */
529
+ typedef int GIT_CALLBACK(git_remote_ready_cb)(git_remote *remote, int direction, void *payload);
492
530
 
493
531
  /**
494
532
  * The callback settings structure
@@ -574,17 +612,29 @@ struct git_remote_callbacks {
574
612
  */
575
613
  git_transport_cb transport;
576
614
 
615
+ /**
616
+ * Callback when the remote is ready to connect.
617
+ */
618
+ git_remote_ready_cb remote_ready;
619
+
577
620
  /**
578
621
  * This will be passed to each of the callbacks in this struct
579
622
  * as the last parameter.
580
623
  */
581
624
  void *payload;
582
625
 
626
+ #ifdef GIT_DEPRECATE_HARD
627
+ void *reserved;
628
+ #else
583
629
  /**
584
630
  * Resolve URL before connecting to remote.
585
631
  * The returned URL will be used to connect to the remote instead.
632
+ *
633
+ * This callback is deprecated; users should use
634
+ * git_remote_ready_cb and configure the instance URL instead.
586
635
  */
587
636
  git_url_resolve_cb resolve_url;
637
+ #endif
588
638
  };
589
639
 
590
640
  #define GIT_REMOTE_CALLBACKS_VERSION 1
@@ -876,8 +926,10 @@ GIT_EXTERN(git_remote_autotag_option_t) git_remote_autotag(const git_remote *rem
876
926
  * @param repo the repository in which to make the change
877
927
  * @param remote the name of the remote
878
928
  * @param value the new value to take.
929
+ * @return 0, or an error code.
879
930
  */
880
931
  GIT_EXTERN(int) git_remote_set_autotag(git_repository *repo, const char *remote, git_remote_autotag_option_t value);
932
+
881
933
  /**
882
934
  * Retrieve the ref-prune setting
883
935
  *
@@ -915,10 +967,11 @@ GIT_EXTERN(int) git_remote_rename(
915
967
  /**
916
968
  * Ensure the remote name is well-formed.
917
969
  *
970
+ * @param valid output pointer to set with validity of given remote name
918
971
  * @param remote_name name to be checked.
919
- * @return 1 if the reference name is acceptable; 0 if it isn't
972
+ * @return 0 on success or an error code
920
973
  */
921
- GIT_EXTERN(int) git_remote_is_valid_name(const char *remote_name);
974
+ int git_remote_name_is_valid(int *valid, const char *remote_name);
922
975
 
923
976
  /**
924
977
  * Delete an existing persisted remote.
@@ -943,7 +996,7 @@ GIT_EXTERN(int) git_remote_delete(git_repository *repo, const char *name);
943
996
  *
944
997
  * This function must only be called after connecting.
945
998
  *
946
- * @param out the buffern in which to store the reference name
999
+ * @param out the buffer in which to store the reference name
947
1000
  * @param remote the remote
948
1001
  * @return 0, GIT_ENOTFOUND if the remote does not have any references
949
1002
  * or none of them point to HEAD's commit, or an error message.